Hex Artifact Content
Not logged in

Artifact b4452278074571a9186daebbae190b8564c368b3:


0000: 23 20 2d 2a 2d 20 74 63 6c 73 68 20 2d 2a 2d 0a  # -*- tclsh -*-.
0010: 23 20 46 49 4c 45 3a 20 74 63 6c 72 65 61 64 6c  # FILE: tclreadl
0020: 69 6e 65 43 6f 6d 70 6c 65 74 65 72 2e 74 63 6c  ineCompleter.tcl
0030: 0a 23 20 24 49 64 24 0a 23 20 2d 2d 2d 0a 23 20  .# $Id$.# ---.# 
0040: 74 63 6c 72 65 61 64 6c 69 6e 65 20 2d 2d 20 67  tclreadline -- g
0050: 6e 75 20 72 65 61 64 6c 69 6e 65 20 66 6f 72 20  nu readline for 
0060: 74 63 6c 0a 23 20 68 74 74 70 3a 2f 2f 77 77 77  tcl.# http://www
0070: 2e 7a 65 6c 6c 6e 65 72 2e 6f 72 67 2f 74 63 6c  .zellner.org/tcl
0080: 72 65 61 64 6c 69 6e 65 2f 0a 23 20 43 6f 70 79  readline/.# Copy
0090: 72 69 67 68 74 20 28 63 29 20 31 39 39 38 20 2d  right (c) 1998 -
00a0: 20 32 30 31 34 2c 20 4a 6f 68 61 6e 6e 65 73 20   2014, Johannes 
00b0: 5a 65 6c 6c 6e 65 72 20 3c 6a 6f 68 61 6e 6e 65  Zellner <johanne
00c0: 73 40 7a 65 6c 6c 6e 65 72 2e 6f 72 67 3e 0a 23  s@zellner.org>.#
00d0: 20 54 68 69 73 20 73 6f 66 74 77 61 72 65 20 69   This software i
00e0: 73 20 63 6f 70 79 72 69 67 68 74 20 75 6e 64 65  s copyright unde
00f0: 72 20 74 68 65 20 42 53 44 20 6c 69 63 65 6e 73  r the BSD licens
0100: 65 2e 0a 23 20 2d 2d 2d 0a 0a 0a 23 20 54 4f 44  e..# ---...# TOD
0110: 4f 3a 0a 23 0a 23 20 20 20 2d 20 74 63 6c 74 65  O:.#.#   - tclte
0120: 73 74 20 69 73 20 6d 69 73 73 69 6e 67 0a 23 20  st is missing.# 
0130: 20 20 2d 20 62 65 74 74 65 72 20 63 6f 6d 70 6c    - better compl
0140: 65 74 69 6f 6e 20 66 6f 72 20 43 6f 6d 70 6c 65  etion for Comple
0150: 74 65 4c 69 73 74 46 72 6f 6d 4c 69 73 74 3a 0a  teListFromList:.
0160: 23 20 20 20 20 20 52 65 6d 6f 76 65 55 73 65 64  #     RemoveUsed
0170: 4f 70 74 69 6f 6e 73 20 2e 2e 2e 0a 23 20 20 20  Options ....#   
0180: 2d 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c  - namespace eval
0190: 20 66 72 65 64 20 7b 2e 2e 2e 20 3c 2d 2d 20 63   fred {... <-- c
01a0: 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 61 0a 23  ontinue with a.#
01b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
01c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
01d0: 20 20 73 75 62 73 74 69 74 75 74 69 6f 6e 20 69    substitution i
01e0: 6e 20 66 72 65 64 2e 0a 23 20 20 20 2d 20 73 65  n fred..#   - se
01f0: 74 20 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 70  t tclreadline::p
0200: 72 6f 3c 74 61 62 3e 20 64 6f 65 73 6e 27 74 20  ro<tab> doesn't 
0210: 77 6f 72 6b 0a 23 20 20 20 20 20 73 65 74 20 3a  work.#     set :
0220: 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 70 72  :tclreadline::pr
0230: 6f 3c 74 61 62 3e 20 64 6f 65 73 0a 23 0a 23 20  o<tab> does.#.# 
0240: 20 20 2d 20 54 65 78 74 4f 62 6a 20 2e 2e 2e 0a    - TextObj ....
0250: 23 0a 0a 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65  #....namespace e
0260: 76 61 6c 20 74 63 6c 72 65 61 64 6c 69 6e 65 20  val tclreadline 
0270: 7b 0a 0a 20 20 20 20 23 20 74 68 65 20 66 6f 6c  {..    # the fol
0280: 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 61 72 65  lowing three are
0290: 20 66 72 6f 6d 20 74 68 65 20 69 63 63 63 6d 0a   from the icccm.
02a0: 20 20 20 20 23 20 61 6e 64 20 75 73 65 64 20 69      # and used i
02b0: 6e 20 63 6f 6d 70 6c 65 74 65 28 73 65 6c 65 63  n complete(selec
02c0: 74 69 6f 6e 29 20 61 6e 64 0a 20 20 20 20 23 20  tion) and.    # 
02d0: 64 65 73 63 65 6e 64 61 6e 74 73 2e 0a 20 20 20  descendants..   
02e0: 20 23 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20   #.    variable 
02f0: 73 65 6c 65 63 74 69 6f 6e 2d 73 65 6c 65 63 74  selection-select
0300: 69 6f 6e 73 20 7b 0a 20 20 20 20 20 20 20 20 50  ions {.        P
0310: 52 49 4d 41 52 59 20 53 45 43 4f 4e 44 41 52 59  RIMARY SECONDARY
0320: 20 43 4c 49 50 42 4f 41 52 44 0a 20 20 20 20 7d   CLIPBOARD.    }
0330: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 73 65  .    variable se
0340: 6c 65 63 74 69 6f 6e 2d 74 79 70 65 73 20 7b 0a  lection-types {.
0350: 20 20 20 20 20 20 20 20 41 44 4f 42 45 5f 50 4f          ADOBE_PO
0360: 52 54 41 42 4c 45 5f 44 4f 43 55 4d 45 4e 54 5f  RTABLE_DOCUMENT_
0370: 46 4f 52 4d 41 54 0a 20 20 20 20 20 20 20 20 41  FORMAT.        A
0380: 50 50 4c 45 5f 50 49 43 54 0a 20 20 20 20 20 20  PPLE_PICT.      
0390: 20 20 42 41 43 4b 47 52 4f 55 4e 44 0a 20 20 20    BACKGROUND.   
03a0: 20 20 20 20 20 42 49 54 4d 41 50 0a 20 20 20 20       BITMAP.    
03b0: 20 20 20 20 43 48 41 52 41 43 54 45 52 5f 50 4f      CHARACTER_PO
03c0: 53 49 54 49 4f 4e 0a 20 20 20 20 20 20 20 20 43  SITION.        C
03d0: 4c 41 53 53 0a 20 20 20 20 20 20 20 20 43 4c 49  LASS.        CLI
03e0: 45 4e 54 5f 57 49 4e 44 4f 57 0a 20 20 20 20 20  ENT_WINDOW.     
03f0: 20 20 20 43 4f 4c 4f 52 4d 41 50 0a 20 20 20 20     COLORMAP.    
0400: 20 20 20 20 43 4f 4c 55 4d 4e 5f 4e 55 4d 42 45      COLUMN_NUMBE
0410: 52 0a 20 20 20 20 20 20 20 20 43 4f 4d 50 4f 55  R.        COMPOU
0420: 4e 44 5f 54 45 58 54 0a 20 20 20 20 20 20 20 20  ND_TEXT.        
0430: 44 45 4c 45 54 45 0a 20 20 20 20 20 20 20 20 44  DELETE.        D
0440: 52 41 57 41 42 4c 45 0a 20 20 20 20 20 20 20 20  RAWABLE.        
0450: 45 4e 43 41 50 53 55 4c 41 54 45 44 5f 50 4f 53  ENCAPSULATED_POS
0460: 54 53 43 52 49 50 54 0a 20 20 20 20 20 20 20 20  TSCRIPT.        
0470: 45 4e 43 41 50 53 55 4c 41 54 45 44 5f 50 4f 53  ENCAPSULATED_POS
0480: 54 53 43 52 49 50 54 5f 49 4e 54 45 52 43 48 41  TSCRIPT_INTERCHA
0490: 4e 47 45 0a 20 20 20 20 20 20 20 20 46 49 4c 45  NGE.        FILE
04a0: 5f 4e 41 4d 45 0a 20 20 20 20 20 20 20 20 46 4f  _NAME.        FO
04b0: 52 45 47 52 4f 55 4e 44 0a 20 20 20 20 20 20 20  REGROUND.       
04c0: 20 48 4f 53 54 5f 4e 41 4d 45 0a 20 20 20 20 20   HOST_NAME.     
04d0: 20 20 20 49 4e 53 45 52 54 5f 50 52 4f 50 45 52     INSERT_PROPER
04e0: 54 59 0a 20 20 20 20 20 20 20 20 49 4e 53 45 52  TY.        INSER
04f0: 54 5f 53 45 4c 45 43 54 49 4f 4e 0a 20 20 20 20  T_SELECTION.    
0500: 20 20 20 20 4c 45 4e 47 54 48 0a 20 20 20 20 20      LENGTH.     
0510: 20 20 20 4c 49 4e 45 5f 4e 55 4d 42 45 52 0a 20     LINE_NUMBER. 
0520: 20 20 20 20 20 20 20 4c 49 53 54 5f 4c 45 4e 47         LIST_LENG
0530: 54 48 0a 20 20 20 20 20 20 20 20 4d 4f 44 55 4c  TH.        MODUL
0540: 45 0a 20 20 20 20 20 20 20 20 4d 55 4c 54 49 50  E.        MULTIP
0550: 4c 45 0a 20 20 20 20 20 20 20 20 4e 41 4d 45 0a  LE.        NAME.
0560: 20 20 20 20 20 20 20 20 4f 44 49 46 0a 20 20 20          ODIF.   
0570: 20 20 20 20 20 4f 57 4e 45 52 5f 4f 53 0a 20 20       OWNER_OS.  
0580: 20 20 20 20 20 20 50 49 58 4d 41 50 0a 20 20 20        PIXMAP.   
0590: 20 20 20 20 20 50 4f 53 54 53 43 52 49 50 54 0a       POSTSCRIPT.
05a0: 20 20 20 20 20 20 20 20 50 52 4f 43 45 44 55 52          PROCEDUR
05b0: 45 0a 20 20 20 20 20 20 20 20 50 52 4f 43 45 53  E.        PROCES
05c0: 53 0a 20 20 20 20 20 20 20 20 53 54 52 49 4e 47  S.        STRING
05d0: 0a 20 20 20 20 20 20 20 20 54 41 52 47 45 54 53  .        TARGETS
05e0: 0a 20 20 20 20 20 20 20 20 54 41 53 4b 0a 20 20  .        TASK.  
05f0: 20 20 20 20 20 20 54 45 58 54 0a 20 20 20 20 20        TEXT.     
0600: 20 20 20 54 49 4d 45 53 54 41 4d 50 0a 20 20 20     TIMESTAMP.   
0610: 20 20 20 20 20 55 53 45 52 0a 20 20 20 20 7d 0a       USER.    }.
0620: 20 20 20 20 76 61 72 69 61 62 6c 65 20 73 65 6c      variable sel
0630: 65 63 74 69 6f 6e 2d 66 6f 72 6d 61 74 73 20 7b  ection-formats {
0640: 0a 20 20 20 20 20 20 20 20 41 50 50 4c 45 5f 50  .        APPLE_P
0650: 49 43 54 0a 20 20 20 20 20 20 20 20 41 54 4f 4d  ICT.        ATOM
0660: 0a 20 20 20 20 20 20 20 20 41 54 4f 4d 5f 50 41  .        ATOM_PA
0670: 49 52 0a 20 20 20 20 20 20 20 20 42 49 54 4d 41  IR.        BITMA
0680: 50 0a 20 20 20 20 20 20 20 20 43 4f 4c 4f 52 4d  P.        COLORM
0690: 41 50 0a 20 20 20 20 20 20 20 20 43 4f 4d 50 4f  AP.        COMPO
06a0: 55 4e 44 5f 54 45 58 54 0a 20 20 20 20 20 20 20  UND_TEXT.       
06b0: 20 44 52 41 57 41 42 4c 45 0a 20 20 20 20 20 20   DRAWABLE.      
06c0: 20 20 49 4e 54 45 47 45 52 0a 20 20 20 20 20 20    INTEGER.      
06d0: 20 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 50    NULL.        P
06e0: 49 58 45 4c 0a 20 20 20 20 20 20 20 20 50 49 58  IXEL.        PIX
06f0: 4d 41 50 37 0a 20 20 20 20 20 20 20 20 53 50 41  MAP7.        SPA
0700: 4e 0a 20 20 20 20 20 20 20 20 53 54 52 49 4e 47  N.        STRING
0710: 0a 20 20 20 20 20 20 20 20 54 45 58 54 0a 20 20  .        TEXT.  
0720: 20 20 20 20 20 20 57 49 4e 44 4f 57 0a 20 20 20        WINDOW.   
0730: 20 7d 0a 0a 20 20 20 20 6e 61 6d 65 73 70 61 63   }..    namespac
0740: 65 20 65 78 70 6f 72 74 20 5c 0a 20 20 20 20 20  e export \.     
0750: 20 20 20 54 72 79 46 72 6f 6d 4c 69 73 74 20 43     TryFromList C
0760: 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
0770: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 52 65 68  DisplayHints Reh
0780: 61 73 68 20 5c 0a 20 20 20 20 20 20 20 20 50 72  ash \.        Pr
0790: 65 76 69 6f 75 73 57 6f 72 64 20 43 6f 6d 6d 61  eviousWord Comma
07a0: 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 20 52 65 6d  ndCompletion Rem
07b0: 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 5c  oveUsedOptions \
07c0: 0a 20 20 20 20 20 20 20 20 48 6f 73 74 4c 69 73  .        HostLis
07d0: 74 20 43 68 61 6e 6e 65 6c 49 64 20 49 6e 43 68  t ChannelId InCh
07e0: 61 6e 6e 65 6c 49 64 20 4f 75 74 43 68 61 6e 6e  annelId OutChann
07f0: 65 6c 49 64 20 5c 0a 20 20 20 20 20 20 20 20 4c  elId \.        L
0800: 69 6e 64 65 78 20 4c 6c 65 6e 67 74 68 20 43 6f  index Llength Co
0810: 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e 20 57 69  mpleteBoolean Wi
0820: 64 67 65 74 43 68 69 6c 64 72 65 6e 0a 0a 20 20  dgetChildren..  
0830: 20 20 23 20 73 65 74 20 74 63 6c 72 65 61 64 6c    # set tclreadl
0840: 69 6e 65 3a 3a 74 72 61 63 65 20 74 6f 20 31 2c  ine::trace to 1,
0850: 20 69 66 20 79 6f 75 0a 20 20 20 20 23 20 77 61   if you.    # wa
0860: 6e 74 20 74 6f 20 65 6e 61 62 6c 65 20 65 78 70  nt to enable exp
0870: 6c 69 63 69 74 20 74 72 61 63 65 20 63 61 6c 6c  licit trace call
0880: 73 2e 0a 20 20 20 20 23 0a 20 20 20 20 76 61 72  s..    #.    var
0890: 69 61 62 6c 65 20 74 72 61 63 65 0a 0a 20 20 20  iable trace..   
08a0: 20 23 20 73 65 74 20 74 63 6c 72 65 61 64 6c 69   # set tclreadli
08b0: 6e 65 3a 3a 74 72 61 63 65 5f 70 72 6f 63 73 20  ne::trace_procs 
08c0: 74 6f 20 31 2c 20 69 66 20 79 6f 75 0a 20 20 20  to 1, if you.   
08d0: 20 23 20 77 61 6e 74 20 74 6f 20 65 6e 61 62 6c   # want to enabl
08e0: 65 20 74 72 61 63 69 6e 67 20 65 76 65 72 79 20  e tracing every 
08f0: 65 6e 74 72 79 20 74 6f 20 61 20 70 72 6f 63 2e  entry to a proc.
0900: 0a 20 20 20 20 23 0a 20 20 20 20 76 61 72 69 61  .    #.    varia
0910: 62 6c 65 20 74 72 61 63 65 5f 70 72 6f 63 73 0a  ble trace_procs.
0920: 0a 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65  .    if {[info e
0930: 78 69 73 74 73 20 74 72 61 63 65 5f 70 72 6f 63  xists trace_proc
0940: 73 5d 20 26 26 20 24 74 72 61 63 65 5f 70 72 6f  s] && $trace_pro
0950: 63 73 7d 20 7b 0a 20 20 20 20 20 20 20 20 3a 3a  cs} {.        ::
0960: 70 72 6f 63 20 70 72 6f 63 20 7b 6e 61 6d 65 20  proc proc {name 
0970: 61 72 67 75 6d 65 6e 74 73 20 62 6f 64 79 7d 20  arguments body} 
0980: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 3a 3a  {.            ::
0990: 70 72 6f 63 20 24 6e 61 6d 65 20 24 61 72 67 75  proc $name $argu
09a0: 6d 65 6e 74 73 20 5b 73 75 62 73 74 20 2d 6e 6f  ments [subst -no
09b0: 63 6f 6d 6d 61 6e 64 73 20 7b 0a 20 20 20 20 20  commands {.     
09c0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
09d0: 54 65 78 74 20 5b 6c 72 61 6e 67 65 20 5b 69 6e  Text [lrange [in
09e0: 66 6f 20 6c 65 76 65 6c 20 30 5d 20 31 20 65 6e  fo level 0] 1 en
09f0: 64 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d].             
0a00: 20 20 20 24 62 6f 64 79 0a 20 20 20 20 20 20 20     $body.       
0a10: 20 20 20 20 20 7d 5d 0a 20 20 20 20 20 20 20 20       }].        
0a20: 7d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 20 3b  }.    } else { ;
0a30: 23 20 21 24 74 72 61 63 65 5f 70 72 6f 63 73 0a  # !$trace_procs.
0a40: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 72          catch {r
0a50: 65 6e 61 6d 65 20 3a 3a 74 63 6c 72 65 61 64 6c  ename ::tclreadl
0a60: 69 6e 65 3a 3a 70 72 6f 63 20 22 22 7d 0a 20 20  ine::proc ""}.  
0a70: 20 20 7d 0a 0a 20 20 20 20 69 66 20 7b 5b 69 6e    }..    if {[in
0a80: 66 6f 20 65 78 69 73 74 73 20 74 72 61 63 65 5d  fo exists trace]
0a90: 20 26 26 20 24 74 72 61 63 65 7d 20 7b 0a 0a 20   && $trace} {.. 
0aa0: 20 20 20 20 20 20 20 3a 3a 70 72 6f 63 20 54 72         ::proc Tr
0ab0: 61 63 65 52 65 63 6f 6e 66 20 7b 61 72 67 73 7d  aceReconf {args}
0ac0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65   {.            e
0ad0: 76 61 6c 20 2e 74 63 6c 72 65 61 64 6c 69 6e 65  val .tclreadline
0ae0: 5f 74 72 61 63 65 2e 73 63 72 6f 6c 6c 20 73 65  _trace.scroll se
0af0: 74 20 24 61 72 67 73 0a 20 20 20 20 20 20 20 20  t $args.        
0b00: 20 20 20 20 2e 74 63 6c 72 65 61 64 6c 69 6e 65      .tclreadline
0b10: 5f 74 72 61 63 65 2e 74 65 78 74 20 73 65 65 20  _trace.text see 
0b20: 65 6e 64 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20  end.        }.. 
0b30: 20 20 20 20 20 20 20 3a 3a 70 72 6f 63 20 41 73         ::proc As
0b40: 73 75 72 65 54 72 61 63 65 57 69 6e 64 6f 77 20  sureTraceWindow 
0b50: 7b 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  {} {.           
0b60: 20 76 61 72 69 61 62 6c 65 20 74 72 61 63 65 0a   variable trace.
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
0b80: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 74 72  ![info exists tr
0b90: 61 63 65 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20  ace]} {.        
0ba0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30          return 0
0bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
0bc0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
0bd0: 24 74 72 61 63 65 7d 20 7b 0a 20 20 20 20 20 20  $trace} {.      
0be0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
0bf0: 20 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d   0.            }
0c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
0c10: 7b 5b 63 61 74 63 68 20 7b 70 61 63 6b 61 67 65  {[catch {package
0c20: 20 72 65 71 75 69 72 65 20 54 6b 7d 5d 7d 20 7b   require Tk}]} {
0c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0c40: 20 72 65 74 75 72 6e 20 30 0a 20 20 20 20 20 20   return 0.      
0c50: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
0c60: 20 20 20 20 69 66 20 7b 21 5b 77 69 6e 66 6f 20      if {![winfo 
0c70: 65 78 69 73 74 73 20 2e 74 63 6c 72 65 61 64 6c  exists .tclreadl
0c80: 69 6e 65 5f 74 72 61 63 65 2e 74 65 78 74 5d 7d  ine_trace.text]}
0c90: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
0ca0: 20 20 20 74 6f 70 6c 65 76 65 6c 20 2e 74 63 6c     toplevel .tcl
0cb0: 72 65 61 64 6c 69 6e 65 5f 74 72 61 63 65 0a 20  readline_trace. 
0cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0cd0: 65 78 74 20 2e 74 63 6c 72 65 61 64 6c 69 6e 65  ext .tclreadline
0ce0: 5f 74 72 61 63 65 2e 74 65 78 74 20 5c 0a 20 20  _trace.text \.  
0cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d00: 20 20 2d 79 73 63 72 6f 6c 6c 63 6f 6d 6d 61 6e    -yscrollcomman
0d10: 64 20 7b 20 74 63 6c 72 65 61 64 6c 69 6e 65 3a  d { tclreadline:
0d20: 3a 54 72 61 63 65 52 65 63 6f 6e 66 20 7d 20 5c  :TraceReconf } \
0d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0d40: 20 20 20 20 20 2d 77 72 61 70 20 6e 6f 6e 65 0a       -wrap none.
0d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d60: 73 63 72 6f 6c 6c 62 61 72 20 2e 74 63 6c 72 65  scrollbar .tclre
0d70: 61 64 6c 69 6e 65 5f 74 72 61 63 65 2e 73 63 72  adline_trace.scr
0d80: 6f 6c 6c 20 5c 0a 20 20 20 20 20 20 20 20 20 20  oll \.          
0d90: 20 20 20 20 20 20 20 20 20 20 2d 6f 72 69 65 6e            -orien
0da0: 74 20 76 65 72 74 69 63 61 6c 20 5c 0a 20 20 20  t vertical \.   
0db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0dc0: 20 2d 63 6f 6d 6d 61 6e 64 20 7b 20 2e 74 63 6c   -command { .tcl
0dd0: 72 65 61 64 6c 69 6e 65 5f 74 72 61 63 65 2e 74  readline_trace.t
0de0: 65 78 74 20 79 76 69 65 77 20 7d 0a 20 20 20 20  ext yview }.    
0df0: 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
0e00: 20 2e 74 63 6c 72 65 61 64 6c 69 6e 65 5f 74 72   .tclreadline_tr
0e10: 61 63 65 2e 74 65 78 74 20 2d 73 69 64 65 20 6c  ace.text -side l
0e20: 65 66 74 20 2d 65 78 70 61 6e 64 20 79 65 73 20  eft -expand yes 
0e30: 2d 66 69 6c 6c 20 62 6f 74 68 0a 20 20 20 20 20  -fill both.     
0e40: 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 20             pack 
0e50: 2e 74 63 6c 72 65 61 64 6c 69 6e 65 5f 74 72 61  .tclreadline_tra
0e60: 63 65 2e 73 63 72 6f 6c 6c 20 2d 73 69 64 65 20  ce.scroll -side 
0e70: 72 69 67 68 74 20 2d 65 78 70 61 6e 64 20 79 65  right -expand ye
0e80: 73 20 2d 66 69 6c 6c 20 79 0a 20 20 20 20 20 20  s -fill y.      
0e90: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20        } else {. 
0ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
0eb0: 61 69 73 65 20 2e 74 63 6c 72 65 61 64 6c 69 6e  aise .tclreadlin
0ec0: 65 5f 74 72 61 63 65 0a 20 20 20 20 20 20 20 20  e_trace.        
0ed0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
0ee0: 20 20 72 65 74 75 72 6e 20 31 0a 20 20 20 20 20    return 1.     
0ef0: 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 3a 3a     }..        ::
0f00: 70 72 6f 63 20 54 72 61 63 65 56 61 72 20 76 54  proc TraceVar vT
0f10: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69   {.            i
0f20: 66 20 7b 21 5b 41 73 73 75 72 65 54 72 61 63 65  f {![AssureTrace
0f30: 57 69 6e 64 6f 77 5d 7d 20 7b 0a 20 20 20 20 20  Window]} {.     
0f40: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
0f50: 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  n.            }.
0f60: 20 20 20 20 20 20 20 20 20 20 20 20 75 70 76 61              upva
0f70: 72 20 24 76 54 20 76 0a 20 20 20 20 20 20 20 20  r $vT v.        
0f80: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
0f90: 69 73 74 73 20 76 5d 7d 20 7b 0a 20 20 20 20 20  ists v]} {.     
0fa0: 20 20 20 20 20 20 20 20 20 20 20 2e 74 63 6c 72             .tclr
0fb0: 65 61 64 6c 69 6e 65 5f 74 72 61 63 65 2e 74 65  eadline_trace.te
0fc0: 78 74 20 69 6e 73 65 72 74 20 65 6e 64 20 5c 0a  xt insert end \.
0fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fe0: 20 20 20 20 22 28 5b 6c 69 6e 64 65 78 20 5b 69      "([lindex [i
0ff0: 6e 66 6f 20 6c 65 76 65 6c 20 2d 31 5d 20 30 5d  nfo level -1] 0]
1000: 29 20 24 76 54 3d 7c 24 76 7c 5c 6e 22 0a 20 20  ) $vT=|$v|\n".  
1010: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1020: 20 20 20 20 20 20 20 20 23 20 73 69 6c 65 6e 74          # silent
1030: 6c 79 20 69 67 6e 6f 72 65 20 75 6e 73 65 74 20  ly ignore unset 
1040: 76 61 72 69 61 62 6c 65 73 2e 0a 20 20 20 20 20  variables..     
1050: 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 3a 3a     }..        ::
1060: 70 72 6f 63 20 54 72 61 63 65 54 65 78 74 20 74  proc TraceText t
1070: 78 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  xt {.           
1080: 20 69 66 20 7b 21 5b 41 73 73 75 72 65 54 72 61   if {![AssureTra
1090: 63 65 57 69 6e 64 6f 77 5d 7d 20 7b 0a 20 20 20  ceWindow]} {.   
10a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
10b0: 75 72 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  urn.            
10c0: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2e 74  }.            .t
10d0: 63 6c 72 65 61 64 6c 69 6e 65 5f 74 72 61 63 65  clreadline_trace
10e0: 2e 74 65 78 74 20 69 6e 73 65 72 74 20 65 6e 64  .text insert end
10f0: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   \.             
1100: 20 20 20 5b 66 6f 72 6d 61 74 20 7b 25 33 32 73     [format {%32s
1110: 20 25 73 7d 20 28 5b 6c 69 6e 64 65 78 20 5b 69   %s} ([lindex [i
1120: 6e 66 6f 20 6c 65 76 65 6c 20 2d 31 5d 20 30 5d  nfo level -1] 0]
1130: 29 20 24 74 78 74 5c 6e 5d 0a 20 20 20 20 20 20  ) $txt\n].      
1140: 20 20 7d 0a 0a 20 20 20 20 7d 20 65 6c 73 65 20    }..    } else 
1150: 7b 0a 20 20 20 20 20 20 20 20 3a 3a 70 72 6f 63  {.        ::proc
1160: 20 54 72 61 63 65 52 65 63 6f 6e 66 20 61 72 67   TraceReconf arg
1170: 73 20 7b 7d 0a 20 20 20 20 20 20 20 20 3a 3a 70  s {}.        ::p
1180: 72 6f 63 20 41 73 73 75 72 65 54 72 61 63 65 57  roc AssureTraceW
1190: 69 6e 64 6f 77 20 61 72 67 73 20 7b 7d 0a 20 20  indow args {}.  
11a0: 20 20 20 20 20 20 3a 3a 70 72 6f 63 20 54 72 61        ::proc Tra
11b0: 63 65 56 61 72 20 61 72 67 73 20 7b 7d 0a 20 20  ceVar args {}.  
11c0: 20 20 20 20 20 20 3a 3a 70 72 6f 63 20 54 72 61        ::proc Tra
11d0: 63 65 54 65 78 74 20 61 72 67 73 20 7b 7d 0a 20  ceText args {}. 
11e0: 20 20 20 7d 0a 0a 20 20 20 20 23 2a 2a 0a 20 20     }..    #**.  
11f0: 20 20 23 20 54 72 79 46 72 6f 6d 4c 69 73 74 20    # TryFromList 
1200: 77 69 6c 6c 20 72 65 74 75 72 6e 20 61 6e 20 65  will return an e
1210: 6d 70 74 79 20 73 74 72 69 6e 67 2c 20 69 66 0a  mpty string, if.
1220: 20 20 20 20 23 20 74 68 65 20 74 65 78 74 20 74      # the text t
1230: 79 70 65 64 20 73 6f 20 66 61 72 20 64 6f 65 73  yped so far does
1240: 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 20 6f   not match any o
1250: 66 20 74 68 65 0a 20 20 20 20 23 20 65 6c 65 6d  f the.    # elem
1260: 65 6e 74 73 20 69 6e 20 6c 69 73 74 2e 20 54 68  ents in list. Th
1270: 69 73 20 6d 69 67 68 74 20 62 65 20 75 73 65 64  is might be used
1280: 20 74 6f 20 61 6c 6c 6f 77 0a 20 20 20 20 23 20   to allow.    # 
1290: 73 75 62 73 65 71 75 65 6e 74 20 66 69 6c 65 6e  subsequent filen
12a0: 61 6d 65 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 62  ame completion b
12b0: 79 20 74 68 65 20 62 75 69 6c 74 69 6e 0a 20 20  y the builtin.  
12c0: 20 20 23 20 63 6f 6d 70 6c 65 74 65 72 2e 0a 20    # completer.. 
12d0: 20 20 20 23 20 49 66 20 69 6e 68 69 62 69 74 20     # If inhibit 
12e0: 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
12f0: 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 0a   result will be.
1300: 20 20 20 20 23 20 66 6f 72 6d 61 74 74 65 64 20      # formatted 
1310: 73 75 63 68 20 74 68 61 74 20 72 65 61 64 6c 69  such that readli
1320: 6e 65 20 77 69 6c 6c 20 6e 6f 74 20 69 6e 73 65  ne will not inse
1330: 72 74 0a 20 20 20 20 23 20 61 20 73 70 61 63 65  rt.    # a space
1340: 20 61 66 74 65 72 20 61 20 63 6f 6d 70 6c 65 74   after a complet
1350: 65 20 28 73 69 6e 67 6c 65 29 20 6d 61 74 63 68  e (single) match
1360: 2e 0a 20 20 20 20 23 0a 20 20 20 20 70 72 6f 63  ..    #.    proc
1370: 20 54 72 79 46 72 6f 6d 4c 69 73 74 20 7b 74 65   TryFromList {te
1380: 78 74 20 6c 73 74 20 7b 61 6c 6c 6f 77 20 22 22  xt lst {allow ""
1390: 7d 20 7b 69 6e 68 69 62 69 74 20 30 7d 7d 20 7b  } {inhibit 0}} {
13a0: 0a 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 72  ..        set pr
13b0: 65 20 5b 47 65 74 51 75 6f 74 65 64 50 72 65 66  e [GetQuotedPref
13c0: 69 78 20 24 74 65 78 74 5d 0a 20 20 20 20 20 20  ix $text].      
13d0: 20 20 73 65 74 20 6d 61 74 63 68 65 73 20 5b 4d    set matches [M
13e0: 61 74 63 68 65 73 46 72 6f 6d 4c 69 73 74 20 24  atchesFromList $
13f0: 74 65 78 74 20 24 6c 73 74 20 24 61 6c 6c 6f 77  text $lst $allow
1400: 5d 0a 0a 20 20 20 20 20 20 20 20 69 66 20 7b 31  ]..        if {1
1410: 20 3d 3d 20 5b 6c 6c 65 6e 67 74 68 20 24 6d 61   == [llength $ma
1420: 74 63 68 65 73 5d 7d 20 7b 20 3b 20 23 20 75 6e  tches]} { ; # un
1430: 69 71 75 65 20 6d 61 74 63 68 0a 20 20 20 20 20  ique match.     
1440: 20 20 20 20 20 20 20 73 65 74 20 6e 75 6c 6c 20         set null 
1450: 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 6d  [string index $m
1460: 61 74 63 68 65 73 20 30 5d 0a 20 20 20 20 20 20  atches 0].      
1470: 20 20 20 20 20 20 69 66 20 7b 28 22 3c 22 20 3d        if {("<" =
1480: 3d 20 24 6e 75 6c 6c 20 7c 7c 20 22 3f 22 20 3d  = $null || "?" =
1490: 3d 20 24 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20  = $null).       
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20               && 
14b0: 2d 31 20 3d 3d 20 5b 73 74 72 69 6e 67 20 66 69  -1 == [string fi
14c0: 72 73 74 20 24 6e 75 6c 6c 20 24 61 6c 6c 6f 77  rst $null $allow
14d0: 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ]} {.           
14e0: 20 20 20 20 20 73 65 74 20 63 6f 6d 70 6c 65 74       set complet
14f0: 69 6f 6e 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  ion [string trim
1500: 20 22 5b 6c 69 73 74 20 24 74 65 78 74 5d 20 24   "[list $text] $
1510: 6c 73 74 22 5d 0a 20 20 20 20 20 20 20 20 20 20  lst"].          
1520: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
1530: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63             set c
1540: 6f 6d 70 6c 65 74 69 6f 6e 20 5b 73 74 72 69 6e  ompletion [strin
1550: 67 20 74 72 69 6d 20 24 7b 70 72 65 7d 24 7b 6d  g trim ${pre}${m
1560: 61 74 63 68 65 73 7d 5b 52 69 67 68 74 20 24 70  atches}[Right $p
1570: 72 65 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20  re]].           
1580: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69   }.            i
1590: 66 20 7b 24 69 6e 68 69 62 69 74 7d 20 7b 0a 20  f {$inhibit} {. 
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
15b0: 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 6d  eturn [list $com
15c0: 70 6c 65 74 69 6f 6e 20 7b 7d 5d 0a 20 20 20 20  pletion {}].    
15d0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
15e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15f0: 20 72 65 74 75 72 6e 20 24 63 6f 6d 70 6c 65 74   return $complet
1600: 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  ion.            
1610: 7d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  }.        } else
1620: 69 66 20 7b 22 22 20 21 3d 20 24 6d 61 74 63 68  if {"" != $match
1630: 65 73 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  es} {.          
1640: 20 20 73 65 74 20 6c 6f 6e 67 65 73 74 20 5b 43    set longest [C
1650: 6f 6d 70 6c 65 74 65 4c 6f 6e 67 65 73 74 20 24  ompleteLongest $
1660: 6d 61 74 63 68 65 73 5d 0a 20 20 20 20 20 20 20  matches].       
1670: 20 20 20 20 20 69 66 20 7b 22 22 20 3d 3d 20 24       if {"" == $
1680: 6c 6f 6e 67 65 73 74 7d 20 7b 0a 20 20 20 20 20  longest} {.     
1690: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
16a0: 6e 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 22  n [string trim "
16b0: 5b 6c 69 73 74 20 24 74 65 78 74 5d 20 24 6d 61  [list $text] $ma
16c0: 74 63 68 65 73 22 5d 0a 20 20 20 20 20 20 20 20  tches"].        
16d0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
16e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
16f0: 75 72 6e 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  urn [string trim
1700: 20 22 24 7b 70 72 65 7d 24 7b 6c 6f 6e 67 65 73   "${pre}${longes
1710: 74 7d 20 24 6d 61 74 63 68 65 73 22 5d 0a 20 20  t} $matches"].  
1720: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1730: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
1740: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1750: 22 22 3b 20 23 20 6e 6f 74 68 69 6e 67 20 74 6f  ""; # nothing to
1760: 20 63 6f 6d 70 6c 65 74 65 0a 20 20 20 20 20 20   complete.      
1770: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23    }.    }..    #
1780: 2a 2a 0a 20 20 20 20 23 20 43 6f 6d 70 6c 65 74  **.    # Complet
1790: 65 46 72 6f 6d 4c 69 73 74 20 77 69 6c 6c 20 6e  eFromList will n
17a0: 65 76 65 72 20 72 65 74 75 72 6e 20 61 6e 20 65  ever return an e
17b0: 6d 70 74 79 20 73 74 72 69 6e 67 2e 0a 20 20 20  mpty string..   
17c0: 20 23 20 63 6f 6d 70 6c 65 74 65 73 2c 20 69 66   # completes, if
17d0: 20 61 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 63 61   a completion ca
17e0: 6e 20 62 65 20 64 6f 6e 65 2c 20 6f 72 20 72 69  n be done, or ri
17f0: 6e 67 0a 20 20 20 20 23 20 74 68 65 20 62 65 6c  ng.    # the bel
1800: 6c 20 69 66 20 6e 6f 74 2e 20 49 66 20 69 6e 68  l if not. If inh
1810: 69 62 69 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  ibit is non-zero
1820: 2c 20 74 68 65 20 72 65 73 75 6c 74 0a 20 20 20  , the result.   
1830: 20 23 20 77 69 6c 6c 20 62 65 20 66 6f 72 6d 61   # will be forma
1840: 74 74 65 64 20 73 75 63 68 20 74 68 61 74 20 72  tted such that r
1850: 65 61 64 6c 69 6e 65 20 77 69 6c 6c 20 6e 6f 74  eadline will not
1860: 20 69 6e 73 65 72 74 0a 20 20 20 20 23 20 61 20   insert.    # a 
1870: 73 70 61 63 65 20 61 66 74 65 72 20 61 20 63 6f  space after a co
1880: 6d 70 6c 65 74 65 20 28 73 69 6e 67 6c 65 29 20  mplete (single) 
1890: 6d 61 74 63 68 2e 0a 20 20 20 20 23 0a 20 20 20  match..    #.   
18a0: 20 70 72 6f 63 20 43 6f 6d 70 6c 65 74 65 46 72   proc CompleteFr
18b0: 6f 6d 4c 69 73 74 20 7b 74 65 78 74 20 6c 73 74  omList {text lst
18c0: 20 7b 61 6c 6c 6f 77 20 22 22 7d 20 7b 69 6e 68   {allow ""} {inh
18d0: 69 62 69 74 20 30 7d 7d 20 7b 0a 20 20 20 20 20  ibit 0}} {.     
18e0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 54     set result [T
18f0: 72 79 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  ryFromList $text
1900: 20 24 6c 73 74 20 24 61 6c 6c 6f 77 20 24 69 6e   $lst $allow $in
1910: 68 69 62 69 74 5d 0a 20 20 20 20 20 20 20 20 69  hibit].        i
1920: 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 72 65  f {![llength $re
1930: 73 75 6c 74 5d 7d 20 7b 0a 20 20 20 20 20 20 20  sult]} {.       
1940: 20 20 20 20 20 41 6c 65 72 74 0a 20 20 20 20 20       Alert.     
1950: 20 20 20 20 20 20 20 23 20 72 65 74 75 72 6e 20         # return 
1960: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 6c 69  [string trim [li
1970: 73 74 20 24 74 65 78 74 5d 20 24 6c 73 74 22 5d  st $text] $lst"]
1980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1990: 7b 5b 6c 6c 65 6e 67 74 68 20 24 6c 73 74 5d 7d  {[llength $lst]}
19a0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
19b0: 20 20 20 72 65 74 75 72 6e 20 5b 73 74 72 69 6e     return [strin
19c0: 67 20 74 72 69 6d 20 22 24 74 65 78 74 20 24 6c  g trim "$text $l
19d0: 73 74 22 5d 0a 20 20 20 20 20 20 20 20 20 20 20  st"].           
19e0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
19f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1a00: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 6c   [string trim [l
1a10: 69 73 74 20 24 74 65 78 74 20 7b 7d 5d 5d 0a 20  ist $text {}]]. 
1a20: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
1a30: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
1a40: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1a50: 20 24 72 65 73 75 6c 74 0a 20 20 20 20 20 20 20   $result.       
1a60: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 2a   }.    }..    #*
1a70: 2a 0a 20 20 20 20 23 20 43 6f 6d 70 6c 65 74 65  *.    # Complete
1a80: 42 6f 6f 6c 65 61 6e 20 64 6f 65 73 20 61 20 43  Boolean does a C
1a90: 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 0a  ompleteFromList.
1aa0: 20 20 20 20 23 20 77 69 74 68 20 61 20 6c 69 73      # with a lis
1ab0: 74 20 6f 66 20 61 6c 6c 20 76 61 6c 69 64 20 62  t of all valid b
1ac0: 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 73 2e 0a 20  oolean values.. 
1ad0: 20 20 20 23 0a 20 20 20 20 70 72 6f 63 20 43 6f     #.    proc Co
1ae0: 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e 20 7b 74  mpleteBoolean {t
1af0: 65 78 74 7d 20 7b 0a 20 20 20 20 20 20 20 20 72  ext} {.        r
1b00: 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1b10: 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 79  romList $text {y
1b20: 65 73 20 6e 6f 20 74 72 75 65 20 66 61 6c 73 65  es no true false
1b30: 20 31 20 30 7d 5d 0a 20 20 20 20 7d 0a 0a 20 20   1 0}].    }..  
1b40: 20 20 23 2a 2a 0a 20 20 20 20 23 20 62 75 69 6c    #**.    # buil
1b50: 64 20 61 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  d a list of all 
1b60: 65 78 65 63 75 74 61 62 6c 65 73 20 77 68 69 63  executables whic
1b70: 68 20 63 61 6e 20 62 65 0a 20 20 20 20 23 20 66  h can be.    # f
1b80: 6f 75 6e 64 20 69 6e 20 24 65 6e 76 28 50 41 54  ound in $env(PAT
1b90: 48 29 2e 20 54 68 69 73 20 69 73 20 28 6e 61 74  H). This is (nat
1ba0: 75 72 61 6c 6c 79 29 20 61 20 62 69 74 0a 20 20  urally) a bit.  
1bb0: 20 20 23 20 73 6c 6f 77 2c 20 61 6e 64 20 73 68    # slow, and sh
1bc0: 6f 75 6c 64 20 6e 6f 74 20 63 61 6c 6c 65 64 20  ould not called 
1bd0: 66 72 65 71 75 65 6e 74 6c 79 2e 20 49 6e 73 74  frequently. Inst
1be0: 65 61 64 0a 20 20 20 20 23 20 69 74 20 69 73 20  ead.    # it is 
1bf0: 61 20 67 6f 6f 64 20 69 64 65 61 20 74 6f 20 63  a good idea to c
1c00: 68 65 63 6b 20 69 66 20 74 68 65 20 76 61 72 69  heck if the vari
1c10: 61 62 6c 65 0a 20 20 20 20 23 20 60 65 78 65 63  able.    # `exec
1c20: 75 74 61 62 6c 65 73 27 20 65 78 69 73 74 73 20  utables' exists 
1c30: 61 6e 64 20 74 68 65 6e 20 6a 75 73 74 20 75 73  and then just us
1c40: 65 20 69 74 27 73 0a 20 20 20 20 23 20 63 6f 6e  e it's.    # con
1c50: 74 65 6e 74 20 69 6e 73 74 65 61 64 20 6f 66 20  tent instead of 
1c60: 63 61 6c 6c 69 6e 67 20 52 65 68 61 73 68 2e 0a  calling Rehash..
1c70: 20 20 20 20 23 20 28 73 65 65 20 63 6f 6d 70 6c      # (see compl
1c80: 65 74 65 28 65 78 65 63 29 29 2e 0a 20 20 20 20  ete(exec))..    
1c90: 23 0a 20 20 20 20 70 72 6f 63 20 52 65 68 61 73  #.    proc Rehas
1ca0: 68 20 7b 7d 20 7b 0a 0a 20 20 20 20 20 20 20 20  h {} {..        
1cb0: 67 6c 6f 62 61 6c 20 65 6e 76 0a 20 20 20 20 20  global env.     
1cc0: 20 20 20 76 61 72 69 61 62 6c 65 20 65 78 65 63     variable exec
1cd0: 75 74 61 62 6c 65 73 0a 0a 20 20 20 20 20 20 20  utables..       
1ce0: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
1cf0: 74 73 20 65 6e 76 5d 20 7c 7c 20 21 5b 61 72 72  ts env] || ![arr
1d00: 61 79 20 65 78 69 73 74 73 20 65 6e 76 5d 7d 20  ay exists env]} 
1d10: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  {.            re
1d20: 74 75 72 6e 0a 20 20 20 20 20 20 20 20 7d 0a 20  turn.        }. 
1d30: 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
1d40: 6f 20 65 78 69 73 74 73 20 65 6e 76 28 50 41 54  o exists env(PAT
1d50: 48 29 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  H)]} {.         
1d60: 20 20 20 72 65 74 75 72 6e 0a 20 20 20 20 20 20     return.      
1d70: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 73 65 74    }..        set
1d80: 20 65 78 65 63 75 74 61 62 6c 65 73 20 30 0a 20   executables 0. 
1d90: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64         foreach d
1da0: 69 72 20 5b 73 70 6c 69 74 20 24 65 6e 76 28 50  ir [split $env(P
1db0: 41 54 48 29 20 3a 5d 20 7b 0a 20 20 20 20 20 20  ATH) :] {.      
1dc0: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
1dd0: 20 5b 6c 69 73 74 20 73 65 74 20 66 69 6c 65 73   [list set files
1de0: 20 5b 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70 6c 61   [glob -nocompla
1df0: 69 6e 20 24 7b 64 69 72 7d 2f 2a 5d 5d 5d 7d 20  in ${dir}/*]]]} 
1e00: 7b 20 63 6f 6e 74 69 6e 75 65 20 7d 0a 20 20 20  { continue }.   
1e10: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
1e20: 20 66 69 6c 65 20 24 66 69 6c 65 73 20 7b 0a 20   file $files {. 
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1e40: 66 20 7b 5b 66 69 6c 65 20 65 78 65 63 75 74 61  f {[file executa
1e50: 62 6c 65 20 24 66 69 6c 65 5d 7d 20 7b 0a 20 20  ble $file]} {.  
1e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e70: 20 20 6c 61 70 70 65 6e 64 20 65 78 65 63 75 74    lappend execut
1e80: 61 62 6c 65 73 20 5b 66 69 6c 65 20 74 61 69 6c  ables [file tail
1e90: 20 24 66 69 6c 65 5d 0a 20 20 20 20 20 20 20 20   $file].        
1ea0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1eb0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1ec0: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 2a 2a  }.    }..    #**
1ed0: 0a 20 20 20 20 23 20 62 75 69 6c 64 20 61 20 6c  .    # build a l
1ee0: 69 73 74 20 68 6f 73 74 73 20 66 72 6f 6d 20 74  ist hosts from t
1ef0: 68 65 20 2f 65 74 63 2f 68 6f 73 74 73 20 66 69  he /etc/hosts fi
1f00: 6c 65 2e 0a 20 20 20 20 23 20 74 68 69 73 20 69  le..    # this i
1f10: 73 20 6f 6e 6c 79 20 64 6f 6e 65 20 6f 6e 63 65  s only done once
1f20: 2e 20 54 68 69 73 20 69 73 20 73 6f 72 74 20 6f  . This is sort o
1f30: 66 20 61 0a 20 20 20 20 23 20 64 69 72 74 79 20  f a.    # dirty 
1f40: 68 61 63 6b 2c 20 2f 65 74 63 2f 68 6f 73 74 73  hack, /etc/hosts
1f50: 20 69 73 20 68 61 72 64 63 6f 64 65 64 20 2e 2e   is hardcoded ..
1f60: 2e 0a 20 20 20 20 23 20 42 75 74 20 6f 6e 20 74  ..    # But on t
1f70: 68 65 20 6f 74 68 65 72 20 73 69 64 65 2c 20 69  he other side, i
1f80: 66 20 74 68 65 20 75 73 65 72 20 73 75 70 70 6c  f the user suppl
1f90: 69 65 73 0a 20 20 20 20 23 20 61 20 76 61 6c 69  ies.    # a vali
1fa0: 64 20 68 6f 73 74 20 74 61 62 6c 65 20 69 6e 20  d host table in 
1fb0: 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 68 6f 73  tclreadline::hos
1fc0: 74 73 0a 20 20 20 20 23 20 62 65 66 6f 72 65 20  ts.    # before 
1fd0: 65 6e 74 65 72 69 6e 67 20 74 68 65 20 65 76 65  entering the eve
1fe0: 6e 74 20 6c 6f 6f 70 2c 20 74 68 69 73 20 70 72  nt loop, this pr
1ff0: 6f 63 0a 20 20 20 20 23 20 77 69 6c 6c 20 72 65  oc.    # will re
2000: 74 75 72 6e 20 74 68 69 73 20 6c 69 73 74 2e 0a  turn this list..
2010: 20 20 20 20 23 0a 20 20 20 20 70 72 6f 63 20 48      #.    proc H
2020: 6f 73 74 4c 69 73 74 20 7b 7d 20 7b 0a 20 20 20  ostList {} {.   
2030: 20 20 20 20 20 23 20 72 65 61 64 20 74 68 65 20       # read the 
2040: 68 6f 73 74 20 74 61 62 6c 65 20 6f 6e 6c 79 20  host table only 
2050: 6f 6e 63 65 2e 0a 20 20 20 20 20 20 20 20 23 0a  once..        #.
2060: 20 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65          variable
2070: 20 68 6f 73 74 73 0a 20 20 20 20 20 20 20 20 69   hosts.        i
2080: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
2090: 20 68 6f 73 74 73 5d 7d 20 7b 0a 20 20 20 20 20   hosts]} {.     
20a0: 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0a 20         catch {. 
20b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20c0: 65 74 20 68 6f 73 74 73 20 22 22 0a 20 20 20 20  et hosts "".    
20d0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
20e0: 69 64 20 5b 6f 70 65 6e 20 2f 65 74 63 2f 68 6f  id [open /etc/ho
20f0: 73 74 73 20 72 5d 0a 20 20 20 20 20 20 20 20 20  sts r].         
2100: 20 20 20 20 20 20 20 69 66 20 7b 30 20 21 3d 20         if {0 != 
2110: 24 69 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  $id} {.         
2120: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
2130: 20 7b 2d 31 20 21 3d 20 5b 67 65 74 73 20 24 69   {-1 != [gets $i
2140: 64 20 6c 69 6e 65 5d 7d 20 7b 0a 20 20 20 20 20  d line]} {.     
2150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2160: 20 20 20 72 65 67 73 75 62 20 7b 23 2e 2a 7d 20     regsub {#.*} 
2170: 24 6c 69 6e 65 20 7b 7d 20 6c 69 6e 65 0a 20 20  $line {} line.  
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2190: 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67        if {[lleng
21a0: 74 68 20 24 6c 69 6e 65 5d 20 3e 3d 20 32 7d 20  th $line] >= 2} 
21b0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
21c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61                la
21d0: 70 70 65 6e 64 20 68 6f 73 74 73 20 5b 6c 69 6e  ppend hosts [lin
21e0: 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a 20 20 20  dex $line 1].   
21f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2200: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
2210: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
2220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2230: 20 63 6c 6f 73 65 20 24 69 64 0a 20 20 20 20 20   close $id.     
2240: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
2250: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
2260: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74     }.        ret
2270: 75 72 6e 20 24 68 6f 73 74 73 0a 20 20 20 20 7d  urn $hosts.    }
2280: 0a 0a 20 20 20 20 23 2a 2a 0a 20 20 20 20 23 20  ..    #**.    # 
2290: 6e 65 76 65 72 20 72 65 74 75 72 6e 20 61 6e 20  never return an 
22a0: 65 6d 70 74 79 20 73 74 72 69 6e 67 2c 20 6e 65  empty string, ne
22b0: 76 65 72 20 63 6f 6d 70 6c 65 74 65 2e 0a 20 20  ver complete..  
22c0: 20 20 23 20 54 68 69 73 20 69 73 20 75 73 65 66    # This is usef
22d0: 75 6c 20 66 6f 72 20 73 68 6f 77 69 6e 67 20 6f  ul for showing o
22e0: 70 74 69 6f 6e 73 20 6c 69 73 74 73 20 66 6f 72  ptions lists for
22f0: 20 65 78 61 6d 70 6c 65 2e 0a 20 20 20 20 23 0a   example..    #.
2300: 20 20 20 20 70 72 6f 63 20 44 69 73 70 6c 61 79      proc Display
2310: 48 69 6e 74 73 20 7b 6c 73 74 7d 20 7b 0a 20 20  Hints {lst} {.  
2320: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 73 74        return [st
2330: 72 69 6e 67 20 74 72 69 6d 20 22 7b 7d 20 24 6c  ring trim "{} $l
2340: 73 74 22 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  st"].    }..    
2350: 23 2a 2a 0a 20 20 20 20 23 20 66 69 6e 64 20 28  #**.    # find (
2360: 70 61 72 74 69 61 6c 29 20 6d 61 74 63 68 65 73  partial) matches
2370: 20 66 6f 72 20 60 74 65 78 74 27 20 69 6e 20 60   for `text' in `
2380: 6c 73 74 27 2e 20 52 69 6e 67 0a 20 20 20 20 23  lst'. Ring.    #
2390: 20 74 68 65 20 62 65 6c 6c 20 61 6e 64 20 72 65   the bell and re
23a0: 74 75 72 6e 20 74 68 65 20 77 68 6f 6c 65 20 6c  turn the whole l
23b0: 69 73 74 2c 20 69 66 20 74 68 65 20 75 73 65 72  ist, if the user
23c0: 0a 20 20 20 20 23 20 74 72 69 65 73 20 74 6f 20  .    # tries to 
23d0: 63 6f 6d 70 6c 65 74 65 20 3f 2e 2e 3f 20 6f 70  complete ?..? op
23e0: 74 69 6f 6e 73 20 6f 72 20 3c 2e 2e 3e 20 68 69  tions or <..> hi
23f0: 6e 74 73 2e 0a 20 20 20 20 23 0a 20 20 20 20 23  nts..    #.    #
2400: 20 4d 61 74 63 68 65 73 46 72 6f 6d 4c 69 73 74   MatchesFromList
2410: 20 72 65 74 75 72 6e 73 20 61 20 6c 69 73 74 20   returns a list 
2420: 77 68 69 63 68 20 69 73 20 6e 6f 74 20 73 75 69  which is not sui
2430: 74 61 62 6c 65 0a 20 20 20 20 23 20 66 6f 72 20  table.    # for 
2440: 70 61 73 73 69 6e 67 20 74 6f 20 74 68 65 20 72  passing to the r
2450: 65 61 64 6c 69 6e 65 20 63 6f 6d 70 6c 65 74 65  eadline complete
2460: 72 2e 20 54 68 75 73 2c 0a 20 20 20 20 23 20 4d  r. Thus,.    # M
2470: 61 74 63 68 65 73 46 72 6f 6d 4c 69 73 74 20 73  atchesFromList s
2480: 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 61 6c  hould not be cal
2490: 6c 65 64 20 64 69 72 65 63 74 6c 79 20 62 75 74  led directly but
24a0: 0a 20 20 20 20 23 20 66 72 6f 6d 20 66 6f 72 6d  .    # from form
24b0: 61 74 74 69 6e 67 20 72 6f 75 74 69 6e 65 73 20  atting routines 
24c0: 61 73 20 54 72 79 46 72 6f 6d 4c 69 73 74 2e 0a  as TryFromList..
24d0: 20 20 20 20 23 0a 20 20 20 20 70 72 6f 63 20 4d      #.    proc M
24e0: 61 74 63 68 65 73 46 72 6f 6d 4c 69 73 74 20 7b  atchesFromList {
24f0: 74 65 78 74 20 6c 73 74 20 7b 61 6c 6c 6f 77 20  text lst {allow 
2500: 22 22 7d 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  ""}} {.        s
2510: 65 74 20 72 65 73 75 6c 74 20 22 22 0a 20 20 20  et result "".   
2520: 20 20 20 20 20 73 65 74 20 74 65 78 74 20 5b 53       set text [S
2530: 74 72 69 70 50 72 65 66 69 78 20 24 74 65 78 74  tripPrefix $text
2540: 5d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 75  ].        set nu
2550: 6c 6c 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78  ll [string index
2560: 20 24 74 65 78 74 20 30 5d 0a 20 20 20 20 20 20   $text 0].      
2570: 20 20 66 6f 72 65 61 63 68 20 63 68 61 72 20 7b    foreach char {
2580: 3c 20 3f 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  < ?} {.         
2590: 20 20 20 69 66 20 7b 24 63 68 61 72 20 3d 3d 20     if {$char == 
25a0: 24 6e 75 6c 6c 20 26 26 20 2d 31 20 3d 3d 20 5b  $null && -1 == [
25b0: 73 74 72 69 6e 67 20 66 69 72 73 74 20 24 63 68  string first $ch
25c0: 61 72 20 24 61 6c 6c 6f 77 5d 7d 20 7b 0a 20 20  ar $allow]} {.  
25d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 6c                Al
25e0: 65 72 74 0a 20 20 20 20 20 20 20 20 20 20 20 20  ert.            
25f0: 20 20 20 20 72 65 74 75 72 6e 20 24 6c 73 74 0a      return $lst.
2600: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
2610: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2620: 66 6f 72 65 61 63 68 20 77 6f 72 64 20 24 6c 73  foreach word $ls
2630: 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  t {.            
2640: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63  if {[string matc
2650: 68 20 24 7b 74 65 78 74 7d 2a 20 24 77 6f 72 64  h ${text}* $word
2660: 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ]} {.           
2670: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73       lappend res
2680: 75 6c 74 20 24 77 6f 72 64 0a 20 20 20 20 20 20  ult $word.      
2690: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
26a0: 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  }.        return
26b0: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 72   [string trim $r
26c0: 65 73 75 6c 74 5d 0a 20 20 20 20 7d 0a 0a 20 20  esult].    }..  
26d0: 20 20 23 2a 2a 0a 20 20 20 20 23 20 69 6e 76 6f    #**.    # invo
26e0: 6b 65 20 63 6d 64 20 77 69 74 68 20 61 20 28 68  ke cmd with a (h
26f0: 6f 70 65 66 75 6c 6c 79 29 20 69 6e 76 61 6c 69  opefully) invali
2700: 64 20 73 74 72 69 6e 67 20 61 6e 64 0a 20 20 20  d string and.   
2710: 20 23 20 70 61 72 73 65 20 74 68 65 20 65 72 72   # parse the err
2720: 6f 72 20 6d 65 73 73 61 67 65 20 74 6f 20 67 65  or message to ge
2730: 74 20 61 6e 20 6f 70 74 69 6f 6e 20 6c 69 73 74  t an option list
2740: 2e 0a 20 20 20 20 23 20 54 68 65 20 73 74 72 69  ..    # The stri
2750: 6e 67 73 20 61 72 65 20 63 61 72 65 66 75 6c 6c  ngs are carefull
2760: 79 20 63 68 6f 73 65 6e 20 74 6f 20 6d 61 74 63  y chosen to matc
2770: 68 20 74 68 65 0a 20 20 20 20 23 20 72 65 73 75  h the.    # resu
2780: 6c 74 73 20 70 72 6f 64 75 63 65 64 20 62 79 20  lts produced by 
2790: 6b 6e 6f 77 6e 20 74 63 6c 20 72 6f 75 74 69 6e  known tcl routin
27a0: 65 73 2e 20 49 74 27 73 20 61 0a 20 20 20 20 23  es. It's a.    #
27b0: 20 70 69 74 79 2c 20 74 68 61 74 20 6e 6f 74 20   pity, that not 
27c0: 61 6c 6c 20 6f 62 6a 65 63 74 20 63 6f 6d 6d 61  all object comma
27d0: 6e 64 73 20 67 65 6e 65 72 61 74 65 0a 20 20 20  nds generate.   
27e0: 20 23 20 73 74 61 6e 64 61 72 64 20 65 72 72 6f   # standard erro
27f0: 72 20 6d 65 73 73 61 67 65 73 21 0a 20 20 20 20  r messages!.    
2800: 23 0a 20 20 20 20 23 20 40 70 61 72 61 6d 20 20  #.    # @param  
2810: 20 63 6d 64 0a 20 20 20 20 23 20 40 72 65 74 75   cmd.    # @retu
2820: 72 6e 20 20 6c 69 73 74 20 6f 66 20 6f 70 74 69  rn  list of opti
2830: 6f 6e 73 20 66 6f 72 20 63 6d 64 0a 20 20 20 20  ons for cmd.    
2840: 23 0a 20 20 20 20 70 72 6f 63 20 54 72 79 53 75  #.    proc TrySu
2850: 62 43 6d 64 73 20 7b 74 65 78 74 20 63 6d 64 7d  bCmds {text cmd}
2860: 20 7b 0a 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set 
2870: 74 72 79 73 74 72 69 6e 67 20 2d 2d 2d 2d 0a 0a  trystring ----..
2880: 20 20 20 20 20 20 20 20 23 20 74 72 79 20 74 68          # try th
2890: 65 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 20 61  e command with a
28a0: 6e 64 20 77 2f 6f 20 74 72 79 73 74 72 69 6e 67  nd w/o trystring
28b0: 2e 0a 20 20 20 20 20 20 20 20 23 20 53 6f 6d 65  ..        # Some
28c0: 20 63 6f 6d 6d 61 6e 64 73 2c 20 65 2e 67 2e 0a   commands, e.g..
28d0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 2e 63          #     .c
28e0: 61 6e 76 61 73 20 62 69 6e 64 0a 20 20 20 20 20  anvas bind.     
28f0: 20 20 20 23 20 72 65 74 75 72 6e 20 61 6e 20 65     # return an e
2900: 72 72 6f 72 20 69 66 20 69 6e 76 6f 6b 65 64 20  rror if invoked 
2910: 77 2f 6f 20 61 72 67 75 6d 65 6e 74 73 0a 20 20  w/o arguments.  
2920: 20 20 20 20 20 20 23 20 62 75 74 20 6e 6f 74 2c        # but not,
2930: 20 69 66 20 69 6e 76 6f 6b 65 64 20 77 69 74 68   if invoked with
2940: 20 61 72 67 75 6d 65 6e 74 73 2e 20 42 72 65 61   arguments. Brea
2950: 6b 69 6e 67 0a 20 20 20 20 20 20 20 20 23 20 74  king.        # t
2960: 68 65 20 6c 6f 6f 70 20 69 73 20 65 76 65 6e 74  he loop is event
2970: 75 61 6c 6c 79 20 64 6f 6e 65 20 61 74 20 74 68  ually done at th
2980: 65 20 65 6e 64 20 2e 2e 2e 0a 20 20 20 20 20 20  e end ....      
2990: 20 20 23 0a 20 20 20 20 20 20 20 20 66 6f 72 20    #.        for 
29a0: 7b 73 65 74 20 73 74 72 20 24 74 72 79 73 74 72  {set str $trystr
29b0: 69 6e 67 7d 20 7b 31 7d 20 7b 73 65 74 20 73 74  ing} {1} {set st
29c0: 72 20 22 22 7d 20 7b 0a 0a 20 20 20 20 20 20 20  r ""} {..       
29d0: 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b 63       set code [c
29e0: 61 74 63 68 20 7b 73 65 74 20 72 65 73 75 6c 74  atch {set result
29f0: 20 5b 65 76 61 6c 20 24 63 6d 64 20 24 73 74 72   [eval $cmd $str
2a00: 5d 7d 20 6d 73 67 5d 0a 20 20 20 20 20 20 20 20  ]} msg].        
2a10: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 22      set result "
2a20: 22 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  "..            i
2a30: 66 20 7b 24 63 6f 64 65 7d 20 7b 0a 20 20 20 20  f {$code} {.    
2a40: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
2a50: 74 63 6d 64 20 5b 73 74 72 69 6e 67 20 74 72 69  tcmd [string tri
2a60: 6d 20 24 63 6d 64 5d 0a 20 20 20 20 20 20 20 20  m $cmd].        
2a70: 20 20 20 20 20 20 20 20 23 20 58 58 58 20 73 65          # XXX se
2a80: 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e.              
2a90: 20 20 23 20 20 20 20 20 20 20 20 20 74 63 6c 49    #         tclI
2aa0: 6e 64 65 78 4f 62 6a 2e 63 0a 20 20 20 20 20 20  ndexObj.c.      
2ab0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #     
2ac0: 20 20 20 20 74 6b 49 6d 67 50 68 6f 74 6f 2e 63      tkImgPhoto.c
2ad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ae0: 20 23 20 58 58 58 0a 20 20 20 20 20 20 20 20 20   # XXX.         
2af0: 20 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67 65         if {[rege
2b00: 78 70 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20  xp \.           
2b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 28                {(
2b20: 62 61 64 7c 61 6d 62 69 67 75 6f 75 73 7c 75 6e  bad|ambiguous|un
2b30: 72 65 63 6f 67 6e 69 7a 65 64 29 20 2e 2a 22 2d  recognized) .*"-
2b40: 2d 2d 2d 22 3a 20 2a 6d 75 73 74 20 2a 62 65 28  ---": *must *be(
2b50: 20 2e 2a 24 29 7d 20 5c 0a 20 20 20 20 20 20 20   .*$)} \.       
2b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b70: 20 20 24 6d 73 67 20 61 6c 6c 20 6a 75 6e 6b 20    $msg all junk 
2b80: 72 61 77 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20  raw]} {.        
2b90: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 67 73              regs
2ba0: 75 62 20 2d 61 6c 6c 20 2d 2d 20 2c 20 24 72 61  ub -all -- , $ra
2bb0: 77 20 7b 20 7d 20 72 61 77 0a 20 20 20 20 20 20  w { } raw.      
2bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
2bd0: 74 20 6c 65 6e 20 5b 6c 6c 65 6e 67 74 68 20 24  t len [llength $
2be0: 72 61 77 5d 0a 20 20 20 20 20 20 20 20 20 20 20  raw].           
2bf0: 20 20 20 20 20 20 20 20 20 73 65 74 20 6c 65 6e           set len
2c00: 5f 32 20 5b 65 78 70 72 20 7b 24 6c 65 6e 20 2d  _2 [expr {$len -
2c10: 20 32 7d 5d 0a 20 20 20 20 20 20 20 20 20 20 20   2}].           
2c20: 20 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73 65           for {se
2c30: 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 6c 65  t i 0} {$i < $le
2c40: 6e 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20  n} {incr i} {.  
2c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c60: 20 20 20 20 20 20 73 65 74 20 77 6f 72 64 20 5b        set word [
2c70: 6c 69 6e 64 65 78 20 24 72 61 77 20 24 69 5d 0a  lindex $raw $i].
2c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c90: 20 20 20 20 20 20 20 20 69 66 20 7b 22 6f 72 22          if {"or"
2ca0: 20 21 3d 20 24 77 6f 72 64 20 26 26 20 24 69 20   != $word && $i 
2cb0: 21 3d 20 24 6c 65 6e 5f 32 7d 20 7b 0a 20 20 20  != $len_2} {.   
2cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd0: 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
2ce0: 20 72 65 73 75 6c 74 20 24 77 6f 72 64 0a 20 20   result $word.  
2cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d00: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2d10: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
2d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d30: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
2d40: 6e 67 74 68 20 24 72 65 73 75 6c 74 5d 0a 20 20  ngth $result].  
2d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d60: 20 20 20 20 20 20 20 20 20 20 26 26 20 2d 31 20            && -1 
2d70: 3d 3d 20 5b 73 74 72 69 6e 67 20 66 69 72 73 74  == [string first
2d80: 20 24 74 72 79 73 74 72 69 6e 67 20 24 72 65 73   $trystring $res
2d90: 75 6c 74 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20  ult]} {.        
2da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db0: 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c  return [TryFromL
2dc0: 69 73 74 20 24 74 65 78 74 20 24 72 65 73 75 6c  ist $text $resul
2dd0: 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t].             
2de0: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
2df0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
2e00: 69 66 20 7b 5b 72 65 67 65 78 70 20 5c 0a 20 20  if {[regexp \.  
2e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 77 72               "wr
2e30: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
2e40: 6c 64 20 62 65 20 5c 22 3f 24 7b 74 63 6d 64 7d  ld be \"?${tcmd}
2e50: 5c 5b 5e 20 5c 74 5c 5d 2a 5c 28 2e 2a 5c 5b 5e  \[^ \t\]*\(.*\[^
2e60: 5c 22 5c 5d 5c 29 22 20 5c 0a 20 20 20 20 20 20  \"\]\)" \.      
2e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e80: 20 20 20 20 20 20 20 20 20 24 6d 73 67 20 61 6c           $msg al
2e90: 6c 20 68 69 6e 74 5d 7d 20 7b 0a 20 20 20 20 20  l hint]} {.     
2ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
2eb0: 20 58 58 58 20 73 65 65 20 74 63 6c 49 6e 64 65   XXX see tclInde
2ec0: 78 4f 62 6a 2e 63 20 58 58 58 0a 20 20 20 20 20  xObj.c XXX.     
2ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2ee0: 66 20 7b 2d 31 20 3d 3d 20 5b 73 74 72 69 6e 67  f {-1 == [string
2ef0: 20 66 69 72 73 74 20 24 74 72 79 73 74 72 69 6e   first $trystrin
2f00: 67 20 24 68 69 6e 74 5d 7d 20 7b 0a 20 20 20 20  g $hint]} {.    
2f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f20: 20 20 20 20 72 65 74 75 72 6e 20 5b 44 69 73 70      return [Disp
2f30: 6c 61 79 48 69 6e 74 73 20 5b 6c 69 73 74 20 3c  layHints [list <
2f40: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 68 69  [string trim $hi
2f50: 6e 74 5d 3e 5d 5d 0a 20 20 20 20 20 20 20 20 20  nt]>]].         
2f60: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
2f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65               } e
2f80: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  lse {.          
2f90: 20 20 20 20 20 20 20 20 20 20 23 20 63 68 65 63            # chec
2fa0: 6b 2c 20 69 66 20 69 74 27 73 20 61 20 62 6c 74  k, if it's a blt
2fb0: 20 65 72 72 6f 72 20 6d 73 67 20 2e 2e 2e 0a 20   error msg .... 
2fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd0: 20 20 20 23 0a 20 20 20 20 20 20 20 20 20 20 20     #.           
2fe0: 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 73 67           set msg
2ff0: 6c 73 74 20 5b 73 70 6c 69 74 20 24 6d 73 67 20  lst [split $msg 
3000: 5c 6e 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  \n].            
3010: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
3020: 6c 69 6e 65 20 24 6d 73 67 6c 73 74 20 7b 0a 20  line $msglst {. 
3030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3040: 20 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67 65         if {[rege
3050: 78 70 20 22 24 7b 74 63 6d 64 7d 5c 5b 20 5c 74  xp "${tcmd}\[ \t
3060: 5c 5d 5c 2b 5c 28 5c 5b 5e 20 5c 74 5c 5d 2a 5c  \]\+\(\[^ \t\]*\
3070: 29 5c 5b 5e 3a 5c 5d 2a 24 22 20 5c 0a 20 20 20  )\[^:\]*$" \.   
3080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6c                $l
30a0: 69 6e 65 20 61 6c 6c 20 73 75 62 5d 7d 20 7b 0a  ine all sub]} {.
30b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70              lapp
30d0: 65 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74  end result [list
30e0: 20 24 73 75 62 5d 0a 20 20 20 20 20 20 20 20 20   $sub].         
30f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
3100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3110: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
3120: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
3130: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 72  string length $r
3140: 65 73 75 6c 74 5d 0a 20 20 20 20 20 20 20 20 20  esult].         
3150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3160: 20 20 20 26 26 20 2d 31 20 3d 3d 20 5b 73 74 72     && -1 == [str
3170: 69 6e 67 20 66 69 72 73 74 20 24 74 72 79 73 74  ing first $tryst
3180: 72 69 6e 67 20 24 72 65 73 75 6c 74 5d 7d 20 7b  ring $result]} {
3190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
31b0: 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 74 65  [TryFromList $te
31c0: 78 74 20 24 72 65 73 75 6c 74 5d 0a 20 20 20 20  xt $result].    
31d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e0: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
31f0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
3200: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  }.            if
3210: 20 7b 22 22 20 3d 3d 20 24 73 74 72 7d 20 7b 0a   {"" == $str} {.
3220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3230: 62 72 65 61 6b 0a 20 20 20 20 20 20 20 20 20 20  break.          
3240: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
3250: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a        return "".
3260: 20 20 20 20 7d 0a 0a 20 20 20 20 23 2a 2a 0a 20      }..    #**. 
3270: 20 20 20 23 20 74 72 79 20 74 6f 20 67 65 74 20     # try to get 
3280: 63 6c 61 73 73 65 73 20 66 6f 72 20 63 6f 6d 6d  classes for comm
3290: 61 6e 64 73 20 77 68 69 63 68 0a 20 20 20 20 23  ands which.    #
32a0: 20 61 6c 6c 6f 77 20 60 63 6f 6e 66 69 67 75 72   allow `configur
32b0: 65 27 20 28 63 67 65 74 29 2e 0a 20 20 20 20 23  e' (cget)..    #
32c0: 20 40 70 61 72 61 6d 20 20 63 6f 6d 6d 61 6e 64   @param  command
32d0: 2e 0a 20 20 20 20 23 20 40 70 61 72 61 6d 20 20  ..    # @param  
32e0: 6f 70 74 69 6f 6e 73 54 20 77 68 65 72 65 20 74  optionsT where t
32f0: 68 65 20 74 61 62 6c 65 20 77 69 6c 6c 20 62 65  he table will be
3300: 20 73 74 6f 72 65 64 2e 0a 20 20 20 20 23 20 40   stored..    # @
3310: 72 65 74 75 72 6e 20 6e 75 6d 62 65 72 20 6f 66  return number of
3320: 20 6f 70 74 69 6f 6e 73 0a 20 20 20 20 23 0a 20   options.    #. 
3330: 20 20 20 70 72 6f 63 20 43 6c 61 73 73 54 61 62     proc ClassTab
3340: 6c 65 20 7b 63 6d 64 7d 20 7b 0a 0a 20 20 20 20  le {cmd} {..    
3350: 20 20 20 20 23 20 66 69 72 73 74 20 77 65 20 62      # first we b
3360: 75 69 6c 64 20 61 6e 20 6f 70 74 69 6f 6e 20 74  uild an option t
3370: 61 62 6c 65 2e 0a 20 20 20 20 20 20 20 20 23 20  able..        # 
3380: 57 65 20 61 6c 77 61 79 73 20 75 73 65 20 60 63  We always use `c
3390: 6f 6e 66 69 67 75 72 65 27 20 68 65 72 65 2c 0a  onfigure' here,.
33a0: 20 20 20 20 20 20 20 20 23 20 62 65 63 61 75 73          # becaus
33b0: 65 20 63 67 65 74 20 77 69 6c 6c 20 6e 6f 74 20  e cget will not 
33c0: 72 65 74 75 72 6e 20 74 68 65 0a 20 20 20 20 20  return the.     
33d0: 20 20 20 23 20 6f 70 74 69 6f 6e 20 74 61 62 6c     # option tabl
33e0: 65 2e 0a 20 20 20 20 20 20 20 20 23 0a 20 20 20  e..        #.   
33f0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch 
3400: 5b 6c 69 73 74 20 73 65 74 20 6f 70 74 69 6f 6e  [list set option
3410: 5f 74 61 62 6c 65 20 5b 65 76 61 6c 20 24 63 6d  _table [eval $cm
3420: 64 20 63 6f 6e 66 69 67 75 72 65 5d 5d 20 6d 73  d configure]] ms
3430: 67 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  g]} {.          
3440: 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20 20    return "".    
3450: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 65      }.        se
3460: 74 20 63 6c 61 73 73 65 73 20 22 22 0a 20 20 20  t classes "".   
3470: 20 20 20 20 20 66 6f 72 65 61 63 68 20 6f 70 74       foreach opt
3480: 6c 69 6e 65 20 24 6f 70 74 69 6f 6e 5f 74 61 62  line $option_tab
3490: 6c 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  le {.           
34a0: 20 69 66 20 7b 35 20 21 3d 20 5b 6c 6c 65 6e 67   if {5 != [lleng
34b0: 74 68 20 24 6f 70 74 6c 69 6e 65 5d 7d 20 7b 0a  th $optline]} {.
34c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d0: 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 20 20  continue.       
34e0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
34f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61                la
3500: 70 70 65 6e 64 20 63 6c 61 73 73 65 73 20 5b 6c  ppend classes [l
3510: 69 6e 64 65 78 20 24 6f 70 74 6c 69 6e 65 20 32  index $optline 2
3520: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ].            }.
3530: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
3540: 20 20 72 65 74 75 72 6e 20 24 63 6c 61 73 73 65    return $classe
3550: 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 2a 2a  s.    }..    #**
3560: 0a 20 20 20 20 23 20 74 72 79 20 74 6f 20 67 65  .    # try to ge
3570: 74 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 63 6f  t options for co
3580: 6d 6d 61 6e 64 73 20 77 68 69 63 68 0a 20 20 20  mmands which.   
3590: 20 23 20 61 6c 6c 6f 77 20 60 63 6f 6e 66 69 67   # allow `config
35a0: 75 72 65 27 20 28 63 67 65 74 29 2e 0a 20 20 20  ure' (cget)..   
35b0: 20 23 20 40 70 61 72 61 6d 20 63 6f 6d 6d 61 6e   # @param comman
35c0: 64 2e 0a 20 20 20 20 23 20 40 70 61 72 61 6d 20  d..    # @param 
35d0: 6f 70 74 69 6f 6e 73 54 20 77 68 65 72 65 20 74  optionsT where t
35e0: 68 65 20 74 61 62 6c 65 20 77 69 6c 6c 20 62 65  he table will be
35f0: 20 73 74 6f 72 65 64 2e 0a 20 20 20 20 23 20 40   stored..    # @
3600: 72 65 74 75 72 6e 20 6e 75 6d 62 65 72 20 6f 66  return number of
3610: 20 6f 70 74 69 6f 6e 73 0a 20 20 20 20 23 0a 20   options.    #. 
3620: 20 20 20 70 72 6f 63 20 4f 70 74 69 6f 6e 54 61     proc OptionTa
3630: 62 6c 65 20 7b 63 6d 64 20 6f 70 74 69 6f 6e 73  ble {cmd options
3640: 54 7d 20 7b 0a 20 20 20 20 20 20 20 20 75 70 76  T} {.        upv
3650: 61 72 20 24 6f 70 74 69 6f 6e 73 54 20 6f 70 74  ar $optionsT opt
3660: 69 6f 6e 73 0a 20 20 20 20 20 20 20 20 23 20 66  ions.        # f
3670: 69 72 73 74 20 77 65 20 62 75 69 6c 64 20 61 6e  irst we build an
3680: 20 6f 70 74 69 6f 6e 20 74 61 62 6c 65 2e 0a 20   option table.. 
3690: 20 20 20 20 20 20 20 23 20 57 65 20 61 6c 77 61         # We alwa
36a0: 79 73 20 75 73 65 20 60 63 6f 6e 66 69 67 75 72  ys use `configur
36b0: 65 27 20 68 65 72 65 2c 0a 20 20 20 20 20 20 20  e' here,.       
36c0: 20 23 20 62 65 63 61 75 73 65 20 63 67 65 74 20   # because cget 
36d0: 77 69 6c 6c 20 6e 6f 74 20 72 65 74 75 72 6e 20  will not return 
36e0: 74 68 65 0a 20 20 20 20 20 20 20 20 23 20 6f 70  the.        # op
36f0: 74 69 6f 6e 20 74 61 62 6c 65 2e 0a 20 20 20 20  tion table..    
3700: 20 20 20 20 23 0a 20 20 20 20 20 20 20 20 69 66      #.        if
3710: 20 7b 5b 63 61 74 63 68 20 5b 6c 69 73 74 20 73   {[catch [list s
3720: 65 74 20 6f 70 74 69 6f 6e 5f 74 61 62 6c 65 20  et option_table 
3730: 5b 65 76 61 6c 20 24 63 6d 64 20 63 6f 6e 66 69  [eval $cmd confi
3740: 67 75 72 65 5d 5d 20 6d 73 67 5d 7d 20 7b 0a 20  gure]] msg]} {. 
3750: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3760: 6e 20 30 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  n 0.        }.  
3770: 20 20 20 20 20 20 73 65 74 20 72 65 74 76 61 6c        set retval
3780: 20 30 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61   0.        forea
3790: 63 68 20 6f 70 74 6c 69 6e 65 20 24 6f 70 74 69  ch optline $opti
37a0: 6f 6e 5f 74 61 62 6c 65 20 7b 0a 20 20 20 20 20  on_table {.     
37b0: 20 20 20 20 20 20 20 69 66 20 7b 35 20 3d 3d 20         if {5 == 
37c0: 5b 6c 6c 65 6e 67 74 68 20 24 6f 70 74 6c 69 6e  [llength $optlin
37d0: 65 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  e]} {.          
37e0: 20 20 20 20 20 20 23 20 74 6b 20 72 65 74 75 72        # tk retur
37f0: 6e 73 20 61 20 6c 69 73 74 20 6f 66 20 6c 65 6e  ns a list of len
3800: 67 74 68 20 35 0a 20 20 20 20 20 20 20 20 20 20  gth 5.          
3810: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6f 70        lappend op
3820: 74 69 6f 6e 73 28 73 77 69 74 63 68 65 73 29 20  tions(switches) 
3830: 5b 6c 69 6e 64 65 78 20 24 6f 70 74 6c 69 6e 65  [lindex $optline
3840: 20 30 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20   0].            
3850: 20 20 20 20 6c 61 70 70 65 6e 64 20 6f 70 74 69      lappend opti
3860: 6f 6e 73 28 76 61 6c 75 65 29 20 20 20 20 5b 6c  ons(value)    [l
3870: 69 6e 64 65 78 20 24 6f 70 74 6c 69 6e 65 20 34  index $optline 4
3880: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
3890: 20 20 69 6e 63 72 20 72 65 74 76 61 6c 0a 20 20    incr retval.  
38a0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
38b0: 69 66 20 7b 33 20 3d 3d 20 5b 6c 6c 65 6e 67 74  if {3 == [llengt
38c0: 68 20 24 6f 70 74 6c 69 6e 65 5d 7d 20 7b 0a 20  h $optline]} {. 
38d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
38e0: 20 69 74 63 6c 20 72 65 74 75 72 6e 73 20 61 20   itcl returns a 
38f0: 6c 69 73 74 20 6f 66 20 6c 65 6e 67 74 68 20 33  list of length 3
3900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3910: 20 6c 61 70 70 65 6e 64 20 6f 70 74 69 6f 6e 73   lappend options
3920: 28 73 77 69 74 63 68 65 73 29 20 5b 6c 69 6e 64  (switches) [lind
3930: 65 78 20 24 6f 70 74 6c 69 6e 65 20 30 5d 0a 20  ex $optline 0]. 
3940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
3950: 61 70 70 65 6e 64 20 6f 70 74 69 6f 6e 73 28 76  append options(v
3960: 61 6c 75 65 29 20 20 20 20 5b 6c 69 6e 64 65 78  alue)    [lindex
3970: 20 24 6f 70 74 6c 69 6e 65 20 32 5d 0a 20 20 20   $optline 2].   
3980: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 63               inc
3990: 72 20 72 65 74 76 61 6c 0a 20 20 20 20 20 20 20  r retval.       
39a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
39b0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
39c0: 24 72 65 74 76 61 6c 0a 20 20 20 20 7d 0a 0a 20  $retval.    }.. 
39d0: 20 20 20 23 2a 2a 0a 20 20 20 20 23 20 74 72 79     #**.    # try
39e0: 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 61 20 60   to complete a `
39f0: 63 6d 64 20 63 6f 6e 66 69 67 75 72 65 7c 63 67  cmd configure|cg
3a00: 65 74 20 2e 2e 27 20 66 72 6f 6d 20 74 68 65 20  et ..' from the 
3a10: 63 6f 6d 6d 61 6e 64 27 73 20 6f 70 74 69 6f 6e  command's option
3a20: 73 2e 0a 20 20 20 20 23 20 40 70 61 72 61 6d 20  s..    # @param 
3a30: 20 20 74 65 78 74 20 73 74 61 72 74 20 6c 69 6e    text start lin
3a40: 65 20 63 6d 64 2c 20 73 74 61 6e 64 61 72 64 20  e cmd, standard 
3a50: 74 63 6c 72 65 61 64 6c 69 6e 65 43 6f 6d 70 6c  tclreadlineCompl
3a60: 65 74 65 72 20 61 72 67 75 6d 65 6e 74 73 2e 0a  eter arguments..
3a70: 20 20 20 20 23 20 40 72 65 74 75 72 6e 20 20 2d      # @return  -
3a80: 2d 20 61 20 66 6c 61 67 20 69 6e 64 69 63 61 74  - a flag indicat
3a90: 69 6e 67 2c 20 69 66 20 28 63 67 65 74 7c 63 6f  ing, if (cget|co
3aa0: 6e 66 69 67 75 72 65 29 20 77 61 73 20 66 6f 75  nfigure) was fou
3ab0: 6e 64 2e 0a 20 20 20 20 23 20 40 72 65 74 75 72  nd..    # @retur
3ac0: 6e 20 20 72 65 73 75 6c 74 54 20 2d 2d 20 61 20  n  resultT -- a 
3ad0: 74 63 6c 72 65 61 64 6c 69 6e 65 20 63 6f 6d 70  tclreadline comp
3ae0: 6c 65 74 65 72 20 66 6f 72 6d 61 74 74 65 64 20  leter formatted 
3af0: 73 74 72 69 6e 67 2e 0a 20 20 20 20 23 0a 20 20  string..    #.  
3b00: 20 20 70 72 6f 63 20 43 6f 6d 70 6c 65 74 65 46    proc CompleteF
3b10: 72 6f 6d 4f 70 74 69 6f 6e 73 20 7b 74 65 78 74  romOptions {text
3b20: 20 73 74 61 72 74 20 6c 69 6e 65 20 72 65 73 75   start line resu
3b30: 6c 74 54 7d 20 7b 0a 0a 20 20 20 20 20 20 20 20  ltT} {..        
3b40: 75 70 76 61 72 20 24 72 65 73 75 6c 74 54 20 72  upvar $resultT r
3b50: 65 73 75 6c 74 0a 20 20 20 20 20 20 20 20 73 65  esult.        se
3b60: 74 20 72 65 73 75 6c 74 20 22 22 0a 0a 20 20 20  t result ""..   
3b70: 20 20 20 20 20 23 20 63 68 65 63 6b 20 69 66 20       # check if 
3b80: 65 69 74 68 65 72 20 60 63 6f 6e 66 69 67 75 72  either `configur
3b90: 65 27 20 6f 72 20 60 63 67 65 74 27 20 69 73 20  e' or `cget' is 
3ba0: 70 72 65 73 65 6e 74 2e 0a 20 20 20 20 20 20 20  present..       
3bb0: 20 23 0a 20 20 20 20 20 20 20 20 73 65 74 20 6c   #.        set l
3bc0: 73 74 20 5b 50 72 6f 70 65 72 4c 69 73 74 20 24  st [ProperList $
3bd0: 6c 69 6e 65 5d 0a 20 20 20 20 20 20 20 20 66 6f  line].        fo
3be0: 72 65 61 63 68 20 6b 65 79 77 6f 72 64 20 7b 63  reach keyword {c
3bf0: 6f 6e 66 69 67 75 72 65 20 63 67 65 74 7d 20 7b  onfigure cget} {
3c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
3c10: 20 69 64 78 20 5b 6c 73 65 61 72 63 68 20 24 6c   idx [lsearch $l
3c20: 73 74 20 24 6b 65 79 77 6f 72 64 5d 0a 20 20 20  st $keyword].   
3c30: 20 20 20 20 20 20 20 20 20 69 66 20 7b 2d 31 20           if {-1 
3c40: 21 3d 20 24 69 64 78 7d 20 7b 0a 20 20 20 20 20  != $idx} {.     
3c50: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
3c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
3c70: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
3c80: 20 69 66 20 7b 2d 31 20 3d 3d 20 24 69 64 78 7d   if {-1 == $idx}
3c90: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72   {.            r
3ca0: 65 74 75 72 6e 20 30 0a 20 20 20 20 20 20 20 20  eturn 0.        
3cb0: 7d 0a 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  }..        if {[
3cc0: 72 65 67 65 78 70 20 7b 28 63 67 65 74 7c 63 6f  regexp {(cget|co
3cd0: 6e 66 69 67 75 72 65 29 24 7d 20 24 6c 69 6e 65  nfigure)$} $line
3ce0: 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ]} {.           
3cf0: 20 23 20 77 65 20 61 72 65 20 61 74 20 74 68 65   # we are at the
3d00: 20 65 6e 64 20 6f 66 20 28 63 6f 6e 66 69 67 75   end of (configu
3d10: 72 65 7c 63 67 65 74 29 0a 20 20 20 20 20 20 20  re|cget).       
3d20: 20 20 20 20 20 23 20 62 75 74 20 74 68 65 72 65       # but there
3d30: 27 73 20 6e 6f 20 73 70 61 63 65 20 79 65 74 2e  's no space yet.
3d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0a 20  .            #. 
3d50: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 72             set r
3d60: 65 73 75 6c 74 20 24 74 65 78 74 0a 20 20 20 20  esult $text.    
3d70: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
3d80: 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  .        }..    
3d90: 20 20 20 20 23 20 73 65 70 61 72 61 74 65 20 74      # separate t
3da0: 68 65 20 63 6f 6d 6d 61 6e 64 2c 20 62 75 74 20  he command, but 
3db0: 65 78 63 6c 75 64 65 20 28 63 67 65 74 7c 63 6f  exclude (cget|co
3dc0: 6e 66 69 67 75 72 65 29 0a 20 20 20 20 20 20 20  nfigure).       
3dd0: 20 23 20 62 65 63 61 75 73 65 20 63 67 65 74 20   # because cget 
3de0: 77 6f 6e 27 74 20 72 65 74 75 72 6e 20 74 68 65  won't return the
3df0: 20 6f 70 74 69 6f 6e 20 74 61 62 6c 65 2e 20 49   option table. I
3e00: 6e 73 74 65 61 64 0a 20 20 20 20 20 20 20 20 23  nstead.        #
3e10: 20 4f 70 74 69 6f 6e 54 61 62 6c 65 20 61 6c 77   OptionTable alw
3e20: 61 79 73 20 75 73 65 73 20 60 63 6f 6e 66 69 67  ays uses `config
3e30: 75 72 65 27 20 74 6f 20 67 65 74 20 74 68 65 0a  ure' to get the.
3e40: 20 20 20 20 20 20 20 20 23 20 6f 70 74 69 6f 6e          # option
3e50: 20 74 61 62 6c 65 2e 0a 20 20 20 20 20 20 20 20   table..        
3e60: 23 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6d  #.        set cm
3e70: 64 20 5b 6c 72 61 6e 67 65 20 24 6c 73 74 20 30  d [lrange $lst 0
3e80: 20 5b 65 78 70 72 20 7b 24 69 64 78 20 2d 20 31   [expr {$idx - 1
3e90: 7d 5d 5d 0a 0a 20 20 20 20 20 20 20 20 54 72 61  }]]..        Tra
3ea0: 63 65 54 65 78 74 20 24 63 6d 64 0a 20 20 20 20  ceText $cmd.    
3eb0: 20 20 20 20 69 66 20 7b 30 20 3c 20 5b 4f 70 74      if {0 < [Opt
3ec0: 69 6f 6e 54 61 62 6c 65 20 24 63 6d 64 20 6f 70  ionTable $cmd op
3ed0: 74 69 6f 6e 73 5d 7d 20 7b 0a 0a 20 20 20 20 20  tions]} {..     
3ee0: 20 20 20 20 20 20 20 73 65 74 20 70 72 65 76 20         set prev 
3ef0: 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 73  [PreviousWord $s
3f00: 74 61 72 74 20 24 6c 69 6e 65 5d 0a 20 20 20 20  tart $line].    
3f10: 20 20 20 20 20 20 20 20 69 66 20 7b 2d 31 20 21          if {-1 !
3f20: 3d 20 5b 73 65 74 20 66 6f 75 6e 64 20 5b 6c 73  = [set found [ls
3f30: 65 61 72 63 68 20 2d 65 78 61 63 74 20 24 6f 70  earch -exact $op
3f40: 74 69 6f 6e 73 28 73 77 69 74 63 68 65 73 29 20  tions(switches) 
3f50: 24 70 72 65 76 5d 5d 7d 20 7b 0a 0a 20 20 20 20  $prev]]} {..    
3f60: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 63 6f              # co
3f70: 6d 70 6c 65 74 65 20 6f 6e 6c 79 20 69 66 20 74  mplete only if t
3f80: 68 65 20 75 73 65 72 20 68 61 73 20 6e 6f 74 0a  he user has not.
3f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fa0: 23 20 61 6c 72 65 61 64 79 20 65 6e 74 65 72 65  # already entere
3fb0: 64 20 73 6f 6d 65 74 68 69 6e 67 20 68 65 72 65  d something here
3fc0: 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3fd0: 20 20 23 0a 20 20 20 20 20 20 20 20 20 20 20 20    #.            
3fe0: 20 20 20 20 69 66 20 7b 21 5b 6c 6c 65 6e 67 74      if {![llengt
3ff0: 68 20 24 74 65 78 74 5d 7d 20 7b 0a 0a 20 20 20  h $text]} {..   
4000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4010: 20 23 20 63 68 65 63 6b 20 66 69 72 73 74 2c 20   # check first, 
4020: 69 66 20 74 68 65 20 53 70 65 63 69 66 69 63 53  if the SpecificS
4030: 77 69 74 63 68 43 6f 6d 70 6c 65 74 65 72 0a 20  witchCompleter. 
4040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4050: 20 20 20 23 20 6b 6e 6f 77 73 20 73 6f 6d 65 74     # knows somet
4060: 68 69 6e 67 20 61 62 6f 75 74 20 74 68 69 73 20  hing about this 
4070: 73 77 69 74 63 68 2e 20 28 6e 6f 74 65 20 74 68  switch. (note th
4080: 61 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  at.             
4090: 20 20 20 20 20 20 20 23 20 60 70 72 65 76 27 20         # `prev' 
40a0: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 73 77 69  contains the swi
40b0: 74 63 68 29 2e 20 54 68 65 20 60 30 27 20 61 73  tch). The `0' as
40c0: 20 6c 61 73 74 0a 20 20 20 20 20 20 20 20 20 20   last.          
40d0: 20 20 20 20 20 20 20 20 20 20 23 20 61 72 67 75            # argu
40e0: 6d 65 6e 74 20 6d 61 6b 65 73 20 74 68 65 20 53  ment makes the S
40f0: 70 65 63 69 66 69 63 53 77 69 74 63 68 43 6f 6d  pecificSwitchCom
4100: 70 6c 65 74 65 72 0a 20 20 20 20 20 20 20 20 20  pleter.         
4110: 20 20 20 20 20 20 20 20 20 20 20 23 20 72 65 74             # ret
4120: 75 72 6e 69 6e 67 20 22 22 20 69 66 20 69 74 20  urning "" if it 
4130: 6b 6e 6f 77 73 20 6e 6f 74 68 69 6e 67 20 73 70  knows nothing sp
4140: 65 63 69 66 69 63 0a 20 20 20 20 20 20 20 20 20  ecific.         
4150: 20 20 20 20 20 20 20 20 20 20 20 23 20 61 62 6f             # abo
4160: 75 74 20 74 68 69 73 20 73 77 69 74 63 68 2e 0a  ut this switch..
4170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4180: 20 20 20 20 23 0a 20 20 20 20 20 20 20 20 20 20      #.          
4190: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 61            set va
41a0: 6c 75 65 73 20 5b 53 70 65 63 69 66 69 63 53 77  lues [SpecificSw
41b0: 69 74 63 68 43 6f 6d 70 6c 65 74 65 72 20 5c 0a  itchCompleter \.
41c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41e0: 20 20 20 20 24 74 65 78 74 20 24 73 74 61 72 74      $text $start
41f0: 20 24 6c 69 6e 65 20 24 70 72 65 76 20 30 5d 0a   $line $prev 0].
4200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4210: 20 20 20 20 20 69 66 20 5b 73 74 72 69 6e 67 20       if [string 
4220: 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 73 5d 20  length $values] 
4230: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
4240: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 72 65            set re
4250: 73 75 6c 74 20 24 76 61 6c 75 65 73 0a 20 20 20  sult $values.   
4260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4270: 20 20 20 20 20 72 65 74 75 72 6e 20 31 0a 20 20       return 1.  
4280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4290: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
42a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42b0: 20 20 20 73 65 74 20 76 61 6c 20 5b 6c 69 6e 64     set val [lind
42c0: 65 78 20 24 6f 70 74 69 6f 6e 73 28 76 61 6c 75  ex $options(valu
42d0: 65 29 20 24 66 6f 75 6e 64 5d 0a 20 20 20 20 20  e) $found].     
42e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42f0: 20 20 20 69 66 20 5b 73 74 72 69 6e 67 20 6c 65     if [string le
4300: 6e 67 74 68 20 24 76 61 6c 5d 20 7b 0a 20 20 20  ngth $val] {.   
4310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4320: 20 20 20 20 20 20 20 20 20 23 20 72 65 74 75 72           # retur
4330: 6e 20 74 68 65 20 6f 6c 64 20 76 61 6c 75 65 20  n the old value 
4340: 6f 6e 6c 79 2c 20 69 66 20 69 74 27 73 20 6e 6f  only, if it's no
4350: 6e 2d 65 6d 70 74 79 2e 0a 20 20 20 20 20 20 20  n-empty..       
4360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4370: 20 20 20 20 20 23 20 55 73 65 20 74 68 69 73 20       # Use this 
4380: 64 6f 75 62 6c 65 20 6c 69 73 74 20 74 6f 20 71  double list to q
4390: 75 6f 74 65 20 6f 70 74 69 6f 6e 0a 20 20 20 20  uote option.    
43a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43b0: 20 20 20 20 20 20 20 20 23 20 76 61 6c 75 65 73          # values
43c0: 20 77 68 69 63 68 20 68 61 76 65 20 74 6f 20 62   which have to b
43d0: 65 20 71 75 6f 74 65 64 2e 0a 20 20 20 20 20 20  e quoted..      
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43f0: 20 20 20 20 20 20 23 0a 20 20 20 20 20 20 20 20        #.        
4400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4410: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b      set result [
4420: 6c 69 73 74 20 5b 6c 69 73 74 20 24 76 61 6c 5d  list [list $val]
4430: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
4440: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
4450: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
4460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
4470: 65 74 20 72 65 73 75 6c 74 20 22 22 0a 20 20 20  et result "".   
4480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4490: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
44a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
44b0: 65 74 75 72 6e 20 31 0a 20 20 20 20 20 20 20 20  eturn 1.        
44c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20                } 
44e0: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20  else {.         
44f0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 72             set r
4500: 65 73 75 6c 74 20 5b 53 70 65 63 69 66 69 63 53  esult [SpecificS
4510: 77 69 74 63 68 43 6f 6d 70 6c 65 74 65 72 20 5c  witchCompleter \
4520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4540: 20 20 20 20 20 24 74 65 78 74 20 24 73 74 61 72       $text $star
4550: 74 20 24 6c 69 6e 65 20 24 70 72 65 76 20 31 5d  t $line $prev 1]
4560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4570: 20 20 20 20 20 72 65 74 75 72 6e 20 31 0a 20 20       return 1.  
4580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
4590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
45a0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  lse {.          
45b0: 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74        set result
45c0: 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
45d0: 73 74 20 24 74 65 78 74 20 5c 0a 20 20 20 20 20  st $text \.     
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45f0: 20 20 20 20 20 20 20 20 20 20 20 5b 52 65 6d 6f             [Remo
4600: 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c  veUsedOptions $l
4610: 69 6e 65 20 24 6f 70 74 69 6f 6e 73 28 73 77 69  ine $options(swi
4620: 74 63 68 65 73 29 5d 5d 0a 20 20 20 20 20 20 20  tches)]].       
4630: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4640: 31 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  1.            }.
4650: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4660: 20 20 72 65 74 75 72 6e 20 31 0a 20 20 20 20 7d    return 1.    }
4670: 0a 0a 20 20 20 20 70 72 6f 63 20 4f 62 6a 65 63  ..    proc Objec
4680: 74 43 6c 61 73 73 43 6f 6d 70 6c 65 74 65 72 20  tClassCompleter 
4690: 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
46a0: 6c 69 6e 65 20 70 6f 73 20 72 65 73 75 6c 74 54  line pos resultT
46b0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 75 70 76 61  } {.        upva
46c0: 72 20 24 72 65 73 75 6c 74 54 20 72 65 73 75 6c  r $resultT resul
46d0: 74 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6d  t.        set cm
46e0: 64 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20  d [Lindex $line 
46f0: 30 5d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 22  0].        if {"
4700: 2e 22 20 3d 3d 20 5b 73 74 72 69 6e 67 20 69 6e  ." == [string in
4710: 64 65 78 20 24 6c 69 6e 65 20 30 5d 7d 20 7b 0a  dex $line 0]} {.
4720: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 69 74              # it
4730: 27 73 20 61 20 77 69 64 67 65 74 2e 20 54 72 79  's a widget. Try
4740: 20 74 6f 20 67 65 74 20 69 74 27 73 20 63 6c 61   to get it's cla
4750: 73 73 20 6e 61 6d 65 2e 0a 20 20 20 20 20 20 20  ss name..       
4760: 20 20 20 20 20 23 0a 20 20 20 20 20 20 20 20 20       #.         
4770: 20 20 20 69 66 20 7b 21 5b 63 61 74 63 68 20 5b     if {![catch [
4780: 6c 69 73 74 20 73 65 74 20 63 6c 61 73 73 20 5b  list set class [
4790: 77 69 6e 66 6f 20 63 6c 61 73 73 20 5b 4c 69 6e  winfo class [Lin
47a0: 64 65 78 20 24 6c 69 6e 65 20 30 5d 5d 5d 5d 7d  dex $line 0]]]]}
47b0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
47c0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
47d0: 65 6e 67 74 68 20 5b 69 6e 66 6f 20 70 72 6f 63  ength [info proc
47e0: 20 24 7b 63 6c 61 73 73 7d 4f 62 6a 5d 5d 7d 20   ${class}Obj]]} 
47f0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
4800: 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74        set result
4810: 20 5b 24 7b 63 6c 61 73 73 7d 4f 62 6a 20 24 74   [${class}Obj $t
4820: 65 78 74 20 24 73 74 61 72 74 20 24 65 6e 64 20  ext $start $end 
4830: 24 6c 69 6e 65 20 24 70 6f 73 5d 0a 20 20 20 20  $line $pos].    
4840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4850: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
4860: 74 68 20 24 72 65 73 75 6c 74 5d 7d 20 7b 0a 20  th $result]} {. 
4870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4880: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 0a         return 1.
4890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48a0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
48b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48c0: 20 20 20 20 20 72 65 74 75 72 6e 20 30 0a 20 20       return 0.  
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48e0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
48f0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
4900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4910: 20 72 65 74 75 72 6e 20 30 0a 20 20 20 20 20 20   return 0.      
4920: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
4930: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4940: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b    }.        if {
4950: 21 5b 63 61 74 63 68 20 7b 73 65 74 20 74 79 70  ![catch {set typ
4960: 65 20 5b 69 6d 61 67 65 20 74 79 70 65 20 24 63  e [image type $c
4970: 6d 64 5d 7d 5d 7d 20 7b 0a 20 20 20 20 20 20 20  md]}]} {.       
4980: 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24       switch -- $
4990: 74 79 70 65 20 7b 0a 20 20 20 20 20 20 20 20 20  type {.         
49a0: 20 20 20 20 20 20 20 70 68 6f 74 6f 20 7b 0a 20         photo {. 
49b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
49c0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 50     set result [P
49d0: 68 6f 74 6f 4f 62 6a 20 24 74 65 78 74 20 24 73  hotoObj $text $s
49e0: 74 61 72 74 20 24 65 6e 64 20 24 6c 69 6e 65 20  tart $end $line 
49f0: 24 70 6f 73 5d 0a 20 20 20 20 20 20 20 20 20 20  $pos].          
4a00: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4a10: 20 31 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   1.             
4a20: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
4a30: 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20       default {. 
4a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a50: 20 20 20 23 20 6c 65 74 20 74 68 65 20 66 61 6c     # let the fal
4a60: 6c 62 61 63 6b 20 63 6f 6d 70 6c 65 74 65 72 73  lback completers
4a70: 20 64 6f 20 74 68 65 20 6a 6f 62 2e 0a 20 20 20   do the job..   
4a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a90: 20 72 65 74 75 72 6e 20 30 0a 20 20 20 20 20 20   return 0.      
4aa0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
4ab0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4ac0: 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75    }.        retu
4ad0: 72 6e 20 30 0a 20 20 20 20 7d 0a 0a 20 20 20 20  rn 0.    }..    
4ae0: 70 72 6f 63 20 43 6f 6d 70 6c 65 74 65 46 72 6f  proc CompleteFro
4af0: 6d 4f 70 74 69 6f 6e 73 4f 72 53 75 62 43 6d 64  mOptionsOrSubCmd
4b00: 73 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  s {text start en
4b10: 64 20 6c 69 6e 65 20 70 6f 73 7d 20 7b 0a 20 20  d line pos} {.  
4b20: 20 20 20 20 20 20 69 66 20 5b 43 6f 6d 70 6c 65        if [Comple
4b30: 74 65 46 72 6f 6d 4f 70 74 69 6f 6e 73 20 24 74  teFromOptions $t
4b40: 65 78 74 20 24 73 74 61 72 74 20 24 6c 69 6e 65  ext $start $line
4b50: 20 66 72 6f 6d 5f 6f 70 74 73 5d 20 7b 0a 20 20   from_opts] {.  
4b60: 20 20 20 20 20 20 20 20 20 20 23 20 61 6c 77 61            # alwa
4b70: 79 73 20 72 65 74 75 72 6e 2c 20 69 66 20 43 6f  ys return, if Co
4b80: 6d 70 6c 65 74 65 46 72 6f 6d 4f 70 74 69 6f 6e  mpleteFromOption
4b90: 73 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  s returns non-ze
4ba0: 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ro,.            
4bb0: 23 20 74 68 61 74 20 6d 65 61 6e 73 20 28 63 6f  # that means (co
4bc0: 6e 66 69 67 75 72 65 7c 63 67 65 74 29 20 77 65  nfigure|cget) we
4bd0: 72 65 20 70 72 65 73 65 6e 74 2e 20 54 68 69 73  re present. This
4be0: 20 65 6e 73 75 72 65 73 0a 20 20 20 20 20 20 20   ensures.       
4bf0: 20 20 20 20 20 23 20 74 68 61 74 20 54 72 79 53       # that TryS
4c00: 75 62 43 6d 64 73 20 77 69 6c 6c 20 6e 6f 74 20  ubCmds will not 
4c10: 63 6f 6e 66 69 67 75 72 65 20 73 6f 6d 65 74 68  configure someth
4c20: 69 6e 67 20 62 79 20 63 68 61 6e 63 65 2e 0a 20  ing by chance.. 
4c30: 20 20 20 20 20 20 20 20 20 20 20 23 0a 20 20 20             #.   
4c40: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4c50: 24 66 72 6f 6d 5f 6f 70 74 73 0a 20 20 20 20 20  $from_opts.     
4c60: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
4c70: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
4c80: 54 72 79 53 75 62 43 6d 64 73 20 24 74 65 78 74  TrySubCmds $text
4c90: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   \.             
4ca0: 20 20 20 20 20 20 20 20 20 20 20 5b 6c 72 61 6e             [lran
4cb0: 67 65 20 5b 50 72 6f 70 65 72 4c 69 73 74 20 24  ge [ProperList $
4cc0: 6c 69 6e 65 5d 20 30 20 5b 65 78 70 72 20 7b 24  line] 0 [expr {$
4cd0: 70 6f 73 20 2d 20 31 7d 5d 5d 5d 0a 20 20 20 20  pos - 1}]]].    
4ce0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65      }.        re
4cf0: 74 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20  turn "".    }.. 
4d00: 20 20 20 23 2a 2a 0a 20 20 20 20 23 20 54 4f 44     #**.    # TOD
4d10: 4f 3a 20 73 68 69 74 2e 20 6d 61 6b 65 20 74 68  O: shit. make th
4d20: 69 73 20 62 65 74 74 65 72 21 0a 20 20 20 20 23  is better!.    #
4d30: 20 40 70 61 72 61 6d 20 20 74 65 78 74 2c 20 61   @param  text, a
4d40: 20 73 74 64 20 63 6f 6d 70 6c 65 74 65 72 20 61   std completer a
4d50: 72 67 75 6d 65 6e 74 20 28 63 75 72 72 65 6e 74  rgument (current
4d60: 20 77 6f 72 64 29 2e 0a 20 20 20 20 23 20 40 70   word)..    # @p
4d70: 61 72 61 6d 20 20 66 75 6c 6c 70 61 72 74 2c 20  aram  fullpart, 
4d80: 74 68 65 20 66 75 6c 6c 20 74 65 78 74 20 6f 66  the full text of
4d90: 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 6f 73   the current pos
4da0: 69 74 69 6f 6e 2e 0a 20 20 20 20 23 20 40 70 61  ition..    # @pa
4db0: 72 61 6d 20 20 6c 73 74 2c 20 74 68 65 20 6c 69  ram  lst, the li
4dc0: 73 74 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 66  st to complete f
4dd0: 72 6f 6d 2e 0a 20 20 20 20 23 20 40 70 61 72 61  rom..    # @para
4de0: 6d 20 20 70 72 65 2c 20 6c 65 61 64 69 6e 67 20  m  pre, leading 
4df0: 60 71 75 6f 74 65 27 2e 0a 20 20 20 20 23 20 40  `quote'..    # @
4e00: 70 61 72 61 6d 20 20 73 65 70 2c 20 77 6f 72 64  param  sep, word
4e10: 20 73 65 70 61 72 61 74 6f 72 2e 0a 20 20 20 20   separator..    
4e20: 23 20 40 70 61 72 61 6d 20 20 70 6f 73 74 2c 20  # @param  post, 
4e30: 74 72 61 69 6c 69 6e 67 20 60 71 75 6f 74 65 27  trailing `quote'
4e40: 2e 0a 20 20 20 20 23 20 40 72 65 74 75 72 6e 20  ..    # @return 
4e50: 61 20 66 6f 72 6d 61 74 74 65 64 20 63 6f 6d 70  a formatted comp
4e60: 6c 65 74 65 72 20 73 74 72 69 6e 67 2e 0a 20 20  leter string..  
4e70: 20 20 23 0a 20 20 20 20 70 72 6f 63 20 43 6f 6d    #.    proc Com
4e80: 70 6c 65 74 65 4c 69 73 74 46 72 6f 6d 4c 69 73  pleteListFromLis
4e90: 74 20 7b 74 65 78 74 20 66 75 6c 6c 70 61 72 74  t {text fullpart
4ea0: 20 6c 73 74 20 70 72 65 20 73 65 70 20 70 6f 73   lst pre sep pos
4eb0: 74 7d 20 7b 0a 0a 20 20 20 20 20 20 20 20 69 66  t} {..        if
4ec0: 20 7b 21 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74   {![string lengt
4ed0: 68 20 24 66 75 6c 6c 70 61 72 74 5d 7d 20 7b 0a  h $fullpart]} {.
4ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 6e  .            # n
4ef0: 6f 74 68 69 6e 67 20 74 79 70 65 64 20 73 6f 20  othing typed so 
4f00: 66 61 72 2e 20 49 6e 73 65 72 74 20 61 20 24 70  far. Insert a $p
4f10: 72 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  re.            #
4f20: 20 61 6e 64 20 69 6e 68 69 62 69 74 20 66 75 72   and inhibit fur
4f30: 74 68 65 72 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e  ther completion.
4f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0a 20  .            #. 
4f50: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4f60: 6e 20 5b 6c 69 73 74 20 24 70 72 65 20 7b 7d 5d  n [list $pre {}]
4f70: 0a 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
4f80: 69 66 20 7b 24 70 6f 73 74 20 3d 3d 20 5b 53 74  if {$post == [St
4f90: 72 69 6e 67 20 69 6e 64 65 78 20 24 74 65 78 74  ring index $text
4fa0: 20 65 6e 64 5d 7d 20 7b 0a 0a 20 20 20 20 20 20   end]} {..      
4fb0: 20 20 20 20 20 20 23 20 66 69 6e 61 6c 69 7a 65        # finalize
4fc0: 2c 20 61 70 70 65 6e 64 20 74 68 65 20 70 6f 73  , append the pos
4fd0: 74 20 61 6e 64 20 61 20 73 70 61 63 65 2e 0a 20  t and a space.. 
4fe0: 20 20 20 20 20 20 20 20 20 20 20 23 0a 20 20 20             #.   
4ff0: 20 20 20 20 20 20 20 20 20 73 65 74 20 64 69 66           set dif
5000: 66 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  f \.            
5010: 20 20 20 20 5b 65 78 70 72 20 7b 5b 43 6f 75 6e      [expr {[Coun
5020: 74 43 68 61 72 20 24 66 75 6c 6c 70 61 72 74 20  tChar $fullpart 
5030: 24 70 72 65 5d 20 2d 20 5b 43 6f 75 6e 74 43 68  $pre] - [CountCh
5040: 61 72 20 24 66 75 6c 6c 70 61 72 74 20 24 70 6f  ar $fullpart $po
5050: 73 74 5d 7d 5d 0a 20 20 20 20 20 20 20 20 20 20  st]}].          
5060: 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20    for {set i 0} 
5070: 7b 24 69 20 3c 20 24 64 69 66 66 7d 20 7b 69 6e  {$i < $diff} {in
5080: 63 72 20 69 7d 20 7b 0a 20 20 20 20 20 20 20 20  cr i} {.        
5090: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 74          append t
50a0: 65 78 74 20 24 70 6f 73 74 0a 20 20 20 20 20 20  ext $post.      
50b0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
50c0: 20 20 20 20 61 70 70 65 6e 64 20 74 65 78 74 20      append text 
50d0: 22 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  " ".            
50e0: 72 65 74 75 72 6e 20 24 74 65 78 74 0a 0a 20 20  return $text..  
50f0: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
5100: 21 5b 72 65 67 65 78 70 20 2d 2d 20 5e 5c 28 2e  ![regexp -- ^\(.
5110: 2a 5c 5b 24 7b 70 72 65 7d 24 7b 73 65 70 7d 5c  *\[${pre}${sep}\
5120: 5d 5c 29 5c 28 5c 5b 5e 24 7b 70 72 65 7d 24 7b  ]\)\(\[^${pre}${
5130: 73 65 70 7d 5c 5d 2a 5c 29 24 20 5c 0a 20 20 20  sep}\]*\)$ \.   
5140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5150: 20 20 20 20 20 24 74 65 78 74 20 61 6c 6c 20 6c       $text all l
5160: 65 66 74 20 72 69 67 68 74 5d 7d 20 7b 0a 20 20  eft right]} {.  
5170: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6c 65            set le
5180: 66 74 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20  ft {}.          
5190: 20 20 73 65 74 20 72 69 67 68 74 20 24 74 65 78    set right $tex
51a0: 74 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20  t.        }..   
51b0: 20 20 20 20 20 23 20 54 72 61 63 65 56 61 72 20       # TraceVar 
51c0: 6c 65 66 74 0a 20 20 20 20 20 20 20 20 23 20 54  left.        # T
51d0: 72 61 63 65 56 61 72 20 72 69 67 68 74 0a 0a 20  raceVar right.. 
51e0: 20 20 20 20 20 20 20 73 65 74 20 65 78 61 63 74         set exact
51f0: 5f 6d 61 74 63 68 65 73 20 5b 4d 61 74 63 68 65  _matches [Matche
5200: 73 46 72 6f 6d 4c 69 73 74 20 24 72 69 67 68 74  sFromList $right
5210: 20 24 6c 73 74 5d 0a 20 20 20 20 20 20 20 20 23   $lst].        #
5220: 20 54 4f 44 4f 20 74 68 69 73 20 69 73 20 61 77   TODO this is aw
5230: 6b 77 61 72 64 2e 20 54 68 69 6e 6b 20 6f 66 20  kward. Think of 
5240: 6d 61 6b 69 6e 67 20 69 74 20 62 65 74 74 65 72  making it better
5250: 21 0a 20 20 20 20 20 20 20 20 23 0a 20 20 20 20  !.        #.    
5260: 20 20 20 20 69 66 20 7b 31 20 3d 3d 20 5b 6c 6c      if {1 == [ll
5270: 65 6e 67 74 68 20 24 65 78 61 63 74 5f 6d 61 74  ength $exact_mat
5280: 63 68 65 73 5d 20 26 26 20 2d 31 20 21 3d 20 5b  ches] && -1 != [
5290: 6c 73 65 61 72 63 68 20 24 6c 73 74 20 24 72 69  lsearch $lst $ri
52a0: 67 68 74 5d 0a 20 20 20 20 20 20 20 20 7d 20 7b  ght].        } {
52b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 73 65  .            #se
52c0: 74 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 5b 43 6f  t completion [Co
52d0: 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
52e0: 72 69 67 68 74 20 5b 6c 69 73 74 20 24 73 65 70  right [list $sep
52f0: 20 24 70 6f 73 74 5d 20 31 5d 0a 20 20 20 20 20   $post] 1].     
5300: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c         return [l
5310: 69 73 74 20 24 7b 6c 65 66 74 7d 24 7b 72 69 67  ist ${left}${rig
5320: 68 74 7d 24 7b 73 65 70 7d 20 7b 7d 5d 0a 20 20  ht}${sep} {}].  
5330: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20        } else {. 
5340: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63             set c
5350: 6f 6d 70 6c 65 74 69 6f 6e 20 5b 43 6f 6d 70 6c  ompletion [Compl
5360: 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 72 69 67  eteFromList $rig
5370: 68 74 20 24 6c 73 74 20 22 22 20 31 5d 0a 20 20  ht $lst "" 1].  
5380: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5390: 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6c 65 6e  if {![string len
53a0: 67 74 68 20 5b 6c 69 6e 64 65 78 20 24 63 6f 6d  gth [lindex $com
53b0: 70 6c 65 74 69 6f 6e 20 30 5d 5d 7d 20 7b 0a 20  pletion 0]]} {. 
53c0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
53d0: 6e 20 5b 63 6f 6e 63 61 74 20 5b 6c 69 73 74 20  n [concat [list 
53e0: 24 6c 65 66 74 5d 20 5b 6c 72 61 6e 67 65 20 24  $left] [lrange $
53f0: 63 6f 6d 70 6c 65 74 69 6f 6e 20 31 20 65 6e 64  completion 1 end
5400: 5d 5d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  ]].        } els
5410: 65 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e  eif {[string len
5420: 67 74 68 20 24 6c 65 66 74 5d 7d 20 7b 0a 20 20  gth $left]} {.  
5430: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5440: 20 5b 6c 69 73 74 20 24 6c 65 66 74 5d 24 63 6f   [list $left]$co
5450: 6d 70 6c 65 74 69 6f 6e 0a 20 20 20 20 20 20 20  mpletion.       
5460: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
5470: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f        return $co
5480: 6d 70 6c 65 74 69 6f 6e 0a 20 20 20 20 20 20 20  mpletion.       
5490: 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   }.        retur
54a0: 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20  n "".    }..    
54b0: 70 72 6f 63 20 46 69 72 73 74 4e 6f 6e 4f 70 74  proc FirstNonOpt
54c0: 69 6f 6e 20 7b 6c 69 6e 65 7d 20 7b 0a 20 20 20  ion {line} {.   
54d0: 20 20 20 20 20 73 65 74 20 65 78 70 72 5f 70 6f       set expr_po
54e0: 73 20 31 0a 20 20 20 20 20 20 20 20 66 6f 72 65  s 1.        fore
54f0: 61 63 68 20 77 6f 72 64 20 5b 6c 72 61 6e 67 65  ach word [lrange
5500: 20 24 6c 69 6e 65 20 31 20 65 6e 64 5d 20 7b 3b   $line 1 end] {;
5510: 20 23 20 30 20 69 73 20 74 68 65 20 63 6f 6d 6d   # 0 is the comm
5520: 61 6e 64 20 69 74 73 65 6c 66 0a 20 20 20 20 20  and itself.     
5530: 20 20 20 20 20 20 20 69 66 20 7b 22 2d 22 20 21         if {"-" !
5540: 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20  = [string index 
5550: 24 77 6f 72 64 20 30 5d 7d 20 7b 0a 20 20 20 20  $word 0]} {.    
5560: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
5570: 6b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  k.            } 
5580: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20  else {.         
5590: 20 20 20 20 20 20 20 69 6e 63 72 20 65 78 70 72         incr expr
55a0: 5f 70 6f 73 0a 20 20 20 20 20 20 20 20 20 20 20  _pos.           
55b0: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
55c0: 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 78 70       return $exp
55d0: 72 5f 70 6f 73 0a 20 20 20 20 7d 0a 0a 20 20 20  r_pos.    }..   
55e0: 20 70 72 6f 63 20 52 65 6d 6f 76 65 55 73 65 64   proc RemoveUsed
55f0: 4f 70 74 69 6f 6e 73 20 7b 6c 69 6e 65 20 6f 70  Options {line op
5600: 74 73 20 7b 74 65 72 6d 69 6e 61 74 65 20 7b 7d  ts {terminate {}
5610: 7d 7d 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20  }} {.        if 
5620: 7b 5b 6c 6c 65 6e 67 74 68 20 24 74 65 72 6d 69  {[llength $termi
5630: 6e 61 74 65 5d 7d 20 7b 0a 20 20 20 20 20 20 20  nate]} {.       
5640: 20 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70       if {[regexp
5650: 20 2d 2d 20 24 74 65 72 6d 69 6e 61 74 65 20 24   -- $terminate $
5660: 6c 69 6e 65 5d 7d 20 7b 0a 20 20 20 20 20 20 20  line]} {.       
5670: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5680: 22 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  "".            }
5690: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
56a0: 20 20 20 73 65 74 20 6e 65 77 20 22 22 0a 20 20     set new "".  
56b0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 77 6f        foreach wo
56c0: 72 64 20 24 6f 70 74 73 20 7b 0a 20 20 20 20 20  rd $opts {.     
56d0: 20 20 20 20 20 20 20 69 66 20 7b 2d 31 20 3d 3d         if {-1 ==
56e0: 20 5b 73 74 72 69 6e 67 20 66 69 72 73 74 20 24   [string first $
56f0: 77 6f 72 64 20 24 6c 69 6e 65 5d 7d 20 7b 0a 20  word $line]} {. 
5700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
5710: 61 70 70 65 6e 64 20 6e 65 77 20 24 77 6f 72 64  append new $word
5720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
5730: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
5740: 20 20 23 20 63 68 65 63 6b 20 69 66 20 74 68 65    # check if the
5750: 20 6c 61 73 74 20 77 6f 72 64 20 69 6e 20 74 68   last word in th
5760: 65 20 6c 69 6e 65 20 69 73 20 61 6e 20 6f 70 74  e line is an opt
5770: 69 6f 6e 73 0a 20 20 20 20 20 20 20 20 23 20 61  ions.        # a
5780: 6e 64 20 69 66 20 74 68 69 73 20 77 6f 72 64 20  nd if this word 
5790: 69 73 20 61 74 20 74 68 65 20 76 65 72 79 20 65  is at the very e
57a0: 6e 64 20 6f 66 20 74 68 65 20 6c 69 6e 65 2c 0a  nd of the line,.
57b0: 20 20 20 20 20 20 20 20 23 20 74 68 61 74 20 6d          # that m
57c0: 65 61 6e 73 20 6e 6f 20 73 70 61 63 65 20 61 66  eans no space af
57d0: 74 65 72 2e 0a 20 20 20 20 20 20 20 20 23 20 49  ter..        # I
57e0: 66 20 74 68 69 73 20 69 73 20 73 6f 2c 20 74 68  f this is so, th
57f0: 65 20 77 6f 72 64 20 69 73 20 73 74 75 66 66 65  e word is stuffe
5800: 64 20 69 6e 74 6f 20 74 68 65 20 72 65 73 75 6c  d into the resul
5810: 74 2c 0a 20 20 20 20 20 20 20 20 23 20 73 6f 20  t,.        # so 
5820: 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 63  that it can be c
5830: 6f 6d 70 6c 65 74 65 64 20 2d 2d 20 70 72 6f 62  ompleted -- prob
5840: 61 62 6c 79 20 77 69 74 68 20 61 20 73 70 61 63  ably with a spac
5850: 65 2e 0a 20 20 20 20 20 20 20 20 23 0a 20 20 20  e..        #.   
5860: 20 20 20 20 20 73 65 74 20 6c 61 73 74 20 5b 4c       set last [L
5870: 69 6e 64 65 78 20 24 6c 69 6e 65 20 65 6e 64 5d  index $line end]
5880: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74  .        if {[st
5890: 72 69 6e 67 20 6c 61 73 74 20 24 6c 61 73 74 20  ring last $last 
58a0: 24 6c 69 6e 65 5d 20 2b 20 5b 73 74 72 69 6e 67  $line] + [string
58b0: 20 6c 65 6e 67 74 68 20 24 6c 61 73 74 5d 0a 20   length $last]. 
58c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3d                 =
58d0: 3d 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  = [string length
58e0: 20 24 6c 69 6e 65 5d 7d 20 7b 0a 20 20 20 20 20   $line]} {.     
58f0: 20 20 20 20 20 20 20 69 66 20 7b 2d 31 20 21 3d         if {-1 !=
5900: 20 5b 6c 73 65 61 72 63 68 20 24 6f 70 74 73 20   [lsearch $opts 
5910: 24 6c 61 73 74 5d 7d 20 7b 0a 20 20 20 20 20 20  $last]} {.      
5920: 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
5930: 64 20 6e 65 77 20 24 6c 61 73 74 0a 20 20 20 20  d new $last.    
5940: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5950: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74    }..        ret
5960: 75 72 6e 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  urn [string trim
5970: 20 24 6e 65 77 5d 0a 20 20 20 20 7d 0a 0a 20 20   $new].    }..  
5980: 20 20 70 72 6f 63 20 41 6c 65 72 74 20 7b 7d 20    proc Alert {} 
5990: 7b 0a 20 20 20 20 20 20 20 20 3a 3a 74 63 6c 72  {.        ::tclr
59a0: 65 61 64 6c 69 6e 65 3a 3a 72 65 61 64 6c 69 6e  eadline::readlin
59b0: 65 20 62 65 6c 6c 0a 20 20 20 20 7d 0a 0a 20 20  e bell.    }..  
59c0: 20 20 23 2a 2a 0a 20 20 20 20 23 20 67 65 74 20    #**.    # get 
59d0: 74 68 65 20 6c 6f 6e 67 65 73 74 20 63 6f 6d 6d  the longest comm
59e0: 6f 6e 20 63 6f 6d 70 6c 65 74 69 6f 6e 0a 20 20  on completion.  
59f0: 20 20 23 20 65 2e 67 2e 20 73 74 72 20 3d 3d 20    # e.g. str == 
5a00: 7b 74 63 6c 5f 76 65 72 73 69 6f 6e 20 74 63 6c  {tcl_version tcl
5a10: 72 65 61 64 6c 69 6e 65 5f 76 65 72 73 69 6f 6e  readline_version
5a20: 20 74 63 6c 72 65 61 64 6c 69 6e 65 5f 6c 69 62   tclreadline_lib
5a30: 72 61 72 79 7d 0a 20 20 20 20 23 20 2d 2d 3e 20  rary}.    # --> 
5a40: 5b 43 6f 6d 70 6c 65 74 65 4c 6f 6e 67 65 73 74  [CompleteLongest
5a50: 20 24 73 74 72 5d 20 3d 3d 20 22 74 63 6c 22 0a   $str] == "tcl".
5a60: 20 20 20 20 23 0a 20 20 20 20 70 72 6f 63 20 43      #.    proc C
5a70: 6f 6d 70 6c 65 74 65 4c 6f 6e 67 65 73 74 20 7b  ompleteLongest {
5a80: 73 74 72 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  str} {.        s
5a90: 65 74 20 6d 61 74 63 68 30 20 5b 6c 69 6e 64 65  et match0 [linde
5aa0: 78 20 24 73 74 72 20 30 5d 0a 20 20 20 20 20 20  x $str 0].      
5ab0: 20 20 73 65 74 20 6c 65 6e 30 20 5b 73 74 72 69    set len0 [stri
5ac0: 6e 67 20 6c 65 6e 67 74 68 20 24 6d 61 74 63 68  ng length $match
5ad0: 30 5d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e  0].        set n
5ae0: 6f 5f 6d 61 74 63 68 65 73 20 5b 6c 6c 65 6e 67  o_matches [lleng
5af0: 74 68 20 24 73 74 72 5d 0a 20 20 20 20 20 20 20  th $str].       
5b00: 20 73 65 74 20 70 61 72 74 20 22 22 0a 20 20 20   set part "".   
5b10: 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20       for {set i 
5b20: 30 7d 20 7b 24 69 20 3c 20 24 6c 65 6e 30 7d 20  0} {$i < $len0} 
5b30: 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 20  {incr i} {.     
5b40: 20 20 20 20 20 20 20 73 65 74 20 63 68 61 72 20         set char 
5b50: 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 6d  [string index $m
5b60: 61 74 63 68 30 20 24 69 5d 0a 20 20 20 20 20 20  atch0 $i].      
5b70: 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 6a        for {set j
5b80: 20 31 7d 20 7b 24 6a 20 3c 20 24 6e 6f 5f 6d 61   1} {$j < $no_ma
5b90: 74 63 68 65 73 7d 20 7b 69 6e 63 72 20 6a 7d 20  tches} {incr j} 
5ba0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
5bb0: 20 20 69 66 20 7b 24 63 68 61 72 20 21 3d 20 5b    if {$char != [
5bc0: 73 74 72 69 6e 67 20 69 6e 64 65 78 20 5b 6c 69  string index [li
5bd0: 6e 64 65 78 20 24 73 74 72 20 24 6a 5d 20 24 69  ndex $str $j] $i
5be0: 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ]} {.           
5bf0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 0a 20           break. 
5c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
5c20: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24             if {$
5c30: 6a 20 3c 20 24 6e 6f 5f 6d 61 74 63 68 65 73 7d  j < $no_matches}
5c40: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
5c50: 20 20 20 62 72 65 61 6b 0a 20 20 20 20 20 20 20     break.       
5c60: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
5c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 70                ap
5c80: 70 65 6e 64 20 70 61 72 74 20 24 63 68 61 72 0a  pend part $char.
5c90: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
5ca0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5cb0: 72 65 74 75 72 6e 20 24 70 61 72 74 0a 20 20 20  return $part.   
5cc0: 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 53 70 6c   }..    proc Spl
5cd0: 69 74 4c 69 6e 65 20 7b 73 74 61 72 74 20 6c 69  itLine {start li
5ce0: 6e 65 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  ne} {.        se
5cf0: 74 20 64 65 70 74 68 20 30 0a 20 20 20 20 20 20  t depth 0.      
5d00: 20 20 66 6f 72 20 7b 73 65 74 20 69 20 24 73 74    for {set i $st
5d10: 61 72 74 7d 20 7b 24 69 20 3e 3d 20 30 7d 20 7b  art} {$i >= 0} {
5d20: 69 6e 63 72 20 69 20 2d 31 7d 20 7b 0a 20 20 20  incr i -1} {.   
5d30: 20 20 20 20 20 20 20 20 20 73 65 74 20 63 20 5b           set c [
5d40: 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 6c 69  string index $li
5d50: 6e 65 20 24 69 5d 0a 20 20 20 20 20 20 20 20 20  ne $i].         
5d60: 20 20 20 69 66 20 7b 7b 3b 7d 20 3d 3d 20 24 63     if {{;} == $c
5d70: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  } {.            
5d80: 20 20 20 20 69 6e 63 72 20 69 3b 20 23 20 64 69      incr i; # di
5d90: 73 63 61 72 64 20 63 6f 6d 6d 61 6e 64 20 62 72  scard command br
5da0: 65 61 6b 20 63 68 61 72 61 63 74 65 72 0a 20 20  eak character.  
5db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
5dc0: 74 75 72 6e 20 5b 6c 69 73 74 20 5b 65 78 70 72  turn [list [expr
5dd0: 20 7b 24 73 74 61 72 74 20 2d 20 24 69 7d 5d 20   {$start - $i}] 
5de0: 5b 53 74 72 69 6e 67 20 72 61 6e 67 65 20 24 6c  [String range $l
5df0: 69 6e 65 20 24 69 20 65 6e 64 5d 5d 0a 20 20 20  ine $i end]].   
5e00: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69           } elsei
5e10: 66 20 7b 7b 5d 7d 20 3d 3d 20 24 63 7d 20 7b 0a  f {{]} == $c} {.
5e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5e30: 69 6e 63 72 20 64 65 70 74 68 0a 20 20 20 20 20  incr depth.     
5e40: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20         } elseif 
5e50: 7b 7b 5b 7d 20 3d 3d 20 24 63 7d 20 7b 0a 20 20  {{[} == $c} {.  
5e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
5e70: 63 72 20 64 65 70 74 68 20 2d 31 0a 20 20 20 20  cr depth -1.    
5e80: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
5e90: 24 64 65 70 74 68 20 3c 20 30 7d 20 7b 0a 20 20  $depth < 0} {.  
5ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5eb0: 20 20 69 6e 63 72 20 69 3b 20 23 20 64 69 73 63    incr i; # disc
5ec0: 61 72 64 20 63 6f 6d 6d 61 6e 64 20 62 72 65 61  ard command brea
5ed0: 6b 20 63 68 61 72 61 63 74 65 72 0a 20 20 20 20  k character.    
5ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ef0: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5b 65 78  return [list [ex
5f00: 70 72 20 7b 24 73 74 61 72 74 20 2d 20 24 69 7d  pr {$start - $i}
5f10: 5d 20 5b 53 74 72 69 6e 67 20 72 61 6e 67 65 20  ] [String range 
5f20: 24 6c 69 6e 65 20 24 69 20 65 6e 64 5d 5d 0a 20  $line $i end]]. 
5f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
5f50: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
5f60: 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20 20 7d   return "".    }
5f70: 0a 0a 20 20 20 20 70 72 6f 63 20 49 73 57 68 69  ..    proc IsWhi
5f80: 74 65 20 7b 63 68 61 72 7d 20 7b 0a 20 20 20 20  te {char} {.    
5f90: 20 20 20 20 69 66 20 7b 22 20 22 20 3d 3d 20 24      if {" " == $
5fa0: 63 68 61 72 20 7c 7c 20 22 5c 6e 22 20 3d 3d 20  char || "\n" == 
5fb0: 24 63 68 61 72 20 7c 7c 20 22 5c 74 22 20 3d 3d  $char || "\t" ==
5fc0: 20 24 63 68 61 72 7d 20 7b 0a 20 20 20 20 20 20   $char} {.      
5fd0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 0a 20        return 1. 
5fe0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
5ff0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6000: 72 6e 20 30 0a 20 20 20 20 20 20 20 20 7d 0a 20  rn 0.        }. 
6010: 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 50     }..    proc P
6020: 72 65 76 69 6f 75 73 57 6f 72 64 4f 66 49 6e 63  reviousWordOfInc
6030: 6f 6d 70 6c 65 74 65 50 6f 73 69 74 69 6f 6e 20  ompletePosition 
6040: 7b 73 74 61 72 74 20 6c 69 6e 65 7d 20 7b 0a 20  {start line} {. 
6050: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c         return [l
6060: 69 6e 64 65 78 20 5b 50 72 6f 70 65 72 4c 69 73  index [ProperLis
6070: 74 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20  t [string range 
6080: 24 6c 69 6e 65 20 30 20 24 73 74 61 72 74 5d 5d  $line 0 $start]]
6090: 20 65 6e 64 5d 0a 20 20 20 20 7d 0a 0a 20 20 20   end].    }..   
60a0: 20 70 72 6f 63 20 50 72 65 76 69 6f 75 73 57 6f   proc PreviousWo
60b0: 72 64 20 7b 73 74 61 72 74 20 6c 69 6e 65 7d 20  rd {start line} 
60c0: 7b 0a 20 20 20 20 20 20 20 20 69 6e 63 72 20 73  {.        incr s
60d0: 74 61 72 74 20 2d 31 0a 20 20 20 20 20 20 20 20  tart -1.        
60e0: 73 65 74 20 66 6f 75 6e 64 20 30 0a 20 20 20 20  set found 0.    
60f0: 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20 24      for {set i $
6100: 73 74 61 72 74 7d 20 7b 24 69 20 3e 20 30 7d 20  start} {$i > 0} 
6110: 7b 69 6e 63 72 20 69 20 2d 31 7d 20 7b 0a 20 20  {incr i -1} {.  
6120: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63 20            set c 
6130: 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 6c  [string index $l
6140: 69 6e 65 20 24 69 5d 0a 20 20 20 20 20 20 20 20  ine $i].        
6150: 20 20 20 20 69 66 20 7b 24 66 6f 75 6e 64 20 26      if {$found &
6160: 26 20 5b 49 73 57 68 69 74 65 20 24 63 5d 7d 20  & [IsWhite $c]} 
6170: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
6180: 20 20 62 72 65 61 6b 0a 20 20 20 20 20 20 20 20    break.        
6190: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 21 24      } elseif {!$
61a0: 66 6f 75 6e 64 20 26 26 20 21 5b 49 73 57 68 69  found && ![IsWhi
61b0: 74 65 20 24 63 5d 7d 20 7b 0a 20 20 20 20 20 20  te $c]} {.      
61c0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 66 6f            set fo
61d0: 75 6e 64 20 31 0a 20 20 20 20 20 20 20 20 20 20  und 1.          
61e0: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
61f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 73 74        return [st
6200: 72 69 6e 67 20 74 72 69 6d 20 5b 73 74 72 69 6e  ring trim [strin
6210: 67 20 72 61 6e 67 65 20 24 6c 69 6e 65 20 24 69  g range $line $i
6220: 20 24 73 74 61 72 74 5d 5d 0a 20 20 20 20 7d 0a   $start]].    }.
6230: 0a 20 20 20 20 70 72 6f 63 20 51 75 6f 74 65 20  .    proc Quote 
6240: 7b 76 61 6c 75 65 20 6c 65 66 74 7d 20 7b 0a 20  {value left} {. 
6250: 20 20 20 20 20 20 20 73 65 74 20 72 69 67 68 74         set right
6260: 20 5b 52 69 67 68 74 20 24 6c 65 66 74 5d 0a 20   [Right $left]. 
6270: 20 20 20 20 20 20 20 69 66 20 7b 31 20 3c 20 5b         if {1 < [
6280: 6c 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20  llength $value] 
6290: 26 26 20 22 22 20 3d 3d 20 24 72 69 67 68 74 7d  && "" == $right}
62a0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72   {.            r
62b0: 65 74 75 72 6e 20 5b 6c 69 73 74 20 5c 22 24 76  eturn [list \"$v
62c0: 61 6c 75 65 5c 22 5d 0a 20 20 20 20 20 20 20 20  alue\"].        
62d0: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20  } else {.       
62e0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73       return [lis
62f0: 74 20 24 7b 6c 65 66 74 7d 24 7b 76 61 6c 75 65  t ${left}${value
6300: 7d 24 7b 72 69 67 68 74 7d 5d 0a 20 20 20 20 20  }${right}].     
6310: 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
6320: 23 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  # the following 
6330: 74 77 6f 20 63 68 61 6e 6e 65 6c 20 70 72 6f 63  two channel proc
6340: 27 73 20 6d 61 6b 65 20 75 73 65 20 6f 66 0a 20  's make use of. 
6350: 20 20 20 23 20 74 68 65 20 62 72 61 6e 64 6e 65     # the brandne
6360: 77 20 28 53 65 70 20 39 39 29 20 60 66 69 6c 65  w (Sep 99) `file
6370: 20 63 68 61 6e 6e 65 6c 73 27 20 63 6f 6d 6d 61   channels' comma
6380: 6e 64 0a 20 20 20 20 23 20 62 75 74 20 68 61 76  nd.    # but hav
6390: 65 20 73 6f 6d 65 20 66 61 6c 6c 62 61 63 6b 20  e some fallback 
63a0: 62 65 68 61 76 69 6f 75 72 20 66 6f 72 20 6f 6c  behaviour for ol
63b0: 64 65 72 0a 20 20 20 20 23 20 74 63 6c 20 76 65  der.    # tcl ve
63c0: 72 73 69 6f 6e 2e 0a 20 20 20 20 23 0a 20 20 20  rsion..    #.   
63d0: 20 70 72 6f 63 20 49 6e 43 68 61 6e 6e 65 6c 49   proc InChannelI
63e0: 64 20 7b 74 65 78 74 20 7b 73 77 69 74 63 68 65  d {text {switche
63f0: 73 20 22 22 7d 7d 20 7b 0a 20 20 20 20 20 20 20  s ""}} {.       
6400: 20 69 66 20 5b 63 61 74 63 68 20 7b 73 65 74 20   if [catch {set 
6410: 63 68 73 20 5b 66 69 6c 65 20 63 68 61 6e 6e 65  chs [file channe
6420: 6c 73 5d 7d 5d 20 7b 0a 20 20 20 20 20 20 20 20  ls]}] {.        
6430: 20 20 20 20 73 65 74 20 63 68 73 20 7b 73 74 64      set chs {std
6440: 69 6e 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  in}.        }.  
6450: 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74        set result
6460: 20 22 22 0a 20 20 20 20 20 20 20 20 66 6f 72 65   "".        fore
6470: 61 63 68 20 63 68 20 24 63 68 73 20 7b 0a 20 20  ach ch $chs {.  
6480: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
6490: 63 61 74 63 68 20 7b 66 69 6c 65 65 76 65 6e 74  catch {fileevent
64a0: 20 24 63 68 20 72 65 61 64 61 62 6c 65 7d 5d 7d   $ch readable}]}
64b0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
64c0: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
64d0: 74 20 24 63 68 0a 20 20 20 20 20 20 20 20 20 20  t $ch.          
64e0: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
64f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 68        return [Ch
6500: 61 6e 6e 65 6c 49 64 20 24 74 65 78 74 20 3c 69  annelId $text <i
6510: 6e 43 68 61 6e 6e 65 6c 3e 20 24 72 65 73 75 6c  nChannel> $resul
6520: 74 20 24 73 77 69 74 63 68 65 73 5d 0a 20 20 20  t $switches].   
6530: 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 4f 75 74   }..    proc Out
6540: 43 68 61 6e 6e 65 6c 49 64 20 7b 74 65 78 74 20  ChannelId {text 
6550: 7b 73 77 69 74 63 68 65 73 20 22 22 7d 7d 20 7b  {switches ""}} {
6560: 0a 20 20 20 20 20 20 20 20 69 66 20 5b 63 61 74  .        if [cat
6570: 63 68 20 7b 73 65 74 20 63 68 73 20 5b 66 69 6c  ch {set chs [fil
6580: 65 20 63 68 61 6e 6e 65 6c 73 5d 7d 5d 20 7b 0a  e channels]}] {.
6590: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
65a0: 63 68 73 20 7b 73 74 64 6f 75 74 20 73 74 64 65  chs {stdout stde
65b0: 72 72 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rr}.        }.  
65c0: 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74        set result
65d0: 20 22 22 0a 20 20 20 20 20 20 20 20 66 6f 72 65   "".        fore
65e0: 61 63 68 20 63 68 20 24 63 68 73 20 7b 0a 20 20  ach ch $chs {.  
65f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
6600: 63 61 74 63 68 20 7b 66 69 6c 65 65 76 65 6e 74  catch {fileevent
6610: 20 24 63 68 20 77 72 69 74 61 62 6c 65 7d 5d 7d   $ch writable}]}
6620: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
6630: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
6640: 74 20 24 63 68 0a 20 20 20 20 20 20 20 20 20 20  t $ch.          
6650: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
6660: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 68        return [Ch
6670: 61 6e 6e 65 6c 49 64 20 24 74 65 78 74 20 3c 6f  annelId $text <o
6680: 75 74 43 68 61 6e 6e 65 6c 3e 20 24 72 65 73 75  utChannel> $resu
6690: 6c 74 20 24 73 77 69 74 63 68 65 73 5d 0a 20 20  lt $switches].  
66a0: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 43 68    }..    proc Ch
66b0: 61 6e 6e 65 6c 49 64 20 7b 74 65 78 74 20 7b 64  annelId {text {d
66c0: 65 73 63 72 69 70 74 20 3c 63 68 61 6e 6e 65 6c  escript <channel
66d0: 49 64 3e 7d 20 7b 63 68 73 20 22 22 7d 20 7b 73  Id>} {chs ""} {s
66e0: 77 69 74 63 68 65 73 20 22 22 7d 7d 20 7b 0a 20  witches ""}} {. 
66f0: 20 20 20 20 20 20 20 69 66 20 7b 22 22 20 3d 3d         if {"" ==
6700: 20 24 63 68 73 7d 20 7b 0a 20 20 20 20 20 20 20   $chs} {.       
6710: 20 20 20 20 20 23 20 74 68 65 20 60 66 69 6c 65       # the `file
6720: 20 63 68 61 6e 6e 65 6c 73 27 20 63 6f 6d 6d 61   channels' comma
6730: 6e 64 20 69 73 20 70 72 65 73 65 6e 74 0a 20 20  nd is present.  
6740: 20 20 20 20 20 20 20 20 20 20 23 20 6f 6e 6c 79            # only
6750: 20 69 6e 20 70 72 65 74 74 79 20 6e 65 77 20 76   in pretty new v
6760: 65 72 73 69 6f 6e 73 2e 0a 20 20 20 20 20 20 20  ersions..       
6770: 20 20 20 20 20 23 0a 20 20 20 20 20 20 20 20 20       #.         
6780: 20 20 20 69 66 20 5b 63 61 74 63 68 20 7b 73 65     if [catch {se
6790: 74 20 63 68 73 20 5b 66 69 6c 65 20 63 68 61 6e  t chs [file chan
67a0: 6e 65 6c 73 5d 7d 5d 20 7b 0a 20 20 20 20 20 20  nels]}] {.      
67b0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63 68            set ch
67c0: 73 20 7b 73 74 64 69 6e 20 73 74 64 6f 75 74 20  s {stdin stdout 
67d0: 73 74 64 65 72 72 7d 0a 20 20 20 20 20 20 20 20  stderr}.        
67e0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
67f0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65          if {[lle
6800: 6e 67 74 68 20 5b 73 65 74 20 63 68 61 6e 6e 65  ngth [set channe
6810: 6c 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24  l [TryFromList $
6820: 74 65 78 74 20 22 24 63 68 73 20 24 73 77 69 74  text "$chs $swit
6830: 63 68 65 73 22 5d 5d 5d 7d 20 7b 0a 20 20 20 20  ches"]]]} {.    
6840: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $
6850: 63 68 61 6e 6e 65 6c 0a 20 20 20 20 20 20 20 20  channel.        
6860: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20  } else {.       
6870: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 44 69 73       return [Dis
6880: 70 6c 61 79 48 69 6e 74 73 20 5b 73 74 72 69 6e  playHints [strin
6890: 67 20 74 72 69 6d 20 22 24 64 65 73 63 72 69 70  g trim "$descrip
68a0: 74 20 24 73 77 69 74 63 68 65 73 22 5d 5d 0a 20  t $switches"]]. 
68b0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a         }.    }..
68c0: 20 20 20 20 70 72 6f 63 20 51 75 6f 74 65 51 75      proc QuoteQu
68d0: 6f 74 65 73 20 7b 6c 69 6e 65 7d 20 7b 0a 20 20  otes {line} {.  
68e0: 20 20 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c        regsub -al
68f0: 6c 20 2d 2d 20 5c 22 20 24 6c 69 6e 65 20 7b 5c  l -- \" $line {\
6900: 22 7d 20 6c 69 6e 65 0a 20 20 20 20 20 20 20 20  "} line.        
6910: 72 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 5c  regsub -all -- \
6920: 7b 20 24 6c 69 6e 65 20 7b 5c 7b 7d 20 6c 69 6e  { $line {\{} lin
6930: 65 3b 20 23 20 5c 7d 5c 7d 20 28 6b 65 65 70 20  e; # \}\} (keep 
6940: 74 68 65 20 65 64 69 74 6f 72 20 68 61 70 70 79  the editor happy
6950: 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ).        return
6960: 20 24 6c 69 6e 65 0a 20 20 20 20 7d 0a 0a 20 20   $line.    }..  
6970: 20 20 23 2a 2a 0a 20 20 20 20 23 20 67 65 74 20    #**.    # get 
6980: 74 68 65 20 77 6f 72 64 20 70 6f 73 69 74 69 6f  the word positio
6990: 6e 2e 0a 20 20 20 20 23 20 40 72 65 74 75 72 6e  n..    # @return
69a0: 20 74 68 65 20 77 6f 72 64 20 70 6f 73 69 74 69   the word positi
69b0: 6f 6e 0a 20 20 20 20 23 20 40 6e 6f 74 65 20 77  on.    # @note w
69c0: 69 6c 6c 20 72 65 74 75 72 6e 65 64 20 6d 6f 64  ill returned mod
69d0: 69 66 69 65 64 20 76 61 6c 75 65 73 2e 0a 20 20  ified values..  
69e0: 20 20 23 20 40 73 61 20 45 76 65 6e 74 75 61 6c    # @sa Eventual
69f0: 6c 79 45 76 61 6c 75 61 74 65 46 69 72 73 74 0a  lyEvaluateFirst.
6a00: 20 20 20 20 23 0a 20 20 20 20 23 20 25 20 70 3c      #.    # % p<
6a10: 54 41 42 3e 0a 20 20 20 20 23 20 25 20 62 6c 61  TAB>.    # % bla
6a20: 20 70 75 74 3c 54 41 42 3e 20 24 62 0a 20 20 20   put<TAB> $b.   
6a30: 20 23 20 25 20 70 75 74 3c 54 41 42 3e 20 24 62   # % put<TAB> $b
6a40: 0a 20 20 20 20 23 20 70 61 72 74 20 20 3d 3d 20  .    # part  == 
6a50: 70 75 74 0a 20 20 20 20 23 20 73 74 61 72 74 20  put.    # start 
6a60: 3d 3d 20 30 0a 20 20 20 20 23 20 65 6e 64 20 20  == 0.    # end  
6a70: 20 3d 3d 20 33 0a 20 20 20 20 23 20 6c 69 6e 65   == 3.    # line
6a80: 20 20 3d 3d 20 22 70 75 74 20 24 62 22 0a 20 20    == "put $b".  
6a90: 20 20 23 20 5b 50 61 72 74 50 6f 73 69 74 69 6f    # [PartPositio
6aa0: 6e 5d 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e  n] should return
6ab0: 20 30 0a 20 20 20 20 23 0a 20 20 20 20 70 72 6f   0.    #.    pro
6ac0: 63 20 50 61 72 74 50 6f 73 69 74 69 6f 6e 20 7b  c PartPosition {
6ad0: 70 61 72 74 54 20 73 74 61 72 74 54 20 65 6e 64  partT startT end
6ae0: 54 20 6c 69 6e 65 54 7d 20 7b 0a 0a 20 20 20 20  T lineT} {..    
6af0: 20 20 20 20 75 70 76 61 72 20 24 70 61 72 74 54      upvar $partT
6b00: 20 70 61 72 74 20 24 73 74 61 72 74 54 20 73 74   part $startT st
6b10: 61 72 74 20 24 65 6e 64 54 20 65 6e 64 20 24 6c  art $endT end $l
6b20: 69 6e 65 54 20 6c 69 6e 65 0a 20 20 20 20 20 20  ineT line.      
6b30: 20 20 45 76 65 6e 74 75 61 6c 6c 79 45 76 61 6c    EventuallyEval
6b40: 75 61 74 65 46 69 72 73 74 20 70 61 72 74 20 73  uateFirst part s
6b50: 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 0a 20 20  tart end line.  
6b60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 4c 6c        return [Ll
6b70: 65 6e 67 74 68 20 5b 73 74 72 69 6e 67 20 72 61  ength [string ra
6b80: 6e 67 65 20 24 6c 69 6e 65 20 30 20 5b 65 78 70  nge $line 0 [exp
6b90: 72 20 7b 24 73 74 61 72 74 20 2d 20 31 7d 5d 5d  r {$start - 1}]]
6ba0: 5d 0a 0a 20 20 20 20 23 0a 20 20 20 20 23 20 20  ]..    #.    #  
6bb0: 20 20 20 73 65 74 20 6c 6f 63 61 6c 5f 73 74 61     set local_sta
6bc0: 72 74 20 5b 65 78 70 72 20 7b 24 73 74 61 72 74  rt [expr {$start
6bd0: 20 2d 20 31 7d 5d 0a 20 20 20 20 23 20 20 20 20   - 1}].    #    
6be0: 20 73 65 74 20 6c 6f 63 61 6c 5f 73 74 61 72 74   set local_start
6bf0: 5f 63 68 72 20 5b 73 74 72 69 6e 67 20 69 6e 64  _chr [string ind
6c00: 65 78 20 24 6c 69 6e 65 20 24 6c 6f 63 61 6c 5f  ex $line $local_
6c10: 73 74 61 72 74 5d 0a 20 20 20 20 23 20 20 20 20  start].    #    
6c20: 20 69 66 20 7b 22 5c 22 22 20 3d 3d 20 24 6c 6f   if {"\"" == $lo
6c30: 63 61 6c 5f 73 74 61 72 74 5f 63 68 72 20 7c 7c  cal_start_chr ||
6c40: 20 22 5c 7b 22 20 3d 3d 20 24 6c 6f 63 61 6c 5f   "\{" == $local_
6c50: 73 74 61 72 74 5f 63 68 72 7d 20 7b 0a 20 20 20  start_chr} {.   
6c60: 20 23 20 20 20 20 20 20 20 20 20 69 6e 63 72 20   #         incr 
6c70: 6c 6f 63 61 6c 5f 73 74 61 72 74 20 2d 31 0a 20  local_start -1. 
6c80: 20 20 20 23 20 20 20 20 20 7d 0a 20 20 20 20 23     #     }.    #
6c90: 0a 20 20 20 20 23 20 20 20 20 20 73 65 74 20 70  .    #     set p
6ca0: 72 65 5f 74 65 78 74 20 5b 51 75 6f 74 65 51 75  re_text [QuoteQu
6cb0: 6f 74 65 73 20 5b 73 74 72 69 6e 67 20 72 61 6e  otes [string ran
6cc0: 67 65 20 24 6c 69 6e 65 20 30 20 24 6c 6f 63 61  ge $line 0 $loca
6cd0: 6c 5f 73 74 61 72 74 5d 5d 0a 20 20 20 20 23 20  l_start]].    # 
6ce0: 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 6c 65 6e      return [llen
6cf0: 67 74 68 20 24 70 72 65 5f 74 65 78 74 5d 0a 20  gth $pre_text]. 
6d00: 20 20 20 23 0a 20 20 20 20 7d 0a 0a 20 20 20 20     #.    }..    
6d10: 70 72 6f 63 20 52 69 67 68 74 20 7b 6c 65 66 74  proc Right {left
6d20: 7d 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 7b  } {.        if {
6d30: 22 5c 22 22 20 3d 3d 20 24 6c 65 66 74 7d 20 7b  "\"" == $left} {
6d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
6d50: 75 72 6e 20 22 5c 22 22 0a 20 20 20 20 20 20 20  urn "\"".       
6d60: 20 7d 20 65 6c 73 65 69 66 20 7b 22 5c 5c 5c 22   } elseif {"\\\"
6d70: 22 20 3d 3d 20 24 6c 65 66 74 7d 20 7b 0a 20 20  " == $left} {.  
6d80: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6d90: 20 22 5c 5c 5c 22 22 0a 20 20 20 20 20 20 20 20   "\\\"".        
6da0: 7d 20 65 6c 73 65 69 66 20 7b 22 5c 7b 22 20 3d  } elseif {"\{" =
6db0: 3d 20 24 6c 65 66 74 7d 20 7b 0a 20 20 20 20 20  = $left} {.     
6dc0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 5c         return "\
6dd0: 7d 22 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }".        } els
6de0: 65 69 66 20 7b 22 5c 5c 5c 7b 22 20 3d 3d 20 24  eif {"\\\{" == $
6df0: 6c 65 66 74 7d 20 7b 0a 20 20 20 20 20 20 20 20  left} {.        
6e00: 20 20 20 20 72 65 74 75 72 6e 20 22 5c 5c 5c 7d      return "\\\}
6e10: 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ".        }.    
6e20: 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20      return "".  
6e30: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 47 65    }..    proc Ge
6e40: 74 51 75 6f 74 65 64 50 72 65 66 69 78 20 7b 74  tQuotedPrefix {t
6e50: 65 78 74 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  ext} {.        s
6e60: 65 74 20 6e 75 6c 6c 20 5b 73 74 72 69 6e 67 20  et null [string 
6e70: 69 6e 64 65 78 20 24 74 65 78 74 20 30 5d 0a 20  index $text 0]. 
6e80: 20 20 20 20 20 20 20 69 66 20 7b 22 5c 22 22 20         if {"\"" 
6e90: 3d 3d 20 24 6e 75 6c 6c 20 7c 7c 20 22 5c 7b 22  == $null || "\{"
6ea0: 20 3d 3d 20 24 6e 75 6c 6c 7d 20 7b 0a 20 20 20   == $null} {.   
6eb0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6ec0: 5c 5c 24 6e 75 6c 6c 0a 20 20 20 20 20 20 20 20  \\$null.        
6ed0: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20  } else {.       
6ee0: 20 20 20 20 20 72 65 74 75 72 6e 20 7b 7d 0a 20       return {}. 
6ef0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a         }.    }..
6f00: 20 20 20 20 70 72 6f 63 20 43 6f 75 6e 74 43 68      proc CountCh
6f10: 61 72 20 7b 6c 69 6e 65 20 63 68 61 72 7d 20 7b  ar {line char} {
6f20: 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 6f 75  .        set fou
6f30: 6e 64 20 30 0a 20 20 20 20 20 20 20 20 73 65 74  nd 0.        set
6f40: 20 70 6f 73 20 30 0a 20 20 20 20 20 20 20 20 77   pos 0.        w
6f50: 68 69 6c 65 20 7b 2d 31 20 21 3d 20 5b 73 65 74  hile {-1 != [set
6f60: 20 70 6f 73 20 5b 73 74 72 69 6e 67 20 66 69 72   pos [string fir
6f70: 73 74 20 24 63 68 61 72 20 24 6c 69 6e 65 20 24  st $char $line $
6f80: 70 6f 73 5d 5d 7d 20 7b 0a 20 20 20 20 20 20 20  pos]]} {.       
6f90: 20 20 20 20 20 69 6e 63 72 20 70 6f 73 0a 20 20       incr pos.  
6fa0: 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 66            incr f
6fb0: 6f 75 6e 64 0a 20 20 20 20 20 20 20 20 7d 0a 20  ound.        }. 
6fc0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66         return $f
6fd0: 6f 75 6e 64 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ound.    }..    
6fe0: 23 2a 2a 0a 20 20 20 20 23 20 6d 61 6b 65 20 61  #**.    # make a
6ff0: 20 70 72 6f 70 65 72 20 74 63 6c 20 6c 69 73 74   proper tcl list
7000: 20 66 72 6f 6d 20 61 6e 20 69 63 6f 6d 70 6c 65   from an icomple
7010: 74 65 0a 20 20 20 20 23 20 73 74 72 69 6e 67 2c  te.    # string,
7020: 20 74 68 61 74 20 69 73 3a 20 72 65 6d 6f 76 65   that is: remove
7030: 20 74 68 65 20 6a 75 6e 6b 2e 20 54 68 69 73 20   the junk. This 
7040: 69 73 0a 20 20 20 20 23 20 63 6f 6d 70 6c 65 6d  is.    # complem
7050: 65 6e 74 61 72 79 20 74 6f 20 60 49 6e 63 6f 6d  entary to `Incom
7060: 70 6c 65 74 65 4c 69 73 74 52 65 6d 61 69 6e 64  pleteListRemaind
7070: 65 72 27 2e 0a 20 20 20 20 23 20 65 2e 67 2e 3a  er'..    # e.g.:
7080: 0a 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72  .    #       for
7090: 20 7b 73 65 74 20 69 20 31 7d 20 22 0a 20 20 20   {set i 1} ".   
70a0: 20 23 20 20 2d 2d 3e 20 20 66 6f 72 20 7b 73 65   #  -->  for {se
70b0: 74 20 69 20 31 7d 0a 20 20 20 20 23 0a 20 20 20  t i 1}.    #.   
70c0: 20 70 72 6f 63 20 50 72 6f 70 65 72 4c 69 73 74   proc ProperList
70d0: 20 7b 6c 69 6e 65 7d 20 7b 0a 20 20 20 20 20 20   {line} {.      
70e0: 20 20 73 65 74 20 6c 61 73 74 20 5b 65 78 70 72    set last [expr
70f0: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
7100: 20 24 6c 69 6e 65 5d 20 2d 20 31 7d 5d 0a 20 20   $line] - 1}].  
7110: 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69        for {set i
7120: 20 24 6c 61 73 74 7d 20 7b 24 69 20 3e 3d 20 30   $last} {$i >= 0
7130: 7d 20 7b 69 6e 63 72 20 69 20 2d 31 7d 20 7b 0a  } {incr i -1} {.
7140: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
7150: 21 5b 63 61 74 63 68 20 7b 6c 6c 65 6e 67 74 68  ![catch {llength
7160: 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24   [string range $
7170: 6c 69 6e 65 20 30 20 24 69 5d 7d 5d 7d 20 7b 0a  line 0 $i]}]} {.
7180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7190: 62 72 65 61 6b 0a 20 20 20 20 20 20 20 20 20 20  break.          
71a0: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
71b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 73 74        return [st
71c0: 72 69 6e 67 20 72 61 6e 67 65 20 24 6c 69 6e 65  ring range $line
71d0: 20 30 20 24 69 5d 0a 20 20 20 20 7d 0a 0a 20 20   0 $i].    }..  
71e0: 20 20 23 2a 2a 0a 20 20 20 20 23 20 72 65 74 75    #**.    # retu
71f0: 72 6e 20 74 68 65 20 6c 61 73 74 20 70 61 72 74  rn the last part
7200: 20 6f 66 20 61 20 6c 69 6e 65 20 77 68 69 63 68   of a line which
7210: 0a 20 20 20 20 23 20 70 72 65 76 65 6e 74 73 20  .    # prevents 
7220: 74 68 65 20 6c 69 6e 65 20 66 72 6f 6d 20 62 65  the line from be
7230: 69 6e 67 20 61 20 6c 69 73 74 2e 0a 20 20 20 20  ing a list..    
7240: 23 20 54 68 69 73 20 69 73 20 63 6f 6d 70 6c 65  # This is comple
7250: 6d 65 6e 74 61 72 79 20 74 6f 20 60 50 72 6f 70  mentary to `Prop
7260: 65 72 4c 69 73 74 27 2e 0a 20 20 20 20 23 0a 20  erList'..    #. 
7270: 20 20 20 70 72 6f 63 20 49 6e 63 6f 6d 70 6c 65     proc Incomple
7280: 74 65 4c 69 73 74 52 65 6d 61 69 6e 64 65 72 20  teListRemainder 
7290: 7b 6c 69 6e 65 7d 20 7b 0a 20 20 20 20 20 20 20  {line} {.       
72a0: 20 73 65 74 20 6c 61 73 74 20 5b 65 78 70 72 20   set last [expr 
72b0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length 
72c0: 24 6c 69 6e 65 5d 20 2d 20 31 7d 5d 0a 20 20 20  $line] - 1}].   
72d0: 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20       for {set i 
72e0: 24 6c 61 73 74 7d 20 7b 24 69 20 3e 3d 20 30 7d  $last} {$i >= 0}
72f0: 20 7b 69 6e 63 72 20 69 20 2d 31 7d 20 7b 0a 20   {incr i -1} {. 
7300: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
7310: 5b 63 61 74 63 68 20 7b 6c 6c 65 6e 67 74 68 20  [catch {llength 
7320: 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 6c  [string range $l
7330: 69 6e 65 20 30 20 24 69 5d 7d 5d 7d 20 7b 0a 20  ine 0 $i]}]} {. 
7340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
7350: 72 65 61 6b 0a 20 20 20 20 20 20 20 20 20 20 20  reak.           
7360: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
7370: 20 20 20 20 20 69 6e 63 72 20 69 0a 20 20 20 20       incr i.    
7380: 20 20 20 20 72 65 74 75 72 6e 20 5b 53 74 72 69      return [Stri
7390: 6e 67 20 72 61 6e 67 65 20 24 6c 69 6e 65 20 24  ng range $line $
73a0: 69 20 65 6e 64 5d 0a 20 20 20 20 7d 0a 0a 20 20  i end].    }..  
73b0: 20 20 23 2a 2a 0a 20 20 20 20 23 20 73 61 76 65    #**.    # save
73c0: 20 60 6c 69 6e 64 65 78 27 2e 20 77 6f 72 6b 73   `lindex'. works
73d0: 20 61 6c 73 6f 20 66 6f 72 20 6e 6f 6e 2d 63 6f   also for non-co
73e0: 6d 70 6c 65 74 65 20 6c 69 6e 65 73 0a 20 20 20  mplete lines.   
73f0: 20 23 20 77 69 74 68 20 6f 70 65 6e 69 6e 67 20   # with opening 
7400: 70 61 72 65 6e 74 68 65 73 65 73 20 6f 72 20 71  parentheses or q
7410: 75 6f 74 65 73 2e 0a 20 20 20 20 23 20 75 73 61  uotes..    # usa
7420: 67 65 20 61 73 20 60 6c 69 6e 64 65 78 27 2e 0a  ge as `lindex'..
7430: 20 20 20 20 23 20 45 76 65 6e 74 75 61 6c 6c 79      # Eventually
7440: 20 72 65 74 75 72 6e 73 20 74 68 65 20 52 65 73   returns the Res
7450: 74 20 6f 66 20 61 6e 20 69 6e 63 6f 6d 70 6c 65  t of an incomple
7460: 74 65 20 6c 69 6e 65 2c 0a 20 20 20 20 23 20 69  te line,.    # i
7470: 66 20 74 68 65 20 69 6e 64 65 78 20 69 73 20 60  f the index is `
7480: 65 6e 64 27 20 6f 72 20 3d 3d 20 5b 4c 6c 65 6e  end' or == [Llen
7490: 67 74 68 20 24 6c 69 6e 65 5d 2e 0a 20 20 20 20  gth $line]..    
74a0: 23 0a 20 20 20 20 70 72 6f 63 20 4c 69 6e 64 65  #.    proc Linde
74b0: 78 20 7b 6c 69 6e 65 20 70 6f 73 7d 20 7b 0a 20  x {line pos} {. 
74c0: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
74d0: 68 20 5b 6c 69 73 74 20 73 65 74 20 73 75 62 20  h [list set sub 
74e0: 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 20 24 70  [lindex $line $p
74f0: 6f 73 5d 5d 5d 7d 20 7b 0a 20 20 20 20 20 20 20  os]]]} {.       
7500: 20 20 20 20 20 69 66 20 7b 22 65 6e 64 22 20 3d       if {"end" =
7510: 3d 20 24 70 6f 73 20 7c 7c 20 5b 4c 6c 65 6e 67  = $pos || [Lleng
7520: 74 68 20 24 6c 69 6e 65 5d 20 3d 3d 20 24 70 6f  th $line] == $po
7530: 73 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  s} {.           
7540: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 49 6e 63       return [Inc
7550: 6f 6d 70 6c 65 74 65 4c 69 73 74 52 65 6d 61 69  ompleteListRemai
7560: 6e 64 65 72 20 24 6c 69 6e 65 5d 0a 20 20 20 20  nder $line].    
7570: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
7580: 20 20 20 20 20 20 73 65 74 20 6c 69 6e 65 20 5b        set line [
7590: 50 72 6f 70 65 72 4c 69 73 74 20 24 6c 69 6e 65  ProperList $line
75a0: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ].            if
75b0: 20 7b 5b 63 61 74 63 68 20 5b 6c 69 73 74 20 73   {[catch [list s
75c0: 65 74 20 73 75 62 20 5b 6c 69 6e 64 65 78 20 24  et sub [lindex $
75d0: 6c 69 6e 65 20 24 70 6f 73 5d 5d 5d 7d 20 7b 20  line $pos]]]} { 
75e0: 72 65 74 75 72 6e 20 7b 7d 20 7d 0a 20 20 20 20  return {} }.    
75f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65      }.        re
7600: 74 75 72 6e 20 24 73 75 62 0a 20 20 20 20 7d 0a  turn $sub.    }.
7610: 0a 20 20 20 20 23 2a 2a 0a 20 20 20 20 23 20 73  .    #**.    # s
7620: 61 76 65 20 60 6c 6c 65 6e 67 74 68 27 20 28 73  ave `llength' (s
7630: 65 65 20 61 62 6f 76 65 29 2e 0a 20 20 20 20 23  ee above)..    #
7640: 0a 20 20 20 20 70 72 6f 63 20 4c 6c 65 6e 67 74  .    proc Llengt
7650: 68 20 7b 6c 69 6e 65 7d 20 7b 0a 20 20 20 20 20  h {line} {.     
7660: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 5b 6c     if {[catch [l
7670: 69 73 74 20 73 65 74 20 6c 65 6e 20 5b 6c 6c 65  ist set len [lle
7680: 6e 67 74 68 20 24 6c 69 6e 65 5d 5d 5d 7d 20 7b  ngth $line]]]} {
7690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
76a0: 20 6c 69 6e 65 20 5b 50 72 6f 70 65 72 4c 69 73   line [ProperLis
76b0: 74 20 24 6c 69 6e 65 5d 0a 20 20 20 20 20 20 20  t $line].       
76c0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch 
76d0: 5b 6c 69 73 74 20 73 65 74 20 6c 65 6e 20 5b 6c  [list set len [l
76e0: 6c 65 6e 67 74 68 20 24 6c 69 6e 65 5d 5d 5d 7d  length $line]]]}
76f0: 20 7b 20 72 65 74 75 72 6e 20 7b 7d 20 7d 0a 20   { return {} }. 
7700: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
7710: 20 72 65 74 75 72 6e 20 24 6c 65 6e 0a 20 20 20   return $len.   
7720: 20 7d 0a 0a 20 20 20 20 23 2a 2a 0a 20 20 20 20   }..    #**.    
7730: 23 20 73 61 76 65 20 60 6c 72 61 6e 67 65 27 20  # save `lrange' 
7740: 28 73 65 65 20 61 62 6f 76 65 29 2e 0a 20 20 20  (see above)..   
7750: 20 23 0a 20 20 20 20 70 72 6f 63 20 4c 72 61 6e   #.    proc Lran
7760: 67 65 20 7b 6c 69 6e 65 20 66 69 72 73 74 20 6c  ge {line first l
7770: 61 73 74 7d 20 7b 0a 20 20 20 20 20 20 20 20 69  ast} {.        i
7780: 66 20 7b 5b 63 61 74 63 68 20 5b 6c 69 73 74 20  f {[catch [list 
7790: 73 65 74 20 72 61 6e 67 65 20 5b 6c 72 61 6e 67  set range [lrang
77a0: 65 20 24 6c 69 6e 65 20 24 66 69 72 73 74 20 24  e $line $first $
77b0: 6c 61 73 74 5d 5d 5d 7d 20 7b 0a 20 20 20 20 20  last]]]} {.     
77c0: 20 20 20 20 20 20 20 73 65 74 20 72 65 73 74 20         set rest 
77d0: 5b 49 6e 63 6f 6d 70 6c 65 74 65 4c 69 73 74 52  [IncompleteListR
77e0: 65 6d 61 69 6e 64 65 72 20 24 6c 69 6e 65 5d 0a  emainder $line].
77f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
7800: 70 72 6f 70 65 72 20 5b 50 72 6f 70 65 72 4c 69  proper [ProperLi
7810: 73 74 20 24 6c 69 6e 65 5d 0a 20 20 20 20 20 20  st $line].      
7820: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
7830: 20 5b 6c 69 73 74 20 73 65 74 20 72 61 6e 67 65   [list set range
7840: 20 5b 6c 69 6e 64 65 78 20 24 70 72 6f 70 65 72   [lindex $proper
7850: 20 24 66 69 72 73 74 20 24 6c 61 73 74 5d 5d 5d   $first $last]]]
7860: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  } {.            
7870: 20 20 20 20 72 65 74 75 72 6e 20 7b 7d 0a 20 20      return {}.  
7880: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
7890: 20 20 20 20 20 20 20 20 69 66 20 7b 22 65 6e 64          if {"end
78a0: 22 20 3d 3d 20 24 6c 61 73 74 20 7c 7c 20 5b 4c  " == $last || [L
78b0: 6c 65 6e 67 74 68 20 24 6c 69 6e 65 5d 20 3d 3d  length $line] ==
78c0: 20 24 6c 61 73 74 7d 20 7b 0a 20 20 20 20 20 20   $last} {.      
78d0: 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64            append
78e0: 20 73 75 62 20 22 20 24 72 65 73 74 22 0a 20 20   sub " $rest".  
78f0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
7900: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65      }.        re
7910: 74 75 72 6e 20 24 72 61 6e 67 65 0a 20 20 20 20  turn $range.    
7920: 7d 0a 0a 20 20 20 20 23 2a 2a 0a 20 20 20 20 23  }..    #**.    #
7930: 20 4c 75 6e 69 71 75 65 20 2d 2d 20 72 65 6d 6f   Lunique -- remo
7940: 76 65 20 64 75 70 6c 69 63 61 74 65 20 65 6e 74  ve duplicate ent
7950: 72 69 65 73 20 66 72 6f 6d 20 61 20 73 6f 72 74  ries from a sort
7960: 65 64 20 6c 69 73 74 0a 20 20 20 20 23 20 4f 6e  ed list.    # On
7970: 6c 79 20 75 73 65 66 75 6c 20 70 72 69 6f 72 20  ly useful prior 
7980: 74 6f 20 54 63 6c 20 38 2e 33 20 77 68 65 6e 20  to Tcl 8.3 when 
7990: 6c 73 6f 72 74 20 64 69 64 6e 27 74 20 68 61 76  lsort didn't hav
79a0: 65 20 74 68 65 0a 20 20 20 20 23 20 2d 75 6e 69  e the.    # -uni
79b0: 71 75 65 20 66 6c 61 67 0a 20 20 20 20 23 20 40  que flag.    # @
79c0: 70 61 72 61 6d 20 20 20 6c 69 73 74 0a 20 20 20  param   list.   
79d0: 20 23 20 40 72 65 74 75 72 6e 20 20 75 6e 69 71   # @return  uniq
79e0: 75 65 20 6c 69 73 74 0a 20 20 20 20 23 0a 20 20  ue list.    #.  
79f0: 20 20 70 72 6f 63 20 4c 75 6e 69 71 75 65 20 6c    proc Lunique l
7a00: 73 74 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  st {.        set
7a10: 20 75 6e 69 71 75 65 20 22 22 0a 20 20 20 20 20   unique "".     
7a20: 20 20 20 66 6f 72 65 61 63 68 20 65 6c 65 6d 65     foreach eleme
7a30: 6e 74 20 24 6c 73 74 20 7b 0a 20 20 20 20 20 20  nt $lst {.      
7a40: 20 20 20 20 20 20 69 66 20 7b 24 65 6c 65 6d 65        if {$eleme
7a50: 6e 74 20 21 3d 20 5b 6c 69 6e 64 65 78 20 24 75  nt != [lindex $u
7a60: 6e 69 71 75 65 20 65 6e 64 5d 7d 20 7b 0a 20 20  nique end]} {.  
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61                la
7a80: 70 70 65 6e 64 20 75 6e 69 71 75 65 20 24 65 6c  ppend unique $el
7a90: 65 6d 65 6e 74 0a 20 20 20 20 20 20 20 20 20 20  ement.          
7aa0: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
7ab0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 75 6e        return $un
7ac0: 69 71 75 65 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ique.    }..    
7ad0: 23 2a 2a 0a 20 20 20 20 23 20 73 74 72 69 6e 67  #**.    # string
7ae0: 20 66 75 6e 63 74 69 6f 6e 2c 20 77 68 69 63 68   function, which
7af0: 20 77 6f 72 6b 73 20 61 6c 73 6f 20 66 6f 72 20   works also for 
7b00: 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 0a 20  older versions. 
7b10: 20 20 20 23 20 6f 66 20 74 63 6c 2c 20 77 68 69     # of tcl, whi
7b20: 63 68 20 64 6f 6e 27 74 20 68 61 76 65 20 74 68  ch don't have th
7b30: 65 20 60 65 6e 64 27 20 69 6e 64 65 78 2e 0a 20  e `end' index.. 
7b40: 20 20 20 23 20 49 20 74 72 69 65 64 20 61 6c 73     # I tried als
7b50: 6f 20 64 65 66 69 6e 69 6e 67 20 60 73 74 72 69  o defining `stri
7b60: 6e 67 27 20 61 6e 64 20 74 68 75 73 20 6f 76 65  ng' and thus ove
7b70: 72 72 69 64 69 6e 67 0a 20 20 20 20 23 20 74 68  rriding.    # th
7b80: 65 20 62 75 69 6c 74 69 6e 20 60 73 74 72 69 6e  e builtin `strin
7b90: 67 27 20 77 68 69 63 68 20 77 6f 72 6b 65 64 2c  g' which worked,
7ba0: 20 62 75 74 20 73 6c 6f 77 65 64 20 64 6f 77 6e   but slowed down
7bb0: 0a 20 20 20 20 23 20 74 68 69 6e 67 73 20 63 6f  .    # things co
7bc0: 6e 73 69 64 65 72 61 62 6c 79 2e 20 53 6f 20 49  nsiderably. So I
7bd0: 20 64 65 63 69 64 65 64 20 74 6f 20 63 61 6c 6c   decided to call
7be0: 20 60 53 74 72 69 6e 67 27 0a 20 20 20 20 23 20   `String'.    # 
7bf0: 6f 6e 6c 79 20 69 66 20 49 20 72 65 61 6c 6c 79  only if I really
7c00: 20 6e 65 65 64 20 74 68 65 20 60 65 6e 64 27 20   need the `end' 
7c10: 69 6e 64 65 78 2e 0a 20 20 20 20 23 0a 20 20 20  index..    #.   
7c20: 20 70 72 6f 63 20 53 74 72 69 6e 67 20 61 72 67   proc String arg
7c30: 73 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 7b  s {.        if {
7c40: 5b 69 6e 66 6f 20 74 63 6c 76 65 72 73 69 6f 6e  [info tclversion
7c50: 5d 20 3c 20 38 2e 32 7d 20 7b 0a 20 20 20 20 20  ] < 8.2} {.     
7c60: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 5b 6c         switch [l
7c70: 69 6e 64 65 78 20 24 61 72 67 73 20 31 5d 20 7b  index $args 1] {
7c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7c90: 20 72 61 6e 67 65 20 2d 0a 20 20 20 20 20 20 20   range -.       
7ca0: 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 7b           index {
7cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7cc0: 20 20 20 20 20 69 66 20 7b 22 65 6e 64 22 20 3d       if {"end" =
7cd0: 3d 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 20  = [lindex $args 
7ce0: 65 6e 64 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20  end]} {.        
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d00: 73 65 74 20 73 74 72 20 5b 6c 69 6e 64 65 78 20  set str [lindex 
7d10: 24 61 72 67 73 20 32 5d 0a 20 20 20 20 20 20 20  $args 2].       
7d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d30: 20 6c 72 65 70 6c 61 63 65 20 61 72 67 73 20 65   lreplace args e
7d40: 6e 64 20 65 6e 64 20 5b 65 78 70 72 20 7b 5b 73  nd end [expr {[s
7d50: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 74  tring length $st
7d60: 72 5d 20 2d 20 31 7d 5d 0a 20 20 20 20 20 20 20  r] - 1}].       
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
7d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7d90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
7da0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
7db0: 20 72 65 74 75 72 6e 20 5b 65 76 61 6c 20 73 74   return [eval st
7dc0: 72 69 6e 67 20 24 61 72 67 73 5d 0a 20 20 20 20  ring $args].    
7dd0: 7d 0a 0a 20 20 20 20 70 72 6f 63 20 53 74 72 69  }..    proc Stri
7de0: 70 50 72 65 66 69 78 20 7b 74 65 78 74 7d 20 7b  pPrefix {text} {
7df0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 75 6c  .        set nul
7e00: 6c 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20  l [string index 
7e10: 24 74 65 78 74 20 30 5d 0a 20 20 20 20 20 20 20  $text 0].       
7e20: 20 69 66 20 7b 22 5c 22 22 20 3d 3d 20 24 6e 75   if {"\"" == $nu
7e30: 6c 6c 20 7c 7c 20 22 5c 7b 22 20 3d 3d 20 24 6e  ll || "\{" == $n
7e40: 75 6c 6c 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  ull} {.         
7e50: 20 20 20 72 65 74 75 72 6e 20 5b 53 74 72 69 6e     return [Strin
7e60: 67 20 72 61 6e 67 65 20 24 74 65 78 74 20 31 20  g range $text 1 
7e70: 65 6e 64 5d 0a 20 20 20 20 20 20 20 20 7d 20 65  end].        } e
7e80: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  lse {.          
7e90: 20 20 72 65 74 75 72 6e 20 24 74 65 78 74 0a 20    return $text. 
7ea0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a         }.    }..
7eb0: 20 20 20 20 70 72 6f 63 20 56 61 72 43 6f 6d 70      proc VarComp
7ec0: 6c 65 74 69 6f 6e 20 7b 74 65 78 74 20 7b 6c 65  letion {text {le
7ed0: 76 65 6c 20 2d 31 7d 7d 20 7b 0a 20 20 20 20 20  vel -1}} {.     
7ee0: 20 20 20 69 66 20 7b 22 23 22 20 21 3d 20 5b 73     if {"#" != [s
7ef0: 74 72 69 6e 67 20 69 6e 64 65 78 20 24 6c 65 76  tring index $lev
7f00: 65 6c 20 30 5d 7d 20 7b 0a 20 20 20 20 20 20 20  el 0]} {.       
7f10: 20 20 20 20 20 69 66 20 7b 2d 31 20 3d 3d 20 24       if {-1 == $
7f20: 6c 65 76 65 6c 7d 20 7b 0a 20 20 20 20 20 20 20  level} {.       
7f30: 20 20 20 20 20 20 20 20 20 73 65 74 20 6c 65 76           set lev
7f40: 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 0a  el [info level].
7f50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
7f60: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
7f70: 20 20 20 20 20 69 6e 63 72 20 6c 65 76 65 6c 0a       incr level.
7f80: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
7f90: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
7fa0: 73 65 74 20 70 72 65 20 5b 47 65 74 51 75 6f 74  set pre [GetQuot
7fb0: 65 64 50 72 65 66 69 78 20 24 74 65 78 74 5d 0a  edPrefix $text].
7fc0: 20 20 20 20 20 20 20 20 73 65 74 20 76 61 72 20          set var 
7fd0: 5b 53 74 72 69 70 50 72 65 66 69 78 20 24 74 65  [StripPrefix $te
7fe0: 78 74 5d 0a 0a 20 20 20 20 20 20 20 20 23 20 61  xt]..        # a
7ff0: 72 72 61 79 73 0a 20 20 20 20 20 20 20 20 23 0a  rrays.        #.
8000: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67          if {[reg
8010: 65 78 70 20 7b 28 5b 5e 28 5d 2a 29 5c 28 28 2e  exp {([^(]*)\((.
8020: 2a 29 7d 20 24 76 61 72 20 61 6c 6c 20 61 72 72  *)} $var all arr
8030: 61 79 20 6e 61 6d 65 5d 7d 20 7b 0a 20 20 20 20  ay name]} {.    
8040: 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65          set name
8050: 73 20 5b 75 70 6c 65 76 65 6c 20 24 6c 65 76 65  s [uplevel $leve
8060: 6c 20 61 72 72 61 79 20 6e 61 6d 65 73 20 24 61  l array names $a
8070: 72 72 61 79 20 24 6e 61 6d 65 2a 5d 0a 20 20 20  rray $name*].   
8080: 20 20 20 20 20 20 20 20 20 69 66 20 7b 31 20 3d           if {1 =
8090: 3d 20 5b 6c 6c 65 6e 67 74 68 20 24 6e 61 6d 65  = [llength $name
80a0: 73 5d 7d 20 7b 20 3b 20 23 20 75 6e 69 71 75 65  s]} { ; # unique
80b0: 20 6d 61 74 63 68 0a 20 20 20 20 20 20 20 20 20   match.         
80c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 24         return "$
80d0: 7b 61 72 72 61 79 7d 28 24 6e 61 6d 65 73 29 22  {array}($names)"
80e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
80f0: 6c 73 65 69 66 20 7b 22 22 20 21 3d 20 24 6e 61  lseif {"" != $na
8100: 6d 65 73 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  mes} {.         
8110: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 24         return "$
8120: 7b 61 72 72 61 79 7d 28 5b 43 6f 6d 70 6c 65 74  {array}([Complet
8130: 65 4c 6f 6e 67 65 73 74 20 24 6e 61 6d 65 73 5d  eLongest $names]
8140: 20 24 6e 61 6d 65 73 22 0a 20 20 20 20 20 20 20   $names".       
8150: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
8160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
8170: 74 75 72 6e 20 22 22 3b 20 23 20 6e 6f 74 68 69  turn ""; # nothi
8180: 6e 67 20 74 6f 20 63 6f 6d 70 6c 65 74 65 0a 20  ng to complete. 
8190: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
81a0: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
81b0: 23 20 6e 6f 6e 2d 61 72 72 61 79 73 0a 20 20 20  # non-arrays.   
81c0: 20 20 20 20 20 23 0a 20 20 20 20 20 20 20 20 72       #.        r
81d0: 65 67 73 75 62 20 22 3a 24 22 20 24 76 61 72 20  egsub ":$" $var 
81e0: 22 3a 3a 22 20 76 61 72 0a 20 20 20 20 20 20 20  "::" var.       
81f0: 20 73 65 74 20 6e 61 6d 65 73 70 61 63 65 73 20   set namespaces 
8200: 5b 6e 61 6d 65 73 70 61 63 65 20 63 68 69 6c 64  [namespace child
8210: 72 65 6e 20 3a 3a 20 24 7b 76 61 72 7d 2a 5d 0a  ren :: ${var}*].
8220: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65          if {[lle
8230: 6e 67 74 68 20 24 6e 61 6d 65 73 70 61 63 65 73  ngth $namespaces
8240: 5d 20 26 26 20 22 3a 3a 22 20 21 3d 20 5b 73 74  ] && "::" != [st
8250: 72 69 6e 67 20 72 61 6e 67 65 20 24 76 61 72 20  ring range $var 
8260: 30 20 31 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20  0 1]} {.        
8270: 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65      foreach name
8280: 20 24 6e 61 6d 65 73 70 61 63 65 73 20 7b 0a 20   $namespaces {. 
8290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
82a0: 65 67 73 75 62 20 22 5e 3a 3a 22 20 24 6e 61 6d  egsub "^::" $nam
82b0: 65 20 22 22 20 6e 61 6d 65 0a 20 20 20 20 20 20  e "" name.      
82c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73            if {[s
82d0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61  tring length $na
82e0: 6d 65 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  me]} {.         
82f0: 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65             lappe
8300: 6e 64 20 6e 65 77 20 24 6e 61 6d 65 3a 3a 0a 20  nd new $name::. 
8310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
8320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
8330: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e             set n
8340: 61 6d 65 73 70 61 63 65 73 20 24 6e 65 77 0a 20  amespaces $new. 
8350: 20 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74             unset
8360: 20 6e 65 77 0a 20 20 20 20 20 20 20 20 7d 0a 20   new.        }. 
8370: 20 20 20 20 20 20 20 73 65 74 20 6d 61 74 63 68         set match
8380: 65 73 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20  es \.           
8390: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 22 5b   [string trim "[
83a0: 75 70 6c 65 76 65 6c 20 24 6c 65 76 65 6c 20 69  uplevel $level i
83b0: 6e 66 6f 20 76 61 72 73 20 24 7b 76 61 72 7d 2a  nfo vars ${var}*
83c0: 5d 20 24 6e 61 6d 65 73 70 61 63 65 73 22 5d 0a  ] $namespaces"].
83d0: 20 20 20 20 20 20 20 20 69 66 20 7b 31 20 3d 3d          if {1 ==
83e0: 20 5b 6c 6c 65 6e 67 74 68 20 24 6d 61 74 63 68   [llength $match
83f0: 65 73 5d 7d 20 7b 20 3b 20 23 20 75 6e 69 71 75  es]} { ; # uniqu
8400: 65 20 6d 61 74 63 68 0a 0a 20 20 20 20 20 20 20  e match..       
8410: 20 20 20 20 20 23 20 63 68 65 63 6b 20 69 66 20       # check if 
8420: 74 68 69 73 20 75 6e 69 71 75 65 20 6d 61 74 63  this unique matc
8430: 68 20 69 73 20 61 6e 0a 20 20 20 20 20 20 20 20  h is an.        
8440: 20 20 20 20 23 20 61 72 72 61 79 20 6e 61 6d 65      # array name
8450: 2c 20 28 77 68 69 74 68 20 6e 6f 20 22 28 22 20  , (whith no "(" 
8460: 79 65 74 29 2e 0a 20 20 20 20 20 20 20 20 20 20  yet)..          
8470: 20 20 23 0a 20 20 20 20 20 20 20 20 20 20 20 20    #.            
8480: 69 66 20 7b 5b 75 70 6c 65 76 65 6c 20 24 6c 65  if {[uplevel $le
8490: 76 65 6c 20 61 72 72 61 79 20 65 78 69 73 74 73  vel array exists
84a0: 20 24 6d 61 74 63 68 65 73 5d 7d 20 7b 0a 20 20   $matches]} {.  
84b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
84c0: 74 75 72 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74  turn [VarComplet
84d0: 69 6f 6e 20 24 7b 6d 61 74 63 68 65 73 7d 28 20  ion ${matches}( 
84e0: 24 6c 65 76 65 6c 5d 3b 20 23 20 72 65 63 75 72  $level]; # recur
84f0: 73 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20  sion.           
8500: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
8510: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8520: 20 24 7b 70 72 65 7d 24 7b 6d 61 74 63 68 65 73   ${pre}${matches
8530: 7d 5b 52 69 67 68 74 20 24 70 72 65 5d 0a 20 20  }[Right $pre].  
8540: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
8550: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 22 22      } elseif {""
8560: 20 21 3d 20 24 6d 61 74 63 68 65 73 7d 20 7b 20   != $matches} { 
8570: 3b 20 23 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ; # more than on
8580: 65 20 6d 61 74 63 68 0a 20 20 20 20 20 20 20 20  e match.        
8590: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f        return [Co
85a0: 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
85b0: 74 65 78 74 20 24 6d 61 74 63 68 65 73 5d 0a 20  text $matches]. 
85c0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
85d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
85e0: 72 6e 20 22 22 3b 20 23 20 6e 6f 74 68 69 6e 67  rn ""; # nothing
85f0: 20 74 6f 20 63 6f 6d 70 6c 65 74 65 0a 20 20 20   to complete.   
8600: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20       }.    }..  
8610: 20 20 70 72 6f 63 20 43 6f 6d 70 6c 65 74 65 43    proc CompleteC
8620: 6f 6e 74 72 6f 6c 53 74 61 74 65 6d 65 6e 74 20  ontrolStatement 
8630: 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
8640: 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 20 70 72 65  line pos mod pre
8650: 20 6e 65 77 5f 6c 69 6e 65 7d 20 7b 0a 20 20 20   new_line} {.   
8660: 20 20 20 20 20 73 65 74 20 70 72 65 20 5b 47 65       set pre [Ge
8670: 74 51 75 6f 74 65 64 50 72 65 66 69 78 20 24 70  tQuotedPrefix $p
8680: 72 65 5d 0a 20 20 20 20 20 20 20 20 73 65 74 20  re].        set 
8690: 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6e 65 77  cmd [Lindex $new
86a0: 5f 6c 69 6e 65 20 30 5d 0a 20 20 20 20 20 20 20  _line 0].       
86b0: 20 73 65 74 20 64 69 66 66 20 5b 65 78 70 72 20   set diff [expr 
86c0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length 
86d0: 24 6c 69 6e 65 5d 20 2d 20 5b 73 74 72 69 6e 67  $line] - [string
86e0: 20 6c 65 6e 67 74 68 20 24 6e 65 77 5f 6c 69 6e   length $new_lin
86f0: 65 5d 7d 5d 0a 20 20 20 20 20 20 20 20 69 66 20  e]}].        if 
8700: 7b 24 64 69 66 66 20 3d 3d 20 5b 65 78 70 72 20  {$diff == [expr 
8710: 7b 24 73 74 61 72 74 20 2b 20 31 7d 5d 7d 20 7b  {$start + 1}]} {
8720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
8730: 20 6d 6f 64 31 20 24 6d 6f 64 0a 20 20 20 20 20   mod1 $mod.     
8740: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
8750: 20 20 20 20 20 20 20 20 73 65 74 20 6d 6f 64 31          set mod1
8760: 20 24 74 65 78 74 0a 20 20 20 20 20 20 20 20 20   $text.         
8770: 20 20 20 73 65 74 20 70 72 65 20 22 22 0a 20 20     set pre "".  
8780: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
8790: 73 65 74 20 6e 65 77 5f 65 6e 64 20 5b 65 78 70  set new_end [exp
87a0: 72 20 7b 24 65 6e 64 20 2d 20 24 64 69 66 66 7d  r {$end - $diff}
87b0: 5d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 65  ].        set ne
87c0: 77 5f 73 74 61 72 74 20 5b 65 78 70 72 20 7b 24  w_start [expr {$
87d0: 6e 65 77 5f 65 6e 64 20 2d 20 5b 73 74 72 69 6e  new_end - [strin
87e0: 67 20 6c 65 6e 67 74 68 20 24 6d 6f 64 31 5d 7d  g length $mod1]}
87f0: 5d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 6e  ].        if {$n
8800: 65 77 5f 73 74 61 72 74 20 3c 20 30 7d 20 7b 0a  ew_start < 0} {.
8810: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8820: 72 6e 20 22 22 3b 20 23 20 77 68 65 6e 20 64 6f  rn ""; # when do
8830: 65 73 20 74 68 69 73 20 6f 63 63 75 72 3f 0a 20  es this occur?. 
8840: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
8850: 20 73 65 74 20 72 65 73 20 5b 53 63 72 69 70 74   set res [Script
8860: 43 6f 6d 70 6c 65 74 65 72 20 24 6d 6f 64 31 20  Completer $mod1 
8870: 24 6e 65 77 5f 73 74 61 72 74 20 24 6e 65 77 5f  $new_start $new_
8880: 65 6e 64 20 24 6e 65 77 5f 6c 69 6e 65 5d 0a 20  end $new_line]. 
8890: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
88a0: 6e 67 20 6c 65 6e 67 74 68 20 5b 4c 69 6e 64 65  ng length [Linde
88b0: 78 20 24 72 65 73 20 30 5d 5d 7d 20 7b 0a 20 20  x $res 0]]} {.  
88c0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
88d0: 20 24 7b 70 72 65 7d 24 7b 72 65 73 7d 0a 20 20   ${pre}${res}.  
88e0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20        } else {. 
88f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
8900: 6e 20 24 72 65 73 0a 20 20 20 20 20 20 20 20 7d  n $res.        }
8910: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
8920: 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  "".    }..    pr
8930: 6f 63 20 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e  oc BraceOrComman
8940: 64 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  d {text start en
8950: 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
8960: 7b 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  {.        if {![
8970: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b 4c  string length [L
8980: 69 6e 64 65 78 20 24 6c 69 6e 65 20 24 70 6f 73  index $line $pos
8990: 5d 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ]]} {.          
89a0: 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5c    return [list \
89b0: 7b 20 7b 7d 5d 3b 20 23 20 5c 7d 0a 20 20 20 20  { {}]; # \}.    
89c0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
89d0: 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 65 77           set new
89e0: 5f 6c 69 6e 65 20 5b 73 74 72 69 6e 67 20 74 72  _line [string tr
89f0: 69 6d 20 5b 49 6e 63 6f 6d 70 6c 65 74 65 4c 69  im [IncompleteLi
8a00: 73 74 52 65 6d 61 69 6e 64 65 72 20 24 6c 69 6e  stRemainder $lin
8a10: 65 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e]].            
8a20: 69 66 20 7b 21 5b 72 65 67 65 78 70 20 7b 5e 28  if {![regexp {^(
8a30: 5b 5c 7b 5c 22 5d 29 28 2e 2a 29 24 7d 20 24 6e  [\{\"])(.*)$} $n
8a40: 65 77 5f 6c 69 6e 65 20 61 6c 6c 20 70 72 65 20  ew_line all pre 
8a50: 6e 65 77 5f 6c 69 6e 65 5d 7d 20 7b 0a 20 20 20  new_line]} {.   
8a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
8a70: 20 70 72 65 20 22 22 0a 20 20 20 20 20 20 20 20   pre "".        
8a80: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
8a90: 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65    return [Comple
8aa0: 74 65 43 6f 6e 74 72 6f 6c 53 74 61 74 65 6d 65  teControlStateme
8ab0: 6e 74 20 24 74 65 78 74 20 5c 0a 20 20 20 20 20  nt $text \.     
8ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ad0: 20 20 20 24 73 74 61 72 74 20 24 65 6e 64 20 24     $start $end $
8ae0: 6c 69 6e 65 20 24 70 6f 73 20 24 6d 6f 64 20 24  line $pos $mod $
8af0: 70 72 65 20 24 6e 65 77 5f 6c 69 6e 65 5d 0a 20  pre $new_line]. 
8b00: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a         }.    }..
8b10: 20 20 20 20 70 72 6f 63 20 46 75 6c 6c 51 75 61      proc FullQua
8b20: 6c 69 66 69 65 64 4d 61 74 63 68 65 73 20 7b 71  lifiedMatches {q
8b30: 75 61 6c 69 66 69 65 72 20 6d 61 74 63 68 6c 69  ualifier matchli
8b40: 73 74 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  st} {.        se
8b50: 74 20 6e 65 77 20 22 22 0a 20 20 20 20 20 20 20  t new "".       
8b60: 20 69 66 20 7b 22 22 20 21 3d 20 24 71 75 61 6c   if {"" != $qual
8b70: 69 66 69 65 72 20 26 26 20 21 5b 72 65 67 65 78  ifier && ![regex
8b80: 70 20 3a 3a 24 20 24 71 75 61 6c 69 66 69 65 72  p ::$ $qualifier
8b90: 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ]} {.           
8ba0: 20 61 70 70 65 6e 64 20 71 75 61 6c 69 66 69 65   append qualifie
8bb0: 72 20 3a 3a 0a 20 20 20 20 20 20 20 20 7d 0a 20  r ::.        }. 
8bc0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 65         foreach e
8bd0: 6e 74 72 79 20 24 6d 61 74 63 68 6c 69 73 74 20  ntry $matchlist 
8be0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  {.            se
8bf0: 74 20 66 75 6c 6c 20 24 7b 71 75 61 6c 69 66 69  t full ${qualifi
8c00: 65 72 7d 24 7b 65 6e 74 72 79 7d 0a 20 20 20 20  er}${entry}.    
8c10: 20 20 20 20 20 20 20 20 69 66 20 7b 22 22 20 21          if {"" !
8c20: 3d 20 5b 6e 61 6d 65 73 70 61 63 65 20 77 68 69  = [namespace whi
8c30: 63 68 20 24 66 75 6c 6c 5d 7d 20 7b 0a 20 20 20  ch $full]} {.   
8c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70               lap
8c50: 70 65 6e 64 20 6e 65 77 20 24 66 75 6c 6c 0a 20  pend new $full. 
8c60: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
8c70: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72       }.        r
8c80: 65 74 75 72 6e 20 24 6e 65 77 0a 20 20 20 20 7d  eturn $new.    }
8c90: 0a 0a 20 20 20 20 70 72 6f 63 20 50 72 6f 63 73  ..    proc Procs
8ca0: 4f 6e 6c 79 43 6f 6d 70 6c 65 74 69 6f 6e 20 7b  OnlyCompletion {
8cb0: 63 6d 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 72  cmd} {.        r
8cc0: 65 74 75 72 6e 20 5b 43 6f 6d 6d 61 6e 64 43 6f  eturn [CommandCo
8cd0: 6d 70 6c 65 74 69 6f 6e 20 24 63 6d 64 20 70 72  mpletion $cmd pr
8ce0: 6f 63 73 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ocs].    }..    
8cf0: 70 72 6f 63 20 43 6f 6d 6d 61 6e 64 73 4f 6e 6c  proc CommandsOnl
8d00: 79 43 6f 6d 70 6c 65 74 69 6f 6e 20 7b 63 6d 64  yCompletion {cmd
8d10: 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75  } {.        retu
8d20: 72 6e 20 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c  rn [CommandCompl
8d30: 65 74 69 6f 6e 20 24 63 6d 64 20 63 6f 6d 6d 61  etion $cmd comma
8d40: 6e 64 73 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  nds].    }..    
8d50: 70 72 6f 63 20 43 6f 6d 6d 61 6e 64 43 6f 6d 70  proc CommandComp
8d60: 6c 65 74 69 6f 6e 20 7b 63 6d 64 20 7b 61 63 74  letion {cmd {act
8d70: 69 6f 6e 20 62 6f 74 68 7d 20 7b 73 70 63 20 3a  ion both} {spc :
8d80: 3a 7d 7d 20 7b 0a 20 20 20 20 20 20 20 20 23 20  :}} {.        # 
8d90: 67 65 74 20 74 68 65 20 6c 65 61 64 69 6e 67 20  get the leading 
8da0: 63 6f 6c 6f 6e 73 20 69 6e 20 60 63 6d 64 27 2e  colons in `cmd'.
8db0: 0a 20 20 20 20 20 20 20 20 72 65 67 65 78 70 20  .        regexp 
8dc0: 7b 5e 3a 2a 7d 20 24 63 6d 64 20 70 72 65 0a 20  {^:*} $cmd pre. 
8dd0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43         return [C
8de0: 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e  ommandCompletion
8df0: 57 69 74 68 50 72 65 20 24 63 6d 64 20 24 61 63  WithPre $cmd $ac
8e00: 74 69 6f 6e 20 24 73 70 63 20 24 70 72 65 5d 0a  tion $spc $pre].
8e10: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20      }..    proc 
8e20: 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69 6f  CommandCompletio
8e30: 6e 57 69 74 68 50 72 65 20 7b 63 6d 64 20 61 63  nWithPre {cmd ac
8e40: 74 69 6f 6e 20 73 70 63 20 70 72 65 7d 20 7b 0a  tion spc pre} {.
8e50: 20 20 20 20 20 20 20 20 73 65 74 20 63 6d 64 20          set cmd 
8e60: 5b 53 74 72 69 70 50 72 65 66 69 78 20 24 63 6d  [StripPrefix $cm
8e70: 64 5d 0a 20 20 20 20 20 20 20 20 73 65 74 20 71  d].        set q
8e80: 75 61 6c 69 20 5b 6e 61 6d 65 73 70 61 63 65 20  uali [namespace 
8e90: 71 75 61 6c 69 66 69 65 72 73 20 24 63 6d 64 5d  qualifiers $cmd]
8ea0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74  .        if {[st
8eb0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 71 75 61  ring length $qua
8ec0: 6c 69 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  li]} {.         
8ed0: 20 20 20 73 65 74 20 6d 61 74 63 68 65 73 20 5b     set matches [
8ee0: 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69 6f  CommandCompletio
8ef0: 6e 57 69 74 68 50 72 65 20 5c 0a 20 20 20 20 20  nWithPre \.     
8f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f10: 20 20 20 20 20 20 20 20 5b 6e 61 6d 65 73 70 61          [namespa
8f20: 63 65 20 74 61 69 6c 20 24 63 6d 64 5d 20 24 61  ce tail $cmd] $a
8f30: 63 74 69 6f 6e 20 24 7b 73 70 63 7d 24 7b 71 75  ction ${spc}${qu
8f40: 61 6c 69 7d 20 24 70 72 65 5d 0a 20 20 20 20 20  ali} $pre].     
8f50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 6d         return $m
8f60: 61 74 63 68 65 73 0a 20 20 20 20 20 20 20 20 7d  atches.        }
8f70: 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6d 64  .        set cmd
8f80: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 63   [string trim $c
8f90: 6d 64 5d 2a 0a 20 20 20 20 20 20 20 20 69 66 20  md]*.        if 
8fa0: 7b 22 70 72 6f 63 73 22 20 21 3d 20 24 61 63 74  {"procs" != $act
8fb0: 69 6f 6e 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  ion} {.         
8fc0: 20 20 20 73 65 74 20 61 6c 6c 5f 63 6f 6d 6d 61     set all_comma
8fd0: 6e 64 73 20 5b 6e 61 6d 65 73 70 61 63 65 20 65  nds [namespace e
8fe0: 76 61 6c 20 24 73 70 63 20 5b 6c 69 73 74 20 69  val $spc [list i
8ff0: 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 24 63 6d  nfo commands $cm
9000: 64 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d]].            
9010: 73 65 74 20 63 6f 6d 6d 61 6e 64 73 20 22 22 0a  set commands "".
9020: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
9030: 61 63 68 20 63 6f 6d 6d 61 6e 64 20 24 61 6c 6c  ach command $all
9040: 5f 63 6f 6d 6d 61 6e 64 73 20 7b 0a 20 20 20 20  _commands {.    
9050: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
9060: 5b 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  [namespace eval 
9070: 24 73 70 63 20 5b 6c 69 73 74 20 6e 61 6d 65 73  $spc [list names
9080: 70 61 63 65 20 6f 72 69 67 69 6e 20 24 63 6f 6d  pace origin $com
9090: 6d 61 6e 64 5d 5d 0a 20 20 20 20 20 20 20 20 20  mand]].         
90a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3d                 =
90b0: 3d 20 5b 6e 61 6d 65 73 70 61 63 65 20 65 76 61  = [namespace eva
90c0: 6c 20 24 73 70 63 20 5b 6c 69 73 74 20 6e 61 6d  l $spc [list nam
90d0: 65 73 70 61 63 65 20 77 68 69 63 68 20 24 63 6f  espace which $co
90e0: 6d 6d 61 6e 64 5d 5d 7d 20 7b 0a 20 20 20 20 20  mmand]]} {.     
90f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
9100: 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 73 20  append commands 
9110: 24 63 6f 6d 6d 61 6e 64 0a 20 20 20 20 20 20 20  $command.       
9120: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
9130: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
9140: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
9150: 20 20 20 20 20 20 73 65 74 20 63 6f 6d 6d 61 6e        set comman
9160: 64 73 20 22 22 0a 20 20 20 20 20 20 20 20 7d 0a  ds "".        }.
9170: 20 20 20 20 20 20 20 20 69 66 20 7b 22 63 6f 6d          if {"com
9180: 6d 61 6e 64 73 22 20 21 3d 20 24 61 63 74 69 6f  mands" != $actio
9190: 6e 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  n} {.           
91a0: 20 73 65 74 20 61 6c 6c 5f 70 72 6f 63 73 20 5b   set all_procs [
91b0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 24  namespace eval $
91c0: 73 70 63 20 5b 6c 69 73 74 20 69 6e 66 6f 20 70  spc [list info p
91d0: 72 6f 63 73 20 24 63 6d 64 5d 5d 0a 20 20 20 20  rocs $cmd]].    
91e0: 20 20 20 20 20 20 20 20 73 65 74 20 70 72 6f 63          set proc
91f0: 73 20 22 22 0a 20 20 20 20 20 20 20 20 20 20 20  s "".           
9200: 20 66 6f 72 65 61 63 68 20 70 72 6f 63 20 24 61   foreach proc $a
9210: 6c 6c 5f 70 72 6f 63 73 20 7b 0a 20 20 20 20 20  ll_procs {.     
9220: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
9230: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 24  namespace eval $
9240: 73 70 63 20 5b 6c 69 73 74 20 6e 61 6d 65 73 70  spc [list namesp
9250: 61 63 65 20 6f 72 69 67 69 6e 20 24 70 72 6f 63  ace origin $proc
9260: 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]].             
9270: 20 20 20 20 20 20 20 20 20 20 20 3d 3d 20 5b 6e             == [n
9280: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 24 73  amespace eval $s
9290: 70 63 20 5b 6c 69 73 74 20 6e 61 6d 65 73 70 61  pc [list namespa
92a0: 63 65 20 77 68 69 63 68 20 24 70 72 6f 63 5d 5d  ce which $proc]]
92b0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  } {.            
92c0: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
92d0: 70 72 6f 63 73 20 24 70 72 6f 63 0a 20 20 20 20  procs $proc.    
92e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
92f0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
9300: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
9310: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 72 6f           set pro
9320: 63 73 20 22 22 0a 20 20 20 20 20 20 20 20 7d 0a  cs "".        }.
9330: 20 20 20 20 20 20 20 20 73 65 74 20 6d 61 74 63          set matc
9340: 68 65 73 20 5b 6e 61 6d 65 73 70 61 63 65 20 65  hes [namespace e
9350: 76 61 6c 20 24 73 70 63 20 63 6f 6e 63 61 74 20  val $spc concat 
9360: 24 63 6f 6d 6d 61 6e 64 73 20 24 70 72 6f 63 73  $commands $procs
9370: 5d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61  ].        set na
9380: 6d 65 73 70 61 63 65 73 20 5b 6e 61 6d 65 73 70  mespaces [namesp
9390: 61 63 65 20 63 68 69 6c 64 72 65 6e 20 24 73 70  ace children $sp
93a0: 63 20 24 63 6d 64 5d 0a 0a 20 20 20 20 20 20 20  c $cmd]..       
93b0: 20 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24   if {![llength $
93c0: 6d 61 74 63 68 65 73 5d 20 26 26 20 31 20 3d 3d  matches] && 1 ==
93d0: 20 5b 6c 6c 65 6e 67 74 68 20 24 6e 61 6d 65 73   [llength $names
93e0: 70 61 63 65 73 5d 7d 20 7b 0a 20 20 20 20 20 20  paces]} {.      
93f0: 20 20 20 20 20 20 73 65 74 20 6d 61 74 63 68 65        set matche
9400: 73 20 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65  s [CommandComple
9410: 74 69 6f 6e 57 69 74 68 50 72 65 20 7b 7d 20 24  tionWithPre {} $
9420: 61 63 74 69 6f 6e 20 24 6e 61 6d 65 73 70 61 63  action $namespac
9430: 65 73 20 24 70 72 65 5d 0a 20 20 20 20 20 20 20  es $pre].       
9440: 20 20 20 20 20 72 65 74 75 72 6e 20 24 6d 61 74       return $mat
9450: 63 68 65 73 0a 20 20 20 20 20 20 20 20 7d 0a 0a  ches.        }..
9460: 20 20 20 20 20 20 20 20 23 20 6d 61 6b 65 20 60          # make `
9470: 6e 61 6d 65 73 70 61 63 65 73 27 20 68 61 76 69  namespaces' havi
9480: 6e 67 20 65 78 61 63 74 6c 79 0a 20 20 20 20 20  ng exactly.     
9490: 20 20 20 23 20 74 68 65 20 73 61 6d 65 20 6e 75     # the same nu
94a0: 6d 62 65 72 20 6f 66 20 63 6f 6c 6f 6e 73 20 61  mber of colons a
94b0: 73 20 60 63 6d 64 27 2e 0a 20 20 20 20 20 20 20  s `cmd'..       
94c0: 20 23 0a 20 20 20 20 20 20 20 20 72 65 67 73 75   #.        regsu
94d0: 62 20 2d 61 6c 6c 20 7b 5e 3a 2a 7d 20 24 73 70  b -all {^:*} $sp
94e0: 63 20 24 70 72 65 20 73 70 63 0a 0a 20 20 20 20  c $pre spc..    
94f0: 20 20 20 20 73 65 74 20 6d 61 74 63 68 65 73 20      set matches 
9500: 5b 46 75 6c 6c 51 75 61 6c 69 66 69 65 64 4d 61  [FullQualifiedMa
9510: 74 63 68 65 73 20 24 73 70 63 20 24 6d 61 74 63  tches $spc $matc
9520: 68 65 73 5d 0a 20 20 20 20 20 20 20 20 72 65 74  hes].        ret
9530: 75 72 6e 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  urn [string trim
9540: 20 22 24 6d 61 74 63 68 65 73 20 24 6e 61 6d 65   "$matches $name
9550: 73 70 61 63 65 73 22 5d 0a 20 20 20 20 7d 0a 0a  spaces"].    }..
9560: 20 20 20 20 23 2a 2a 0a 20 20 20 20 23 20 63 68      #**.    # ch
9570: 65 63 6b 2c 20 69 66 20 74 68 65 20 66 69 72 73  eck, if the firs
9580: 74 20 61 72 67 75 6d 65 6e 74 20 73 74 61 72 74  t argument start
9590: 73 20 77 69 74 68 20 61 20 27 5b 27 0a 20 20 20  s with a '['.   
95a0: 20 23 20 61 6e 64 20 6d 75 73 74 20 62 65 20 65   # and must be e
95b0: 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72 65 20  valuated before 
95c0: 63 6f 6e 74 69 6e 75 69 6e 67 2e 0a 20 20 20 20  continuing..    
95d0: 23 20 4e 4f 54 45 3a 20 74 72 69 6d 73 20 74 68  # NOTE: trims th
95e0: 65 20 60 6c 69 6e 65 27 2e 0a 20 20 20 20 23 20  e `line'..    # 
95f0: 20 20 20 20 20 20 65 76 65 6e 74 75 61 6c 6c 79        eventually
9600: 20 6d 6f 64 69 66 69 65 73 20 61 6c 6c 20 61 72   modifies all ar
9610: 67 75 6d 65 6e 74 73 2e 0a 20 20 20 20 23 0a 20  guments..    #. 
9620: 20 20 20 70 72 6f 63 20 45 76 65 6e 74 75 61 6c     proc Eventual
9630: 6c 79 45 76 61 6c 75 61 74 65 46 69 72 73 74 20  lyEvaluateFirst 
9640: 7b 70 61 72 74 54 20 73 74 61 72 74 54 20 65 6e  {partT startT en
9650: 64 54 20 6c 69 6e 65 54 7d 20 7b 0a 20 20 20 20  dT lineT} {.    
9660: 20 20 20 20 23 20 72 65 74 75 72 6e 3b 20 23 20      # return; # 
9670: 64 69 73 61 62 6c 65 64 0a 20 20 20 20 20 20 20  disabled.       
9680: 20 75 70 76 61 72 20 24 70 61 72 74 54 20 70 61   upvar $partT pa
9690: 72 74 20 24 73 74 61 72 74 54 20 73 74 61 72 74  rt $startT start
96a0: 20 24 65 6e 64 54 20 65 6e 64 20 24 6c 69 6e 65   $endT end $line
96b0: 54 20 6c 69 6e 65 0a 0a 20 20 20 20 20 20 20 20  T line..        
96c0: 73 65 74 20 6f 6c 64 6c 65 6e 20 5b 73 74 72 69  set oldlen [stri
96d0: 6e 67 20 6c 65 6e 67 74 68 20 24 6c 69 6e 65 5d  ng length $line]
96e0: 0a 20 20 20 20 20 20 20 20 23 20 73 65 74 20 6c  .        # set l
96f0: 69 6e 65 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  ine [string trim
9700: 20 24 6c 69 6e 65 5d 0a 20 20 20 20 20 20 20 20   $line].        
9710: 73 65 74 20 6c 69 6e 65 20 5b 73 74 72 69 6e 67  set line [string
9720: 20 74 72 69 6d 6c 65 66 74 20 24 6c 69 6e 65 5d   trimleft $line]
9730: 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 69 66  .        set dif
9740: 66 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e 67  f [expr {[string
9750: 20 6c 65 6e 67 74 68 20 24 6c 69 6e 65 5d 20 2d   length $line] -
9760: 20 24 6f 6c 64 6c 65 6e 7d 5d 0a 20 20 20 20 20   $oldlen}].     
9770: 20 20 20 69 6e 63 72 20 73 74 61 72 74 20 24 64     incr start $d
9780: 69 66 66 0a 20 20 20 20 20 20 20 20 69 6e 63 72  iff.        incr
9790: 20 65 6e 64 20 24 64 69 66 66 0a 0a 20 20 20 20   end $diff..    
97a0: 20 20 20 20 73 65 74 20 63 68 61 72 20 5b 73 74      set char [st
97b0: 72 69 6e 67 20 69 6e 64 65 78 20 24 6c 69 6e 65  ring index $line
97c0: 20 30 5d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   0].        if {
97d0: 7b 5b 7d 20 21 3d 20 24 63 68 61 72 20 26 26 20  {[} != $char && 
97e0: 7b 24 7d 20 21 3d 20 24 63 68 61 72 7d 20 7b 72  {$} != $char} {r
97f0: 65 74 75 72 6e 7d 0a 0a 20 20 20 20 20 20 20 20  eturn}..        
9800: 73 65 74 20 70 6f 73 20 30 0a 20 20 20 20 20 20  set pos 0.      
9810: 20 20 77 68 69 6c 65 20 7b 2d 31 20 21 3d 20 5b    while {-1 != [
9820: 73 65 74 20 69 64 78 20 5b 73 74 72 69 6e 67 20  set idx [string 
9830: 66 69 72 73 74 20 7b 5d 7d 20 24 6c 69 6e 65 20  first {]} $line 
9840: 24 70 6f 73 5d 5d 7d 20 7b 0a 20 20 20 20 20 20  $pos]]} {.      
9850: 20 20 20 20 20 20 73 65 74 20 63 6d 64 20 5b 73        set cmd [s
9860: 74 72 69 6e 67 20 72 61 6e 67 65 20 24 6c 69 6e  tring range $lin
9870: 65 20 30 20 24 69 64 78 5d 0a 20 20 20 20 20 20  e 0 $idx].      
9880: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info 
9890: 63 6f 6d 70 6c 65 74 65 20 24 63 6d 64 5d 7d 20  complete $cmd]} 
98a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
98b0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
98c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
98d0: 20 20 20 73 65 74 20 70 6f 73 20 5b 65 78 70 72     set pos [expr
98e0: 20 7b 24 69 64 78 20 2b 20 31 7d 5d 0a 20 20 20   {$idx + 1}].   
98f0: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
9900: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
9910: 73 20 63 6d 64 5d 7d 20 7b 72 65 74 75 72 6e 7d  s cmd]} {return}
9920: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69  .        if {![i
9930: 6e 66 6f 20 63 6f 6d 70 6c 65 74 65 20 24 63 6d  nfo complete $cm
9940: 64 5d 7d 20 7b 72 65 74 75 72 6e 7d 0a 20 20 20  d]} {return}.   
9950: 20 20 20 20 20 73 65 74 20 63 6d 64 20 5b 73 74       set cmd [st
9960: 72 69 6e 67 20 72 61 6e 67 65 20 24 63 6d 64 20  ring range $cmd 
9970: 31 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e 67  1 [expr {[string
9980: 20 6c 65 6e 67 74 68 20 24 63 6d 64 5d 20 2d 20   length $cmd] - 
9990: 32 7d 5d 5d 0a 20 20 20 20 20 20 20 20 73 65 74  2}]].        set
99a0: 20 72 65 73 74 20 5b 53 74 72 69 6e 67 20 72 61   rest [String ra
99b0: 6e 67 65 20 24 6c 69 6e 65 20 5b 65 78 70 72 20  nge $line [expr 
99c0: 7b 24 69 64 78 20 2b 20 31 7d 5d 20 65 6e 64 5d  {$idx + 1}] end]
99d0: 0a 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
99e0: 61 74 63 68 20 5b 6c 69 73 74 20 73 65 74 20 72  atch [list set r
99f0: 65 73 75 6c 74 20 5b 73 74 72 69 6e 67 20 74 72  esult [string tr
9a00: 69 6d 20 5b 65 76 61 6c 20 24 63 6d 64 5d 5d 5d  im [eval $cmd]]]
9a10: 5d 7d 20 7b 72 65 74 75 72 6e 7d 0a 0a 20 20 20  ]} {return}..   
9a20: 20 20 20 20 20 73 65 74 20 6c 69 6e 65 20 24 7b       set line ${
9a30: 72 65 73 75 6c 74 7d 24 7b 72 65 73 74 7d 0a 20  result}${rest}. 
9a40: 20 20 20 20 20 20 20 73 65 74 20 64 69 66 66 20         set diff 
9a50: 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c  [expr {[string l
9a60: 65 6e 67 74 68 20 24 72 65 73 75 6c 74 5d 20 2d  ength $result] -
9a70: 20 28 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   ([string length
9a80: 20 24 63 6d 64 5d 20 2b 20 32 29 7d 5d 0a 20 20   $cmd] + 2)}].  
9a90: 20 20 20 20 20 20 69 6e 63 72 20 73 74 61 72 74        incr start
9aa0: 20 24 64 69 66 66 0a 20 20 20 20 20 20 20 20 69   $diff.        i
9ab0: 6e 63 72 20 65 6e 64 20 24 64 69 66 66 0a 20 20  ncr end $diff.  
9ac0: 20 20 7d 0a 0a 20 20 20 20 23 20 69 66 20 74 68    }..    # if th
9ad0: 65 20 6c 69 6e 65 20 65 6e 74 65 72 65 64 20 73  e line entered s
9ae0: 6f 20 66 61 72 20 69 73 0a 20 20 20 20 23 20 25  o far is.    # %
9af0: 20 70 75 74 73 20 24 62 3c 54 41 42 3e 0a 20 20   puts $b<TAB>.  
9b00: 20 20 23 20 70 61 72 74 20 20 3d 3d 20 24 62 0a    # part  == $b.
9b10: 20 20 20 20 23 20 73 74 61 72 74 20 3d 3d 20 35      # start == 5
9b20: 0a 20 20 20 20 23 20 65 6e 64 20 20 20 3d 3d 20  .    # end   == 
9b30: 37 0a 20 20 20 20 23 20 6c 69 6e 65 20 20 3d 3d  7.    # line  ==
9b40: 20 22 24 70 75 74 73 20 24 62 22 0a 20 20 20 20   "$puts $b".    
9b50: 23 0a 20 20 20 20 70 72 6f 63 20 53 63 72 69 70  #.    proc Scrip
9b60: 74 43 6f 6d 70 6c 65 74 65 72 20 7b 70 61 72 74  tCompleter {part
9b70: 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 7d   start end line}
9b80: 20 7b 0a 0a 20 20 20 20 20 20 20 20 23 20 69 66   {..        # if
9b90: 20 74 68 65 20 63 68 61 72 61 63 74 65 72 20 62   the character b
9ba0: 65 66 6f 72 65 20 74 68 65 20 63 75 72 73 6f 72  efore the cursor
9bb0: 20 69 73 20 61 20 74 65 72 6d 69 6e 61 74 69 6e   is a terminatin
9bc0: 67 0a 20 20 20 20 20 20 20 20 23 20 71 75 6f 74  g.        # quot
9bd0: 65 20 61 6e 64 20 74 68 65 20 75 73 65 72 20 77  e and the user w
9be0: 61 6e 74 73 20 63 6f 6d 70 6c 65 74 69 6f 6e 2c  ants completion,
9bf0: 20 77 65 20 69 6e 73 65 72 74 20 61 20 77 68 69   we insert a whi
9c00: 74 65 0a 20 20 20 20 20 20 20 20 23 20 73 70 61  te.        # spa
9c10: 63 65 20 68 65 72 65 2e 0a 20 20 20 20 20 20 20  ce here..       
9c20: 20 23 0a 20 20 20 20 20 20 20 20 73 65 74 20 63   #.        set c
9c30: 68 61 72 20 5b 73 74 72 69 6e 67 20 69 6e 64 65  har [string inde
9c40: 78 20 24 6c 69 6e 65 20 5b 65 78 70 72 20 7b 24  x $line [expr {$
9c50: 65 6e 64 20 2d 20 31 7d 5d 5d 0a 20 20 20 20 20  end - 1}]].     
9c60: 20 20 20 69 66 20 7b 22 5c 7d 22 20 3d 3d 20 24     if {"\}" == $
9c70: 63 68 61 72 7d 20 7b 0a 20 20 20 20 20 20 20 20  char} {.        
9c80: 20 20 20 20 61 70 70 65 6e 64 20 24 70 61 72 74      append $part
9c90: 20 22 20 22 0a 20 20 20 20 20 20 20 20 20 20 20   " ".           
9ca0: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 70   return [list $p
9cb0: 61 72 74 5d 0a 20 20 20 20 20 20 20 20 7d 0a 0a  art].        }..
9cc0: 20 20 20 20 20 20 20 20 69 66 20 7b 7b 24 7d 20          if {{$} 
9cd0: 3d 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78  == [string index
9ce0: 20 24 70 61 72 74 20 30 5d 7d 20 7b 0a 0a 20 20   $part 0]} {..  
9cf0: 20 20 20 20 20 20 20 20 20 20 23 20 63 68 65 63            # chec
9d00: 6b 20 66 6f 72 20 61 20 21 24 20 68 69 73 74 6f  k for a !$ histo
9d10: 72 79 20 65 76 65 6e 74 0a 20 20 20 20 20 20 20  ry event.       
9d20: 20 20 20 20 20 23 0a 20 20 20 20 20 20 20 20 20       #.         
9d30: 20 20 20 69 66 20 7b 24 73 74 61 72 74 20 3e 20     if {$start > 
9d40: 30 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0} {.           
9d50: 20 20 20 20 20 69 66 20 7b 7b 21 7d 20 3d 3d 20       if {{!} == 
9d60: 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 6c  [string index $l
9d70: 69 6e 65 20 5b 65 78 70 72 20 7b 24 73 74 61 72  ine [expr {$star
9d80: 74 20 2d 20 31 7d 5d 5d 7d 20 7b 0a 20 20 20 20  t - 1}]]} {.    
9d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9da0: 72 65 74 75 72 6e 20 22 22 0a 20 20 20 20 20 20  return "".      
9db0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
9dc0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
9dd0: 20 20 20 20 20 20 23 20 76 61 72 69 61 62 6c 65        # variable
9de0: 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 43 68 65   completion. Che
9df0: 63 6b 20 66 69 72 73 74 2c 20 69 66 20 74 68 65  ck first, if the
9e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 76  .            # v
9e10: 61 72 69 61 62 6c 65 20 73 74 61 72 74 73 20 77  ariable starts w
9e20: 69 74 68 20 61 20 70 6c 61 69 6e 20 60 24 27 20  ith a plain `$' 
9e30: 6f 72 20 73 68 6f 75 6c 64 0a 20 20 20 20 20 20  or should.      
9e40: 20 20 20 20 20 20 23 20 62 65 20 65 6e 63 6c 6f        # be enclo
9e50: 73 65 64 20 69 6e 20 62 72 61 63 65 73 2e 0a 20  sed in braces.. 
9e60: 20 20 20 20 20 20 20 20 20 20 20 23 0a 20 20 20             #.   
9e70: 20 20 20 20 20 20 20 20 20 73 65 74 20 76 61 72           set var
9e80: 20 5b 53 74 72 69 6e 67 20 72 61 6e 67 65 20 24   [String range $
9e90: 70 61 72 74 20 31 20 65 6e 64 5d 0a 0a 20 20 20  part 1 end]..   
9ea0: 20 20 20 20 20 20 20 20 20 23 20 63 68 65 63 6b           # check
9eb0: 20 69 66 20 24 76 61 72 20 69 73 20 61 6e 20 61   if $var is an a
9ec0: 72 72 61 79 20 6e 61 6d 65 2c 20 77 68 69 63 68  rray name, which
9ed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 61  .            # a
9ee0: 6c 72 65 61 64 79 20 68 61 73 20 61 6c 72 65 61  lready has alrea
9ef0: 64 79 20 61 20 22 28 22 20 73 6f 6d 65 77 68 65  dy a "(" somewhe
9f00: 72 65 20 69 6e 73 69 64 65 2e 0a 20 20 20 20 20  re inside..     
9f10: 20 20 20 20 20 20 20 23 0a 20 20 20 20 20 20 20         #.       
9f20: 20 20 20 20 20 69 66 20 7b 22 22 20 21 3d 20 5b       if {"" != [
9f30: 73 65 74 20 76 63 20 5b 56 61 72 43 6f 6d 70 6c  set vc [VarCompl
9f40: 65 74 69 6f 6e 20 24 76 61 72 5d 5d 7d 20 7b 0a  etion $var]]} {.
9f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f60: 69 66 20 7b 22 22 20 3d 3d 20 5b 6c 69 6e 64 65  if {"" == [linde
9f70: 78 20 24 76 63 20 30 5d 7d 20 7b 0a 20 20 20 20  x $vc 0]} {.    
9f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f90: 72 65 74 75 72 6e 20 22 5c 24 20 5b 6c 72 61 6e  return "\$ [lran
9fa0: 67 65 20 24 76 63 20 31 20 65 6e 64 5d 22 0a 20  ge $vc 1 end]". 
9fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
9fc0: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9fe0: 72 6e 20 5c 24 24 7b 76 63 7d 0a 20 20 20 20 20  rn \$${vc}.     
9ff0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
a000: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
a010: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
a020: 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20 20    return "".    
a030: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
a040: 20 20 20 23 20 53 43 45 4e 41 52 49 4f 3a 0a 20     # SCENARIO:. 
a050: 20 20 20 20 20 20 20 23 0a 20 20 20 20 20 20 20         #.       
a060: 20 23 20 25 20 70 75 74 73 20 62 6c 61 3b 20 70   # % puts bla; p
a070: 75 74 3c 54 41 42 3e 20 24 62 0a 20 20 20 20 20  ut<TAB> $b.     
a080: 20 20 20 23 20 70 61 72 74 20 20 3d 3d 20 70 75     # part  == pu
a090: 74 0a 20 20 20 20 20 20 20 20 23 20 73 74 61 72  t.        # star
a0a0: 74 20 3d 3d 20 31 30 0a 20 20 20 20 20 20 20 20  t == 10.        
a0b0: 23 20 65 6e 64 20 20 20 3d 3d 20 31 33 0a 20 20  # end   == 13.  
a0c0: 20 20 20 20 20 20 23 20 6c 69 6e 65 20 20 3d 3d        # line  ==
a0d0: 20 22 70 75 74 73 20 62 6c 61 3b 20 70 75 74 20   "puts bla; put 
a0e0: 24 62 22 0a 20 20 20 20 20 20 20 20 23 20 5b 53  $b".        # [S
a0f0: 70 6c 69 74 4c 69 6e 65 5d 20 2d 2d 3e 20 7b 31  plitLine] --> {1
a100: 20 22 20 70 75 74 20 24 62 22 7d 20 3d 3d 20 73   " put $b"} == s
a110: 75 62 0a 20 20 20 20 20 20 20 20 23 20 6e 65 77  ub.        # new
a120: 5f 73 74 61 72 74 20 3d 20 5b 6c 69 6e 64 65 78  _start = [lindex
a130: 20 24 73 75 62 20 30 5d 20 3d 3d 20 31 0a 20 20   $sub 0] == 1.  
a140: 20 20 20 20 20 20 23 20 6e 65 77 5f 65 6e 64 20        # new_end 
a150: 20 20 3d 20 5b 65 78 70 72 20 7b 24 65 6e 64 20    = [expr {$end 
a160: 2d 20 28 24 73 74 61 72 74 20 2d 20 24 6e 65 77  - ($start - $new
a170: 5f 73 74 61 72 74 29 7d 5d 20 3d 3d 20 34 0a 20  _start)}] == 4. 
a180: 20 20 20 20 20 20 20 23 20 6e 65 77 5f 70 61 72         # new_par
a190: 74 20 20 3d 3d 20 24 70 61 72 74 20 3d 3d 20 70  t  == $part == p
a1a0: 75 74 0a 20 20 20 20 20 20 20 20 23 20 6e 65 77  ut.        # new
a1b0: 5f 6c 69 6e 65 20 20 3d 20 5b 6c 69 6e 64 65 78  _line  = [lindex
a1c0: 20 24 73 75 62 20 31 5d 20 3d 3d 20 22 20 70 75   $sub 1] == " pu
a1d0: 74 20 24 62 22 0a 20 20 20 20 20 20 20 20 23 0a  t $b".        #.
a1e0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66          } elseif
a1f0: 20 7b 22 22 20 21 3d 20 5b 73 65 74 20 73 75 62   {"" != [set sub
a200: 20 5b 53 70 6c 69 74 4c 69 6e 65 20 24 73 74 61   [SplitLine $sta
a210: 72 74 20 24 6c 69 6e 65 5d 5d 7d 20 7b 0a 0a 20  rt $line]]} {.. 
a220: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e             set n
a230: 65 77 5f 73 74 61 72 74 20 5b 6c 69 6e 64 65 78  ew_start [lindex
a240: 20 24 73 75 62 20 30 5d 0a 20 20 20 20 20 20 20   $sub 0].       
a250: 20 20 20 20 20 73 65 74 20 6e 65 77 5f 65 6e 64       set new_end
a260: 20 5b 65 78 70 72 20 7b 24 65 6e 64 20 2d 20 28   [expr {$end - (
a270: 24 73 74 61 72 74 20 2d 20 24 6e 65 77 5f 73 74  $start - $new_st
a280: 61 72 74 29 7d 5d 0a 20 20 20 20 20 20 20 20 20  art)}].         
a290: 20 20 20 73 65 74 20 6e 65 77 5f 6c 69 6e 65 20     set new_line 
a2a0: 5b 6c 69 6e 64 65 78 20 24 73 75 62 20 31 5d 0a  [lindex $sub 1].
a2b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
a2c0: 72 6e 20 5b 53 63 72 69 70 74 43 6f 6d 70 6c 65  rn [ScriptComple
a2d0: 74 65 72 20 24 70 61 72 74 20 24 6e 65 77 5f 73  ter $part $new_s
a2e0: 74 61 72 74 20 24 6e 65 77 5f 65 6e 64 20 24 6e  tart $new_end $n
a2f0: 65 77 5f 6c 69 6e 65 5d 0a 0a 20 20 20 20 20 20  ew_line]..      
a300: 20 20 7d 20 65 6c 73 65 69 66 20 7b 30 20 3d 3d    } elseif {0 ==
a310: 20 5b 73 65 74 20 70 6f 73 20 5b 50 61 72 74 50   [set pos [PartP
a320: 6f 73 69 74 69 6f 6e 20 70 61 72 74 20 73 74 61  osition part sta
a330: 72 74 20 65 6e 64 20 6c 69 6e 65 5d 5d 7d 20 7b  rt end line]]} {
a340: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            # 
a350: 58 58 58 0a 20 20 20 20 20 20 20 20 20 20 20 20  XXX.            
a360: 23 20 20 20 20 20 6e 6f 74 65 20 74 68 61 74 20  #     note that 
a370: 6c 69 6e 65 20 77 69 6c 6c 20 62 65 20 5b 73 74  line will be [st
a380: 72 69 6e 67 20 74 72 69 6d 6c 65 66 74 27 65 64  ring trimleft'ed
a390: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ].            # 
a3a0: 20 20 20 20 61 66 74 65 72 20 50 61 72 74 50 6f      after PartPo
a3b0: 73 69 74 69 6f 6e 2e 0a 20 20 20 20 20 20 20 20  sition..        
a3c0: 20 20 20 20 23 20 58 58 58 0a 0a 20 20 20 20 20      # XXX..     
a3d0: 20 20 20 20 20 20 20 73 65 74 20 61 6c 6c 20 5b         set all [
a3e0: 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69 6f  CommandCompletio
a3f0: 6e 20 24 70 61 72 74 5d 0a 20 20 20 20 20 20 20  n $part].       
a400: 20 20 20 20 20 23 20 72 65 74 75 72 6e 20 5b 46       # return [F
a410: 6f 72 6d 61 74 20 24 61 6c 6c 20 24 70 61 72 74  ormat $all $part
a420: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ].            re
a430: 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73  turn [TryFromLis
a440: 74 20 24 70 61 72 74 20 24 61 6c 6c 5d 0a 0a 20  t $part $all].. 
a450: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
a460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 74  .            # t
a470: 72 79 20 74 6f 20 75 73 65 20 24 70 6f 73 20 66  ry to use $pos f
a480: 75 72 74 68 65 72 20 2e 2e 2e 0a 20 20 20 20 20  urther ....     
a490: 20 20 20 20 20 20 20 23 0a 20 20 20 20 20 20 20         #.       
a4a0: 20 20 20 20 20 23 20 69 66 20 7b 22 2e 22 20 3d       # if {"." =
a4b0: 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20  = [string index 
a4c0: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 6c 69  [string trim $li
a4d0: 6e 65 5d 20 30 5d 7d 20 7b 0a 20 20 20 20 20 20  ne] 0]} {.      
a4e0: 20 20 20 20 20 20 23 20 20 20 73 65 74 20 61 6c        #   set al
a4f0: 69 61 73 20 57 49 44 47 45 54 0a 20 20 20 20 20  ias WIDGET.     
a500: 20 20 20 20 20 20 20 23 20 20 20 73 65 74 20 6e         #   set n
a510: 61 6d 65 73 70 63 20 22 22 3b 20 23 20 77 69 64  amespc ""; # wid
a520: 67 65 74 73 20 61 72 65 20 61 6c 77 61 79 73 20  gets are always 
a530: 69 6e 20 74 68 65 20 67 6c 6f 62 61 6c 0a 20 20  in the global.  
a540: 20 20 20 20 20 20 20 20 20 20 23 20 7d 20 65 6c            # } el
a550: 73 65 20 7b 0a 0a 20 20 20 20 20 20 20 20 20 20  se {..          
a560: 20 20 20 20 20 20 23 20 74 68 65 20 64 6f 75 62        # the doub
a570: 6c 65 20 60 6c 69 6e 64 65 78 27 20 73 74 72 69  le `lindex' stri
a580: 70 73 20 7b 7d 20 6f 72 20 71 75 6f 74 65 73 2e  ps {} or quotes.
a590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a5a0: 20 23 20 74 68 65 20 73 75 62 73 74 20 65 6e 61   # the subst ena
a5b0: 62 6c 65 73 20 76 61 72 69 61 62 6c 65 73 20 63  bles variables c
a5c0: 6f 6e 74 61 69 6e 69 6e 67 0a 20 20 20 20 20 20  ontaining.      
a5d0: 20 20 20 20 20 20 20 20 20 20 23 20 63 6f 6d 6d            # comm
a5e0: 61 6e 64 20 6e 61 6d 65 73 2e 0a 20 20 20 20 20  and names..     
a5f0: 20 20 20 20 20 20 20 20 20 20 20 23 0a 20 20 20             #.   
a600: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
a610: 20 61 6c 69 61 73 20 5b 75 70 6c 65 76 65 6c 20   alias [uplevel 
a620: 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 5c 0a 20  [info level] \. 
a630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
a650: 62 73 74 20 5b 6c 69 6e 64 65 78 20 5b 6c 69 6e  bst [lindex [lin
a660: 64 65 78 20 5b 51 75 6f 74 65 51 75 6f 74 65 73  dex [QuoteQuotes
a670: 20 24 6c 69 6e 65 5d 20 30 5d 20 30 5d 5d 0a 0a   $line] 0] 0]]..
a680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a690: 23 20 6d 61 6b 65 20 60 61 6c 69 61 73 27 20 61  # make `alias' a
a6a0: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64   fully qualified
a6b0: 20 6e 61 6d 65 2e 0a 20 20 20 20 20 20 20 20 20   name..         
a6c0: 20 20 20 20 20 20 20 23 20 74 68 69 73 20 63 61         # this ca
a6d0: 6e 20 72 61 69 73 65 20 61 6e 20 65 72 72 6f 72  n raise an error
a6e0: 2c 20 69 66 20 61 6c 69 61 73 20 69 73 0a 20 20  , if alias is.  
a6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                # 
a700: 6e 6f 20 76 61 6c 69 64 20 63 6f 6d 6d 61 6e 64  no valid command
a710: 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a720: 20 20 23 0a 20 20 20 20 20 20 20 20 20 20 20 20    #.            
a730: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
a740: 73 65 74 20 61 6c 69 61 73 20 5b 6e 61 6d 65 73  set alias [names
a750: 70 61 63 65 20 6f 72 69 67 69 6e 20 24 61 6c 69  pace origin $ali
a760: 61 73 5d 7d 5d 7d 20 7b 0a 20 20 20 20 20 20 20  as]}]} {.       
a770: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a780: 75 72 6e 20 22 22 0a 20 20 20 20 20 20 20 20 20  urn "".         
a790: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
a7a0: 20 20 20 20 20 20 20 20 20 20 23 20 73 74 72 69            # stri
a7b0: 70 20 6c 65 61 64 69 6e 67 20 3a 3a 27 73 2e 0a  p leading ::'s..
a7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a7d0: 23 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #.              
a7e0: 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5e    regsub -all {^
a7f0: 3a 3a 7d 20 24 61 6c 69 61 73 20 7b 7d 20 61 6c  ::} $alias {} al
a800: 69 61 73 0a 20 20 20 20 20 20 20 20 20 20 20 20  ias.            
a810: 20 20 20 20 73 65 74 20 6e 61 6d 65 73 70 63 20      set namespc 
a820: 5b 6e 61 6d 65 73 70 61 63 65 20 71 75 61 6c 69  [namespace quali
a830: 66 69 65 72 73 20 24 61 6c 69 61 73 5d 0a 20 20  fiers $alias].  
a840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
a850: 74 20 61 6c 69 61 73 20 5b 6e 61 6d 65 73 70 61  t alias [namespa
a860: 63 65 20 74 61 69 6c 20 24 61 6c 69 61 73 5d 0a  ce tail $alias].
a870: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 7d 0a              # }.
a880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 74  .            # t
a890: 72 79 20 66 69 72 73 74 20 61 20 73 70 65 63 69  ry first a speci
a8a0: 66 69 63 20 63 6f 6d 70 6c 65 74 65 72 2c 20 74  fic completer, t
a8b0: 68 65 6e 2c 20 61 6e 64 20 6f 6e 6c 79 20 74 68  hen, and only th
a8c0: 65 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  en.            #
a8d0: 20 74 68 65 20 74 63 6c 72 65 61 64 6c 69 6e 65   the tclreadline
a8e0: 5f 63 6f 6d 70 6c 65 74 65 5f 75 6e 6b 6e 6f 77  _complete_unknow
a8f0: 6e 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  n..            #
a900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
a910: 65 61 63 68 20 63 6d 64 20 5b 6c 69 73 74 20 24  each cmd [list $
a920: 61 6c 69 61 73 20 74 63 6c 72 65 61 64 6c 69 6e  alias tclreadlin
a930: 65 5f 63 6f 6d 70 6c 65 74 65 5f 75 6e 6b 6e 6f  e_complete_unkno
a940: 77 6e 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  wn] {.          
a950: 20 20 20 20 20 20 69 66 20 7b 22 22 20 21 3d 20        if {"" != 
a960: 5b 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  [namespace eval 
a970: 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 24  ::tclreadline::$
a980: 7b 6e 61 6d 65 73 70 63 7d 20 5c 0a 20 20 20 20  {namespc} \.    
a990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9a0: 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74             [list
a9b0: 20 69 6e 66 6f 20 70 72 6f 63 73 20 63 6f 6d 70   info procs comp
a9c0: 6c 65 74 65 28 24 63 6d 64 29 5d 5d 7d 20 7b 0a  lete($cmd)]]} {.
a9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9e0: 20 20 20 20 23 20 74 6f 20 62 65 20 6d 6f 72 65      # to be more
a9f0: 20 65 72 72 6f 72 2d 70 72 6f 6f 66 2c 20 77 65   error-proof, we
aa00: 20 63 68 65 63 6b 20 68 65 72 65 2c 0a 20 20 20   check here,.   
aa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa20: 20 23 20 69 66 20 63 6f 6d 70 6c 65 74 65 28 24   # if complete($
aa30: 63 6d 64 29 20 74 61 6b 65 73 20 65 78 61 63 74  cmd) takes exact
aa40: 6c 79 20 35 20 61 72 67 75 6d 65 6e 74 73 2e 0a  ly 5 arguments..
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa60: 20 20 20 20 23 0a 20 20 20 20 20 20 20 20 20 20      #.          
aa70: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 36 20            if {6 
aa80: 21 3d 20 5b 73 65 74 20 61 72 67 75 6d 65 6e 74  != [set argument
aa90: 73 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  s \.            
aaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aab0: 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 5c        [llength \
aac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aae0: 20 20 20 20 20 20 20 20 5b 6e 61 6d 65 73 70 61          [namespa
aaf0: 63 65 20 65 76 61 6c 20 3a 3a 74 63 6c 72 65 61  ce eval ::tclrea
ab00: 64 6c 69 6e 65 3a 3a 24 7b 6e 61 6d 65 73 70 63  dline::${namespc
ab10: 7d 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  } \.            
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab40: 5b 6c 69 73 74 20 69 6e 66 6f 20 61 72 67 73 20  [list info args 
ab50: 63 6f 6d 70 6c 65 74 65 28 24 63 6d 64 29 5d 5d  complete($cmd)]]
ab60: 5d 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ]]} {.          
ab70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
ab80: 72 6f 72 20 22 63 6f 6d 70 6c 65 74 65 28 24 63  ror "complete($c
ab90: 6d 64 29 20 74 61 6b 65 73 20 24 61 72 67 75 6d  md) takes $argum
aba0: 65 6e 74 73 20 61 72 67 75 6d 65 6e 74 73 2c 20  ents arguments, 
abb0: 62 75 74 20 73 68 6f 75 6c 64 20 74 61 6b 65 20  but should take 
abc0: 65 78 61 63 74 6c 79 20 36 22 0a 20 20 20 20 20  exactly 6".     
abd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
abe0: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
abf0: 20 20 20 20 20 20 23 20 72 65 6d 6f 76 65 20 6c        # remove l
ac00: 65 61 64 69 6e 67 20 71 75 6f 74 65 73 0a 20 20  eading quotes.  
ac10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac20: 20 20 23 0a 20 20 20 20 20 20 20 20 20 20 20 20    #.            
ac30: 20 20 20 20 20 20 20 20 73 65 74 20 6d 6f 64 20          set mod 
ac40: 5b 53 74 72 69 70 50 72 65 66 69 78 20 24 70 61  [StripPrefix $pa
ac50: 72 74 5d 0a 0a 20 20 20 20 20 20 20 20 20 20 20  rt]..           
ac60: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
ac70: 74 63 68 20 7b 73 65 74 20 73 63 72 69 70 74 5f  tch {set script_
ac80: 72 65 73 75 6c 74 20 5c 0a 20 20 20 20 20 20 20  result \.       
ac90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6e 61               [na
acb0: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 74  mespace eval ::t
acc0: 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 24 7b 6e 61  clreadline::${na
acd0: 6d 65 73 70 63 7d 20 5c 0a 20 20 20 20 20 20 20  mespc} \.       
ace0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
acf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad00: 20 20 5b 6c 69 73 74 20 63 6f 6d 70 6c 65 74 65    [list complete
ad10: 28 24 63 6d 64 29 20 24 70 61 72 74 20 24 73 74  ($cmd) $part $st
ad20: 61 72 74 20 24 65 6e 64 20 24 6c 69 6e 65 20 24  art $end $line $
ad30: 70 6f 73 20 24 6d 6f 64 5d 5d 7d 20 5c 0a 20 20  pos $mod]]} \.  
ad40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad50: 20 20 20 20 20 20 20 20 20 20 20 3a 3a 74 63 6c             ::tcl
ad60: 72 65 61 64 6c 69 6e 65 3a 3a 65 72 72 6f 72 4d  readline::errorM
ad70: 73 67 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  sg]} {.         
ad80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
ad90: 72 72 6f 72 20 22 65 72 72 6f 72 20 64 75 72 69  rror "error duri
ada0: 6e 67 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66  ng evaluation of
adb0: 20 60 63 6f 6d 70 6c 65 74 65 28 24 63 6d 64 29   `complete($cmd)
adc0: 27 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  '".             
add0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
ade0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
adf0: 7b 21 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  {![string length
ae00: 20 24 73 63 72 69 70 74 5f 72 65 73 75 6c 74 5d   $script_result]
ae10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ae20: 20 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20               && 
ae30: 22 74 63 6c 72 65 61 64 6c 69 6e 65 5f 63 6f 6d  "tclreadline_com
ae40: 70 6c 65 74 65 5f 75 6e 6b 6e 6f 77 6e 22 20 3d  plete_unknown" =
ae50: 3d 20 24 63 6d 64 7d 20 7b 0a 20 20 20 20 20 20  = $cmd} {.      
ae60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae70: 20 20 23 20 61 73 20 77 65 27 72 65 20 68 65 72    # as we're her
ae80: 65 2c 20 74 68 65 20 74 63 6c 72 65 61 64 6c 69  e, the tclreadli
ae90: 6e 65 5f 63 6f 6d 70 6c 65 74 65 5f 75 6e 6b 6e  ne_complete_unkn
aea0: 6f 77 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  own.            
aeb0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 72 65              # re
aec0: 74 75 72 6e 65 64 20 61 6e 20 65 6d 70 74 79 20  turned an empty 
aed0: 73 74 72 69 6e 67 2e 20 46 61 6c 6c 20 74 68 72  string. Fall thr
aee0: 75 20 61 6e 64 20 74 72 79 0a 20 20 20 20 20 20  u and try.      
aef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af00: 20 20 23 20 66 75 72 74 68 65 72 20 66 61 6c 6c    # further fall
af10: 62 61 63 6b 20 63 6f 6d 70 6c 65 74 65 72 73 2e  back completers.
af20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
af30: 20 20 20 20 20 20 20 20 20 23 0a 20 20 20 20 20           #.     
af40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
af50: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
af60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af70: 23 20 72 65 74 75 72 6e 20 61 6c 73 6f 20 65 6d  # return also em
af80: 70 74 79 20 73 74 72 69 6e 67 73 2c 20 69 66 0a  pty strings, if.
af90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afa0: 20 20 20 20 20 20 20 20 23 20 74 68 65 79 27 72          # they'r
afb0: 65 20 66 72 6f 6d 20 61 20 73 70 65 63 69 66 69  e from a specifi
afc0: 63 20 63 6f 6d 70 6c 65 74 65 72 2e 0a 20 20 20  c completer..   
afd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afe0: 20 20 20 20 20 23 0a 20 20 20 20 20 20 20 20 20       #.         
aff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
b000: 72 61 63 65 54 65 78 74 20 73 63 72 69 70 74 5f  raceText script_
b010: 72 65 73 75 6c 74 3d 7c 24 73 63 72 69 70 74 5f  result=|$script_
b020: 72 65 73 75 6c 74 7c 0a 20 20 20 20 20 20 20 20  result|.        
b030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b040: 72 65 74 75 72 6e 20 24 73 63 72 69 70 74 5f 72  return $script_r
b050: 65 73 75 6c 74 0a 20 20 20 20 20 20 20 20 20 20  esult.          
b060: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
b070: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
b080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                # 
b090: 73 65 74 20 6e 61 6d 65 73 70 63 20 22 22 3b 20  set namespc ""; 
b0a0: 23 20 6e 6f 20 71 75 61 6c 69 66 69 65 72 73 20  # no qualifiers 
b0b0: 66 6f 72 20 74 63 6c 72 65 61 64 6c 69 6e 65 5f  for tclreadline_
b0c0: 63 6f 6d 70 6c 65 74 65 5f 75 6e 6b 6e 6f 77 6e  complete_unknown
b0d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a  .            }..
b0e0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 61 73              # as
b0f0: 20 77 65 27 76 65 20 72 65 61 63 68 65 64 20 68   we've reached h
b100: 65 72 65 20 6e 6f 20 76 61 6c 69 64 20 73 70 65  ere no valid spe
b110: 63 69 66 69 63 20 63 6f 6d 70 6c 65 74 65 72 0a  cific completer.
b120: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 77 61              # wa
b130: 73 20 66 6f 75 6e 64 2e 20 43 68 65 63 6b 2c 20  s found. Check, 
b140: 69 66 20 69 74 27 73 20 61 20 70 72 6f 63 20 61  if it's a proc a
b150: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 0a 20 20  nd return the.  
b160: 20 20 20 20 20 20 20 20 20 20 23 20 61 72 67 75            # argu
b170: 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 20 20 20  ments..         
b180: 20 20 20 23 0a 20 20 20 20 20 20 20 20 20 20 20     #.           
b190: 20 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6c 65   if {![string le
b1a0: 6e 67 74 68 20 24 6e 61 6d 65 73 70 63 5d 7d 20  ngth $namespc]} 
b1b0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
b1c0: 20 20 73 65 74 20 6e 61 6d 65 73 70 63 20 3a 3a    set namespc ::
b1d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
b1e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
b1f0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b 75  string length [u
b200: 70 6c 65 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76  plevel [info lev
b210: 65 6c 5d 20 5c 0a 20 20 20 20 20 20 20 20 20 20  el] \.          
b220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b230: 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 73 70            namesp
b240: 61 63 65 20 65 76 61 6c 20 24 6e 61 6d 65 73 70  ace eval $namesp
b250: 63 20 5b 6c 69 73 74 20 3a 3a 69 6e 66 6f 20 70  c [list ::info p
b260: 72 6f 63 20 24 61 6c 69 61 73 5d 5d 5d 7d 20 7b  roc $alias]]]} {
b270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b280: 20 69 66 20 21 5b 73 74 72 69 6e 67 20 6c 65 6e   if ![string len
b290: 67 74 68 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  gth [string trim
b2a0: 20 24 70 61 72 74 5d 5d 20 7b 0a 20 20 20 20 20   $part]] {.     
b2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
b2c0: 65 74 20 61 72 67 73 20 5b 75 70 6c 65 76 65 6c  et args [uplevel
b2d0: 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 5c 0a   [info level] \.
b2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b300: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c    namespace eval
b310: 20 24 6e 61 6d 65 73 70 63 20 5b 6c 69 73 74 20   $namespc [list 
b320: 69 6e 66 6f 20 61 72 67 73 20 24 61 6c 69 61 73  info args $alias
b330: 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]].             
b340: 20 20 20 20 20 20 20 73 65 74 20 61 72 67 20 5b         set arg [
b350: 6c 69 6e 64 65 78 20 24 61 72 67 73 20 5b 65 78  lindex $args [ex
b360: 70 72 20 7b 24 70 6f 73 20 2d 20 31 7d 5d 5d 0a  pr {$pos - 1}]].
b370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b380: 20 20 20 20 69 66 20 7b 22 22 20 21 3d 20 24 61      if {"" != $a
b390: 72 67 20 26 26 20 22 61 72 67 73 22 20 21 3d 20  rg && "args" != 
b3a0: 24 61 72 67 7d 20 7b 0a 20 20 20 20 20 20 20 20  $arg} {.        
b3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3c0: 69 66 20 7b 5b 75 70 6c 65 76 65 6c 20 5b 69 6e  if {[uplevel [in
b3d0: 66 6f 20 6c 65 76 65 6c 5d 20 6e 61 6d 65 73 70  fo level] namesp
b3e0: 61 63 65 20 65 76 61 6c 20 5c 0a 20 20 20 20 20  ace eval \.     
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b400: 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d              $nam
b410: 65 73 70 63 20 5b 6c 69 73 74 20 69 6e 66 6f 20  espc [list info 
b420: 64 65 66 61 75 6c 74 20 24 61 6c 69 61 73 20 24  default $alias $
b430: 61 72 67 20 6a 75 6e 6b 5d 5d 7d 20 7b 0a 20 20  arg junk]]} {.  
b440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b450: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
b460: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
b470: 24 61 72 67 3f 5d 0a 20 20 20 20 20 20 20 20 20  $arg?].         
b480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
b490: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
b4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4b0: 20 20 20 20 72 65 74 75 72 6e 20 5b 44 69 73 70      return [Disp
b4c0: 6c 61 79 48 69 6e 74 73 20 3c 24 61 72 67 3e 5d  layHints <$arg>]
b4d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b4e0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
b4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
b500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b510: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
b520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b530: 74 75 72 6e 20 22 22 3b 20 23 20 65 6e 61 62 6c  turn ""; # enabl
b540: 65 20 66 69 6c 65 20 6e 61 6d 65 20 63 6f 6d 70  e file name comp
b550: 6c 65 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20  letion.         
b560: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
b570: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
b580: 20 20 20 20 23 20 63 68 65 63 6b 20 69 66 20 74      # check if t
b590: 68 65 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e  he command is an
b5a0: 20 6f 62 6a 65 63 74 20 6f 66 20 6b 6e 6f 77 6e   object of known
b5b0: 20 63 6c 61 73 73 2e 0a 20 20 20 20 20 20 20 20   class..        
b5c0: 20 20 20 20 23 0a 20 20 20 20 20 20 20 20 20 20      #.          
b5d0: 20 20 69 66 20 5b 4f 62 6a 65 63 74 43 6c 61 73    if [ObjectClas
b5e0: 73 43 6f 6d 70 6c 65 74 65 72 20 24 70 61 72 74  sCompleter $part
b5f0: 20 24 73 74 61 72 74 20 24 65 6e 64 20 24 6c 69   $start $end $li
b600: 6e 65 20 24 70 6f 73 20 72 65 73 5d 20 7b 0a 20  ne $pos res] {. 
b610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
b620: 65 74 75 72 6e 20 24 72 65 73 0a 20 20 20 20 20  eturn $res.     
b630: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
b640: 20 20 20 20 20 20 23 20 4f 6b 2c 20 61 6c 73 6f        # Ok, also
b650: 20 6e 6f 20 70 72 6f 63 2e 20 54 72 79 20 74 6f   no proc. Try to
b660: 20 64 6f 20 74 68 65 20 73 61 6d 65 20 61 73 20   do the same as 
b670: 66 6f 72 20 77 69 64 67 65 74 73 20 6e 6f 77 3a  for widgets now:
b680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 74  .            # t
b690: 72 79 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 66  ry to complete f
b6a0: 72 6f 6d 20 74 68 65 20 6f 70 74 69 6f 6e 20 74  rom the option t
b6b0: 61 62 6c 65 20 69 66 20 74 68 65 20 73 75 62 63  able if the subc
b6c0: 6f 6d 6d 61 6e 64 0a 20 20 20 20 20 20 20 20 20  ommand.         
b6d0: 20 20 20 23 20 69 73 20 60 63 6f 6e 66 69 67 75     # is `configu
b6e0: 72 65 27 20 6f 72 20 60 63 67 65 74 27 20 6f 74  re' or `cget' ot
b6f0: 68 65 72 77 69 73 65 20 74 72 79 20 74 6f 20 67  herwise try to g
b700: 65 74 20 66 75 72 74 68 65 72 0a 20 20 20 20 20  et further.     
b710: 20 20 20 20 20 20 20 23 20 73 75 62 63 6f 6d 6d         # subcomm
b720: 61 6e 64 73 2e 0a 20 20 20 20 20 20 20 20 20 20  ands..          
b730: 20 20 23 0a 20 20 20 20 20 20 20 20 20 20 20 20    #.            
b740: 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
b750: 46 72 6f 6d 4f 70 74 69 6f 6e 73 4f 72 53 75 62  FromOptionsOrSub
b760: 43 6d 64 73 20 5c 0a 20 20 20 20 20 20 20 20 20  Cmds \.         
b770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $
b780: 70 61 72 74 20 24 73 74 61 72 74 20 24 65 6e 64  part $start $end
b790: 20 24 6c 69 6e 65 20 24 70 6f 73 5d 0a 20 20 20   $line $pos].   
b7a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 65       }.        e
b7b0: 72 72 6f 72 20 22 7b 4e 4f 54 52 45 41 43 48 45  rror "{NOTREACHE
b7c0: 44 20 28 74 68 69 73 20 69 73 20 70 72 6f 62 61  D (this is proba
b7d0: 62 6c 79 20 61 6e 20 65 72 72 6f 72 29 7d 22 0a  bly an error)}".
b7e0: 20 20 20 20 7d 0a 0a 0a 20 20 20 20 23 20 65 78      }...    # ex
b7f0: 70 6c 69 63 69 74 20 63 6f 6d 6d 61 6e 64 20 63  plicit command c
b800: 6f 6d 70 6c 65 74 65 72 73 0a 20 20 20 20 23 0a  ompleters.    #.
b810: 0a 20 20 20 20 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  .    # ---------
b820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 20  ------------.   
b840: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
b850: 20 20 20 54 43 4c 0a 20 20 20 20 23 20 2d 2d 2d     TCL.    # ---
b860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b870: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b880: 2d 2d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d  --..    proc com
b890: 70 6c 65 74 65 28 61 66 74 65 72 29 20 7b 74 65  plete(after) {te
b8a0: 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
b8b0: 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20  e pos mod} {.   
b8c0: 20 20 20 20 20 73 65 74 20 73 75 62 20 5b 4c 69       set sub [Li
b8d0: 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a 20 20  ndex $line 1].  
b8e0: 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
b8f0: 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20  $pos {.         
b900: 20 20 20 31 20 7b 0a 20 20 20 20 20 20 20 20 20     1 {.         
b910: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43         return [C
b920: 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
b930: 24 74 65 78 74 20 7b 3c 6d 73 3e 20 63 61 6e 63  $text {<ms> canc
b940: 65 6c 20 69 64 6c 65 20 69 6e 66 6f 7d 5d 0a 20  el idle info}]. 
b950: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
b960: 20 20 20 20 20 20 20 20 20 32 20 7b 0a 20 20 20           2 {.   
b970: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69               swi
b980: 74 63 68 20 2d 2d 20 24 73 75 62 20 7b 0a 20 20  tch -- $sub {.  
b990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9a0: 20 20 63 61 6e 63 65 6c 20 20 7b 20 72 65 74 75    cancel  { retu
b9b0: 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
b9c0: 4c 69 73 74 20 24 74 65 78 74 20 22 3c 73 63 72  List $text "<scr
b9d0: 69 70 74 3e 20 5b 61 66 74 65 72 20 69 6e 66 6f  ipt> [after info
b9e0: 5d 22 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  ]"] }.          
b9f0: 20 20 20 20 20 20 20 20 20 20 69 64 6c 65 20 20            idle  
ba00: 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70    { return [Disp
ba10: 6c 61 79 48 69 6e 74 73 20 3c 73 63 72 69 70 74  layHints <script
ba20: 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  >] }.           
ba30: 20 20 20 20 20 20 20 20 20 69 6e 66 6f 20 20 20           info   
ba40: 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c   { return [Compl
ba50: 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  eteFromList $tex
ba60: 74 20 5b 61 66 74 65 72 20 69 6e 66 6f 5d 5d 20  t [after info]] 
ba70: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
ba80: 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 20        default { 
ba90: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
baa0: 69 6e 74 73 20 3f 73 63 72 69 70 74 3f 5d 20 7d  ints ?script?] }
bab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bac0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d   }.            }
bad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66  .            def
bae0: 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 20 20  ault {.         
baf0: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
bb00: 20 24 73 75 62 20 7b 0a 20 20 20 20 20 20 20 20   $sub {.        
bb10: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 66 6f              info
bb20: 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69      { return [Di
bb30: 73 70 6c 61 79 48 69 6e 74 73 20 7b 7d 5d 20 7d  splayHints {}] }
bb40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bb50: 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 20 72       default { r
bb60: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
bb70: 6e 74 73 20 3f 73 63 72 69 70 74 3f 5d 20 7d 0a  nts ?script?] }.
bb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb90: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
bba0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
bbb0: 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20 20    return "".    
bbc0: 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70  }..    proc comp
bbd0: 6c 65 74 65 28 61 70 70 65 6e 64 29 20 7b 74 65  lete(append) {te
bbe0: 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
bbf0: 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20  e pos mod} {.   
bc00: 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24       switch -- $
bc10: 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20  pos {.          
bc20: 20 20 31 20 20 20 20 20 20 20 7b 20 72 65 74 75    1       { retu
bc30: 72 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f  rn [VarCompletio
bc40: 6e 20 24 74 65 78 74 5d 20 7d 0a 20 20 20 20 20  n $text] }.     
bc50: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b         default {
bc60: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
bc70: 48 69 6e 74 73 20 3f 76 61 6c 75 65 3f 5d 20 7d  Hints ?value?] }
bc80: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
bc90: 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20     return "".   
bca0: 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d   }..    proc com
bcb0: 70 6c 65 74 65 28 61 72 72 61 79 29 20 7b 74 65  plete(array) {te
bcc0: 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
bcd0: 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20  e pos mod} {.   
bce0: 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24       switch -- $
bcf0: 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20  pos {.          
bd00: 20 20 31 20 7b 0a 20 20 20 20 20 20 20 20 20 20    1 {.          
bd10: 20 20 20 20 20 20 73 65 74 20 63 6d 64 73 20 7b        set cmds {
bd20: 61 6e 79 6d 6f 72 65 20 64 6f 6e 65 73 65 61 72  anymore donesear
bd30: 63 68 20 65 78 69 73 74 73 20 67 65 74 20 6e 61  ch exists get na
bd40: 6d 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20  mes.            
bd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
bd60: 78 74 65 6c 65 6d 65 6e 74 20 73 65 74 20 73 69  xtelement set si
bd70: 7a 65 20 73 74 61 72 74 73 65 61 72 63 68 7d 0a  ze startsearch}.
bd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd90: 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
bda0: 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 24  FromList $text $
bdb0: 63 6d 64 73 5d 0a 20 20 20 20 20 20 20 20 20 20  cmds].          
bdc0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
bdd0: 32 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  2 {.            
bde0: 20 20 20 20 73 65 74 20 6d 61 74 63 68 65 73 20      set matches 
bdf0: 22 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  "".             
be00: 20 20 20 23 20 73 65 74 20 76 61 72 73 20 5b 75     # set vars [u
be10: 70 6c 65 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76  plevel [info lev
be20: 65 6c 5d 20 69 6e 66 6f 20 76 61 72 73 20 24 7b  el] info vars ${
be30: 6d 6f 64 7d 2a 5d 0a 20 20 20 20 20 20 20 20 20  mod}*].         
be40: 20 20 20 20 20 20 20 23 0a 20 20 20 20 20 20 20         #.       
be50: 20 20 20 20 20 20 20 20 20 23 20 62 65 74 74 65           # bette
be60: 72 3a 20 74 68 69 73 20 64 69 73 70 6c 61 79 73  r: this displays
be70: 20 61 20 6c 69 73 74 20 6f 66 20 61 72 72 61 79   a list of array
be80: 20 6e 61 6d 65 73 20 69 66 20 74 68 65 0a 20 20   names if the.  
be90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                # 
bea0: 75 73 65 72 20 69 6e 74 65 72 73 20 77 69 74 68  user inters with
beb0: 20 73 6f 6d 65 74 68 69 6e 67 20 77 68 69 63 68   something which
bec0: 20 63 61 6e 6e 6f 74 20 62 65 20 6d 61 74 63 68   cannot be match
bed0: 65 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
bee0: 20 20 20 20 23 20 54 68 65 20 6d 61 74 63 68 69      # The matchi
bef0: 6e 67 20 61 67 61 69 6e 73 74 20 60 74 65 78 74  ng against `text
bf00: 27 20 69 73 20 64 6f 6e 65 20 62 79 20 43 6f 6d  ' is done by Com
bf10: 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 2e 0a 20  pleteFromList.. 
bf20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
bf30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bf40: 20 73 65 74 20 76 61 72 73 20 5b 75 70 6c 65 76   set vars [uplev
bf50: 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20  el [info level] 
bf60: 69 6e 66 6f 20 76 61 72 73 5d 0a 20 20 20 20 20  info vars].     
bf70: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
bf80: 63 68 20 76 61 72 20 24 76 61 72 73 20 7b 0a 20  ch var $vars {. 
bf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfa0: 20 20 20 69 66 20 7b 5b 75 70 6c 65 76 65 6c 20     if {[uplevel 
bfb0: 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 61 72 72  [info level] arr
bfc0: 61 79 20 65 78 69 73 74 73 20 24 76 61 72 5d 7d  ay exists $var]}
bfd0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
bfe0: 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65             lappe
bff0: 6e 64 20 6d 61 74 63 68 65 73 20 24 76 61 72 0a  nd matches $var.
c000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c010: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
c020: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
c030: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
c040: 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
c050: 20 24 74 65 78 74 20 24 6d 61 74 63 68 65 73 5d   $text $matches]
c060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
c070: 20 20 20 20 20 20 20 20 20 20 20 33 20 7b 0a 20             3 {. 
c080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
c090: 65 74 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24  et cmd [Lindex $
c0a0: 6c 69 6e 65 20 31 5d 0a 20 20 20 20 20 20 20 20  line 1].        
c0b0: 20 20 20 20 20 20 20 20 73 65 74 20 61 72 72 61          set arra
c0c0: 79 5f 6e 61 6d 65 20 5b 4c 69 6e 64 65 78 20 24  y_name [Lindex $
c0d0: 6c 69 6e 65 20 32 5d 0a 20 20 20 20 20 20 20 20  line 2].        
c0e0: 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d          switch -
c0f0: 2d 20 24 63 6d 64 20 7b 0a 20 20 20 20 20 20 20  - $cmd {.       
c100: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
c110: 20 20 20 20 20 20 20 20 20 2d 0a 20 20 20 20 20           -.     
c120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
c130: 61 6d 65 73 20 20 20 20 20 20 20 7b 0a 20 20 20  ames       {.   
c140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c150: 20 20 20 20 20 73 65 74 20 70 61 74 74 65 72 6e       set pattern
c160: 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 33   [Lindex $line 3
c170: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
c180: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 61            set ma
c190: 74 63 68 65 73 20 5b 75 70 6c 65 76 65 6c 20 5b  tches [uplevel [
c1a0: 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 5c 0a 20 20  info level] \.  
c1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1d0: 20 20 20 20 20 20 20 61 72 72 61 79 20 6e 61 6d         array nam
c1e0: 65 73 20 24 61 72 72 61 79 5f 6e 61 6d 65 20 24  es $array_name $
c1f0: 7b 70 61 74 74 65 72 6e 7d 2a 5d 0a 20 20 20 20  {pattern}*].    
c200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c210: 20 20 20 20 69 66 20 7b 21 5b 6c 6c 65 6e 67 74      if {![llengt
c220: 68 20 24 6d 61 74 63 68 65 73 5d 7d 20 7b 0a 20  h $matches]} {. 
c230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c240: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
c250: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
c260: 3f 70 61 74 74 65 72 6e 3f 5d 0a 20 20 20 20 20  ?pattern?].     
c270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c280: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
c290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
c2b0: 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
c2c0: 20 24 74 65 78 74 20 24 6d 61 74 63 68 65 73 5d   $text $matches]
c2d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c2e0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
c2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
c300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c310: 20 20 20 20 20 61 6e 79 6d 6f 72 65 20 20 20 20       anymore    
c320: 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   -.             
c330: 20 20 20 20 20 20 20 64 6f 6e 65 73 65 61 72 63         donesearc
c340: 68 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20  h  -.           
c350: 20 20 20 20 20 20 20 20 20 6e 65 78 74 65 6c 65           nextele
c360: 6d 65 6e 74 20 7b 20 72 65 74 75 72 6e 20 5b 44  ment { return [D
c370: 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 65 61  isplayHints <sea
c380: 72 63 68 49 64 3e 5d 20 7d 0a 20 20 20 20 20 20  rchId>] }.      
c390: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
c3a0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
c3b0: 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75    }.        retu
c3c0: 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20  rn "".    }..   
c3d0: 20 23 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65   # proc complete
c3e0: 28 62 67 65 72 72 6f 72 29 20 7b 74 65 78 74 20  (bgerror) {text 
c3f0: 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
c400: 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 23 20  os mod} {.    # 
c410: 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70  }..    proc comp
c420: 6c 65 74 65 28 62 69 6e 61 72 79 29 20 7b 74 65  lete(binary) {te
c430: 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
c440: 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20  e pos mod} {.   
c450: 20 20 20 20 20 73 65 74 20 63 6d 64 20 5b 4c 69       set cmd [Li
c460: 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a 20 20  ndex $line 1].  
c470: 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
c480: 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20  $pos {.         
c490: 20 20 20 31 20 7b 0a 20 20 20 20 20 20 20 20 20     1 {.         
c4a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43         return [C
c4b0: 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
c4c0: 24 74 65 78 74 20 7b 66 6f 72 6d 61 74 20 73 63  $text {format sc
c4d0: 61 6e 7d 5d 0a 20 20 20 20 20 20 20 20 20 20 20  an}].           
c4e0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32   }.            2
c4f0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
c500: 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 63 6d     switch -- $cm
c510: 64 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  d {.            
c520: 20 20 20 20 20 20 20 20 66 6f 72 6d 61 74 20 7b          format {
c530: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
c540: 48 69 6e 74 73 20 3c 66 6f 72 6d 61 74 53 74 72  Hints <formatStr
c550: 69 6e 67 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20  ing>] }.        
c560: 20 20 20 20 20 20 20 20 20 20 20 20 73 63 61 6e              scan
c570: 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73     { return [Dis
c580: 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 72 69 6e  playHints <strin
c590: 67 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  g>] }.          
c5a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
c5b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
c5c0: 20 20 33 20 7b 0a 20 20 20 20 20 20 20 20 20 20    3 {.          
c5d0: 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
c5e0: 24 63 6d 64 20 7b 0a 20 20 20 20 20 20 20 20 20  $cmd {.         
c5f0: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 6d 61             forma
c600: 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  t { return [Disp
c610: 6c 61 79 48 69 6e 74 73 20 3f 61 72 67 3f 5d 20  layHints ?arg?] 
c620: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
c630: 20 20 20 20 20 20 73 63 61 6e 20 20 20 7b 20 72        scan   { r
c640: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
c650: 6e 74 73 20 3c 66 6f 72 6d 61 74 53 74 72 69 6e  nts <formatStrin
c660: 67 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  g>] }.          
c670: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
c680: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
c690: 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20    default {.    
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74              swit
c6b0: 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 20 20 20  ch -- $cmd {.   
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6d0: 20 66 6f 72 6d 61 74 20 7b 20 72 65 74 75 72 6e   format { return
c6e0: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
c6f0: 61 72 67 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20  arg?] }.        
c700: 20 20 20 20 20 20 20 20 20 20 20 20 73 63 61 6e              scan
c710: 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73     { return [Dis
c720: 70 6c 61 79 48 69 6e 74 73 20 3f 76 61 72 4e 61  playHints ?varNa
c730: 6d 65 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  me?] }.         
c740: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
c750: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
c760: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
c770: 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20  "".    }..    # 
c780: 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 62 72  proc complete(br
c790: 65 61 6b 29 20 7b 74 65 78 74 20 73 74 61 72 74  eak) {text start
c7a0: 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
c7b0: 64 7d 20 7b 0a 20 20 20 20 23 20 7d 0a 0a 20 20  d} {.    # }..  
c7c0: 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28    proc complete(
c7d0: 63 61 74 63 68 29 20 7b 74 65 78 74 20 73 74 61  catch) {text sta
c7e0: 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
c7f0: 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  mod} {.        s
c800: 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
c810: 20 20 20 20 20 20 20 20 20 20 20 20 31 20 7b 20              1 { 
c820: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
c830: 69 6e 74 73 20 3c 73 63 72 69 70 74 3e 5d 20 7d  ints <script>] }
c840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 20 7b  .            2 {
c850: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
c860: 48 69 6e 74 73 20 3f 76 61 72 4e 61 6d 65 3f 5d  Hints ?varName?]
c870: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
c880: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20       return "". 
c890: 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63     }..    proc c
c8a0: 6f 6d 70 6c 65 74 65 28 63 64 29 20 7b 74 65 78  omplete(cd) {tex
c8b0: 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
c8c0: 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20   pos mod} {.    
c8d0: 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20      return "".  
c8e0: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f    }..    proc co
c8f0: 6d 70 6c 65 74 65 28 63 6c 6f 63 6b 29 20 7b 74  mplete(clock) {t
c900: 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
c910: 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20  ne pos mod} {.  
c920: 20 20 20 20 20 20 73 65 74 20 63 6d 64 20 5b 4c        set cmd [L
c930: 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a 20  index $line 1]. 
c940: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
c950: 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20   $pos {.        
c960: 20 20 20 20 31 20 7b 0a 20 20 20 20 20 20 20 20      1 {.        
c970: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
c980: 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
c990: 20 24 74 65 78 74 20 7b 63 6c 69 63 6b 73 20 66   $text {clicks f
c9a0: 6f 72 6d 61 74 20 73 63 61 6e 20 73 65 63 6f 6e  ormat scan secon
c9b0: 64 73 7d 5d 0a 20 20 20 20 20 20 20 20 20 20 20  ds}].           
c9c0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32   }.            2
c9d0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
c9e0: 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 63 6d     switch -- $cm
c9f0: 64 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  d {.            
ca00: 20 20 20 20 20 20 20 20 66 6f 72 6d 61 74 20 20          format  
ca10: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
ca20: 79 48 69 6e 74 73 20 3c 63 6c 6f 63 6b 56 61 6c  yHints <clockVal
ca30: 75 65 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  ue>] }.         
ca40: 20 20 20 20 20 20 20 20 20 20 20 73 63 61 6e 20             scan 
ca50: 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73     { return [Dis
ca60: 70 6c 61 79 48 69 6e 74 73 20 3c 64 61 74 65 53  playHints <dateS
ca70: 74 72 69 6e 67 3e 5d 20 7d 0a 20 20 20 20 20 20  tring>] }.      
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c                cl
ca90: 69 63 6b 73 20 20 2d 0a 20 20 20 20 20 20 20 20  icks  -.        
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 63 6f              seco
cab0: 6e 64 73 20 7b 7d 0a 20 20 20 20 20 20 20 20 20  nds {}.         
cac0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
cad0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
cae0: 20 20 20 33 20 2d 0a 20 20 20 20 20 20 20 20 20     3 -.         
caf0: 20 20 20 35 20 7b 0a 20 20 20 20 20 20 20 20 20     5 {.         
cb00: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
cb10: 20 24 63 6d 64 20 7b 0a 20 20 20 20 20 20 20 20   $cmd {.        
cb20: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 6d              form
cb30: 61 74 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20  at  {.          
cb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
cb50: 74 20 73 75 62 63 6d 64 73 20 5b 52 65 6d 6f 76  t subcmds [Remov
cb60: 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69  eUsedOptions $li
cb70: 6e 65 20 7b 2d 66 6f 72 6d 61 74 20 2d 67 6d 74  ne {-format -gmt
cb80: 7d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }].             
cb90: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
cba0: 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24  n [TryFromList $
cbb0: 74 65 78 74 20 24 73 75 62 63 6d 64 73 5d 0a 20  text $subcmds]. 
cbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbd0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
cbe0: 20 20 20 20 20 20 20 20 20 73 63 61 6e 20 20 20           scan   
cbf0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
cc00: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73             set s
cc10: 75 62 63 6d 64 73 20 5b 52 65 6d 6f 76 65 55 73  ubcmds [RemoveUs
cc20: 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20  edOptions $line 
cc30: 7b 2d 62 61 73 65 20 2d 67 6d 74 7d 5d 0a 20 20  {-base -gmt}].  
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 54 72        return [Tr
cc60: 79 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  yFromList $text 
cc70: 24 73 75 62 63 6d 64 73 5d 0a 20 20 20 20 20 20  $subcmds].      
cc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
cc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cca0: 20 20 20 20 63 6c 69 63 6b 73 20 20 2d 0a 20 20      clicks  -.  
ccb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccc0: 20 20 73 65 63 6f 6e 64 73 20 7b 7d 0a 20 20 20    seconds {}.   
ccd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
cce0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
ccf0: 20 20 20 20 20 20 20 20 20 34 20 2d 0a 20 20 20           4 -.   
cd00: 20 20 20 20 20 20 20 20 20 36 20 7b 0a 20 20 20           6 {.   
cd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
cd20: 20 73 75 62 20 5b 4c 69 6e 64 65 78 20 24 6c 69   sub [Lindex $li
cd30: 6e 65 20 5b 65 78 70 72 20 7b 24 70 6f 73 20 2d  ne [expr {$pos -
cd40: 20 31 7d 5d 5d 0a 20 20 20 20 20 20 20 20 20 20   1}]].          
cd50: 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
cd60: 24 63 6d 64 20 7b 0a 20 20 20 20 20 20 20 20 20  $cmd {.         
cd70: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 6d 61             forma
cd80: 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  t {.            
cd90: 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74              swit
cda0: 63 68 20 2d 2d 20 24 73 75 62 20 7b 0a 20 20 20  ch -- $sub {.   
cdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdc0: 20 20 20 20 20 20 20 20 20 2d 66 6f 72 6d 61 74           -format
cdd0: 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
cde0: 61 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e  ayHints <string>
cdf0: 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
ce00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce10: 2d 67 6d 74 20 20 20 20 7b 20 72 65 74 75 72 6e  -gmt    { return
ce20: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
ce30: 62 6f 6f 6c 65 61 6e 3e 5d 20 7d 0a 20 20 20 20  boolean>] }.    
ce40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce50: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
ce60: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
ce70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce80: 73 63 61 6e 20 7b 0a 20 20 20 20 20 20 20 20 20  scan {.         
ce90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
cea0: 77 69 74 63 68 20 2d 2d 20 24 73 75 62 20 7b 0a  witch -- $sub {.
ceb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cec0: 20 20 20 20 20 20 20 20 20 20 20 20 2d 62 61 73              -bas
ced0: 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  e { return [Disp
cee0: 6c 61 79 48 69 6e 74 73 20 3c 63 6c 6f 63 6b 56  layHints <clockV
cef0: 61 6c 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  al>] }.         
cf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf10: 20 20 20 2d 67 6d 74 20 20 7b 20 72 65 74 75 72     -gmt  { retur
cf20: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
cf30: 3c 62 6f 6f 6c 65 61 6e 3e 5d 20 7d 0a 20 20 20  <boolean>] }.   
cf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf50: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
cf60: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
cf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf80: 20 63 6c 69 63 6b 73 20 20 2d 0a 20 20 20 20 20   clicks  -.     
cf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
cfa0: 65 63 6f 6e 64 73 20 7b 7d 0a 20 20 20 20 20 20  econds {}.      
cfb0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
cfc0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
cfd0: 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75    }.        retu
cfe0: 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20  rn "".    }..   
cff0: 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 63   proc complete(c
d000: 6c 6f 73 65 29 20 7b 74 65 78 74 20 73 74 61 72  lose) {text star
d010: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
d020: 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 77  od} {.        sw
d030: 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20  itch -- $pos {. 
d040: 20 20 20 20 20 20 20 20 20 20 20 31 20 7b 20 72             1 { r
d050: 65 74 75 72 6e 20 5b 43 68 61 6e 6e 65 6c 49 64  eturn [ChannelId
d060: 20 24 74 65 78 74 5d 20 7d 0a 20 20 20 20 20 20   $text] }.      
d070: 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75    }.        retu
d080: 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20  rn "".    }..   
d090: 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 63   proc complete(c
d0a0: 6f 6e 63 61 74 29 20 7b 74 65 78 74 20 73 74 61  oncat) {text sta
d0b0: 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
d0c0: 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 72  mod} {.        r
d0d0: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
d0e0: 6e 74 73 20 3f 61 72 67 3f 5d 0a 20 20 20 20 7d  nts ?arg?].    }
d0f0: 0a 0a 20 20 20 20 23 20 70 72 6f 63 20 63 6f 6d  ..    # proc com
d100: 70 6c 65 74 65 28 63 6f 6e 74 69 6e 75 65 29 20  plete(continue) 
d110: 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
d120: 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
d130: 20 20 20 20 23 20 7d 0a 0a 20 20 20 20 23 20 70      # }..    # p
d140: 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 64 64 65  roc complete(dde
d150: 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
d160: 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
d170: 7b 0a 20 20 20 20 23 20 20 20 20 20 57 65 27 72  {.    #     We'r
d180: 65 20 6e 6f 74 20 6f 6e 20 77 69 6e 64 6f 7a 65  e not on windoze
d190: 20 68 65 72 65 20 2e 2e 2e 0a 20 20 20 20 23 20   here ....    # 
d1a0: 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70  }..    proc comp
d1b0: 6c 65 74 65 28 65 6e 63 6f 64 69 6e 67 29 20 7b  lete(encoding) {
d1c0: 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
d1d0: 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20  ine pos mod} {. 
d1e0: 20 20 20 20 20 20 20 73 65 74 20 63 6d 64 20 5b         set cmd [
d1f0: 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a  Lindex $line 1].
d200: 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d          switch -
d210: 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20  - $pos {.       
d220: 20 20 20 20 20 31 20 7b 0a 20 20 20 20 20 20 20       1 {.       
d230: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
d240: 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
d250: 74 20 24 74 65 78 74 20 7b 63 6f 6e 76 65 72 74  t $text {convert
d260: 66 72 6f 6d 20 63 6f 6e 76 65 72 74 74 6f 20 6e  from convertto n
d270: 61 6d 65 73 20 73 79 73 74 65 6d 7d 5d 0a 20 20  ames system}].  
d280: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
d290: 20 20 20 20 20 20 20 20 32 20 7b 0a 20 20 20 20          2 {.    
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74              swit
d2b0: 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 20 20 20  ch -- $cmd {.   
d2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2d0: 20 63 6f 6e 76 65 72 74 66 72 6f 6d 20 2d 0a 20   convertfrom -. 
d2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2f0: 20 20 20 63 6f 6e 76 65 72 74 74 6f 20 20 20 2d     convertto   -
d300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d310: 20 20 20 20 20 73 79 73 74 65 6d 20 20 20 20 20       system     
d320: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
d330: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
d340: 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
d350: 69 73 74 20 24 74 65 78 74 20 5b 65 6e 63 6f 64  ist $text [encod
d360: 69 6e 67 20 6e 61 6d 65 73 5d 5d 0a 20 20 20 20  ing names]].    
d370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d380: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
d390: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
d3a0: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 33 20  }.            3 
d3b0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
d3c0: 20 20 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64    switch -- $cmd
d3d0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
d3e0: 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 66 72         convertfr
d3f0: 6f 6d 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  om { return [Dis
d400: 70 6c 61 79 48 69 6e 74 73 20 3c 64 61 74 61 3e  playHints <data>
d410: 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
d420: 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 74          convertt
d430: 6f 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  o   { return [Di
d440: 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 72 69  splayHints <stri
d450: 6e 67 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  ng>] }.         
d460: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
d470: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
d480: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
d490: 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  "".    }..    pr
d4a0: 6f 63 20 63 6f 6d 70 6c 65 74 65 28 65 6f 66 29  oc complete(eof)
d4b0: 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
d4c0: 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
d4d0: 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20  .        switch 
d4e0: 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20  -- $pos {.      
d4f0: 20 20 20 20 20 20 31 20 7b 20 72 65 74 75 72 6e        1 { return
d500: 20 5b 49 6e 43 68 61 6e 6e 65 6c 49 64 20 24 74   [InChannelId $t
d510: 65 78 74 5d 20 7d 0a 20 20 20 20 20 20 20 20 7d  ext] }.        }
d520: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
d530: 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  "".    }..    pr
d540: 6f 63 20 63 6f 6d 70 6c 65 74 65 28 65 72 72 6f  oc complete(erro
d550: 72 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  r) {text start e
d560: 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
d570: 20 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74 63   {.        switc
d580: 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20  h -- $pos {.    
d590: 20 20 20 20 20 20 20 20 31 20 7b 20 72 65 74 75          1 { retu
d5a0: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
d5b0: 20 3c 6d 65 73 73 61 67 65 3e 5d 20 7d 0a 20 20   <message>] }.  
d5c0: 20 20 20 20 20 20 20 20 20 20 32 20 7b 20 72 65            2 { re
d5d0: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
d5e0: 74 73 20 3f 69 6e 66 6f 3f 5d 20 7d 0a 20 20 20  ts ?info?] }.   
d5f0: 20 20 20 20 20 20 20 20 20 33 20 7b 20 72 65 74           3 { ret
d600: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
d610: 73 20 3f 63 6f 64 65 3f 5d 20 7d 0a 20 20 20 20  s ?code?] }.    
d620: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65      }.        re
d630: 74 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20  turn "".    }.. 
d640: 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65     proc complete
d650: 28 65 76 61 6c 29 20 7b 74 65 78 74 20 73 74 61  (eval) {text sta
d660: 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
d670: 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  mod} {.        s
d680: 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
d690: 20 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20              1   
d6a0: 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69      { return [Di
d6b0: 73 70 6c 61 79 48 69 6e 74 73 20 3c 61 72 67 3e  splayHints <arg>
d6c0: 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
d6d0: 64 65 66 61 75 6c 74 20 7b 20 72 65 74 75 72 6e  default { return
d6e0: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
d6f0: 61 72 67 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20  arg?] }.        
d700: 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  }.        return
d710: 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70   "".    }..    p
d720: 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 65 78 65  roc complete(exe
d730: 63 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  c) {text start e
d740: 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
d750: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 72   {.        set r
d760: 65 64 69 72 20 5b 6c 69 73 74 20 7c 20 7c 26 20  edir [list | |& 
d770: 3c 20 3c 40 20 3c 3c 20 3e 20 32 3e 20 3e 26 20  < <@ << > 2> >& 
d780: 3e 3e 20 32 3e 3e 20 3e 3e 26 20 3e 40 20 32 3e  >> 2>> >>& >@ 2>
d790: 40 20 3e 26 40 5d 0a 20 20 20 20 20 20 20 20 76  @ >&@].        v
d7a0: 61 72 69 61 62 6c 65 20 65 78 65 63 75 74 61 62  ariable executab
d7b0: 6c 65 73 0a 20 20 20 20 20 20 20 20 69 66 20 7b  les.        if {
d7c0: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 78  ![info exists ex
d7d0: 65 63 75 74 61 62 6c 65 73 5d 7d 20 7b 0a 20 20  ecutables]} {.  
d7e0: 20 20 20 20 20 20 20 20 20 20 52 65 68 61 73 68            Rehash
d7f0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
d800: 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f     switch -- $po
d810: 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s {.            
d820: 31 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  1 {.            
d830: 20 20 20 20 72 65 74 75 72 6e 20 5b 54 72 79 46      return [TryF
d840: 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 22 2d  romList $text "-
d850: 6b 65 65 70 6e 65 77 6c 69 6e 65 20 2d 2d 20 24  keepnewline -- $
d860: 65 78 65 63 75 74 61 62 6c 65 73 22 5d 0a 20 20  executables"].  
d870: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
d880: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20          default 
d890: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
d8a0: 20 20 73 65 74 20 70 72 65 76 20 5b 50 72 65 76    set prev [Prev
d8b0: 69 6f 75 73 57 6f 72 64 20 24 73 74 61 72 74 20  iousWord $start 
d8c0: 24 6c 69 6e 65 5d 0a 20 20 20 20 20 20 20 20 20  $line].         
d8d0: 20 20 20 20 20 20 20 69 66 20 7b 22 2d 6b 65 65         if {"-kee
d8e0: 70 6e 65 77 6c 69 6e 65 22 20 3d 3d 20 24 70 72  pnewline" == $pr
d8f0: 65 76 20 26 26 20 32 20 3d 3d 20 24 70 6f 73 7d  ev && 2 == $pos}
d900: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
d910: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 54         return [T
d920: 72 79 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  ryFromList $text
d930: 20 22 2d 2d 20 24 65 78 65 63 75 74 61 62 6c 65   "-- $executable
d940: 73 22 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s"].            
d950: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
d960: 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 65 78        switch -ex
d970: 61 63 74 20 2d 2d 20 24 70 72 65 76 20 7b 0a 20  act -- $prev {. 
d980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d990: 20 20 20 7c 20 20 20 20 20 20 20 2d 0a 20 20 20     |       -.   
d9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9b0: 20 7c 26 20 20 20 20 20 20 7b 20 72 65 74 75 72   |&      { retur
d9c0: 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24  n [TryFromList $
d9d0: 74 65 78 74 20 24 65 78 65 63 75 74 61 62 6c 65  text $executable
d9e0: 73 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  s] }.           
d9f0: 20 20 20 20 20 20 20 20 20 3c 20 20 20 20 20 20           <      
da00: 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   -.             
da10: 20 20 20 20 20 20 20 3e 20 20 20 20 20 20 20 2d         >       -
da20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
da30: 20 20 20 20 20 32 3e 20 20 20 20 20 20 2d 0a 20       2>      -. 
da40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da50: 20 20 20 3e 26 20 20 20 20 20 20 2d 0a 20 20 20     >&      -.   
da60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da70: 20 3e 3e 20 20 20 20 20 20 2d 0a 20 20 20 20 20   >>      -.     
da80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
da90: 3e 3e 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20  >>     -.       
daa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3e 3e 26               >>&
dab0: 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 22 22       { return ""
dac0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
dad0: 20 20 20 20 20 20 20 3c 40 20 20 20 20 20 20 2d         <@      -
dae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
daf0: 20 20 20 20 20 3e 40 20 20 20 20 20 20 2d 0a 20       >@      -. 
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db10: 20 20 20 32 3e 40 20 20 20 20 20 2d 0a 20 20 20     2>@     -.   
db20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db30: 20 3e 26 40 20 20 20 20 20 7b 20 72 65 74 75 72   >&@     { retur
db40: 6e 20 5b 43 68 61 6e 6e 65 6c 49 64 20 24 74 65  n [ChannelId $te
db50: 78 74 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  xt] }.          
db60: 20 20 20 20 20 20 20 20 20 20 3c 3c 20 20 20 20            <<    
db70: 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70    { return [Disp
db80: 6c 61 79 48 69 6e 74 73 20 3c 76 61 6c 75 65 3e  layHints <value>
db90: 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
dba0: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20          default 
dbb0: 7b 20 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f  { return [TryFro
dbc0: 6d 4c 69 73 74 20 24 74 65 78 74 20 24 72 65 64  mList $text $red
dbd0: 69 72 20 22 3c 3e 22 5d 20 7d 0a 20 20 20 20 20  ir "<>"] }.     
dbe0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
dbf0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
dc00: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74     }.        ret
dc10: 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20  urn "".    }..  
dc20: 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28    proc complete(
dc30: 65 78 69 74 29 20 7b 74 65 78 74 20 73 74 61 72  exit) {text star
dc40: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
dc50: 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 77  od} {.        sw
dc60: 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20  itch -- $pos {. 
dc70: 20 20 20 20 20 20 20 20 20 20 20 31 20 7b 20 72             1 { r
dc80: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
dc90: 6e 74 73 20 3f 72 65 74 75 72 6e 43 6f 64 65 3f  nts ?returnCode?
dca0: 5d 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ] }.        }.  
dcb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a        return "".
dcc0: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20      }..    proc 
dcd0: 63 6f 6d 70 6c 65 74 65 28 65 78 70 72 29 20 7b  complete(expr) {
dce0: 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
dcf0: 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20  ine pos mod} {. 
dd00: 20 20 20 20 20 20 20 73 65 74 20 6c 65 66 74 20         set left 
dd10: 24 74 65 78 74 0a 20 20 20 20 20 20 20 20 73 65  $text.        se
dd20: 74 20 72 69 67 68 74 20 22 22 0a 20 20 20 20 20  t right "".     
dd30: 20 20 20 73 65 74 20 73 75 62 73 74 69 74 75 74     set substitut
dd40: 69 6f 6e 20 5b 72 65 67 65 78 70 20 2d 2d 20 7b  ion [regexp -- {
dd50: 28 2e 2a 29 28 5c 28 2e 2a 29 7d 20 24 74 65 78  (.*)(\(.*)} $tex
dd60: 74 20 61 6c 6c 20 6c 65 66 74 20 72 69 67 68 74  t all left right
dd70: 5d 3b 20 23 2d 29 0a 0a 20 20 20 20 20 20 20 20  ]; #-)..        
dd80: 73 65 74 20 63 6d 64 73 20 7b 0a 20 20 20 20 20  set cmds {.     
dd90: 20 20 20 20 20 20 20 2d 20 2b 20 7e 20 21 20 20         - + ~ !  
dda0: 2a 20 2f 20 25 20 2b 20 2d 20 3c 3c 20 3e 3e 20  * / % + - << >> 
ddb0: 3c 20 3e 20 3c 3d 20 3e 3d 20 3d 3d 20 21 3d 20  < > <= >= == != 
ddc0: 26 20 5e 20 7c 20 26 26 20 7c 7c 20 3c 78 3f 79  & ^ | && || <x?y
ddd0: 3a 7a 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20  :z>.            
dde0: 61 63 6f 73 20 20 20 20 63 6f 73 20 20 20 20 20  acos    cos     
ddf0: 68 79 70 6f 74 20 20 20 73 69 6e 68 0a 20 20 20  hypot   sinh.   
de00: 20 20 20 20 20 20 20 20 20 61 73 69 6e 20 20 20           asin   
de10: 20 63 6f 73 68 20 20 20 20 6c 6f 67 20 20 20 20   cosh    log    
de20: 20 73 71 72 74 0a 20 20 20 20 20 20 20 20 20 20   sqrt.          
de30: 20 20 61 74 61 6e 20 20 20 20 65 78 70 20 20 20    atan    exp   
de40: 20 20 6c 6f 67 31 30 20 20 20 74 61 6e 0a 20 20    log10   tan.  
de50: 20 20 20 20 20 20 20 20 20 20 61 74 61 6e 32 20            atan2 
de60: 20 20 66 6c 6f 6f 72 20 20 20 70 6f 77 20 20 20    floor   pow   
de70: 20 20 74 61 6e 68 0a 20 20 20 20 20 20 20 20 20    tanh.         
de80: 20 20 20 63 65 69 6c 20 20 20 20 66 6d 6f 64 20     ceil    fmod 
de90: 20 20 20 73 69 6e 20 20 20 20 20 61 62 73 0a 20     sin     abs. 
dea0: 20 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c             doubl
deb0: 65 20 20 69 6e 74 20 20 20 20 20 72 61 6e 64 20  e  int     rand 
dec0: 20 20 20 72 6f 75 6e 64 0a 20 20 20 20 20 20 20     round.       
ded0: 20 20 20 20 20 73 72 61 6e 64 0a 20 20 20 20 20       srand.     
dee0: 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 69 66     }..        if
def0: 20 7b 22 29 22 20 3d 3d 20 5b 53 74 72 69 6e 67   {")" == [String
df00: 20 69 6e 64 65 78 20 24 74 65 78 74 20 65 6e 64   index $text end
df10: 5d 20 26 26 20 2d 31 20 21 3d 20 5b 6c 73 65 61  ] && -1 != [lsea
df20: 72 63 68 20 24 63 6d 64 73 20 24 6c 65 66 74 5d  rch $cmds $left]
df30: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  } {.            
df40: 72 65 74 75 72 6e 20 22 24 74 65 78 74 20 22 3b  return "$text ";
df50: 20 23 20 61 70 70 65 6e 64 20 61 20 73 70 61 63   # append a spac
df60: 65 20 61 66 74 65 72 20 61 20 63 6c 6f 73 69 6e  e after a closin
df70: 67 20 27 29 27 0a 20 20 20 20 20 20 20 20 7d 0a  g ')'.        }.
df80: 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20  .        switch 
df90: 2d 2d 20 24 6c 65 66 74 20 7b 0a 20 20 20 20 20  -- $left {.     
dfa0: 20 20 20 20 20 20 20 72 61 6e 64 20 7b 20 72 65         rand { re
dfb0: 74 75 72 6e 20 22 72 61 6e 64 28 29 20 22 20 7d  turn "rand() " }
dfc0: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 62  ..            ab
dfd0: 73 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20  s    -.         
dfe0: 20 20 20 61 63 6f 73 20 20 20 2d 0a 20 20 20 20     acos   -.    
dff0: 20 20 20 20 20 20 20 20 61 73 69 6e 20 20 20 2d          asin   -
e000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 74 61  .            ata
e010: 6e 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20  n   -.          
e020: 20 20 63 65 69 6c 20 20 20 2d 0a 20 20 20 20 20    ceil   -.     
e030: 20 20 20 20 20 20 20 63 6f 73 20 20 20 20 2d 0a         cos    -.
e040: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 73 68              cosh
e050: 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20     -.           
e060: 20 64 6f 75 62 6c 65 20 2d 0a 20 20 20 20 20 20   double -.      
e070: 20 20 20 20 20 20 65 78 70 20 20 20 20 2d 0a 20        exp    -. 
e080: 20 20 20 20 20 20 20 20 20 20 20 66 6c 6f 6f 72             floor
e090: 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20    -.            
e0a0: 69 6e 74 20 20 20 20 2d 0a 20 20 20 20 20 20 20  int    -.       
e0b0: 20 20 20 20 20 6c 6f 67 20 20 20 20 2d 0a 20 20       log    -.  
e0c0: 20 20 20 20 20 20 20 20 20 20 6c 6f 67 31 30 20            log10 
e0d0: 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72   -.            r
e0e0: 6f 75 6e 64 20 20 2d 0a 20 20 20 20 20 20 20 20  ound  -.        
e0f0: 20 20 20 20 73 69 6e 20 20 20 20 2d 0a 20 20 20      sin    -.   
e100: 20 20 20 20 20 20 20 20 20 73 69 6e 68 20 20 20           sinh   
e110: 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  -.            sq
e120: 72 74 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20  rt   -.         
e130: 20 20 20 73 72 61 6e 64 20 20 2d 0a 20 20 20 20     srand  -.    
e140: 20 20 20 20 20 20 20 20 74 61 6e 20 20 20 20 2d          tan    -
e150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 61 6e  .            tan
e160: 68 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  h   { return [Di
e170: 73 70 6c 61 79 48 69 6e 74 73 20 3c 76 61 6c 75  splayHints <valu
e180: 65 3e 5d 20 7d 0a 0a 0a 20 20 20 20 20 20 20 20  e>] }...        
e190: 20 20 20 20 61 74 61 6e 32 20 2d 0a 20 20 20 20      atan2 -.    
e1a0: 20 20 20 20 20 20 20 20 66 6d 6f 64 20 20 2d 0a          fmod  -.
e1b0: 20 20 20 20 20 20 20 20 20 20 20 20 68 79 70 6f              hypo
e1c0: 74 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t -.            
e1d0: 70 6f 77 20 20 20 7b 20 72 65 74 75 72 6e 20 5b  pow   { return [
e1e0: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 76 61  DisplayHints <va
e1f0: 6c 75 65 3e 2c 3c 76 61 6c 75 65 3e 5d 20 7d 0a  lue>,<value>] }.
e200: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
e210: 20 20 20 73 65 74 20 63 6f 6d 70 6c 65 74 69 6f     set completio
e220: 6e 73 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20  ns [TryFromList 
e230: 24 6c 65 66 74 20 24 63 6d 64 73 20 3c 3e 5d 0a  $left $cmds <>].
e240: 20 20 20 20 20 20 20 20 69 66 20 7b 31 20 3d 3d          if {1 ==
e250: 20 5b 6c 6c 65 6e 67 74 68 20 24 63 6f 6d 70 6c   [llength $compl
e260: 65 74 69 6f 6e 73 5d 7d 20 7b 0a 20 20 20 20 20  etions]} {.     
e270: 20 20 20 20 20 20 20 69 66 20 7b 21 24 73 75 62         if {!$sub
e280: 73 74 69 74 75 74 69 6f 6e 7d 20 7b 0a 20 20 20  stitution} {.   
e290: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
e2a0: 7b 22 72 61 6e 64 22 20 3d 3d 20 24 63 6f 6d 70  {"rand" == $comp
e2b0: 6c 65 74 69 6f 6e 73 7d 20 7b 0a 20 20 20 20 20  letions} {.     
e2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
e2d0: 65 74 75 72 6e 20 22 72 61 6e 64 28 29 20 22 3b  eturn "rand() ";
e2e0: 20 23 20 72 61 6e 64 28 29 20 74 61 6b 65 73 20   # rand() takes 
e2f0: 6e 6f 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 20  no arguments.   
e300: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
e310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
e320: 70 70 65 6e 64 20 63 6f 6d 70 6c 65 74 69 6f 6e  ppend completion
e330: 73 20 28 3b 20 23 2d 29 0a 20 20 20 20 20 20 20  s (; #-).       
e340: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
e350: 5b 6c 69 73 74 20 24 63 6f 6d 70 6c 65 74 69 6f  [list $completio
e360: 6e 73 20 7b 7d 5d 0a 20 20 20 20 20 20 20 20 20  ns {}].         
e370: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 20 65     }.        } e
e380: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  lse {.          
e390: 20 20 72 65 74 75 72 6e 20 24 63 6f 6d 70 6c 65    return $comple
e3a0: 74 69 6f 6e 73 0a 20 20 20 20 20 20 20 20 7d 0a  tions.        }.
e3b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
e3c0: 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f  ".    }..    pro
e3d0: 63 20 63 6f 6d 70 6c 65 74 65 28 66 62 6c 6f 63  c complete(fbloc
e3e0: 6b 65 64 29 20 7b 74 65 78 74 20 73 74 61 72 74  ked) {text start
e3f0: 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
e400: 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 77 69  d} {.        swi
e410: 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20  tch -- $pos {.  
e420: 20 20 20 20 20 20 20 20 20 20 31 20 7b 20 72 65            1 { re
e430: 74 75 72 6e 20 5b 49 6e 43 68 61 6e 6e 65 6c 49  turn [InChannelI
e440: 64 20 24 74 65 78 74 5d 20 7d 0a 20 20 20 20 20  d $text] }.     
e450: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74     }.        ret
e460: 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20  urn "".    }..  
e470: 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28    proc complete(
e480: 66 63 6f 6e 66 69 67 75 72 65 29 20 7b 74 65 78  fconfigure) {tex
e490: 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
e4a0: 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20   pos mod} {.    
e4b0: 20 20 20 20 73 65 74 20 63 6d 64 20 5b 4c 69 6e      set cmd [Lin
e4c0: 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a 20 20 20  dex $line 1].   
e4d0: 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24       switch -- $
e4e0: 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20  pos {.          
e4f0: 20 20 31 20 20 20 20 20 20 20 7b 20 72 65 74 75    1       { retu
e500: 72 6e 20 5b 43 68 61 6e 6e 65 6c 49 64 20 24 74  rn [ChannelId $t
e510: 65 78 74 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  ext] }.         
e520: 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20     default {.   
e530: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
e540: 20 6f 70 74 69 6f 6e 20 5b 50 72 65 76 69 6f 75   option [Previou
e550: 73 57 6f 72 64 20 24 73 74 61 72 74 20 24 6c 69  sWord $start $li
e560: 6e 65 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ne].            
e570: 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 6f      switch -- $o
e580: 70 74 69 6f 6e 20 7b 0a 20 20 20 20 20 20 20 20  ption {.        
e590: 20 20 20 20 20 20 20 20 20 20 20 20 2d 62 6c 6f              -blo
e5a0: 63 6b 69 6e 67 20 20 20 20 7b 20 72 65 74 75 72  cking    { retur
e5b0: 6e 20 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65  n [CompleteBoole
e5c0: 61 6e 20 24 74 65 78 74 5d 20 7d 0a 20 20 20 20  an $text] }.    
e5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5e0: 2d 62 75 66 66 65 72 69 6e 67 20 20 20 7b 20 72  -buffering   { r
e5f0: 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
e600: 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 66  romList $text {f
e610: 75 6c 6c 20 6c 69 6e 65 20 6e 6f 6e 65 7d 5d 20  ull line none}] 
e620: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
e630: 20 20 20 20 20 20 2d 62 75 66 66 65 72 73 69 7a        -buffersiz
e640: 65 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  e  {.           
e650: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
e660: 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 74 65 78 74  {![llength $text
e670: 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ]} {.           
e680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e690: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
e6a0: 48 69 6e 74 73 20 3c 6e 65 77 53 69 7a 65 3e 5d  Hints <newSize>]
e6b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e6c0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
e6e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e6f0: 20 20 20 20 20 2d 65 6e 63 6f 64 69 6e 67 20 20       -encoding  
e700: 20 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70    { return [Comp
e710: 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65  leteFromList $te
e720: 78 74 20 5b 65 6e 63 6f 64 69 6e 67 20 6e 61 6d  xt [encoding nam
e730: 65 73 5d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  es]] }.         
e740: 20 20 20 20 20 20 20 20 20 20 20 2d 65 6f 66 63             -eofc
e750: 68 61 72 20 20 20 20 20 7b 20 72 65 74 75 72 6e  har     { return
e760: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 7b   [DisplayHints {
e770: 5c 7b 3c 69 6e 43 68 61 72 3e 5c 20 3c 6f 75 74  \{<inChar>\ <out
e780: 43 68 61 72 3e 5c 7d 7d 5d 20 7d 0a 20 20 20 20  Char>\}}] }.    
e790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7a0: 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20 7b 20 72  -translation { r
e7b0: 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
e7c0: 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 61  romList $text {a
e7d0: 75 74 6f 20 62 69 6e 61 72 79 20 63 72 20 63 72  uto binary cr cr
e7e0: 6c 66 20 6c 66 7d 5d 20 7d 0a 20 20 20 20 20 20  lf lf}] }.      
e7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
e800: 66 61 75 6c 74 20 20 20 20 20 20 7b 0a 20 20 20  fault      {.   
e810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e820: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d       return [Com
e830: 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74  pleteFromList $t
e840: 65 78 74 20 5c 0a 20 20 20 20 20 20 20 20 20 20  ext \.          
e850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e860: 20 20 20 20 20 20 20 20 20 20 5b 52 65 6d 6f 76            [Remov
e870: 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69  eUsedOptions $li
e880: 6e 65 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20  ne \.           
e890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 2d                {-
e8b0: 62 6c 6f 63 6b 69 6e 67 20 2d 62 75 66 66 65 72  blocking -buffer
e8c0: 69 6e 67 20 2d 62 75 66 66 65 72 73 69 7a 65 0a  ing -buffersize.
e8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8f0: 20 20 20 20 20 20 20 20 20 20 2d 65 6e 63 6f 64            -encod
e900: 69 6e 67 20 2d 65 6f 66 63 68 61 72 20 2d 74 72  ing -eofchar -tr
e910: 61 6e 73 6c 61 74 69 6f 6e 7d 5d 5d 0a 20 20 20  anslation}]].   
e920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e930: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
e940: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
e950: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
e960: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20       return "". 
e970: 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63     }..    proc c
e980: 6f 6d 70 6c 65 74 65 28 66 63 6f 70 79 29 20 7b  omplete(fcopy) {
e990: 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
e9a0: 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20  ine pos mod} {. 
e9b0: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
e9c0: 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20   $pos {.        
e9d0: 20 20 20 20 31 20 20 20 20 20 20 20 7b 20 72 65      1       { re
e9e0: 74 75 72 6e 20 5b 49 6e 43 68 61 6e 6e 65 6c 49  turn [InChannelI
e9f0: 64 20 24 74 65 78 74 5d 20 7d 0a 20 20 20 20 20  d $text] }.     
ea00: 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20 7b         2       {
ea10: 20 72 65 74 75 72 6e 20 5b 4f 75 74 43 68 61 6e   return [OutChan
ea20: 6e 65 6c 49 64 20 24 74 65 78 74 5d 20 7d 0a 20  nelId $text] }. 
ea30: 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75             defau
ea40: 6c 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lt {.           
ea50: 20 20 20 20 20 73 65 74 20 6f 70 74 69 6f 6e 20       set option 
ea60: 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 73  [PreviousWord $s
ea70: 74 61 72 74 20 24 6c 69 6e 65 5d 0a 20 20 20 20  tart $line].    
ea80: 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74              swit
ea90: 63 68 20 2d 2d 20 24 6f 70 74 69 6f 6e 20 7b 0a  ch -- $option {.
eaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eab0: 20 20 20 20 2d 73 69 7a 65 20 20 20 20 7b 20 72      -size    { r
eac0: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
ead0: 6e 74 73 20 3c 73 69 7a 65 3e 5d 20 7d 0a 20 20  nts <size>] }.  
eae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eaf0: 20 20 2d 63 6f 6d 6d 61 6e 64 20 7b 20 72 65 74    -command { ret
eb00: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
eb10: 73 20 3c 63 61 6c 6c 62 61 63 6b 3e 5d 20 7d 0a  s <callback>] }.
eb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb30: 20 20 20 20 64 65 66 61 75 6c 74 20 20 7b 20 72      default  { r
eb40: 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
eb50: 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5c 0a  romList $text \.
eb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb80: 20 20 20 20 20 20 20 20 20 20 20 5b 52 65 6d 6f             [Remo
eb90: 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c  veUsedOptions $l
eba0: 69 6e 65 20 7b 2d 73 69 7a 65 20 2d 63 6f 6d 6d  ine {-size -comm
ebb0: 61 6e 64 7d 5d 5d 0a 20 20 20 20 20 20 20 20 20  and}]].         
ebc0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
ebd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
ebe0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
ebf0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72       }.        r
ec00: 65 74 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a  eturn "".    }..
ec10: 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74      proc complet
ec20: 65 28 66 69 6c 65 29 20 7b 74 65 78 74 20 73 74  e(file) {text st
ec30: 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
ec40: 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20   mod} {.        
ec50: 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
ec60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 31 20 7b  .            1 {
ec70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ec80: 20 73 65 74 20 63 6d 64 73 20 7b 0a 20 20 20 20   set cmds {.    
ec90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eca0: 61 74 69 6d 65 20 61 74 74 72 69 62 75 74 65 73  atime attributes
ecb0: 20 63 68 61 6e 6e 65 6c 73 20 63 6f 70 79 20 64   channels copy d
ecc0: 65 6c 65 74 65 20 64 69 72 6e 61 6d 65 20 65 78  elete dirname ex
ecd0: 65 63 75 74 61 62 6c 65 20 65 78 69 73 74 73 0a  ecutable exists.
ece0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecf0: 20 20 20 20 65 78 74 65 6e 73 69 6f 6e 20 69 73      extension is
ed00: 64 69 72 65 63 74 6f 72 79 20 69 73 66 69 6c 65  directory isfile
ed10: 20 6a 6f 69 6e 20 6c 73 74 61 74 20 6d 6b 64 69   join lstat mkdi
ed20: 72 20 6d 74 69 6d 65 0a 20 20 20 20 20 20 20 20  r mtime.        
ed30: 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
ed40: 76 65 6e 61 6d 65 20 6f 77 6e 65 64 20 70 61 74  vename owned pat
ed50: 68 74 79 70 65 20 72 65 61 64 61 62 6c 65 20 72  htype readable r
ed60: 65 61 64 6c 69 6e 6b 20 72 65 6e 61 6d 65 0a 20  eadlink rename. 
ed70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed80: 20 20 20 72 6f 6f 74 6e 61 6d 65 20 73 69 7a 65     rootname size
ed90: 20 73 70 6c 69 74 20 73 74 61 74 20 74 61 69 6c   split stat tail
eda0: 20 74 79 70 65 20 76 6f 6c 75 6d 65 73 20 77 72   type volumes wr
edb0: 69 74 61 62 6c 65 0a 20 20 20 20 20 20 20 20 20  itable.         
edc0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
edd0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ede0: 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 74 65  [TryFromList $te
edf0: 78 74 20 24 63 6d 64 73 5d 0a 20 20 20 20 20 20  xt $cmds].      
ee00: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
ee10: 20 20 20 20 32 20 7b 0a 20 20 20 20 20 20 20 20      2 {.        
ee20: 20 20 20 20 20 20 20 20 73 65 74 20 63 6d 64 20          set cmd 
ee30: 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d  [Lindex $line 1]
ee40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ee50: 20 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64 20   switch -- $cmd 
ee60: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
ee70: 20 20 20 20 20 20 61 74 69 6d 65 20 20 20 20 20        atime     
ee80: 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20    -.            
ee90: 20 20 20 20 20 20 20 20 61 74 74 72 69 62 75 74          attribut
eea0: 65 73 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20  es  -.          
eeb0: 20 20 20 20 20 20 20 20 20 20 63 68 61 6e 6e 65            channe
eec0: 6c 73 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20  ls    -.        
eed0: 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 6e              dirn
eee0: 61 6d 65 20 20 20 20 20 2d 0a 20 20 20 20 20 20  ame     -.      
eef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78                ex
ef00: 65 63 75 74 61 62 6c 65 20 20 2d 0a 20 20 20 20  ecutable  -.    
ef10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef20: 65 78 69 73 74 73 20 20 20 20 20 20 2d 0a 20 20  exists      -.  
ef30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef40: 20 20 65 78 74 65 6e 73 69 6f 6e 20 20 20 2d 0a    extension   -.
ef50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef60: 20 20 20 20 69 73 64 69 72 65 63 74 6f 72 79 20      isdirectory 
ef70: 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  -.              
ef80: 20 20 20 20 20 20 69 73 66 69 6c 65 20 20 20 20        isfile    
ef90: 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20    -.            
efa0: 20 20 20 20 20 20 20 20 6a 6f 69 6e 20 20 20 20          join    
efb0: 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20      -.          
efc0: 20 20 20 20 20 20 20 20 20 20 6c 73 74 61 74 20            lstat 
efd0: 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20        -.        
efe0: 20 20 20 20 20 20 20 20 20 20 20 20 6d 74 69 6d              mtim
eff0: 65 20 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20  e       -.      
f000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6b                mk
f010: 64 69 72 20 20 20 20 20 20 20 2d 0a 20 20 20 20  dir       -.    
f020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f030: 6e 61 74 69 76 65 6e 61 6d 65 20 20 2d 0a 20 20  nativename  -.  
f040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f050: 20 20 6f 77 6e 65 64 20 20 20 20 20 20 20 2d 0a    owned       -.
f060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f070: 20 20 20 20 70 61 74 68 74 79 70 65 20 20 20 20      pathtype    
f080: 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  -.              
f090: 20 20 20 20 20 20 72 65 61 64 61 62 6c 65 20 20        readable  
f0a0: 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20    -.            
f0b0: 20 20 20 20 20 20 20 20 72 65 61 64 6c 69 6e 6b          readlink
f0c0: 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20      -.          
f0d0: 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 6e 61            rootna
f0e0: 6d 65 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20  me    -.        
f0f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65              size
f100: 20 20 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20          -.      
f110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 70                sp
f120: 6c 69 74 20 20 20 20 20 20 20 2d 0a 20 20 20 20  lit       -.    
f130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f140: 73 74 61 74 20 20 20 20 20 20 20 20 2d 0a 20 20  stat        -.  
f150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f160: 20 20 74 61 69 6c 20 20 20 20 20 20 20 20 2d 0a    tail        -.
f170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f180: 20 20 20 20 74 79 70 65 20 20 20 20 20 20 20 20      type        
f190: 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  -.              
f1a0: 20 20 20 20 20 20 76 6f 6c 75 6d 65 73 20 20 20        volumes   
f1b0: 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20    -.            
f1c0: 20 20 20 20 20 20 20 20 77 72 69 74 61 62 6c 65          writable
f1d0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
f1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
f1f0: 74 75 72 6e 20 22 22 0a 20 20 20 20 20 20 20 20  turn "".        
f200: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20              }.. 
f210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f220: 20 20 20 63 6f 70 79 20 20 20 2d 0a 20 20 20 20     copy   -.    
f230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f240: 64 65 6c 65 74 65 20 2d 0a 20 20 20 20 20 20 20  delete -.       
f250: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6e               ren
f260: 61 6d 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ame {.          
f270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                # 
f280: 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c  return [TryFromL
f290: 69 73 74 20 24 74 65 78 74 20 22 2d 66 6f 72 63  ist $text "-forc
f2a0: 65 20 5b 67 6c 6f 62 20 2a 5d 22 5d 0a 20 20 20  e [glob *]"].   
f2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2c0: 20 20 20 20 20 23 20 74 68 69 73 20 69 73 20 6e       # this is n
f2d0: 6f 74 20 70 65 72 66 65 63 74 2e 20 54 68 65 20  ot perfect. The 
f2e0: 20 60 2d 66 6f 72 63 65 27 20 61 6e 64 20 60 2d   `-force' and `-
f2f0: 2d 27 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  -'.             
f300: 20 20 20 20 20 20 20 20 20 20 20 23 20 6f 70 74             # opt
f310: 69 6f 6e 73 20 77 69 6c 6c 20 6e 6f 74 20 62 65  ions will not be
f320: 20 64 69 73 70 6c 61 79 65 64 2e 0a 20 20 20 20   displayed..    
f330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f340: 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20      return "".  
f350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f360: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
f370: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
f380: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
f390: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a        return "".
f3a0: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20      }..    proc 
f3b0: 63 6f 6d 70 6c 65 74 65 28 66 69 6c 65 65 76 65  complete(fileeve
f3c0: 6e 74 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  nt) {text start 
f3d0: 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
f3e0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74  } {.        swit
f3f0: 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20  ch -- $pos {.   
f400: 20 20 20 20 20 20 20 20 20 31 20 7b 20 72 65 74           1 { ret
f410: 75 72 6e 20 5b 43 68 61 6e 6e 65 6c 49 64 20 24  urn [ChannelId $
f420: 74 65 78 74 5d 20 7d 0a 20 20 20 20 20 20 20 20  text] }.        
f430: 20 20 20 20 32 20 7b 20 72 65 74 75 72 6e 20 5b      2 { return [
f440: 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
f450: 20 24 74 65 78 74 20 7b 72 65 61 64 61 62 6c 65   $text {readable
f460: 20 77 72 69 74 61 62 6c 65 7d 5d 20 7d 0a 20 20   writable}] }.  
f470: 20 20 20 20 20 20 20 20 20 20 33 20 7b 20 72 65            3 { re
f480: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
f490: 74 73 20 3f 73 63 72 69 70 74 3f 5d 20 7d 0a 20  ts ?script?] }. 
f4a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
f4b0: 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20 20 7d   return "".    }
f4c0: 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c  ..    proc compl
f4d0: 65 74 65 28 66 6c 75 73 68 29 20 7b 74 65 78 74  ete(flush) {text
f4e0: 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
f4f0: 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20  pos mod} {.     
f500: 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f     switch -- $po
f510: 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s {.            
f520: 31 20 7b 20 72 65 74 75 72 6e 20 5b 4f 75 74 43  1 { return [OutC
f530: 68 61 6e 6e 65 6c 49 64 20 24 74 65 78 74 5d 20  hannelId $text] 
f540: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
f550: 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20      return "".  
f560: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f    }..    proc co
f570: 6d 70 6c 65 74 65 28 66 6f 72 29 20 7b 74 65 78  mplete(for) {tex
f580: 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
f590: 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20   pos mod} {.    
f5a0: 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70      switch -- $p
f5b0: 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  os {.           
f5c0: 20 31 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20   1 -.           
f5d0: 20 32 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20   2 -.           
f5e0: 20 33 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20   3 -.           
f5f0: 20 34 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20   4 {.           
f600: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 42 72 61       return [Bra
f610: 63 65 4f 72 43 6f 6d 6d 61 6e 64 20 24 74 65 78  ceOrCommand $tex
f620: 74 20 24 73 74 61 72 74 20 24 65 6e 64 20 24 6c  t $start $end $l
f630: 69 6e 65 20 24 70 6f 73 20 24 6d 6f 64 5d 0a 20  ine $pos $mod]. 
f640: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
f650: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72       }.        r
f660: 65 74 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a  eturn "".    }..
f670: 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74      proc complet
f680: 65 28 66 6f 72 65 61 63 68 29 20 7b 74 65 78 74  e(foreach) {text
f690: 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
f6a0: 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20  pos mod} {.     
f6b0: 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f     switch -- $po
f6c0: 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s {.            
f6d0: 31 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e  1       { return
f6e0: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
f6f0: 76 61 72 6e 61 6d 65 3e 5d 20 7d 0a 20 20 20 20  varname>] }.    
f700: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20          2       
f710: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
f720: 79 48 69 6e 74 73 20 3c 6c 69 73 74 3e 5d 20 7d  yHints <list>] }
f730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66  .            def
f740: 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 20 20  ault {.         
f750: 20 20 20 20 20 20 20 69 66 20 7b 5b 65 78 70 72         if {[expr
f760: 20 7b 24 70 6f 73 20 25 20 32 7d 5d 7d 20 7b 0a   {$pos % 2}]} {.
f770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f780: 20 20 20 20 72 65 74 75 72 6e 20 5b 44 69 73 70      return [Disp
f790: 6c 61 79 48 69 6e 74 73 20 5b 6c 69 73 74 20 3f  layHints [list ?
f7a0: 76 61 72 6e 61 6d 65 3f 20 3c 62 6f 64 79 3e 5d  varname? <body>]
f7b0: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
f7c0: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
f7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
f7e0: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
f7f0: 6e 74 73 20 3f 6c 69 73 74 3f 5d 0a 20 20 20 20  nts ?list?].    
f800: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
f810: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
f820: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65      }.        re
f830: 74 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20  turn "".    }.. 
f840: 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65     proc complete
f850: 28 66 6f 72 6d 61 74 29 20 7b 74 65 78 74 20 73  (format) {text s
f860: 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
f870: 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20  s mod} {.       
f880: 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20   switch -- $pos 
f890: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 31 20  {.            1 
f8a0: 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b        { return [
f8b0: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 66 6f  DisplayHints <fo
f8c0: 72 6d 61 74 53 74 72 69 6e 67 3e 5d 20 7d 0a 20  rmatString>] }. 
f8d0: 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75             defau
f8e0: 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  lt { return [Dis
f8f0: 70 6c 61 79 48 69 6e 74 73 20 3f 61 72 67 3f 5d  playHints ?arg?]
f900: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
f910: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20       return "". 
f920: 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63     }..    proc c
f930: 6f 6d 70 6c 65 74 65 28 67 65 74 73 29 20 7b 74  omplete(gets) {t
f940: 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
f950: 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20  ne pos mod} {.  
f960: 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
f970: 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20  $pos {.         
f980: 20 20 20 31 20 7b 20 72 65 74 75 72 6e 20 5b 49     1 { return [I
f990: 6e 43 68 61 6e 6e 65 6c 49 64 20 24 74 65 78 74  nChannelId $text
f9a0: 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
f9b0: 32 20 7b 20 72 65 74 75 72 6e 20 5b 56 61 72 43  2 { return [VarC
f9c0: 6f 6d 70 6c 65 74 69 6f 6e 20 24 74 65 78 74 5d  ompletion $text]
f9d0: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
f9e0: 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20      return "".  
f9f0: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f    }..    proc co
fa00: 6d 70 6c 65 74 65 28 67 6c 6f 62 29 20 7b 74 65  mplete(glob) {te
fa10: 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
fa20: 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20  e pos mod} {.   
fa30: 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24       switch -- $
fa40: 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20  pos {.          
fa50: 20 20 31 20 7b 0a 20 20 20 20 20 20 20 20 20 20    1 {.          
fa60: 20 20 20 20 20 20 23 20 54 68 69 73 20 61 6c 73        # This als
fa70: 6f 20 69 73 20 6e 6f 74 20 70 65 72 66 65 63 74  o is not perfect
fa80: 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fa90: 20 20 23 20 54 68 69 73 20 77 69 6c 6c 20 6e 6f    # This will no
faa0: 74 20 64 69 73 70 6c 61 79 20 74 68 65 20 6f 70  t display the op
fab0: 74 69 6f 6e 73 20 61 73 20 68 69 6e 74 73 21 0a  tions as hints!.
fac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fad0: 73 65 74 20 6d 61 74 63 68 65 73 20 5b 54 72 79  set matches [Try
fae0: 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 7b  FromList $text {
faf0: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 2d 2d 7d 5d  -nocomplain --}]
fb00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fb10: 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 73   if {[llength [s
fb20: 74 72 69 6e 67 20 74 72 69 6d 20 24 74 65 78 74  tring trim $text
fb30: 5d 5d 20 26 26 20 5b 6c 6c 65 6e 67 74 68 20 24  ]] && [llength $
fb40: 6d 61 74 63 68 65 73 5d 7d 20 7b 0a 20 20 20 20  matches]} {.    
fb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb60: 72 65 74 75 72 6e 20 24 6d 61 74 63 68 65 73 0a  return $matches.
fb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb80: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
fb90: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
fba0: 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20 20    return "".    
fbb0: 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70  }..    proc comp
fbc0: 6c 65 74 65 28 67 6c 6f 62 61 6c 29 20 7b 74 65  lete(global) {te
fbd0: 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
fbe0: 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20  e pos mod} {.   
fbf0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 56 61 72       return [Var
fc00: 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 74 65 78 74  Completion $text
fc10: 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f  ].    }..    pro
fc20: 63 20 63 6f 6d 70 6c 65 74 65 28 68 69 73 74 6f  c complete(histo
fc30: 72 79 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  ry) {text start 
fc40: 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
fc50: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74  } {.        swit
fc60: 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20  ch -- $pos {.   
fc70: 20 20 20 20 20 20 20 20 20 31 20 7b 0a 20 20 20           1 {.   
fc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
fc90: 20 63 6d 64 73 20 7b 61 64 64 20 63 68 61 6e 67   cmds {add chang
fca0: 65 20 63 6c 65 61 72 20 65 76 65 6e 74 20 69 6e  e clear event in
fcb0: 66 6f 20 6b 65 65 70 20 6e 65 78 74 69 64 20 72  fo keep nextid r
fcc0: 65 64 6f 7d 0a 20 20 20 20 20 20 20 20 20 20 20  edo}.           
fcd0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 54 72 79       return [Try
fce0: 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 24  FromList $text $
fcf0: 63 6d 64 73 5d 0a 20 20 20 20 20 20 20 20 20 20  cmds].          
fd00: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
fd10: 32 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  2 {.            
fd20: 20 20 20 20 73 65 74 20 63 6d 64 20 5b 4c 69 6e      set cmd [Lin
fd30: 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a 20 20 20  dex $line 1].   
fd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69               swi
fd50: 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 20 20  tch -- $cmd {.  
fd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd70: 20 20 61 64 64 20 20 20 20 7b 20 72 65 74 75 72    add    { retur
fd80: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
fd90: 3c 63 6f 6d 6d 61 6e 64 3e 5d 20 7d 0a 20 20 20  <command>] }.   
fda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdb0: 20 63 68 61 6e 67 65 20 7b 20 72 65 74 75 72 6e   change { return
fdc0: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
fdd0: 6e 65 77 56 61 6c 75 65 3e 5d 20 7d 0a 0a 20 20  newValue>] }..  
fde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdf0: 20 20 69 6e 66 6f 20 2d 0a 20 20 20 20 20 20 20    info -.       
fe00: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 65               kee
fe10: 70 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  p { return [Disp
fe20: 6c 61 79 48 69 6e 74 73 20 3f 63 6f 75 6e 74 3f  layHints ?count?
fe30: 5d 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20  ] }..           
fe40: 20 20 20 20 20 20 20 20 20 65 76 65 6e 74 20 2d           event -
fe50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fe60: 20 20 20 20 20 72 65 64 6f 20 20 7b 20 72 65 74       redo  { ret
fe70: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
fe80: 73 20 3f 65 76 65 6e 74 3f 5d 20 7d 0a 0a 20 20  s ?event?] }..  
fe90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fea0: 20 20 63 6c 65 61 72 20 20 2d 0a 20 20 20 20 20    clear  -.     
feb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
fec0: 65 78 74 69 64 20 7b 20 72 65 74 75 72 6e 20 22  extid { return "
fed0: 22 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  " }.            
fee0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
fef0: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
ff00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a        return "".
ff10: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 2d 2d 2d      }..    # ---
ff20: 20 48 54 54 50 20 50 41 43 4b 41 47 45 20 2d 2d   HTTP PACKAGE --
ff30: 2d 0a 0a 20 20 20 20 23 20 63 72 65 61 74 65 20  -..    # create 
ff40: 61 20 68 74 74 70 20 6e 61 6d 65 73 70 61 63 65  a http namespace
ff50: 20 69 6e 73 69 64 65 0a 20 20 20 20 23 20 74 63   inside.    # tc
ff60: 6c 72 65 61 64 6c 69 6e 65 20 61 6e 64 20 69 6d  lreadline and im
ff70: 70 6f 72 74 20 73 6f 6d 65 20 63 6f 6d 6d 61 6e  port some comman
ff80: 64 73 2e 0a 20 20 20 20 23 0a 20 20 20 20 6e 61  ds..    #.    na
ff90: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 68 74 74  mespace eval htt
ffa0: 70 20 7b 0a 20 20 20 20 20 20 20 20 63 61 74 63  p {.        catc
ffb0: 68 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  h {.            
ffc0: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74  namespace import
ffd0: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   \.             
ffe0: 20 20 20 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65     ::tclreadline
fff0: 3a 3a 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3a  ::DisplayHints :
10000 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 50 72  :tclreadline::Pr
10010 65 76 69 6f 75 73 57 6f 72 64 20 5c 0a 20 20 20  eviousWord \.   
10020 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 3a 74               ::t
10030 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 43 6f 6d 70  clreadline::Comp
10040 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 3a 3a 74  leteFromList ::t
10050 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 43 6f 6d 6d  clreadline::Comm
10060 61 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 20 5c 0a  andCompletion \.
10070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10080 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 52  ::tclreadline::R
10090 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
100a0 20 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a   ::tclreadline::
100b0 48 6f 73 74 4c 69 73 74 20 5c 0a 20 20 20 20 20  HostList \.     
100c0 20 20 20 20 20 20 20 20 20 20 20 3a 3a 74 63 6c             ::tcl
100d0 72 65 61 64 6c 69 6e 65 3a 3a 43 68 61 6e 6e 65  readline::Channe
100e0 6c 49 64 20 3a 3a 74 63 6c 72 65 61 64 6c 69 6e  lId ::tclreadlin
100f0 65 3a 3a 4c 69 6e 64 65 78 20 5c 0a 20 20 20 20  e::Lindex \.    
10100 20 20 20 20 20 20 20 20 20 20 20 20 3a 3a 74 63              ::tc
10110 6c 72 65 61 64 6c 69 6e 65 3a 3a 43 6f 6d 70 6c  lreadline::Compl
10120 65 74 65 42 6f 6f 6c 65 61 6e 0a 20 20 20 20 20  eteBoolean.     
10130 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
10140 70 72 6f 63 20 68 74 74 70 3a 3a 63 6f 6d 70 6c  proc http::compl
10150 65 74 65 28 63 6f 6e 66 69 67 29 20 7b 74 65 78  ete(config) {tex
10160 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
10170 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20   pos mod} {.    
10180 20 20 20 20 73 65 74 20 70 72 65 76 20 5b 50 72      set prev [Pr
10190 65 76 69 6f 75 73 57 6f 72 64 20 24 73 74 61 72  eviousWord $star
101a0 74 20 24 6c 69 6e 65 5d 0a 20 20 20 20 20 20 20  t $line].       
101b0 20 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65 76   switch -- $prev
101c0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d   {.            -
101d0 61 63 63 65 70 74 20 20 20 20 20 20 7b 20 72 65  accept      { re
101e0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
101f0 74 73 20 3c 6d 69 6d 65 74 79 70 65 73 3e 5d 20  ts <mimetypes>] 
10200 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 70  }.            -p
10210 72 6f 78 79 68 6f 73 74 20 20 20 7b 20 72 65 74  roxyhost   { ret
10220 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
10230 6d 4c 69 73 74 20 24 74 65 78 74 20 5b 48 6f 73  mList $text [Hos
10240 74 4c 69 73 74 5d 5d 20 7d 0a 20 20 20 20 20 20  tList]] }.      
10250 20 20 20 20 20 20 2d 70 72 6f 78 79 70 6f 72 74        -proxyport
10260 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73     { return [Dis
10270 70 6c 61 79 48 69 6e 74 73 20 3c 6e 75 6d 62 65  playHints <numbe
10280 72 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  r>] }.          
10290 20 20 2d 70 72 6f 78 79 66 69 6c 74 65 72 20 7b    -proxyfilter {
102a0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
102b0 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
102c0 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69  [CommandCompleti
102d0 6f 6e 20 24 74 65 78 74 5d 5d 20 7d 0a 20 20 20  on $text]] }.   
102e0 20 20 20 20 20 20 20 20 20 2d 75 73 65 72 61 67           -userag
102f0 65 6e 74 20 20 20 7b 20 72 65 74 75 72 6e 20 5b  ent   { return [
10300 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 74  DisplayHints <st
10310 72 69 6e 67 3e 5d 20 7d 0a 20 20 20 20 20 20 20  ring>] }.       
10320 20 20 20 20 20 64 65 66 61 75 6c 74 20 20 20 20       default    
10330 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
10340 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70      return [Comp
10350 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65  leteFromList $te
10360 78 74 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20  xt \.           
10370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10380 20 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69   [RemoveUsedOpti
10390 6f 6e 73 20 24 6c 69 6e 65 20 5c 0a 20 20 20 20  ons $line \.    
103a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 2d 61               {-a
103c0 63 63 65 70 74 20 2d 70 72 6f 78 79 68 6f 73 74  ccept -proxyhost
103d0 20 2d 70 72 6f 78 79 70 6f 72 74 0a 20 20 20 20   -proxyport.    
103e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 70                -p
10400 72 6f 78 79 66 69 6c 74 65 72 20 2d 75 73 65 72  roxyfilter -user
10410 61 67 65 6e 74 7d 5d 5d 0a 20 20 20 20 20 20 20  agent}]].       
10420 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
10430 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
10440 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  "".    }..    pr
10450 6f 63 20 68 74 74 70 3a 3a 63 6f 6d 70 6c 65 74  oc http::complet
10460 65 28 67 65 74 75 72 6c 29 20 7b 74 65 78 74 20  e(geturl) {text 
10470 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
10480 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20  os mod} {.      
10490 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73    switch -- $pos
104a0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 31   {.            1
104b0 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20         { return 
104c0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 75  [DisplayHints <u
104d0 72 6c 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  rl>] }.         
104e0 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20     default {.   
104f0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
10500 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73 57   prev [PreviousW
10510 6f 72 64 20 24 73 74 61 72 74 20 24 6c 69 6e 65  ord $start $line
10520 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
10530 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65    switch -- $pre
10540 76 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v {.            
10550 20 20 20 20 20 20 20 20 2d 62 6c 6f 63 6b 73 69          -blocksi
10560 7a 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  ze { return [Dis
10570 70 6c 61 79 48 69 6e 74 73 20 3c 73 69 7a 65 3e  playHints <size>
10580 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
10590 20 20 20 20 20 20 20 20 2d 63 68 61 6e 6e 65 6c          -channel
105a0 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 43 68 61     { return [Cha
105b0 6e 6e 65 6c 49 64 20 24 74 65 78 74 5d 20 7d 0a  nnelId $text] }.
105c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105d0 20 20 20 20 2d 63 6f 6d 6d 61 6e 64 20 20 20 2d      -command   -
105e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
105f0 20 20 20 20 20 2d 68 61 6e 64 6c 65 72 20 20 20       -handler   
10600 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  -.              
10610 20 20 20 20 20 20 2d 70 72 6f 67 72 65 73 73 20        -progress 
10620 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
10630 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10640 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
10650 69 73 74 20 24 74 65 78 74 20 5b 43 6f 6d 6d 61  ist $text [Comma
10660 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 74 65  ndCompletion $te
10670 78 74 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20  xt]].           
10680 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
10690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
106a0 68 65 61 64 65 72 73 20 20 20 7b 20 72 65 74 75  headers   { retu
106b0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
106c0 20 3c 6b 65 79 76 61 6c 75 65 6c 69 73 74 3e 5d   <keyvaluelist>]
106d0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
106e0 20 20 20 20 20 20 20 2d 71 75 65 72 79 20 20 20         -query   
106f0 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70    { return [Disp
10700 6c 61 79 48 69 6e 74 73 20 3c 71 75 65 72 79 3e  layHints <query>
10710 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
10720 20 20 20 20 20 20 20 20 2d 74 69 6d 65 6f 75 74          -timeout
10730 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73     { return [Dis
10740 70 6c 61 79 48 69 6e 74 73 20 3c 6d 69 6c 6c 69  playHints <milli
10750 73 65 63 6f 6e 64 73 3e 5d 20 7d 0a 20 20 20 20  seconds>] }.    
10760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10770 2d 76 61 6c 69 64 61 74 65 20 20 7b 20 72 65 74  -validate  { ret
10780 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f  urn [CompleteBoo
10790 6c 65 61 6e 20 24 74 65 78 74 5d 20 7d 0a 20 20  lean $text] }.  
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107b0 20 20 64 65 66 61 75 6c 74 20 20 20 20 7b 0a 20    default    {. 
107c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43         return [C
107e0 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
107f0 24 74 65 78 74 20 5c 0a 20 20 20 20 20 20 20 20  $text \.        
10800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10810 20 20 20 20 20 20 20 20 20 20 20 20 5b 52 65 6d              [Rem
10820 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24  oveUsedOptions $
10830 6c 69 6e 65 20 5c 0a 20 20 20 20 20 20 20 20 20  line \.         
10840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10860 7b 2d 62 6c 6f 63 6b 73 69 7a 65 20 2d 63 68 61  {-blocksize -cha
10870 6e 6e 65 6c 20 2d 63 6f 6d 6d 61 6e 64 0a 20 20  nnel -command.  
10880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108a0 20 20 20 20 20 20 20 20 2d 68 61 6e 64 6c 65 72          -handler
108b0 20 2d 68 65 61 64 65 72 73 20 2d 70 72 6f 67 72   -headers -progr
108c0 65 73 73 0a 20 20 20 20 20 20 20 20 20 20 20 20  ess.            
108d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 71                -q
108f0 75 65 72 79 20 2d 74 69 6d 65 6f 75 74 20 2d 76  uery -timeout -v
10900 61 6c 69 64 61 74 65 7d 5d 5d 0a 20 20 20 20 20  alidate}]].     
10910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
10920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10930 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d   }.            }
10940 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
10950 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20     return "".   
10960 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 68 74 74   }..    proc htt
10970 70 3a 3a 63 6f 6d 70 6c 65 74 65 28 66 6f 72 6d  p::complete(form
10980 61 74 51 75 65 72 79 29 20 7b 74 65 78 74 20 73  atQuery) {text s
10990 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
109a0 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20  s mod} {.       
109b0 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20   switch -- $pos 
109c0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 31 20  {.            1 
109d0 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b        { return [
109e0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6b 65  DisplayHints <ke
109f0 79 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  y>] }.          
10a00 20 20 32 20 20 20 20 20 20 20 7b 20 72 65 74 75    2       { retu
10a10 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
10a20 20 3c 76 61 6c 75 65 3e 5d 20 7d 0a 20 20 20 20   <value>] }.    
10a30 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20          default 
10a40 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
10a50 20 20 73 77 69 74 63 68 20 5b 65 78 70 72 20 7b    switch [expr {
10a60 24 70 6f 73 20 25 20 32 7d 5d 20 7b 0a 20 20 20  $pos % 2}] {.   
10a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a80 20 30 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73   0 { return [Dis
10a90 70 6c 61 79 48 69 6e 74 73 20 3f 76 61 6c 75 65  playHints ?value
10aa0 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  ?] }.           
10ab0 20 20 20 20 20 20 20 20 20 31 20 7b 20 72 65 74           1 { ret
10ac0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
10ad0 73 20 3f 6b 65 79 3f 5d 20 7d 0a 20 20 20 20 20  s ?key?] }.     
10ae0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
10af0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
10b00 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74     }.        ret
10b10 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20  urn "".    }..  
10b20 20 20 70 72 6f 63 20 68 74 74 70 3a 3a 63 6f 6d    proc http::com
10b30 70 6c 65 74 65 28 72 65 73 65 74 29 20 7b 74 65  plete(reset) {te
10b40 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
10b50 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20  e pos mod} {.   
10b60 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24       switch -- $
10b70 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20  pos {.          
10b80 20 20 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69    1 { return [Di
10b90 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 6f 6b 65  splayHints <toke
10ba0 6e 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  n>] }.          
10bb0 20 20 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69    2 { return [Di
10bc0 73 70 6c 61 79 48 69 6e 74 73 20 3f 77 68 79 3f  splayHints ?why?
10bd0 5d 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ] }.        }.  
10be0 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a        return "".
10bf0 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 74 68 65      }..    # the
10c00 20 75 6e 6b 6e 6f 77 6e 20 70 72 6f 63 20 68 61   unknown proc ha
10c10 6e 64 6c 65 73 20 74 68 65 20 72 65 73 74 0a 20  ndles the rest. 
10c20 20 20 20 23 0a 20 20 20 20 70 72 6f 63 20 68 74     #.    proc ht
10c30 74 70 3a 3a 63 6f 6d 70 6c 65 74 65 28 74 63 6c  tp::complete(tcl
10c40 72 65 61 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65 74  readline_complet
10c50 65 5f 75 6e 6b 6e 6f 77 6e 29 20 7b 74 65 78 74  e_unknown) {text
10c60 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
10c70 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20  pos mod} {.     
10c80 20 20 20 73 65 74 20 63 6d 64 20 5b 4c 69 6e 64     set cmd [Lind
10c90 65 78 20 24 6c 69 6e 65 20 30 5d 0a 20 20 20 20  ex $line 0].    
10ca0 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20      regsub -all 
10cb0 7b 5e 2e 2a 3a 3a 7d 20 24 63 6d 64 20 22 22 20  {^.*::} $cmd "" 
10cc0 63 6d 64 0a 20 20 20 20 20 20 20 20 73 77 69 74  cmd.        swit
10cd0 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20  ch -- $pos {.   
10ce0 20 20 20 20 20 20 20 20 20 31 20 7b 0a 20 20 20           1 {.   
10cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69               swi
10d00 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 20 20  tch -- $cmd {.  
10d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d20 20 20 72 65 73 65 74 20 20 20 2d 0a 20 20 20 20    reset   -.    
10d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d40 77 61 69 74 20 20 20 20 2d 0a 20 20 20 20 20 20  wait    -.      
10d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
10d60 74 61 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20  ta    -.        
10d70 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
10d80 75 73 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20  us  -.          
10d90 20 20 20 20 20 20 20 20 20 20 63 6f 64 65 20 20            code  
10da0 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20    -.            
10db0 20 20 20 20 20 20 20 20 73 69 7a 65 20 20 20 20          size    
10dc0 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  -.              
10dd0 20 20 20 20 20 20 63 6c 65 61 6e 75 70 20 7b 0a        cleanup {.
10de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10df0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
10e00 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 6f  DisplayHints <to
10e10 6b 65 6e 3e 5d 0a 20 20 20 20 20 20 20 20 20 20  ken>].          
10e20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
10e30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
10e40 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
10e50 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65      }.        re
10e60 74 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20  turn "".    }.. 
10e70 20 20 20 23 20 2d 2d 2d 20 45 4e 44 20 4f 46 20     # --- END OF 
10e80 48 54 54 50 20 50 41 43 4b 41 47 45 20 2d 2d 2d  HTTP PACKAGE ---
10e90 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c  ..    proc compl
10ea0 65 74 65 28 69 66 29 20 7b 74 65 78 74 20 73 74  ete(if) {text st
10eb0 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
10ec0 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20   mod} {.        
10ed0 23 20 77 65 20 64 6f 6e 27 74 20 6f 66 66 65 72  # we don't offer
10ee0 20 74 68 65 20 63 6f 6d 70 6c 65 74 69 6f 6e 20   the completion 
10ef0 60 74 68 65 6e 27 3a 0a 20 20 20 20 20 20 20 20  `then':.        
10f00 23 20 69 74 27 73 20 6f 70 74 69 6f 6e 61 6c 2c  # it's optional,
10f10 20 6d 6f 72 65 20 64 69 66 66 69 63 75 6c 74 20   more difficult 
10f20 74 6f 20 70 61 72 73 65 0a 20 20 20 20 20 20 20  to parse.       
10f30 20 23 20 61 6e 64 20 77 68 6f 20 75 73 65 73 20   # and who uses 
10f40 69 74 20 61 6e 79 77 61 79 3f 0a 20 20 20 20 20  it anyway?.     
10f50 20 20 20 23 0a 20 20 20 20 20 20 20 20 73 77 69     #.        swi
10f60 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20  tch -- $pos {.  
10f70 20 20 20 20 20 20 20 20 20 20 31 20 2d 0a 20 20            1 -.  
10f80 20 20 20 20 20 20 20 20 20 20 32 20 7b 0a 20 20            2 {.  
10f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
10fa0 74 75 72 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d  turn [BraceOrCom
10fb0 6d 61 6e 64 20 24 74 65 78 74 20 24 73 74 61 72  mand $text $star
10fc0 74 20 24 65 6e 64 20 24 6c 69 6e 65 20 24 70 6f  t $end $line $po
10fd0 73 20 24 6d 6f 64 5d 0a 20 20 20 20 20 20 20 20  s $mod].        
10fe0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
10ff0 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20    default {.    
11000 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
11010 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73 57 6f  prev [PreviousWo
11020 72 64 20 24 73 74 61 72 74 20 24 6c 69 6e 65 5d  rd $start $line]
11030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11040 20 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65 76   switch -- $prev
11050 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
11060 20 20 20 20 20 20 20 74 68 65 6e 20 20 20 20 2d         then    -
11070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11080 20 20 20 20 20 65 6c 73 65 20 20 20 20 2d 0a 20       else    -. 
11090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110a0 20 20 20 65 6c 73 65 69 66 20 20 7b 0a 20 20 20     elseif  {.   
110b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110c0 20 20 20 20 20 72 65 74 75 72 6e 20 5b 42 72 61       return [Bra
110d0 63 65 4f 72 43 6f 6d 6d 61 6e 64 20 24 74 65 78  ceOrCommand $tex
110e0 74 20 24 73 74 61 72 74 20 5c 0a 20 20 20 20 20  t $start \.     
110f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $
11110 65 6e 64 20 24 6c 69 6e 65 20 24 70 6f 73 20 24  end $line $pos $
11120 6d 6f 64 5d 0a 20 20 20 20 20 20 20 20 20 20 20  mod].           
11130 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
11140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
11150 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20  efault {.       
11160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11170 20 69 66 20 7b 2d 31 20 3d 3d 20 5b 6c 73 65 61   if {-1 == [lsea
11180 72 63 68 20 5b 50 72 6f 70 65 72 4c 69 73 74 20  rch [ProperList 
11190 24 6c 69 6e 65 5d 20 65 6c 73 65 5d 7d 20 7b 0a  $line] else]} {.
111a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
111c0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
111d0 4c 69 73 74 20 24 74 65 78 74 20 7b 65 6c 73 65  List $text {else
111e0 20 65 6c 73 65 69 66 7d 5d 0a 20 20 20 20 20 20   elseif}].      
111f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11200 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
11210 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
11220 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
11230 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
11240 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75    }.        retu
11250 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20  rn "".    }..   
11260 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 69   proc complete(i
11270 6e 63 72 29 20 7b 74 65 78 74 20 73 74 61 72 74  ncr) {text start
11280 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
11290 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 77 69  d} {.        swi
112a0 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20  tch -- $pos {.  
112b0 20 20 20 20 20 20 20 20 20 20 31 20 7b 0a 20 20            1 {.  
112c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
112d0 74 20 6d 61 74 63 68 65 73 20 5b 75 70 6c 65 76  t matches [uplev
112e0 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20  el [info level] 
112f0 69 6e 66 6f 20 76 61 72 73 20 24 7b 6d 6f 64 7d  info vars ${mod}
11300 2a 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *].             
11310 20 20 20 73 65 74 20 69 6e 74 65 67 65 72 73 20     set integers 
11320 22 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  "".             
11330 20 20 20 23 20 63 68 65 63 6b 20 66 6f 72 20 69     # check for i
11340 6e 74 65 67 65 72 73 0a 20 20 20 20 20 20 20 20  ntegers.        
11350 20 20 20 20 20 20 20 20 23 0a 20 20 20 20 20 20          #.      
11360 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
11370 68 20 6d 61 74 63 68 20 24 6d 61 74 63 68 65 73  h match $matches
11380 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
11390 20 20 20 20 20 20 20 69 66 20 7b 5b 75 70 6c 65         if {[uple
113a0 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d  vel [info level]
113b0 20 61 72 72 61 79 20 65 78 69 73 74 73 20 24 6d   array exists $m
113c0 61 74 63 68 5d 7d 20 7b 0a 20 20 20 20 20 20 20  atch]} {.       
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113e0 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 20   continue.      
113f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
11400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11410 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20      if {[regexp 
11420 7b 5e 5b 30 2d 39 5d 2b 24 7d 20 5b 75 70 6c 65  {^[0-9]+$} [uple
11430 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d  vel [info level]
11440 20 73 65 74 20 24 6d 61 74 63 68 5d 5d 7d 20 7b   set $match]]} {
11450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11460 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
11470 20 69 6e 74 65 67 65 72 73 20 24 6d 61 74 63 68   integers $match
11480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11490 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
114a0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
114b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
114c0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
114d0 74 20 24 74 65 78 74 20 24 69 6e 74 65 67 65 72  t $text $integer
114e0 73 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  s].            }
114f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 20 7b  .            2 {
11500 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
11510 48 69 6e 74 73 20 3f 69 6e 63 72 65 6d 65 6e 74  Hints ?increment
11520 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20  ?] }.        }. 
11530 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22         return ""
11540 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63  .    }..    proc
11550 20 63 6f 6d 70 6c 65 74 65 28 69 6e 66 6f 29 20   complete(info) 
11560 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
11570 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
11580 20 20 20 20 20 20 20 20 73 65 74 20 63 6d 64 20          set cmd 
11590 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d  [Lindex $line 1]
115a0 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20  .        switch 
115b0 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20  -- $pos {.      
115c0 20 20 20 20 20 20 31 20 7b 0a 20 20 20 20 20 20        1 {.      
115d0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6d            set cm
115e0 64 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ds {.           
115f0 20 20 20 20 20 20 20 20 20 61 72 67 73 20 62 6f           args bo
11600 64 79 20 63 6d 64 63 6f 75 6e 74 20 63 6f 6d 6d  dy cmdcount comm
11610 61 6e 64 73 20 63 6f 6d 70 6c 65 74 65 20 64 65  ands complete de
11620 66 61 75 6c 74 20 65 78 69 73 74 73 0a 20 20 20  fault exists.   
11630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11640 20 67 6c 6f 62 61 6c 73 20 68 6f 73 74 6e 61 6d   globals hostnam
11650 65 20 6c 65 76 65 6c 20 6c 69 62 72 61 72 79 20  e level library 
11660 6c 6f 61 64 65 64 20 6c 6f 63 61 6c 73 20 6e 61  loaded locals na
11670 6d 65 6f 66 65 78 65 63 75 74 61 62 6c 65 0a 20  meofexecutable. 
11680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11690 20 20 20 70 61 74 63 68 6c 65 76 65 6c 20 70 72     patchlevel pr
116a0 6f 63 73 20 73 63 72 69 70 74 20 73 68 61 72 65  ocs script share
116b0 64 6c 69 62 65 78 74 65 6e 73 69 6f 6e 20 74 63  dlibextension tc
116c0 6c 76 65 72 73 69 6f 6e 20 76 61 72 73 0a 20 20  lversion vars.  
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116f0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
11700 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 24  FromList $text $
11710 63 6d 64 73 5d 0a 20 20 20 20 20 20 20 20 20 20  cmds].          
11720 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
11730 32 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  2 {.            
11740 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 63      switch -- $c
11750 6d 64 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  md {.           
11760 20 20 20 20 20 20 20 20 20 61 72 67 73 20 20 20           args   
11770 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20    -.            
11780 20 20 20 20 20 20 20 20 62 6f 64 79 20 20 20 20          body    
11790 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   -.             
117a0 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 20         default  
117b0 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  -.              
117c0 20 20 20 20 20 20 70 72 6f 63 73 20 20 20 20 7b        procs    {
117d0 20 72 65 74 75 72 6e 20 5b 63 6f 6d 70 6c 65 74   return [complet
117e0 65 28 70 72 6f 63 29 20 24 74 65 78 74 20 30 20  e(proc) $text 0 
117f0 30 20 24 6c 69 6e 65 20 31 20 24 6d 6f 64 5d 20  0 $line 1 $mod] 
11800 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
11810 20 20 20 20 20 20 63 6f 6d 70 6c 65 74 65 20 7b        complete {
11820 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
11830 48 69 6e 74 73 20 3c 63 6f 6d 6d 61 6e 64 3e 5d  Hints <command>]
11840 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
11850 20 20 20 20 20 20 20 6c 65 76 65 6c 20 20 20 20         level    
11860 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
11870 79 48 69 6e 74 73 20 3f 6e 75 6d 62 65 72 3f 5d  yHints ?number?]
11880 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
11890 20 20 20 20 20 20 20 6c 6f 61 64 65 64 20 20 20         loaded   
118a0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
118b0 79 48 69 6e 74 73 20 3f 69 6e 74 65 72 70 3f 5d  yHints ?interp?]
118c0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
118d0 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 73 20         commands 
118e0 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  -.              
118f0 20 20 20 20 20 20 65 78 69 73 74 73 20 20 20 2d        exists   -
11900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11910 20 20 20 20 20 67 6c 6f 62 61 6c 73 20 20 2d 0a       globals  -.
11920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11930 20 20 20 20 6c 6f 63 61 6c 73 20 20 20 2d 0a 20      locals   -. 
11940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11950 20 20 20 76 61 72 73 20 20 20 20 20 7b 0a 20 20     vars     {.  
11960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11970 20 20 20 20 20 20 69 66 20 7b 22 65 78 69 73 74        if {"exist
11980 73 22 20 3d 3d 20 24 63 6d 64 7d 20 7b 0a 20 20  s" == $cmd} {.  
11990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119a0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64 6f            set do
119b0 20 76 61 72 73 0a 20 20 20 20 20 20 20 20 20 20   vars.          
119c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20                } 
119d0 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20  else {.         
119e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119f0 20 20 20 73 65 74 20 64 6f 20 24 63 6d 64 0a 20     set do $cmd. 
11a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a10 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
11a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a30 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
11a40 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
11a50 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  \.              
11a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a70 20 20 20 20 20 20 5b 75 70 6c 65 76 65 6c 20 5b        [uplevel [
11a80 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 69 6e 66 6f  info level] info
11a90 20 24 64 6f 5d 5d 0a 20 20 20 20 20 20 20 20 20   $do]].         
11aa0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
11ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
11ac0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
11ad0 20 20 20 20 20 20 20 20 20 33 20 7b 0a 20 20 20           3 {.   
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69               swi
11af0 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 20 20  tch -- $cmd {.  
11b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b10 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20    default {.    
11b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b30 20 20 20 20 73 65 74 20 70 72 6f 63 20 5b 4c 69      set proc [Li
11b40 6e 64 65 78 20 24 6c 69 6e 65 20 32 5d 0a 20 20  ndex $line 2].  
11b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b60 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f        return [Co
11b70 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
11b80 74 65 78 74 20 5c 0a 20 20 20 20 20 20 20 20 20  text \.         
11b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ba0 20 20 20 20 20 20 20 20 20 20 20 5b 75 70 6c 65             [uple
11bb0 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d  vel [info level]
11bc0 20 69 6e 66 6f 20 61 72 67 73 20 24 70 72 6f 63   info args $proc
11bd0 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]].             
11be0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
11bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66               def
11c00 61 75 6c 74 20 7b 7d 0a 20 20 20 20 20 20 20 20  ault {}.        
11c10 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
11c20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
11c30 20 20 20 20 34 20 7b 0a 20 20 20 20 20 20 20 20      4 {.        
11c40 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d          switch -
11c50 2d 20 24 63 6d 64 20 7b 0a 20 20 20 20 20 20 20  - $cmd {.       
11c60 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66               def
11c70 61 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b 56  ault { return [V
11c80 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 74 65  arCompletion $te
11c90 78 74 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  xt] }.          
11ca0 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
11cb0 74 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20  t {}.           
11cc0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
11cd0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
11ce0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22         return ""
11cf0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63  .    }..    proc
11d00 20 63 6f 6d 70 6c 65 74 65 28 69 6e 74 65 72 70   complete(interp
11d10 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
11d20 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
11d30 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6d  {.        set cm
11d40 64 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20  d [Lindex $line 
11d50 31 5d 0a 20 20 20 20 20 20 20 20 73 77 69 74 63  1].        switc
11d60 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20  h -- $pos {.    
11d70 20 20 20 20 20 20 20 20 31 20 7b 0a 20 20 20 20          1 {.    
11d80 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
11d90 63 6d 64 73 20 7b 0a 20 20 20 20 20 20 20 20 20  cmds {.         
11da0 20 20 20 20 20 20 20 20 20 20 20 61 6c 69 61 73             alias
11db0 20 61 6c 69 61 73 65 73 20 63 72 65 61 74 65 20   aliases create 
11dc0 64 65 6c 65 74 65 20 65 76 61 6c 20 65 78 69 73  delete eval exis
11dd0 74 73 20 65 78 70 6f 73 65 20 68 69 64 65 20 68  ts expose hide h
11de0 69 64 64 65 6e 0a 20 20 20 20 20 20 20 20 20 20  idden.          
11df0 20 20 20 20 20 20 20 20 20 20 69 6e 76 6f 6b 65            invoke
11e00 68 69 64 64 65 6e 20 69 73 73 61 66 65 20 6d 61  hidden issafe ma
11e10 72 6b 74 72 75 73 74 65 64 20 73 68 61 72 65 20  rktrusted share 
11e20 73 6c 61 76 65 73 20 74 61 72 67 65 74 20 74 72  slaves target tr
11e30 61 6e 73 66 65 72 0a 20 20 20 20 20 20 20 20 20  ansfer.         
11e40 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
11e50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11e60 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 74 65  [TryFromList $te
11e70 78 74 20 24 63 6d 64 73 5d 0a 20 20 20 20 20 20  xt $cmds].      
11e80 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
11e90 20 20 20 20 32 20 7b 0a 20 20 20 20 20 20 20 20      2 {.        
11ea0 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d          switch -
11eb0 2d 20 24 63 6d 64 20 7b 0a 20 20 20 20 20 20 20  - $cmd {.       
11ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 72 65               cre
11ed0 61 74 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ate {.          
11ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
11ef0 74 20 63 6d 64 73 20 5b 52 65 6d 6f 76 65 55 73  t cmds [RemoveUs
11f00 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20  edOptions $line 
11f10 7b 2d 73 61 76 65 20 2d 2d 7d 20 7b 2d 2d 7d 5d  {-save --} {--}]
11f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11f30 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c           if {[ll
11f40 65 6e 67 74 68 20 24 63 6d 64 73 5d 7d 20 7b 0a  ength $cmds]} {.
11f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f60 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
11f70 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
11f80 4c 69 73 74 20 24 74 65 78 74 20 22 24 63 6d 64  List $text "$cmd
11f90 73 20 3f 70 61 74 68 3f 22 5d 0a 20 20 20 20 20  s ?path?"].     
11fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fb0 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
11fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fd0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
11fe0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 70 61  DisplayHints ?pa
11ff0 74 68 3f 5d 0a 20 20 20 20 20 20 20 20 20 20 20  th?].           
12000 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
12010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12020 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20     }..          
12030 20 20 20 20 20 20 20 20 20 20 65 76 61 6c 20 20            eval  
12040 20 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20         -.       
12050 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78 69               exi
12060 73 74 73 20 20 20 20 20 20 20 2d 0a 20 20 20 20  sts       -.    
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12080 65 78 70 6f 73 65 20 20 20 20 20 20 20 2d 0a 20  expose       -. 
12090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120a0 20 20 20 68 69 64 65 20 20 20 20 20 20 20 20 20     hide         
120b0 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  -.              
120c0 20 20 20 20 20 20 68 69 64 64 65 6e 20 20 20 20        hidden    
120d0 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20     -.           
120e0 20 20 20 20 20 20 20 20 20 69 6e 76 6f 6b 65 68           invokeh
120f0 69 64 64 65 6e 20 2d 0a 20 20 20 20 20 20 20 20  idden -.        
12100 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b              mark
12110 74 72 75 73 74 65 64 20 20 2d 0a 20 20 20 20 20  trusted  -.     
12120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12130 61 72 67 65 74 20 20 20 20 20 20 20 7b 20 72 65  arget       { re
12140 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
12150 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b 69 6e  omList $text [in
12160 74 65 72 70 20 73 6c 61 76 65 73 5d 5d 20 7d 0a  terp slaves]] }.
12170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12180 20 20 20 20 20 61 6c 69 61 73 65 73 20 2d 0a 20       aliases -. 
12190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121a0 20 20 20 64 65 6c 65 74 65 20 20 2d 0a 20 20 20     delete  -.   
121b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121c0 20 69 73 73 61 66 65 20 20 2d 0a 20 20 20 20 20   issafe  -.     
121d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
121e0 6c 61 76 65 73 20 20 7b 20 72 65 74 75 72 6e 20  laves  { return 
121f0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
12200 74 20 24 74 65 78 74 20 5b 69 6e 74 65 72 70 20  t $text [interp 
12210 73 6c 61 76 65 73 5d 5d 20 7d 0a 0a 20 20 20 20  slaves]] }..    
12220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12230 61 6c 69 61 73 20 20 20 20 2d 0a 20 20 20 20 20  alias    -.     
12240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
12250 68 61 72 65 20 20 20 20 2d 0a 20 20 20 20 20 20  hare    -.      
12260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
12270 61 6e 73 66 65 72 20 7b 20 72 65 74 75 72 6e 20  ansfer { return 
12280 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73  [DisplayHints <s
12290 72 63 50 61 74 68 3e 5d 20 7d 0a 20 20 20 20 20  rcPath>] }.     
122a0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
122b0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
122c0 20 20 20 20 20 20 20 33 20 7b 0a 20 20 20 20 20         3 {.     
122d0 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63             switc
122e0 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 20 20 20 20  h -- $cmd {.    
122f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12300 61 6c 69 61 73 20 7b 20 72 65 74 75 72 6e 20 5b  alias { return [
12310 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 72  DisplayHints <sr
12320 63 43 6d 64 3e 5d 20 7d 0a 0a 20 20 20 20 20 20  cCmd>] }..      
12330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 72                cr
12340 65 61 74 65 20 7b 0a 20 20 20 20 20 20 20 20 20  eate {.         
12350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
12360 65 74 20 63 6d 64 73 20 5b 52 65 6d 6f 76 65 55  et cmds [RemoveU
12370 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65  sedOptions $line
12380 20 7b 2d 73 61 76 65 20 2d 2d 7d 20 7b 2d 2d 7d   {-save --} {--}
12390 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
123a0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c            if {[l
123b0 6c 65 6e 67 74 68 20 24 63 6d 64 73 5d 7d 20 7b  length $cmds]} {
123c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
123d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
123e0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
123f0 6d 4c 69 73 74 20 24 74 65 78 74 20 22 24 63 6d  mList $text "$cm
12400 64 73 20 3f 70 61 74 68 3f 22 5d 0a 20 20 20 20  ds ?path?"].    
12410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12420 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
12430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12440 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
12450 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 70  [DisplayHints ?p
12460 61 74 68 3f 5d 0a 20 20 20 20 20 20 20 20 20 20  ath?].          
12470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
12480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12490 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20      }..         
124a0 20 20 20 20 20 20 20 20 20 20 20 65 76 61 6c 20             eval 
124b0 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70    { return [Disp
124c0 6c 61 79 48 69 6e 74 73 20 3c 61 72 67 3e 5d 20  layHints <arg>] 
124d0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
124e0 20 20 20 20 20 20 64 65 6c 65 74 65 20 7b 20 72        delete { r
124f0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
12500 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b 69  romList $text [i
12510 6e 74 65 72 70 20 73 6c 61 76 65 73 5d 5d 20 7d  nterp slaves]] }
12520 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12530 20 20 20 20 20 20 65 78 70 6f 73 65 20 7b 20 72        expose { r
12540 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
12550 6e 74 73 20 3c 68 69 64 64 65 6e 4e 61 6d 65 3e  nts <hiddenName>
12560 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
12570 20 20 20 20 20 20 20 20 68 69 64 65 20 20 20 7b          hide   {
12580 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
12590 48 69 6e 74 73 20 3c 65 78 70 6f 73 65 64 43 6d  Hints <exposedCm
125a0 64 4e 61 6d 65 3e 5d 20 7d 0a 0a 20 20 20 20 20  dName>] }..     
125b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
125c0 6e 76 6f 6b 65 68 69 64 64 65 6e 20 7b 0a 20 20  nvokehidden {.  
125d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f        return [Co
125f0 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
12600 74 65 78 74 20 5c 0a 20 20 20 20 20 20 20 20 20  text \.         
12610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12620 20 20 20 20 20 20 20 20 20 20 20 7b 3f 2d 67 6c             {?-gl
12630 6f 62 61 6c 3f 20 3c 68 69 64 64 65 6e 43 6d 64  obal? <hiddenCmd
12640 4e 61 6d 65 3e 7d 5d 0a 20 20 20 20 20 20 20 20  Name>}].        
12650 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20              }.. 
12660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12670 20 20 20 74 61 72 67 65 74 20 7b 20 72 65 74 75     target { retu
12680 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
12690 20 3c 61 6c 69 61 73 3e 5d 20 7d 0a 0a 20 20 20   <alias>] }..   
126a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126b0 20 65 78 69 73 74 73 20 20 20 20 20 20 7b 7d 0a   exists      {}.
126c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126d0 20 20 20 20 68 69 64 64 65 6e 20 20 20 20 20 20      hidden      
126e0 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {}.             
126f0 20 20 20 20 20 20 20 6d 61 72 6b 74 72 75 73 74         marktrust
12700 65 64 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20  ed {}.          
12710 20 20 20 20 20 20 20 20 20 20 61 6c 69 61 73 65            aliase
12720 73 20 20 20 20 20 7b 7d 0a 20 20 20 20 20 20 20  s     {}.       
12730 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73 73               iss
12740 61 66 65 20 20 20 20 20 20 7b 7d 0a 20 20 20 20  afe      {}.    
12750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12760 73 6c 61 76 65 73 20 20 20 20 20 20 7b 7d 0a 0a  slaves      {}..
12770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12780 20 20 20 20 73 68 61 72 65 20 20 20 20 2d 0a 20      share    -. 
12790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127a0 20 20 20 74 72 61 6e 73 66 65 72 20 7b 20 72 65     transfer { re
127b0 74 75 72 6e 20 5b 43 68 61 6e 6e 65 6c 49 64 20  turn [ChannelId 
127c0 24 74 65 78 74 5d 20 7d 0a 20 20 20 20 20 20 20  $text] }.       
127d0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
127e0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
127f0 20 20 20 20 20 34 20 7b 0a 20 20 20 20 20 20 20       4 {.       
12800 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20           switch 
12810 2d 2d 20 24 63 6d 64 20 7b 0a 20 20 20 20 20 20  -- $cmd {.      
12820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6c                al
12830 69 61 73 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ias { return [Di
12840 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 72 67  splayHints <targ
12850 65 74 50 61 74 68 3e 5d 20 7d 0a 20 20 20 20 20  etPath>] }.     
12860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
12870 76 61 6c 20 20 7b 20 72 65 74 75 72 6e 20 5b 44  val  { return [D
12880 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 61 72 67  isplayHints ?arg
12890 3f 5d 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20  ?] }..          
128a0 20 20 20 20 20 20 20 20 20 20 69 6e 76 6f 6b 65            invoke
128b0 68 69 64 64 65 6e 20 7b 0a 20 20 20 20 20 20 20  hidden {.       
128c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128d0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
128e0 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
128f0 7b 3c 68 69 64 64 65 6e 43 6d 64 4e 61 6d 65 3e  {<hiddenCmdName>
12900 20 3f 61 72 67 3f 7d 5d 0a 20 20 20 20 20 20 20   ?arg?}].       
12910 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a               }..
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12930 20 20 20 20 63 72 65 61 74 65 20 7b 0a 20 20 20      create {.   
12940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12950 20 20 20 20 20 73 65 74 20 63 6d 64 73 20 5b 52       set cmds [R
12960 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
12970 20 24 6c 69 6e 65 20 7b 2d 73 61 76 65 20 2d 2d   $line {-save --
12980 7d 20 7b 2d 2d 7d 5d 0a 20 20 20 20 20 20 20 20  } {--}].        
12990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129a0 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 63 6d  if {[llength $cm
129b0 64 73 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  ds]} {.         
129c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129d0 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c     return [Compl
129e0 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  eteFromList $tex
129f0 74 20 22 24 63 6d 64 73 20 3f 70 61 74 68 3f 22  t "$cmds ?path?"
12a00 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
12a10 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
12a20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
12a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
12a40 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
12a50 6e 74 73 20 3f 70 61 74 68 3f 5d 0a 20 20 20 20  nts ?path?].    
12a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a70 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
12a80 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20            }..   
12a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12aa0 20 65 78 70 6f 73 65 20 7b 20 72 65 74 75 72 6e   expose { return
12ab0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
12ac0 65 78 70 6f 73 65 64 43 6d 64 4e 61 6d 65 3f 5d  exposedCmdName?]
12ad0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
12ae0 20 20 20 20 20 20 20 68 69 64 65 20 20 20 7b 20         hide   { 
12af0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
12b00 69 6e 74 73 20 3f 68 69 64 64 65 6e 43 6d 64 4e  ints ?hiddenCmdN
12b10 61 6d 65 3f 5d 20 7d 0a 0a 20 20 20 20 20 20 20  ame?] }..       
12b20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68 61               sha
12b30 72 65 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20  re    -.        
12b40 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 6e              tran
12b50 73 66 65 72 20 7b 20 72 65 74 75 72 6e 20 5b 43  sfer { return [C
12b60 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
12b70 24 74 65 78 74 20 5b 69 6e 74 65 72 70 20 73 6c  $text [interp sl
12b80 61 76 65 73 5d 5d 20 7d 0a 20 20 20 20 20 20 20  aves]] }.       
12b90 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
12ba0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
12bb0 20 20 20 20 20 35 20 7b 0a 20 20 20 20 20 20 20       5 {.       
12bc0 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20           switch 
12bd0 2d 2d 20 24 63 6d 64 20 7b 0a 20 20 20 20 20 20  -- $cmd {.      
12be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6c                al
12bf0 69 61 73 20 20 20 20 20 20 20 20 7b 20 72 65 74  ias        { ret
12c00 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
12c10 73 20 3c 74 61 72 67 65 74 43 6d 64 3e 5d 20 7d  s <targetCmd>] }
12c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12c30 20 20 20 20 20 69 6e 76 6f 6b 65 68 69 64 64 65       invokehidde
12c40 6e 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n -.            
12c50 20 20 20 20 20 20 20 20 65 76 61 6c 20 20 20 20          eval    
12c60 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44       { return [D
12c70 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 61 72 67  isplayHints ?arg
12c80 3f 5d 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20  ?] }..          
12c90 20 20 20 20 20 20 20 20 20 20 65 78 70 6f 73 65            expose
12ca0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
12cb0 61 79 48 69 6e 74 73 20 3f 65 78 70 6f 73 65 64  ayHints ?exposed
12cc0 43 6d 64 4e 61 6d 65 3f 5d 20 7d 0a 20 20 20 20  CmdName?] }.    
12cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ce0 68 69 64 65 20 20 20 7b 20 72 65 74 75 72 6e 20  hide   { return 
12cf0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 68  [DisplayHints ?h
12d00 69 64 64 65 6e 43 6d 64 4e 61 6d 65 3f 5d 20 7d  iddenCmdName?] }
12d10 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12d20 20 20 20 20 20 20 73 68 61 72 65 20 20 20 20 2d        share    -
12d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12d40 20 20 20 20 20 74 72 61 6e 73 66 65 72 20 7b 20       transfer { 
12d50 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
12d60 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b  FromList $text [
12d70 69 6e 74 65 72 70 20 73 6c 61 76 65 73 5d 5d 20  interp slaves]] 
12d80 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
12d90 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
12da0 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
12db0 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20      return "".  
12dc0 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f    }..    proc co
12dd0 6d 70 6c 65 74 65 28 6a 6f 69 6e 29 20 7b 74 65  mplete(join) {te
12de0 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
12df0 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20  e pos mod} {.   
12e00 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24       switch -- $
12e10 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20  pos {.          
12e20 20 20 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69    1 { return [Di
12e30 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c 69 73 74  splayHints <list
12e40 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  >] }.           
12e50 20 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73   2 { return [Dis
12e60 70 6c 61 79 48 69 6e 74 73 20 3f 6a 6f 69 6e 53  playHints ?joinS
12e70 74 72 69 6e 67 3f 5d 20 7d 0a 20 20 20 20 20 20  tring?] }.      
12e80 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75    }.        retu
12e90 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20  rn "".    }..   
12ea0 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6c   proc complete(l
12eb0 61 70 70 65 6e 64 29 20 7b 74 65 78 74 20 73 74  append) {text st
12ec0 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
12ed0 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20   mod} {.        
12ee0 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
12ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 31 20 20  .            1  
12f00 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 56       { return [V
12f10 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 74 65  arCompletion $te
12f20 78 74 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  xt] }.          
12f30 20 20 64 65 66 61 75 6c 74 20 7b 20 72 65 74 75    default { retu
12f40 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20  rn [TryFromList 
12f50 24 74 65 78 74 20 3f 76 61 6c 75 65 3f 5d 20 7d  $text ?value?] }
12f60 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
12f70 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20     return "".   
12f80 20 7d 0a 0a 20 20 20 20 23 20 74 68 65 20 66 6f   }..    # the fo
12f90 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 73  llowing routines
12fa0 20 61 72 65 20 64 65 73 63 72 69 62 65 64 20 69   are described i
12fb0 6e 20 74 68 65 0a 20 20 20 20 23 20 60 6c 69 62  n the.    # `lib
12fc0 72 61 72 79 27 20 6d 61 6e 20 70 61 67 65 2e 0a  rary' man page..
12fd0 20 20 20 20 23 20 2d 2d 2d 20 4c 49 42 52 41 52      # --- LIBRAR
12fe0 59 20 2d 2d 2d 0a 0a 20 20 20 20 70 72 6f 63 20  Y ---..    proc 
12ff0 63 6f 6d 70 6c 65 74 65 28 61 75 74 6f 5f 65 78  complete(auto_ex
13000 65 63 6f 6b 29 20 7b 74 65 78 74 20 73 74 61 72  ecok) {text star
13010 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
13020 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 77  od} {.        sw
13030 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20  itch -- $pos {. 
13040 20 20 20 20 20 20 20 20 20 20 20 31 20 7b 20 72             1 { r
13050 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
13060 6e 74 73 20 3c 63 6d 64 3e 5d 20 7d 0a 20 20 20  nts <cmd>] }.   
13070 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72       }.        r
13080 65 74 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a  eturn "".    }..
13090 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74      proc complet
130a0 65 28 61 75 74 6f 5f 6c 6f 61 64 29 20 7b 74 65  e(auto_load) {te
130b0 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
130c0 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20  e pos mod} {.   
130d0 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24       switch -- $
130e0 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20  pos {.          
130f0 20 20 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69    1 { return [Di
13100 73 70 6c 61 79 48 69 6e 74 73 20 3c 63 6d 64 3e  splayHints <cmd>
13110 5d 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ] }.        }.  
13120 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a        return "".
13130 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20      }..    proc 
13140 63 6f 6d 70 6c 65 74 65 28 61 75 74 6f 5f 6d 6b  complete(auto_mk
13150 69 6e 64 65 78 29 20 7b 74 65 78 74 20 73 74 61  index) {text sta
13160 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
13170 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  mod} {.        s
13180 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
13190 20 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20              1   
131a0 20 20 20 20 7b 20 72 65 74 75 72 6e 20 22 22 20      { return "" 
131b0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65  }.            de
131c0 66 61 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b  fault { return [
131d0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 70 61  DisplayHints ?pa
131e0 74 74 65 72 6e 3f 5d 20 7d 0a 20 20 20 20 20 20  ttern?] }.      
131f0 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75    }.        retu
13200 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20  rn "".    }..   
13210 20 23 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65   # proc complete
13220 28 61 75 74 6f 5f 72 65 73 65 74 29 20 7b 74 65  (auto_reset) {te
13230 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
13240 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20  e pos mod} {.   
13250 20 23 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63   # }..    proc c
13260 6f 6d 70 6c 65 74 65 28 74 63 6c 5f 66 69 6e 64  omplete(tcl_find
13270 4c 69 62 72 61 72 79 29 20 7b 74 65 78 74 20 73  Library) {text s
13280 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
13290 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20  s mod} {.       
132a0 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20   switch -- $pos 
132b0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 31 20  {.            1 
132c0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
132d0 79 48 69 6e 74 73 20 3c 62 61 73 65 6e 61 6d 65  yHints <basename
132e0 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  >] }.           
132f0 20 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73   2 { return [Dis
13300 70 6c 61 79 48 69 6e 74 73 20 3c 76 65 72 73 69  playHints <versi
13310 6f 6e 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  on>] }.         
13320 20 20 20 33 20 7b 20 72 65 74 75 72 6e 20 5b 44     3 { return [D
13330 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 70 61 74  isplayHints <pat
13340 63 68 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  ch>] }.         
13350 20 20 20 34 20 7b 20 72 65 74 75 72 6e 20 5b 44     4 { return [D
13360 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 69 6e 69  isplayHints <ini
13370 74 53 63 72 69 70 74 3e 5d 20 7d 0a 20 20 20 20  tScript>] }.    
13380 20 20 20 20 20 20 20 20 35 20 7b 20 72 65 74 75          5 { retu
13390 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
133a0 20 3c 65 6e 56 61 72 4e 61 6d 65 3e 5d 20 7d 0a   <enVarName>] }.
133b0 20 20 20 20 20 20 20 20 20 20 20 20 36 20 7b 20              6 { 
133c0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
133d0 69 6e 74 73 20 3c 76 61 72 4e 61 6d 65 3e 5d 20  ints <varName>] 
133e0 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
133f0 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20      return "".  
13400 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f    }..    proc co
13410 6d 70 6c 65 74 65 28 70 61 72 72 61 79 29 20 7b  mplete(parray) {
13420 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
13430 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20  ine pos mod} {. 
13440 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
13450 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20   $pos {.        
13460 20 20 20 20 31 20 7b 0a 20 20 20 20 20 20 20 20      1 {.        
13470 20 20 20 20 20 20 20 20 73 65 74 20 76 61 72 73          set vars
13480 20 5b 75 70 6c 65 76 65 6c 20 5b 69 6e 66 6f 20   [uplevel [info 
13490 6c 65 76 65 6c 5d 20 69 6e 66 6f 20 76 61 72 73  level] info vars
134a0 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
134b0 20 20 66 6f 72 65 61 63 68 20 76 61 72 20 24 76    foreach var $v
134c0 61 72 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ars {.          
134d0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 75            if {[u
134e0 70 6c 65 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76  plevel [info lev
134f0 65 6c 5d 20 61 72 72 61 79 20 65 78 69 73 74 73  el] array exists
13500 20 24 76 61 72 5d 7d 20 7b 0a 20 20 20 20 20 20   $var]} {.      
13510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13520 20 20 6c 61 70 70 65 6e 64 20 6d 61 74 63 68 65    lappend matche
13530 73 20 24 76 61 72 0a 20 20 20 20 20 20 20 20 20  s $var.         
13540 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
13550 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
13560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
13570 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
13580 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 24 6d  romList $text $m
13590 61 74 63 68 65 73 5d 0a 20 20 20 20 20 20 20 20  atches].        
135a0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
135b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
135c0 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f  ".    }..    pro
135d0 63 20 63 6f 6d 70 6c 65 74 65 28 74 63 6c 5f 65  c complete(tcl_e
135e0 6e 64 4f 66 57 6f 72 64 29 20 7b 74 65 78 74 20  ndOfWord) {text 
135f0 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
13600 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20  os mod} {.      
13610 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73    switch -- $pos
13620 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 31   {.            1
13630 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
13640 61 79 48 69 6e 74 73 20 3c 73 74 72 3e 5d 20 7d  ayHints <str>] }
13650 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 20 7b  .            2 {
13660 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
13670 48 69 6e 74 73 20 3c 73 74 61 72 74 3e 5d 20 7d  Hints <start>] }
13680 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
13690 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20     return "".   
136a0 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d   }..    proc com
136b0 70 6c 65 74 65 28 74 63 6c 5f 73 74 61 72 74 4f  plete(tcl_startO
136c0 66 4e 65 78 74 57 6f 72 64 29 20 7b 74 65 78 74  fNextWord) {text
136d0 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
136e0 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20  pos mod} {.     
136f0 20 20 20 72 65 74 75 72 6e 20 5b 63 6f 6d 70 6c     return [compl
13700 65 74 65 28 74 63 6c 5f 65 6e 64 4f 66 57 6f 72  ete(tcl_endOfWor
13710 64 29 20 24 74 65 78 74 20 24 73 74 61 72 74 20  d) $text $start 
13720 24 65 6e 64 20 24 6c 69 6e 65 20 24 70 6f 73 20  $end $line $pos 
13730 24 6d 6f 64 5d 0a 20 20 20 20 7d 0a 0a 20 20 20  $mod].    }..   
13740 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74   proc complete(t
13750 63 6c 5f 73 74 61 72 74 4f 66 50 72 65 76 69 6f  cl_startOfPrevio
13760 75 73 57 6f 72 64 29 20 7b 74 65 78 74 20 73 74  usWord) {text st
13770 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
13780 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20   mod} {.        
13790 72 65 74 75 72 6e 20 5b 63 6f 6d 70 6c 65 74 65  return [complete
137a0 28 74 63 6c 5f 65 6e 64 4f 66 57 6f 72 64 29 20  (tcl_endOfWord) 
137b0 24 74 65 78 74 20 24 73 74 61 72 74 20 24 65 6e  $text $start $en
137c0 64 20 24 6c 69 6e 65 20 24 70 6f 73 20 24 6d 6f  d $line $pos $mo
137d0 64 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  d].    }..    pr
137e0 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74 63 6c 5f  oc complete(tcl_
137f0 77 6f 72 64 42 72 65 61 6b 41 66 74 65 72 29 20  wordBreakAfter) 
13800 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
13810 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
13820 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
13830 63 6f 6d 70 6c 65 74 65 28 74 63 6c 5f 65 6e 64  complete(tcl_end
13840 4f 66 57 6f 72 64 29 20 24 74 65 78 74 20 24 73  OfWord) $text $s
13850 74 61 72 74 20 24 65 6e 64 20 24 6c 69 6e 65 20  tart $end $line 
13860 24 70 6f 73 20 24 6d 6f 64 5d 0a 20 20 20 20 7d  $pos $mod].    }
13870 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c  ..    proc compl
13880 65 74 65 28 74 63 6c 5f 77 6f 72 64 42 72 65 61  ete(tcl_wordBrea
13890 6b 42 65 66 6f 72 65 29 20 7b 74 65 78 74 20 73  kBefore) {text s
138a0 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
138b0 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20  s mod} {.       
138c0 20 72 65 74 75 72 6e 20 5b 63 6f 6d 70 6c 65 74   return [complet
138d0 65 28 74 63 6c 5f 65 6e 64 4f 66 57 6f 72 64 29  e(tcl_endOfWord)
138e0 20 24 74 65 78 74 20 24 73 74 61 72 74 20 24 65   $text $start $e
138f0 6e 64 20 24 6c 69 6e 65 20 24 70 6f 73 20 24 6d  nd $line $pos $m
13900 6f 64 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  od].    }..    #
13910 20 2d 2d 2d 20 45 4e 44 20 4f 46 20 60 4c 49 42   --- END OF `LIB
13920 52 41 52 59 27 20 2d 2d 2d 0a 0a 20 20 20 20 70  RARY' ---..    p
13930 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6c 69 6e  roc complete(lin
13940 64 65 78 29 20 7b 74 65 78 74 20 73 74 61 72 74  dex) {text start
13950 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
13960 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 77 69  d} {.        swi
13970 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20  tch -- $pos {.  
13980 20 20 20 20 20 20 20 20 20 20 31 20 7b 20 72 65            1 { re
13990 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
139a0 74 73 20 3c 6c 69 73 74 3e 5d 20 7d 0a 20 20 20  ts <list>] }.   
139b0 20 20 20 20 20 20 20 20 20 32 20 7b 20 72 65 74           2 { ret
139c0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
139d0 73 20 3c 69 6e 64 65 78 3e 5d 20 7d 0a 20 20 20  s <index>] }.   
139e0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72       }.        r
139f0 65 74 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a  eturn "".    }..
13a00 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74      proc complet
13a10 65 28 6c 69 6e 73 65 72 74 29 20 7b 74 65 78 74  e(linsert) {text
13a20 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
13a30 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20  pos mod} {.     
13a40 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f     switch -- $po
13a50 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s {.            
13a60 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  1 { return [Disp
13a70 6c 61 79 48 69 6e 74 73 20 3c 6c 69 73 74 3e 5d  layHints <list>]
13a80 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32   }.            2
13a90 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
13aa0 61 79 48 69 6e 74 73 20 3c 69 6e 64 65 78 3e 5d  ayHints <index>]
13ab0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 33   }.            3
13ac0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
13ad0 61 79 48 69 6e 74 73 20 3c 65 6c 65 6d 65 6e 74  ayHints <element
13ae0 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  >] }.           
13af0 20 64 65 66 61 75 6c 74 20 7b 20 72 65 74 75 72   default { retur
13b00 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
13b10 3f 65 6c 65 6d 65 6e 74 3f 5d 20 7d 0a 20 20 20  ?element?] }.   
13b20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72       }.        r
13b30 65 74 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a  eturn "".    }..
13b40 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74      proc complet
13b50 65 28 6c 69 73 74 29 20 7b 74 65 78 74 20 73 74  e(list) {text st
13b60 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
13b70 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20   mod} {.        
13b80 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
13b90 69 6e 74 73 20 3f 61 72 67 3f 5d 0a 20 20 20 20  ints ?arg?].    
13ba0 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70  }..    proc comp
13bb0 6c 65 74 65 28 6c 6c 65 6e 67 74 68 29 20 7b 74  lete(llength) {t
13bc0 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
13bd0 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20  ne pos mod} {.  
13be0 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
13bf0 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20  $pos {.         
13c00 20 20 20 31 20 7b 0a 20 20 20 20 20 20 20 20 20     1 {.         
13c10 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 44         return [D
13c20 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c 69 73  isplayHints <lis
13c30 74 3e 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t>].            
13c40 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
13c50 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20      return "".  
13c60 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f    }..    proc co
13c70 6d 70 6c 65 74 65 28 6c 6f 61 64 29 20 7b 74 65  mplete(load) {te
13c80 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
13c90 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20  e pos mod} {.   
13ca0 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24       switch -- $
13cb0 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20  pos {.          
13cc0 20 20 31 20 7b 0a 20 20 20 20 20 20 20 20 20 20    1 {.          
13cd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 3b        return "";
13ce0 20 23 20 66 69 6c 65 6e 61 6d 65 0a 20 20 20 20   # filename.    
13cf0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
13d00 20 20 20 20 20 20 32 20 7b 0a 20 20 20 20 20 20        2 {.      
13d10 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
13d20 6c 6c 65 6e 67 74 68 20 24 6d 6f 64 5d 7d 20 7b  llength $mod]} {
13d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13d40 20 20 20 20 20 72 65 74 75 72 6e 20 5b 44 69 73       return [Dis
13d50 70 6c 61 79 48 69 6e 74 73 20 3f 70 61 63 6b 61  playHints ?packa
13d60 67 65 4e 61 6d 65 3f 5d 0a 20 20 20 20 20 20 20  geName?].       
13d70 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
13d80 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
13d90 20 20 20 20 20 33 20 7b 0a 20 20 20 20 20 20 20       3 {.       
13da0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 6c           if {![l
13db0 6c 65 6e 67 74 68 20 24 6d 6f 64 5d 7d 20 7b 0a  length $mod]} {.
13dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dd0 20 20 20 20 72 65 74 75 72 6e 20 5b 44 69 73 70      return [Disp
13de0 6c 61 79 48 69 6e 74 73 20 3f 69 6e 74 65 72 70  layHints ?interp
13df0 3f 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?].             
13e00 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
13e10 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
13e20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20       return "". 
13e30 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63     }..    proc c
13e40 6f 6d 70 6c 65 74 65 28 6c 72 61 6e 67 65 29 20  omplete(lrange) 
13e50 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
13e60 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
13e70 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d          switch -
13e80 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20  - $pos {.       
13e90 20 20 20 20 20 31 20 7b 20 72 65 74 75 72 6e 20       1 { return 
13ea0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c  [DisplayHints <l
13eb0 69 73 74 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20  ist>] }.        
13ec0 20 20 20 20 32 20 7b 20 72 65 74 75 72 6e 20 5b      2 { return [
13ed0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 66 69  DisplayHints <fi
13ee0 72 73 74 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20  rst>] }.        
13ef0 20 20 20 20 33 20 7b 20 72 65 74 75 72 6e 20 5b      3 { return [
13f00 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c 61  DisplayHints <la
13f10 73 74 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 7d  st>] }.        }
13f20 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
13f30 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  "".    }..    pr
13f40 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6c 72 65 70  oc complete(lrep
13f50 6c 61 63 65 29 20 7b 74 65 78 74 20 73 74 61 72  lace) {text star
13f60 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
13f70 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 77  od} {.        sw
13f80 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20  itch -- $pos {. 
13f90 20 20 20 20 20 20 20 20 20 20 20 31 20 7b 20 72             1 { r
13fa0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
13fb0 6e 74 73 20 3c 6c 69 73 74 3e 5d 20 7d 0a 20 20  nts <list>] }.  
13fc0 20 20 20 20 20 20 20 20 20 20 32 20 7b 20 72 65            2 { re
13fd0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
13fe0 74 73 20 3c 66 69 72 73 74 3e 5d 20 7d 0a 20 20  ts <first>] }.  
13ff0 20 20 20 20 20 20 20 20 20 20 33 20 7b 20 72 65            3 { re
14000 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
14010 74 73 20 3c 6c 61 73 74 3e 5d 20 7d 0a 20 20 20  ts <last>] }.   
14020 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74           default
14030 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
14040 61 79 48 69 6e 74 73 20 3f 65 6c 65 6d 65 6e 74  ayHints ?element
14050 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20  ?] }.        }. 
14060 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22         return ""
14070 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63  .    }..    proc
14080 20 63 6f 6d 70 6c 65 74 65 28 6c 73 65 61 72 63   complete(lsearc
14090 68 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  h) {text start e
140a0 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
140b0 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 6f   {.        set o
140c0 70 74 69 6f 6e 73 20 7b 2d 65 78 61 63 74 20 2d  ptions {-exact -
140d0 67 6c 6f 62 20 2d 72 65 67 65 78 70 7d 0a 20 20  glob -regexp}.  
140e0 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
140f0 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20  $pos {.         
14100 20 20 20 31 20 7b 0a 20 20 20 20 20 20 20 20 20     1 {.         
14110 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43         return [C
14120 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
14130 24 74 65 78 74 20 22 24 6f 70 74 69 6f 6e 73 20  $text "$options 
14140 3c 6c 69 73 74 3e 22 5d 0a 20 20 20 20 20 20 20  <list>"].       
14150 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
14160 20 20 20 32 20 2d 0a 20 20 20 20 20 20 20 20 20     2 -.         
14170 20 20 20 33 20 2d 0a 20 20 20 20 20 20 20 20 20     3 -.         
14180 20 20 20 34 20 7b 0a 20 20 20 20 20 20 20 20 20     4 {.         
14190 20 20 20 20 20 20 20 73 65 74 20 73 75 62 20 5b         set sub [
141a0 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a  Lindex $line 1].
141b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141c0 69 66 20 7b 2d 31 20 21 3d 20 5b 6c 73 65 61 72  if {-1 != [lsear
141d0 63 68 20 24 6f 70 74 69 6f 6e 73 20 24 73 75 62  ch $options $sub
141e0 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ]} {.           
141f0 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 70 6f           incr po
14200 73 20 2d 31 0a 20 20 20 20 20 20 20 20 20 20 20  s -1.           
14210 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
14220 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
14230 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20   $pos {.        
14240 20 20 20 20 20 20 20 20 20 20 20 20 31 20 7b 20              1 { 
14250 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
14260 69 6e 74 73 20 3c 6c 69 73 74 3e 5d 20 7d 0a 20  ints <list>] }. 
14270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14280 20 20 20 32 20 7b 20 72 65 74 75 72 6e 20 5b 44     2 { return [D
14290 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 70 61 74  isplayHints <pat
142a0 74 65 72 6e 3e 5d 20 7d 0a 20 20 20 20 20 20 20  tern>] }.       
142b0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
142c0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
142d0 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   }.        retur
142e0 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20  n "".    }..    
142f0 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6c 73  proc complete(ls
14300 6f 72 74 29 20 7b 74 65 78 74 20 73 74 61 72 74  ort) {text start
14310 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
14320 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  d} {.        set
14330 20 6f 70 74 69 6f 6e 73 20 5b 52 65 6d 6f 76 65   options [Remove
14340 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e  UsedOptions $lin
14350 65 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  e \.            
14360 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 2d 61               {-a
14370 73 63 69 69 20 2d 64 69 63 74 69 6f 6e 61 72 79  scii -dictionary
14380 20 2d 69 6e 74 65 67 65 72 20 2d 72 65 61 6c 20   -integer -real 
14390 2d 63 6f 6d 6d 61 6e 64 0a 20 20 20 20 20 20 20  -command.       
143a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143b0 20 20 20 2d 69 6e 63 72 65 61 73 69 6e 67 20 2d     -increasing -
143c0 64 65 63 72 65 61 73 69 6e 67 20 2d 69 6e 64 65  decreasing -inde
143d0 78 20 3c 6c 69 73 74 3e 7d 5d 0a 20 20 20 20 20  x <list>}].     
143e0 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f     switch -- $po
143f0 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s {.            
14400 31 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e  1       { return
14410 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
14420 73 74 20 24 74 65 78 74 20 24 6f 70 74 69 6f 6e  st $text $option
14430 73 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  s] }.           
14440 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20   default {.     
14450 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63             switc
14460 68 20 2d 2d 20 5b 50 72 65 76 69 6f 75 73 57 6f  h -- [PreviousWo
14470 72 64 20 24 73 74 61 72 74 20 24 6c 69 6e 65 5d  rd $start $line]
14480 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
14490 20 20 20 20 20 20 20 2d 63 6f 6d 6d 61 6e 64 20         -command 
144a0 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
144b0 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  teFromList $text
144c0 20 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74   [CommandComplet
144d0 69 6f 6e 20 24 74 65 78 74 5d 5d 20 7d 0a 20 20  ion $text]] }.  
144e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144f0 20 20 2d 69 6e 64 65 78 20 20 20 7b 20 72 65 74    -index   { ret
14500 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
14510 73 20 3c 69 6e 64 65 78 3e 5d 20 7d 0a 20 20 20  s <index>] }.   
14520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14530 20 64 65 66 61 75 6c 74 20 20 7b 20 72 65 74 75   default  { retu
14540 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
14550 4c 69 73 74 20 24 74 65 78 74 20 24 6f 70 74 69  List $text $opti
14560 6f 6e 73 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  ons] }.         
14570 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
14580 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
14590 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
145a0 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20  "".    }..    # 
145b0 2d 2d 2d 20 4d 53 47 43 41 54 20 50 41 43 4b 41  --- MSGCAT PACKA
145c0 47 45 20 2d 2d 2d 0a 0a 20 20 20 20 23 20 63 72  GE ---..    # cr
145d0 65 61 74 65 20 61 20 6d 73 67 63 61 74 20 6e 61  eate a msgcat na
145e0 6d 65 73 70 61 63 65 20 69 6e 73 69 64 65 0a 20  mespace inside. 
145f0 20 20 20 23 20 74 63 6c 72 65 61 64 6c 69 6e 65     # tclreadline
14600 20 61 6e 64 20 69 6d 70 6f 72 74 20 73 6f 6d 65   and import some
14610 20 63 6f 6d 6d 61 6e 64 73 2e 0a 20 20 20 20 23   commands..    #
14620 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65  .    namespace e
14630 76 61 6c 20 6d 73 67 63 61 74 20 7b 0a 20 20 20  val msgcat {.   
14640 20 20 20 20 20 63 61 74 63 68 20 7b 6e 61 6d 65       catch {name
14650 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 74  space import ::t
14660 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 44 69 73 70  clreadline::Disp
14670 6c 61 79 48 69 6e 74 73 7d 0a 20 20 20 20 7d 0a  layHints}.    }.
14680 0a 20 20 20 20 70 72 6f 63 20 6d 73 67 63 61 74  .    proc msgcat
14690 3a 3a 63 6f 6d 70 6c 65 74 65 28 6d 63 29 20 7b  ::complete(mc) {
146a0 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
146b0 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20  ine pos mod} {. 
146c0 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
146d0 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20   $pos {.        
146e0 20 20 20 20 31 20 7b 20 72 65 74 75 72 6e 20 5b      1 { return [
146f0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 72  DisplayHints <sr
14700 63 2d 73 74 72 69 6e 67 3e 5d 20 7d 0a 20 20 20  c-string>] }.   
14710 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72       }.        r
14720 65 74 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a  eturn "".    }..
14730 20 20 20 20 70 72 6f 63 20 6d 73 67 63 61 74 3a      proc msgcat:
14740 3a 63 6f 6d 70 6c 65 74 65 28 6d 63 6c 6f 63 61  :complete(mcloca
14750 6c 65 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  le) {text start 
14760 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
14770 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74  } {.        swit
14780 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20  ch -- $pos {.   
14790 20 20 20 20 20 20 20 20 20 31 20 7b 20 72 65 74           1 { ret
147a0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
147b0 73 20 3f 6e 65 77 4c 6f 63 61 6c 65 3f 5d 20 7d  s ?newLocale?] }
147c0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
147d0 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20     return "".   
147e0 20 7d 0a 0a 20 20 20 20 23 20 70 72 6f 63 20 6d   }..    # proc m
147f0 73 67 63 61 74 3a 3a 63 6f 6d 70 6c 65 74 65 28  sgcat::complete(
14800 6d 63 70 72 65 66 65 72 65 6e 63 65 73 29 20 7b  mcpreferences) {
14810 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
14820 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20  ine pos mod} {. 
14830 20 20 20 23 20 7d 0a 0a 20 20 20 20 70 72 6f 63     # }..    proc
14840 20 6d 73 67 63 61 74 3a 3a 63 6f 6d 70 6c 65 74   msgcat::complet
14850 65 28 6d 63 6c 6f 61 64 29 20 7b 74 65 78 74 20  e(mcload) {text 
14860 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
14870 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20  os mod} {.      
14880 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73    switch -- $pos
14890 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 31   {.            1
148a0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
148b0 61 79 48 69 6e 74 73 20 3c 64 69 72 6e 61 6d 65  ayHints <dirname
148c0 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20  >] }.        }. 
148d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22         return ""
148e0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63  .    }..    proc
148f0 20 6d 73 67 63 61 74 3a 3a 63 6f 6d 70 6c 65 74   msgcat::complet
14900 65 28 6d 63 73 65 74 29 20 7b 74 65 78 74 20 73  e(mcset) {text s
14910 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
14920 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20  s mod} {.       
14930 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20   switch -- $pos 
14940 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 31 20  {.            1 
14950 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
14960 79 48 69 6e 74 73 20 3c 6c 6f 63 61 6c 65 3e 5d  yHints <locale>]
14970 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32   }.            2
14980 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
14990 61 79 48 69 6e 74 73 20 3c 73 72 63 2d 73 74 72  ayHints <src-str
149a0 69 6e 67 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20  ing>] }.        
149b0 20 20 20 20 33 20 7b 20 72 65 74 75 72 6e 20 5b      3 { return [
149c0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 74 72  DisplayHints ?tr
149d0 61 6e 73 6c 61 74 65 2d 73 74 72 69 6e 67 3f 5d  anslate-string?]
149e0 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
149f0 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20       return "". 
14a00 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 6d     }..    proc m
14a10 73 67 63 61 74 3a 3a 63 6f 6d 70 6c 65 74 65 28  sgcat::complete(
14a20 6d 63 75 6e 6b 6e 6f 77 6e 29 20 7b 74 65 78 74  mcunknown) {text
14a30 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
14a40 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20  pos mod} {.     
14a50 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f     switch -- $po
14a60 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s {.            
14a70 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  1 { return [Disp
14a80 6c 61 79 48 69 6e 74 73 20 3c 6c 6f 63 61 6c 65  layHints <locale
14a90 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  >] }.           
14aa0 20 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73   2 { return [Dis
14ab0 70 6c 61 79 48 69 6e 74 73 20 3c 73 72 63 2d 73  playHints <src-s
14ac0 74 72 69 6e 67 3e 5d 20 7d 0a 20 20 20 20 20 20  tring>] }.      
14ad0 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75    }.        retu
14ae0 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20  rn "".    }..   
14af0 20 23 20 2d 2d 2d 20 45 4e 44 20 4f 46 20 4d 53   # --- END OF MS
14b00 47 43 41 54 20 50 41 43 4b 41 47 45 20 2d 2d 2d  GCAT PACKAGE ---
14b10 0a 0a 20 20 20 20 23 20 54 4f 44 4f 20 69 6d 70  ..    # TODO imp
14b20 6f 72 74 20 21 20 2d 66 6f 72 63 65 0a 20 20 20  ort ! -force.   
14b30 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6e   proc complete(n
14b40 61 6d 65 73 70 61 63 65 29 20 7b 74 65 78 74 20  amespace) {text 
14b50 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
14b60 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20  os mod} {.      
14b70 20 20 23 20 54 4f 44 4f 20 64 6f 73 6e 27 74 20    # TODO dosn't 
14b80 77 6f 72 6b 20 3f 3f 3f 0a 20 20 20 20 20 20 20  work ???.       
14b90 20 73 65 74 20 73 70 61 63 65 5f 6d 61 74 63 68   set space_match
14ba0 65 73 20 5b 6e 61 6d 65 73 70 61 63 65 20 63 68  es [namespace ch
14bb0 69 6c 64 72 65 6e 20 3a 3a 20 5b 73 74 72 69 6e  ildren :: [strin
14bc0 67 20 74 72 69 6d 20 24 7b 6d 6f 64 7d 2a 5d 5d  g trim ${mod}*]]
14bd0 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6d 64  .        set cmd
14be0 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31   [Lindex $line 1
14bf0 5d 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68  ].        switch
14c00 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20   -- $pos {.     
14c10 20 20 20 20 20 20 20 31 20 7b 0a 20 20 20 20 20         1 {.     
14c20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63             set c
14c30 6d 64 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20  mds {.          
14c40 20 20 20 20 20 20 20 20 20 20 63 68 69 6c 64 72            childr
14c50 65 6e 20 63 6f 64 65 20 63 75 72 72 65 6e 74 20  en code current 
14c60 64 65 6c 65 74 65 20 65 76 61 6c 20 65 78 70 6f  delete eval expo
14c70 72 74 20 66 6f 72 67 65 74 0a 20 20 20 20 20 20  rt forget.      
14c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d                im
14c90 70 6f 72 74 20 69 6e 73 63 6f 70 65 20 6f 72 69  port inscope ori
14ca0 67 69 6e 20 70 61 72 65 6e 74 20 71 75 61 6c 69  gin parent quali
14cb0 66 69 65 72 73 20 74 61 69 6c 20 77 68 69 63 68  fiers tail which
14cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14cd0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
14ce0 20 20 20 72 65 74 75 72 6e 20 5b 54 72 79 46 72     return [TryFr
14cf0 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 24 63 6d  omList $text $cm
14d00 64 73 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds].            
14d10 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 20  }.            2 
14d20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
14d30 20 20 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64    switch -- $cmd
14d40 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
14d50 20 20 20 20 20 20 20 63 68 69 6c 64 72 65 6e 20         children 
14d60 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20    -.            
14d70 20 20 20 20 20 20 20 20 64 65 6c 65 74 65 20 20          delete  
14d80 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20     -.           
14d90 20 20 20 20 20 20 20 20 20 65 76 61 6c 20 20 20           eval   
14da0 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20      -.          
14db0 20 20 20 20 20 20 20 20 20 20 69 6e 73 63 6f 70            inscop
14dc0 65 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20  e    -.         
14dd0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 67 65             forge
14de0 74 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20  t     -.        
14df0 20 20 20 20 20 20 20 20 20 20 20 20 70 61 72 65              pare
14e00 6e 74 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20  nt     -.       
14e10 20 20 20 20 20 20 20 20 20 20 20 20 20 71 75 61               qua
14e20 6c 69 66 69 65 72 73 20 2d 0a 20 20 20 20 20 20  lifiers -.      
14e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 61                ta
14e40 69 6c 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  il       {.     
14e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e60 20 20 20 72 65 67 73 75 62 20 7b 5e 28 5b 5e 3a     regsub {^([^:
14e70 5d 29 7d 20 24 6d 6f 64 20 7b 3a 3a 5c 31 7d 20  ])} $mod {::\1} 
14e80 6d 6f 64 3b 20 23 20 66 75 6c 6c 20 71 75 61 6c  mod; # full qual
14e90 2e 20 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20  . name.         
14ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
14eb0 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69  eturn [TryFromLi
14ec0 73 74 20 24 6d 6f 64 20 24 73 70 61 63 65 5f 6d  st $mod $space_m
14ed0 61 74 63 68 65 73 5d 0a 20 20 20 20 20 20 20 20  atches].        
14ee0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
14ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f00 20 20 63 6f 64 65 20 20 20 20 20 20 20 7b 20 72    code       { r
14f10 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
14f20 6e 74 73 20 3c 73 63 72 69 70 74 3e 20 5d 20 7d  nts <script> ] }
14f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14f40 20 20 20 20 20 63 75 72 72 65 6e 74 20 20 20 20       current    
14f50 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {}.             
14f60 20 20 20 20 20 20 20 65 78 70 6f 72 74 20 20 20         export   
14f70 20 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70    { return [Comp
14f80 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65  leteFromList $te
14f90 78 74 20 7b 2d 63 6c 65 61 72 20 3f 70 61 74 74  xt {-clear ?patt
14fa0 65 72 6e 3f 7d 5d 20 7d 0a 20 20 20 20 20 20 20  ern?}] }.       
14fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
14fc0 6f 72 74 20 20 20 20 20 7b 0a 20 20 20 20 20 20  ort     {.      
14fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fe0 20 20 69 66 20 7b 22 2d 22 20 21 3d 20 5b 73 74    if {"-" != [st
14ff0 72 69 6e 67 20 69 6e 64 65 78 20 24 6d 6f 64 20  ring index $mod 
15000 30 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  0]} {.          
15010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15020 20 20 72 65 67 73 75 62 20 7b 5e 28 5b 5e 3a 5d    regsub {^([^:]
15030 29 7d 20 24 6d 6f 64 20 7b 3a 3a 5c 31 7d 20 6d  )} $mod {::\1} m
15040 6f 64 3b 20 23 20 66 75 6c 6c 20 71 75 61 6c 2e  od; # full qual.
15050 20 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20   name.          
15060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
15070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15080 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
15090 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
150a0 20 24 6d 6f 64 20 22 2d 66 6f 72 63 65 20 24 73   $mod "-force $s
150b0 70 61 63 65 5f 6d 61 74 63 68 65 73 22 5d 0a 20  pace_matches"]. 
150c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150d0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
150e0 20 20 20 20 20 20 20 20 20 6f 72 69 67 69 6e 20           origin 
150f0 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69      { return [Di
15100 73 70 6c 61 79 48 69 6e 74 73 20 3c 63 6f 6d 6d  splayHints <comm
15110 61 6e 64 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20  and>] }.        
15120 20 20 20 20 20 20 20 20 20 20 20 20 23 20 74 61              # ta
15130 69 6c 20 20 20 20 20 20 20 7b 20 72 65 74 75 72  il       { retur
15140 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
15150 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 20 20 20 20  <string>] }.    
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15170 77 68 69 63 68 20 20 20 20 20 20 7b 20 72 65 74  which      { ret
15180 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
15190 6d 4c 69 73 74 20 24 6d 6f 64 20 7b 2d 63 6f 6d  mList $mod {-com
151a0 6d 61 6e 64 20 2d 76 61 72 69 61 62 6c 65 20 3c  mand -variable <
151b0 6e 61 6d 65 3e 7d 5d 20 7d 0a 20 20 20 20 20 20  name>}] }.      
151c0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
151d0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
151e0 20 20 20 20 20 20 33 20 7b 0a 20 20 20 20 20 20        3 {.      
151f0 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68            switch
15200 20 2d 2d 20 24 63 6d 64 20 7b 0a 20 20 20 20 20   -- $cmd {.     
15210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
15220 68 69 6c 64 72 65 6e 20 2d 0a 20 20 20 20 20 20  hildren -.      
15230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78                ex
15240 70 6f 72 74 20 20 20 2d 0a 20 20 20 20 20 20 20  port   -.       
15250 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
15260 67 65 74 20 20 20 2d 0a 20 20 20 20 20 20 20 20  get   -.        
15270 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70 6f              impo
15280 72 74 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44  rt   { return [D
15290 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 70 61 74  isplayHints ?pat
152a0 74 65 72 6e 3f 5d 20 7d 0a 20 20 20 20 20 20 20  tern?] }.       
152b0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 6c               del
152c0 65 74 65 20 20 20 7b 20 72 65 74 75 72 6e 20 5b  ete   { return [
152d0 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 6d 6f 64  TryFromList $mod
152e0 20 24 73 70 61 63 65 5f 6d 61 74 63 68 65 73 5d   $space_matches]
152f0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
15300 20 20 20 20 20 20 20 65 76 61 6c 20 20 20 20 20         eval     
15310 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  -.              
15320 20 20 20 20 20 20 69 6e 73 63 6f 70 65 20 20 7b        inscope  {
15330 20 72 65 74 75 72 6e 20 5b 42 72 61 63 65 4f 72   return [BraceOr
15340 43 6f 6d 6d 61 6e 64 20 24 74 65 78 74 20 24 73  Command $text $s
15350 74 61 72 74 20 24 65 6e 64 20 24 6c 69 6e 65 20  tart $end $line 
15360 24 70 6f 73 20 24 6d 6f 64 5d 20 7d 0a 20 20 20  $pos $mod] }.   
15370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15380 20 77 68 69 63 68 20 20 20 20 7b 20 72 65 74 75   which    { retu
15390 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
153a0 4c 69 73 74 20 24 6d 6f 64 20 7b 2d 76 61 72 69  List $mod {-vari
153b0 61 62 6c 65 20 3c 6e 61 6d 65 3e 7d 5d 20 7d 0a  able <name>}] }.
153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153d0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
153e0 20 20 20 20 20 20 20 20 20 20 20 20 34 20 7b 0a              4 {.
153f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15400 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b  switch -- $cmd {
15410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15420 20 20 20 20 20 65 78 70 6f 72 74 20 20 2d 0a 20       export  -. 
15430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15440 20 20 20 66 6f 72 67 65 74 20 20 2d 0a 20 20 20     forget  -.   
15450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15460 20 69 6d 70 6f 72 74 20 20 7b 20 72 65 74 75 72   import  { retur
15470 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
15480 3f 70 61 74 74 65 72 6e 3f 5d 20 7d 0a 20 20 20  ?pattern?] }.   
15490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154a0 20 64 65 6c 65 74 65 20 20 7b 20 72 65 74 75 72   delete  { retur
154b0 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24  n [TryFromList $
154c0 6d 6f 64 20 24 73 70 61 63 65 5f 6d 61 74 63 68  mod $space_match
154d0 65 73 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  es] }.          
154e0 20 20 20 20 20 20 20 20 20 20 65 76 61 6c 20 20            eval  
154f0 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20    -.            
15500 20 20 20 20 20 20 20 20 69 6e 73 63 6f 70 65 20          inscope 
15510 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
15520 79 48 69 6e 74 73 20 3f 61 72 67 3f 5d 20 7d 0a  yHints ?arg?] }.
15530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15540 20 20 20 20 77 68 69 63 68 20 20 20 7b 20 72 65      which   { re
15550 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
15560 6f 6d 4c 69 73 74 20 24 6d 6f 64 20 7b 3c 6e 61  omList $mod {<na
15570 6d 65 3e 7d 5d 20 7d 0a 20 20 20 20 20 20 20 20  me>}] }.        
15580 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
15590 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
155a0 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  }.        return
155b0 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70   "".    }..    p
155c0 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6f 70 65  roc complete(ope
155d0 6e 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  n) {text start e
155e0 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
155f0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 23   {.            #
15600 20 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73   2 { return [Dis
15610 70 6c 61 79 48 69 6e 74 73 20 3f 61 63 63 65 73  playHints ?acces
15620 73 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20 73 77  s?] }.        sw
15630 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20  itch -- $pos {. 
15640 20 20 20 20 20 20 20 20 20 20 20 32 20 7b 0a 20             2 {. 
15650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
15660 65 74 20 61 63 63 65 73 73 20 7b 0a 20 20 20 20  et access {.    
15670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15680 72 20 72 2b 20 77 20 77 2b 20 61 20 61 2b 0a 20  r r+ w w+ a a+. 
15690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156a0 20 20 20 52 44 4f 4e 4c 59 20 57 52 4f 4e 4c 59     RDONLY WRONLY
156b0 20 52 44 57 52 20 41 50 50 45 4e 44 20 43 52 45   RDWR APPEND CRE
156c0 41 54 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  AT.             
156d0 20 20 20 20 20 20 20 45 58 43 4c 20 4e 4f 43 54         EXCL NOCT
156e0 54 59 20 4e 4f 4e 42 4c 4f 43 4b 20 54 52 55 4e  TY NONBLOCK TRUN
156f0 43 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  C.              
15700 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
15710 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70      return [Comp
15720 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65  leteFromList $te
15730 78 74 20 24 61 63 63 65 73 73 5d 0a 20 20 20 20  xt $access].    
15740 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
15750 20 20 20 20 20 20 33 20 7b 20 72 65 74 75 72 6e        3 { return
15760 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
15770 70 65 72 6d 69 73 73 69 6f 6e 73 3f 5d 20 7d 0a  permissions?] }.
15780 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
15790 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20 20    return "".    
157a0 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70  }..    proc comp
157b0 6c 65 74 65 28 70 61 63 6b 61 67 65 29 20 7b 74  lete(package) {t
157c0 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
157d0 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20  ne pos mod} {.  
157e0 20 20 20 20 20 20 73 65 74 20 63 6d 64 20 5b 4c        set cmd [L
157f0 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a 20  index $line 1]. 
15800 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
15810 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20   $pos {.        
15820 20 20 20 20 31 20 7b 0a 20 20 20 20 20 20 20 20      1 {.        
15830 20 20 20 20 20 20 20 20 73 65 74 20 63 6d 64 73          set cmds
15840 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
15850 20 20 20 20 20 20 20 66 6f 72 67 65 74 20 69 66         forget if
15860 6e 65 65 64 65 64 20 6e 61 6d 65 73 20 70 72 65  needed names pre
15870 73 65 6e 74 20 70 72 6f 76 69 64 65 20 72 65 71  sent provide req
15880 75 69 72 65 0a 20 20 20 20 20 20 20 20 20 20 20  uire.           
15890 20 20 20 20 20 20 20 20 20 75 6e 6b 6e 6f 77 6e           unknown
158a0 20 76 63 6f 6d 70 61 72 65 20 76 65 72 73 69 6f   vcompare versio
158b0 6e 73 20 76 73 61 74 69 73 66 69 65 73 0a 20 20  ns vsatisfies.  
158c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
158d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158e0 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c  return [TryFromL
158f0 69 73 74 20 24 74 65 78 74 20 24 63 6d 64 73 5d  ist $text $cmds]
15900 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
15910 20 20 20 20 20 20 20 20 20 20 20 32 20 7b 0a 20             2 {. 
15920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
15930 77 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a  witch -- $cmd {.
15940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15950 20 20 20 20 66 6f 72 67 65 74 20 20 20 20 20 2d      forget     -
15960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15970 20 20 20 20 20 69 66 6e 65 65 64 65 64 20 20 20       ifneeded   
15980 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  -.              
15990 20 20 20 20 20 20 70 72 6f 76 69 64 65 20 20 20        provide   
159a0 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   -.             
159b0 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 73 20         versions 
159c0 20 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70    { return [Comp
159d0 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 6d 6f  leteFromList $mo
159e0 64 20 5b 70 61 63 6b 61 67 65 20 6e 61 6d 65 73  d [package names
159f0 5d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  ]] }.           
15a00 20 20 20 20 20 20 20 20 20 70 72 65 73 65 6e 74           present
15a10 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20      -.          
15a20 20 20 20 20 20 20 20 20 20 20 72 65 71 75 69 72            requir
15a30 65 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20  e    {.         
15a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
15a50 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
15a60 72 6f 6d 4c 69 73 74 20 24 6d 6f 64 20 22 2d 65  romList $mod "-e
15a70 78 61 63 74 20 5b 70 61 63 6b 61 67 65 20 6e 61  xact [package na
15a80 6d 65 73 5d 22 5d 20 7d 0a 20 20 20 20 20 20 20  mes]"] }.       
15a90 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d               nam
15aa0 65 73 20 20 20 20 20 20 7b 7d 0a 20 20 20 20 20  es      {}.     
15ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
15ac0 6e 6b 6e 6f 77 6e 20 20 20 20 7b 20 72 65 74 75  nknown    { retu
15ad0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
15ae0 20 3f 63 6f 6d 6d 61 6e 64 3f 5d 20 7d 0a 20 20   ?command?] }.  
15af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b00 20 20 76 63 6f 6d 70 61 72 65 20 20 20 2d 0a 20    vcompare   -. 
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b20 20 20 20 76 73 61 74 69 73 66 69 65 73 20 7b 20     vsatisfies { 
15b30 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
15b40 69 6e 74 73 20 3c 76 65 72 73 69 6f 6e 31 3e 5d  ints <version1>]
15b50 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
15b60 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
15b70 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 33   }.            3
15b80 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
15b90 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e 73 20     set versions 
15ba0 22 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  "".             
15bb0 20 20 20 63 61 74 63 68 20 5b 6c 69 73 74 20 73     catch [list s
15bc0 65 74 20 76 65 72 73 69 6f 6e 73 20 5b 70 61 63  et versions [pac
15bd0 6b 61 67 65 20 76 65 72 73 69 6f 6e 73 20 5b 4c  kage versions [L
15be0 69 6e 64 65 78 20 24 6c 69 6e 65 20 32 5d 5d 5d  index $line 2]]]
15bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15c00 20 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64 20   switch -- $cmd 
15c10 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
15c20 20 20 20 20 20 20 66 6f 72 67 65 74 20 20 20 20        forget    
15c30 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {}.            
15c40 20 20 20 20 20 20 20 20 69 66 6e 65 65 64 65 64          ifneeded
15c50 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
15c60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
15c70 7b 22 22 20 21 3d 20 24 76 65 72 73 69 6f 6e 73  {"" != $versions
15c80 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  } {.            
15c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ca0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
15cb0 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 24  FromList $text $
15cc0 76 65 72 73 69 6f 6e 73 5d 0a 20 20 20 20 20 20  versions].      
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ce0 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 44         return [D
15d10 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 76 65 72  isplayHints <ver
15d20 73 69 6f 6e 3e 5d 0a 20 20 20 20 20 20 20 20 20  sion>].         
15d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15d50 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
15d60 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 76 69             provi
15d70 64 65 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20  de    {.        
15d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d90 69 66 20 7b 22 22 20 21 3d 20 24 76 65 72 73 69  if {"" != $versi
15da0 6f 6e 73 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  ons} {.         
15db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dc0 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c     return [Compl
15dd0 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  eteFromList $tex
15de0 74 20 24 76 65 72 73 69 6f 6e 73 5d 0a 20 20 20  t $versions].   
15df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e00 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
15e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
15e30 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
15e40 76 65 72 73 69 6f 6e 3f 5d 0a 20 20 20 20 20 20  version?].      
15e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e60 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
15e70 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
15e90 72 73 69 6f 6e 73 20 20 20 7b 7d 0a 20 20 20 20  rsions   {}.    
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15eb0 70 72 65 73 65 6e 74 20 20 20 20 2d 0a 20 20 20  present    -.   
15ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ed0 20 72 65 71 75 69 72 65 20 20 20 20 7b 0a 20 20   require    {.  
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ef0 20 20 20 20 20 20 69 66 20 7b 22 2d 65 78 61 63        if {"-exac
15f00 74 22 20 3d 3d 20 5b 50 72 65 76 69 6f 75 73 57  t" == [PreviousW
15f10 6f 72 64 20 24 73 74 61 72 74 20 24 6c 69 6e 65  ord $start $line
15f20 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ]} {.           
15f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f40 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
15f50 65 46 72 6f 6d 4c 69 73 74 20 24 6d 6f 64 20 5b  eFromList $mod [
15f60 70 61 63 6b 61 67 65 20 6e 61 6d 65 73 5d 5d 0a  package names]].
15f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f80 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
15f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
15fb0 7b 22 22 20 21 3d 20 24 76 65 72 73 69 6f 6e 73  {"" != $versions
15fc0 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  } {.            
15fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fe0 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70      return [Comp
15ff0 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65  leteFromList $te
16000 78 74 20 24 76 65 72 73 69 6f 6e 73 5d 0a 20 20  xt $versions].  
16010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16020 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
16030 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
16040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16050 20 20 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c     return [Displ
16060 61 79 48 69 6e 74 73 20 3f 76 65 72 73 69 6f 6e  ayHints ?version
16070 3f 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?].             
16080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
16090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
160a0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
160b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
160c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
160d0 20 20 20 20 20 6e 61 6d 65 73 20 20 20 20 20 20       names      
160e0 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {}.             
160f0 20 20 20 20 20 20 20 75 6e 6b 6e 6f 77 6e 20 20         unknown  
16100 20 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20    {}.           
16110 20 20 20 20 20 20 20 20 20 76 63 6f 6d 70 61 72           vcompar
16120 65 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20  e   -.          
16130 20 20 20 20 20 20 20 20 20 20 76 73 61 74 69 73            vsatis
16140 66 69 65 73 20 7b 20 72 65 74 75 72 6e 20 5b 44  fies { return [D
16150 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 76 65 72  isplayHints <ver
16160 73 69 6f 6e 32 3e 5d 20 7d 0a 20 20 20 20 20 20  sion2>] }.      
16170 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
16180 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16190 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75    }.        retu
161a0 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20  rn "".    }..   
161b0 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 70   proc complete(p
161c0 69 64 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  id) {text start 
161d0 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
161e0 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74  } {.        swit
161f0 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20  ch -- $pos {.   
16200 20 20 20 20 20 20 20 20 20 31 20 7b 20 72 65 74           1 { ret
16210 75 72 6e 20 5b 43 68 61 6e 6e 65 6c 49 64 20 24  urn [ChannelId $
16220 74 65 78 74 5d 20 7d 0a 20 20 20 20 20 20 20 20  text] }.        
16230 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f  }.    }..    pro
16240 63 20 63 6f 6d 70 6c 65 74 65 28 70 6b 67 5f 6d  c complete(pkg_m
16250 6b 49 6e 64 65 78 29 20 7b 74 65 78 74 20 73 74  kIndex) {text st
16260 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
16270 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20   mod} {.        
16280 73 65 74 20 63 6d 64 73 20 5b 52 65 6d 6f 76 65  set cmds [Remove
16290 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e  UsedOptions $lin
162a0 65 20 7b 2d 64 69 72 65 63 74 20 2d 6c 6f 61 64  e {-direct -load
162b0 20 2d 76 65 72 62 6f 73 65 20 2d 2d 20 3c 64 69   -verbose -- <di
162c0 72 3e 7d 20 7b 2d 2d 7d 5d 0a 20 20 20 20 20 20  r>} {--}].      
162d0 20 20 73 65 74 20 72 65 73 20 5b 73 74 72 69 6e    set res [strin
162e0 67 20 74 72 69 6d 20 5b 54 72 79 46 72 6f 6d 4c  g trim [TryFromL
162f0 69 73 74 20 24 74 65 78 74 20 24 63 6d 64 73 5d  ist $text $cmds]
16300 5d 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 72  ].        set pr
16310 65 76 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64  ev [PreviousWord
16320 20 24 73 74 61 72 74 20 24 6c 69 6e 65 5d 0a 20   $start $line]. 
16330 20 20 20 20 20 20 20 69 66 20 7b 22 2d 6c 6f 61         if {"-loa
16340 64 22 20 3d 3d 20 24 70 72 65 76 7d 20 7b 0a 20  d" == $prev} {. 
16350 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
16360 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
16370 3c 70 6b 67 50 61 74 3e 5d 0a 20 20 20 20 20 20  <pkgPat>].      
16380 20 20 7d 20 65 6c 73 65 69 66 20 7b 22 2d 2d 22    } elseif {"--"
16390 20 3d 3d 20 24 70 72 65 76 7d 20 7b 0a 20 20 20   == $prev} {.   
163a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
163b0 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 74 65  [TryFromList $te
163c0 78 74 20 3c 64 69 72 3e 5d 0a 20 20 20 20 20 20  xt <dir>].      
163d0 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75    }.        retu
163e0 72 6e 20 24 72 65 73 0a 20 20 20 20 7d 0a 0a 20  rn $res.    }.. 
163f0 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65     proc complete
16400 28 70 72 6f 63 29 20 7b 74 65 78 74 20 73 74 61  (proc) {text sta
16410 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
16420 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  mod} {.        s
16430 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
16440 20 20 20 20 20 20 20 20 20 20 20 20 31 20 7b 0a              1 {.
16450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16460 73 65 74 20 6b 6e 6f 77 6e 5f 70 72 6f 63 73 20  set known_procs 
16470 5b 50 72 6f 63 73 4f 6e 6c 79 43 6f 6d 70 6c 65  [ProcsOnlyComple
16480 74 69 6f 6e 20 24 74 65 78 74 5d 0a 20 20 20 20  tion $text].    
16490 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
164a0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
164b0 4c 69 73 74 20 24 74 65 78 74 20 24 6b 6e 6f 77  List $text $know
164c0 6e 5f 70 72 6f 63 73 5d 0a 20 20 20 20 20 20 20  n_procs].       
164d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
164e0 20 20 20 32 20 7b 0a 20 20 20 20 20 20 20 20 20     2 {.         
164f0 20 20 20 20 20 20 20 73 65 74 20 70 72 6f 63 20         set proc 
16500 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d  [Lindex $line 1]
16510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16520 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 73 65 74   if {[catch {set
16530 20 61 72 67 73 20 5b 75 70 6c 65 76 65 6c 20 5b   args [uplevel [
16540 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 69 6e 66 6f  info level] info
16550 20 61 72 67 73 20 24 70 72 6f 63 5d 7d 5d 7d 20   args $proc]}]} 
16560 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
16570 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 44 69        return [Di
16580 73 70 6c 61 79 48 69 6e 74 73 20 3c 61 72 67 73  splayHints <args
16590 3e 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  >].             
165a0 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
165b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165c0 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 22 5c 7b  return [list "\{
165d0 24 7b 61 72 67 73 7d 5c 7d 22 5d 0a 20 20 20 20  ${args}\}"].    
165e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
165f0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
16600 20 20 20 20 20 20 20 20 33 20 7b 0a 20 20 20 20          3 {.    
16610 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
16620 21 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  ![string length 
16630 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 24 70  [Lindex $line $p
16640 6f 73 5d 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20  os]]} {.        
16650 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
16660 72 6e 20 5b 6c 69 73 74 20 5c 7b 20 7b 7d 5d 3b  rn [list \{ {}];
16670 20 23 20 5c 7d 0a 20 20 20 20 20 20 20 20 20 20   # \}.          
16680 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20        } else {. 
16690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166a0 20 20 20 23 20 72 65 74 75 72 6e 20 5b 44 69 73     # return [Dis
166b0 70 6c 61 79 48 69 6e 74 73 20 3c 62 6f 64 79 3e  playHints <body>
166c0 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
166d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 42 72        return [Br
166e0 61 63 65 4f 72 43 6f 6d 6d 61 6e 64 20 24 74 65  aceOrCommand $te
166f0 78 74 20 24 73 74 61 72 74 20 24 65 6e 64 20 24  xt $start $end $
16700 6c 69 6e 65 20 24 70 6f 73 20 24 6d 6f 64 5d 0a  line $pos $mod].
16710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16720 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
16730 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16740 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20 20    return "".    
16750 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70  }..    proc comp
16760 6c 65 74 65 28 70 75 74 73 29 20 7b 74 65 78 74  lete(puts) {text
16770 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
16780 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20  pos mod} {.     
16790 20 20 20 73 65 74 20 63 6d 64 20 5b 4c 69 6e 64     set cmd [Lind
167a0 65 78 20 24 6c 69 6e 65 20 31 5d 0a 20 20 20 20  ex $line 1].    
167b0 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70      switch -- $p
167c0 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  os {.           
167d0 20 31 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20   1 {.           
167e0 20 20 20 20 20 72 65 74 75 72 6e 20 5b 4f 75 74       return [Out
167f0 43 68 61 6e 6e 65 6c 49 64 20 24 74 65 78 74 20  ChannelId $text 
16800 22 2d 6e 6f 6e 65 77 6c 69 6e 65 22 5d 0a 20 20  "-nonewline"].  
16810 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
16820 20 20 20 20 20 20 20 20 32 20 7b 0a 20 20 20 20          2 {.    
16830 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74              swit
16840 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 20 20 20  ch -- $cmd {.   
16850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16860 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 7b 20 72 65   -nonewline { re
16870 74 75 72 6e 20 5b 4f 75 74 43 68 61 6e 6e 65 6c  turn [OutChannel
16880 49 64 20 24 74 65 78 74 5d 20 7d 0a 20 20 20 20  Id $text] }.    
16890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168a0 64 65 66 61 75 6c 74 20 20 20 20 7b 20 72 65 74  default    { ret
168b0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
168c0 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 20 20  s <string>] }.  
168d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
168e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
168f0 20 20 20 20 20 20 20 20 20 20 33 20 7b 0a 20 20            3 {.  
16900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77                sw
16910 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 20  itch -- $cmd {. 
16920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16930 20 20 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 7b 20     -nonewline { 
16940 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
16950 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d  ints <string>] }
16960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16970 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d   }.            }
16980 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
16990 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20     return "".   
169a0 20 7d 0a 0a 20 20 20 20 23 20 70 72 6f 63 20 63   }..    # proc c
169b0 6f 6d 70 6c 65 74 65 28 70 77 64 29 20 7b 74 65  omplete(pwd) {te
169c0 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
169d0 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20  e pos mod} {.   
169e0 20 23 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63   # }..    proc c
169f0 6f 6d 70 6c 65 74 65 28 72 65 61 64 29 20 7b 74  omplete(read) {t
16a00 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
16a10 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20  ne pos mod} {.  
16a20 20 20 20 20 20 20 73 65 74 20 63 6d 64 20 5b 4c        set cmd [L
16a30 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a 20  index $line 1]. 
16a40 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
16a50 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20   $pos {.        
16a60 20 20 20 20 31 20 7b 0a 20 20 20 20 20 20 20 20      1 {.        
16a70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
16a80 49 6e 43 68 61 6e 6e 65 6c 49 64 20 24 74 65 78  InChannelId $tex
16a90 74 20 22 2d 6e 6f 6e 65 77 6c 69 6e 65 22 5d 0a  t "-nonewline"].
16aa0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
16ab0 20 20 20 20 20 20 20 20 20 20 32 20 7b 0a 20 20            2 {.  
16ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77                sw
16ad0 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 20  itch -- $cmd {. 
16ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16af0 20 20 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 7b 20     -nonewline { 
16b00 72 65 74 75 72 6e 20 5b 49 6e 43 68 61 6e 6e 65  return [InChanne
16b10 6c 49 64 20 24 74 65 78 74 5d 20 7d 0a 20 20 20  lId $text] }.   
16b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b30 20 64 65 66 61 75 6c 74 20 20 20 20 7b 20 72 65   default    { re
16b40 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
16b50 74 73 20 3c 6e 75 6d 43 68 61 72 73 3e 5d 20 7d  ts <numChars>] }
16b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16b70 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d   }.            }
16b80 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
16b90 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20     return "".   
16ba0 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d   }..    proc com
16bb0 70 6c 65 74 65 28 72 65 67 65 78 70 29 20 7b 74  plete(regexp) {t
16bc0 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
16bd0 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20  ne pos mod} {.  
16be0 20 20 20 20 20 20 73 65 74 20 70 72 65 76 20 5b        set prev [
16bf0 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 73 74  PreviousWord $st
16c00 61 72 74 20 24 6c 69 6e 65 5d 0a 20 20 20 20 20  art $line].     
16c10 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20     if {[llength 
16c20 24 70 72 65 76 5d 20 26 26 20 22 2d 2d 22 20 21  $prev] && "--" !
16c30 3d 20 24 70 72 65 76 0a 20 20 20 20 20 20 20 20  = $prev.        
16c40 20 20 20 20 20 20 20 20 26 26 20 28 22 2d 22 20          && ("-" 
16c50 3d 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78  == [string index
16c60 20 24 70 72 65 76 20 30 5d 20 7c 7c 20 31 20 3d   $prev 0] || 1 =
16c70 3d 20 24 70 6f 73 29 7d 20 7b 0a 20 20 20 20 20  = $pos)} {.     
16c80 20 20 20 20 20 20 20 73 65 74 20 63 6d 64 73 20         set cmds 
16c90 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f  [RemoveUsedOptio
16ca0 6e 73 20 24 6c 69 6e 65 20 5c 0a 20 20 20 20 20  ns $line \.     
16cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cc0 20 20 20 20 20 7b 2d 6e 6f 63 61 73 65 20 2d 69       {-nocase -i
16cd0 6e 64 69 63 65 73 20 2d 65 78 70 61 6e 64 65 64  ndices -expanded
16ce0 20 2d 6c 69 6e 65 0a 20 20 20 20 20 20 20 20 20   -line.         
16cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d00 20 20 2d 6c 69 6e 65 73 74 6f 70 20 2d 6c 69 6e    -linestop -lin
16d10 65 61 6e 63 68 6f 72 20 2d 61 62 6f 75 74 20 3c  eanchor -about <
16d20 65 78 70 72 65 73 73 69 6f 6e 3e 20 2d 2d 7d 20  expression> --} 
16d30 7b 2d 2d 7d 5d 0a 20 20 20 20 20 20 20 20 20 20  {--}].          
16d40 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24    if {[llength $
16d50 63 6d 64 73 5d 7d 20 7b 0a 20 20 20 20 20 20 20  cmds]} {.       
16d60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
16d70 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 43 6f  [string trim [Co
16d80 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
16d90 74 65 78 74 20 24 63 6d 64 73 5d 5d 0a 20 20 20  text $cmds]].   
16da0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
16db0 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
16dc0 20 20 20 20 20 20 20 20 73 65 74 20 76 69 72 74          set virt
16dd0 75 61 6c 5f 70 6f 73 20 5b 65 78 70 72 20 7b 24  ual_pos [expr {$
16de0 70 6f 73 20 2d 20 5b 46 69 72 73 74 4e 6f 6e 4f  pos - [FirstNonO
16df0 70 74 69 6f 6e 20 24 6c 69 6e 65 5d 7d 5d 0a 20  ption $line]}]. 
16e00 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63             switc
16e10 68 20 2d 2d 20 24 76 69 72 74 75 61 6c 5f 70 6f  h -- $virtual_po
16e20 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s {.            
16e30 20 20 20 20 30 20 20 20 20 20 20 20 7b 20 72 65      0       { re
16e40 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
16e50 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 20  ts <string>] }. 
16e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
16e70 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20         { return 
16e80 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 6d  [DisplayHints ?m
16e90 61 74 63 68 56 61 72 3f 5d 20 7d 0a 20 20 20 20  atchVar?] }.    
16ea0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61              defa
16eb0 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ult { return [Di
16ec0 73 70 6c 61 79 48 69 6e 74 73 20 3f 73 75 62 4d  splayHints ?subM
16ed0 61 74 63 68 56 61 72 3f 5d 20 7d 0a 20 20 20 20  atchVar?] }.    
16ee0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16ef0 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75    }.        retu
16f00 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20  rn "".    }..   
16f10 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 72   proc complete(r
16f20 65 67 73 75 62 29 20 7b 74 65 78 74 20 73 74 61  egsub) {text sta
16f30 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
16f40 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  mod} {.        s
16f50 65 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75  et prev [Previou
16f60 73 57 6f 72 64 20 24 73 74 61 72 74 20 24 6c 69  sWord $start $li
16f70 6e 65 5d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ne].        if {
16f80 5b 6c 6c 65 6e 67 74 68 20 24 70 72 65 76 5d 20  [llength $prev] 
16f90 26 26 20 22 2d 2d 22 20 21 3d 20 24 70 72 65 76  && "--" != $prev
16fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16fb0 20 26 26 20 28 22 2d 22 20 3d 3d 20 5b 73 74 72   && ("-" == [str
16fc0 69 6e 67 20 69 6e 64 65 78 20 24 70 72 65 76 20  ing index $prev 
16fd0 30 5d 20 7c 7c 20 31 20 3d 3d 20 24 70 6f 73 29  0] || 1 == $pos)
16fe0 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  } {.            
16ff0 73 65 74 20 63 6d 64 73 20 5b 52 65 6d 6f 76 65  set cmds [Remove
17000 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e  UsedOptions $lin
17010 65 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  e \.            
17020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 2d                {-
17030 61 6c 6c 20 2d 6e 6f 63 61 73 65 20 2d 2d 7d 20  all -nocase --} 
17040 7b 2d 2d 7d 5d 0a 20 20 20 20 20 20 20 20 20 20  {--}].          
17050 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24    if {[llength $
17060 63 6d 64 73 5d 7d 20 7b 0a 20 20 20 20 20 20 20  cmds]} {.       
17070 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
17080 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 43 6f  [string trim [Co
17090 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
170a0 74 65 78 74 20 24 63 6d 64 73 5d 5d 0a 20 20 20  text $cmds]].   
170b0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
170c0 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
170d0 20 20 20 20 20 20 20 20 73 65 74 20 76 69 72 74          set virt
170e0 75 61 6c 5f 70 6f 73 20 5b 65 78 70 72 20 7b 24  ual_pos [expr {$
170f0 70 6f 73 20 2d 20 5b 46 69 72 73 74 4e 6f 6e 4f  pos - [FirstNonO
17100 70 74 69 6f 6e 20 24 6c 69 6e 65 5d 7d 5d 0a 20  ption $line]}]. 
17110 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63             switc
17120 68 20 2d 2d 20 24 76 69 72 74 75 61 6c 5f 70 6f  h -- $virtual_po
17130 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s {.            
17140 20 20 20 20 30 20 7b 20 72 65 74 75 72 6e 20 5b      0 { return [
17150 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 65 78  DisplayHints <ex
17160 70 72 65 73 73 69 6f 6e 3e 5d 20 7d 0a 20 20 20  pression>] }.   
17170 20 20 20 20 20 20 20 20 20 20 20 20 20 31 20 7b               1 {
17180 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
17190 48 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20  Hints <string>] 
171a0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
171b0 20 20 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69    2 { return [Di
171c0 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 75 62 53  splayHints <subS
171d0 70 65 63 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20  pec>] }.        
171e0 20 20 20 20 20 20 20 20 33 20 7b 20 72 65 74 75          3 { retu
171f0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
17200 20 3c 76 61 72 4e 61 6d 65 3e 5d 20 7d 0a 20 20   <varName>] }.  
17210 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
17220 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65      }.        re
17230 74 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20  turn "".    }.. 
17240 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65     proc complete
17250 28 72 65 6e 61 6d 65 29 20 7b 74 65 78 74 20 73  (rename) {text s
17260 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
17270 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20  s mod} {.       
17280 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20   switch -- $pos 
17290 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 31 20  {.            1 
172a0 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
172b0 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  teFromList $text
172c0 20 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74   [CommandComplet
172d0 69 6f 6e 20 24 74 65 78 74 5d 5d 20 7d 0a 20 20  ion $text]] }.  
172e0 20 20 20 20 20 20 20 20 20 20 32 20 7b 20 72 65            2 { re
172f0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
17300 74 73 20 3c 6e 65 77 4e 61 6d 65 3e 5d 20 7d 0a  ts <newName>] }.
17310 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17320 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20 20    return "".    
17330 7d 0a 0a 20 20 20 20 23 20 70 72 6f 63 20 63 6f  }..    # proc co
17340 6d 70 6c 65 74 65 28 72 65 73 6f 75 72 63 65 29  mplete(resource)
17350 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
17360 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
17370 0a 20 20 20 20 23 20 20 20 20 20 54 68 69 73 20  .    #     This 
17380 69 73 20 6e 6f 74 20 61 20 6d 61 63 20 2e 2e 2e  is not a mac ...
17390 0a 20 20 20 20 23 20 7d 0a 0a 20 20 20 20 70 72  .    # }..    pr
173a0 6f 63 20 63 6f 6d 70 6c 65 74 65 28 72 65 74 75  oc complete(retu
173b0 72 6e 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  rn) {text start 
173c0 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
173d0 7d 20 7b 0a 20 20 20 20 20 20 20 20 23 20 54 4f  } {.        # TO
173e0 44 4f 20 74 68 69 73 20 69 73 20 6e 6f 74 20 70  DO this is not p
173f0 65 72 66 65 63 74 20 79 65 74 0a 20 20 20 20 20  erfect yet.     
17400 20 20 20 73 65 74 20 63 6d 64 73 20 7b 2d 63 6f     set cmds {-co
17410 64 65 20 2d 65 72 72 6f 72 69 6e 66 6f 20 2d 65  de -errorinfo -e
17420 72 72 6f 72 63 6f 64 65 20 3f 73 74 72 69 6e 67  rrorcode ?string
17430 3f 7d 0a 20 20 20 20 20 20 20 20 73 65 74 20 72  ?}.        set r
17440 65 73 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64  es [PreviousWord
17450 20 24 73 74 61 72 74 20 24 6c 69 6e 65 5d 0a 20   $start $line]. 
17460 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
17470 20 24 72 65 73 20 7b 0a 20 20 20 20 20 20 20 20   $res {.        
17480 20 20 20 20 2d 65 72 72 6f 72 69 6e 66 6f 20 7b      -errorinfo {
17490 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
174a0 48 69 6e 74 73 20 3c 69 6e 66 6f 3e 5d 20 7d 0a  Hints <info>] }.
174b0 20 20 20 20 20 20 20 20 20 20 20 20 2d 63 6f 64              -cod
174c0 65 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20  e      -.       
174d0 20 20 20 20 20 2d 65 72 72 6f 72 63 6f 64 65 20       -errorcode 
174e0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
174f0 20 20 73 65 74 20 63 6f 64 65 73 20 7b 6f 6b 20    set codes {ok 
17500 65 72 72 6f 72 20 72 65 74 75 72 6e 20 62 72 65  error return bre
17510 61 6b 20 63 6f 6e 74 69 6e 75 65 7d 0a 20 20 20  ak continue}.   
17520 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
17530 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74  urn [TryFromList
17540 20 24 6d 6f 64 20 24 63 6f 64 65 73 5d 0a 20 20   $mod $codes].  
17550 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
17560 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65      }.        re
17570 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
17580 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b 52 65  omList $text [Re
17590 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20  moveUsedOptions 
175a0 24 6c 69 6e 65 20 24 63 6d 64 73 5d 5d 0a 20 20  $line $cmds]].  
175b0 20 20 7d 0a 0a 20 20 20 20 23 20 2d 2d 2d 20 53    }..    # --- S
175c0 41 46 45 20 50 41 43 4b 41 47 45 20 2d 2d 2d 0a  AFE PACKAGE ---.
175d0 0a 20 20 20 20 23 20 63 72 65 61 74 65 20 61 20  .    # create a 
175e0 73 61 66 65 20 6e 61 6d 65 73 70 61 63 65 20 69  safe namespace i
175f0 6e 73 69 64 65 0a 20 20 20 20 23 20 74 63 6c 72  nside.    # tclr
17600 65 61 64 6c 69 6e 65 20 61 6e 64 20 69 6d 70 6f  eadline and impo
17610 72 74 20 73 6f 6d 65 20 63 6f 6d 6d 61 6e 64 73  rt some commands
17620 2e 0a 20 20 20 20 23 0a 20 20 20 20 6e 61 6d 65  ..    #.    name
17630 73 70 61 63 65 20 65 76 61 6c 20 73 61 66 65 20  space eval safe 
17640 7b 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  {.        catch 
17650 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 61  {.            na
17660 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 5c  mespace import \
17670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17680 20 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a   ::tclreadline::
17690 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3a 3a 74  DisplayHints ::t
176a0 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 50 72 65 76  clreadline::Prev
176b0 69 6f 75 73 57 6f 72 64 20 5c 0a 20 20 20 20 20  iousWord \.     
176c0 20 20 20 20 20 20 20 20 20 20 20 3a 3a 74 63 6c             ::tcl
176d0 72 65 61 64 6c 69 6e 65 3a 3a 43 6f 6d 70 6c 65  readline::Comple
176e0 74 65 46 72 6f 6d 4c 69 73 74 20 3a 3a 74 63 6c  teFromList ::tcl
176f0 72 65 61 64 6c 69 6e 65 3a 3a 43 6f 6d 6d 61 6e  readline::Comman
17700 64 43 6f 6d 70 6c 65 74 69 6f 6e 20 5c 0a 20 20  dCompletion \.  
17710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 3a                ::
17720 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 52 65 6d  tclreadline::Rem
17730 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 3a  oveUsedOptions :
17740 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 48 6f  :tclreadline::Ho
17750 73 74 4c 69 73 74 20 5c 0a 20 20 20 20 20 20 20  stList \.       
17760 20 20 20 20 20 20 20 20 20 3a 3a 74 63 6c 72 65           ::tclre
17770 61 64 6c 69 6e 65 3a 3a 43 68 61 6e 6e 65 6c 49  adline::ChannelI
17780 64 20 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a  d ::tclreadline:
17790 3a 4c 69 6e 64 65 78 20 5c 0a 20 20 20 20 20 20  :Lindex \.      
177a0 20 20 20 20 20 20 20 20 20 20 3a 3a 74 63 6c 72            ::tclr
177b0 65 61 64 6c 69 6e 65 3a 3a 43 6f 6d 70 6c 65 74  eadline::Complet
177c0 65 42 6f 6f 6c 65 61 6e 20 5c 0a 20 20 20 20 20  eBoolean \.     
177d0 20 20 20 20 20 20 20 20 20 20 20 3a 3a 74 63 6c             ::tcl
177e0 72 65 61 64 6c 69 6e 65 3a 3a 57 69 64 67 65 74  readline::Widget
177f0 43 68 69 6c 64 72 65 6e 0a 20 20 20 20 20 20 20  Children.       
17800 20 7d 0a 20 20 20 20 20 20 20 20 76 61 72 69 61   }.        varia
17810 62 6c 65 20 6f 70 74 73 0a 20 20 20 20 20 20 20  ble opts.       
17820 20 73 65 74 20 6f 70 74 73 20 7b 0a 20 20 20 20   set opts {.    
17830 20 20 20 20 20 20 20 20 2d 61 63 63 65 73 73 50          -accessP
17840 61 74 68 20 2d 73 74 61 74 69 63 73 20 2d 6e 6f  ath -statics -no
17850 53 74 61 74 69 63 73 20 2d 6e 65 73 74 65 64 20  Statics -nested 
17860 2d 6e 65 73 74 65 64 4c 6f 61 64 4f 6b 20 2d 64  -nestedLoadOk -d
17870 65 6c 65 74 65 48 6f 6f 6b 0a 20 20 20 20 20 20  eleteHook.      
17880 20 20 7d 0a 20 20 20 20 20 20 20 20 70 72 6f 63    }.        proc
17890 20 53 6c 61 76 65 4f 72 4f 70 74 73 20 7b 74 65   SlaveOrOpts {te
178a0 78 74 20 73 74 61 72 74 20 6c 69 6e 65 20 70 6f  xt start line po
178b0 73 20 73 6c 61 76 65 7d 20 7b 0a 20 20 20 20 20  s slave} {.     
178c0 20 20 20 20 20 20 20 73 65 74 20 70 72 65 76 20         set prev 
178d0 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 73  [PreviousWord $s
178e0 74 61 72 74 20 24 6c 69 6e 65 5d 0a 20 20 20 20  tart $line].    
178f0 20 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65          variable
17900 20 6f 70 74 73 0a 20 20 20 20 20 20 20 20 20 20   opts.          
17910 20 20 69 66 20 7b 24 70 6f 73 20 3e 20 31 7d 20    if {$pos > 1} 
17920 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
17930 20 20 73 65 74 20 73 6c 61 76 65 20 22 22 0a 20    set slave "". 
17940 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
17950 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20           switch 
17960 2d 2d 20 24 70 72 65 76 20 7b 0a 20 20 20 20 20  -- $prev {.     
17970 20 20 20 20 20 20 20 20 20 20 20 2d 61 63 63 65             -acce
17980 73 73 50 61 74 68 20 7b 20 72 65 74 75 72 6e 20  ssPath { return 
17990 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 64  [DisplayHints <d
179a0 69 72 65 63 74 6f 72 79 4c 69 73 74 3e 5d 20 7d  irectoryList>] }
179b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
179c0 20 2d 73 74 61 74 69 63 73 20 20 20 20 7b 20 72   -statics    { r
179d0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 42  eturn [CompleteB
179e0 6f 6f 6c 65 61 6e 20 24 74 65 78 74 5d 20 7d 0a  oolean $text] }.
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a00 2d 6e 65 73 74 65 64 20 20 20 20 20 7b 20 72 65  -nested     { re
17a10 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 42 6f  turn [CompleteBo
17a20 6f 6c 65 61 6e 20 24 74 65 78 74 5d 20 7d 0a 20  olean $text] }. 
17a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
17a40 64 65 6c 65 74 65 48 6f 6f 6b 20 7b 20 72 65 74  deleteHook { ret
17a50 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
17a60 73 20 3c 73 63 72 69 70 74 3e 5d 20 7d 0a 20 20  s <script>] }.  
17a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
17a80 66 61 75 6c 74 20 20 20 20 20 7b 0a 20 20 20 20  fault     {.    
17a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17aa0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
17ab0 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5c  FromList $text \
17ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ae0 20 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69   [RemoveUsedOpti
17af0 6f 6e 73 20 24 6c 69 6e 65 20 22 24 6f 70 74 73  ons $line "$opts
17b00 20 24 73 6c 61 76 65 22 5d 5d 0a 20 20 20 20 20   $slave"]].     
17b10 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
17b20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
17b30 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
17b40 70 72 6f 63 20 73 61 66 65 3a 3a 63 6f 6d 70 6c  proc safe::compl
17b50 65 74 65 28 69 6e 74 65 72 70 43 72 65 61 74 65  ete(interpCreate
17b60 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
17b70 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
17b80 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  {.        return
17b90 20 5b 53 6c 61 76 65 4f 72 4f 70 74 73 20 24 74   [SlaveOrOpts $t
17ba0 65 78 74 20 24 73 74 61 72 74 20 24 6c 69 6e 65  ext $start $line
17bb0 20 24 70 6f 73 20 3f 73 6c 61 76 65 3f 5d 0a 20   $pos ?slave?]. 
17bc0 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 73     }..    proc s
17bd0 61 66 65 3a 3a 63 6f 6d 70 6c 65 74 65 28 69 6e  afe::complete(in
17be0 74 65 72 70 49 6e 69 74 29 20 7b 74 65 78 74 20  terpInit) {text 
17bf0 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
17c00 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20  os mod} {.      
17c10 20 20 72 65 74 75 72 6e 20 5b 53 6c 61 76 65 4f    return [SlaveO
17c20 72 4f 70 74 73 20 24 74 65 78 74 20 24 73 74 61  rOpts $text $sta
17c30 72 74 20 24 6c 69 6e 65 20 24 70 6f 73 20 5b 69  rt $line $pos [i
17c40 6e 74 65 72 70 20 73 6c 61 76 65 73 5d 5d 0a 20  nterp slaves]]. 
17c50 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 73     }..    proc s
17c60 61 66 65 3a 3a 63 6f 6d 70 6c 65 74 65 28 69 6e  afe::complete(in
17c70 74 65 72 70 43 6f 6e 66 69 67 75 72 65 29 20 7b  terpConfigure) {
17c80 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
17c90 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20  ine pos mod} {. 
17ca0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 53         return [S
17cb0 6c 61 76 65 4f 72 4f 70 74 73 20 24 74 65 78 74  laveOrOpts $text
17cc0 20 24 73 74 61 72 74 20 24 6c 69 6e 65 20 24 70   $start $line $p
17cd0 6f 73 20 5b 69 6e 74 65 72 70 20 73 6c 61 76 65  os [interp slave
17ce0 73 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  s]].    }..    p
17cf0 72 6f 63 20 73 61 66 65 3a 3a 63 6f 6d 70 6c 65  roc safe::comple
17d00 74 65 28 69 6e 74 65 72 70 44 65 6c 65 74 65 29  te(interpDelete)
17d10 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
17d20 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
17d30 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
17d40 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
17d50 74 20 24 74 65 78 74 20 5b 69 6e 74 65 72 70 20  t $text [interp 
17d60 73 6c 61 76 65 73 5d 5d 0a 20 20 20 20 7d 0a 0a  slaves]].    }..
17d70 20 20 20 20 70 72 6f 63 20 73 61 66 65 3a 3a 63      proc safe::c
17d80 6f 6d 70 6c 65 74 65 28 69 6e 74 65 72 70 41 64  omplete(interpAd
17d90 64 54 6f 41 63 63 65 73 73 50 61 74 68 29 20 7b  dToAccessPath) {
17da0 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
17db0 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20  ine pos mod} {. 
17dc0 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
17dd0 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20   $pos {.        
17de0 20 20 20 20 31 20 7b 20 72 65 74 75 72 6e 20 5b      1 { return [
17df0 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
17e00 20 24 74 65 78 74 20 5b 69 6e 74 65 72 70 20 73   $text [interp s
17e10 6c 61 76 65 73 5d 5d 20 7d 0a 20 20 20 20 20 20  laves]] }.      
17e20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70    }.    }..    p
17e30 72 6f 63 20 73 61 66 65 3a 3a 63 6f 6d 70 6c 65  roc safe::comple
17e40 74 65 28 69 6e 74 65 72 70 46 69 6e 64 49 6e 41  te(interpFindInA
17e50 63 63 65 73 73 50 61 74 68 29 20 7b 74 65 78 74  ccessPath) {text
17e60 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
17e70 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20  pos mod} {.     
17e80 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f     switch -- $po
17e90 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s {.            
17ea0 31 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  1 { return [Comp
17eb0 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65  leteFromList $te
17ec0 78 74 20 5b 69 6e 74 65 72 70 20 73 6c 61 76 65  xt [interp slave
17ed0 73 5d 5d 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a  s]] }.        }.
17ee0 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20      }..    proc 
17ef0 73 61 66 65 3a 3a 63 6f 6d 70 6c 65 74 65 28 73  safe::complete(s
17f00 65 74 4c 6f 67 43 6d 64 29 20 7b 74 65 78 74 20  etLogCmd) {text 
17f10 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
17f20 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20  os mod} {.      
17f30 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73    switch -- $pos
17f40 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 31   {.            1
17f50 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20         { return 
17f60 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 63  [DisplayHints ?c
17f70 6d 64 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  md?] }.         
17f80 20 20 20 64 65 66 61 75 6c 74 20 7b 20 72 65 74     default { ret
17f90 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
17fa0 73 20 3f 61 72 67 3f 5d 20 7d 0a 20 20 20 20 20  s ?arg?] }.     
17fb0 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
17fc0 70 72 6f 63 20 73 61 66 65 3a 3a 63 6f 6d 70 6c  proc safe::compl
17fd0 65 74 65 28 6c 6f 61 64 54 6b 29 20 7b 74 65 78  ete(loadTk) {tex
17fe0 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
17ff0 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20   pos mod} {.    
18000 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70      switch -- $p
18010 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  os {.           
18020 20 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73   1 { return [Dis
18030 70 6c 61 79 48 69 6e 74 73 20 3c 73 6c 61 76 65  playHints <slave
18040 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  >] }.           
18050 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20   default {.     
18060 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63             switc
18070 68 20 2d 2d 20 5b 50 72 65 76 69 6f 75 73 57 6f  h -- [PreviousWo
18080 72 64 20 24 73 74 61 72 74 20 24 6c 69 6e 65 5d  rd $start $line]
18090 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
180a0 20 20 20 20 20 20 20 2d 75 73 65 20 20 20 20 20         -use     
180b0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
180c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
180d0 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
180e0 73 74 20 24 74 65 78 74 20 5c 0a 20 20 20 20 20  st $text \.     
180f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
18110 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 57  ::tclreadline::W
18120 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 74  idgetChildren $t
18130 65 78 74 5d 5d 0a 20 20 20 20 20 20 20 20 20 20  ext]].          
18140 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
18150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18160 2d 64 69 73 70 6c 61 79 20 7b 20 72 65 74 75 72  -display { retur
18170 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
18180 3c 64 69 73 70 6c 61 79 3e 5d 20 7d 0a 20 20 20  <display>] }.   
18190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181a0 20 64 65 66 61 75 6c 74 20 20 7b 0a 20 20 20 20   default  {.    
181b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181c0 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70      return [Comp
181d0 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65  leteFromList $te
181e0 78 74 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20  xt \.           
181f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18200 20 20 20 20 20 20 20 20 20 5b 52 65 6d 6f 76 65           [Remove
18210 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e  UsedOptions $lin
18220 65 20 7b 2d 75 73 65 20 2d 64 69 73 70 6c 61 79  e {-use -display
18230 7d 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  }]].            
18240 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
18250 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
18260 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
18270 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23    }.    }..    #
18280 20 2d 2d 2d 20 45 4e 44 20 4f 46 20 53 41 46 45   --- END OF SAFE
18290 20 50 41 43 4b 41 47 45 20 2d 2d 2d 0a 0a 20 20   PACKAGE ---..  
182a0 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28    proc complete(
182b0 73 63 61 6e 29 20 7b 74 65 78 74 20 73 74 61 72  scan) {text star
182c0 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
182d0 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 77  od} {.        sw
182e0 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20  itch -- $pos {. 
182f0 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20             1    
18300 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73     { return [Dis
18310 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 72 69 6e  playHints <strin
18320 67 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  g>] }.          
18330 20 20 32 20 20 20 20 20 20 20 7b 20 72 65 74 75    2       { retu
18340 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
18350 20 3c 66 6f 72 6d 61 74 3e 5d 20 7d 0a 20 20 20   <format>] }.   
18360 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74           default
18370 20 7b 20 72 65 74 75 72 6e 20 5b 56 61 72 43 6f   { return [VarCo
18380 6d 70 6c 65 74 69 6f 6e 20 24 74 65 78 74 5d 20  mpletion $text] 
18390 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
183a0 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20      return "".  
183b0 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f    }..    proc co
183c0 6d 70 6c 65 74 65 28 73 65 65 6b 29 20 7b 74 65  mplete(seek) {te
183d0 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
183e0 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20  e pos mod} {.   
183f0 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24       switch -- $
18400 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20  pos {.          
18410 20 20 31 20 7b 20 72 65 74 75 72 6e 20 5b 43 68    1 { return [Ch
18420 61 6e 6e 65 6c 49 64 20 24 74 65 78 74 5d 20 7d  annelId $text] }
18430 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 20 7b  .            2 {
18440 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
18450 48 69 6e 74 73 20 3c 6f 66 66 73 65 74 3e 5d 20  Hints <offset>] 
18460 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 33 20  }.            3 
18470 7b 20 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f  { return [TryFro
18480 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 73 74 61  mList $text {sta
18490 72 74 20 63 75 72 72 65 6e 74 20 65 6e 64 7d 5d  rt current end}]
184a0 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
184b0 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20       return "". 
184c0 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63     }..    proc c
184d0 6f 6d 70 6c 65 74 65 28 73 65 74 29 20 7b 74 65  omplete(set) {te
184e0 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
184f0 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20  e pos mod} {.   
18500 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24       switch -- $
18510 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20  pos {.          
18520 20 20 31 20 7b 20 72 65 74 75 72 6e 20 5b 56 61    1 { return [Va
18530 72 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 74 65 78  rCompletion $tex
18540 74 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  t] }.           
18550 20 32 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20   2 {.           
18560 20 20 20 20 20 69 66 20 7b 24 74 65 78 74 20 3d       if {$text =
18570 3d 20 22 22 20 7c 7c 20 24 74 65 78 74 20 3d 3d  = "" || $text ==
18580 20 22 5c 22 22 20 7c 7c 20 24 74 65 78 74 20 3d   "\"" || $text =
18590 3d 20 22 5c 7b 22 7d 20 7b 0a 20 20 20 20 20 20  = "\{"} {.      
185a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                # 
185b0 73 65 74 20 6c 69 6e 65 20 5b 51 75 6f 74 65 51  set line [QuoteQ
185c0 75 6f 74 65 73 20 24 6c 69 6e 65 5d 0a 20 20 20  uotes $line].   
185d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185e0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 73 65 74   if {[catch {set
185f0 20 76 61 6c 75 65 20 5c 0a 20 20 20 20 20 20 20   value \.       
18600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18610 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69               [li
18620 73 74 20 5b 75 70 6c 65 76 65 6c 20 5b 69 6e 66  st [uplevel [inf
18630 6f 20 6c 65 76 65 6c 5d 20 5c 0a 20 20 20 20 20  o level] \.     
18640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18660 20 20 20 20 20 20 20 20 20 20 73 65 74 20 5b 4c            set [L
18670 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 5d 5d  index $line 1]]]
18680 7d 20 6d 73 67 5d 7d 20 7b 0a 20 20 20 20 20 20  } msg]} {.      
18690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186a0 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20 20    return "".    
186b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186c0 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20  } else {.       
186d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186e0 20 72 65 74 75 72 6e 20 5b 51 75 6f 74 65 20 24   return [Quote $
186f0 76 61 6c 75 65 20 24 74 65 78 74 5d 0a 20 20 20  value $text].   
18700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18710 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
18720 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
18730 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
18740 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20       return "". 
18750 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63     }..    proc c
18760 6f 6d 70 6c 65 74 65 28 73 6f 63 6b 65 74 29 20  omplete(socket) 
18770 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
18780 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
18790 20 20 20 20 20 20 20 20 73 65 74 20 63 6d 64 20          set cmd 
187a0 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d  [Lindex $line 1]
187b0 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 72 65  .        set pre
187c0 76 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20  v [PreviousWord 
187d0 24 73 74 61 72 74 20 24 6c 69 6e 65 5d 0a 20 20  $start $line].  
187e0 20 20 20 20 20 20 69 66 20 7b 22 2d 73 65 72 76        if {"-serv
187f0 65 72 22 20 3d 3d 20 24 63 6d 64 7d 20 7b 0a 20  er" == $cmd} {. 
18800 20 20 20 20 20 20 20 20 20 20 20 23 20 73 65 72             # ser
18810 76 65 72 20 73 6f 63 6b 65 74 73 0a 20 20 20 20  ver sockets.    
18820 20 20 20 20 20 20 20 20 23 0a 20 20 20 20 20 20          #.      
18830 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
18840 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20  $pos {.         
18850 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20 7b         2       {
18860 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
18870 48 69 6e 74 73 20 3c 63 6f 6d 6d 61 6e 64 3e 5d  Hints <command>]
18880 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
18890 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20     default {.   
188a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188b0 20 69 66 20 7b 22 2d 6d 79 61 64 64 72 22 20 3d   if {"-myaddr" =
188c0 3d 20 24 70 72 65 76 7d 20 7b 0a 20 20 20 20 20  = $prev} {.     
188d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188e0 20 20 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c     return [Displ
188f0 61 79 48 69 6e 74 73 20 3c 61 64 64 72 3e 5d 0a  ayHints <addr>].
18900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18910 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
18920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18930 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d       return [Com
18940 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 6d  pleteFromList $m
18950 6f 64 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20  od \.           
18960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18970 20 20 20 20 20 20 20 20 20 5b 52 65 6d 6f 76 65           [Remove
18980 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e  UsedOptions $lin
18990 65 20 7b 2d 6d 79 61 64 64 72 20 2d 65 72 72 6f  e {-myaddr -erro
189a0 72 20 2d 73 6f 63 6b 6e 61 6d 65 20 3c 70 6f 72  r -sockname <por
189b0 74 3e 7d 5d 5d 0a 20 20 20 20 20 20 20 20 20 20  t>}]].          
189c0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
189d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
189e0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
189f0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
18a00 20 20 20 20 20 20 20 20 20 23 20 63 6c 69 65 6e           # clien
18a10 74 20 73 6f 63 6b 65 74 73 0a 20 20 20 20 20 20  t sockets.      
18a20 20 20 20 20 20 20 23 0a 20 20 20 20 20 20 20 20        #.        
18a30 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70      switch -- $p
18a40 72 65 76 20 7b 0a 20 20 20 20 20 20 20 20 20 20  rev {.          
18a50 20 20 20 20 20 20 2d 6d 79 61 64 64 72 20 7b 20        -myaddr { 
18a60 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
18a70 69 6e 74 73 20 3c 61 64 64 72 3e 5d 20 7d 0a 20  ints <addr>] }. 
18a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
18a90 6d 79 70 6f 72 74 20 7b 20 72 65 74 75 72 6e 20  myport { return 
18aa0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 70  [DisplayHints <p
18ab0 6f 72 74 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20  ort>] }.        
18ac0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20      }..         
18ad0 20 20 20 73 65 74 20 68 6f 73 74 73 20 5b 48 6f     set hosts [Ho
18ae0 73 74 4c 69 73 74 5d 0a 20 20 20 20 20 20 20 20  stList].        
18af0 20 20 20 20 73 65 74 20 63 6d 64 73 20 7b 2d 6d      set cmds {-m
18b00 79 61 64 64 72 20 2d 6d 79 70 6f 72 74 20 2d 61  yaddr -myport -a
18b10 73 79 6e 63 20 2d 6d 79 61 64 64 72 20 2d 65 72  sync -myaddr -er
18b20 72 6f 72 20 2d 73 6f 63 6b 6e 61 6d 65 20 2d 70  ror -sockname -p
18b30 65 65 72 6e 61 6d 65 7d 0a 20 20 20 20 20 20 20  eername}.       
18b40 20 20 20 20 20 69 66 20 7b 24 70 6f 73 20 3c 3d       if {$pos <=
18b50 20 31 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20   1} {.          
18b60 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6d        lappend cm
18b70 64 73 20 2d 73 65 72 76 65 72 0a 20 20 20 20 20  ds -server.     
18b80 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
18b90 20 20 20 20 20 73 65 74 20 63 6d 64 73 20 5b 52       set cmds [R
18ba0 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
18bb0 20 24 6c 69 6e 65 20 24 63 6d 64 73 5d 0a 20 20   $line $cmds].  
18bc0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 2d 31            if {-1
18bd0 20 21 3d 20 5b 6c 73 65 61 72 63 68 20 24 68 6f   != [lsearch $ho
18be0 73 74 73 20 24 70 72 65 76 5d 7d 20 7b 0a 20 20  sts $prev]} {.  
18bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
18c00 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
18c10 74 73 20 3c 70 6f 72 74 3e 5d 0a 20 20 20 20 20  ts <port>].     
18c20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
18c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c40 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
18c50 46 72 6f 6d 4c 69 73 74 20 24 6d 6f 64 20 5b 63  FromList $mod [c
18c60 6f 6e 63 61 74 20 24 63 6d 64 73 20 24 68 6f 73  oncat $cmds $hos
18c70 74 73 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20  ts]].           
18c80 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
18c90 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20       return "". 
18ca0 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63     }..    proc c
18cb0 6f 6d 70 6c 65 74 65 28 73 6f 75 72 63 65 29 20  omplete(source) 
18cc0 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
18cd0 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
18ce0 20 20 20 20 20 20 20 20 23 20 61 6c 6c 6f 77 20          # allow 
18cf0 66 69 6c 65 20 6e 61 6d 65 20 63 6f 6d 70 6c 65  file name comple
18d00 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 72 65 74  tion.        ret
18d10 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20  urn "".    }..  
18d20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28    proc complete(
18d30 73 70 6c 69 74 29 20 7b 74 65 78 74 20 73 74 61  split) {text sta
18d40 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
18d50 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  mod} {.        s
18d60 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
18d70 20 20 20 20 20 20 20 20 20 20 20 20 31 20 7b 20              1 { 
18d80 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
18d90 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d  ints <string>] }
18da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 20 7b  .            2 {
18db0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
18dc0 48 69 6e 74 73 20 3f 73 70 6c 69 74 43 68 61 72  Hints ?splitChar
18dd0 73 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a  s?] }.        }.
18de0 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20      }..    proc 
18df0 63 6f 6d 70 6c 65 74 65 28 73 74 72 69 6e 67 29  complete(string)
18e00 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
18e10 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
18e20 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6d 64  .        set cmd
18e30 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31   [Lindex $line 1
18e40 5d 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 72  ].        set pr
18e50 65 76 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64  ev [PreviousWord
18e60 20 24 73 74 61 72 74 20 24 6c 69 6e 65 5d 0a 20   $start $line]. 
18e70 20 20 20 20 20 20 20 73 65 74 20 63 6d 64 73 20         set cmds 
18e80 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79  {.            by
18e90 74 65 6c 65 6e 67 74 68 20 63 6f 6d 70 61 72 65  telength compare
18ea0 20 65 71 75 61 6c 20 66 69 72 73 74 20 69 6e 64   equal first ind
18eb0 65 78 20 69 73 20 6c 61 73 74 20 6c 65 6e 67 74  ex is last lengt
18ec0 68 20 6d 61 70 20 6d 61 74 63 68 0a 20 20 20 20  h map match.    
18ed0 20 20 20 20 20 20 20 20 72 61 6e 67 65 20 72 65          range re
18ee0 70 65 61 74 20 72 65 70 6c 61 63 65 20 74 6f 6c  peat replace tol
18ef0 6f 77 65 72 20 74 6f 75 70 70 65 72 20 74 6f 74  ower toupper tot
18f00 69 74 6c 65 20 74 72 69 6d 20 74 72 69 6d 6c 65  itle trim trimle
18f10 66 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ft.            t
18f20 72 69 6d 72 69 67 68 74 20 77 6f 72 64 65 6e 64  rimright wordend
18f30 20 77 6f 72 64 73 74 61 72 74 7d 0a 20 20 20 20   wordstart}.    
18f40 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70      switch -- $p
18f50 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  os {.           
18f60 20 31 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d   1 { return [Com
18f70 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74  pleteFromList $t
18f80 65 78 74 20 24 63 6d 64 73 5d 20 7d 0a 20 20 20  ext $cmds] }.   
18f90 20 20 20 20 20 20 20 20 20 32 20 7b 0a 20 20 20           2 {.   
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69               swi
18fb0 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 20 20  tch -- $cmd {.  
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fd0 20 20 63 6f 6d 70 61 72 65 20 2d 0a 20 20 20 20    compare -.    
18fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ff0 65 71 75 61 6c 20 20 20 7b 0a 20 20 20 20 20 20  equal   {.      
19000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19010 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65    return [Comple
19020 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  teFromList $text
19030 20 7b 2d 6e 6f 63 61 73 65 20 2d 6c 65 6e 67 74   {-nocase -lengt
19040 68 20 3c 73 74 72 69 6e 67 3e 7d 5d 0a 20 20 20  h <string>}].   
19050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19060 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
19070 20 20 20 20 20 20 20 20 66 69 72 73 74 20 2d 0a          first -.
19080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19090 20 20 20 20 6c 61 73 74 20 20 7b 20 72 65 74 75      last  { retu
190a0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
190b0 20 3c 73 74 72 69 6e 67 31 3e 5d 20 7d 0a 0a 20   <string1>] }.. 
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190d0 20 20 20 6d 61 70 20 20 20 7b 20 72 65 74 75 72     map   { retur
190e0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
190f0 69 73 74 20 24 74 65 78 74 20 7b 2d 6e 6f 63 61  ist $text {-noca
19100 73 65 20 3c 63 68 61 72 4d 61 70 3e 5d 7d 20 7d  se <charMap>]} }
19110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19120 20 20 20 20 20 6d 61 74 63 68 20 7b 20 72 65 74       match { ret
19130 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
19140 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 2d 6e 6f  mList $text {-no
19150 63 61 73 65 20 3c 70 61 74 74 65 72 6e 3e 5d 7d  case <pattern>]}
19160 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
19170 20 20 20 20 20 20 20 20 69 73 20 7b 0a 20 20 20          is {.   
19180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19190 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d       return [Com
191a0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74  pleteFromList $t
191b0 65 78 74 20 5c 0a 20 20 20 20 20 20 20 20 20 20  ext \.          
191c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191d0 20 20 20 20 20 20 20 20 20 20 7b 61 6c 6e 75 6d            {alnum
191e0 20 61 6c 70 68 61 20 61 73 63 69 69 20 62 6f 6f   alpha ascii boo
191f0 6c 65 61 6e 20 63 6f 6e 74 72 6f 6c 20 64 69 67  lean control dig
19200 69 74 20 64 6f 75 62 6c 65 0a 20 20 20 20 20 20  it double.      
19210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
19230 61 6c 73 65 20 67 72 61 70 68 20 69 6e 74 65 67  alse graph integ
19240 65 72 20 6c 6f 77 65 72 20 70 72 69 6e 74 20 70  er lower print p
19250 75 6e 63 74 20 73 70 61 63 65 0a 20 20 20 20 20  unct space.     
19260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19280 74 72 75 65 20 75 70 70 65 72 20 77 6f 72 64 63  true upper wordc
19290 68 61 72 20 78 64 69 67 69 74 7d 5d 0a 20 20 20  har xdigit}].   
192a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192b0 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
192c0 20 20 20 20 20 20 20 20 62 79 74 65 6c 65 6e 67          byteleng
192d0 74 68 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20  th -.           
192e0 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 20           index  
192f0 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20      -.          
19300 20 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68            length
19310 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20       -.         
19320 20 20 20 20 20 20 20 20 20 20 20 72 61 6e 67 65             range
19330 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20        -.        
19340 20 20 20 20 20 20 20 20 20 20 20 20 72 65 70 65              repe
19350 61 74 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20  at     -.       
19360 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 70               rep
19370 6c 61 63 65 20 20 20 20 2d 0a 20 20 20 20 20 20  lace    -.      
19380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6f                to
19390 6c 6f 77 65 72 20 20 20 20 2d 0a 20 20 20 20 20  lower    -.     
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
193b0 6f 74 69 74 6c 65 20 20 20 20 2d 0a 20 20 20 20  otitle    -.    
193c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193d0 74 6f 75 70 70 65 72 20 20 20 20 2d 0a 20 20 20  toupper    -.   
193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193f0 20 74 72 69 6d 20 20 20 20 20 20 20 2d 0a 20 20   trim       -.  
19400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19410 20 20 74 72 69 6d 6c 65 66 74 20 20 20 2d 0a 20    trimleft   -. 
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19430 20 20 20 74 72 69 6d 72 69 67 68 74 20 20 2d 0a     trimright  -.
19440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19450 20 20 20 20 77 6f 72 64 65 6e 64 20 20 20 20 2d      wordend    -
19460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19470 20 20 20 20 20 77 6f 72 64 73 74 61 72 74 20 20       wordstart  
19480 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
19490 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d  yHints <string>]
194a0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
194b0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
194c0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 33   }.            3
194d0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
194e0 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 63 6d     switch -- $cm
194f0 64 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  d {.            
19500 20 20 20 20 20 20 20 20 63 6f 6d 70 61 72 65 20          compare 
19510 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  -.              
19520 20 20 20 20 20 20 65 71 75 61 6c 20 20 20 7b 0a        equal   {.
19530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19540 20 20 20 20 20 20 20 20 69 66 20 7b 22 2d 6c 65          if {"-le
19550 6e 67 74 68 22 20 3d 3d 20 24 70 72 65 76 7d 20  ngth" == $prev} 
19560 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
19570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
19580 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
19590 74 73 20 3c 69 6e 74 3e 5d 0a 20 20 20 20 20 20  ts <int>].      
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195b0 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
195c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
195d0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
195e0 4c 69 73 74 20 24 74 65 78 74 20 5c 0a 20 20 20  List $text \.   
195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19610 20 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69   [RemoveUsedOpti
19620 6f 6e 73 20 24 6c 69 6e 65 20 7b 2d 6e 6f 63 61  ons $line {-noca
19630 73 65 20 2d 6c 65 6e 67 74 68 20 3c 73 74 72 69  se -length <stri
19640 6e 67 3e 7d 5d 5d 0a 20 20 20 20 20 20 20 20 20  ng>}]].         
19650 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20             }..  
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19670 20 20 66 69 72 73 74 20 2d 0a 20 20 20 20 20 20    first -.      
19680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61                la
19690 73 74 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  st  { return [Di
196a0 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 72 69  splayHints <stri
196b0 6e 67 32 3e 5d 20 7d 0a 0a 20 20 20 20 20 20 20  ng2>] }..       
196c0 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 70               map
196d0 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
196e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
196f0 7b 22 2d 6e 6f 63 61 73 65 22 20 3d 3d 20 24 70  {"-nocase" == $p
19700 72 65 76 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  rev} {.         
19710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19720 20 20 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c     return [Displ
19730 61 79 48 69 6e 74 73 20 3c 63 68 61 72 4d 61 70  ayHints <charMap
19740 3e 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  >].             
19750 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
19760 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e {.            
19770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19780 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
19790 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d 0a 20  ints <string>]. 
197a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197b0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
197d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197e0 20 20 20 6d 61 74 63 68 20 7b 0a 20 20 20 20 20     match {.     
197f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19800 20 20 20 69 66 20 7b 22 2d 6e 6f 63 61 73 65 22     if {"-nocase"
19810 20 3d 3d 20 24 70 72 65 76 7d 20 7b 0a 20 20 20   == $prev} {.   
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19830 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
19840 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 70  [DisplayHints <p
19850 61 74 74 65 72 6e 3e 5d 0a 20 20 20 20 20 20 20  attern>].       
19860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19870 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
19880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19890 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 44 69        return [Di
198a0 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 72 69  splayHints <stri
198b0 6e 67 3e 5d 0a 20 20 20 20 20 20 20 20 20 20 20  ng>].           
198c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198e0 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20     }..          
198f0 20 20 20 20 20 20 20 20 20 20 69 73 20 7b 0a 20            is {. 
19900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19910 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43         return [C
19920 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
19930 24 74 65 78 74 20 5c 0a 20 20 20 20 20 20 20 20  $text \.        
19940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19950 20 20 20 20 20 20 20 20 20 20 20 20 5b 52 65 6d              [Rem
19960 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24  oveUsedOptions $
19970 6c 69 6e 65 20 7b 2d 73 74 72 69 63 74 20 2d 66  line {-strict -f
19980 61 69 6c 69 6e 64 65 78 20 3c 73 74 72 69 6e 67  ailindex <string
19990 3e 7d 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20  >}]].           
199a0 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20           }..    
199b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199c0 62 79 74 65 6c 65 6e 67 74 68 20 7b 7d 0a 20 20  bytelength {}.  
199d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199e0 20 20 69 6e 64 65 78 20 20 20 20 20 20 2d 0a 20    index      -. 
199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a00 20 20 20 77 6f 72 64 65 6e 64 20 20 20 20 2d 0a     wordend    -.
19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a20 20 20 20 20 77 6f 72 64 73 74 61 72 74 20 20 7b      wordstart  {
19a30 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
19a40 48 69 6e 74 73 20 3c 63 68 61 72 49 6e 64 65 78  Hints <charIndex
19a50 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  >] }.           
19a60 20 20 20 20 20 20 20 20 20 72 61 6e 67 65 20 20           range  
19a70 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20      -.          
19a80 20 20 20 20 20 20 20 20 20 20 72 65 70 6c 61 63            replac
19a90 65 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44  e    { return [D
19aa0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 66 69 72  isplayHints <fir
19ab0 73 74 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  st>] }.         
19ac0 20 20 20 20 20 20 20 20 20 20 20 72 65 70 65 61             repea
19ad0 74 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b  t     { return [
19ae0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 63 6f  DisplayHints <co
19af0 75 6e 74 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20  unt>] }.        
19b00 20 20 20 20 20 20 20 20 20 20 20 20 74 6f 6c 6f              tolo
19b10 77 65 72 20 20 20 20 2d 0a 20 20 20 20 20 20 20  wer    -.       
19b20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6f 74               tot
19b30 69 74 6c 65 20 20 20 20 2d 0a 20 20 20 20 20 20  itle    -.      
19b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6f                to
19b50 75 70 70 65 72 20 20 20 20 7b 20 72 65 74 75 72  upper    { retur
19b60 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
19b70 3f 66 69 72 73 74 3f 5d 20 7d 0a 20 20 20 20 20  ?first?] }.     
19b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19b90 72 69 6d 20 20 20 20 20 20 20 2d 0a 20 20 20 20  rim       -.    
19ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bb0 74 72 69 6d 6c 65 66 74 20 20 20 2d 0a 20 20 20  trimleft   -.   
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bd0 20 74 72 69 6d 72 69 67 68 74 20 20 7b 20 72 65   trimright  { re
19be0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
19bf0 74 73 20 3f 63 68 61 72 73 3f 5d 20 7d 0a 20 20  ts ?chars?] }.  
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
19c10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
19c20 20 20 20 20 20 20 20 20 20 20 34 20 7b 0a 20 20            4 {.  
19c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77                sw
19c40 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 20  itch -- $cmd {. 
19c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c60 20 20 20 63 6f 6d 70 61 72 65 20 2d 0a 20 20 20     compare -.   
19c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c80 20 65 71 75 61 6c 20 20 20 7b 0a 20 20 20 20 20   equal   {.     
19c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ca0 20 20 20 69 66 20 7b 22 2d 6c 65 6e 67 74 68 22     if {"-length"
19cb0 20 3d 3d 20 24 70 72 65 76 7d 20 7b 0a 20 20 20   == $prev} {.   
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cd0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
19ce0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 69  [DisplayHints <i
19cf0 6e 74 3e 5d 0a 20 20 20 20 20 20 20 20 20 20 20  nt>].           
19d00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
19d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43         return [C
19d30 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
19d40 24 74 65 78 74 20 5c 0a 20 20 20 20 20 20 20 20  $text \.        
19d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d60 20 20 20 20 20 20 20 20 20 20 20 20 5b 52 65 6d              [Rem
19d70 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24  oveUsedOptions $
19d80 6c 69 6e 65 20 7b 2d 6e 6f 63 61 73 65 20 2d 6c  line {-nocase -l
19d90 65 6e 67 74 68 20 3c 73 74 72 69 6e 67 3e 7d 5d  ength <string>}]
19da0 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
19db0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 72               fir
19dd0 73 74 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20  st -.           
19de0 20 20 20 20 20 20 20 20 20 6c 61 73 74 20 20 7b           last  {
19df0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
19e00 48 69 6e 74 73 20 3f 73 74 61 72 74 49 6e 64 65  Hints ?startInde
19e10 78 3f 5d 20 7d 0a 0a 20 20 20 20 20 20 20 20 20  x?] }..         
19e20 20 20 20 20 20 20 20 20 20 20 20 6d 61 70 20 20             map  
19e30 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   -.             
19e40 20 20 20 20 20 20 20 6d 61 74 63 68 20 7b 20 72         match { r
19e50 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
19e60 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a  nts <string>] }.
19e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19e80 20 20 20 20 20 69 73 20 7b 0a 20 20 20 20 20 20       is {.      
19e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ea0 20 20 69 66 20 7b 22 2d 66 61 69 6c 69 6e 64 65    if {"-failinde
19eb0 78 22 20 3d 3d 20 24 70 72 65 76 7d 20 7b 0a 20  x" == $prev} {. 
19ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ed0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
19ee0 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e  n [VarCompletion
19ef0 20 24 74 65 78 74 5d 0a 20 20 20 20 20 20 20 20   $text].        
19f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f10 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
19f20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
19f30 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
19f40 73 74 20 24 74 65 78 74 20 5c 0a 20 20 20 20 20  st $text \.     
19f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
19f70 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e  RemoveUsedOption
19f80 73 20 24 6c 69 6e 65 20 7b 2d 73 74 72 69 63 74  s $line {-strict
19f90 20 2d 66 61 69 6c 69 6e 64 65 78 20 3c 73 74 72   -failindex <str
19fa0 69 6e 67 3e 7d 5d 5d 0a 20 20 20 20 20 20 20 20  ing>}]].        
19fb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20              }.. 
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fd0 20 20 20 62 79 74 65 6c 65 6e 67 74 68 20 7b 7d     bytelength {}
19fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19ff0 20 20 20 20 20 69 6e 64 65 78 20 20 20 20 20 20       index      
1a000 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {}.             
1a010 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 20 20         length   
1a020 20 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20    {}.           
1a030 20 20 20 20 20 20 20 20 20 72 61 6e 67 65 20 20           range  
1a040 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20      -.          
1a050 20 20 20 20 20 20 20 20 20 20 72 65 70 6c 61 63            replac
1a060 65 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44  e    { return [D
1a070 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c 61 73  isplayHints <las
1a080 74 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  t>] }.          
1a090 20 20 20 20 20 20 20 20 20 20 72 65 70 65 61 74            repeat
1a0a0 20 20 20 20 20 7b 7d 0a 20 20 20 20 20 20 20 20       {}.        
1a0b0 20 20 20 20 20 20 20 20 20 20 20 20 74 6f 6c 6f              tolo
1a0c0 77 65 72 20 20 20 20 2d 0a 20 20 20 20 20 20 20  wer    -.       
1a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6f 74               tot
1a0e0 69 74 6c 65 20 20 20 20 2d 0a 20 20 20 20 20 20  itle    -.      
1a0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6f                to
1a100 75 70 70 65 72 20 20 20 20 7b 20 72 65 74 75 72  upper    { retur
1a110 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
1a120 3f 6c 61 73 74 3f 5d 20 7d 0a 20 20 20 20 20 20  ?last?] }.      
1a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1a140 69 6d 20 20 20 20 20 20 20 2d 0a 20 20 20 20 20  im       -.     
1a150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a160 72 69 6d 6c 65 66 74 20 20 20 2d 0a 20 20 20 20  rimleft   -.    
1a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a180 74 72 69 6d 72 69 67 68 74 20 20 7b 7d 0a 20 20  trimright  {}.  
1a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1a0 20 20 77 6f 72 64 65 6e 64 20 20 20 20 2d 0a 20    wordend    -. 
1a1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1c0 20 20 20 77 6f 72 64 73 74 61 72 74 20 20 7b 7d     wordstart  {}
1a1d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a1e0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d   }.            }
1a1f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66  .            def
1a200 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 20 20  ault {.         
1a210 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
1a220 20 24 63 6d 64 20 7b 0a 20 20 20 20 20 20 20 20   $cmd {.        
1a230 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 70              comp
1a240 61 72 65 20 2d 0a 20 20 20 20 20 20 20 20 20 20  are -.          
1a250 20 20 20 20 20 20 20 20 20 20 65 71 75 61 6c 20            equal 
1a260 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
1a270 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
1a280 22 2d 6c 65 6e 67 74 68 22 20 3d 3d 20 24 70 72  "-length" == $pr
1a290 65 76 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ev} {.          
1a2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2b0 20 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61    return [Displa
1a2c0 79 48 69 6e 74 73 20 3c 69 6e 74 3e 5d 0a 20 20  yHints <int>].  
1a2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2e0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1a2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a300 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
1a310 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5c  FromList $text \
1a320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a340 20 20 20 20 20 5b 52 65 6d 6f 76 65 55 73 65 64       [RemoveUsed
1a350 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20 7b 2d  Options $line {-
1a360 6e 6f 63 61 73 65 20 2d 6c 65 6e 67 74 68 20 3c  nocase -length <
1a370 73 74 72 69 6e 67 3e 7d 5d 5d 0a 20 20 20 20 20  string>}]].     
1a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1a390 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a3a0 20 20 20 20 20 20 69 73 20 7b 0a 20 20 20 20 20        is {.     
1a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3c0 20 20 20 69 66 20 7b 22 2d 66 61 69 6c 69 6e 64     if {"-failind
1a3d0 65 78 22 20 3d 3d 20 24 70 72 65 76 7d 20 7b 0a  ex" == $prev} {.
1a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1a400 72 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f  rn [VarCompletio
1a410 6e 20 24 74 65 78 74 5d 0a 20 20 20 20 20 20 20  n $text].       
1a420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a430 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
1a440 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1a450 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
1a460 69 73 74 20 24 74 65 78 74 20 5c 0a 20 20 20 20  ist $text \.    
1a470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a490 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f  [RemoveUsedOptio
1a4a0 6e 73 20 24 6c 69 6e 65 20 7b 2d 73 74 72 69 63  ns $line {-stric
1a4b0 74 20 2d 66 61 69 6c 69 6e 64 65 78 20 3c 73 74  t -failindex <st
1a4c0 72 69 6e 67 3e 7d 5d 5d 0a 20 20 20 20 20 20 20  ring>}]].       
1a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a               }..
1a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4f0 20 20 20 20 72 65 70 6c 61 63 65 20 7b 20 72 65      replace { re
1a500 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
1a510 74 73 20 3f 6e 65 77 53 74 72 69 6e 67 3f 5d 20  ts ?newString?] 
1a520 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
1a530 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
1a540 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
1a550 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20      return "".  
1a560 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f    }..    proc co
1a570 6d 70 6c 65 74 65 28 73 75 62 73 74 29 20 7b 74  mplete(subst) {t
1a580 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
1a590 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20  ne pos mod} {.  
1a5a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f        return [Co
1a5b0 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
1a5c0 74 65 78 74 20 5b 52 65 6d 6f 76 65 55 73 65 64  text [RemoveUsed
1a5d0 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20 7b 0a  Options $line {.
1a5e0 20 20 20 20 20 20 20 20 20 20 20 20 2d 6e 6f 62              -nob
1a5f0 61 63 6b 73 6c 61 73 68 65 73 20 2d 6e 6f 63 6f  ackslashes -noco
1a600 6d 6d 61 6e 64 73 20 2d 6e 6f 76 61 72 69 61 62  mmands -novariab
1a610 6c 65 73 20 3c 73 74 72 69 6e 67 3e 7d 5d 5d 0a  les <string>}]].
1a620 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20      }..    proc 
1a630 63 6f 6d 70 6c 65 74 65 28 73 77 69 74 63 68 29  complete(switch)
1a640 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
1a650 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
1a660 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 72 65  .        set pre
1a670 76 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20  v [PreviousWord 
1a680 24 73 74 61 72 74 20 24 6c 69 6e 65 5d 0a 20 20  $start $line].  
1a690 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67        if {[lleng
1a6a0 74 68 20 24 70 72 65 76 5d 20 26 26 20 22 2d 2d  th $prev] && "--
1a6b0 22 20 21 3d 20 24 70 72 65 76 0a 20 20 20 20 20  " != $prev.     
1a6c0 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28 22             && ("
1a6d0 2d 22 20 3d 3d 20 5b 73 74 72 69 6e 67 20 69 6e  -" == [string in
1a6e0 64 65 78 20 24 70 72 65 76 20 30 5d 20 7c 7c 20  dex $prev 0] || 
1a6f0 31 20 3d 3d 20 24 70 6f 73 29 7d 20 7b 0a 20 20  1 == $pos)} {.  
1a700 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6d            set cm
1a710 64 73 20 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70  ds [RemoveUsedOp
1a720 74 69 6f 6e 73 20 24 6c 69 6e 65 20 5c 0a 20 20  tions $line \.  
1a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a740 20 20 20 20 20 20 20 20 7b 2d 65 78 61 63 74 20          {-exact 
1a750 2d 67 6c 6f 62 20 2d 72 65 67 65 78 70 20 2d 2d  -glob -regexp --
1a760 7d 20 7b 2d 2d 7d 5d 0a 20 20 20 20 20 20 20 20  } {--}].        
1a770 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68      if {[llength
1a780 20 24 63 6d 64 73 5d 7d 20 7b 0a 20 20 20 20 20   $cmds]} {.     
1a790 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1a7a0 6e 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b  n [string trim [
1a7b0 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
1a7c0 20 24 74 65 78 74 20 24 63 6d 64 73 5d 5d 0a 20   $text $cmds]]. 
1a7d0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
1a7e0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
1a7f0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 69            set vi
1a800 72 74 75 61 6c 5f 70 6f 73 20 5b 65 78 70 72 20  rtual_pos [expr 
1a810 7b 24 70 6f 73 20 2d 20 5b 46 69 72 73 74 4e 6f  {$pos - [FirstNo
1a820 6e 4f 70 74 69 6f 6e 20 24 6c 69 6e 65 5d 7d 5d  nOption $line]}]
1a830 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69  .            swi
1a840 74 63 68 20 2d 2d 20 24 76 69 72 74 75 61 6c 5f  tch -- $virtual_
1a850 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20  pos {.          
1a860 20 20 20 20 20 20 30 20 20 20 20 20 20 20 7b 20        0       { 
1a870 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
1a880 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d  ints <string>] }
1a890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a8a0 20 31 20 20 20 20 20 20 20 7b 20 72 65 74 75 72   1       { retur
1a8b0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
1a8c0 3c 70 61 74 74 65 72 6e 3e 5d 20 7d 0a 20 20 20  <pattern>] }.   
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 32 20 20               2  
1a8e0 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44       { return [D
1a8f0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 62 6f 64  isplayHints <bod
1a900 79 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  y>] }.          
1a910 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0a        default {.
1a920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a930 20 20 20 20 73 77 69 74 63 68 20 5b 65 78 70 72      switch [expr
1a940 20 7b 24 76 69 72 74 75 61 6c 5f 70 6f 73 20 25   {$virtual_pos %
1a950 20 32 7d 5d 20 7b 0a 20 20 20 20 20 20 20 20 20   2}] {.         
1a960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
1a970 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
1a980 61 79 48 69 6e 74 73 20 3f 62 6f 64 79 3f 5d 20  ayHints ?body?] 
1a990 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
1a9a0 20 20 20 20 20 20 20 20 20 20 31 20 7b 20 72 65            1 { re
1a9b0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
1a9c0 74 73 20 3f 70 61 74 74 65 72 6e 3f 5d 20 7d 0a  ts ?pattern?] }.
1a9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9e0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1a9f0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1aa00 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
1aa10 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
1aa20 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 2d  ".    }..    # -
1aa30 2d 2d 20 54 43 4c 52 45 41 44 4c 49 4e 45 20 50  -- TCLREADLINE P
1aa40 41 43 4b 41 47 45 20 2d 2d 2d 0a 0a 20 20 20 20  ACKAGE ---..    
1aa50 23 20 63 72 65 61 74 65 20 61 20 74 63 6c 72 65  # create a tclre
1aa60 61 64 6c 69 6e 65 20 6e 61 6d 65 73 70 61 63 65  adline namespace
1aa70 20 69 6e 73 69 64 65 0a 20 20 20 20 23 20 74 63   inside.    # tc
1aa80 6c 72 65 61 64 6c 69 6e 65 20 61 6e 64 20 69 6d  lreadline and im
1aa90 70 6f 72 74 20 73 6f 6d 65 20 63 6f 6d 6d 61 6e  port some comman
1aaa0 64 73 2e 0a 20 20 20 20 23 0a 20 20 20 20 6e 61  ds..    #.    na
1aab0 6d 65 73 70 61 63 65 20 65 76 61 6c 20 74 63 6c  mespace eval tcl
1aac0 72 65 61 64 6c 69 6e 65 20 7b 0a 20 20 20 20 20  readline {.     
1aad0 20 20 20 63 61 74 63 68 20 7b 0a 20 20 20 20 20     catch {.     
1aae0 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65         namespace
1aaf0 20 69 6d 70 6f 72 74 20 5c 0a 20 20 20 20 20 20   import \.      
1ab00 20 20 20 20 20 20 20 20 20 20 3a 3a 74 63 6c 72            ::tclr
1ab10 65 61 64 6c 69 6e 65 3a 3a 44 69 73 70 6c 61 79  eadline::Display
1ab20 48 69 6e 74 73 20 5c 0a 20 20 20 20 20 20 20 20  Hints \.        
1ab30 20 20 20 20 20 20 20 20 3a 3a 74 63 6c 72 65 61          ::tclrea
1ab40 64 6c 69 6e 65 3a 3a 43 6f 6d 70 6c 65 74 65 46  dline::CompleteF
1ab50 72 6f 6d 4c 69 73 74 20 5c 0a 20 20 20 20 20 20  romList \.      
1ab60 20 20 20 20 20 20 20 20 20 20 3a 3a 74 63 6c 72            ::tclr
1ab70 65 61 64 6c 69 6e 65 3a 3a 4c 69 6e 64 65 78 20  eadline::Lindex 
1ab80 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  \.              
1ab90 20 20 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a    ::tclreadline:
1aba0 3a 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e  :CompleteBoolean
1abb0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  .        }.    }
1abc0 0a 0a 20 20 20 20 70 72 6f 63 20 74 63 6c 72 65  ..    proc tclre
1abd0 61 64 6c 69 6e 65 3a 3a 63 6f 6d 70 6c 65 74 65  adline::complete
1abe0 28 72 65 61 64 6c 69 6e 65 29 20 7b 74 65 78 74  (readline) {text
1abf0 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
1ac00 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20  pos mod} {.     
1ac10 20 20 20 73 65 74 20 63 6d 64 20 5b 4c 69 6e 64     set cmd [Lind
1ac20 65 78 20 24 6c 69 6e 65 20 31 5d 0a 20 20 20 20  ex $line 1].    
1ac30 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70      switch -- $p
1ac40 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  os {.           
1ac50 20 31 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d   1 { return [Com
1ac60 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74  pleteFromList $t
1ac70 65 78 74 20 5c 0a 20 20 20 20 20 20 20 20 20 20  ext \.          
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac90 20 20 7b 72 65 61 64 20 69 6e 69 74 69 61 6c 69    {read initiali
1aca0 7a 65 20 77 72 69 74 65 20 61 64 64 20 63 6f 6d  ze write add com
1acb0 70 6c 65 74 65 20 63 75 73 74 6f 6d 63 6f 6d 70  plete customcomp
1acc0 6c 65 74 65 72 0a 20 20 20 20 20 20 20 20 20 20  leter.          
1acd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ace0 20 20 20 62 75 69 6c 74 69 6e 63 6f 6d 70 6c 65     builtincomple
1acf0 74 65 72 20 65 6f 66 63 68 61 72 20 72 65 73 65  ter eofchar rese
1ad00 74 2d 74 65 72 6d 69 6e 61 6c 20 62 65 6c 6c 7d  t-terminal bell}
1ad10 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ].            }.
1ad20 20 20 20 20 20 20 20 20 20 20 20 20 32 20 7b 0a              2 {.
1ad30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad40 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b  switch -- $cmd {
1ad50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ad60 20 20 20 20 20 72 65 61 64 20 20 20 20 20 20 20       read       
1ad70 20 20 20 20 20 20 7b 7d 0a 20 20 20 20 20 20 20        {}.       
1ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 69               ini
1ad90 74 69 61 6c 69 7a 65 20 20 20 20 20 20 20 7b 7d  tialize       {}
1ada0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1adb0 20 20 20 20 20 77 72 69 74 65 20 20 20 20 20 20       write      
1adc0 20 20 20 20 20 20 7b 7d 0a 20 20 20 20 20 20 20        {}.       
1add0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20                { 
1adf0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
1ae00 69 6e 74 73 20 3c 63 6f 6d 70 6c 65 74 65 72 4c  ints <completerL
1ae10 69 6e 65 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20  ine>] }.        
1ae20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 70              comp
1ae30 6c 65 74 65 72 20 20 20 20 20 20 20 20 7b 20 72  leter        { r
1ae40 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
1ae50 6e 74 73 20 3c 6c 69 6e 65 3e 5d 20 7d 0a 20 20  nts <line>] }.  
1ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae70 20 20 63 75 73 74 6f 6d 63 6f 6d 70 6c 65 74 65    customcomplete
1ae80 72 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  r  { return [Dis
1ae90 70 6c 61 79 48 69 6e 74 73 20 3f 73 63 72 69 70  playHints ?scrip
1aea0 74 43 6f 6d 70 6c 65 74 65 72 3f 5d 20 7d 0a 20  tCompleter?] }. 
1aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aec0 20 20 20 62 75 69 6c 74 69 6e 63 6f 6d 70 6c 65     builtincomple
1aed0 74 65 72 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  ter { return [Co
1aee0 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e 20 24 74  mpleteBoolean $t
1aef0 65 78 74 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  ext] }.         
1af00 20 20 20 20 20 20 20 20 20 20 20 65 6f 66 63 68             eofch
1af10 61 72 20 20 20 20 20 20 20 20 20 20 7b 20 72 65  ar          { re
1af20 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
1af30 74 73 20 3f 73 63 72 69 70 74 3f 5d 20 7d 0a 20  ts ?script?] }. 
1af40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af50 20 20 20 72 65 73 65 74 2d 74 65 72 6d 69 6e 61     reset-termina
1af60 6c 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20  l   {.          
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1af80 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
1af90 3a 65 6e 76 28 54 45 52 4d 29 5d 7d 20 7b 0a 20  :env(TERM)]} {. 
1afa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afb0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1afc0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
1afd0 69 73 74 20 24 74 65 78 74 20 24 3a 3a 65 6e 76  ist $text $::env
1afe0 28 54 45 52 4d 29 5d 0a 20 20 20 20 20 20 20 20  (TERM)].        
1aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b000 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20  } else {.       
1b010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b020 20 20 20 20 20 72 65 74 75 72 6e 20 5b 44 69 73       return [Dis
1b030 70 6c 61 79 48 69 6e 74 73 20 3f 74 65 72 6d 69  playHints ?termi
1b040 6e 61 6c 4e 61 6d 65 3f 5d 0a 20 20 20 20 20 20  nalName?].      
1b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b060 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
1b070 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1b080 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1b090 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1b0a0 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75    }.        retu
1b0b0 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20  rn "".    }..   
1b0c0 20 23 20 2d 2d 2d 20 45 4e 44 20 4f 46 20 54 43   # --- END OF TC
1b0d0 4c 52 45 41 44 4c 49 4e 45 20 50 41 43 4b 41 47  LREADLINE PACKAG
1b0e0 45 20 2d 2d 2d 0a 0a 20 20 20 20 70 72 6f 63 20  E ---..    proc 
1b0f0 63 6f 6d 70 6c 65 74 65 28 74 65 6c 6c 29 20 7b  complete(tell) {
1b100 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
1b110 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20  ine pos mod} {. 
1b120 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
1b130 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20   $pos {.        
1b140 20 20 20 20 31 20 7b 20 72 65 74 75 72 6e 20 5b      1 { return [
1b150 43 68 61 6e 6e 65 6c 49 64 20 24 74 65 78 74 5d  ChannelId $text]
1b160 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
1b170 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20       return "". 
1b180 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63     }..    proc c
1b190 6f 6d 70 6c 65 74 65 28 74 65 73 74 74 68 72 65  omplete(testthre
1b1a0 61 64 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  ad) {text start 
1b1b0 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
1b1c0 7d 20 7b 0a 0a 20 20 20 20 20 20 20 20 73 65 74  } {..        set
1b1d0 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6c 69   cmd [Lindex $li
1b1e0 6e 65 20 31 5d 0a 20 20 20 20 20 20 20 20 73 77  ne 1].        sw
1b1f0 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20  itch -- $pos {. 
1b200 20 20 20 20 20 20 20 20 20 20 20 31 20 7b 0a 20             1 {. 
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1b220 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1b230 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5c 0a  romList $text \.
1b240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b250 20 20 20 20 20 20 20 20 20 20 20 20 7b 2d 61 73              {-as
1b260 79 6e 63 20 63 72 65 61 74 65 20 65 72 72 6f 72  ync create error
1b270 70 72 6f 63 20 65 78 69 74 20 69 64 20 6e 61 6d  proc exit id nam
1b280 65 73 20 73 65 6e 64 20 77 61 69 74 7d 5d 0a 20  es send wait}]. 
1b290 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
1b2a0 20 20 20 20 20 20 20 20 20 32 20 7b 0a 20 20 20           2 {.   
1b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69               swi
1b2c0 74 63 68 20 2d 2d 20 5b 50 72 65 76 69 6f 75 73  tch -- [Previous
1b2d0 57 6f 72 64 20 24 73 74 61 72 74 20 24 6c 69 6e  Word $start $lin
1b2e0 65 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  e] {.           
1b2f0 20 20 20 20 20 20 20 20 20 63 72 65 61 74 65 20           create 
1b300 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
1b310 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1b320 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e  n [BraceOrComman
1b330 64 20 24 74 65 78 74 20 24 73 74 61 72 74 20 24  d $text $start $
1b340 65 6e 64 20 24 6c 69 6e 65 20 24 70 6f 73 20 24  end $line $pos $
1b350 6d 6f 64 5d 0a 20 20 20 20 20 20 20 20 20 20 20  mod].           
1b360 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
1b380 61 73 79 6e 63 20 20 7b 20 72 65 74 75 72 6e 20  async  { return 
1b390 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
1b3a0 74 20 24 74 65 78 74 20 73 65 6e 64 5d 20 7d 0a  t $text send] }.
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3c0 20 20 20 20 73 65 6e 64 20 20 20 20 7b 20 72 65      send    { re
1b3d0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
1b3e0 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b 74 65  omList $text [te
1b3f0 73 74 74 68 72 65 61 64 20 6e 61 6d 65 73 5d 5d  stthread names]]
1b400 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
1b410 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b         default {
1b420 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
1b430 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
1b440 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 33 20  }.            3 
1b450 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
1b460 20 20 69 66 20 7b 22 73 65 6e 64 22 20 3d 3d 20    if {"send" == 
1b470 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 73  [PreviousWord $s
1b480 74 61 72 74 20 24 6c 69 6e 65 5d 7d 20 7b 0a 20  tart $line]} {. 
1b490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4a0 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c     return [Compl
1b4b0 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  eteFromList $tex
1b4c0 74 20 5b 74 65 73 74 74 68 72 65 61 64 20 6e 61  t [testthread na
1b4d0 6d 65 73 5d 5d 0a 20 20 20 20 20 20 20 20 20 20  mes]].          
1b4e0 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
1b4f0 22 73 65 6e 64 22 20 3d 3d 20 24 63 6d 64 7d 20  "send" == $cmd} 
1b500 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
1b510 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 42 72        return [Br
1b520 61 63 65 4f 72 43 6f 6d 6d 61 6e 64 20 24 74 65  aceOrCommand $te
1b530 78 74 20 24 73 74 61 72 74 20 24 65 6e 64 20 24  xt $start $end $
1b540 6c 69 6e 65 20 24 70 6f 73 20 24 6d 6f 64 5d 0a  line $pos $mod].
1b550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b560 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
1b570 20 20 20 20 20 20 20 20 20 20 20 20 34 20 7b 0a              4 {.
1b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b590 69 66 20 7b 22 73 65 6e 64 22 20 3d 3d 20 5b 4c  if {"send" == [L
1b5a0 69 6e 64 65 78 20 24 6c 69 6e 65 20 32 5d 7d 20  index $line 2]} 
1b5b0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
1b5c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 42 72        return [Br
1b5d0 61 63 65 4f 72 43 6f 6d 6d 61 6e 64 20 24 74 65  aceOrCommand $te
1b5e0 78 74 20 24 73 74 61 72 74 20 24 65 6e 64 20 24  xt $start $end $
1b5f0 6c 69 6e 65 20 24 70 6f 73 20 24 6d 6f 64 5d 0a  line $pos $mod].
1b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b610 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
1b620 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1b630 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20 20    return "".    
1b640 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70  }..    proc comp
1b650 6c 65 74 65 28 74 69 6d 65 29 20 7b 74 65 78 74  lete(time) {text
1b660 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
1b670 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20  pos mod} {.     
1b680 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f     switch -- $po
1b690 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s {.            
1b6a0 31 20 7b 20 72 65 74 75 72 6e 20 5b 42 72 61 63  1 { return [Brac
1b6b0 65 4f 72 43 6f 6d 6d 61 6e 64 20 24 74 65 78 74  eOrCommand $text
1b6c0 20 24 73 74 61 72 74 20 24 65 6e 64 20 24 6c 69   $start $end $li
1b6d0 6e 65 20 24 70 6f 73 20 24 6d 6f 64 5d 0a 20 20  ne $pos $mod].  
1b6e0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1b6f0 20 20 20 20 20 20 20 20 32 20 7b 20 72 65 74 75          2 { retu
1b700 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
1b710 20 3f 63 6f 75 6e 74 3f 5d 20 7d 0a 20 20 20 20   ?count?] }.    
1b720 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65      }.        re
1b730 74 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20  turn "".    }.. 
1b740 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65     proc complete
1b750 28 74 72 61 63 65 29 20 7b 74 65 78 74 20 73 74  (trace) {text st
1b760 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
1b770 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20   mod} {.        
1b780 73 65 74 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20  set cmd [Lindex 
1b790 24 6c 69 6e 65 20 31 5d 0a 20 20 20 20 20 20 20  $line 1].       
1b7a0 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20   switch -- $pos 
1b7b0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 31 20  {.            1 
1b7c0 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
1b7d0 74 65 46 72 6f 6d 4c 69 73 74 20 24 6d 6f 64 20  teFromList $mod 
1b7e0 7b 76 61 72 69 61 62 6c 65 20 76 64 65 6c 65 74  {variable vdelet
1b7f0 65 20 76 69 6e 66 6f 7d 5d 20 7d 0a 20 20 20 20  e vinfo}] }.    
1b800 20 20 20 20 20 20 20 20 32 20 7b 20 72 65 74 75          2 { retu
1b810 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
1b820 4c 69 73 74 20 24 74 65 78 74 20 5b 75 70 6c 65  List $text [uple
1b830 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d  vel [info level]
1b840 20 69 6e 66 6f 20 76 61 72 73 20 22 24 7b 6d 6f   info vars "${mo
1b850 64 7d 2a 22 5d 5d 20 7d 0a 20 20 20 20 20 20 20  d}*"]] }.       
1b860 20 20 20 20 20 33 20 7b 0a 20 20 20 20 20 20 20       3 {.       
1b870 20 20 20 20 20 20 20 20 20 23 20 54 4f 44 4f 20           # TODO 
1b880 4c 57 3a 20 32 20 27 76 61 72 69 61 62 6c 65 27  LW: 2 'variable'
1b890 20 63 61 73 65 73 2c 20 6d 69 73 73 69 6e 67 20   cases, missing 
1b8a0 27 76 69 6e 66 6f 27 20 63 61 73 65 3f 0a 20 20  'vinfo' case?.  
1b8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77                sw
1b8c0 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 20  itch -- $cmd {. 
1b8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8e0 20 20 20 76 61 72 69 61 62 6c 65 20 2d 0a 20 20     variable -.  
1b8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b900 20 20 76 61 72 69 61 62 6c 65 20 7b 20 72 65 74    variable { ret
1b910 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
1b920 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 72 20 77  mList $text {r w
1b930 20 75 7d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20   u}] }.         
1b940 20 20 20 20 20 20 20 20 20 20 20 76 64 65 6c 65             vdele
1b950 74 65 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20  te  {.          
1b960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1b970 74 20 76 61 72 20 5b 50 72 65 76 69 6f 75 73 57  t var [PreviousW
1b980 6f 72 64 20 24 73 74 61 72 74 20 24 6c 69 6e 65  ord $start $line
1b990 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
1b9a0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 6f            set mo
1b9b0 64 65 73 20 22 22 0a 20 20 20 20 20 20 20 20 20  des "".         
1b9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1b9d0 6f 72 65 61 63 68 20 69 6e 66 6f 20 5b 75 70 6c  oreach info [upl
1b9e0 65 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c  evel [info level
1b9f0 5d 20 74 72 61 63 65 20 76 69 6e 66 6f 20 24 76  ] trace vinfo $v
1ba00 61 72 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ar] {.          
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba20 20 20 6c 61 70 70 65 6e 64 20 6d 6f 64 65 73 20    lappend modes 
1ba30 5b 6c 69 6e 64 65 78 20 24 69 6e 66 6f 20 30 5d  [lindex $info 0]
1ba40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ba50 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba70 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c     return [Compl
1ba80 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  eteFromList $tex
1ba90 74 20 24 6d 6f 64 65 73 5d 0a 20 20 20 20 20 20  t $modes].      
1baa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
1bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bac0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 34 20 7b 0a              4 {.
1bae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baf0 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b  switch -- $cmd {
1bb00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bb10 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 7b 0a       variable {.
1bb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
1bb40 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
1bb50 20 24 74 65 78 74 20 5b 43 6f 6d 6d 61 6e 64 43   $text [CommandC
1bb60 6f 6d 70 6c 65 74 69 6f 6e 20 24 74 65 78 74 5d  ompletion $text]
1bb70 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
1bb80 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1bb90 20 20 20 20 20 20 20 20 20 20 20 20 76 64 65 6c              vdel
1bba0 65 74 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ete {.          
1bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1bbc0 74 20 76 61 72 20 5b 4c 69 6e 64 65 78 20 24 6c  t var [Lindex $l
1bbd0 69 6e 65 20 32 5d 0a 20 20 20 20 20 20 20 20 20  ine 2].         
1bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1bbf0 65 74 20 6d 6f 64 65 20 5b 50 72 65 76 69 6f 75  et mode [Previou
1bc00 73 57 6f 72 64 20 24 73 74 61 72 74 20 24 6c 69  sWord $start $li
1bc10 6e 65 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ne].            
1bc20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1bc30 73 63 72 69 70 74 73 20 22 22 0a 20 20 20 20 20  scripts "".     
1bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc50 20 20 20 66 6f 72 65 61 63 68 20 69 6e 66 6f 20     foreach info 
1bc60 5b 75 70 6c 65 76 65 6c 20 5b 69 6e 66 6f 20 6c  [uplevel [info l
1bc70 65 76 65 6c 5d 20 74 72 61 63 65 20 76 69 6e 66  evel] trace vinf
1bc80 6f 20 24 76 61 72 5d 20 7b 0a 20 20 20 20 20 20  o $var] {.      
1bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bca0 20 20 20 20 20 20 69 66 20 7b 24 6d 6f 64 65 20        if {$mode 
1bcb0 3d 3d 20 5b 6c 69 6e 64 65 78 20 24 69 6e 66 6f  == [lindex $info
1bcc0 20 30 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20   0]} {.         
1bcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bce0 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 73         lappend s
1bcf0 63 72 69 70 74 73 20 5b 6c 69 73 74 20 5b 6c 69  cripts [list [li
1bd00 6e 64 65 78 20 24 69 6e 66 6f 20 31 5d 5d 0a 20  ndex $info 1]]. 
1bd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd40 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1bd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1bd60 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
1bd70 6e 74 73 20 24 73 63 72 69 70 74 73 5d 0a 20 20  nts $scripts].  
1bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd90 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
1bda0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1bdb0 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
1bdc0 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a        return "".
1bdd0 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20      }..    proc 
1bde0 63 6f 6d 70 6c 65 74 65 28 75 6e 6b 6e 6f 77 6e  complete(unknown
1bdf0 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
1be00 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
1be10 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68  {.        switch
1be20 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20   -- $pos {.     
1be30 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20 7b         1       {
1be40 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
1be50 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
1be60 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69  [CommandCompleti
1be70 6f 6e 20 24 74 65 78 74 5d 5d 20 7d 0a 20 20 20  on $text]] }.   
1be80 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74           default
1be90 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
1bea0 61 79 48 69 6e 74 73 20 3f 61 72 67 3f 5d 20 7d  ayHints ?arg?] }
1beb0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1bec0 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20     return "".   
1bed0 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d   }..    proc com
1bee0 70 6c 65 74 65 28 75 6e 73 65 74 29 20 7b 74 65  plete(unset) {te
1bef0 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
1bf00 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20  e pos mod} {.   
1bf10 20 20 20 20 20 72 65 74 75 72 6e 20 5b 56 61 72       return [Var
1bf20 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 74 65 78 74  Completion $text
1bf30 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f  ].    }..    pro
1bf40 63 20 63 6f 6d 70 6c 65 74 65 28 75 70 64 61 74  c complete(updat
1bf50 65 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  e) {text start e
1bf60 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
1bf70 20 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74 63   {.        switc
1bf80 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20  h -- $pos {.    
1bf90 20 20 20 20 20 20 20 20 31 20 7b 20 72 65 74 75          1 { retu
1bfa0 72 6e 20 69 64 6c 65 74 61 73 6b 73 20 7d 0a 20  rn idletasks }. 
1bfb0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1bfc0 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20 20 7d   return "".    }
1bfd0 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c  ..    proc compl
1bfe0 65 74 65 28 75 70 6c 65 76 65 6c 29 20 7b 74 65  ete(uplevel) {te
1bff0 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
1c000 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20  e pos mod} {.   
1c010 20 20 20 20 20 73 65 74 20 6f 6e 65 20 5b 4c 69       set one [Li
1c020 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a 20 20  ndex $line 1].  
1c030 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
1c040 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20  $pos {.         
1c050 20 20 20 31 20 7b 0a 20 20 20 20 20 20 20 20 20     1 {.         
1c060 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43         return [C
1c070 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
1c080 24 74 65 78 74 20 22 3f 6c 65 76 65 6c 3f 20 5b  $text "?level? [
1c090 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69 6f  CommandCompletio
1c0a0 6e 20 24 74 65 78 74 5d 22 5d 0a 20 20 20 20 20  n $text]"].     
1c0b0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1c0c0 20 20 20 20 20 32 20 7b 0a 20 20 20 20 20 20 20       2 {.       
1c0d0 20 20 20 20 20 20 20 20 20 69 66 20 7b 22 23 22           if {"#"
1c0e0 20 3d 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65   == [string inde
1c0f0 78 20 24 6f 6e 65 20 30 5d 20 7c 7c 20 5b 72 65  x $one 0] || [re
1c100 67 65 78 70 20 7b 5e 5b 30 2d 39 5d 2a 24 7d 20  gexp {^[0-9]*$} 
1c110 24 6f 6e 65 5d 7d 20 7b 0a 20 20 20 20 20 20 20  $one]} {.       
1c120 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1c130 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
1c140 6d 4c 69 73 74 20 24 74 65 78 74 20 5b 43 6f 6d  mList $text [Com
1c150 6d 61 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 20 24  mandCompletion $
1c160 74 65 78 74 5d 5d 0a 20 20 20 20 20 20 20 20 20  text]].         
1c170 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
1c180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c190 20 20 20 20 72 65 74 75 72 6e 20 5b 44 69 73 70      return [Disp
1c1a0 6c 61 79 48 69 6e 74 73 20 3f 61 72 67 3f 5d 0a  layHints ?arg?].
1c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1c0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
1c1d0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61              defa
1c1e0 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ult { return [Di
1c1f0 73 70 6c 61 79 48 69 6e 74 73 20 3f 61 72 67 3f  splayHints ?arg?
1c200 5d 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ] }.        }.  
1c210 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a        return "".
1c220 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20      }..    proc 
1c230 63 6f 6d 70 6c 65 74 65 28 75 70 76 61 72 29 20  complete(upvar) 
1c240 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
1c250 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
1c260 20 20 20 20 20 20 20 20 73 65 74 20 6f 6e 65 20          set one 
1c270 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d  [Lindex $line 1]
1c280 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20  .        switch 
1c290 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20  -- $pos {.      
1c2a0 20 20 20 20 20 20 31 20 20 20 20 20 20 20 7b 20        1       { 
1c2b0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
1c2c0 69 6e 74 73 20 7b 3f 6c 65 76 65 6c 3f 20 3c 6f  ints {?level? <o
1c2d0 74 68 65 72 56 61 72 3e 7d 5d 20 7d 0a 20 20 20  therVar>}] }.   
1c2e0 20 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20           2      
1c2f0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
1c300 20 20 20 69 66 20 7b 22 23 22 20 3d 3d 20 5b 73     if {"#" == [s
1c310 74 72 69 6e 67 20 69 6e 64 65 78 20 24 6f 6e 65  tring index $one
1c320 20 30 5d 20 7c 7c 20 5b 72 65 67 65 78 70 20 7b   0] || [regexp {
1c330 5e 5b 30 2d 39 5d 2a 24 7d 20 24 6f 6e 65 5d 7d  ^[0-9]*$} $one]}
1c340 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
1c350 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 44         return [D
1c360 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6f 74 68  isplayHints <oth
1c370 65 72 56 61 72 3e 5d 0a 20 20 20 20 20 20 20 20  erVar>].        
1c380 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
1c390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c3a0 20 20 20 20 20 72 65 74 75 72 6e 20 5b 44 69 73       return [Dis
1c3b0 70 6c 61 79 48 69 6e 74 73 20 3c 6d 79 56 61 72  playHints <myVar
1c3c0 3e 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  >].             
1c3d0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
1c3e0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 33   }.            3
1c3f0 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
1c400 20 20 20 20 20 20 20 20 20 69 66 20 7b 22 23 22           if {"#"
1c410 20 3d 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65   == [string inde
1c420 78 20 24 6f 6e 65 20 30 5d 20 7c 7c 20 5b 72 65  x $one 0] || [re
1c430 67 65 78 70 20 7b 5e 5b 30 2d 39 5d 2a 24 7d 20  gexp {^[0-9]*$} 
1c440 24 6f 6e 65 5d 7d 20 7b 0a 20 20 20 20 20 20 20  $one]} {.       
1c450 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1c460 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
1c470 73 20 3c 6d 79 56 61 72 3e 5d 0a 20 20 20 20 20  s <myVar>].     
1c480 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
1c490 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e {.            
1c4a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
1c4b0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 6f 74  DisplayHints ?ot
1c4c0 68 65 72 56 61 72 3f 5d 0a 20 20 20 20 20 20 20  herVar?].       
1c4d0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1c4e0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1c4f0 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20       default {. 
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1c510 65 74 20 76 69 72 74 75 61 6c 5f 70 6f 73 20 24  et virtual_pos $
1c520 70 6f 73 0a 20 20 20 20 20 20 20 20 20 20 20 20  pos.            
1c530 20 20 20 20 69 66 20 7b 22 23 22 20 3d 3d 20 5b      if {"#" == [
1c540 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 6f 6e  string index $on
1c550 65 20 30 5d 20 7c 7c 20 5b 72 65 67 65 78 70 20  e 0] || [regexp 
1c560 7b 5e 5b 30 2d 39 5d 2a 24 7d 20 24 6f 6e 65 5d  {^[0-9]*$} $one]
1c570 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  } {.            
1c580 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 69 72          incr vir
1c590 74 75 61 6c 5f 70 6f 73 0a 20 20 20 20 20 20 20  tual_pos.       
1c5a0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1c5b0 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63             switc
1c5c0 68 20 5b 65 78 70 72 20 7b 24 76 69 72 74 75 61  h [expr {$virtua
1c5d0 6c 5f 70 6f 73 20 25 20 32 7d 5d 20 7b 0a 20 20  l_pos % 2}] {.  
1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5f0 20 20 30 20 7b 20 72 65 74 75 72 6e 20 5b 44 69    0 { return [Di
1c600 73 70 6c 61 79 48 69 6e 74 73 20 3f 6d 79 56 61  splayHints ?myVa
1c610 72 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  r?] }.          
1c620 20 20 20 20 20 20 20 20 20 20 31 20 7b 20 72 65            1 { re
1c630 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
1c640 74 73 20 3f 6f 74 68 65 72 56 61 72 3f 5d 20 7d  ts ?otherVar?] }
1c650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c660 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d   }.            }
1c670 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1c680 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20     return "".   
1c690 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d   }..    proc com
1c6a0 70 6c 65 74 65 28 76 61 72 69 61 62 6c 65 29 20  plete(variable) 
1c6b0 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
1c6c0 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
1c6d0 20 20 20 20 20 20 20 20 73 65 74 20 6d 6f 64 75          set modu
1c6e0 6c 6f 20 5b 65 78 70 72 20 7b 24 70 6f 73 20 25  lo [expr {$pos %
1c6f0 20 32 7d 5d 0a 20 20 20 20 20 20 20 20 73 77 69   2}].        swi
1c700 74 63 68 20 2d 2d 20 24 6d 6f 64 75 6c 6f 20 7b  tch -- $modulo {
1c710 0a 20 20 20 20 20 20 20 20 20 20 20 20 31 20 7b  .            1 {
1c720 20 72 65 74 75 72 6e 20 5b 56 61 72 43 6f 6d 70   return [VarComp
1c730 6c 65 74 69 6f 6e 20 24 74 65 78 74 5d 20 7d 0a  letion $text] }.
1c740 20 20 20 20 20 20 20 20 20 20 20 20 30 20 7b 0a              0 {.
1c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c760 69 66 20 7b 24 74 65 78 74 20 3d 3d 20 22 22 20  if {$text == "" 
1c770 7c 7c 20 24 74 65 78 74 20 3d 3d 20 22 5c 22 22  || $text == "\""
1c780 20 7c 7c 20 24 74 65 78 74 20 3d 3d 20 22 5c 7b   || $text == "\{
1c790 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  "} {.           
1c7a0 20 20 20 20 20 20 20 20 20 73 65 74 20 6c 69 6e           set lin
1c7b0 65 20 5b 51 75 6f 74 65 51 75 6f 74 65 73 20 24  e [QuoteQuotes $
1c7c0 6c 69 6e 65 5d 0a 20 20 20 20 20 20 20 20 20 20  line].          
1c7d0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
1c7e0 61 74 63 68 20 7b 73 65 74 20 76 61 6c 75 65 20  atch {set value 
1c7f0 5b 6c 69 73 74 20 5b 75 70 6c 65 76 65 6c 20 5b  [list [uplevel [
1c800 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 5c 0a 20 20  info level] \.  
1c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c830 20 20 73 65 74 20 5b 50 72 65 76 69 6f 75 73 57    set [PreviousW
1c840 6f 72 64 20 24 73 74 61 72 74 20 24 6c 69 6e 65  ord $start $line
1c850 5d 5d 5d 7d 20 6d 73 67 5d 7d 20 7b 0a 20 20 20  ]]]} msg]} {.   
1c860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c870 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20       return "". 
1c880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c890 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8b0 20 20 20 20 72 65 74 75 72 6e 20 5b 51 75 6f 74      return [Quot
1c8c0 65 20 24 76 61 6c 75 65 20 24 74 65 78 74 5d 0a  e $value $text].
1c8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8e0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1c8f0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1c900 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
1c910 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
1c920 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f  ".    }..    pro
1c930 63 20 63 6f 6d 70 6c 65 74 65 28 76 77 61 69 74  c complete(vwait
1c940 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
1c950 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
1c960 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68  {.        switch
1c970 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20   -- $pos {.     
1c980 20 20 20 20 20 20 20 31 20 7b 20 72 65 74 75 72         1 { retur
1c990 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e  n [VarCompletion
1c9a0 20 24 6d 6f 64 5d 20 7d 0a 20 20 20 20 20 20 20   $mod] }.       
1c9b0 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   }.        retur
1c9c0 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20  n "".    }..    
1c9d0 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 77 68  proc complete(wh
1c9e0 69 6c 65 29 20 7b 74 65 78 74 20 73 74 61 72 74  ile) {text start
1c9f0 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
1ca00 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 77 69  d} {.        swi
1ca10 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20  tch -- $pos {.  
1ca20 20 20 20 20 20 20 20 20 20 20 31 20 2d 0a 20 20            1 -.  
1ca30 20 20 20 20 20 20 20 20 20 20 32 20 7b 0a 20 20            2 {.  
1ca40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1ca50 74 75 72 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d  turn [BraceOrCom
1ca60 6d 61 6e 64 20 24 74 65 78 74 20 24 73 74 61 72  mand $text $star
1ca70 74 20 24 65 6e 64 20 24 6c 69 6e 65 20 24 70 6f  t $end $line $po
1ca80 73 20 24 6d 6f 64 5d 0a 20 20 20 20 20 20 20 20  s $mod].        
1ca90 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
1caa0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
1cab0 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 2d  ".    }..    # -
1cac0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1cad0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1cae0 2d 2d 2d 2d 0a 20 20 20 20 23 20 20 20 20 20 20  ----.    #      
1caf0 20 20 20 20 20 20 20 20 20 20 20 20 54 4b 0a 20              TK. 
1cb00 20 20 20 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d     # -----------
1cb10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1cb20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20 20 20  ----------..    
1cb30 23 20 47 45 4e 45 52 49 43 20 57 49 44 47 45 54  # GENERIC WIDGET
1cb40 20 43 4f 4e 46 49 47 55 52 41 54 49 4f 4e 0a 0a   CONFIGURATION..
1cb50 20 20 20 20 70 72 6f 63 20 57 69 64 67 65 74 43      proc WidgetC
1cb60 68 69 6c 64 72 65 6e 20 7b 7b 70 61 74 74 65 72  hildren {{patter
1cb70 6e 20 2e 7d 7d 20 7b 0a 20 20 20 20 20 20 20 20  n .}} {.        
1cb80 72 65 67 73 75 62 20 7b 5e 28 5b 5e 5c 2e 5d 29  regsub {^([^\.])
1cb90 7d 20 24 70 61 74 74 65 72 6e 20 7b 5c 2e 5c 31  } $pattern {\.\1
1cba0 7d 20 70 61 74 74 65 72 6e 0a 20 20 20 20 20 20  } pattern.      
1cbb0 20 20 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6c    if {![string l
1cbc0 65 6e 67 74 68 20 24 70 61 74 74 65 72 6e 5d 7d  ength $pattern]}
1cbd0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73   {.            s
1cbe0 65 74 20 70 61 74 74 65 72 6e 20 2e 0a 20 20 20  et pattern ..   
1cbf0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
1cc00 66 20 7b 5b 77 69 6e 66 6f 20 65 78 69 73 74 73  f {[winfo exists
1cc10 20 24 70 61 74 74 65 72 6e 5d 7d 20 7b 0a 20 20   $pattern]} {.  
1cc20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1cc30 20 5b 63 6f 6e 63 61 74 20 24 70 61 74 74 65 72   [concat $patter
1cc40 6e 20 5b 77 69 6e 66 6f 20 63 68 69 6c 64 72 65  n [winfo childre
1cc50 6e 20 24 70 61 74 74 65 72 6e 5d 5d 0a 20 20 20  n $pattern]].   
1cc60 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
1cc70 20 20 20 20 20 20 20 20 20 20 72 65 67 73 75 62            regsub
1cc80 20 7b 2e 5b 5e 2e 5d 2a 24 7d 20 24 70 61 74 74   {.[^.]*$} $patt
1cc90 65 72 6e 20 7b 2e 7d 20 70 61 74 74 65 72 6e 0a  ern {.} pattern.
1cca0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
1ccb0 5b 77 69 6e 66 6f 20 65 78 69 73 74 73 20 24 70  [winfo exists $p
1ccc0 61 74 74 65 72 6e 5d 7d 20 7b 0a 20 20 20 20 20  attern]} {.     
1ccd0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1cce0 6e 20 5b 63 6f 6e 63 61 74 20 24 70 61 74 74 65  n [concat $patte
1ccf0 72 6e 20 5b 77 69 6e 66 6f 20 63 68 69 6c 64 72  rn [winfo childr
1cd00 65 6e 20 24 70 61 74 74 65 72 6e 5d 5d 0a 20 20  en $pattern]].  
1cd10 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
1cd20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
1cd30 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20     return "".   
1cd40 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1cd50 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
1cd60 70 72 6f 63 20 57 69 64 67 65 74 44 65 73 63 65  proc WidgetDesce
1cd70 6e 64 61 6e 74 73 20 7b 7b 70 61 74 74 65 72 6e  ndants {{pattern
1cd80 20 2e 7d 7d 20 7b 0a 20 20 20 20 20 20 20 20 73   .}} {.        s
1cd90 65 74 20 74 72 65 65 20 5b 57 69 64 67 65 74 43  et tree [WidgetC
1cda0 68 69 6c 64 72 65 6e 20 24 70 61 74 74 65 72 6e  hildren $pattern
1cdb0 5d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ].        foreac
1cdc0 68 20 77 69 64 67 65 74 20 24 74 72 65 65 20 7b  h widget $tree {
1cdd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 70 70  .            app
1cde0 65 6e 64 20 74 72 65 65 20 22 20 5b 57 69 64 67  end tree " [Widg
1cdf0 65 74 44 65 73 63 65 6e 64 61 6e 74 73 20 24 77  etDescendants $w
1ce00 69 64 67 65 74 5d 22 0a 20 20 20 20 20 20 20 20  idget]".        
1ce10 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  }.        return
1ce20 20 24 74 72 65 65 0a 20 20 20 20 7d 0a 0a 20 20   $tree.    }..  
1ce30 20 20 70 72 6f 63 20 54 6f 70 6c 65 76 65 6c 57    proc ToplevelW
1ce40 69 6e 64 6f 77 73 20 7b 7d 20 7b 0a 20 20 20 20  indows {} {.    
1ce50 20 20 20 20 73 65 74 20 63 68 69 6c 64 72 65 6e      set children
1ce60 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e   [WidgetChildren
1ce70 20 22 22 5d 0a 20 20 20 20 20 20 20 20 73 65 74   ""].        set
1ce80 20 74 6f 70 6c 65 76 65 6c 73 20 22 22 0a 20 20   toplevels "".  
1ce90 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 77 69        foreach wi
1cea0 64 67 65 74 20 24 63 68 69 6c 64 72 65 6e 20 7b  dget $children {
1ceb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
1cec0 20 74 6f 70 6c 65 76 65 6c 20 5b 77 69 6e 66 6f   toplevel [winfo
1ced0 20 74 6f 70 6c 65 76 65 6c 20 24 77 69 64 67 65   toplevel $widge
1cee0 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  t].            i
1cef0 66 20 7b 2d 31 20 3d 3d 20 5b 6c 73 65 61 72 63  f {-1 == [lsearc
1cf00 68 20 24 74 6f 70 6c 65 76 65 6c 73 20 24 74 6f  h $toplevels $to
1cf10 70 6c 65 76 65 6c 5d 7d 20 7b 0a 20 20 20 20 20  plevel]} {.     
1cf20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65             lappe
1cf30 6e 64 20 74 6f 70 6c 65 76 65 6c 73 20 24 74 6f  nd toplevels $to
1cf40 70 6c 65 76 65 6c 0a 20 20 20 20 20 20 20 20 20  plevel.         
1cf50 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
1cf60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74         return $t
1cf70 6f 70 6c 65 76 65 6c 73 0a 20 20 20 20 7d 0a 0a  oplevels.    }..
1cf80 20 20 20 20 23 20 54 4f 44 4f 0a 20 20 20 20 23      # TODO.    #
1cf90 20 77 72 69 74 65 20 61 20 64 69 73 70 61 74 63   write a dispatc
1cfa0 68 65 72 20 68 65 72 65 2c 20 77 68 69 63 68 20  her here, which 
1cfb0 67 65 74 73 20 74 68 65 20 77 69 64 67 65 74 20  gets the widget 
1cfc0 63 6c 61 73 73 20 6e 61 6d 65 0a 20 20 20 20 23  class name.    #
1cfd0 20 61 6e 64 20 63 61 6c 6c 73 20 73 70 65 63 69   and calls speci
1cfe0 66 69 63 20 63 6f 6d 70 6c 65 74 65 72 73 2e 0a  fic completers..
1cff0 20 20 20 20 23 0a 20 20 20 20 23 20 70 72 6f 63      #.    # proc
1d000 20 63 6f 6d 70 6c 65 74 65 28 57 49 44 47 45 54   complete(WIDGET
1d010 5f 43 4f 4d 4d 41 4e 44 29 20 7b 74 65 78 74 20  _COMMAND) {text 
1d020 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
1d030 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 23 20  os mod} {.    # 
1d040 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65    return [Comple
1d050 74 65 46 72 6f 6d 4f 70 74 69 6f 6e 73 4f 72 53  teFromOptionsOrS
1d060 75 62 43 6d 64 73 20 24 74 65 78 74 20 24 73 74  ubCmds $text $st
1d070 61 72 74 20 24 65 6e 64 20 24 6c 69 6e 65 20 24  art $end $line $
1d080 70 6f 73 5d 0a 20 20 20 20 23 20 7d 0a 0a 20 20  pos].    # }..  
1d090 20 20 70 72 6f 63 20 45 76 65 6e 74 75 61 6c 6c    proc Eventuall
1d0a0 79 49 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f  yInsertLeadingDo
1d0b0 74 20 7b 74 65 78 74 20 66 61 6c 6c 62 61 63 6b  t {text fallback
1d0c0 7d 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 7b  } {.        if {
1d0d0 21 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  ![string length 
1d0e0 24 74 65 78 74 5d 7d 20 7b 0a 20 20 20 20 20 20  $text]} {.      
1d0f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69        return [li
1d100 73 74 20 2e 20 7b 7d 5d 0a 20 20 20 20 20 20 20  st . {}].       
1d110 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
1d120 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 44 69        return [Di
1d130 73 70 6c 61 79 48 69 6e 74 73 20 24 66 61 6c 6c  splayHints $fall
1d140 62 61 63 6b 5d 0a 20 20 20 20 20 20 20 20 7d 0a  back].        }.
1d150 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 54 4f 44      }..    # TOD
1d160 4f 0a 20 20 20 20 70 72 6f 63 20 43 6f 6d 70 6c  O.    proc Compl
1d170 65 74 65 43 6f 6c 6f 72 20 7b 74 65 78 74 20 7b  eteColor {text {
1d180 61 64 64 20 22 22 7d 7d 20 7b 0a 0a 20 20 20 20  add ""}} {..    
1d190 20 20 20 20 23 20 77 65 20 73 65 74 20 74 68 65      # we set the
1d1a0 20 76 61 72 69 61 62 6c 65 20 6f 6e 6c 79 20 6f   variable only o
1d1b0 6e 63 65 20 74 6f 20 73 70 65 65 64 20 75 70 2e  nce to speed up.
1d1c0 0a 20 20 20 20 20 20 20 20 23 0a 20 20 20 20 20  .        #.     
1d1d0 20 20 20 76 61 72 69 61 62 6c 65 20 63 6f 6c 6f     variable colo
1d1e0 72 73 0a 20 20 20 20 20 20 20 20 76 61 72 69 61  rs.        varia
1d1f0 62 6c 65 20 6e 75 6d 62 65 72 6c 65 73 73 5f 63  ble numberless_c
1d200 6f 6c 6f 72 73 0a 0a 20 20 20 20 20 20 20 20 69  olors..        i
1d210 66 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f ![info exists 
1d220 63 6f 6c 6f 72 73 5d 20 7b 0a 20 20 20 20 20 20  colors] {.      
1d230 20 20 20 20 20 20 23 20 66 72 6f 6d 20 2e 2e 20        # from .. 
1d240 58 31 31 52 36 2f 6c 69 62 2f 58 31 31 2f 72 67  X11R6/lib/X11/rg
1d250 62 2e 74 78 74 0a 20 20 20 20 20 20 20 20 20 20  b.txt.          
1d260 20 20 23 0a 20 20 20 20 20 20 20 20 20 20 20 20    #.            
1d270 73 65 74 20 63 6f 6c 6f 72 73 20 7b 0a 20 20 20  set colors {.   
1d280 20 20 20 20 20 20 20 20 20 20 20 20 20 73 6e 6f               sno
1d290 77 20 47 68 6f 73 74 57 68 69 74 65 20 57 68 69  w GhostWhite Whi
1d2a0 74 65 53 6d 6f 6b 65 20 67 61 69 6e 73 62 6f 72  teSmoke gainsbor
1d2b0 6f 20 46 6c 6f 72 61 6c 57 68 69 74 65 20 4f 6c  o FloralWhite Ol
1d2c0 64 4c 61 63 65 20 6c 69 6e 65 6e 0a 20 20 20 20  dLace linen.    
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 74 69              Anti
1d2e0 71 75 65 57 68 69 74 65 20 50 61 70 61 79 61 57  queWhite PapayaW
1d2f0 68 69 70 20 42 6c 61 6e 63 68 65 64 41 6c 6d 6f  hip BlanchedAlmo
1d300 6e 64 20 62 69 73 71 75 65 20 50 65 61 63 68 50  nd bisque PeachP
1d310 75 66 66 20 4e 61 76 61 6a 6f 57 68 69 74 65 0a  uff NavajoWhite.
1d320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d330 6d 6f 63 63 61 73 69 6e 20 63 6f 72 6e 73 69 6c  moccasin cornsil
1d340 6b 20 69 76 6f 72 79 20 4c 65 6d 6f 6e 43 68 69  k ivory LemonChi
1d350 66 66 6f 6e 20 73 65 61 73 68 65 6c 6c 20 68 6f  ffon seashell ho
1d360 6e 65 79 64 65 77 20 4d 69 6e 74 43 72 65 61 6d  neydew MintCream
1d370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d380 20 61 7a 75 72 65 20 41 6c 69 63 65 42 6c 75 65   azure AliceBlue
1d390 20 6c 61 76 65 6e 64 65 72 20 4c 61 76 65 6e 64   lavender Lavend
1d3a0 65 72 42 6c 75 73 68 20 4d 69 73 74 79 52 6f 73  erBlush MistyRos
1d3b0 65 20 77 68 69 74 65 20 62 6c 61 63 6b 0a 20 20  e white black.  
1d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 61                Da
1d3d0 72 6b 53 6c 61 74 65 47 72 61 79 20 44 61 72 6b  rkSlateGray Dark
1d3e0 53 6c 61 74 65 47 72 65 79 20 44 69 6d 47 72 61  SlateGrey DimGra
1d3f0 79 20 44 69 6d 47 72 65 79 20 53 6c 61 74 65 47  y DimGrey SlateG
1d400 72 61 79 20 53 6c 61 74 65 47 72 65 79 0a 20 20  ray SlateGrey.  
1d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 69                Li
1d420 67 68 74 53 6c 61 74 65 47 72 61 79 20 4c 69 67  ghtSlateGray Lig
1d430 68 74 53 6c 61 74 65 47 72 65 79 20 67 72 61 79  htSlateGrey gray
1d440 20 67 72 65 79 20 4c 69 67 68 74 47 72 65 79 20   grey LightGrey 
1d450 4c 69 67 68 74 47 72 61 79 0a 20 20 20 20 20 20  LightGray.      
1d460 20 20 20 20 20 20 20 20 20 20 4d 69 64 6e 69 67            Midnig
1d470 68 74 42 6c 75 65 20 6e 61 76 79 20 4e 61 76 79  htBlue navy Navy
1d480 42 6c 75 65 20 43 6f 72 6e 66 6c 6f 77 65 72 42  Blue CornflowerB
1d490 6c 75 65 20 44 61 72 6b 53 6c 61 74 65 42 6c 75  lue DarkSlateBlu
1d4a0 65 20 53 6c 61 74 65 42 6c 75 65 0a 20 20 20 20  e SlateBlue.    
1d4b0 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 64 69              Medi
1d4c0 75 6d 53 6c 61 74 65 42 6c 75 65 20 4c 69 67 68  umSlateBlue Ligh
1d4d0 74 53 6c 61 74 65 42 6c 75 65 20 4d 65 64 69 75  tSlateBlue Mediu
1d4e0 6d 42 6c 75 65 20 52 6f 79 61 6c 42 6c 75 65 20  mBlue RoyalBlue 
1d4f0 62 6c 75 65 20 44 6f 64 67 65 72 42 6c 75 65 0a  blue DodgerBlue.
1d500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d510 44 65 65 70 53 6b 79 42 6c 75 65 20 53 6b 79 42  DeepSkyBlue SkyB
1d520 6c 75 65 20 4c 69 67 68 74 53 6b 79 42 6c 75 65  lue LightSkyBlue
1d530 20 53 74 65 65 6c 42 6c 75 65 20 4c 69 67 68 74   SteelBlue Light
1d540 53 74 65 65 6c 42 6c 75 65 20 4c 69 67 68 74 42  SteelBlue LightB
1d550 6c 75 65 0a 20 20 20 20 20 20 20 20 20 20 20 20  lue.            
1d560 20 20 20 20 50 6f 77 64 65 72 42 6c 75 65 20 50      PowderBlue P
1d570 61 6c 65 54 75 72 71 75 6f 69 73 65 20 44 61 72  aleTurquoise Dar
1d580 6b 54 75 72 71 75 6f 69 73 65 20 4d 65 64 69 75  kTurquoise Mediu
1d590 6d 54 75 72 71 75 6f 69 73 65 20 74 75 72 71 75  mTurquoise turqu
1d5a0 6f 69 73 65 0a 20 20 20 20 20 20 20 20 20 20 20  oise.           
1d5b0 20 20 20 20 20 63 79 61 6e 20 4c 69 67 68 74 43       cyan LightC
1d5c0 79 61 6e 20 43 61 64 65 74 42 6c 75 65 20 4d 65  yan CadetBlue Me
1d5d0 64 69 75 6d 41 71 75 61 6d 61 72 69 6e 65 20 61  diumAquamarine a
1d5e0 71 75 61 6d 61 72 69 6e 65 20 44 61 72 6b 47 72  quamarine DarkGr
1d5f0 65 65 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  een.            
1d600 20 20 20 20 44 61 72 6b 4f 6c 69 76 65 47 72 65      DarkOliveGre
1d610 65 6e 20 44 61 72 6b 53 65 61 47 72 65 65 6e 20  en DarkSeaGreen 
1d620 53 65 61 47 72 65 65 6e 20 4d 65 64 69 75 6d 53  SeaGreen MediumS
1d630 65 61 47 72 65 65 6e 20 4c 69 67 68 74 53 65 61  eaGreen LightSea
1d640 47 72 65 65 6e 0a 20 20 20 20 20 20 20 20 20 20  Green.          
1d650 20 20 20 20 20 20 50 61 6c 65 47 72 65 65 6e 20        PaleGreen 
1d660 53 70 72 69 6e 67 47 72 65 65 6e 20 4c 61 77 6e  SpringGreen Lawn
1d670 47 72 65 65 6e 20 67 72 65 65 6e 20 63 68 61 72  Green green char
1d680 74 72 65 75 73 65 20 4d 65 64 69 75 6d 53 70 72  treuse MediumSpr
1d690 69 6e 67 47 72 65 65 6e 0a 20 20 20 20 20 20 20  ingGreen.       
1d6a0 20 20 20 20 20 20 20 20 20 47 72 65 65 6e 59 65           GreenYe
1d6b0 6c 6c 6f 77 20 4c 69 6d 65 47 72 65 65 6e 20 59  llow LimeGreen Y
1d6c0 65 6c 6c 6f 77 47 72 65 65 6e 20 46 6f 72 65 73  ellowGreen Fores
1d6d0 74 47 72 65 65 6e 20 4f 6c 69 76 65 44 72 61 62  tGreen OliveDrab
1d6e0 20 44 61 72 6b 4b 68 61 6b 69 0a 20 20 20 20 20   DarkKhaki.     
1d6f0 20 20 20 20 20 20 20 20 20 20 20 6b 68 61 6b 69             khaki
1d700 20 50 61 6c 65 47 6f 6c 64 65 6e 72 6f 64 20 4c   PaleGoldenrod L
1d710 69 67 68 74 47 6f 6c 64 65 6e 72 6f 64 59 65 6c  ightGoldenrodYel
1d720 6c 6f 77 20 4c 69 67 68 74 59 65 6c 6c 6f 77 20  low LightYellow 
1d730 79 65 6c 6c 6f 77 0a 20 20 20 20 20 20 20 20 20  yellow.         
1d740 20 20 20 20 20 20 20 67 6f 6c 64 20 4c 69 67 68         gold Ligh
1d750 74 47 6f 6c 64 65 6e 72 6f 64 20 67 6f 6c 64 65  tGoldenrod golde
1d760 6e 72 6f 64 20 44 61 72 6b 47 6f 6c 64 65 6e 72  nrod DarkGoldenr
1d770 6f 64 20 52 6f 73 79 42 72 6f 77 6e 20 49 6e 64  od RosyBrown Ind
1d780 69 61 6e 52 65 64 0a 20 20 20 20 20 20 20 20 20  ianRed.         
1d790 20 20 20 20 20 20 20 53 61 64 64 6c 65 42 72 6f         SaddleBro
1d7a0 77 6e 20 73 69 65 6e 6e 61 20 70 65 72 75 20 62  wn sienna peru b
1d7b0 75 72 6c 79 77 6f 6f 64 20 62 65 69 67 65 20 77  urlywood beige w
1d7c0 68 65 61 74 20 53 61 6e 64 79 42 72 6f 77 6e 20  heat SandyBrown 
1d7d0 74 61 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  tan.            
1d7e0 20 20 20 20 63 68 6f 63 6f 6c 61 74 65 20 66 69      chocolate fi
1d7f0 72 65 62 72 69 63 6b 20 62 72 6f 77 6e 20 44 61  rebrick brown Da
1d800 72 6b 53 61 6c 6d 6f 6e 20 73 61 6c 6d 6f 6e 20  rkSalmon salmon 
1d810 4c 69 67 68 74 53 61 6c 6d 6f 6e 20 6f 72 61 6e  LightSalmon oran
1d820 67 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ge.             
1d830 20 20 20 44 61 72 6b 4f 72 61 6e 67 65 20 63 6f     DarkOrange co
1d840 72 61 6c 20 4c 69 67 68 74 43 6f 72 61 6c 20 74  ral LightCoral t
1d850 6f 6d 61 74 6f 20 4f 72 61 6e 67 65 52 65 64 20  omato OrangeRed 
1d860 72 65 64 20 48 6f 74 50 69 6e 6b 20 44 65 65 70  red HotPink Deep
1d870 50 69 6e 6b 0a 20 20 20 20 20 20 20 20 20 20 20  Pink.           
1d880 20 20 20 20 20 70 69 6e 6b 20 4c 69 67 68 74 50       pink LightP
1d890 69 6e 6b 20 50 61 6c 65 56 69 6f 6c 65 74 52 65  ink PaleVioletRe
1d8a0 64 20 6d 61 72 6f 6f 6e 20 4d 65 64 69 75 6d 56  d maroon MediumV
1d8b0 69 6f 6c 65 74 52 65 64 20 56 69 6f 6c 65 74 52  ioletRed VioletR
1d8c0 65 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ed.             
1d8d0 20 20 20 6d 61 67 65 6e 74 61 20 76 69 6f 6c 65     magenta viole
1d8e0 74 20 70 6c 75 6d 20 6f 72 63 68 69 64 20 4d 65  t plum orchid Me
1d8f0 64 69 75 6d 4f 72 63 68 69 64 20 44 61 72 6b 4f  diumOrchid DarkO
1d900 72 63 68 69 64 20 44 61 72 6b 56 69 6f 6c 65 74  rchid DarkViolet
1d910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d920 20 42 6c 75 65 56 69 6f 6c 65 74 20 70 75 72 70   BlueViolet purp
1d930 6c 65 20 4d 65 64 69 75 6d 50 75 72 70 6c 65 20  le MediumPurple 
1d940 74 68 69 73 74 6c 65 20 73 6e 6f 77 31 20 73 6e  thistle snow1 sn
1d950 6f 77 32 20 73 6e 6f 77 33 20 73 6e 6f 77 34 0a  ow2 snow3 snow4.
1d960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d970 73 65 61 73 68 65 6c 6c 31 20 73 65 61 73 68 65  seashell1 seashe
1d980 6c 6c 32 20 73 65 61 73 68 65 6c 6c 33 20 73 65  ll2 seashell3 se
1d990 61 73 68 65 6c 6c 34 20 41 6e 74 69 71 75 65 57  ashell4 AntiqueW
1d9a0 68 69 74 65 31 20 41 6e 74 69 71 75 65 57 68 69  hite1 AntiqueWhi
1d9b0 74 65 32 0a 20 20 20 20 20 20 20 20 20 20 20 20  te2.            
1d9c0 20 20 20 20 41 6e 74 69 71 75 65 57 68 69 74 65      AntiqueWhite
1d9d0 33 20 41 6e 74 69 71 75 65 57 68 69 74 65 34 20  3 AntiqueWhite4 
1d9e0 62 69 73 71 75 65 31 20 62 69 73 71 75 65 32 20  bisque1 bisque2 
1d9f0 62 69 73 71 75 65 33 20 62 69 73 71 75 65 34 0a  bisque3 bisque4.
1da00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da10 50 65 61 63 68 50 75 66 66 31 20 50 65 61 63 68  PeachPuff1 Peach
1da20 50 75 66 66 32 20 50 65 61 63 68 50 75 66 66 33  Puff2 PeachPuff3
1da30 20 50 65 61 63 68 50 75 66 66 34 20 4e 61 76 61   PeachPuff4 Nava
1da40 6a 6f 57 68 69 74 65 31 0a 20 20 20 20 20 20 20  joWhite1.       
1da50 20 20 20 20 20 20 20 20 20 4e 61 76 61 6a 6f 57           NavajoW
1da60 68 69 74 65 32 20 4e 61 76 61 6a 6f 57 68 69 74  hite2 NavajoWhit
1da70 65 33 20 4e 61 76 61 6a 6f 57 68 69 74 65 34 20  e3 NavajoWhite4 
1da80 4c 65 6d 6f 6e 43 68 69 66 66 6f 6e 31 20 4c 65  LemonChiffon1 Le
1da90 6d 6f 6e 43 68 69 66 66 6f 6e 32 0a 20 20 20 20  monChiffon2.    
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 4c 65 6d 6f              Lemo
1dab0 6e 43 68 69 66 66 6f 6e 33 20 4c 65 6d 6f 6e 43  nChiffon3 LemonC
1dac0 68 69 66 66 6f 6e 34 20 63 6f 72 6e 73 69 6c 6b  hiffon4 cornsilk
1dad0 31 20 63 6f 72 6e 73 69 6c 6b 32 20 63 6f 72 6e  1 cornsilk2 corn
1dae0 73 69 6c 6b 33 20 63 6f 72 6e 73 69 6c 6b 34 0a  silk3 cornsilk4.
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db00 69 76 6f 72 79 31 20 69 76 6f 72 79 32 20 69 76  ivory1 ivory2 iv
1db10 6f 72 79 33 20 69 76 6f 72 79 34 20 68 6f 6e 65  ory3 ivory4 hone
1db20 79 64 65 77 31 20 68 6f 6e 65 79 64 65 77 32 20  ydew1 honeydew2 
1db30 68 6f 6e 65 79 64 65 77 33 20 68 6f 6e 65 79 64  honeydew3 honeyd
1db40 65 77 34 0a 20 20 20 20 20 20 20 20 20 20 20 20  ew4.            
1db50 20 20 20 20 4c 61 76 65 6e 64 65 72 42 6c 75 73      LavenderBlus
1db60 68 31 20 4c 61 76 65 6e 64 65 72 42 6c 75 73 68  h1 LavenderBlush
1db70 32 20 4c 61 76 65 6e 64 65 72 42 6c 75 73 68 33  2 LavenderBlush3
1db80 20 4c 61 76 65 6e 64 65 72 42 6c 75 73 68 34 0a   LavenderBlush4.
1db90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dba0 4d 69 73 74 79 52 6f 73 65 31 20 4d 69 73 74 79  MistyRose1 Misty
1dbb0 52 6f 73 65 32 20 4d 69 73 74 79 52 6f 73 65 33  Rose2 MistyRose3
1dbc0 20 4d 69 73 74 79 52 6f 73 65 34 20 61 7a 75 72   MistyRose4 azur
1dbd0 65 31 20 61 7a 75 72 65 32 20 61 7a 75 72 65 33  e1 azure2 azure3
1dbe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dbf0 20 61 7a 75 72 65 34 20 53 6c 61 74 65 42 6c 75   azure4 SlateBlu
1dc00 65 31 20 53 6c 61 74 65 42 6c 75 65 32 20 53 6c  e1 SlateBlue2 Sl
1dc10 61 74 65 42 6c 75 65 33 20 53 6c 61 74 65 42 6c  ateBlue3 SlateBl
1dc20 75 65 34 20 52 6f 79 61 6c 42 6c 75 65 31 0a 20  ue4 RoyalBlue1. 
1dc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
1dc40 6f 79 61 6c 42 6c 75 65 32 20 52 6f 79 61 6c 42  oyalBlue2 RoyalB
1dc50 6c 75 65 33 20 52 6f 79 61 6c 42 6c 75 65 34 20  lue3 RoyalBlue4 
1dc60 62 6c 75 65 31 20 62 6c 75 65 32 20 62 6c 75 65  blue1 blue2 blue
1dc70 33 20 62 6c 75 65 34 0a 20 20 20 20 20 20 20 20  3 blue4.        
1dc80 20 20 20 20 20 20 20 20 44 6f 64 67 65 72 42 6c          DodgerBl
1dc90 75 65 31 20 44 6f 64 67 65 72 42 6c 75 65 32 20  ue1 DodgerBlue2 
1dca0 44 6f 64 67 65 72 42 6c 75 65 33 20 44 6f 64 67  DodgerBlue3 Dodg
1dcb0 65 72 42 6c 75 65 34 20 53 74 65 65 6c 42 6c 75  erBlue4 SteelBlu
1dcc0 65 31 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e1.             
1dcd0 20 20 20 53 74 65 65 6c 42 6c 75 65 32 20 53 74     SteelBlue2 St
1dce0 65 65 6c 42 6c 75 65 33 20 53 74 65 65 6c 42 6c  eelBlue3 SteelBl
1dcf0 75 65 34 20 44 65 65 70 53 6b 79 42 6c 75 65 31  ue4 DeepSkyBlue1
1dd00 20 44 65 65 70 53 6b 79 42 6c 75 65 32 0a 20 20   DeepSkyBlue2.  
1dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65                De
1dd20 65 70 53 6b 79 42 6c 75 65 33 20 44 65 65 70 53  epSkyBlue3 DeepS
1dd30 6b 79 42 6c 75 65 34 20 53 6b 79 42 6c 75 65 31  kyBlue4 SkyBlue1
1dd40 20 53 6b 79 42 6c 75 65 32 20 53 6b 79 42 6c 75   SkyBlue2 SkyBlu
1dd50 65 33 20 53 6b 79 42 6c 75 65 34 0a 20 20 20 20  e3 SkyBlue4.    
1dd60 20 20 20 20 20 20 20 20 20 20 20 20 4c 69 67 68              Ligh
1dd70 74 53 6b 79 42 6c 75 65 31 20 4c 69 67 68 74 53  tSkyBlue1 LightS
1dd80 6b 79 42 6c 75 65 32 20 4c 69 67 68 74 53 6b 79  kyBlue2 LightSky
1dd90 42 6c 75 65 33 20 4c 69 67 68 74 53 6b 79 42 6c  Blue3 LightSkyBl
1dda0 75 65 34 20 53 6c 61 74 65 47 72 61 79 31 0a 20  ue4 SlateGray1. 
1ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1ddc0 6c 61 74 65 47 72 61 79 32 20 53 6c 61 74 65 47  lateGray2 SlateG
1ddd0 72 61 79 33 20 53 6c 61 74 65 47 72 61 79 34 20  ray3 SlateGray4 
1dde0 4c 69 67 68 74 53 74 65 65 6c 42 6c 75 65 31 20  LightSteelBlue1 
1ddf0 4c 69 67 68 74 53 74 65 65 6c 42 6c 75 65 32 0a  LightSteelBlue2.
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de10 4c 69 67 68 74 53 74 65 65 6c 42 6c 75 65 33 20  LightSteelBlue3 
1de20 4c 69 67 68 74 53 74 65 65 6c 42 6c 75 65 34 20  LightSteelBlue4 
1de30 4c 69 67 68 74 42 6c 75 65 31 20 4c 69 67 68 74  LightBlue1 Light
1de40 42 6c 75 65 32 20 4c 69 67 68 74 42 6c 75 65 33  Blue2 LightBlue3
1de50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1de60 20 4c 69 67 68 74 42 6c 75 65 34 20 4c 69 67 68   LightBlue4 Ligh
1de70 74 43 79 61 6e 31 20 4c 69 67 68 74 43 79 61 6e  tCyan1 LightCyan
1de80 32 20 4c 69 67 68 74 43 79 61 6e 33 20 4c 69 67  2 LightCyan3 Lig
1de90 68 74 43 79 61 6e 34 0a 20 20 20 20 20 20 20 20  htCyan4.        
1dea0 20 20 20 20 20 20 20 20 50 61 6c 65 54 75 72 71          PaleTurq
1deb0 75 6f 69 73 65 31 20 50 61 6c 65 54 75 72 71 75  uoise1 PaleTurqu
1dec0 6f 69 73 65 32 20 50 61 6c 65 54 75 72 71 75 6f  oise2 PaleTurquo
1ded0 69 73 65 33 20 50 61 6c 65 54 75 72 71 75 6f 69  ise3 PaleTurquoi
1dee0 73 65 34 0a 20 20 20 20 20 20 20 20 20 20 20 20  se4.            
1def0 20 20 20 20 43 61 64 65 74 42 6c 75 65 31 20 43      CadetBlue1 C
1df00 61 64 65 74 42 6c 75 65 32 20 43 61 64 65 74 42  adetBlue2 CadetB
1df10 6c 75 65 33 20 43 61 64 65 74 42 6c 75 65 34 20  lue3 CadetBlue4 
1df20 74 75 72 71 75 6f 69 73 65 31 0a 20 20 20 20 20  turquoise1.     
1df30 20 20 20 20 20 20 20 20 20 20 20 74 75 72 71 75             turqu
1df40 6f 69 73 65 32 20 74 75 72 71 75 6f 69 73 65 33  oise2 turquoise3
1df50 20 74 75 72 71 75 6f 69 73 65 34 20 63 79 61 6e   turquoise4 cyan
1df60 31 20 63 79 61 6e 32 20 63 79 61 6e 33 20 63 79  1 cyan2 cyan3 cy
1df70 61 6e 34 0a 20 20 20 20 20 20 20 20 20 20 20 20  an4.            
1df80 20 20 20 20 44 61 72 6b 53 6c 61 74 65 47 72 61      DarkSlateGra
1df90 79 31 20 44 61 72 6b 53 6c 61 74 65 47 72 61 79  y1 DarkSlateGray
1dfa0 32 20 44 61 72 6b 53 6c 61 74 65 47 72 61 79 33  2 DarkSlateGray3
1dfb0 20 44 61 72 6b 53 6c 61 74 65 47 72 61 79 34 0a   DarkSlateGray4.
1dfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfd0 61 71 75 61 6d 61 72 69 6e 65 31 20 61 71 75 61  aquamarine1 aqua
1dfe0 6d 61 72 69 6e 65 32 20 61 71 75 61 6d 61 72 69  marine2 aquamari
1dff0 6e 65 33 20 61 71 75 61 6d 61 72 69 6e 65 34 20  ne3 aquamarine4 
1e000 44 61 72 6b 53 65 61 47 72 65 65 6e 31 0a 20 20  DarkSeaGreen1.  
1e010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 61                Da
1e020 72 6b 53 65 61 47 72 65 65 6e 32 20 44 61 72 6b  rkSeaGreen2 Dark
1e030 53 65 61 47 72 65 65 6e 33 20 44 61 72 6b 53 65  SeaGreen3 DarkSe
1e040 61 47 72 65 65 6e 34 20 53 65 61 47 72 65 65 6e  aGreen4 SeaGreen
1e050 31 20 53 65 61 47 72 65 65 6e 32 0a 20 20 20 20  1 SeaGreen2.    
1e060 20 20 20 20 20 20 20 20 20 20 20 20 53 65 61 47              SeaG
1e070 72 65 65 6e 33 20 53 65 61 47 72 65 65 6e 34 20  reen3 SeaGreen4 
1e080 50 61 6c 65 47 72 65 65 6e 31 20 50 61 6c 65 47  PaleGreen1 PaleG
1e090 72 65 65 6e 32 20 50 61 6c 65 47 72 65 65 6e 33  reen2 PaleGreen3
1e0a0 20 50 61 6c 65 47 72 65 65 6e 34 0a 20 20 20 20   PaleGreen4.    
1e0b0 20 20 20 20 20 20 20 20 20 20 20 20 53 70 72 69              Spri
1e0c0 6e 67 47 72 65 65 6e 31 20 53 70 72 69 6e 67 47  ngGreen1 SpringG
1e0d0 72 65 65 6e 32 20 53 70 72 69 6e 67 47 72 65 65  reen2 SpringGree
1e0e0 6e 33 20 53 70 72 69 6e 67 47 72 65 65 6e 34 20  n3 SpringGreen4 
1e0f0 67 72 65 65 6e 31 20 67 72 65 65 6e 32 0a 20 20  green1 green2.  
1e100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 72                gr
1e110 65 65 6e 33 20 67 72 65 65 6e 34 20 63 68 61 72  een3 green4 char
1e120 74 72 65 75 73 65 31 20 63 68 61 72 74 72 65 75  treuse1 chartreu
1e130 73 65 32 20 63 68 61 72 74 72 65 75 73 65 33 20  se2 chartreuse3 
1e140 63 68 61 72 74 72 65 75 73 65 34 0a 20 20 20 20  chartreuse4.    
1e150 20 20 20 20 20 20 20 20 20 20 20 20 4f 6c 69 76              Oliv
1e160 65 44 72 61 62 31 20 4f 6c 69 76 65 44 72 61 62  eDrab1 OliveDrab
1e170 32 20 4f 6c 69 76 65 44 72 61 62 33 20 4f 6c 69  2 OliveDrab3 Oli
1e180 76 65 44 72 61 62 34 20 44 61 72 6b 4f 6c 69 76  veDrab4 DarkOliv
1e190 65 47 72 65 65 6e 31 0a 20 20 20 20 20 20 20 20  eGreen1.        
1e1a0 20 20 20 20 20 20 20 20 44 61 72 6b 4f 6c 69 76          DarkOliv
1e1b0 65 47 72 65 65 6e 32 20 44 61 72 6b 4f 6c 69 76  eGreen2 DarkOliv
1e1c0 65 47 72 65 65 6e 33 20 44 61 72 6b 4f 6c 69 76  eGreen3 DarkOliv
1e1d0 65 47 72 65 65 6e 34 20 6b 68 61 6b 69 31 20 6b  eGreen4 khaki1 k
1e1e0 68 61 6b 69 32 0a 20 20 20 20 20 20 20 20 20 20  haki2.          
1e1f0 20 20 20 20 20 20 6b 68 61 6b 69 33 20 6b 68 61        khaki3 kha
1e200 6b 69 34 20 4c 69 67 68 74 47 6f 6c 64 65 6e 72  ki4 LightGoldenr
1e210 6f 64 31 20 4c 69 67 68 74 47 6f 6c 64 65 6e 72  od1 LightGoldenr
1e220 6f 64 32 20 4c 69 67 68 74 47 6f 6c 64 65 6e 72  od2 LightGoldenr
1e230 6f 64 33 0a 20 20 20 20 20 20 20 20 20 20 20 20  od3.            
1e240 20 20 20 20 4c 69 67 68 74 47 6f 6c 64 65 6e 72      LightGoldenr
1e250 6f 64 34 20 4c 69 67 68 74 59 65 6c 6c 6f 77 31  od4 LightYellow1
1e260 20 4c 69 67 68 74 59 65 6c 6c 6f 77 32 20 4c 69   LightYellow2 Li
1e270 67 68 74 59 65 6c 6c 6f 77 33 20 4c 69 67 68 74  ghtYellow3 Light
1e280 59 65 6c 6c 6f 77 34 0a 20 20 20 20 20 20 20 20  Yellow4.        
1e290 20 20 20 20 20 20 20 20 79 65 6c 6c 6f 77 31 20          yellow1 
1e2a0 79 65 6c 6c 6f 77 32 20 79 65 6c 6c 6f 77 33 20  yellow2 yellow3 
1e2b0 79 65 6c 6c 6f 77 34 20 67 6f 6c 64 31 20 67 6f  yellow4 gold1 go
1e2c0 6c 64 32 20 67 6f 6c 64 33 20 67 6f 6c 64 34 20  ld2 gold3 gold4 
1e2d0 67 6f 6c 64 65 6e 72 6f 64 31 0a 20 20 20 20 20  goldenrod1.     
1e2e0 20 20 20 20 20 20 20 20 20 20 20 67 6f 6c 64 65             golde
1e2f0 6e 72 6f 64 32 20 67 6f 6c 64 65 6e 72 6f 64 33  nrod2 goldenrod3
1e300 20 67 6f 6c 64 65 6e 72 6f 64 34 20 44 61 72 6b   goldenrod4 Dark
1e310 47 6f 6c 64 65 6e 72 6f 64 31 20 44 61 72 6b 47  Goldenrod1 DarkG
1e320 6f 6c 64 65 6e 72 6f 64 32 0a 20 20 20 20 20 20  oldenrod2.      
1e330 20 20 20 20 20 20 20 20 20 20 44 61 72 6b 47 6f            DarkGo
1e340 6c 64 65 6e 72 6f 64 33 20 44 61 72 6b 47 6f 6c  ldenrod3 DarkGol
1e350 64 65 6e 72 6f 64 34 20 52 6f 73 79 42 72 6f 77  denrod4 RosyBrow
1e360 6e 31 20 52 6f 73 79 42 72 6f 77 6e 32 20 52 6f  n1 RosyBrown2 Ro
1e370 73 79 42 72 6f 77 6e 33 0a 20 20 20 20 20 20 20  syBrown3.       
1e380 20 20 20 20 20 20 20 20 20 52 6f 73 79 42 72 6f           RosyBro
1e390 77 6e 34 20 49 6e 64 69 61 6e 52 65 64 31 20 49  wn4 IndianRed1 I
1e3a0 6e 64 69 61 6e 52 65 64 32 20 49 6e 64 69 61 6e  ndianRed2 Indian
1e3b0 52 65 64 33 20 49 6e 64 69 61 6e 52 65 64 34 20  Red3 IndianRed4 
1e3c0 73 69 65 6e 6e 61 31 0a 20 20 20 20 20 20 20 20  sienna1.        
1e3d0 20 20 20 20 20 20 20 20 73 69 65 6e 6e 61 32 20          sienna2 
1e3e0 73 69 65 6e 6e 61 33 20 73 69 65 6e 6e 61 34 20  sienna3 sienna4 
1e3f0 62 75 72 6c 79 77 6f 6f 64 31 20 62 75 72 6c 79  burlywood1 burly
1e400 77 6f 6f 64 32 20 62 75 72 6c 79 77 6f 6f 64 33  wood2 burlywood3
1e410 20 62 75 72 6c 79 77 6f 6f 64 34 0a 20 20 20 20   burlywood4.    
1e420 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65 61              whea
1e430 74 31 20 77 68 65 61 74 32 20 77 68 65 61 74 33  t1 wheat2 wheat3
1e440 20 77 68 65 61 74 34 20 74 61 6e 31 20 74 61 6e   wheat4 tan1 tan
1e450 32 20 74 61 6e 33 20 74 61 6e 34 20 63 68 6f 63  2 tan3 tan4 choc
1e460 6f 6c 61 74 65 31 0a 20 20 20 20 20 20 20 20 20  olate1.         
1e470 20 20 20 20 20 20 20 63 68 6f 63 6f 6c 61 74 65         chocolate
1e480 32 20 63 68 6f 63 6f 6c 61 74 65 33 20 63 68 6f  2 chocolate3 cho
1e490 63 6f 6c 61 74 65 34 20 66 69 72 65 62 72 69 63  colate4 firebric
1e4a0 6b 31 20 66 69 72 65 62 72 69 63 6b 32 20 66 69  k1 firebrick2 fi
1e4b0 72 65 62 72 69 63 6b 33 0a 20 20 20 20 20 20 20  rebrick3.       
1e4c0 20 20 20 20 20 20 20 20 20 66 69 72 65 62 72 69           firebri
1e4d0 63 6b 34 20 62 72 6f 77 6e 31 20 62 72 6f 77 6e  ck4 brown1 brown
1e4e0 32 20 62 72 6f 77 6e 33 20 62 72 6f 77 6e 34 20  2 brown3 brown4 
1e4f0 73 61 6c 6d 6f 6e 31 20 73 61 6c 6d 6f 6e 32 20  salmon1 salmon2 
1e500 73 61 6c 6d 6f 6e 33 0a 20 20 20 20 20 20 20 20  salmon3.        
1e510 20 20 20 20 20 20 20 20 73 61 6c 6d 6f 6e 34 20          salmon4 
1e520 4c 69 67 68 74 53 61 6c 6d 6f 6e 31 20 4c 69 67  LightSalmon1 Lig
1e530 68 74 53 61 6c 6d 6f 6e 32 20 4c 69 67 68 74 53  htSalmon2 LightS
1e540 61 6c 6d 6f 6e 33 20 4c 69 67 68 74 53 61 6c 6d  almon3 LightSalm
1e550 6f 6e 34 20 6f 72 61 6e 67 65 31 0a 20 20 20 20  on4 orange1.    
1e560 20 20 20 20 20 20 20 20 20 20 20 20 6f 72 61 6e              oran
1e570 67 65 32 20 6f 72 61 6e 67 65 33 20 6f 72 61 6e  ge2 orange3 oran
1e580 67 65 34 20 44 61 72 6b 4f 72 61 6e 67 65 31 20  ge4 DarkOrange1 
1e590 44 61 72 6b 4f 72 61 6e 67 65 32 20 44 61 72 6b  DarkOrange2 Dark
1e5a0 4f 72 61 6e 67 65 33 0a 20 20 20 20 20 20 20 20  Orange3.        
1e5b0 20 20 20 20 20 20 20 20 44 61 72 6b 4f 72 61 6e          DarkOran
1e5c0 67 65 34 20 63 6f 72 61 6c 31 20 63 6f 72 61 6c  ge4 coral1 coral
1e5d0 32 20 63 6f 72 61 6c 33 20 63 6f 72 61 6c 34 20  2 coral3 coral4 
1e5e0 74 6f 6d 61 74 6f 31 20 74 6f 6d 61 74 6f 32 20  tomato1 tomato2 
1e5f0 74 6f 6d 61 74 6f 33 0a 20 20 20 20 20 20 20 20  tomato3.        
1e600 20 20 20 20 20 20 20 20 74 6f 6d 61 74 6f 34 20          tomato4 
1e610 4f 72 61 6e 67 65 52 65 64 31 20 4f 72 61 6e 67  OrangeRed1 Orang
1e620 65 52 65 64 32 20 4f 72 61 6e 67 65 52 65 64 33  eRed2 OrangeRed3
1e630 20 4f 72 61 6e 67 65 52 65 64 34 20 72 65 64 31   OrangeRed4 red1
1e640 20 72 65 64 32 0a 20 20 20 20 20 20 20 20 20 20   red2.          
1e650 20 20 20 20 20 20 72 65 64 33 20 72 65 64 34 20        red3 red4 
1e660 44 65 65 70 50 69 6e 6b 31 20 44 65 65 70 50 69  DeepPink1 DeepPi
1e670 6e 6b 32 20 44 65 65 70 50 69 6e 6b 33 20 44 65  nk2 DeepPink3 De
1e680 65 70 50 69 6e 6b 34 20 48 6f 74 50 69 6e 6b 31  epPink4 HotPink1
1e690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e6a0 20 48 6f 74 50 69 6e 6b 32 20 48 6f 74 50 69 6e   HotPink2 HotPin
1e6b0 6b 33 20 48 6f 74 50 69 6e 6b 34 20 70 69 6e 6b  k3 HotPink4 pink
1e6c0 31 20 70 69 6e 6b 32 20 70 69 6e 6b 33 20 70 69  1 pink2 pink3 pi
1e6d0 6e 6b 34 20 4c 69 67 68 74 50 69 6e 6b 31 0a 20  nk4 LightPink1. 
1e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
1e6f0 69 67 68 74 50 69 6e 6b 32 20 4c 69 67 68 74 50  ightPink2 LightP
1e700 69 6e 6b 33 20 4c 69 67 68 74 50 69 6e 6b 34 20  ink3 LightPink4 
1e710 50 61 6c 65 56 69 6f 6c 65 74 52 65 64 31 20 50  PaleVioletRed1 P
1e720 61 6c 65 56 69 6f 6c 65 74 52 65 64 32 0a 20 20  aleVioletRed2.  
1e730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 61                Pa
1e740 6c 65 56 69 6f 6c 65 74 52 65 64 33 20 50 61 6c  leVioletRed3 Pal
1e750 65 56 69 6f 6c 65 74 52 65 64 34 20 6d 61 72 6f  eVioletRed4 maro
1e760 6f 6e 31 20 6d 61 72 6f 6f 6e 32 20 6d 61 72 6f  on1 maroon2 maro
1e770 6f 6e 33 20 6d 61 72 6f 6f 6e 34 0a 20 20 20 20  on3 maroon4.    
1e780 20 20 20 20 20 20 20 20 20 20 20 20 56 69 6f 6c              Viol
1e790 65 74 52 65 64 31 20 56 69 6f 6c 65 74 52 65 64  etRed1 VioletRed
1e7a0 32 20 56 69 6f 6c 65 74 52 65 64 33 20 56 69 6f  2 VioletRed3 Vio
1e7b0 6c 65 74 52 65 64 34 20 6d 61 67 65 6e 74 61 31  letRed4 magenta1
1e7c0 20 6d 61 67 65 6e 74 61 32 0a 20 20 20 20 20 20   magenta2.      
1e7d0 20 20 20 20 20 20 20 20 20 20 6d 61 67 65 6e 74            magent
1e7e0 61 33 20 6d 61 67 65 6e 74 61 34 20 6f 72 63 68  a3 magenta4 orch
1e7f0 69 64 31 20 6f 72 63 68 69 64 32 20 6f 72 63 68  id1 orchid2 orch
1e800 69 64 33 20 6f 72 63 68 69 64 34 20 70 6c 75 6d  id3 orchid4 plum
1e810 31 20 70 6c 75 6d 32 0a 20 20 20 20 20 20 20 20  1 plum2.        
1e820 20 20 20 20 20 20 20 20 70 6c 75 6d 33 20 70 6c          plum3 pl
1e830 75 6d 34 20 4d 65 64 69 75 6d 4f 72 63 68 69 64  um4 MediumOrchid
1e840 31 20 4d 65 64 69 75 6d 4f 72 63 68 69 64 32 20  1 MediumOrchid2 
1e850 4d 65 64 69 75 6d 4f 72 63 68 69 64 33 0a 20 20  MediumOrchid3.  
1e860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65                Me
1e870 64 69 75 6d 4f 72 63 68 69 64 34 20 44 61 72 6b  diumOrchid4 Dark
1e880 4f 72 63 68 69 64 31 20 44 61 72 6b 4f 72 63 68  Orchid1 DarkOrch
1e890 69 64 32 20 44 61 72 6b 4f 72 63 68 69 64 33 20  id2 DarkOrchid3 
1e8a0 44 61 72 6b 4f 72 63 68 69 64 34 0a 20 20 20 20  DarkOrchid4.    
1e8b0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 72 70              purp
1e8c0 6c 65 31 20 70 75 72 70 6c 65 32 20 70 75 72 70  le1 purple2 purp
1e8d0 6c 65 33 20 70 75 72 70 6c 65 34 20 4d 65 64 69  le3 purple4 Medi
1e8e0 75 6d 50 75 72 70 6c 65 31 20 4d 65 64 69 75 6d  umPurple1 Medium
1e8f0 50 75 72 70 6c 65 32 0a 20 20 20 20 20 20 20 20  Purple2.        
1e900 20 20 20 20 20 20 20 20 4d 65 64 69 75 6d 50 75          MediumPu
1e910 72 70 6c 65 33 20 4d 65 64 69 75 6d 50 75 72 70  rple3 MediumPurp
1e920 6c 65 34 20 74 68 69 73 74 6c 65 31 20 74 68 69  le4 thistle1 thi
1e930 73 74 6c 65 32 20 74 68 69 73 74 6c 65 33 20 74  stle2 thistle3 t
1e940 68 69 73 74 6c 65 34 0a 20 20 20 20 20 20 20 20  histle4.        
1e950 20 20 20 20 20 20 20 20 67 72 61 79 30 20 67 72          gray0 gr
1e960 65 79 30 20 67 72 61 79 31 20 67 72 65 79 31 20  ey0 gray1 grey1 
1e970 67 72 61 79 32 20 67 72 65 79 32 20 67 72 61 79  gray2 grey2 gray
1e980 33 20 67 72 65 79 33 20 67 72 61 79 34 20 67 72  3 grey3 gray4 gr
1e990 65 79 34 20 67 72 61 79 35 0a 20 20 20 20 20 20  ey4 gray5.      
1e9a0 20 20 20 20 20 20 20 20 20 20 67 72 65 79 35 20            grey5 
1e9b0 67 72 61 79 36 20 67 72 65 79 36 20 67 72 61 79  gray6 grey6 gray
1e9c0 37 20 67 72 65 79 37 20 67 72 61 79 38 20 67 72  7 grey7 gray8 gr
1e9d0 65 79 38 20 67 72 61 79 39 20 67 72 65 79 39 20  ey8 gray9 grey9 
1e9e0 67 72 61 79 31 30 20 67 72 65 79 31 30 0a 20 20  gray10 grey10.  
1e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 72                gr
1ea00 61 79 31 31 20 67 72 65 79 31 31 20 67 72 61 79  ay11 grey11 gray
1ea10 31 32 20 67 72 65 79 31 32 20 67 72 61 79 31 33  12 grey12 gray13
1ea20 20 67 72 65 79 31 33 20 67 72 61 79 31 34 20 67   grey13 gray14 g
1ea30 72 65 79 31 34 20 67 72 61 79 31 35 0a 20 20 20  rey14 gray15.   
1ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 67 72 65               gre
1ea50 79 31 35 20 67 72 61 79 31 36 20 67 72 65 79 31  y15 gray16 grey1
1ea60 36 20 67 72 61 79 31 37 20 67 72 65 79 31 37 20  6 gray17 grey17 
1ea70 67 72 61 79 31 38 20 67 72 65 79 31 38 20 67 72  gray18 grey18 gr
1ea80 61 79 31 39 20 67 72 65 79 31 39 0a 20 20 20 20  ay19 grey19.    
1ea90 20 20 20 20 20 20 20 20 20 20 20 20 67 72 61 79              gray
1eaa0 32 30 20 67 72 65 79 32 30 20 67 72 61 79 32 31  20 grey20 gray21
1eab0 20 67 72 65 79 32 31 20 67 72 61 79 32 32 20 67   grey21 gray22 g
1eac0 72 65 79 32 32 20 67 72 61 79 32 33 20 67 72 65  rey22 gray23 gre
1ead0 79 32 33 20 67 72 61 79 32 34 0a 20 20 20 20 20  y23 gray24.     
1eae0 20 20 20 20 20 20 20 20 20 20 20 67 72 65 79 32             grey2
1eaf0 34 20 67 72 61 79 32 35 20 67 72 65 79 32 35 20  4 gray25 grey25 
1eb00 67 72 61 79 32 36 20 67 72 65 79 32 36 20 67 72  gray26 grey26 gr
1eb10 61 79 32 37 20 67 72 65 79 32 37 20 67 72 61 79  ay27 grey27 gray
1eb20 32 38 20 67 72 65 79 32 38 0a 20 20 20 20 20 20  28 grey28.      
1eb30 20 20 20 20 20 20 20 20 20 20 67 72 61 79 32 39            gray29
1eb40 20 67 72 65 79 32 39 20 67 72 61 79 33 30 20 67   grey29 gray30 g
1eb50 72 65 79 33 30 20 67 72 61 79 33 31 20 67 72 65  rey30 gray31 gre
1eb60 79 33 31 20 67 72 61 79 33 32 20 67 72 65 79 33  y31 gray32 grey3
1eb70 32 20 67 72 61 79 33 33 0a 20 20 20 20 20 20 20  2 gray33.       
1eb80 20 20 20 20 20 20 20 20 20 67 72 65 79 33 33 20           grey33 
1eb90 67 72 61 79 33 34 20 67 72 65 79 33 34 20 67 72  gray34 grey34 gr
1eba0 61 79 33 35 20 67 72 65 79 33 35 20 67 72 61 79  ay35 grey35 gray
1ebb0 33 36 20 67 72 65 79 33 36 20 67 72 61 79 33 37  36 grey36 gray37
1ebc0 20 67 72 65 79 33 37 0a 20 20 20 20 20 20 20 20   grey37.        
1ebd0 20 20 20 20 20 20 20 20 67 72 61 79 33 38 20 67          gray38 g
1ebe0 72 65 79 33 38 20 67 72 61 79 33 39 20 67 72 65  rey38 gray39 gre
1ebf0 79 33 39 20 67 72 61 79 34 30 20 67 72 65 79 34  y39 gray40 grey4
1ec00 30 20 67 72 61 79 34 31 20 67 72 65 79 34 31 20  0 gray41 grey41 
1ec10 67 72 61 79 34 32 0a 20 20 20 20 20 20 20 20 20  gray42.         
1ec20 20 20 20 20 20 20 20 67 72 65 79 34 32 20 67 72         grey42 gr
1ec30 61 79 34 33 20 67 72 65 79 34 33 20 67 72 61 79  ay43 grey43 gray
1ec40 34 34 20 67 72 65 79 34 34 20 67 72 61 79 34 35  44 grey44 gray45
1ec50 20 67 72 65 79 34 35 20 67 72 61 79 34 36 20 67   grey45 gray46 g
1ec60 72 65 79 34 36 0a 20 20 20 20 20 20 20 20 20 20  rey46.          
1ec70 20 20 20 20 20 20 67 72 61 79 34 37 20 67 72 65        gray47 gre
1ec80 79 34 37 20 67 72 61 79 34 38 20 67 72 65 79 34  y47 gray48 grey4
1ec90 38 20 67 72 61 79 34 39 20 67 72 65 79 34 39 20  8 gray49 grey49 
1eca0 67 72 61 79 35 30 20 67 72 65 79 35 30 20 67 72  gray50 grey50 gr
1ecb0 61 79 35 31 0a 20 20 20 20 20 20 20 20 20 20 20  ay51.           
1ecc0 20 20 20 20 20 67 72 65 79 35 31 20 67 72 61 79       grey51 gray
1ecd0 35 32 20 67 72 65 79 35 32 20 67 72 61 79 35 33  52 grey52 gray53
1ece0 20 67 72 65 79 35 33 20 67 72 61 79 35 34 20 67   grey53 gray54 g
1ecf0 72 65 79 35 34 20 67 72 61 79 35 35 20 67 72 65  rey54 gray55 gre
1ed00 79 35 35 0a 20 20 20 20 20 20 20 20 20 20 20 20  y55.            
1ed10 20 20 20 20 67 72 61 79 35 36 20 67 72 65 79 35      gray56 grey5
1ed20 36 20 67 72 61 79 35 37 20 67 72 65 79 35 37 20  6 gray57 grey57 
1ed30 67 72 61 79 35 38 20 67 72 65 79 35 38 20 67 72  gray58 grey58 gr
1ed40 61 79 35 39 20 67 72 65 79 35 39 20 67 72 61 79  ay59 grey59 gray
1ed50 36 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  60.             
1ed60 20 20 20 67 72 65 79 36 30 20 67 72 61 79 36 31     grey60 gray61
1ed70 20 67 72 65 79 36 31 20 67 72 61 79 36 32 20 67   grey61 gray62 g
1ed80 72 65 79 36 32 20 67 72 61 79 36 33 20 67 72 65  rey62 gray63 gre
1ed90 79 36 33 20 67 72 61 79 36 34 20 67 72 65 79 36  y63 gray64 grey6
1eda0 34 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  4.              
1edb0 20 20 67 72 61 79 36 35 20 67 72 65 79 36 35 20    gray65 grey65 
1edc0 67 72 61 79 36 36 20 67 72 65 79 36 36 20 67 72  gray66 grey66 gr
1edd0 61 79 36 37 20 67 72 65 79 36 37 20 67 72 61 79  ay67 grey67 gray
1ede0 36 38 20 67 72 65 79 36 38 20 67 72 61 79 36 39  68 grey68 gray69
1edf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ee00 20 67 72 65 79 36 39 20 67 72 61 79 37 30 20 67   grey69 gray70 g
1ee10 72 65 79 37 30 20 67 72 61 79 37 31 20 67 72 65  rey70 gray71 gre
1ee20 79 37 31 20 67 72 61 79 37 32 20 67 72 65 79 37  y71 gray72 grey7
1ee30 32 20 67 72 61 79 37 33 20 67 72 65 79 37 33 0a  2 gray73 grey73.
1ee40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee50 67 72 61 79 37 34 20 67 72 65 79 37 34 20 67 72  gray74 grey74 gr
1ee60 61 79 37 35 20 67 72 65 79 37 35 20 67 72 61 79  ay75 grey75 gray
1ee70 37 36 20 67 72 65 79 37 36 20 67 72 61 79 37 37  76 grey76 gray77
1ee80 20 67 72 65 79 37 37 20 67 72 61 79 37 38 0a 20   grey77 gray78. 
1ee90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1eea0 72 65 79 37 38 20 67 72 61 79 37 39 20 67 72 65  rey78 gray79 gre
1eeb0 79 37 39 20 67 72 61 79 38 30 20 67 72 65 79 38  y79 gray80 grey8
1eec0 30 20 67 72 61 79 38 31 20 67 72 65 79 38 31 20  0 gray81 grey81 
1eed0 67 72 61 79 38 32 20 67 72 65 79 38 32 0a 20 20  gray82 grey82.  
1eee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 72                gr
1eef0 61 79 38 33 20 67 72 65 79 38 33 20 67 72 61 79  ay83 grey83 gray
1ef00 38 34 20 67 72 65 79 38 34 20 67 72 61 79 38 35  84 grey84 gray85
1ef10 20 67 72 65 79 38 35 20 67 72 61 79 38 36 20 67   grey85 gray86 g
1ef20 72 65 79 38 36 20 67 72 61 79 38 37 0a 20 20 20  rey86 gray87.   
1ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 67 72 65               gre
1ef40 79 38 37 20 67 72 61 79 38 38 20 67 72 65 79 38  y87 gray88 grey8
1ef50 38 20 67 72 61 79 38 39 20 67 72 65 79 38 39 20  8 gray89 grey89 
1ef60 67 72 61 79 39 30 20 67 72 65 79 39 30 20 67 72  gray90 grey90 gr
1ef70 61 79 39 31 20 67 72 65 79 39 31 0a 20 20 20 20  ay91 grey91.    
1ef80 20 20 20 20 20 20 20 20 20 20 20 20 67 72 61 79              gray
1ef90 39 32 20 67 72 65 79 39 32 20 67 72 61 79 39 33  92 grey92 gray93
1efa0 20 67 72 65 79 39 33 20 67 72 61 79 39 34 20 67   grey93 gray94 g
1efb0 72 65 79 39 34 20 67 72 61 79 39 35 20 67 72 65  rey94 gray95 gre
1efc0 79 39 35 20 67 72 61 79 39 36 0a 20 20 20 20 20  y95 gray96.     
1efd0 20 20 20 20 20 20 20 20 20 20 20 67 72 65 79 39             grey9
1efe0 36 20 67 72 61 79 39 37 20 67 72 65 79 39 37 20  6 gray97 grey97 
1eff0 67 72 61 79 39 38 20 67 72 65 79 39 38 20 67 72  gray98 grey98 gr
1f000 61 79 39 39 20 67 72 65 79 39 39 20 67 72 61 79  ay99 grey99 gray
1f010 31 30 30 20 67 72 65 79 31 30 30 0a 20 20 20 20  100 grey100.    
1f020 20 20 20 20 20 20 20 20 20 20 20 20 44 61 72 6b              Dark
1f030 47 72 65 79 20 44 61 72 6b 47 72 61 79 20 44 61  Grey DarkGray Da
1f040 72 6b 42 6c 75 65 20 44 61 72 6b 43 79 61 6e 20  rkBlue DarkCyan 
1f050 44 61 72 6b 4d 61 67 65 6e 74 61 20 44 61 72 6b  DarkMagenta Dark
1f060 52 65 64 20 4c 69 67 68 74 47 72 65 65 6e 0a 20  Red LightGreen. 
1f070 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
1f080 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
1f090 66 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f ![info exists 
1f0a0 6e 75 6d 62 65 72 6c 65 73 73 5f 63 6f 6c 6f 72  numberless_color
1f0b0 73 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  s] {.           
1f0c0 20 73 65 74 20 6e 75 6d 62 65 72 6c 65 73 73 5f   set numberless_
1f0d0 63 6f 6c 6f 72 73 20 22 22 0a 20 20 20 20 20 20  colors "".      
1f0e0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 63 6f        foreach co
1f0f0 6c 6f 72 20 24 63 6f 6c 6f 72 73 20 7b 0a 20 20  lor $colors {.  
1f100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1f110 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 30 2d 39 5d  gsub -all {[0-9]
1f120 2a 7d 20 24 63 6f 6c 6f 72 20 22 22 20 63 6f 6c  *} $color "" col
1f130 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  or.             
1f140 20 20 20 6c 61 70 70 65 6e 64 20 6e 75 6d 62 65     lappend numbe
1f150 72 6c 65 73 73 5f 63 6f 6c 6f 72 73 20 24 63 6f  rless_colors $co
1f160 6c 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  lor.            
1f170 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  }.            if
1f180 20 7b 5b 69 6e 66 6f 20 74 63 6c 76 65 72 73 69   {[info tclversi
1f190 6f 6e 5d 20 3c 20 38 2e 33 7d 20 7b 0a 20 20 20  on] < 8.3} {.   
1f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1f1b0 20 6e 75 6d 62 65 72 6c 65 73 73 5f 63 6f 6c 6f   numberless_colo
1f1c0 72 73 20 5b 4c 75 6e 69 71 75 65 20 5b 6c 73 6f  rs [Lunique [lso
1f1d0 72 74 20 24 6e 75 6d 62 65 72 6c 65 73 73 5f 63  rt $numberless_c
1f1e0 6f 6c 6f 72 73 5d 5d 0a 20 20 20 20 20 20 20 20  olors]].        
1f1f0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
1f200 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1f210 20 6e 75 6d 62 65 72 6c 65 73 73 5f 63 6f 6c 6f   numberless_colo
1f220 72 73 20 5b 6c 73 6f 72 74 20 2d 75 6e 69 71 75  rs [lsort -uniqu
1f230 65 20 24 6e 75 6d 62 65 72 6c 65 73 73 5f 63 6f  e $numberless_co
1f240 6c 6f 72 73 5d 0a 20 20 20 20 20 20 20 20 20 20  lors].          
1f250 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
1f260 20 20 20 20 20 20 73 65 74 20 6d 61 74 63 68 65        set matche
1f270 73 20 5b 4d 61 74 63 68 65 73 46 72 6f 6d 4c 69  s [MatchesFromLi
1f280 73 74 20 24 74 65 78 74 20 24 6e 75 6d 62 65 72  st $text $number
1f290 6c 65 73 73 5f 63 6f 6c 6f 72 73 5d 0a 20 20 20  less_colors].   
1f2a0 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74       if {[llengt
1f2b0 68 20 24 6d 61 74 63 68 65 73 5d 20 3c 20 35 7d  h $matches] < 5}
1f2c0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73   {.            s
1f2d0 65 74 20 6d 61 74 63 68 65 73 20 5b 4d 61 74 63  et matches [Matc
1f2e0 68 65 73 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  hesFromList $tex
1f2f0 74 20 24 63 6f 6c 6f 72 73 5d 0a 20 20 20 20 20  t $colors].     
1f300 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e         if {[llen
1f310 67 74 68 20 24 6d 61 74 63 68 65 73 5d 7d 20 7b  gth $matches]} {
1f320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f330 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
1f340 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
1f350 5b 63 6f 6e 63 61 74 20 24 63 6f 6c 6f 72 73 20  [concat $colors 
1f360 24 61 64 64 5d 5d 0a 20 20 20 20 20 20 20 20 20  $add]].         
1f370 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
1f380 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1f390 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
1f3a0 4c 69 73 74 20 24 74 65 78 74 20 5b 63 6f 6e 63  List $text [conc
1f3b0 61 74 20 24 6e 75 6d 62 65 72 6c 65 73 73 5f 63  at $numberless_c
1f3c0 6f 6c 6f 72 73 20 24 61 64 64 5d 5d 0a 20 20 20  olors $add]].   
1f3d0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1f3e0 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
1f3f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
1f400 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
1f410 20 24 74 65 78 74 20 5b 63 6f 6e 63 61 74 20 24   $text [concat $
1f420 6e 75 6d 62 65 72 6c 65 73 73 5f 63 6f 6c 6f 72  numberless_color
1f430 73 20 24 61 64 64 5d 5d 0a 20 20 20 20 20 20 20  s $add]].       
1f440 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72   }.    }..    pr
1f450 6f 63 20 43 6f 6d 70 6c 65 74 65 43 75 72 73 6f  oc CompleteCurso
1f460 72 20 74 65 78 74 20 7b 0a 20 20 20 20 20 20 20  r text {.       
1f470 20 23 20 66 72 6f 6d 20 3c 58 31 31 2f 63 75 72   # from <X11/cur
1f480 73 6f 72 66 6f 6e 74 2e 68 3e 0a 20 20 20 20 20  sorfont.h>.     
1f490 20 20 20 23 0a 20 20 20 20 20 20 20 20 72 65 74     #.        ret
1f4a0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
1f4b0 6d 4c 69 73 74 20 24 74 65 78 74 20 5c 0a 20 20  mList $text \.  
1f4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4d0 20 20 7b 6e 75 6d 5f 67 6c 79 70 68 73 20 78 5f    {num_glyphs x_
1f4e0 63 75 72 73 6f 72 20 61 72 72 6f 77 20 62 61 73  cursor arrow bas
1f4f0 65 64 5f 61 72 72 6f 77 5f 64 6f 77 6e 20 62 61  ed_arrow_down ba
1f500 73 65 64 5f 61 72 72 6f 77 5f 75 70 0a 20 20 20  sed_arrow_up.   
1f510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f520 20 20 62 6f 61 74 20 62 6f 67 6f 73 69 74 79 20    boat bogosity 
1f530 62 6f 74 74 6f 6d 5f 6c 65 66 74 5f 63 6f 72 6e  bottom_left_corn
1f540 65 72 20 62 6f 74 74 6f 6d 5f 72 69 67 68 74 5f  er bottom_right_
1f550 63 6f 72 6e 65 72 0a 20 20 20 20 20 20 20 20 20  corner.         
1f560 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 74 74              bott
1f570 6f 6d 5f 73 69 64 65 20 62 6f 74 74 6f 6d 5f 74  om_side bottom_t
1f580 65 65 20 62 6f 78 5f 73 70 69 72 61 6c 20 63 65  ee box_spiral ce
1f590 6e 74 65 72 5f 70 74 72 20 63 69 72 63 6c 65 20  nter_ptr circle 
1f5a0 63 6c 6f 63 6b 0a 20 20 20 20 20 20 20 20 20 20  clock.          
1f5b0 20 20 20 20 20 20 20 20 20 20 20 63 6f 66 66 65             coffe
1f5c0 65 5f 6d 75 67 20 63 72 6f 73 73 20 63 72 6f 73  e_mug cross cros
1f5d0 73 5f 72 65 76 65 72 73 65 20 63 72 6f 73 73 68  s_reverse crossh
1f5e0 61 69 72 20 64 69 61 6d 6f 6e 64 5f 63 72 6f 73  air diamond_cros
1f5f0 73 20 64 6f 74 0a 20 20 20 20 20 20 20 20 20 20  s dot.          
1f600 20 20 20 20 20 20 20 20 20 20 20 64 6f 74 62 6f             dotbo
1f610 78 20 64 6f 75 62 6c 65 5f 61 72 72 6f 77 20 64  x double_arrow d
1f620 72 61 66 74 5f 6c 61 72 67 65 20 64 72 61 66 74  raft_large draft
1f630 5f 73 6d 61 6c 6c 20 64 72 61 70 65 64 5f 62 6f  _small draped_bo
1f640 78 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x.              
1f650 20 20 20 20 20 20 20 65 78 63 68 61 6e 67 65 20         exchange 
1f660 66 6c 65 75 72 20 67 6f 62 62 6c 65 72 20 67 75  fleur gobbler gu
1f670 6d 62 79 20 68 61 6e 64 31 20 68 61 6e 64 32 20  mby hand1 hand2 
1f680 68 65 61 72 74 20 69 63 6f 6e 20 69 72 6f 6e 5f  heart icon iron_
1f690 63 72 6f 73 73 0a 20 20 20 20 20 20 20 20 20 20  cross.          
1f6a0 20 20 20 20 20 20 20 20 20 20 20 6c 65 66 74 5f             left_
1f6b0 70 74 72 20 6c 65 66 74 5f 73 69 64 65 20 6c 65  ptr left_side le
1f6c0 66 74 5f 74 65 65 20 6c 65 66 74 62 75 74 74 6f  ft_tee leftbutto
1f6d0 6e 20 6c 6c 5f 61 6e 67 6c 65 20 6c 72 5f 61 6e  n ll_angle lr_an
1f6e0 67 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 20  gle.            
1f6f0 20 20 20 20 20 20 20 20 20 6d 61 6e 20 6d 69 64           man mid
1f700 64 6c 65 62 75 74 74 6f 6e 20 6d 6f 75 73 65 20  dlebutton mouse 
1f710 70 65 6e 63 69 6c 20 70 69 72 61 74 65 20 70 6c  pencil pirate pl
1f720 75 73 20 71 75 65 73 74 69 6f 6e 5f 61 72 72 6f  us question_arro
1f730 77 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  w.              
1f740 20 20 20 20 20 20 20 72 69 67 68 74 5f 70 74 72         right_ptr
1f750 20 72 69 67 68 74 5f 73 69 64 65 20 72 69 67 68   right_side righ
1f760 74 5f 74 65 65 20 72 69 67 68 74 62 75 74 74 6f  t_tee rightbutto
1f770 6e 20 72 74 6c 5f 6c 6f 67 6f 20 73 61 69 6c 62  n rtl_logo sailb
1f780 6f 61 74 0a 20 20 20 20 20 20 20 20 20 20 20 20  oat.            
1f790 20 20 20 20 20 20 20 20 20 73 62 5f 64 6f 77 6e           sb_down
1f7a0 5f 61 72 72 6f 77 20 73 62 5f 68 5f 64 6f 75 62  _arrow sb_h_doub
1f7b0 6c 65 5f 61 72 72 6f 77 20 73 62 5f 6c 65 66 74  le_arrow sb_left
1f7c0 5f 61 72 72 6f 77 20 73 62 5f 72 69 67 68 74 5f  _arrow sb_right_
1f7d0 61 72 72 6f 77 0a 20 20 20 20 20 20 20 20 20 20  arrow.          
1f7e0 20 20 20 20 20 20 20 20 20 20 20 73 62 5f 75 70             sb_up
1f7f0 5f 61 72 72 6f 77 20 73 62 5f 76 5f 64 6f 75 62  _arrow sb_v_doub
1f800 6c 65 5f 61 72 72 6f 77 20 73 68 75 74 74 6c 65  le_arrow shuttle
1f810 20 73 69 7a 69 6e 67 20 73 70 69 64 65 72 20 73   sizing spider s
1f820 70 72 61 79 63 61 6e 0a 20 20 20 20 20 20 20 20  praycan.        
1f830 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1f840 72 20 74 61 72 67 65 74 20 74 63 72 6f 73 73 20  r target tcross 
1f850 74 6f 70 5f 6c 65 66 74 5f 61 72 72 6f 77 20 74  top_left_arrow t
1f860 6f 70 5f 6c 65 66 74 5f 63 6f 72 6e 65 72 0a 20  op_left_corner. 
1f870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f880 20 20 20 20 74 6f 70 5f 72 69 67 68 74 5f 63 6f      top_right_co
1f890 72 6e 65 72 20 74 6f 70 5f 73 69 64 65 20 74 6f  rner top_side to
1f8a0 70 5f 74 65 65 20 74 72 65 6b 20 75 6c 5f 61 6e  p_tee trek ul_an
1f8b0 67 6c 65 20 75 6d 62 72 65 6c 6c 61 0a 20 20 20  gle umbrella.   
1f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8d0 20 20 75 72 5f 61 6e 67 6c 65 20 77 61 74 63 68    ur_angle watch
1f8e0 20 78 74 65 72 6d 7d 5d 0a 20 20 20 20 7d 0a 0a   xterm}].    }..
1f8f0 20 20 20 20 23 2a 2a 0a 20 20 20 20 23 20 53 70      #**.    # Sp
1f900 65 63 69 66 69 63 53 77 69 74 63 68 43 6f 6d 70  ecificSwitchComp
1f910 6c 65 74 65 72 0a 20 20 20 20 23 20 2d 2d 2d 0a  leter.    # ---.
1f920 20 20 20 20 23 20 40 70 61 72 61 6d 20 20 20 20      # @param    
1f930 74 65 78 74 20 20 20 2d 2d 20 74 68 65 20 77 6f  text   -- the wo
1f940 72 64 20 74 6f 20 63 6f 6d 70 6c 65 74 65 2e 0a  rd to complete..
1f950 20 20 20 20 23 20 40 70 61 72 61 6d 20 20 20 20      # @param    
1f960 73 74 61 72 74 20 20 2d 2d 20 74 68 65 20 63 68  start  -- the ch
1f970 61 72 20 69 6e 64 65 78 20 6f 66 20 74 65 78 74  ar index of text
1f980 27 73 20 73 74 61 72 74 20 69 6e 20 6c 69 6e 65  's start in line
1f990 0a 20 20 20 20 23 20 40 70 61 72 61 6d 20 20 20  .    # @param   
1f9a0 20 6c 69 6e 65 20 20 20 2d 2d 20 74 68 65 20 6c   line   -- the l
1f9b0 69 6e 65 20 67 61 74 68 65 72 65 64 20 73 6f 20  ine gathered so 
1f9c0 66 61 72 2e 0a 20 20 20 20 23 20 40 70 61 72 61  far..    # @para
1f9d0 6d 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 74  m    switch -- t
1f9e0 68 65 20 73 77 69 74 63 68 20 74 6f 20 63 6f 6d  he switch to com
1f9f0 70 6c 65 74 65 20 66 6f 72 2e 0a 20 20 20 20 23  plete for..    #
1fa00 20 40 72 65 74 75 72 6e 20 20 20 61 20 73 74 64   @return   a std
1fa10 20 74 63 6c 72 65 61 64 6c 69 6e 65 20 66 6f 72   tclreadline for
1fa20 6d 61 74 74 65 64 20 63 6f 6d 70 6c 65 74 65 72  matted completer
1fa30 20 73 74 72 69 6e 67 2e 0a 20 20 20 20 23 20 40   string..    # @
1fa40 73 61 20 20 20 20 20 20 20 43 6f 6d 70 6c 65 74  sa       Complet
1fa50 65 57 69 64 67 65 74 43 6f 6e 66 69 67 75 72 61  eWidgetConfigura
1fa60 74 69 6f 6e 73 0a 20 20 20 20 23 0a 20 20 20 20  tions.    #.    
1fa70 70 72 6f 63 20 53 70 65 63 69 66 69 63 53 77 69  proc SpecificSwi
1fa80 74 63 68 43 6f 6d 70 6c 65 74 65 72 20 7b 74 65  tchCompleter {te
1fa90 78 74 20 73 74 61 72 74 20 6c 69 6e 65 20 73 77  xt start line sw
1faa0 69 74 63 68 20 7b 61 6c 77 61 79 73 20 31 7d 7d  itch {always 1}}
1fab0 20 7b 0a 0a 20 20 20 20 20 20 20 20 73 77 69 74   {..        swit
1fac0 63 68 20 2d 2d 20 24 73 77 69 74 63 68 20 7b 0a  ch -- $switch {.
1fad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 61 63  .            -ac
1fae0 74 69 76 65 62 61 63 6b 67 72 6f 75 6e 64 20 20  tivebackground  
1faf0 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20    -.            
1fb00 2d 61 63 74 69 76 65 66 6f 72 65 67 72 6f 75 6e  -activeforegroun
1fb10 64 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20  d    -.         
1fb20 20 20 20 2d 66 67 20 20 20 20 20 20 20 20 20 20     -fg          
1fb30 20 20 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20          -.      
1fb40 20 20 20 20 20 20 2d 66 6f 72 65 67 72 6f 75 6e        -foregroun
1fb50 64 20 20 20 20 20 20 20 20 20 20 2d 0a 20 20 20  d          -.   
1fb60 20 20 20 20 20 20 20 20 20 2d 62 67 20 20 20 20           -bg    
1fb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 0a                -.
1fb80 20 20 20 20 20 20 20 20 20 20 20 20 2d 62 61 63              -bac
1fb90 6b 67 72 6f 75 6e 64 20 20 20 20 20 20 20 20 20  kground         
1fba0 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d   -.            -
1fbb0 64 69 73 61 62 6c 65 64 66 6f 72 65 67 72 6f 75  disabledforegrou
1fbc0 6e 64 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20  nd  -.          
1fbd0 20 20 2d 68 69 67 68 6c 69 67 68 74 62 61 63 6b    -highlightback
1fbe0 67 72 6f 75 6e 64 20 2d 0a 20 20 20 20 20 20 20  ground -.       
1fbf0 20 20 20 20 20 2d 68 69 67 68 6c 69 67 68 74 63       -highlightc
1fc00 6f 6c 6f 72 20 20 20 20 20 20 2d 0a 20 20 20 20  olor      -.    
1fc10 20 20 20 20 20 20 20 20 2d 69 6e 73 65 72 74 62          -insertb
1fc20 61 63 6b 67 72 6f 75 6e 64 20 20 20 20 2d 0a 20  ackground    -. 
1fc30 20 20 20 20 20 20 20 20 20 20 20 2d 74 72 6f 75             -trou
1fc40 67 68 63 6f 6c 6f 72 20 20 20 20 20 20 20 20 20  ghcolor         
1fc50 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 73  -.            -s
1fc60 65 6c 65 63 74 62 61 63 6b 67 72 6f 75 6e 64 20  electbackground 
1fc70 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20     -.           
1fc80 20 2d 73 65 6c 65 63 74 66 6f 72 65 67 72 6f 75   -selectforegrou
1fc90 6e 64 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b  nd    { return [
1fca0 43 6f 6d 70 6c 65 74 65 43 6f 6c 6f 72 20 24 74  CompleteColor $t
1fcb0 65 78 74 5d 20 7d 0a 0a 20 20 20 20 20 20 20 20  ext] }..        
1fcc0 20 20 20 20 2d 61 63 74 69 76 65 62 6f 72 64 65      -activeborde
1fcd0 72 77 69 64 74 68 20 20 2d 0a 20 20 20 20 20 20  rwidth  -.      
1fce0 20 20 20 20 20 20 2d 62 64 20 20 20 20 20 20 20        -bd       
1fcf0 20 20 20 20 20 20 20 20 20 20 2d 0a 20 20 20 20            -.    
1fd00 20 20 20 20 20 20 20 20 2d 62 6f 72 64 65 72 77          -borderw
1fd10 69 64 74 68 20 20 20 20 20 20 20 20 2d 0a 20 20  idth        -.  
1fd20 20 20 20 20 20 20 20 20 20 20 2d 69 6e 73 65 72            -inser
1fd30 74 62 6f 72 64 65 72 77 69 64 74 68 20 20 2d 0a  tborderwidth  -.
1fd40 20 20 20 20 20 20 20 20 20 20 20 20 2d 69 6e 73              -ins
1fd50 65 72 74 77 69 64 74 68 20 20 20 20 20 20 20 20  ertwidth        
1fd60 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 73  -.            -s
1fd70 65 6c 65 63 74 62 6f 72 64 65 72 77 69 64 74 68  electborderwidth
1fd80 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20    -.            
1fd90 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b 6e  -highlightthickn
1fda0 65 73 73 20 2d 0a 20 20 20 20 20 20 20 20 20 20  ess -.          
1fdb0 20 20 2d 70 61 64 78 20 20 20 20 20 20 20 20 20    -padx         
1fdc0 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20        -.        
1fdd0 20 20 20 20 2d 70 61 64 79 20 20 20 20 20 20 20      -pady       
1fde0 20 20 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20          -.      
1fdf0 20 20 20 20 20 20 2d 77 72 61 70 6c 65 6e 67 74        -wraplengt
1fe00 68 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  h         {.    
1fe10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 24              if $
1fe20 61 6c 77 61 79 73 20 7b 0a 20 20 20 20 20 20 20  always {.       
1fe30 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1fe40 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
1fe50 73 20 3c 70 69 78 65 6c 73 3e 5d 0a 20 20 20 20  s <pixels>].    
1fe60 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
1fe70 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
1fe80 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1fe90 22 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  "".             
1fea0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
1feb0 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1fec0 2d 61 6e 63 68 6f 72 20 7b 0a 20 20 20 20 20 20  -anchor {.      
1fed0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1fee0 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
1fef0 73 74 20 24 74 65 78 74 20 7b 0a 20 20 20 20 20  st $text {.     
1ff00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
1ff10 20 6e 65 20 65 20 73 65 20 73 20 73 77 20 77 20   ne e se s sw w 
1ff20 6e 77 20 63 65 6e 74 65 72 0a 20 20 20 20 20 20  nw center.      
1ff30 20 20 20 20 20 20 20 20 20 20 7d 5d 0a 20 20 20            }].   
1ff40 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20           }..    
1ff50 20 20 20 20 20 20 20 20 2d 62 69 74 6d 61 70 20          -bitmap 
1ff60 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
1ff70 74 65 46 72 6f 6d 42 69 74 6d 61 70 73 20 24 74  teFromBitmaps $t
1ff80 65 78 74 20 24 61 6c 77 61 79 73 5d 20 7d 0a 0a  ext $always] }..
1ff90 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 63 75  .            -cu
1ffa0 72 73 6f 72 20 20 20 20 20 20 20 20 20 20 7b 0a  rsor          {.
1ffb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffc0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
1ffd0 43 75 72 73 6f 72 20 24 74 65 78 74 5d 0a 20 20  Cursor $text].  
1ffe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                # 
1fff0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
20000 69 6e 74 73 20 3c 63 75 72 73 6f 72 3e 5d 0a 20  ints <cursor>]. 
20010 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
20020 20 20 20 20 20 20 20 20 20 2d 65 78 70 6f 72 74           -export
20030 73 65 6c 65 63 74 69 6f 6e 20 2d 0a 20 20 20 20  selection -.    
20040 20 20 20 20 20 20 20 20 2d 6a 75 6d 70 20 20 20          -jump   
20050 20 20 20 20 20 20 20 20 20 2d 0a 20 20 20 20 20           -.     
20060 20 20 20 20 20 20 20 2d 73 65 74 67 72 69 64 20         -setgrid 
20070 20 20 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20          -.      
20080 20 20 20 20 20 20 2d 74 61 6b 65 66 6f 63 75 73        -takefocus
20090 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20         { return 
200a0 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e  [CompleteBoolean
200b0 20 24 74 65 78 74 5d 20 7d 0a 20 20 20 20 20 20   $text] }.      
200c0 20 20 20 20 20 20 2d 66 6f 6e 74 20 20 20 20 20        -font     
200d0 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
200e0 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d           set nam
200f0 65 73 20 5b 66 6f 6e 74 20 6e 61 6d 65 73 5d 0a  es [font names].
20100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20110 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
20120 74 68 20 24 6e 61 6d 65 73 5d 7d 20 7b 0a 20 20  th $names]} {.  
20130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20140 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65    return [Comple
20150 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  teFromList $text
20160 20 24 6e 61 6d 65 73 5d 0a 20 20 20 20 20 20 20   $names].       
20170 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
20180 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
20190 20 20 20 20 20 20 69 66 20 24 61 6c 77 61 79 73        if $always
201a0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
201b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
201c0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
201d0 3c 66 6f 6e 74 3e 5d 0a 20 20 20 20 20 20 20 20  <font>].        
201e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
201f0 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
20200 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
20210 75 72 6e 20 22 22 0a 20 20 20 20 20 20 20 20 20  urn "".         
20220 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
20230 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
20240 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20             }..  
20250 20 20 20 20 20 20 20 20 20 20 2d 69 6d 61 67 65            -image
20260 20 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20         -.       
20270 20 20 20 20 20 2d 73 65 6c 65 63 74 69 6d 61 67       -selectimag
20280 65 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  e { return [Comp
20290 6c 65 74 65 46 72 6f 6d 49 6d 61 67 65 73 20 24  leteFromImages $
202a0 74 65 78 74 20 24 61 6c 77 61 79 73 5d 20 7d 0a  text $always] }.
202b0 20 20 20 20 20 20 20 20 20 20 20 20 2d 73 65 6c              -sel
202c0 65 63 74 6d 6f 64 65 20 20 7b 0a 20 20 20 20 20  ectmode  {.     
202d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
202e0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
202f0 69 73 74 20 24 74 65 78 74 20 7b 73 69 6e 67 6c  ist $text {singl
20300 65 20 62 72 6f 77 73 65 20 6d 75 6c 74 69 70 6c  e browse multipl
20310 65 20 65 78 74 65 6e 64 65 64 7d 5d 0a 20 20 20  e extended}].   
20320 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20           }..    
20330 20 20 20 20 20 20 20 20 2d 69 6e 73 65 72 74 6f          -inserto
20340 66 66 74 69 6d 65 20 20 2d 0a 20 20 20 20 20 20  fftime  -.      
20350 20 20 20 20 20 20 2d 69 6e 73 65 72 74 6f 6e 74        -insertont
20360 69 6d 65 20 20 20 2d 0a 20 20 20 20 20 20 20 20  ime   -.        
20370 20 20 20 20 2d 72 65 70 65 61 74 64 65 6c 61 79      -repeatdelay
20380 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20      -.          
20390 20 20 2d 72 65 70 65 61 74 69 6e 74 65 72 76 61    -repeatinterva
203a0 6c 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  l {.            
203b0 20 20 20 20 69 66 20 24 61 6c 77 61 79 73 20 7b      if $always {
203c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
203d0 20 20 20 20 20 72 65 74 75 72 6e 20 5b 44 69 73       return [Dis
203e0 70 6c 61 79 48 69 6e 74 73 20 3c 6d 69 6c 6c 69  playHints <milli
203f0 53 65 63 3e 5d 0a 20 20 20 20 20 20 20 20 20 20  Sec>].          
20400 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20        } else {. 
20410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20420 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20     return "".   
20430 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
20440 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
20450 20 20 20 20 20 20 20 20 20 2d 6a 75 73 74 69 66           -justif
20460 79 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72  y        { retur
20470 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
20480 69 73 74 20 24 74 65 78 74 20 7b 6c 65 66 74 20  ist $text {left 
20490 63 65 6e 74 65 72 20 72 69 67 68 74 7d 5d 20 7d  center right}] }
204a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 6f 72  .            -or
204b0 69 65 6e 74 20 20 20 20 20 20 20 20 20 7b 20 72  ient         { r
204c0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
204d0 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 76  romList $text {v
204e0 65 72 74 69 63 61 6c 20 68 6f 72 69 7a 6f 6e 74  ertical horizont
204f0 61 6c 7d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  al}] }.         
20500 20 20 20 2d 72 65 6c 69 65 66 20 20 20 20 20 20     -relief      
20510 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
20520 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d       return [Com
20530 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74  pleteFromList $t
20540 65 78 74 20 7b 20 72 61 69 73 65 64 20 73 75 6e  ext { raised sun
20550 6b 65 6e 20 66 6c 61 74 20 72 69 64 67 65 20 73  ken flat ridge s
20560 6f 6c 69 64 20 67 72 6f 6f 76 65 20 7d 5d 0a 20  olid groove }]. 
20570 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20             }..  
20580 20 20 20 20 20 20 20 20 20 20 2d 74 65 78 74 20            -text 
20590 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
205a0 20 20 20 20 20 20 20 20 20 20 69 66 20 24 61 6c            if $al
205b0 77 61 79 73 20 7b 0a 20 20 20 20 20 20 20 20 20  ways {.         
205c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
205d0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
205e0 3c 74 65 78 74 3e 5d 0a 20 20 20 20 20 20 20 20  <text>].        
205f0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
20600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20610 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20       return "". 
20620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
20630 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
20640 20 20 20 20 20 20 20 20 20 20 20 2d 74 65 78 74             -text
20650 76 61 72 69 61 62 6c 65 20 7b 20 72 65 74 75 72  variable { retur
20660 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e  n [VarCompletion
20670 20 24 74 65 78 74 20 23 30 5d 20 7d 0a 20 20 20   $text #0] }.   
20680 20 20 20 20 20 20 20 20 20 2d 75 6e 64 65 72 6c           -underl
20690 69 6e 65 20 20 20 20 7b 0a 20 20 20 20 20 20 20  ine    {.       
206a0 20 20 20 20 20 20 20 20 20 69 66 20 24 61 6c 77           if $alw
206b0 61 79 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ays {.          
206c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
206d0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
206e0 69 6e 64 65 78 3e 5d 0a 20 20 20 20 20 20 20 20  index>].        
206f0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
20700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20710 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20       return "". 
20720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
20730 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a  .            }..
20740 20 20 20 20 20 20 20 20 20 20 20 20 2d 78 73 63              -xsc
20750 72 6f 6c 6c 63 6f 6d 6d 61 6e 64 20 2d 0a 20 20  rollcommand -.  
20760 20 20 20 20 20 20 20 20 20 20 2d 79 73 63 72 6f            -yscro
20770 6c 6c 63 6f 6d 6d 61 6e 64 20 7b 7d 0a 0a 20 20  llcommand {}..  
20780 20 20 20 20 20 20 20 20 20 20 23 20 57 49 44 47            # WIDG
20790 45 54 20 53 50 45 43 49 46 49 43 20 4f 50 54 49  ET SPECIFIC OPTI
207a0 4f 4e 53 0a 20 20 20 20 20 20 20 20 20 20 20 20  ONS.            
207b0 23 20 2d 2d 2d 0a 0a 20 20 20 20 20 20 20 20 20  # ---..         
207c0 20 20 20 2d 73 74 61 74 65 20 7b 20 72 65 74 75     -state { retu
207d0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
207e0 4c 69 73 74 20 24 74 65 78 74 20 7b 6e 6f 72 6d  List $text {norm
207f0 61 6c 20 61 63 74 69 76 65 20 64 69 73 61 62 6c  al active disabl
20800 65 64 7d 5d 20 7d 0a 0a 20 20 20 20 20 20 20 20  ed}] }..        
20810 20 20 20 20 2d 63 6f 6c 75 6d 6e 62 72 65 61 6b      -columnbreak
20820 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d   -.            -
20830 68 69 64 65 6d 61 72 67 69 6e 20 20 2d 0a 20 20  hidemargin  -.  
20840 20 20 20 20 20 20 20 20 20 20 2d 69 6e 64 69 63            -indic
20850 61 74 6f 72 6f 6e 20 7b 20 72 65 74 75 72 6e 20  atoron { return 
20860 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e  [CompleteBoolean
20870 20 24 74 65 78 74 5d 20 7d 0a 0a 20 20 20 20 20   $text] }..     
20880 20 20 20 20 20 20 20 2d 76 61 72 69 61 62 6c 65         -variable
20890 20 7b 20 72 65 74 75 72 6e 20 5b 56 61 72 43 6f   { return [VarCo
208a0 6d 70 6c 65 74 69 6f 6e 20 24 74 65 78 74 20 23  mpletion $text #
208b0 30 5d 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20  0] }..          
208c0 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20    default {.    
208d0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 69 66              # if
208e0 20 24 61 6c 77 61 79 73 20 7b 0a 20 20 20 20 20   $always {.     
208f0 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 73             #   s
20900 65 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75  et prev [Previou
20910 73 57 6f 72 64 20 24 73 74 61 72 74 20 24 6c 69  sWord $start $li
20920 6e 65 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ne].            
20930 20 20 20 20 23 20 20 20 72 65 74 75 72 6e 20 5b      #   return [
20940 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 5b 53  DisplayHints <[S
20950 74 72 69 6e 67 20 72 61 6e 67 65 20 24 70 72 65  tring range $pre
20960 76 20 31 20 65 6e 64 5d 3e 5d 0a 20 20 20 20 20  v 1 end]>].     
20970 20 20 20 20 20 20 20 20 20 20 20 23 7d 20 65 6c             #} el
20980 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
20990 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
209a0 22 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  "".             
209b0 20 20 20 23 7d 0a 20 20 20 20 20 20 20 20 20 20     #}.          
209c0 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
209d0 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
209e0 20 20 20 20 23 20 72 65 74 75 72 6e 20 5b 42 72      # return [Br
209f0 61 63 65 4f 72 43 6f 6d 6d 61 6e 64 20 24 74 65  aceOrCommand $te
20a00 78 74 20 24 73 74 61 72 74 20 24 6c 69 6e 65 20  xt $start $line 
20a10 24 70 6f 73 20 24 6d 6f 64 5d 0a 0a 20 20 20 20  $pos $mod]..    
20a20 23 2a 2a 0a 20 20 20 20 23 20 43 6f 6d 70 6c 65  #**.    # Comple
20a30 74 65 57 69 64 67 65 74 43 6f 6e 66 69 67 75 72  teWidgetConfigur
20a40 61 74 69 6f 6e 73 0a 20 20 20 20 23 20 2d 2d 2d  ations.    # ---
20a50 0a 20 20 20 20 23 20 40 70 61 72 61 6d 20 20 20  .    # @param   
20a60 20 74 65 78 74 20 20 2d 2d 20 74 68 65 20 77 6f   text  -- the wo
20a70 72 64 20 74 6f 20 63 6f 6d 70 6c 65 74 65 2e 0a  rd to complete..
20a80 20 20 20 20 23 20 40 70 61 72 61 6d 20 20 20 20      # @param    
20a90 73 74 61 72 74 20 2d 2d 20 74 68 65 20 61 63 74  start -- the act
20aa0 75 61 6c 20 63 75 72 73 6f 72 20 70 6f 73 69 74  ual cursor posit
20ab0 69 6f 6e 2e 0a 20 20 20 20 23 20 40 70 61 72 61  ion..    # @para
20ac0 6d 20 20 20 20 6c 69 6e 65 20 20 2d 2d 20 74 68  m    line  -- th
20ad0 65 20 6c 69 6e 65 20 67 61 74 68 65 72 65 64 20  e line gathered 
20ae0 73 6f 20 66 61 72 2e 0a 20 20 20 20 23 20 40 70  so far..    # @p
20af0 61 72 61 6d 20 20 20 20 6c 73 74 20 20 20 2d 2d  aram    lst   --
20b00 20 61 20 6c 69 73 74 20 6f 66 20 70 6f 73 73 69   a list of possi
20b10 62 6c 65 20 63 6f 6d 70 6c 65 74 69 6f 6e 73 2e  ble completions.
20b20 0a 20 20 20 20 23 20 40 72 65 74 75 72 6e 20 20  .    # @return  
20b30 20 61 20 73 74 64 20 74 63 6c 72 65 61 64 6c 69   a std tclreadli
20b40 6e 65 20 66 6f 72 6d 61 74 74 65 64 20 63 6f 6d  ne formatted com
20b50 70 6c 65 74 65 72 20 73 74 72 69 6e 67 2e 0a 20  pleter string.. 
20b60 20 20 20 23 20 40 73 61 20 20 20 20 20 20 20 53     # @sa       S
20b70 70 65 63 69 66 69 63 53 77 69 74 63 68 43 6f 6d  pecificSwitchCom
20b80 70 6c 65 74 65 72 0a 20 20 20 20 23 0a 20 20 20  pleter.    #.   
20b90 20 70 72 6f 63 20 43 6f 6d 70 6c 65 74 65 57 69   proc CompleteWi
20ba0 64 67 65 74 43 6f 6e 66 69 67 75 72 61 74 69 6f  dgetConfiguratio
20bb0 6e 73 20 7b 74 65 78 74 20 73 74 61 72 74 20 6c  ns {text start l
20bc0 69 6e 65 20 6c 73 74 7d 20 7b 0a 20 20 20 20 20  ine lst} {.     
20bd0 20 20 20 73 65 74 20 70 72 65 76 20 5b 50 72 65     set prev [Pre
20be0 76 69 6f 75 73 57 6f 72 64 20 24 73 74 61 72 74  viousWord $start
20bf0 20 24 6c 69 6e 65 5d 0a 20 20 20 20 20 20 20 20   $line].        
20c00 69 66 20 7b 22 2d 22 20 3d 3d 20 5b 73 74 72 69  if {"-" == [stri
20c10 6e 67 20 69 6e 64 65 78 20 24 70 72 65 76 20 30  ng index $prev 0
20c20 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ]} {.           
20c30 20 72 65 74 75 72 6e 20 5b 53 70 65 63 69 66 69   return [Specifi
20c40 63 53 77 69 74 63 68 43 6f 6d 70 6c 65 74 65 72  cSwitchCompleter
20c50 20 24 74 65 78 74 20 24 73 74 61 72 74 20 24 6c   $text $start $l
20c60 69 6e 65 20 24 70 72 65 76 5d 0a 20 20 20 20 20  ine $prev].     
20c70 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
20c80 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
20c90 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
20ca0 20 24 74 65 78 74 20 5b 52 65 6d 6f 76 65 55 73   $text [RemoveUs
20cb0 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20  edOptions $line 
20cc0 24 6c 73 74 5d 5d 0a 20 20 20 20 20 20 20 20 7d  $lst]].        }
20cd0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 2d 2d  .    }..    # --
20ce0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
20cf0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
20d00 2d 2d 2d 2d 0a 20 20 20 20 23 20 3d 3d 3d 20 53  ----.    # === S
20d10 50 45 43 49 46 49 43 20 54 4b 20 43 4f 4d 4d 41  PECIFIC TK COMMA
20d20 4e 44 20 43 4f 4d 50 4c 45 54 45 52 53 20 3d 3d  ND COMPLETERS ==
20d30 3d 0a 20 20 20 20 23 20 2d 2d 2d 2d 2d 2d 2d 2d  =.    # --------
20d40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
20d50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a  --------------..
20d60 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74      proc complet
20d70 65 28 62 65 6c 6c 29 20 7b 74 65 78 74 20 73 74  e(bell) {text st
20d80 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
20d90 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20   mod} {.        
20da0 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
20db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 31 20 7b  .            1 {
20dc0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
20dd0 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
20de0 2d 64 69 73 70 6c 61 79 6f 66 5d 20 7d 0a 20 20  -displayof] }.  
20df0 20 20 20 20 20 20 20 20 20 20 32 20 7b 0a 20 20            2 {.  
20e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
20e10 20 7b 22 2d 64 69 73 70 6c 61 79 6f 66 22 20 3d   {"-displayof" =
20e20 3d 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20  = [PreviousWord 
20e30 24 73 74 61 72 74 20 24 6c 69 6e 65 5d 7d 20 7b  $start $line]} {
20e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20e50 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d       return [Com
20e60 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74  pleteFromList $t
20e70 65 78 74 20 5b 54 6f 70 6c 65 76 65 6c 57 69 6e  ext [ToplevelWin
20e80 64 6f 77 73 5d 5d 0a 20 20 20 20 20 20 20 20 20  dows]].         
20e90 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
20ea0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
20eb0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63  .    }..    proc
20ec0 20 43 6f 6d 70 6c 65 74 65 53 65 71 75 65 6e 63   CompleteSequenc
20ed0 65 20 7b 74 65 78 74 20 66 75 6c 6c 74 65 78 74  e {text fulltext
20ee0 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
20ef0 6d 6f 64 69 66 69 65 72 73 20 7b 0a 20 20 20 20  modifiers {.    
20f00 20 20 20 20 20 20 20 20 41 6c 74 20 43 6f 6e 74          Alt Cont
20f10 72 6f 6c 20 53 68 69 66 74 20 4c 6f 63 6b 20 44  rol Shift Lock D
20f20 6f 75 62 6c 65 20 54 72 69 70 6c 65 0a 20 20 20  ouble Triple.   
20f30 20 20 20 20 20 20 20 20 20 42 31 20 42 32 20 42           B1 B2 B
20f40 33 20 42 34 20 42 35 20 42 75 74 74 6f 6e 31 20  3 B4 B5 Button1 
20f50 42 75 74 74 6f 6e 32 20 42 75 74 74 6f 6e 33 20  Button2 Button3 
20f60 42 75 74 74 6f 6e 34 20 42 75 74 74 6f 6e 35 0a  Button4 Button5.
20f70 20 20 20 20 20 20 20 20 20 20 20 20 4d 20 4d 31              M M1
20f80 20 4d 32 20 4d 33 20 4d 34 20 4d 35 0a 20 20 20   M2 M3 M4 M5.   
20f90 20 20 20 20 20 20 20 20 20 4d 65 74 61 20 4d 6f           Meta Mo
20fa0 64 31 20 4d 6f 64 32 20 4d 6f 64 33 20 4d 6f 64  d1 Mod2 Mod3 Mod
20fb0 34 20 4d 6f 64 35 0a 20 20 20 20 20 20 20 20 7d  4 Mod5.        }
20fc0 0a 20 20 20 20 20 20 20 20 73 65 74 20 65 76 65  .        set eve
20fd0 6e 74 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20  nts {.          
20fe0 20 20 41 63 74 69 76 61 74 65 20 42 75 74 74 6f    Activate Butto
20ff0 6e 20 42 75 74 74 6f 6e 50 72 65 73 73 20 42 75  n ButtonPress Bu
21000 74 74 6f 6e 52 65 6c 65 61 73 65 0a 20 20 20 20  ttonRelease.    
21010 20 20 20 20 20 20 20 20 43 69 72 63 75 6c 61 74          Circulat
21020 65 20 43 6f 6c 6f 72 6d 61 70 20 43 6f 6e 66 69  e Colormap Confi
21030 67 75 72 65 20 44 65 61 63 74 69 76 61 74 65 20  gure Deactivate 
21040 44 65 73 74 72 6f 79 0a 20 20 20 20 20 20 20 20  Destroy.        
21050 20 20 20 20 45 6e 74 65 72 20 45 78 70 6f 73 65      Enter Expose
21060 20 46 6f 63 75 73 49 6e 20 46 6f 63 75 73 4f 75   FocusIn FocusOu
21070 74 20 47 72 61 76 69 74 79 0a 20 20 20 20 20 20  t Gravity.      
21080 20 20 20 20 20 20 4b 65 79 20 4b 65 79 50 72 65        Key KeyPre
21090 73 73 20 4b 65 79 52 65 6c 65 61 73 65 20 4c 65  ss KeyRelease Le
210a0 61 76 65 20 4d 61 70 20 4d 6f 74 69 6f 6e 0a 20  ave Map Motion. 
210b0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 75 73 65             Mouse
210c0 57 68 65 65 6c 20 50 72 6f 70 65 72 74 79 20 52  Wheel Property R
210d0 65 70 61 72 65 6e 74 20 55 6e 6d 61 70 20 56 69  eparent Unmap Vi
210e0 73 69 62 69 6c 69 74 79 0a 20 20 20 20 20 20 20  sibility.       
210f0 20 7d 0a 20 20 20 20 20 20 20 20 73 65 74 20 73   }.        set s
21100 65 71 75 65 6e 63 65 20 5b 63 6f 6e 63 61 74 20  equence [concat 
21110 24 6d 6f 64 69 66 69 65 72 73 20 24 65 76 65 6e  $modifiers $even
21120 74 73 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ts].        retu
21130 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 4c 69 73 74  rn [CompleteList
21140 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 24  FromList $text $
21150 66 75 6c 6c 74 65 78 74 20 24 73 65 71 75 65 6e  fulltext $sequen
21160 63 65 20 3c 20 2d 20 3e 5d 0a 20 20 20 20 7d 0a  ce < - >].    }.
21170 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65  .    proc comple
21180 74 65 28 62 69 6e 64 29 20 7b 74 65 78 74 20 73  te(bind) {text s
21190 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
211a0 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20  s mod} {.       
211b0 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20   switch -- $pos 
211c0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 31 20  {.            1 
211d0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
211e0 20 20 73 65 74 20 77 69 64 67 65 74 73 20 5b 57    set widgets [W
211f0 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 74  idgetChildren $t
21200 65 78 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20  ext].           
21210 20 20 20 20 20 73 65 74 20 74 6f 70 6c 65 76 65       set topleve
21220 6c 73 20 5b 54 6f 70 6c 65 76 65 6c 57 69 6e 64  ls [ToplevelWind
21230 6f 77 73 5d 0a 20 20 20 20 20 20 20 20 20 20 20  ows].           
21240 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch 
21250 7b 73 65 74 20 74 6f 70 6c 65 76 65 6c 43 6c 61  {set toplevelCla
21260 73 73 20 5b 77 69 6e 66 6f 20 63 6c 61 73 73 20  ss [winfo class 
21270 2e 5d 7d 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20  .]}]} {.        
21280 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
21290 74 6f 70 6c 65 76 65 6c 43 6c 61 73 73 20 22 22  toplevelClass ""
212a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
212b0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
212c0 20 20 20 73 65 74 20 72 65 73 74 20 7b 0a 20 20     set rest {.  
212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212e0 20 20 42 75 74 74 6f 6e 20 43 61 6e 76 61 73 20    Button Canvas 
212f0 43 68 65 63 6b 62 75 74 74 6f 6e 20 45 6e 74 72  Checkbutton Entr
21300 79 20 46 72 61 6d 65 20 4c 61 62 65 6c 0a 20 20  y Frame Label.  
21310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21320 20 20 4c 69 73 74 62 6f 78 20 4d 65 6e 75 20 4d    Listbox Menu M
21330 65 6e 75 62 75 74 74 6f 6e 20 4d 65 73 73 61 67  enubutton Messag
21340 65 20 52 61 64 69 6f 62 75 74 74 6f 6e 0a 20 20  e Radiobutton.  
21350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21360 20 20 53 63 61 6c 65 20 53 63 72 6f 6c 6c 62 61    Scale Scrollba
21370 72 20 54 65 78 74 0a 20 20 20 20 20 20 20 20 20  r Text.         
21380 20 20 20 20 20 20 20 20 20 20 20 61 6c 6c 0a 20             all. 
21390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
213a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
213b0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
213c0 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
213d0 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  \.              
213e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 63                [c
213f0 6f 6e 63 61 74 20 24 74 6f 70 6c 65 76 65 6c 73  oncat $toplevels
21400 20 24 77 69 64 67 65 74 73 20 24 74 6f 70 6c 65   $widgets $tople
21410 76 65 6c 43 6c 61 73 73 20 24 72 65 73 74 5d 5d  velClass $rest]]
21420 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
21430 20 20 20 20 20 20 20 20 20 20 20 32 20 7b 0a 20             2 {. 
21440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21450 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 53  eturn [CompleteS
21460 65 71 75 65 6e 63 65 20 24 74 65 78 74 20 5b 4c  equence $text [L
21470 69 6e 64 65 78 20 24 6c 69 6e 65 20 32 5d 5d 0a  index $line 2]].
21480 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
21490 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
214a0 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  t {.            
214b0 20 20 20 20 23 20 72 65 74 75 72 6e 20 5b 44 69      # return [Di
214c0 73 70 6c 61 79 48 69 6e 74 73 20 7b 3c 73 63 72  splayHints {<scr
214d0 69 70 74 3e 20 3c 2b 73 63 72 69 70 74 3e 7d 5d  ipt> <+script>}]
214e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
214f0 20 72 65 74 75 72 6e 20 5b 42 72 61 63 65 4f 72   return [BraceOr
21500 43 6f 6d 6d 61 6e 64 20 24 74 65 78 74 20 24 73  Command $text $s
21510 74 61 72 74 20 24 65 6e 64 20 24 6c 69 6e 65 20  tart $end $line 
21520 24 70 6f 73 20 24 6d 6f 64 5d 0a 20 20 20 20 20  $pos $mod].     
21530 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
21540 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   }.        retur
21550 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20  n "".    }..    
21560 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 62 69  proc complete(bi
21570 6e 64 74 61 67 73 29 20 7b 74 65 78 74 20 73 74  ndtags) {text st
21580 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
21590 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20   mod} {.        
215a0 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
215b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 31 20 7b  .            1 {
215c0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
215d0 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
215e0 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
215f0 24 74 65 78 74 5d 5d 20 7d 0a 20 20 20 20 20 20  $text]] }.      
21600 20 20 20 20 20 20 32 20 7b 0a 20 20 20 20 20 20        2 {.      
21610 20 20 20 20 20 20 20 20 20 20 23 20 73 65 74 20            # set 
21620 63 75 72 72 65 6e 74 5f 74 61 67 73 20 5b 52 65  current_tags [Re
21630 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20  moveUsedOptions 
21640 24 6c 69 6e 65 20 5b 62 69 6e 64 74 61 67 73 20  $line [bindtags 
21650 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d  [Lindex $line 1]
21660 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]].             
21670 20 20 20 73 65 74 20 63 75 72 72 65 6e 74 5f 74     set current_t
21680 61 67 73 20 5b 62 69 6e 64 74 61 67 73 20 5b 4c  ags [bindtags [L
21690 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 5d 0a  index $line 1]].
216a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216b0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
216c0 4c 69 73 74 46 72 6f 6d 4c 69 73 74 20 24 74 65  ListFromList $te
216d0 78 74 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65  xt [Lindex $line
216e0 20 32 5d 20 5c 0a 20 20 20 20 20 20 20 20 20 20   2] \.          
216f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21700 20 20 24 63 75 72 72 65 6e 74 5f 74 61 67 73 20    $current_tags 
21710 5c 7b 20 7b 20 7d 20 5c 7d 5d 0a 20 20 20 20 20  \{ { } \}].     
21720 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
21730 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   }.        retur
21740 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20  n "".    }..    
21750 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 62 75  proc complete(bu
21760 74 74 6f 6e 29 20 7b 74 65 78 74 20 73 74 61 72  tton) {text star
21770 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
21780 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 77  od} {.        sw
21790 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20  itch -- $pos {. 
217a0 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20             1    
217b0 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 45 76 65     { return [Eve
217c0 6e 74 75 61 6c 6c 79 49 6e 73 65 72 74 4c 65 61  ntuallyInsertLea
217d0 64 69 6e 67 44 6f 74 20 24 74 65 78 74 20 3c 70  dingDot $text <p
217e0 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a 20 20 20 20  athName>] }.    
217f0 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20          default 
21800 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
21810 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65    return [Comple
21820 74 65 57 69 64 67 65 74 43 6f 6e 66 69 67 75 72  teWidgetConfigur
21830 61 74 69 6f 6e 73 20 24 74 65 78 74 20 24 73 74  ations $text $st
21840 61 72 74 20 24 6c 69 6e 65 20 5c 0a 20 20 20 20  art $line \.    
21850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21860 20 20 20 20 20 20 20 20 7b 2d 61 63 74 69 76 65          {-active
21870 62 61 63 6b 67 72 6f 75 6e 64 20 2d 61 63 74 69  background -acti
21880 76 65 66 6f 72 65 67 72 6f 75 6e 64 20 2d 61 6e  veforeground -an
21890 63 68 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20  chor.           
218a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218b0 20 20 2d 62 61 63 6b 67 72 6f 75 6e 64 20 2d 62    -background -b
218c0 69 74 6d 61 70 20 2d 62 6f 72 64 65 72 77 69 64  itmap -borderwid
218d0 74 68 20 2d 63 75 72 73 6f 72 0a 20 20 20 20 20  th -cursor.     
218e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218f0 20 20 20 20 20 20 20 20 2d 64 69 73 61 62 6c 65          -disable
21900 64 66 6f 72 65 67 72 6f 75 6e 64 20 2d 66 6f 6e  dforeground -fon
21910 74 20 2d 66 6f 72 65 67 72 6f 75 6e 64 0a 20 20  t -foreground.  
21920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21930 20 20 20 20 20 20 20 20 20 20 20 2d 68 69 67 68             -high
21940 6c 69 67 68 74 62 61 63 6b 67 72 6f 75 6e 64 20  lightbackground 
21950 2d 68 69 67 68 6c 69 67 68 74 63 6f 6c 6f 72 0a  -highlightcolor.
21960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21970 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 68 69               -hi
21980 67 68 6c 69 67 68 74 74 68 69 63 6b 6e 65 73 73  ghlightthickness
21990 20 2d 69 6d 61 67 65 20 2d 6a 75 73 74 69 66 79   -image -justify
219a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
219b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 70                -p
219c0 61 64 78 20 2d 70 61 64 79 20 2d 72 65 6c 69 65  adx -pady -relie
219d0 66 20 2d 74 61 6b 65 66 6f 63 75 73 20 2d 74 65  f -takefocus -te
219e0 78 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  xt.             
219f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a00 2d 74 65 78 74 76 61 72 69 61 62 6c 65 20 2d 75  -textvariable -u
21a10 6e 64 65 72 6c 69 6e 65 20 2d 77 72 61 70 6c 65  nderline -wraple
21a20 6e 67 74 68 0a 20 20 20 20 20 20 20 20 20 20 20  ngth.           
21a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a40 20 20 2d 63 6f 6d 6d 61 6e 64 20 2d 64 65 66 61    -command -defa
21a50 75 6c 74 20 2d 68 65 69 67 68 74 20 2d 73 74 61  ult -height -sta
21a60 74 65 20 2d 77 69 64 74 68 7d 5d 0a 20 20 20 20  te -width}].    
21a70 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
21a80 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75    }.        retu
21a90 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20  rn "".    }..   
21aa0 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 63   proc complete(c
21ab0 61 6e 76 61 73 29 20 7b 74 65 78 74 20 73 74 61  anvas) {text sta
21ac0 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
21ad0 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  mod} {.        s
21ae0 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
21af0 20 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20              1   
21b00 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 45 76      { return [Ev
21b10 65 6e 74 75 61 6c 6c 79 49 6e 73 65 72 74 4c 65  entuallyInsertLe
21b20 61 64 69 6e 67 44 6f 74 20 24 74 65 78 74 20 3c  adingDot $text <
21b30 70 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a 20 20 20  pathName>] }.   
21b40 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74           default
21b50 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
21b60 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c     return [Compl
21b70 65 74 65 57 69 64 67 65 74 43 6f 6e 66 69 67 75  eteWidgetConfigu
21b80 72 61 74 69 6f 6e 73 20 24 74 65 78 74 20 24 73  rations $text $s
21b90 74 61 72 74 20 24 6c 69 6e 65 20 5c 0a 20 20 20  tart $line \.   
21ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bb0 20 20 20 20 20 20 20 20 20 7b 2d 62 61 63 6b 67           {-backg
21bc0 72 6f 75 6e 64 20 2d 62 6f 72 64 65 72 77 69 64  round -borderwid
21bd0 74 68 20 2d 63 75 72 73 6f 72 20 2d 68 69 67 68  th -cursor -high
21be0 6c 69 67 68 74 62 61 63 6b 67 72 6f 75 6e 64 0a  lightbackground.
21bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c00 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 68 69               -hi
21c10 67 68 6c 69 67 68 74 63 6f 6c 6f 72 20 2d 68 69  ghlightcolor -hi
21c20 67 68 6c 69 67 68 74 74 68 69 63 6b 6e 65 73 73  ghlightthickness
21c30 20 2d 69 6e 73 65 72 74 62 61 63 6b 67 72 6f 75   -insertbackgrou
21c40 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd.             
21c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c60 2d 69 6e 73 65 72 74 62 6f 72 64 65 72 77 69 64  -insertborderwid
21c70 74 68 20 2d 69 6e 73 65 72 74 6f 66 66 74 69 6d  th -insertofftim
21c80 65 20 2d 69 6e 73 65 72 74 6f 6e 74 69 6d 65 0a  e -insertontime.
21c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 69 6e               -in
21cb0 73 65 72 74 77 69 64 74 68 20 2d 72 65 6c 69 65  sertwidth -relie
21cc0 66 20 2d 73 65 6c 65 63 74 62 61 63 6b 67 72 6f  f -selectbackgro
21cd0 75 6e 64 20 2d 73 65 6c 65 63 74 62 6f 72 64 65  und -selectborde
21ce0 72 77 69 64 74 68 0a 20 20 20 20 20 20 20 20 20  rwidth.         
21cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d00 20 20 20 20 2d 73 65 6c 65 63 74 66 6f 72 65 67      -selectforeg
21d10 72 6f 75 6e 64 20 2d 74 61 6b 65 66 6f 63 75 73  round -takefocus
21d20 20 2d 78 73 63 72 6f 6c 6c 63 6f 6d 6d 61 6e 64   -xscrollcommand
21d30 20 2d 79 73 63 72 6f 6c 6c 63 6f 6d 6d 61 6e 64   -yscrollcommand
21d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 63                -c
21d60 6c 6f 73 65 65 6e 6f 75 67 68 20 2d 63 6f 6e 66  loseenough -conf
21d70 69 6e 65 20 2d 68 65 69 67 68 74 20 2d 73 63 72  ine -height -scr
21d80 6f 6c 6c 72 65 67 69 6f 6e 20 2d 77 69 64 74 68  ollregion -width
21d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 78                -x
21db0 73 63 72 6f 6c 6c 69 6e 63 72 65 6d 65 6e 74 20  scrollincrement 
21dc0 2d 79 73 63 72 6f 6c 6c 69 6e 63 72 65 6d 65 6e  -yscrollincremen
21dd0 74 7d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t}].            
21de0 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
21df0 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20      return "".  
21e00 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f    }..    proc co
21e10 6d 70 6c 65 74 65 28 63 68 65 63 6b 62 75 74 74  mplete(checkbutt
21e20 6f 6e 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  on) {text start 
21e30 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
21e40 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74  } {.        swit
21e50 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20  ch -- $pos {.   
21e60 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
21e70 20 7b 20 72 65 74 75 72 6e 20 5b 45 76 65 6e 74   { return [Event
21e80 75 61 6c 6c 79 49 6e 73 65 72 74 4c 65 61 64 69  uallyInsertLeadi
21e90 6e 67 44 6f 74 20 24 74 65 78 74 20 3c 70 61 74  ngDot $text <pat
21ea0 68 4e 61 6d 65 3e 5d 20 7d 0a 20 20 20 20 20 20  hName>] }.      
21eb0 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0a        default {.
21ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ed0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
21ee0 57 69 64 67 65 74 43 6f 6e 66 69 67 75 72 61 74  WidgetConfigurat
21ef0 69 6f 6e 73 20 24 74 65 78 74 20 24 73 74 61 72  ions $text $star
21f00 74 20 24 6c 69 6e 65 20 5c 0a 20 20 20 20 20 20  t $line \.      
21f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f20 20 20 20 20 20 20 7b 2d 61 63 74 69 76 65 62 61        {-activeba
21f30 63 6b 67 72 6f 75 6e 64 20 61 63 74 69 76 65 42  ckground activeB
21f40 61 63 6b 67 72 6f 75 6e 64 20 46 6f 72 65 67 72  ackground Foregr
21f50 6f 75 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20  ound.           
21f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f70 20 20 2d 61 63 74 69 76 65 66 6f 72 65 67 72 6f    -activeforegro
21f80 75 6e 64 20 2d 61 6e 63 68 6f 72 20 2d 62 61 63  und -anchor -bac
21f90 6b 67 72 6f 75 6e 64 20 2d 62 69 74 6d 61 70 0a  kground -bitmap.
21fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 62 6f               -bo
21fc0 72 64 65 72 77 69 64 74 68 20 2d 63 75 72 73 6f  rderwidth -curso
21fd0 72 20 2d 64 69 73 61 62 6c 65 64 66 6f 72 65 67  r -disabledforeg
21fe0 72 6f 75 6e 64 20 2d 66 6f 6e 74 0a 20 20 20 20  round -font.    
21ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22000 20 20 20 20 20 20 20 20 20 2d 66 6f 72 65 67 72           -foregr
22010 6f 75 6e 64 20 2d 68 69 67 68 6c 69 67 68 74 62  ound -highlightb
22020 61 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c  ackground -highl
22030 69 67 68 74 63 6f 6c 6f 72 0a 20 20 20 20 20 20  ightcolor.      
22040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22050 20 20 20 20 20 20 20 2d 68 69 67 68 6c 69 67 68         -highligh
22060 74 74 68 69 63 6b 6e 65 73 73 20 2d 69 6d 61 67  tthickness -imag
22070 65 20 2d 6a 75 73 74 69 66 79 20 2d 70 61 64 78  e -justify -padx
22080 20 2d 70 61 64 79 0a 20 20 20 20 20 20 20 20 20   -pady.         
22090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220a0 20 20 20 20 2d 72 65 6c 69 65 66 20 2d 74 61 6b      -relief -tak
220b0 65 66 6f 63 75 73 20 2d 74 65 78 74 20 2d 74 65  efocus -text -te
220c0 78 74 76 61 72 69 61 62 6c 65 20 2d 75 6e 64 65  xtvariable -unde
220d0 72 6c 69 6e 65 0a 20 20 20 20 20 20 20 20 20 20  rline.          
220e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220f0 20 20 20 2d 77 72 61 70 6c 65 6e 67 74 68 20 2d     -wraplength -
22100 63 6f 6d 6d 61 6e 64 20 2d 68 65 69 67 68 74 20  command -height 
22110 2d 69 6e 64 69 63 61 74 6f 72 6f 6e 20 2d 6f 66  -indicatoron -of
22120 66 76 61 6c 75 65 0a 20 20 20 20 20 20 20 20 20  fvalue.         
22130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22140 20 20 20 20 2d 6f 6e 76 61 6c 75 65 20 2d 73 65      -onvalue -se
22150 6c 65 63 74 63 6f 6c 6f 72 20 2d 73 65 6c 65 63  lectcolor -selec
22160 74 69 6d 61 67 65 20 2d 73 74 61 74 65 20 2d 76  timage -state -v
22170 61 72 69 61 62 6c 65 0a 20 20 20 20 20 20 20 20  ariable.        
22180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22190 20 20 20 20 20 2d 77 69 64 74 68 7d 5d 0a 20 20       -width}].  
221a0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
221b0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65      }.        re
221c0 74 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20  turn "".    }.. 
221d0 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65     proc complete
221e0 28 63 6c 69 70 62 6f 61 72 64 29 20 7b 74 65 78  (clipboard) {tex
221f0 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
22200 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20   pos mod} {.    
22210 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70      switch -- $p
22220 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  os {.           
22230 20 31 20 20 20 20 20 20 20 7b 20 72 65 74 75 72   1       { retur
22240 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
22250 69 73 74 20 24 74 65 78 74 20 7b 61 70 70 65 6e  ist $text {appen
22260 64 20 63 6c 65 61 72 7d 5d 20 7d 0a 20 20 20 20  d clear}] }.    
22270 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20          default 
22280 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
22290 20 20 73 65 74 20 73 75 62 20 5b 4c 69 6e 64 65    set sub [Linde
222a0 78 20 24 6c 69 6e 65 20 31 5d 0a 20 20 20 20 20  x $line 1].     
222b0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70             set p
222c0 72 65 76 20 5b 50 72 65 76 69 6f 75 73 57 6f 72  rev [PreviousWor
222d0 64 20 24 73 74 61 72 74 20 24 6c 69 6e 65 5d 0a  d $start $line].
222e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222f0 73 77 69 74 63 68 20 2d 2d 20 24 73 75 62 20 7b  switch -- $sub {
22300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22310 20 20 20 20 20 61 70 70 65 6e 64 20 7b 0a 20 20       append {.  
22320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22330 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
22340 24 70 72 65 76 20 7b 0a 20 20 20 20 20 20 20 20  $prev {.        
22350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22360 20 20 20 20 2d 64 69 73 70 6c 61 79 6f 66 20 7b      -displayof {
22370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22390 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
223a0 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
223b0 5b 54 6f 70 6c 65 76 65 6c 57 69 6e 64 6f 77 73  [ToplevelWindows
223c0 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]].             
223d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
223e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
223f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 66 6f               -fo
22400 72 6d 61 74 20 20 20 20 7b 20 72 65 74 75 72 6e  rmat    { return
22410 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
22420 66 6f 72 6d 61 74 3e 5d 20 7d 0a 20 20 20 20 20  format>] }.     
22430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22440 20 20 20 20 20 20 20 2d 74 79 70 65 20 20 20 20         -type    
22450 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70    { return [Disp
22460 6c 61 79 48 69 6e 74 73 20 3c 74 79 70 65 3e 5d  layHints <type>]
22470 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
22480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
22490 65 66 61 75 6c 74 20 20 20 20 7b 0a 20 20 20 20  efault    {.    
224a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224b0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
224c0 6f 70 74 73 20 5b 52 65 6d 6f 76 65 55 73 65 64  opts [RemoveUsed
224d0 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20 5c 0a  Options $line \.
224e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 2d                {-
22510 64 69 73 70 6c 61 79 6f 66 20 2d 66 6f 72 6d 61  displayof -forma
22520 74 20 2d 74 79 70 65 20 2d 2d 7d 20 7b 2d 2d 7d  t -type --} {--}
22530 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
22540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22550 20 20 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6c    if {![string l
22560 65 6e 67 74 68 20 24 6f 70 74 73 5d 7d 20 7b 0a  ength $opts]} {.
22570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22590 20 20 20 20 72 65 74 75 72 6e 20 5b 44 69 73 70      return [Disp
225a0 6c 61 79 48 69 6e 74 73 20 3c 64 61 74 61 3e 5d  layHints <data>]
225b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
225c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225d0 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
225e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
22600 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
22610 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 24 6f 70  omList $text $op
22620 74 73 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ts].            
22630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22640 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
22650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22660 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
22670 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
22680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22690 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
226a0 20 20 20 20 20 20 20 20 63 6c 65 61 72 20 7b 0a          clear {.
226b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226c0 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d          switch -
226d0 2d 20 24 70 72 65 76 20 7b 0a 20 20 20 20 20 20  - $prev {.      
226e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226f0 20 20 20 20 20 20 2d 64 69 73 70 6c 61 79 6f 66        -displayof
22700 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
22710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22720 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c     return [Compl
22730 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  eteFromList $tex
22740 74 20 5b 54 6f 70 6c 65 76 65 6c 57 69 6e 64 6f  t [ToplevelWindo
22750 77 73 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20  ws]].           
22760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22770 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
22780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
22790 65 66 61 75 6c 74 20 20 20 20 7b 0a 20 20 20 20  efault    {.    
227a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
227c0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
227d0 4c 69 73 74 20 24 74 65 78 74 20 5c 0a 20 20 20  List $text \.   
227e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22800 20 20 20 20 20 20 20 20 20 5b 52 65 6d 6f 76 65           [Remove
22810 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e  UsedOptions $lin
22820 65 20 7b 2d 64 69 73 70 6c 61 79 6f 66 7d 5d 5d  e {-displayof}]]
22830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22840 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
22850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22860 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
22870 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
22880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
22890 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
228a0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a         }.    }..
228b0 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74      proc complet
228c0 65 28 64 65 73 74 72 6f 79 29 20 7b 74 65 78 74  e(destroy) {text
228d0 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
228e0 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20  pos mod} {.     
228f0 20 20 20 73 65 74 20 72 65 6d 61 69 6e 69 6e 67     set remaining
22900 20 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69   [RemoveUsedOpti
22910 6f 6e 73 20 24 6c 69 6e 65 20 5b 57 69 64 67 65  ons $line [Widge
22920 74 43 68 69 6c 64 72 65 6e 20 24 74 65 78 74 5d  tChildren $text]
22930 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ].        return
22940 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
22950 73 74 20 24 74 65 78 74 20 24 72 65 6d 61 69 6e  st $text $remain
22960 69 6e 67 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ing].    }..    
22970 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 65 6e  proc complete(en
22980 74 72 79 29 20 7b 74 65 78 74 20 73 74 61 72 74  try) {text start
22990 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
229a0 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 77 69  d} {.        swi
229b0 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20  tch -- $pos {.  
229c0 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20            1     
229d0 20 20 7b 20 72 65 74 75 72 6e 20 5b 45 76 65 6e    { return [Even
229e0 74 75 61 6c 6c 79 49 6e 73 65 72 74 4c 65 61 64  tuallyInsertLead
229f0 69 6e 67 44 6f 74 20 24 74 65 78 74 20 3c 70 61  ingDot $text <pa
22a00 74 68 4e 61 6d 65 3e 5d 20 7d 0a 20 20 20 20 20  thName>] }.     
22a10 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b         default {
22a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22a30 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
22a40 65 57 69 64 67 65 74 43 6f 6e 66 69 67 75 72 61  eWidgetConfigura
22a50 74 69 6f 6e 73 20 24 74 65 78 74 20 24 73 74 61  tions $text $sta
22a60 72 74 20 24 6c 69 6e 65 20 5c 0a 20 20 20 20 20  rt $line \.     
22a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a80 20 20 20 20 20 20 20 7b 2d 62 61 63 6b 67 72 6f         {-backgro
22a90 75 6e 64 20 2d 62 6f 72 64 65 72 77 69 64 74 68  und -borderwidth
22aa0 20 2d 63 75 72 73 6f 72 20 2d 65 78 70 6f 72 74   -cursor -export
22ab0 73 65 6c 65 63 74 69 6f 6e 0a 20 20 20 20 20 20  selection.      
22ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ad0 20 20 20 20 20 20 20 2d 66 6f 6e 74 20 2d 66 6f         -font -fo
22ae0 72 65 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69  reground -highli
22af0 67 68 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d 68  ghtbackground -h
22b00 69 67 68 6c 69 67 68 74 63 6f 6c 6f 72 0a 20 20  ighlightcolor.  
22b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b20 20 20 20 20 20 20 20 20 20 20 20 2d 68 69 67 68             -high
22b30 6c 69 67 68 74 74 68 69 63 6b 6e 65 73 73 20 2d  lightthickness -
22b40 69 6e 73 65 72 74 62 61 63 6b 67 72 6f 75 6e 64  insertbackground
22b50 20 2d 69 6e 73 65 72 74 62 6f 72 64 65 72 77 69   -insertborderwi
22b60 64 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 20  dth.            
22b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b80 20 2d 69 6e 73 65 72 74 6f 66 66 74 69 6d 65 20   -insertofftime 
22b90 2d 69 6e 73 65 72 74 6f 6e 74 69 6d 65 20 2d 69  -insertontime -i
22ba0 6e 73 65 72 74 77 69 64 74 68 20 2d 6a 75 73 74  nsertwidth -just
22bb0 69 66 79 20 2d 72 65 6c 69 65 66 0a 20 20 20 20  ify -relief.    
22bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bd0 20 20 20 20 20 20 20 20 20 2d 73 65 6c 65 63 74           -select
22be0 62 61 63 6b 67 72 6f 75 6e 64 20 2d 73 65 6c 65  background -sele
22bf0 63 74 62 6f 72 64 65 72 77 69 64 74 68 20 2d 73  ctborderwidth -s
22c00 65 6c 65 63 74 66 6f 72 65 67 72 6f 75 6e 64 0a  electforeground.
22c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 74 61               -ta
22c30 6b 65 66 6f 63 75 73 20 2d 74 65 78 74 76 61 72  kefocus -textvar
22c40 69 61 62 6c 65 20 2d 78 73 63 72 6f 6c 6c 63 6f  iable -xscrollco
22c50 6d 6d 61 6e 64 20 2d 73 68 6f 77 20 2d 73 74 61  mmand -show -sta
22c60 74 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  te.             
22c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c80 2d 77 69 64 74 68 7d 5d 0a 20 20 20 20 20 20 20  -width}].       
22c90 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
22ca0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
22cb0 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  "".    }..    pr
22cc0 6f 63 20 63 6f 6d 70 6c 65 74 65 28 65 76 65 6e  oc complete(even
22cd0 74 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  t) {text start e
22ce0 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
22cf0 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 73   {.        set s
22d00 75 62 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65  ub [Lindex $line
22d10 20 31 5d 0a 20 20 20 20 20 20 20 20 73 77 69 74   1].        swit
22d20 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20  ch -- $pos {.   
22d30 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
22d40 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
22d50 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c     return [Compl
22d60 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  eteFromList $tex
22d70 74 20 7b 61 64 64 20 64 65 6c 65 74 65 20 67 65  t {add delete ge
22d80 6e 65 72 61 74 65 20 69 6e 66 6f 7d 5d 0a 20 20  nerate info}].  
22d90 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
22da0 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20          2       
22db0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
22dc0 20 20 73 77 69 74 63 68 20 2d 2d 20 24 73 75 62    switch -- $sub
22dd0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
22de0 20 20 20 20 20 20 20 61 64 64 20 20 20 20 20 20         add      
22df0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
22e00 79 48 69 6e 74 73 20 3c 3c 76 69 72 74 75 61 6c  yHints <<virtual
22e10 3e 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  >>] }.          
22e20 20 20 20 20 20 20 20 20 20 20 69 6e 66 6f 20 20            info  
22e30 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20     -.           
22e40 20 20 20 20 20 20 20 20 20 64 65 6c 65 74 65 20           delete 
22e50 20 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70    { return [Comp
22e60 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65  leteFromList $te
22e70 78 74 20 5b 65 76 65 6e 74 20 69 6e 66 6f 5d 20  xt [event info] 
22e80 22 3c 22 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  "<"] }.         
22e90 20 20 20 20 20 20 20 20 20 20 20 67 65 6e 65 72             gener
22ea0 61 74 65 20 7b 20 72 65 74 75 72 6e 20 5b 54 72  ate { return [Tr
22eb0 79 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  yFromList $text 
22ec0 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
22ed0 24 74 65 78 74 5d 5d 20 7d 0a 20 20 20 20 20 20  $text]] }.      
22ee0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
22ef0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
22f00 20 20 20 20 20 20 33 20 20 20 20 20 20 20 7b 0a        3       {.
22f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f20 73 77 69 74 63 68 20 2d 2d 20 24 73 75 62 20 7b  switch -- $sub {
22f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22f40 20 20 20 20 20 61 64 64 20 20 20 20 20 20 2d 0a       add      -.
22f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f60 20 20 20 20 64 65 6c 65 74 65 20 20 20 2d 0a 20      delete   -. 
22f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f80 20 20 20 67 65 6e 65 72 61 74 65 20 7b 20 72 65     generate { re
22f90 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 53 65  turn [CompleteSe
22fa0 71 75 65 6e 63 65 20 24 74 65 78 74 20 5b 4c 69  quence $text [Li
22fb0 6e 64 65 78 20 24 6c 69 6e 65 20 33 5d 5d 20 7d  ndex $line 3]] }
22fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22fd0 20 20 20 20 20 69 6e 66 6f 20 20 20 20 20 7b 7d       info     {}
22fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22ff0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d   }.            }
23000 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66  .            def
23010 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 20 20  ault {.         
23020 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
23030 20 24 73 75 62 20 7b 0a 20 20 20 20 20 20 20 20   $sub {.        
23040 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 20              add 
23050 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20       -.         
23060 20 20 20 20 20 20 20 20 20 20 20 64 65 6c 65 74             delet
23070 65 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  e   { return [Co
23080 6d 70 6c 65 74 65 53 65 71 75 65 6e 63 65 20 24  mpleteSequence $
23090 74 65 78 74 20 5b 4c 69 6e 64 65 78 20 24 6c 69  text [Lindex $li
230a0 6e 65 20 33 5d 5d 20 7d 0a 20 20 20 20 20 20 20  ne 3]] }.       
230b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 66               inf
230c0 6f 20 20 20 20 20 7b 7d 0a 20 20 20 20 20 20 20  o     {}.       
230d0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 6e               gen
230e0 65 72 61 74 65 20 7b 0a 20 20 20 20 20 20 20 20  erate {.        
230f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23100 73 77 69 74 63 68 20 2d 2d 20 5b 50 72 65 76 69  switch -- [Previ
23110 6f 75 73 57 6f 72 64 20 24 73 74 61 72 74 20 24  ousWord $start $
23120 6c 69 6e 65 5d 20 7b 0a 20 20 20 20 20 20 20 20  line] {.        
23130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23140 20 20 20 20 2d 61 62 6f 76 65 20 20 20 20 20 2d      -above     -
23150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23160 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 72 6f               -ro
23170 6f 74 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20  ot      -.      
23180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23190 20 20 20 20 20 20 2d 73 75 62 77 69 6e 64 6f 77        -subwindow
231a0 20 7b 20 72 65 74 75 72 6e 20 5b 54 72 79 46 72   { return [TryFr
231b0 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b 57 69  omList $text [Wi
231c0 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 74 65  dgetChildren $te
231d0 78 74 5d 5d 20 7d 0a 0a 20 20 20 20 20 20 20 20  xt]] }..        
231e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231f0 20 20 20 20 2d 62 6f 72 64 65 72 77 69 64 74 68      -borderwidth
23200 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
23210 61 79 48 69 6e 74 73 20 3c 73 69 7a 65 3e 5d 20  ayHints <size>] 
23220 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
23230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
23240 62 75 74 74 6f 6e 20 20 2d 0a 20 20 20 20 20 20  button  -.      
23250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23260 20 20 20 20 20 20 2d 64 65 6c 74 61 20 20 20 2d        -delta   -
23270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23280 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 6b 65               -ke
23290 79 63 6f 64 65 20 2d 0a 20 20 20 20 20 20 20 20  ycode -.        
232a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232b0 20 20 20 20 2d 73 65 72 69 61 6c 20 20 2d 0a 20      -serial  -. 
232c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232d0 20 20 20 20 20 20 20 20 20 20 20 2d 63 6f 75 6e             -coun
232e0 74 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  t   { return [Di
232f0 73 70 6c 61 79 48 69 6e 74 73 20 3c 6e 75 6d 62  splayHints <numb
23300 65 72 3e 5d 20 7d 0a 0a 20 20 20 20 20 20 20 20  er>] }..        
23310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23320 20 20 20 20 2d 64 65 74 61 69 6c 20 7b 0a 20 20      -detail {.  
23330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
23350 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
23360 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5c 0a 20  omList $text \. 
23370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23390 20 20 20 20 20 20 20 20 20 20 20 7b 4e 6f 74 69             {Noti
233a0 66 79 41 6e 63 65 73 74 6f 72 20 20 20 20 4e 6f  fyAncestor    No
233b0 74 69 66 79 4e 6f 6e 6c 69 6e 65 61 72 56 69 72  tifyNonlinearVir
233c0 74 75 61 6c 0a 20 20 20 20 20 20 20 20 20 20 20  tual.           
233d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233f0 20 20 4e 6f 74 69 66 79 44 65 74 61 69 6c 4e 6f    NotifyDetailNo
23400 6e 65 20 20 4e 6f 74 69 66 79 50 6f 69 6e 74 65  ne  NotifyPointe
23410 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
23420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e                 N
23440 6f 74 69 66 79 49 6e 66 65 72 69 6f 72 20 20 20  otifyInferior   
23450 20 4e 6f 74 69 66 79 50 6f 69 6e 74 65 72 52 6f   NotifyPointerRo
23460 6f 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ot.             
23470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23490 4e 6f 74 69 66 79 4e 6f 6e 6c 69 6e 65 61 72 20  NotifyNonlinear 
234a0 20 20 4e 6f 74 69 66 79 56 69 72 74 75 61 6c 7d    NotifyVirtual}
234b0 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
234c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
234d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
234e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 66 6f               -fo
234f0 63 75 73 20 20 20 20 20 2d 0a 20 20 20 20 20 20  cus     -.      
23500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23510 20 20 20 20 20 20 2d 6f 76 65 72 72 69 64 65 20        -override 
23520 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   -.             
23530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
23540 73 65 6e 64 65 76 65 6e 74 20 7b 20 72 65 74 75  sendevent { retu
23550 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c  rn [CompleteBool
23560 65 61 6e 20 24 74 65 78 74 5d 20 7d 0a 0a 20 20  ean $text] }..  
23570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23580 20 20 20 20 20 20 20 20 20 20 2d 68 65 69 67 68            -heigh
23590 74 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t -.            
235a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235b0 2d 77 69 64 74 68 20 20 7b 20 72 65 74 75 72 6e  -width  { return
235c0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
235d0 73 69 7a 65 3e 5d 20 7d 0a 0a 20 20 20 20 20 20  size>] }..      
235e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235f0 20 20 20 20 20 20 2d 6b 65 79 73 79 6d 20 7b 20        -keysym { 
23600 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
23610 69 6e 74 73 20 3c 6e 61 6d 65 3e 5d 20 7d 0a 0a  ints <name>] }..
23620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23630 20 20 20 20 20 20 20 20 20 20 20 20 2d 6d 6f 64              -mod
23640 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e {.            
23650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23660 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70      return [Comp
23670 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65  leteFromList $te
23680 78 74 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20  xt \.           
23690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236b0 20 7b 4e 6f 74 69 66 79 4e 6f 72 6d 61 6c 20 4e   {NotifyNormal N
236c0 6f 74 69 66 79 47 72 61 62 0a 20 20 20 20 20 20  otifyGrab.      
236d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236f0 20 20 20 20 20 20 20 4e 6f 74 69 66 79 55 6e 67         NotifyUng
23700 72 61 62 20 4e 6f 74 69 66 79 57 68 69 6c 65 47  rab NotifyWhileG
23710 72 61 62 62 65 64 7d 5d 0a 20 20 20 20 20 20 20  rabbed}].       
23720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23730 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
23740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23750 20 20 20 20 2d 70 6c 61 63 65 20 7b 0a 20 20 20      -place {.   
23760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23770 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
23780 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
23790 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 50 6c 61  mList $text {Pla
237a0 63 65 4f 6e 54 6f 70 20 50 6c 61 63 65 4f 6e 42  ceOnTop PlaceOnB
237b0 6f 74 74 6f 6d 7d 5d 0a 20 20 20 20 20 20 20 20  ottom}].        
237c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237d0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20      }..         
237e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237f0 20 20 20 2d 72 6f 6f 74 78 20 2d 0a 20 20 20 20     -rootx -.    
23800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23810 20 20 20 20 20 20 20 20 2d 72 6f 6f 74 79 20 2d          -rooty -
23820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23830 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 78 20               -x 
23840 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20      -.          
23850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23860 20 20 2d 79 20 20 20 20 20 7b 20 72 65 74 75 72    -y     { retur
23870 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
23880 3c 63 6f 6f 72 64 3e 5d 20 7d 0a 0a 20 20 20 20  <coord>] }..    
23890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238a0 20 20 20 20 20 20 20 20 2d 73 74 61 74 65 20 7b          -state {
238b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
238c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238d0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
238e0 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
238f0 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  \.              
23900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 56                {V
23920 69 73 69 62 69 6c 69 74 79 55 6e 6f 62 73 63 75  isibilityUnobscu
23930 72 65 64 20 56 69 73 69 62 69 6c 69 74 79 50 61  red VisibilityPa
23940 72 74 69 61 6c 6c 79 4f 62 73 63 75 72 65 64 0a  rtiallyObscured.
23950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23970 20 20 20 20 20 20 20 20 20 20 20 20 20 56 69 73               Vis
23980 69 62 69 6c 69 74 79 46 75 6c 6c 79 4f 62 73 63  ibilityFullyObsc
23990 75 72 65 64 20 3c 69 6e 74 65 67 65 72 3e 7d 5d  ured <integer>}]
239a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
239b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a               }..
239c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239d0 20 20 20 20 20 20 20 20 20 20 20 20 2d 74 69 6d              -tim
239e0 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  e { return [Disp
239f0 6c 61 79 48 69 6e 74 73 20 3c 69 6e 74 65 67 65  layHints <intege
23a00 72 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  r>] }.          
23a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a20 20 20 2d 77 68 65 6e 20 7b 20 72 65 74 75 72 6e    -when { return
23a30 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
23a40 73 74 20 24 74 65 78 74 20 7b 6e 6f 77 20 74 61  st $text {now ta
23a50 69 6c 20 68 65 61 64 20 6d 61 72 6b 7d 5d 20 7d  il head mark}] }
23a60 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
23a80 66 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 20  fault {.        
23a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23aa0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
23ab0 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
23ac0 20 24 74 65 78 74 20 5c 0a 20 20 20 20 20 20 20   $text \.       
23ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23af0 20 20 20 20 20 5b 52 65 6d 6f 76 65 55 73 65 64       [RemoveUsed
23b00 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20 5c 0a  Options $line \.
23b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b40 20 7b 2d 61 62 6f 76 65 20 2d 62 6f 72 64 65 72   {-above -border
23b50 77 69 64 74 68 20 2d 62 75 74 74 6f 6e 20 2d 63  width -button -c
23b60 6f 75 6e 74 20 2d 64 65 6c 74 61 0a 20 20 20 20  ount -delta.    
23b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 64                -d
23ba0 65 74 61 69 6c 20 2d 66 6f 63 75 73 20 2d 68 65  etail -focus -he
23bb0 69 67 68 74 20 2d 6b 65 79 63 6f 64 65 20 2d 6b  ight -keycode -k
23bc0 65 79 73 79 6d 0a 20 20 20 20 20 20 20 20 20 20  eysym.          
23bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bf0 20 20 20 20 20 20 20 20 2d 6d 6f 64 65 20 2d 6f          -mode -o
23c00 76 65 72 72 69 64 65 20 2d 70 6c 61 63 65 20 2d  verride -place -
23c10 72 6f 6f 74 20 2d 72 6f 6f 74 78 20 2d 72 6f 6f  root -rootx -roo
23c20 74 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ty.             
23c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c50 20 20 20 20 20 2d 73 65 6e 64 65 76 65 6e 74 20       -sendevent 
23c60 2d 73 65 72 69 61 6c 20 2d 73 74 61 74 65 20 2d  -serial -state -
23c70 73 75 62 77 69 6e 64 6f 77 20 2d 74 69 6d 65 0a  subwindow -time.
23c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cb0 20 20 2d 77 69 64 74 68 20 2d 77 68 65 6e 20 2d    -width -when -
23cc0 78 20 2d 79 7d 5d 5d 0a 20 20 20 20 20 20 20 20  x -y}]].        
23cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ce0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
23cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
23d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d10 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
23d20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
23d30 74 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20  t {}.           
23d40 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
23d50 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
23d60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22         return ""
23d70 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63  .    }..    proc
23d80 20 63 6f 6d 70 6c 65 74 65 28 66 6f 63 75 73 29   complete(focus)
23d90 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
23da0 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
23db0 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20  .        switch 
23dc0 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20  -- $pos {.      
23dd0 20 20 20 20 20 20 31 20 20 20 20 20 20 20 7b 0a        1       {.
23de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23df0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
23e00 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5c  FromList $text \
23e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 6f               [co
23e30 6e 63 61 74 20 5b 57 69 64 67 65 74 43 68 69 6c  ncat [WidgetChil
23e40 64 72 65 6e 20 24 74 65 78 74 5d 20 2d 64 69 73  dren $text] -dis
23e50 70 6c 61 79 6f 66 20 2d 66 6f 72 63 65 20 2d 6c  playof -force -l
23e60 61 73 74 66 6f 72 5d 5d 0a 20 20 20 20 20 20 20  astfor]].       
23e70 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
23e80 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20     default {.   
23e90 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69               swi
23ea0 74 63 68 20 2d 2d 20 5b 50 72 65 76 69 6f 75 73  tch -- [Previous
23eb0 57 6f 72 64 20 24 73 74 61 72 74 20 24 6c 69 6e  Word $start $lin
23ec0 65 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  e] {.           
23ed0 20 20 20 20 20 20 20 20 20 2d 64 69 73 70 6c 61           -displa
23ee0 79 6f 66 20 2d 0a 20 20 20 20 20 20 20 20 20 20  yof -.          
23ef0 20 20 20 20 20 20 20 20 20 20 2d 66 6f 72 63 65            -force
23f00 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20       -.         
23f10 20 20 20 20 20 20 20 20 20 20 20 2d 6c 61 73 74             -last
23f20 66 6f 72 20 20 20 7b 0a 20 20 20 20 20 20 20 20  for   {.        
23f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f40 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
23f50 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b  FromList $text [
23f60 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
23f70 74 65 78 74 5d 5d 0a 20 20 20 20 20 20 20 20 20  text]].         
23f80 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
23f90 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
23fa0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
23fb0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72       }.        r
23fc0 65 74 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a  eturn "".    }..
23fd0 20 20 20 20 70 72 6f 63 20 46 6f 6e 74 43 6f 6e      proc FontCon
23fe0 66 69 67 75 72 65 20 7b 74 65 78 74 20 6c 69 6e  figure {text lin
23ff0 65 20 70 72 65 76 7d 20 7b 0a 20 20 20 20 20 20  e prev} {.      
24000 20 20 73 65 74 20 66 6f 6e 74 6f 70 74 73 20 7b    set fontopts {
24010 2d 66 61 6d 69 6c 79 20 2d 6f 76 65 72 73 74 72  -family -overstr
24020 69 6b 65 20 2d 73 69 7a 65 20 2d 73 6c 61 6e 74  ike -size -slant
24030 20 2d 75 6e 64 65 72 6c 69 6e 65 20 2d 77 65 69   -underline -wei
24040 67 68 74 7d 0a 20 20 20 20 20 20 20 20 73 77 69  ght}.        swi
24050 74 63 68 20 2d 2d 20 24 70 72 65 76 20 7b 0a 20  tch -- $prev {. 
24060 20 20 20 20 20 20 20 20 20 20 20 2d 66 61 6d 69             -fami
24070 6c 79 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20  ly     { return 
24080 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
24090 74 20 24 74 65 78 74 20 5b 66 6f 6e 74 20 66 61  t $text [font fa
240a0 6d 69 6c 69 65 73 5d 5d 20 7d 0a 20 20 20 20 20  milies]] }.     
240b0 20 20 20 20 20 20 20 2d 75 6e 64 65 72 6c 69 6e         -underlin
240c0 65 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20  e  -.           
240d0 20 2d 6f 76 65 72 73 74 72 69 6b 65 20 7b 20 72   -overstrike { r
240e0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 42  eturn [CompleteB
240f0 6f 6f 6c 65 61 6e 20 24 74 65 78 74 5d 20 7d 0a  oolean $text] }.
24100 20 20 20 20 20 20 20 20 20 20 20 20 2d 73 69 7a              -siz
24110 65 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e  e       { return
24120 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
24130 73 69 7a 65 3e 5d 20 7d 0a 20 20 20 20 20 20 20  size>] }.       
24140 20 20 20 20 20 2d 73 6c 61 6e 74 20 20 20 20 20       -slant     
24150 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c   { return [Compl
24160 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  eteFromList $tex
24170 74 20 7b 72 6f 6d 61 6e 20 69 74 61 6c 69 63 7d  t {roman italic}
24180 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
24190 2d 77 65 69 67 68 74 20 20 20 20 20 7b 20 72 65  -weight     { re
241a0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
241b0 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 6e 6f  omList $text {no
241c0 72 6d 61 6c 20 62 6f 6c 64 7d 5d 20 7d 0a 20 20  rmal bold}] }.  
241d0 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
241e0 74 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20  t     {.        
241f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
24200 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
24210 20 24 74 65 78 74 20 5b 52 65 6d 6f 76 65 55 73   $text [RemoveUs
24220 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20  edOptions $line 
24230 24 66 6f 6e 74 6f 70 74 73 5d 5d 0a 20 20 20 20  $fontopts]].    
24240 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
24250 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70    }.    }..    p
24260 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 66 6f 6e  roc complete(fon
24270 74 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  t) {text start e
24280 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
24290 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 66   {.        set f
242a0 6f 6e 74 6f 70 74 73 20 7b 2d 66 61 6d 69 6c 79  ontopts {-family
242b0 20 2d 6f 76 65 72 73 74 72 69 6b 65 20 2d 73 69   -overstrike -si
242c0 7a 65 20 2d 73 6c 61 6e 74 20 2d 75 6e 64 65 72  ze -slant -under
242d0 6c 69 6e 65 20 2d 77 65 69 67 68 74 7d 0a 20 20  line -weight}.  
242e0 20 20 20 20 20 20 73 65 74 20 66 6f 6e 74 6d 65        set fontme
242f0 74 72 69 63 73 20 7b 2d 61 73 63 65 6e 74 20 2d  trics {-ascent -
24300 64 65 73 63 65 6e 74 20 2d 6c 69 6e 65 73 70 61  descent -linespa
24310 63 65 20 2d 66 69 78 65 64 7d 0a 20 20 20 20 20  ce -fixed}.     
24320 20 20 20 73 65 74 20 73 75 62 20 5b 4c 69 6e 64     set sub [Lind
24330 65 78 20 24 6c 69 6e 65 20 31 5d 0a 20 20 20 20  ex $line 1].    
24340 20 20 20 20 73 65 74 20 70 72 65 76 20 5b 50 72      set prev [Pr
24350 65 76 69 6f 75 73 57 6f 72 64 20 24 73 74 61 72  eviousWord $star
24360 74 20 24 6c 69 6e 65 5d 0a 20 20 20 20 20 20 20  t $line].       
24370 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20   switch -- $pos 
24380 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 31 20  {.            1 
24390 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
243a0 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65    return [Comple
243b0 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  teFromList $text
243c0 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   \.             
243d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
243e0 61 63 74 75 61 6c 20 63 6f 6e 66 69 67 75 72 65  actual configure
243f0 20 63 72 65 61 74 65 20 64 65 6c 65 74 65 0a 20   create delete. 
24400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24410 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6d 69              fami
24420 6c 69 65 73 20 6d 65 61 73 75 72 65 20 6d 65 74  lies measure met
24430 72 69 63 73 20 6e 61 6d 65 73 7d 5d 0a 20 20 20  rics names}].   
24440 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
24450 20 20 20 20 20 20 20 32 20 7b 0a 20 20 20 20 20         2 {.     
24460 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63             switc
24470 68 20 2d 2d 20 24 73 75 62 20 7b 0a 20 20 20 20  h -- $sub {.    
24480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24490 61 63 74 75 61 6c 20 20 20 20 2d 0a 20 20 20 20  actual    -.    
244a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244b0 6d 65 61 73 75 72 65 20 20 20 2d 0a 20 20 20 20  measure   -.    
244c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244d0 6d 65 74 72 69 63 73 20 20 20 7b 20 72 65 74 75  metrics   { retu
244e0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
244f0 20 3c 66 6f 6e 74 3e 5d 20 7d 0a 20 20 20 20 20   <font>] }.     
24500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
24510 6f 6e 66 69 67 75 72 65 20 2d 0a 20 20 20 20 20  onfigure -.     
24520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
24530 65 6c 65 74 65 20 20 20 20 7b 0a 20 20 20 20 20  elete    {.     
24540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24550 20 20 20 73 65 74 20 6e 61 6d 65 73 20 5b 66 6f     set names [fo
24560 6e 74 20 6e 61 6d 65 73 5d 0a 20 20 20 20 20 20  nt names].      
24570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24580 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
24590 6e 67 74 68 20 24 6e 61 6d 65 73 5d 7d 20 7b 0a  ngth $names]} {.
245a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
245c0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
245d0 4c 69 73 74 20 24 74 65 78 74 20 24 6e 61 6d 65  List $text $name
245e0 73 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s].             
245f0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
24600 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e {.            
24610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24620 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
24630 69 6e 74 73 20 3c 66 6f 6e 74 6e 61 6d 65 3e 5d  ints <fontname>]
24640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24650 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
24660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
24670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24680 20 20 20 20 20 63 72 65 61 74 65 20 20 20 20 7b       create    {
24690 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
246a0 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
246b0 5b 63 6f 6e 63 61 74 20 3f 66 6f 6e 74 6e 61 6d  [concat ?fontnam
246c0 65 3f 20 24 66 6f 6e 74 6f 70 74 73 5d 5d 20 7d  e? $fontopts]] }
246d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
246e0 20 20 20 20 20 66 61 6d 69 6c 69 65 73 20 20 7b       families  {
246f0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
24700 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
24710 2d 64 69 73 70 6c 61 79 6f 66 5d 20 7d 0a 20 20  -displayof] }.  
24720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24730 20 20 6e 61 6d 65 73 20 20 20 20 20 7b 7d 0a 20    names     {}. 
24740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
24750 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
24760 20 20 20 20 20 20 20 20 20 20 20 33 20 7b 0a 20             3 {. 
24770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
24780 77 69 74 63 68 20 2d 2d 20 24 73 75 62 20 7b 0a  witch -- $sub {.
24790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247a0 20 20 20 20 61 63 74 75 61 6c 20 20 20 20 7b 20      actual    { 
247b0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
247c0 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b  FromList $text [
247d0 63 6f 6e 63 61 74 20 2d 64 69 73 70 6c 61 79 6f  concat -displayo
247e0 66 20 24 66 6f 6e 74 6f 70 74 73 5d 5d 20 7d 0a  f $fontopts]] }.
247f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24800 20 20 20 20 63 6f 6e 66 69 67 75 72 65 20 2d 0a      configure -.
24810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24820 20 20 20 20 63 72 65 61 74 65 20 20 20 20 7b 20      create    { 
24830 72 65 74 75 72 6e 20 5b 46 6f 6e 74 43 6f 6e 66  return [FontConf
24840 69 67 75 72 65 20 24 74 65 78 74 20 24 6c 69 6e  igure $text $lin
24850 65 20 24 70 72 65 76 5d 20 7d 0a 20 20 20 20 20  e $prev] }.     
24860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
24870 65 6c 65 74 65 20 20 20 20 7b 0a 20 20 20 20 20  elete    {.     
24880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24890 20 20 20 73 65 74 20 6e 61 6d 65 73 20 5b 66 6f     set names [fo
248a0 6e 74 20 6e 61 6d 65 73 5d 0a 20 20 20 20 20 20  nt names].      
248b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248c0 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
248d0 6e 67 74 68 20 24 6e 61 6d 65 73 5d 7d 20 7b 0a  ngth $names]} {.
248e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
24900 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
24910 4c 69 73 74 20 24 74 65 78 74 20 24 6e 61 6d 65  List $text $name
24920 73 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s].             
24930 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
24940 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e {.            
24950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24960 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
24970 69 6e 74 73 20 3c 66 6f 6e 74 6e 61 6d 65 3e 5d  ints <fontname>]
24980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24990 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
249a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
249b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
249c0 20 20 20 20 20 66 61 6d 69 6c 69 65 73 20 20 7b       families  {
249d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
249e0 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20           switch 
249f0 2d 2d 20 24 70 72 65 76 20 7b 0a 20 20 20 20 20  -- $prev {.     
24a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a10 20 20 20 20 20 20 20 2d 64 69 73 70 6c 61 79 6f         -displayo
24a20 66 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  f { return [Comp
24a30 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65  leteFromList $te
24a40 78 74 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72  xt [WidgetChildr
24a50 65 6e 20 24 74 65 78 74 5d 5d 20 7d 0a 20 20 20  en $text]] }.   
24a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a70 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
24a80 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
24a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24aa0 20 6d 65 61 73 75 72 65 20 20 20 7b 20 72 65 74   measure   { ret
24ab0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
24ac0 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 2d 64 69  mList $text {-di
24ad0 73 70 6c 61 79 6f 66 20 3c 74 65 78 74 3e 7d 5d  splayof <text>}]
24ae0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
24af0 20 20 20 20 20 20 20 6d 65 74 72 69 63 73 20 20         metrics  
24b00 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c   { return [Compl
24b10 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  eteFromList $tex
24b20 74 20 5b 63 6f 6e 63 61 74 20 2d 64 69 73 70 6c  t [concat -displ
24b30 61 79 6f 66 20 24 66 6f 6e 74 6d 65 74 72 69 63  ayof $fontmetric
24b40 73 5d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  s]] }.          
24b50 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 73 20            names 
24b60 20 20 20 20 7b 7d 0a 20 20 20 20 20 20 20 20 20      {}.         
24b70 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
24b80 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
24b90 20 20 20 34 20 7b 0a 20 20 20 20 20 20 20 20 20     4 {.         
24ba0 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
24bb0 20 24 73 75 62 20 7b 0a 20 20 20 20 20 20 20 20   $sub {.        
24bc0 20 20 20 20 20 20 20 20 20 20 20 20 61 63 74 75              actu
24bd0 61 6c 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20  al    {.        
24be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bf0 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65 76 20  switch -- $prev 
24c00 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
24c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 64                -d
24c20 69 73 70 6c 61 79 6f 66 20 7b 20 72 65 74 75 72  isplayof { retur
24c30 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
24c40 69 73 74 20 24 74 65 78 74 20 5b 57 69 64 67 65  ist $text [Widge
24c50 74 43 68 69 6c 64 72 65 6e 20 24 74 65 78 74 5d  tChildren $text]
24c60 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
24c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c80 64 65 66 61 75 6c 74 20 20 20 20 7b 20 72 65 74  default    { ret
24c90 75 72 6e 20 5b 46 6f 6e 74 43 6f 6e 66 69 67 75  urn [FontConfigu
24ca0 72 65 20 24 74 65 78 74 20 24 6c 69 6e 65 20 24  re $text $line $
24cb0 70 72 65 76 5d 20 7d 0a 20 20 20 20 20 20 20 20  prev] }.        
24cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cd0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
24ce0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
24cf0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
24d00 69 67 75 72 65 20 2d 0a 20 20 20 20 20 20 20 20  igure -.        
24d10 20 20 20 20 20 20 20 20 20 20 20 20 63 72 65 61              crea
24d20 74 65 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b  te    { return [
24d30 46 6f 6e 74 43 6f 6e 66 69 67 75 72 65 20 24 74  FontConfigure $t
24d40 65 78 74 20 24 6c 69 6e 65 20 24 70 72 65 76 5d  ext $line $prev]
24d50 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
24d60 20 20 20 20 20 20 20 64 65 6c 65 74 65 20 20 20         delete   
24d70 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
24d80 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e             set n
24d90 61 6d 65 73 20 5b 66 6f 6e 74 20 6e 61 6d 65 73  ames [font names
24da0 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
24db0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73            if {[s
24dc0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61  tring length $na
24dd0 6d 65 73 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20  mes]} {.        
24de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24df0 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70      return [Comp
24e00 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65  leteFromList $te
24e10 78 74 20 24 6e 61 6d 65 73 5d 0a 20 20 20 20 20  xt $names].     
24e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e30 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
24e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
24e60 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 66 6f  DisplayHints <fo
24e70 6e 74 6e 61 6d 65 3e 5d 0a 20 20 20 20 20 20 20  ntname>].       
24e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e90 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
24ea0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
24eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6d               fam
24ec0 69 6c 69 65 73 20 20 7b 7d 0a 20 20 20 20 20 20  ilies  {}.      
24ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65                me
24ee0 61 73 75 72 65 20 20 20 7b 0a 20 20 20 20 20 20  asure   {.      
24ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f00 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65    switch -- $pre
24f10 76 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v {.            
24f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f30 2d 64 69 73 70 6c 61 79 6f 66 20 7b 20 72 65 74  -displayof { ret
24f40 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
24f50 6d 4c 69 73 74 20 24 74 65 78 74 20 5b 57 69 64  mList $text [Wid
24f60 67 65 74 43 68 69 6c 64 72 65 6e 20 24 74 65 78  getChildren $tex
24f70 74 5d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  t]] }.          
24f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f90 20 20 64 65 66 61 75 6c 74 20 20 20 20 7b 20 72    default    { r
24fa0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
24fb0 6e 74 73 20 3c 74 65 78 74 3e 5d 20 7d 0a 20 20  nts <text>] }.  
24fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fd0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
24fe0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
24ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25000 20 20 6d 65 74 72 69 63 73 20 20 20 7b 0a 20 20    metrics   {.  
25010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25020 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
25030 24 70 72 65 76 20 7b 0a 20 20 20 20 20 20 20 20  $prev {.        
25040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25050 20 20 20 20 2d 64 69 73 70 6c 61 79 6f 66 20 7b      -displayof {
25060 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
25070 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
25080 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
25090 24 74 65 78 74 5d 5d 20 7d 0a 20 20 20 20 20 20  $text]] }.      
250a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250b0 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 20 20        default   
250c0 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c   { return [Compl
250d0 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  eteFromList $tex
250e0 74 20 24 66 6f 6e 74 6d 65 74 72 69 63 73 5d 20  t $fontmetrics] 
250f0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
25100 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
25110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25120 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
25130 20 20 20 20 20 20 6e 61 6d 65 73 20 20 20 20 20        names     
25140 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {}.             
25150 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
25160 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64   }.            d
25170 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20  efault {.       
25180 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20           switch 
25190 2d 2d 20 24 73 75 62 20 7b 0a 20 20 20 20 20 20  -- $sub {.      
251a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 63                ac
251b0 74 75 61 6c 20 20 20 20 2d 0a 20 20 20 20 20 20  tual    -.      
251c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
251d0 6e 66 69 67 75 72 65 20 2d 0a 20 20 20 20 20 20  nfigure -.      
251e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 72                cr
251f0 65 61 74 65 20 20 20 20 7b 20 72 65 74 75 72 6e  eate    { return
25200 20 5b 46 6f 6e 74 43 6f 6e 66 69 67 75 72 65 20   [FontConfigure 
25210 24 74 65 78 74 20 24 6c 69 6e 65 20 24 70 72 65  $text $line $pre
25220 76 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  v] }.           
25230 20 20 20 20 20 20 20 20 20 64 65 6c 65 74 65 20           delete 
25240 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
25250 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
25260 20 6e 61 6d 65 73 20 5b 66 6f 6e 74 20 6e 61 6d   names [font nam
25270 65 73 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es].            
25280 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
25290 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $
252a0 6e 61 6d 65 73 5d 7d 20 7b 0a 20 20 20 20 20 20  names]} {.      
252b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f        return [Co
252d0 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
252e0 74 65 78 74 20 24 6e 61 6d 65 73 5d 0a 20 20 20  text $names].   
252f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25300 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
25310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25320 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25330 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
25340 66 6f 6e 74 6e 61 6d 65 3e 5d 0a 20 20 20 20 20  fontname>].     
25350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25360 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
25370 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
25380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
25390 61 6d 69 6c 69 65 73 20 20 7b 7d 0a 20 20 20 20  amilies  {}.    
253a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253b0 6d 65 61 73 75 72 65 20 20 20 7b 20 72 65 74 75  measure   { retu
253c0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
253d0 20 3c 74 65 78 74 3e 5d 20 7d 0a 20 20 20 20 20   <text>] }.     
253e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
253f0 65 74 72 69 63 73 20 20 20 7b 20 72 65 74 75 72  etrics   { retur
25400 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
25410 69 73 74 20 24 74 65 78 74 20 24 66 6f 6e 74 6d  ist $text $fontm
25420 65 74 72 69 63 73 5d 20 7d 0a 20 20 20 20 20 20  etrics] }.      
25430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
25440 6d 65 73 20 20 20 20 20 7b 7d 0a 20 20 20 20 20  mes     {}.     
25450 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
25460 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
25470 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74     }.        ret
25480 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20  urn "".    }..  
25490 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28    proc complete(
254a0 66 72 61 6d 65 29 20 7b 74 65 78 74 20 73 74 61  frame) {text sta
254b0 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
254c0 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  mod} {.        s
254d0 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
254e0 20 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20              1   
254f0 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 45 76      { return [Ev
25500 65 6e 74 75 61 6c 6c 79 49 6e 73 65 72 74 4c 65  entuallyInsertLe
25510 61 64 69 6e 67 44 6f 74 20 24 74 65 78 74 20 3c  adingDot $text <
25520 70 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a 20 20 20  pathName>] }.   
25530 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74           default
25540 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
25550 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c     return [Compl
25560 65 74 65 57 69 64 67 65 74 43 6f 6e 66 69 67 75  eteWidgetConfigu
25570 72 61 74 69 6f 6e 73 20 24 74 65 78 74 20 24 73  rations $text $s
25580 74 61 72 74 20 24 6c 69 6e 65 20 5c 0a 20 20 20  tart $line \.   
25590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255a0 20 20 20 20 20 20 20 20 20 7b 2d 62 6f 72 64 65           {-borde
255b0 72 77 69 64 74 68 20 2d 63 75 72 73 6f 72 20 2d  rwidth -cursor -
255c0 68 69 67 68 6c 69 67 68 74 62 61 63 6b 67 72 6f  highlightbackgro
255d0 75 6e 64 20 2d 68 69 67 68 6c 69 67 68 74 63 6f  und -highlightco
255e0 6c 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  lor.            
255f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25600 20 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b   -highlightthick
25610 6e 65 73 73 20 2d 72 65 6c 69 65 66 20 2d 74 61  ness -relief -ta
25620 6b 65 66 6f 63 75 73 20 2d 62 61 63 6b 67 72 6f  kefocus -backgro
25630 75 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20  und.            
25640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25650 20 2d 63 6c 61 73 73 20 2d 63 6f 6c 6f 72 6d 61   -class -colorma
25660 70 20 2d 63 6f 6e 74 61 69 6e 65 72 20 2d 68 65  p -container -he
25670 69 67 68 74 20 2d 76 69 73 75 61 6c 20 2d 77 69  ight -visual -wi
25680 64 74 68 7d 5d 0a 20 20 20 20 20 20 20 20 20 20  dth}].          
25690 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
256a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a        return "".
256b0 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20      }..    proc 
256c0 63 6f 6d 70 6c 65 74 65 28 67 72 61 62 29 20 7b  complete(grab) {
256d0 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
256e0 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20  ine pos mod} {. 
256f0 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
25700 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20   $pos {.        
25710 20 20 20 20 31 20 7b 0a 20 20 20 20 20 20 20 20      1 {.        
25720 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
25730 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
25740 20 24 74 65 78 74 20 5c 0a 20 20 20 20 20 20 20   $text \.       
25750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25760 20 20 20 20 20 5b 63 6f 6e 63 61 74 20 63 75 72       [concat cur
25770 72 65 6e 74 20 72 65 6c 65 61 73 65 20 73 65 74  rent release set
25780 20 73 74 61 74 75 73 20 2d 67 6c 6f 62 61 6c 20   status -global 
25790 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
257a0 24 74 65 78 74 5d 5d 5d 0a 20 20 20 20 20 20 20  $text]]].       
257b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
257c0 20 20 20 32 20 7b 0a 20 20 20 20 20 20 20 20 20     2 {.         
257d0 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
257e0 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31   [Lindex $line 1
257f0 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] {.            
25800 20 20 20 20 20 20 20 20 2d 67 6c 6f 62 61 6c 20          -global 
25810 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  -.              
25820 20 20 20 20 20 20 63 75 72 72 65 6e 74 20 2d 0a        current -.
25830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25840 20 20 20 20 72 65 6c 65 61 73 65 20 2d 0a 20 20      release -.  
25850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25860 20 20 73 74 61 74 75 73 20 20 7b 20 72 65 74 75    status  { retu
25870 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
25880 4c 69 73 74 20 24 74 65 78 74 20 5b 57 69 64 67  List $text [Widg
25890 65 74 43 68 69 6c 64 72 65 6e 20 24 74 65 78 74  etChildren $text
258a0 5d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  ]] }.           
258b0 20 20 20 20 20 20 20 20 20 73 65 74 20 20 20 20           set    
258c0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
258d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
258e0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
258f0 69 73 74 20 24 74 65 78 74 20 5b 63 6f 6e 63 61  ist $text [conca
25900 74 20 2d 67 6c 6f 62 61 6c 20 5b 57 69 64 67 65  t -global [Widge
25910 74 43 68 69 6c 64 72 65 6e 20 24 74 65 78 74 5d  tChildren $text]
25920 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]].             
25930 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
25940 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
25950 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
25960 20 20 20 20 20 33 20 7b 0a 20 20 20 20 20 20 20       3 {.       
25970 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20           switch 
25980 2d 2d 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65  -- [Lindex $line
25990 20 31 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20   1] {.          
259a0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 0a            set {.
259b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259c0 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d          switch -
259d0 2d 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20  - [PreviousWord 
259e0 24 73 74 61 72 74 20 24 6c 69 6e 65 5d 20 7b 0a  $start $line] {.
259f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a00 20 20 20 20 20 20 20 20 20 20 20 20 2d 67 6c 6f              -glo
25a10 62 61 6c 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  bal { return [Co
25a20 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
25a30 74 65 78 74 20 5b 57 69 64 67 65 74 43 68 69 6c  text [WidgetChil
25a40 64 72 65 6e 20 24 74 65 78 74 5d 5d 20 7d 0a 20  dren $text]] }. 
25a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a60 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
25a70 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
25a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
25a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
25aa0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
25ab0 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20 20 7d   return "".    }
25ac0 0a 0a 20 20 20 20 70 72 6f 63 20 47 72 69 64 43  ..    proc GridC
25ad0 6f 6e 66 69 67 20 7b 74 65 78 74 20 73 74 61 72  onfig {text star
25ae0 74 20 6c 69 6e 65 20 70 72 65 76 7d 20 7b 0a 20  t line prev} {. 
25af0 20 20 20 20 20 20 20 73 65 74 20 6f 70 74 73 20         set opts 
25b00 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 63  {.            -c
25b10 6f 6c 75 6d 6e 20 2d 63 6f 6c 75 6d 6e 73 70 61  olumn -columnspa
25b20 6e 20 2d 69 6e 20 2d 69 70 61 64 78 20 2d 69 70  n -in -ipadx -ip
25b30 61 64 79 0a 20 20 20 20 20 20 20 20 20 20 20 20  ady.            
25b40 2d 70 61 64 78 20 2d 70 61 64 79 20 2d 72 6f 77  -padx -pady -row
25b50 20 2d 72 6f 77 73 70 61 6e 20 2d 73 74 69 63 6b   -rowspan -stick
25b60 79 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  y.        }.    
25b70 20 20 20 20 69 66 20 7b 2d 31 20 3d 3d 20 5b 73      if {-1 == [s
25b80 74 72 69 6e 67 20 66 69 72 73 74 20 22 2d 22 20  tring first "-" 
25b90 24 6c 69 6e 65 5d 7d 20 7b 0a 20 20 20 20 20 20  $line]} {.      
25ba0 20 20 20 20 20 20 73 65 74 20 73 6c 61 76 65 20        set slave 
25bb0 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
25bc0 24 74 65 78 74 5d 0a 20 20 20 20 20 20 20 20 7d  $text].        }
25bd0 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
25be0 20 20 20 20 73 65 74 20 73 6c 61 76 65 20 22 22      set slave ""
25bf0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
25c00 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 72     switch -- $pr
25c10 65 76 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ev {.           
25c20 20 2d 63 6f 6c 75 6d 6e 20 20 20 20 20 2d 0a 20   -column     -. 
25c30 20 20 20 20 20 20 20 20 20 20 20 2d 63 6f 6c 75             -colu
25c40 6d 6e 73 70 61 6e 20 2d 0a 20 20 20 20 20 20 20  mnspan -.       
25c50 20 20 20 20 20 2d 72 6f 77 20 20 20 20 20 20 20       -row       
25c60 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d   -.            -
25c70 72 6f 77 73 70 61 6e 20 20 20 20 7b 20 72 65 74  rowspan    { ret
25c80 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
25c90 73 20 3c 6e 3e 5d 20 7d 0a 0a 20 20 20 20 20 20  s <n>] }..      
25ca0 20 20 20 20 20 20 2d 69 70 61 64 78 20 2d 0a 20        -ipadx -. 
25cb0 20 20 20 20 20 20 20 20 20 20 20 2d 69 70 61 64             -ipad
25cc0 79 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y -.            
25cd0 2d 70 61 64 78 20 20 2d 0a 20 20 20 20 20 20 20  -padx  -.       
25ce0 20 20 20 20 20 2d 70 61 64 79 20 20 7b 20 72 65       -pady  { re
25cf0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
25d00 74 73 20 3c 61 6d 6f 75 6e 74 3e 5d 20 7d 0a 0a  ts <amount>] }..
25d10 20 20 20 20 20 20 20 20 20 20 20 20 2d 69 6e 20              -in 
25d20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f      { return [Co
25d30 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
25d40 74 65 78 74 20 5b 57 69 64 67 65 74 43 68 69 6c  text [WidgetChil
25d50 64 72 65 6e 20 24 74 65 78 74 5d 5d 20 7d 0a 20  dren $text]] }. 
25d60 20 20 20 20 20 20 20 20 20 20 20 2d 73 74 69 63             -stic
25d70 6b 79 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ky {.           
25d80 20 20 20 20 20 73 65 74 20 70 72 65 76 20 5b 50       set prev [P
25d90 72 65 76 69 6f 75 73 57 6f 72 64 4f 66 49 6e 63  reviousWordOfInc
25da0 6f 6d 70 6c 65 74 65 50 6f 73 69 74 69 6f 6e 20  ompletePosition 
25db0 24 73 74 61 72 74 20 24 6c 69 6e 65 5d 0a 20 20  $start $line].  
25dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
25dd0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 4c 69  turn [CompleteLi
25de0 73 74 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  stFromList $text
25df0 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   \.             
25e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
25e10 73 74 72 69 6e 67 20 74 72 69 6d 6c 65 66 74 20  string trimleft 
25e20 5b 49 6e 63 6f 6d 70 6c 65 74 65 4c 69 73 74 52  [IncompleteListR
25e30 65 6d 61 69 6e 64 65 72 20 24 6c 69 6e 65 5d 5d  emainder $line]]
25e40 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   \.             
25e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
25e60 6e 20 65 20 73 20 77 7d 20 5c 7b 20 7b 20 7d 20  n e s w} \{ { } 
25e70 5c 7d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  \}].            
25e80 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  }..            d
25e90 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20  efault {.       
25ea0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25eb0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
25ec0 74 20 24 74 65 78 74 20 5c 0a 20 20 20 20 20 20  t $text \.      
25ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ee0 20 20 20 20 20 20 5b 52 65 6d 6f 76 65 55 73 65        [RemoveUse
25ef0 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20 5b  dOptions $line [
25f00 63 6f 6e 63 61 74 20 24 6f 70 74 73 20 24 73 6c  concat $opts $sl
25f10 61 76 65 5d 5d 5d 0a 20 20 20 20 20 20 20 20 20  ave]]].         
25f20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
25f30 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63     }..    proc c
25f40 6f 6d 70 6c 65 74 65 28 67 72 69 64 29 20 7b 74  omplete(grid) {t
25f50 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
25f60 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20  ne pos mod} {.  
25f70 20 20 20 20 20 20 73 65 74 20 73 75 62 20 5b 4c        set sub [L
25f80 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a 20  index $line 1]. 
25f90 20 20 20 20 20 20 20 73 65 74 20 70 72 65 76 20         set prev 
25fa0 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 73  [PreviousWord $s
25fb0 74 61 72 74 20 24 6c 69 6e 65 5d 0a 20 20 20 20  tart $line].    
25fc0 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70      switch -- $p
25fd0 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  os {.           
25fe0 20 31 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20   1 {.           
25ff0 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d       return [Com
26000 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74  pleteFromList $t
26010 65 78 74 20 5c 0a 20 20 20 20 20 20 20 20 20 20  ext \.          
26020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26030 20 20 5b 63 6f 6e 63 61 74 20 5b 57 69 64 67 65    [concat [Widge
26040 74 43 68 69 6c 64 72 65 6e 20 24 74 65 78 74 5d  tChildren $text]
26050 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   \.             
26060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26070 20 20 20 20 7b 62 62 6f 78 20 63 6f 6c 75 6d 6e      {bbox column
26080 63 6f 6e 66 69 67 75 72 65 20 63 6f 6e 66 69 67  configure config
26090 75 72 65 20 66 6f 72 67 65 74 0a 20 20 20 20 20  ure forget.     
260a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 66               inf
260c0 6f 20 6c 6f 63 61 74 69 6f 6e 20 70 72 6f 70 61  o location propa
260d0 67 61 74 65 20 72 6f 77 63 6f 6e 66 69 67 75 72  gate rowconfigur
260e0 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e.              
260f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26100 20 20 20 20 72 65 6d 6f 76 65 20 73 69 7a 65 20      remove size 
26110 73 6c 61 76 65 73 7d 5d 5d 0a 20 20 20 20 20 20  slaves}]].      
26120 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
26130 20 20 20 20 32 20 7b 0a 20 20 20 20 20 20 20 20      2 {.        
26140 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d          switch -
26150 2d 20 24 73 75 62 20 7b 0a 20 20 20 20 20 20 20  - $sub {.       
26160 20 20 20 20 20 20 20 20 20 20 20 20 20 62 62 6f               bbo
26170 78 20 20 20 20 20 20 20 20 20 20 20 20 2d 0a 20  x            -. 
26180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26190 20 20 20 63 6f 6c 75 6d 6e 63 6f 6e 66 69 67 75     columnconfigu
261a0 72 65 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20  re -.           
261b0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
261c0 72 65 20 20 20 20 20 20 20 2d 0a 20 20 20 20 20  re       -.     
261d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
261e0 6f 72 67 65 74 20 20 20 20 20 20 20 20 20 20 2d  orget          -
261f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26200 20 20 20 20 20 69 6e 66 6f 20 20 20 20 20 20 20       info       
26210 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20       -.         
26220 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 61 74             locat
26230 69 6f 6e 20 20 20 20 20 20 20 20 2d 0a 20 20 20  ion        -.   
26240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26250 20 70 72 6f 70 61 67 61 74 65 20 20 20 20 20 20   propagate      
26260 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   -.             
26270 20 20 20 20 20 20 20 72 6f 77 63 6f 6e 66 69 67         rowconfig
26280 75 72 65 20 20 20 20 2d 0a 20 20 20 20 20 20 20  ure    -.       
26290 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d               rem
262a0 6f 76 65 20 20 20 20 20 20 20 20 20 20 2d 0a 20  ove          -. 
262b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262c0 20 20 20 73 69 7a 65 20 20 20 20 20 20 20 20 20     size         
262d0 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20     -.           
262e0 20 20 20 20 20 20 20 20 20 73 6c 61 76 65 73 20           slaves 
262f0 20 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72           { retur
26300 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
26310 69 73 74 20 24 74 65 78 74 20 5b 57 69 64 67 65  ist $text [Widge
26320 74 43 68 69 6c 64 72 65 6e 20 24 74 65 78 74 5d  tChildren $text]
26330 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
26340 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20          default 
26350 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e          { return
26360 20 5b 47 72 69 64 43 6f 6e 66 69 67 20 24 74 65   [GridConfig $te
26370 78 74 20 24 73 74 61 72 74 20 24 6c 69 6e 65 20  xt $start $line 
26380 24 70 72 65 76 5d 20 7d 0a 20 20 20 20 20 20 20  $prev] }.       
26390 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
263a0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
263b0 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20       default {. 
263c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
263d0 77 69 74 63 68 20 2d 2d 20 24 73 75 62 20 7b 0a  witch -- $sub {.
263e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263f0 20 20 20 20 62 62 6f 78 20 20 20 20 20 20 20 20      bbox        
26400 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
26410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77                sw
26420 69 74 63 68 20 5b 65 78 70 72 20 7b 24 70 6f 73  itch [expr {$pos
26430 20 25 20 32 7d 5d 20 7b 0a 20 20 20 20 20 20 20   % 2}] {.       
26440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26450 20 20 20 20 20 30 20 7b 20 72 65 74 75 72 6e 20       0 { return 
26460 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 72  [DisplayHints ?r
26470 6f 77 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  ow?] }.         
26480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26490 20 20 20 31 20 7b 20 72 65 74 75 72 6e 20 5b 44     1 { return [D
264a0 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 63 6f 6c  isplayHints ?col
264b0 75 6d 6e 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20  umn?] }.        
264c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264d0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
264e0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
264f0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 63              rowc
26500 6f 6e 66 69 67 75 72 65 20 20 20 20 2d 0a 20 20  onfigure    -.  
26510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26520 20 20 63 6f 6c 75 6d 6e 63 6f 6e 66 69 67 75 72    columnconfigur
26530 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e {.            
26540 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74              swit
26550 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20  ch -- $pos {.   
26560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26570 20 20 20 20 20 20 20 20 20 33 20 20 20 20 20 20           3      
26580 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
26590 61 79 48 69 6e 74 73 20 3c 69 6e 64 65 78 3e 5d  ayHints <index>]
265a0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
265b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
265c0 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20  efault {.       
265d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265e0 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20           switch 
265f0 2d 2d 20 24 70 72 65 76 20 7b 0a 20 20 20 20 20  -- $prev {.     
26600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
26620 6d 69 6e 73 69 7a 65 20 7b 20 72 65 74 75 72 6e  minsize { return
26630 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
26640 6d 69 6e 73 69 7a 65 3e 5d 20 7d 0a 20 20 20 20  minsize>] }.    
26650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26670 2d 77 65 69 67 68 74 20 20 7b 20 72 65 74 75 72  -weight  { retur
26680 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
26690 3c 77 65 69 67 68 74 3e 5d 20 7d 0a 20 20 20 20  <weight>] }.    
266a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266c0 2d 70 61 64 20 20 20 20 20 7b 20 72 65 74 75 72  -pad     { retur
266d0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
266e0 3c 70 61 64 3e 5d 20 7d 0a 20 20 20 20 20 20 20  <pad>] }.       
266f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26700 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66               def
26710 61 75 6c 74 20 20 7b 0a 20 20 20 20 20 20 20 20  ault  {.        
26720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26740 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
26750 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5c  FromList $text \
26760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26790 20 20 20 20 20 5b 52 65 6d 6f 76 65 55 73 65 64       [RemoveUsed
267a0 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20 5c 0a  Options $line \.
267b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267e0 20 20 20 20 20 20 20 20 20 7b 2d 6d 69 6e 73 69           {-minsi
267f0 7a 65 20 2d 77 65 69 67 68 74 20 2d 70 61 64 7d  ze -weight -pad}
26800 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]].             
26810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26820 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
26830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26840 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
26850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26860 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
26870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26880 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
26890 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
268a0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
268b0 66 69 67 75 72 65 20 20 20 20 20 20 20 7b 20 72  figure       { r
268c0 65 74 75 72 6e 20 5b 47 72 69 64 43 6f 6e 66 69  eturn [GridConfi
268d0 67 20 24 74 65 78 74 20 24 73 74 61 72 74 20 24  g $text $start $
268e0 6c 69 6e 65 20 24 70 72 65 76 5d 20 7d 0a 20 20  line $prev] }.  
268f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26900 20 20 66 6f 72 67 65 74 20 20 20 20 20 20 20 20    forget        
26910 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20    -.            
26920 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 20 20          remove  
26930 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e          { return
26940 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
26950 73 74 20 24 74 65 78 74 20 5b 57 69 64 67 65 74  st $text [Widget
26960 43 68 69 6c 64 72 65 6e 20 24 74 65 78 74 5d 5d  Children $text]]
26970 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
26980 20 20 20 20 20 20 20 69 6e 66 6f 20 20 20 20 20         info     
26990 20 20 20 20 20 20 20 7b 7d 0a 20 20 20 20 20 20         {}.      
269a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
269b0 63 61 74 69 6f 6e 20 20 20 20 20 20 20 20 7b 0a  cation        {.
269c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269d0 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d          switch -
269e0 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20  - $pos {.       
269f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a00 20 20 20 20 20 33 20 7b 20 72 65 74 75 72 6e 20       3 { return 
26a10 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 78  [DisplayHints <x
26a20 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  >] }.           
26a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a40 20 34 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73   4 { return [Dis
26a50 70 6c 61 79 48 69 6e 74 73 20 3c 79 3e 5d 20 7d  playHints <y>] }
26a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26a70 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
26a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26aa0 20 20 20 20 20 70 72 6f 70 61 67 61 74 65 20 20       propagate  
26ab0 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
26ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
26ad0 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
26ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26af0 20 20 20 20 20 20 20 20 20 20 20 20 33 20 7b 20              3 { 
26b00 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
26b10 42 6f 6f 6c 65 61 6e 20 24 74 65 78 74 5d 20 7d  Boolean $text] }
26b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26b30 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
26b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26b60 20 20 20 20 20 73 69 7a 65 20 20 20 20 20 20 20       size       
26b70 20 20 20 20 20 7b 7d 0a 20 20 20 20 20 20 20 20       {}.        
26b80 20 20 20 20 20 20 20 20 20 20 20 20 73 6c 61 76              slav
26b90 65 73 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20  es          {.  
26ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bb0 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
26bc0 24 70 72 65 76 20 7b 0a 20 20 20 20 20 20 20 20  $prev {.        
26bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26be0 20 20 20 20 2d 72 6f 77 20 20 20 20 7b 20 72 65      -row    { re
26bf0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
26c00 74 73 20 3c 72 6f 77 3e 5d 20 7d 0a 20 20 20 20  ts <row>] }.    
26c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c20 20 20 20 20 20 20 20 20 2d 63 6f 6c 75 6d 6e 20          -column 
26c30 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
26c40 79 48 69 6e 74 73 20 3c 63 6f 6c 75 6d 6e 3e 5d  yHints <column>]
26c50 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
26c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
26c70 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20  efault {.       
26c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c90 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
26ca0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
26cb0 74 20 24 74 65 78 74 20 5c 0a 20 20 20 20 20 20  t $text \.      
26cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ce0 20 20 20 20 20 20 5b 52 65 6d 6f 76 65 55 73 65        [RemoveUse
26cf0 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20 7b  dOptions $line {
26d00 2d 72 6f 77 20 2d 63 6f 6c 75 6d 6e 7d 5d 5d 0a  -row -column}]].
26d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
26d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d40 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
26d50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
26d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d70 20 20 64 65 66 61 75 6c 74 20 20 20 20 20 20 20    default       
26d80 20 20 7b 20 72 65 74 75 72 6e 20 5b 47 72 69 64    { return [Grid
26d90 43 6f 6e 66 69 67 20 24 74 65 78 74 20 24 73 74  Config $text $st
26da0 61 72 74 20 24 6c 69 6e 65 20 24 70 72 65 76 5d  art $line $prev]
26db0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
26dc0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
26dd0 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
26de0 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20       return "". 
26df0 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63     }..    proc c
26e00 6f 6d 70 6c 65 74 65 28 69 6d 61 67 65 29 20 7b  omplete(image) {
26e10 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
26e20 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20  ine pos mod} {. 
26e30 20 20 20 73 65 74 20 73 75 62 20 5b 4c 69 6e 64     set sub [Lind
26e40 65 78 20 24 6c 69 6e 65 20 31 5d 0a 20 20 20 20  ex $line 1].    
26e50 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70      switch -- $p
26e60 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  os {.           
26e70 20 31 20 7b 20 72 65 74 75 72 6e 20 5b 54 72 79   1 { return [Try
26e80 53 75 62 43 6d 64 73 20 24 74 65 78 74 20 69 6d  SubCmds $text im
26e90 61 67 65 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  age] }.         
26ea0 20 20 20 32 20 7b 0a 20 20 20 20 20 20 20 20 20     2 {.         
26eb0 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
26ec0 20 24 73 75 62 20 7b 0a 20 20 20 20 20 20 20 20   $sub {.        
26ed0 20 20 20 20 20 20 20 20 20 20 20 20 63 72 65 61              crea
26ee0 74 65 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d  te { return [Com
26ef0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74  pleteFromList $t
26f00 65 78 74 20 5b 69 6d 61 67 65 20 74 79 70 65 73  ext [image types
26f10 5d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  ]] }.           
26f20 20 20 20 20 20 20 20 20 20 64 65 6c 65 74 65 20           delete 
26f30 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  -.              
26f40 20 20 20 20 20 20 68 65 69 67 68 74 20 2d 0a 20        height -. 
26f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f60 20 20 20 74 79 70 65 20 20 20 2d 0a 20 20 20 20     type   -.    
26f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f80 77 69 64 74 68 20 20 7b 20 72 65 74 75 72 6e 20  width  { return 
26f90 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
26fa0 74 20 24 74 65 78 74 20 5b 69 6d 61 67 65 20 6e  t $text [image n
26fb0 61 6d 65 73 5d 5d 20 7d 0a 20 20 20 20 20 20 20  ames]] }.       
26fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d               nam
26fd0 65 73 20 20 7b 7d 0a 20 20 20 20 20 20 20 20 20  es  {}.         
26fe0 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 73             types
26ff0 20 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20    {}.           
27000 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
27010 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
27020 20 33 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20   3 {.           
27030 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24       switch -- $
27040 73 75 62 20 7b 0a 20 20 20 20 20 20 20 20 20 20  sub {.          
27050 20 20 20 20 20 20 20 20 20 20 63 72 65 61 74 65            create
27060 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
27070 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
27080 74 79 70 65 20 5b 4c 69 6e 64 65 78 20 24 6c 69  type [Lindex $li
27090 6e 65 20 32 5d 0a 20 20 20 20 20 20 20 20 20 20  ne 2].          
270a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77                sw
270b0 69 74 63 68 20 2d 2d 20 24 74 79 70 65 20 7b 0a  itch -- $type {.
270c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270d0 20 20 20 20 20 20 20 20 20 20 20 20 62 69 74 6d              bitm
270e0 61 70 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ap  {.          
270f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27100 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f        return [Co
27110 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
27120 74 65 78 74 20 5c 0a 20 20 20 20 20 20 20 20 20  text \.         
27130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27150 20 20 20 7b 3f 6e 61 6d 65 3f 20 2d 62 61 63 6b     {?name? -back
27160 67 72 6f 75 6e 64 20 2d 64 61 74 61 20 2d 66 69  ground -data -fi
27170 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  le.             
27180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271a0 2d 66 6f 72 65 67 72 6f 75 6e 64 20 2d 6d 61 73  -foreground -mas
271b0 6b 64 61 74 61 20 2d 6d 61 73 6b 66 69 6c 65 7d  kdata -maskfile}
271c0 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
271d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
271e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271f0 20 20 20 20 20 20 20 20 20 20 20 20 70 68 6f 74              phot
27200 6f 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20  o   {.          
27210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27220 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f        return [Co
27230 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
27240 74 65 78 74 20 5c 0a 20 20 20 20 20 20 20 20 20  text \.         
27250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27270 20 20 20 7b 3f 6e 61 6d 65 3f 20 2d 64 61 74 61     {?name? -data
27280 20 2d 66 6f 72 6d 61 74 20 2d 66 69 6c 65 20 2d   -format -file -
27290 67 61 6d 6d 61 0a 20 20 20 20 20 20 20 20 20 20  gamma.          
272a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272c0 20 20 20 2d 68 65 69 67 68 74 20 2d 70 61 6c 65     -height -pale
272d0 74 74 65 20 2d 77 69 64 74 68 7d 5d 0a 20 20 20  tte -width}].   
272e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272f0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
27300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27310 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b         default {
27320 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
27330 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
27340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27350 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
27360 20 20 20 20 20 20 64 65 6c 65 74 65 20 20 7b 20        delete  { 
27370 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
27380 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b  FromList $text [
27390 69 6d 61 67 65 20 6e 61 6d 65 73 5d 5d 20 7d 0a  image names]] }.
273a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273b0 20 20 20 20 64 65 66 61 75 6c 74 20 7b 7d 0a 20      default {}. 
273c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
273d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
273e0 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75             defau
273f0 6c 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lt {.           
27400 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24       switch -- $
27410 73 75 62 20 7b 0a 20 20 20 20 20 20 20 20 20 20  sub {.          
27420 20 20 20 20 20 20 20 20 20 20 63 72 65 61 74 65            create
27430 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
27440 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
27450 74 79 70 65 20 5b 4c 69 6e 64 65 78 20 24 6c 69  type [Lindex $li
27460 6e 65 20 32 5d 0a 20 20 20 20 20 20 20 20 20 20  ne 2].          
27470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
27480 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73  t prev [Previous
27490 57 6f 72 64 20 24 73 74 61 72 74 20 24 6c 69 6e  Word $start $lin
274a0 65 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e].             
274b0 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63             switc
274c0 68 20 2d 2d 20 24 74 79 70 65 20 7b 0a 20 20 20  h -- $type {.   
274d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274e0 20 20 20 20 20 20 20 20 20 62 69 74 6d 61 70 20           bitmap 
274f0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
27500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27510 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65    switch -- $pre
27520 76 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v {.            
27530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27540 20 20 20 20 20 20 20 20 2d 62 61 63 6b 67 72 6f          -backgro
27550 75 6e 64 20 2d 0a 20 20 20 20 20 20 20 20 20 20  und -.          
27560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27570 20 20 20 20 20 20 20 20 20 20 2d 66 6f 72 65 67            -foreg
27580 72 6f 75 6e 64 20 7b 20 72 65 74 75 72 6e 20 5b  round { return [
27590 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 63 6f  DisplayHints <co
275a0 6c 6f 72 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20  lor>] }.        
275b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275c0 20 20 20 20 20 20 20 20 20 20 20 20 2d 64 61 74              -dat
275d0 61 20 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20  a       -.      
275e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 6d                -m
27600 61 73 6b 64 61 74 61 20 20 20 7b 20 72 65 74 75  askdata   { retu
27610 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
27620 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 20 20 20   <string>] }.   
27630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27650 20 2d 66 69 6c 65 20 20 20 20 20 20 20 2d 0a 20   -file       -. 
27660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27680 20 20 20 2d 6d 61 73 6b 66 69 6c 65 20 20 20 7b     -maskfile   {
27690 20 72 65 74 75 72 6e 20 22 22 20 7d 0a 20 20 20   return "" }.   
276a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276c0 20 64 65 66 61 75 6c 74 20 20 20 20 20 7b 0a 20   default     {. 
276d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43         return [C
27700 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
27710 24 74 65 78 74 20 5c 0a 20 20 20 20 20 20 20 20  $text \.        
27720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27740 20 20 20 20 20 20 20 20 20 20 20 20 5b 52 65 6d              [Rem
27750 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24  oveUsedOptions $
27760 6c 69 6e 65 20 5c 0a 20 20 20 20 20 20 20 20 20  line \.         
27770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277a0 7b 2d 62 61 63 6b 67 72 6f 75 6e 64 20 2d 64 61  {-background -da
277b0 74 61 20 2d 66 69 6c 65 0a 20 20 20 20 20 20 20  ta -file.       
277c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277f0 20 20 20 2d 66 6f 72 65 67 72 6f 75 6e 64 20 2d     -foreground -
27800 6d 61 73 6b 64 61 74 61 20 2d 6d 61 73 6b 66 69  maskdata -maskfi
27810 6c 65 7d 5d 5d 0a 20 20 20 20 20 20 20 20 20 20  le}]].          
27820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27830 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
27840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27850 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
27860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27870 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
27880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27890 20 20 20 20 20 20 20 20 70 68 6f 74 6f 20 20 7b          photo  {
278a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
278b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278c0 20 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65 76   switch -- $prev
278d0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
278e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278f0 20 20 20 20 20 20 20 2d 64 61 74 61 20 20 20 20         -data    
27900 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
27910 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d  yHints <string>]
27920 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
27930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27940 20 20 20 20 20 20 20 2d 66 69 6c 65 20 20 20 20         -file    
27950 7b 20 72 65 74 75 72 6e 20 22 22 20 7d 0a 20 20  { return "" }.  
27960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27980 20 20 2d 66 6f 72 6d 61 74 20 20 7b 20 72 65 74    -format  { ret
27990 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
279a0 73 20 3c 66 6f 72 6d 61 74 2d 6e 61 6d 65 3e 5d  s <format-name>]
279b0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
279c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279d0 20 20 20 20 20 20 20 2d 67 61 6d 6d 61 20 20 20         -gamma   
279e0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
279f0 79 48 69 6e 74 73 20 3c 76 61 6c 75 65 3e 5d 20  yHints <value>] 
27a00 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
27a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a20 20 20 20 20 20 20 2d 68 65 69 67 68 74 20 20 2d        -height  -
27a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a50 20 20 20 20 20 2d 77 69 64 74 68 20 20 20 7b 20       -width   { 
27a60 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
27a70 69 6e 74 73 20 3c 6e 75 6d 62 65 72 3e 5d 20 7d  ints <number>] }
27a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27aa0 20 20 20 20 20 2d 70 61 6c 65 74 74 65 20 7b 0a       -palette {.
27ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ad0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
27ae0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 70 61  DisplayHints <pa
27af0 6c 65 74 74 65 2d 73 70 65 63 3e 5d 0a 20 20 20  lette-spec>].   
27b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
27b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b40 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 20         default  
27b50 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
27b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b70 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
27b80 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
27b90 73 74 20 24 74 65 78 74 20 5c 0a 20 20 20 20 20  st $text \.     
27ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
27bd0 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e  RemoveUsedOption
27be0 73 20 24 6c 69 6e 65 20 5c 0a 20 20 20 20 20 20  s $line \.      
27bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c20 20 20 20 7b 2d 64 61 74 61 20 2d 66 6f 72 6d 61     {-data -forma
27c30 74 20 2d 66 69 6c 65 20 2d 67 61 6d 6d 61 0a 20  t -file -gamma. 
27c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c70 20 20 20 20 20 20 20 20 20 2d 68 65 69 67 68 74           -height
27c80 20 2d 70 61 6c 65 74 74 65 20 2d 77 69 64 74 68   -palette -width
27c90 7d 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  }]].            
27ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cb0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
27cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cd0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
27ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cf0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
27d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d10 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
27d20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
27d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
27d40 6c 65 74 65 20 20 7b 20 72 65 74 75 72 6e 20 5b  lete  { return [
27d50 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
27d60 20 24 74 65 78 74 20 5b 69 6d 61 67 65 20 6e 61   $text [image na
27d70 6d 65 73 5d 5d 20 7d 0a 20 20 20 20 20 20 20 20  mes]] }.        
27d80 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61              defa
27d90 75 6c 74 20 7b 7d 0a 20 20 20 20 20 20 20 20 20  ult {}.         
27da0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
27db0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
27dc0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63  .    }..    proc
27dd0 20 63 6f 6d 70 6c 65 74 65 28 6c 61 62 65 6c 29   complete(label)
27de0 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
27df0 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
27e00 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20  .        switch 
27e10 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20  -- $pos {.      
27e20 20 20 20 20 20 20 31 20 20 20 20 20 20 20 7b 20        1       { 
27e30 72 65 74 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c  return [Eventual
27e40 6c 79 49 6e 73 65 72 74 4c 65 61 64 69 6e 67 44  lyInsertLeadingD
27e50 6f 74 20 24 74 65 78 74 20 3c 70 61 74 68 4e 61  ot $text <pathNa
27e60 6d 65 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  me>] }.         
27e70 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20     default {.   
27e80 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
27e90 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 57 69 64  urn [CompleteWid
27ea0 67 65 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  getConfiguration
27eb0 73 20 24 74 65 78 74 20 24 73 74 61 72 74 20 24  s $text $start $
27ec0 6c 69 6e 65 20 5c 0a 20 20 20 20 20 20 20 20 20  line \.         
27ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ee0 20 20 20 7b 2d 61 6e 63 68 6f 72 20 2d 62 61 63     {-anchor -bac
27ef0 6b 67 72 6f 75 6e 64 20 2d 62 69 74 6d 61 70 20  kground -bitmap 
27f00 2d 62 6f 72 64 65 72 77 69 64 74 68 20 2d 63 75  -borderwidth -cu
27f10 72 73 6f 72 20 2d 66 6f 6e 74 0a 20 20 20 20 20  rsor -font.     
27f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f30 20 20 20 20 20 20 20 20 2d 66 6f 72 65 67 72 6f          -foregro
27f40 75 6e 64 20 2d 68 69 67 68 6c 69 67 68 74 62 61  und -highlightba
27f50 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69  ckground -highli
27f60 67 68 74 63 6f 6c 6f 72 0a 20 20 20 20 20 20 20  ghtcolor.       
27f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f80 20 20 20 20 20 20 2d 68 69 67 68 6c 69 67 68 74        -highlight
27f90 74 68 69 63 6b 6e 65 73 73 20 2d 69 6d 61 67 65  thickness -image
27fa0 20 2d 6a 75 73 74 69 66 79 20 2d 70 61 64 78 20   -justify -padx 
27fb0 2d 70 61 64 79 20 2d 72 65 6c 69 65 66 0a 20 20  -pady -relief.  
27fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27fd0 20 20 20 20 20 20 20 20 20 20 20 2d 74 61 6b 65             -take
27fe0 66 6f 63 75 73 20 2d 74 65 78 74 20 2d 74 65 78  focus -text -tex
27ff0 74 76 61 72 69 61 62 6c 65 20 2d 75 6e 64 65 72  tvariable -under
28000 6c 69 6e 65 20 2d 77 72 61 70 6c 65 6e 67 74 68  line -wraplength
28010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 68                -h
28030 65 69 67 68 74 20 2d 77 69 64 74 68 7d 5d 0a 20  eight -width}]. 
28040 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
28050 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72       }.        r
28060 65 74 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a  eturn "".    }..
28070 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74      proc complet
28080 65 28 6c 69 73 74 62 6f 78 29 20 7b 74 65 78 74  e(listbox) {text
28090 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
280a0 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20  pos mod} {.     
280b0 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f     switch -- $po
280c0 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s {.            
280d0 31 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e  1       { return
280e0 20 5b 45 76 65 6e 74 75 61 6c 6c 79 49 6e 73 65   [EventuallyInse
280f0 72 74 4c 65 61 64 69 6e 67 44 6f 74 20 24 74 65  rtLeadingDot $te
28100 78 74 20 3c 70 61 74 68 4e 61 6d 65 3e 5d 20 7d  xt <pathName>] }
28110 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66  .            def
28120 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 20 20  ault {.         
28130 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43         return [C
28140 6f 6d 70 6c 65 74 65 57 69 64 67 65 74 43 6f 6e  ompleteWidgetCon
28150 66 69 67 75 72 61 74 69 6f 6e 73 20 24 74 65 78  figurations $tex
28160 74 20 24 73 74 61 72 74 20 24 6c 69 6e 65 20 5c  t $start $line \
28170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28180 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 2d 62               {-b
28190 61 63 6b 67 72 6f 75 6e 64 20 2d 62 6f 72 64 65  ackground -borde
281a0 72 77 69 64 74 68 20 2d 63 75 72 73 6f 72 20 2d  rwidth -cursor -
281b0 65 78 70 6f 72 74 73 65 6c 65 63 74 69 6f 6e 20  exportselection 
281c0 2d 66 6f 6e 74 0a 20 20 20 20 20 20 20 20 20 20  -font.          
281d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281e0 20 20 20 2d 66 6f 72 65 67 72 6f 75 6e 64 20 2d     -foreground -
281f0 68 65 69 67 68 74 20 2d 68 69 67 68 6c 69 67 68  height -highligh
28200 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67  tbackground -hig
28210 68 6c 69 67 68 74 63 6f 6c 6f 72 0a 20 20 20 20  hlightcolor.    
28220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28230 20 20 20 20 20 20 20 20 20 2d 68 69 67 68 6c 69           -highli
28240 67 68 74 74 68 69 63 6b 6e 65 73 73 20 2d 72 65  ghtthickness -re
28250 6c 69 65 66 20 2d 73 65 6c 65 63 74 62 61 63 6b  lief -selectback
28260 67 72 6f 75 6e 64 0a 20 20 20 20 20 20 20 20 20  ground.         
28270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28280 20 20 20 20 2d 73 65 6c 65 63 74 62 6f 72 64 65      -selectborde
28290 72 77 69 64 74 68 20 2d 73 65 6c 65 63 74 66 6f  rwidth -selectfo
282a0 72 65 67 72 6f 75 6e 64 20 2d 73 65 74 67 72 69  reground -setgri
282b0 64 20 2d 74 61 6b 65 66 6f 63 75 73 0a 20 20 20  d -takefocus.   
282c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
282d0 20 20 20 20 20 20 20 20 20 20 2d 77 69 64 74 68            -width
282e0 20 2d 78 73 63 72 6f 6c 6c 63 6f 6d 6d 61 6e 64   -xscrollcommand
282f0 20 2d 79 73 63 72 6f 6c 6c 63 6f 6d 6d 61 6e 64   -yscrollcommand
28300 20 2d 68 65 69 67 68 74 20 2d 73 65 6c 65 63 74   -height -select
28310 6d 6f 64 65 0a 20 20 20 20 20 20 20 20 20 20 20  mode.           
28320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28330 20 20 2d 77 69 64 74 68 7d 5d 0a 20 20 20 20 20    -width}].     
28340 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
28350 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   }.        retur
28360 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20  n "".    }..    
28370 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6c 6f  proc complete(lo
28380 77 65 72 29 20 7b 74 65 78 74 20 73 74 61 72 74  wer) {text start
28390 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
283a0 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 77 69  d} {.        swi
283b0 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20  tch -- $pos {.  
283c0 20 20 20 20 20 20 20 20 20 20 31 20 2d 0a 20 20            1 -.  
283d0 20 20 20 20 20 20 20 20 20 20 32 20 7b 20 72 65            2 { re
283e0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
283f0 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b 57 69  omList $text [Wi
28400 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 74 65  dgetChildren $te
28410 78 74 5d 5d 20 7d 0a 20 20 20 20 20 20 20 20 7d  xt]] }.        }
28420 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63  .    }..    proc
28430 20 63 6f 6d 70 6c 65 74 65 28 6d 65 6e 75 29 20   complete(menu) 
28440 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
28450 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
28460 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d          switch -
28470 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20  - $pos {.       
28480 20 20 20 20 20 31 20 20 20 20 20 20 20 7b 20 72       1       { r
28490 65 74 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c 6c  eturn [Eventuall
284a0 79 49 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f  yInsertLeadingDo
284b0 74 20 24 74 65 78 74 20 3c 70 61 74 68 4e 61 6d  t $text <pathNam
284c0 65 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  e>] }.          
284d0 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20    default {.    
284e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
284f0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 57 69 64 67  rn [CompleteWidg
28500 65 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  etConfigurations
28510 20 24 74 65 78 74 20 24 73 74 61 72 74 20 24 6c   $text $start $l
28520 69 6e 65 20 5c 0a 20 20 20 20 20 20 20 20 20 20  ine \.          
28530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28540 20 20 7b 2d 61 63 74 69 76 65 62 61 63 6b 67 72    {-activebackgr
28550 6f 75 6e 64 20 2d 61 63 74 69 76 65 62 6f 72 64  ound -activebord
28560 65 72 77 69 64 74 68 20 2d 61 63 74 69 76 65 66  erwidth -activef
28570 6f 72 65 67 72 6f 75 6e 64 0a 20 20 20 20 20 20  oreground.      
28580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28590 20 20 20 20 20 20 20 2d 62 61 63 6b 67 72 6f 75         -backgrou
285a0 6e 64 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20  nd -borderwidth 
285b0 2d 63 75 72 73 6f 72 20 2d 64 69 73 61 62 6c 65  -cursor -disable
285c0 64 66 6f 72 65 67 72 6f 75 6e 64 0a 20 20 20 20  dforeground.    
285d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285e0 20 20 20 20 20 20 20 20 20 2d 66 6f 6e 74 20 2d           -font -
285f0 66 6f 72 65 67 72 6f 75 6e 64 20 2d 72 65 6c 69  foreground -reli
28600 65 66 20 2d 74 61 6b 65 66 6f 63 75 73 20 2d 70  ef -takefocus -p
28610 6f 73 74 63 6f 6d 6d 61 6e 64 0a 20 20 20 20 20  ostcommand.     
28620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28630 20 20 20 20 20 20 20 20 2d 73 65 6c 65 63 74 63          -selectc
28640 6f 6c 6f 72 20 2d 74 65 61 72 6f 66 66 20 2d 74  olor -tearoff -t
28650 65 61 72 6f 66 66 63 6f 6d 6d 61 6e 64 20 2d 74  earoffcommand -t
28660 69 74 6c 65 20 2d 74 79 70 65 7d 5d 0a 20 20 20  itle -type}].   
28670 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
28680 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74     }.        ret
28690 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20  urn "".    }..  
286a0 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28    proc complete(
286b0 6d 65 6e 75 62 75 74 74 6f 6e 29 20 7b 74 65 78  menubutton) {tex
286c0 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
286d0 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20   pos mod} {.    
286e0 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70      switch -- $p
286f0 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  os {.           
28700 20 31 20 20 20 20 20 20 20 7b 20 72 65 74 75 72   1       { retur
28710 6e 20 5b 45 76 65 6e 74 75 61 6c 6c 79 49 6e 73  n [EventuallyIns
28720 65 72 74 4c 65 61 64 69 6e 67 44 6f 74 20 24 74  ertLeadingDot $t
28730 65 78 74 20 3c 70 61 74 68 4e 61 6d 65 3e 5d 20  ext <pathName>] 
28740 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65  }.            de
28750 66 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 20  fault {.        
28760 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
28770 43 6f 6d 70 6c 65 74 65 57 69 64 67 65 74 43 6f  CompleteWidgetCo
28780 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 24 74 65  nfigurations $te
28790 78 74 20 24 73 74 61 72 74 20 24 6c 69 6e 65 20  xt $start $line 
287a0 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  \.              
287b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 2d                {-
287c0 61 63 74 69 76 65 62 61 63 6b 67 72 6f 75 6e 64  activebackground
287d0 20 2d 61 63 74 69 76 65 66 6f 72 65 67 72 6f 75   -activeforegrou
287e0 6e 64 20 2d 61 6e 63 68 6f 72 20 2d 62 61 63 6b  nd -anchor -back
287f0 67 72 6f 75 6e 64 0a 20 20 20 20 20 20 20 20 20  ground.         
28800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28810 20 20 20 20 2d 62 69 74 6d 61 70 20 2d 62 6f 72      -bitmap -bor
28820 64 65 72 77 69 64 74 68 20 2d 63 75 72 73 6f 72  derwidth -cursor
28830 20 2d 64 69 73 61 62 6c 65 64 66 6f 72 65 67 72   -disabledforegr
28840 6f 75 6e 64 20 2d 66 6f 6e 74 0a 20 20 20 20 20  ound -font.     
28850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28860 20 20 20 20 20 20 20 20 2d 66 6f 72 65 67 72 6f          -foregro
28870 75 6e 64 20 2d 68 69 67 68 6c 69 67 68 74 62 61  und -highlightba
28880 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69  ckground -highli
28890 67 68 74 63 6f 6c 6f 72 0a 20 20 20 20 20 20 20  ghtcolor.       
288a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288b0 20 20 20 20 20 20 2d 68 69 67 68 6c 69 67 68 74        -highlight
288c0 74 68 69 63 6b 6e 65 73 73 20 2d 69 6d 61 67 65  thickness -image
288d0 20 2d 6a 75 73 74 69 66 79 20 2d 70 61 64 78 20   -justify -padx 
288e0 2d 70 61 64 79 20 2d 72 65 6c 69 65 66 0a 20 20  -pady -relief.  
288f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28900 20 20 20 20 20 20 20 20 20 20 20 2d 74 61 6b 65             -take
28910 66 6f 63 75 73 20 2d 74 65 78 74 20 2d 74 65 78  focus -text -tex
28920 74 76 61 72 69 61 62 6c 65 20 2d 75 6e 64 65 72  tvariable -under
28930 6c 69 6e 65 20 2d 77 72 61 70 6c 65 6e 67 74 68  line -wraplength
28940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 64                -d
28960 69 72 65 63 74 69 6f 6e 20 2d 68 65 69 67 68 74  irection -height
28970 20 2d 69 6e 64 69 63 61 74 6f 72 6f 6e 20 2d 6d   -indicatoron -m
28980 65 6e 75 20 2d 73 74 61 74 65 20 2d 77 69 64 74  enu -state -widt
28990 68 7d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h}].            
289a0 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
289b0 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20      return "".  
289c0 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f    }..    proc co
289d0 6d 70 6c 65 74 65 28 6d 65 73 73 61 67 65 29 20  mplete(message) 
289e0 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
289f0 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
28a00 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d          switch -
28a10 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20  - $pos {.       
28a20 20 20 20 20 20 31 20 20 20 20 20 20 20 7b 20 72       1       { r
28a30 65 74 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c 6c  eturn [Eventuall
28a40 79 49 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f  yInsertLeadingDo
28a50 74 20 24 74 65 78 74 20 3c 70 61 74 68 4e 61 6d  t $text <pathNam
28a60 65 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  e>] }.          
28a70 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20    default {.    
28a80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
28a90 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 57 69 64 67  rn [CompleteWidg
28aa0 65 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  etConfigurations
28ab0 20 24 74 65 78 74 20 24 73 74 61 72 74 20 24 6c   $text $start $l
28ac0 69 6e 65 20 5c 0a 20 20 20 20 20 20 20 20 20 20  ine \.          
28ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ae0 20 20 7b 2d 61 6e 63 68 6f 72 20 2d 62 61 63 6b    {-anchor -back
28af0 67 72 6f 75 6e 64 20 2d 62 6f 72 64 65 72 77 69  ground -borderwi
28b00 64 74 68 20 2d 63 75 72 73 6f 72 20 2d 66 6f 6e  dth -cursor -fon
28b10 74 20 2d 66 6f 72 65 67 72 6f 75 6e 64 0a 20 20  t -foreground.  
28b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b30 20 20 20 20 20 20 20 20 20 20 20 2d 68 69 67 68             -high
28b40 6c 69 67 68 74 62 61 63 6b 67 72 6f 75 6e 64 20  lightbackground 
28b50 2d 68 69 67 68 6c 69 67 68 74 63 6f 6c 6f 72 20  -highlightcolor 
28b60 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b 6e  -highlightthickn
28b70 65 73 73 0a 20 20 20 20 20 20 20 20 20 20 20 20  ess.            
28b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b90 20 2d 70 61 64 78 20 2d 70 61 64 79 20 2d 72 65   -padx -pady -re
28ba0 6c 69 65 66 20 2d 74 61 6b 65 66 6f 63 75 73 20  lief -takefocus 
28bb0 2d 74 65 78 74 20 2d 74 65 78 74 76 61 72 69 61  -text -textvaria
28bc0 62 6c 65 20 2d 77 69 64 74 68 0a 20 20 20 20 20  ble -width.     
28bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28be0 20 20 20 20 20 20 20 20 2d 61 73 70 65 63 74 20          -aspect 
28bf0 2d 6a 75 73 74 69 66 79 20 2d 77 69 64 74 68 7d  -justify -width}
28c00 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ].            }.
28c10 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
28c20 20 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20 20    return "".    
28c30 7d 0a 0a 20 20 20 20 70 72 6f 63 20 4f 70 74 69  }..    proc Opti
28c40 6f 6e 50 72 69 6f 72 69 74 79 20 74 65 78 74 20  onPriority text 
28c50 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  {.        return
28c60 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
28c70 73 74 20 24 74 65 78 74 20 7b 77 69 64 67 65 74  st $text {widget
28c80 44 65 66 61 75 6c 74 20 73 74 61 72 74 75 70 46  Default startupF
28c90 69 6c 65 20 75 73 65 72 44 65 66 61 75 6c 74 20  ile userDefault 
28ca0 69 6e 74 65 72 61 63 74 69 76 65 7d 5d 0a 20 20  interactive}].  
28cb0 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f    }..    proc co
28cc0 6d 70 6c 65 74 65 28 6f 70 74 69 6f 6e 29 20 7b  mplete(option) {
28cd0 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
28ce0 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20  ine pos mod} {. 
28cf0 20 20 20 20 20 20 20 73 65 74 20 73 75 62 20 5b         set sub [
28d00 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a  Lindex $line 1].
28d10 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d          switch -
28d20 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20  - $pos {.       
28d30 20 20 20 20 20 31 20 7b 20 72 65 74 75 72 6e 20       1 { return 
28d40 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
28d50 74 20 24 74 65 78 74 20 7b 61 64 64 20 63 6c 65  t $text {add cle
28d60 61 72 20 67 65 74 20 72 65 61 64 66 69 6c 65 7d  ar get readfile}
28d70 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
28d80 32 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  2 {.            
28d90 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 73      switch -- $s
28da0 75 62 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ub {.           
28db0 20 20 20 20 20 20 20 20 20 61 64 64 20 20 20 20           add    
28dc0 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70    { return [Disp
28dd0 6c 61 79 48 69 6e 74 73 20 3c 70 61 74 74 65 72  layHints <patter
28de0 6e 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  n>] }.          
28df0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 20 20            get   
28e00 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d     { return [Com
28e10 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74  pleteFromList $t
28e20 65 78 74 20 5b 57 69 64 67 65 74 43 68 69 6c 64  ext [WidgetChild
28e30 72 65 6e 20 24 74 65 78 74 5d 5d 20 7d 0a 20 20  ren $text]] }.  
28e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e50 20 20 72 65 61 64 66 69 6c 65 20 7b 20 72 65 74    readfile { ret
28e60 75 72 6e 20 22 22 20 7d 0a 20 20 20 20 20 20 20  urn "" }.       
28e70 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
28e80 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
28e90 20 20 20 20 20 33 20 7b 0a 20 20 20 20 20 20 20       3 {.       
28ea0 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20           switch 
28eb0 2d 2d 20 24 73 75 62 20 7b 0a 20 20 20 20 20 20  -- $sub {.      
28ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64                ad
28ed0 64 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20  d      { return 
28ee0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 76  [DisplayHints <v
28ef0 61 6c 75 65 3e 5d 20 7d 0a 20 20 20 20 20 20 20  alue>] }.       
28f00 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
28f10 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b        { return [
28f20 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6e 61  DisplayHints <na
28f30 6d 65 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  me>] }.         
28f40 20 20 20 20 20 20 20 20 20 20 20 72 65 61 64 66             readf
28f50 69 6c 65 20 7b 20 72 65 74 75 72 6e 20 5b 4f 70  ile { return [Op
28f60 74 69 6f 6e 50 72 69 6f 72 69 74 79 20 24 74 65  tionPriority $te
28f70 78 74 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  xt] }.          
28f80 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
28f90 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
28fa0 20 20 34 20 7b 0a 20 20 20 20 20 20 20 20 20 20    4 {.          
28fb0 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
28fc0 24 73 75 62 20 7b 0a 20 20 20 20 20 20 20 20 20  $sub {.         
28fd0 20 20 20 20 20 20 20 20 20 20 20 61 64 64 20 20             add  
28fe0 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 4f 70      { return [Op
28ff0 74 69 6f 6e 50 72 69 6f 72 69 74 79 20 24 74 65  tionPriority $te
29000 78 74 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  xt] }.          
29010 20 20 20 20 20 20 20 20 20 20 67 65 74 20 20 20            get   
29020 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d     { return [Com
29030 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74  pleteFromList $t
29040 65 78 74 20 5b 43 6c 61 73 73 54 61 62 6c 65 20  ext [ClassTable 
29050 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 32 5d  [Lindex $line 2]
29060 5d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  ]] }.           
29070 20 20 20 20 20 20 20 20 20 72 65 61 64 66 69 6c           readfil
29080 65 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20  e {}.           
29090 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
290a0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
290b0 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 50     }..    proc P
290c0 61 63 6b 43 6f 6e 66 69 67 20 7b 74 65 78 74 20  ackConfig {text 
290d0 6c 69 6e 65 20 70 72 65 76 7d 20 7b 0a 20 20 20  line prev} {.   
290e0 20 20 20 20 20 73 65 74 20 6f 70 74 73 20 7b 0a       set opts {.
290f0 20 20 20 20 20 20 20 20 20 20 20 20 2d 61 66 74              -aft
29100 65 72 20 2d 61 6e 63 68 6f 72 20 2d 62 65 66 6f  er -anchor -befo
29110 72 65 20 2d 65 78 70 61 6e 64 20 2d 66 69 6c 6c  re -expand -fill
29120 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 69 6e  .            -in
29130 20 2d 69 70 61 64 78 20 2d 69 70 61 64 79 20 2d   -ipadx -ipady -
29140 70 61 64 78 20 2d 70 61 64 79 20 2d 73 69 64 65  padx -pady -side
29150 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
29160 20 20 20 69 66 20 7b 2d 31 20 3d 3d 20 5b 73 74     if {-1 == [st
29170 72 69 6e 67 20 66 69 72 73 74 20 22 2d 22 20 24  ring first "-" $
29180 6c 69 6e 65 5d 7d 20 7b 0a 20 20 20 20 20 20 20  line]} {.       
29190 20 20 20 20 20 73 65 74 20 73 6c 61 76 65 20 5b       set slave [
291a0 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
291b0 74 65 78 74 5d 0a 20 20 20 20 20 20 20 20 7d 20  text].        } 
291c0 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20  else {.         
291d0 20 20 20 73 65 74 20 73 6c 61 76 65 20 22 22 0a     set slave "".
291e0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
291f0 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65    switch -- $pre
29200 76 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v {.            
29210 2d 61 66 74 65 72 20 20 2d 0a 20 20 20 20 20 20  -after  -.      
29220 20 20 20 20 20 20 2d 62 65 66 6f 72 65 20 7b 20        -before { 
29230 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
29240 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b  FromList $text [
29250 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
29260 74 65 78 74 5d 5d 20 7d 0a 20 20 20 20 20 20 20  text]] }.       
29270 20 20 20 20 20 2d 61 6e 63 68 6f 72 20 7b 20 72       -anchor { r
29280 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 41  eturn [CompleteA
29290 6e 63 68 6f 72 20 24 74 65 78 74 5d 20 7d 0a 20  nchor $text] }. 
292a0 20 20 20 20 20 20 20 20 20 20 20 2d 65 78 70 61             -expa
292b0 6e 64 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d  nd { return [Com
292c0 70 6c 65 74 65 42 6f 6f 6c 65 61 6e 20 24 74 65  pleteBoolean $te
292d0 78 74 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  xt] }.          
292e0 20 20 2d 66 69 6c 6c 20 20 20 7b 20 72 65 74 75    -fill   { retu
292f0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
29300 4c 69 73 74 20 24 74 65 78 74 20 7b 20 6e 6f 6e  List $text { non
29310 65 20 78 20 79 20 62 6f 74 68 20 7d 5d 20 7d 0a  e x y both }] }.
29320 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 69 70  .            -ip
29330 61 64 78 20 2d 0a 20 20 20 20 20 20 20 20 20 20  adx -.          
29340 20 20 2d 69 70 61 64 79 20 2d 0a 20 20 20 20 20    -ipady -.     
29350 20 20 20 20 20 20 20 2d 70 61 64 78 20 20 2d 0a         -padx  -.
29360 20 20 20 20 20 20 20 20 20 20 20 20 2d 70 61 64              -pad
29370 79 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  y  { return [Dis
29380 70 6c 61 79 48 69 6e 74 73 20 3c 61 6d 6f 75 6e  playHints <amoun
29390 74 3e 5d 20 7d 0a 0a 20 20 20 20 20 20 20 20 20  t>] }..         
293a0 20 20 20 2d 69 6e 20 20 20 7b 20 72 65 74 75 72     -in   { retur
293b0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
293c0 69 73 74 20 24 74 65 78 74 20 5b 57 69 64 67 65  ist $text [Widge
293d0 74 43 68 69 6c 64 72 65 6e 20 24 74 65 78 74 5d  tChildren $text]
293e0 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
293f0 2d 73 69 64 65 20 7b 20 72 65 74 75 72 6e 20 5b  -side { return [
29400 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
29410 20 24 74 65 78 74 20 7b 20 6c 65 66 74 20 72 69   $text { left ri
29420 67 68 74 20 74 6f 70 20 62 6f 74 74 6f 6d 20 7d  ght top bottom }
29430 5d 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20  ] }..           
29440 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20   default {.     
29450 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
29460 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
29470 69 73 74 20 24 74 65 78 74 20 5c 0a 20 20 20 20  ist $text \.    
29480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29490 20 20 20 20 20 20 20 20 5b 52 65 6d 6f 76 65 55          [RemoveU
294a0 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65  sedOptions $line
294b0 20 5b 63 6f 6e 63 61 74 20 24 6f 70 74 73 20 24   [concat $opts $
294c0 73 6c 61 76 65 5d 5d 5d 0a 20 20 20 20 20 20 20  slave]]].       
294d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
294e0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63  .    }..    proc
294f0 20 63 6f 6d 70 6c 65 74 65 28 70 61 63 6b 29 20   complete(pack) 
29500 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
29510 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
29520 20 20 20 20 20 20 20 20 73 65 74 20 73 75 62 20          set sub 
29530 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d  [Lindex $line 1]
29540 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 72 65  .        set pre
29550 76 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20  v [PreviousWord 
29560 24 73 74 61 72 74 20 24 6c 69 6e 65 5d 0a 20 20  $start $line].  
29570 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
29580 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20  $pos {.         
29590 20 20 20 31 20 7b 0a 20 20 20 20 20 20 20 20 20     1 {.         
295a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43         return [C
295b0 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
295c0 24 74 65 78 74 20 5c 0a 20 20 20 20 20 20 20 20  $text \.        
295d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295e0 20 20 20 20 5b 63 6f 6e 63 61 74 20 5b 57 69 64      [concat [Wid
295f0 67 65 74 43 68 69 6c 64 72 65 6e 20 24 74 65 78  getChildren $tex
29600 74 5d 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20  t] \.           
29610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29620 20 20 20 20 20 20 7b 63 6f 6e 66 69 67 75 72 65        {configure
29630 20 66 6f 72 67 65 74 20 69 6e 66 6f 20 70 72 6f   forget info pro
29640 70 61 67 61 74 65 20 73 6c 61 76 65 73 7d 5d 5d  pagate slaves}]]
29650 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
29660 20 20 20 20 20 20 20 20 20 20 20 32 20 7b 0a 20             2 {. 
29670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
29680 77 69 74 63 68 20 2d 2d 20 24 73 75 62 20 7b 0a  witch -- $sub {.
29690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296a0 20 20 20 20 63 6f 6e 66 69 67 75 72 65 20 2d 0a      configure -.
296b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296c0 20 20 20 20 66 6f 72 67 65 74 20 20 20 20 2d 0a      forget    -.
296d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296e0 20 20 20 20 69 6e 66 6f 20 20 20 20 20 20 2d 0a      info      -.
296f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29700 20 20 20 20 70 72 6f 70 61 67 61 74 65 20 2d 0a      propagate -.
29710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29720 20 20 20 20 73 6c 61 76 65 73 20 20 20 20 7b 20      slaves    { 
29730 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
29740 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b  FromList $text [
29750 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
29760 74 65 78 74 5d 5d 20 7d 0a 20 20 20 20 20 20 20  text]] }.       
29770 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66               def
29780 61 75 6c 74 20 20 20 7b 20 72 65 74 75 72 6e 20  ault   { return 
29790 5b 50 61 63 6b 43 6f 6e 66 69 67 20 24 74 65 78  [PackConfig $tex
297a0 74 20 24 6c 69 6e 65 20 24 70 72 65 76 5d 20 7d  t $line $prev] }
297b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
297c0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d   }.            }
297d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66  .            def
297e0 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 20 20  ault {.         
297f0 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
29800 20 24 73 75 62 20 7b 0a 20 20 20 20 20 20 20 20   $sub {.        
29810 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
29820 69 67 75 72 65 20 7b 20 72 65 74 75 72 6e 20 5b  igure { return [
29830 50 61 63 6b 43 6f 6e 66 69 67 20 24 74 65 78 74  PackConfig $text
29840 20 24 6c 69 6e 65 20 24 70 72 65 76 5d 20 7d 0a   $line $prev] }.
29850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29860 20 20 20 20 66 6f 72 67 65 74 20 20 20 20 7b 20      forget    { 
29870 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
29880 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b  FromList $text [
29890 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
298a0 74 65 78 74 5d 5d 20 7d 0a 20 20 20 20 20 20 20  text]] }.       
298b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 66               inf
298c0 6f 20 20 20 20 20 20 7b 7d 0a 20 20 20 20 20 20  o      {}.      
298d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
298e0 6f 70 61 67 61 74 65 20 7b 0a 20 20 20 20 20 20  opagate {.      
298f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29900 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73    switch -- $pos
29910 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
29920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33                 3
29930 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c   { return [Compl
29940 65 74 65 42 6f 6f 6c 65 61 6e 20 24 74 65 78 74  eteBoolean $text
29950 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
29960 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
29970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29980 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
29990 20 20 20 20 20 20 20 20 73 6c 61 76 65 73 20 20          slaves  
299a0 20 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20    {}.           
299b0 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74           default
299c0 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 50 61 63     { return [Pac
299d0 6b 43 6f 6e 66 69 67 20 24 74 65 78 74 20 24 6c  kConfig $text $l
299e0 69 6e 65 20 24 70 72 65 76 5d 20 7d 0a 20 20 20  ine $prev] }.   
299f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
29a00 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
29a10 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72       }.        r
29a20 65 74 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a  eturn "".    }..
29a30 20 20 20 20 70 72 6f 63 20 50 6c 61 63 65 43 6f      proc PlaceCo
29a40 6e 66 69 67 20 7b 74 65 78 74 20 6c 69 6e 65 20  nfig {text line 
29a50 70 72 65 76 7d 20 7b 0a 20 20 20 20 20 20 20 20  prev} {.        
29a60 73 65 74 20 6f 70 74 73 20 7b 0a 20 20 20 20 20  set opts {.     
29a70 20 20 20 20 20 20 20 2d 69 6e 20 2d 78 20 2d 72         -in -x -r
29a80 65 6c 78 20 2d 79 20 2d 72 65 6c 79 20 2d 61 6e  elx -y -rely -an
29a90 63 68 6f 72 20 2d 77 69 64 74 68 0a 20 20 20 20  chor -width.    
29aa0 20 20 20 20 20 20 20 20 2d 72 65 6c 77 69 64 74          -relwidt
29ab0 68 20 2d 68 65 69 67 68 74 20 2d 72 65 6c 68 65  h -height -relhe
29ac0 69 67 68 74 20 2d 62 6f 72 64 65 72 6d 6f 64 65  ight -bordermode
29ad0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
29ae0 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 72     switch -- $pr
29af0 65 76 20 7b 0a 0a 20 20 20 20 20 20 20 20 20 20  ev {..          
29b00 20 20 2d 69 6e 20 7b 20 72 65 74 75 72 6e 20 5b    -in { return [
29b10 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
29b20 20 24 74 65 78 74 20 5b 57 69 64 67 65 74 43 68   $text [WidgetCh
29b30 69 6c 64 72 65 6e 20 24 74 65 78 74 5d 5d 20 7d  ildren $text]] }
29b40 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 78  ..            -x
29b50 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20      -.          
29b60 20 20 2d 72 65 6c 78 20 2d 0a 20 20 20 20 20 20    -relx -.      
29b70 20 20 20 20 20 20 2d 79 20 20 20 20 2d 0a 20 20        -y    -.  
29b80 20 20 20 20 20 20 20 20 20 20 2d 72 65 6c 79 20            -rely 
29b90 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
29ba0 79 48 69 6e 74 73 20 3c 6c 6f 63 61 74 69 6f 6e  yHints <location
29bb0 3e 5d 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20  >] }..          
29bc0 20 20 2d 61 6e 63 68 6f 72 20 7b 20 72 65 74 75    -anchor { retu
29bd0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 41 6e 63 68  rn [CompleteAnch
29be0 6f 72 20 24 74 65 78 74 5d 20 7d 0a 0a 20 20 20  or $text] }..   
29bf0 20 20 20 20 20 20 20 20 20 2d 77 69 64 74 68 20           -width 
29c00 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20      -.          
29c10 20 20 2d 72 65 6c 77 69 64 74 68 20 20 2d 0a 20    -relwidth  -. 
29c20 20 20 20 20 20 20 20 20 20 20 20 2d 68 65 69 67             -heig
29c30 68 74 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20  ht    -.        
29c40 20 20 20 20 2d 72 65 6c 68 65 69 67 68 74 20 7b      -relheight {
29c50 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
29c60 48 69 6e 74 73 20 3c 73 69 7a 65 3e 5d 20 7d 0a  Hints <size>] }.
29c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 62 6f  .            -bo
29c80 72 64 65 72 6d 6f 64 65 20 7b 20 72 65 74 75 72  rdermode { retur
29c90 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
29ca0 69 73 74 20 24 74 65 78 74 20 7b 69 67 6e 6f 72  ist $text {ignor
29cb0 65 20 69 6e 73 69 64 65 20 6f 75 74 73 69 64 65  e inside outside
29cc0 7d 5d 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20  }] }..          
29cd0 20 20 64 65 66 61 75 6c 74 20 7b 20 72 65 74 75    default { retu
29ce0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
29cf0 4c 69 73 74 20 24 74 65 78 74 20 5b 52 65 6d 6f  List $text [Remo
29d00 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c  veUsedOptions $l
29d10 69 6e 65 20 24 6f 70 74 73 5d 5d 20 7d 0a 20 20  ine $opts]] }.  
29d20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
29d30 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65     proc complete
29d40 28 70 6c 61 63 65 29 20 7b 74 65 78 74 20 73 74  (place) {text st
29d50 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
29d60 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20   mod} {.        
29d70 73 65 74 20 73 75 62 20 5b 4c 69 6e 64 65 78 20  set sub [Lindex 
29d80 24 6c 69 6e 65 20 31 5d 0a 20 20 20 20 20 20 20  $line 1].       
29d90 20 73 65 74 20 70 72 65 76 20 5b 50 72 65 76 69   set prev [Previ
29da0 6f 75 73 57 6f 72 64 20 24 73 74 61 72 74 20 24  ousWord $start $
29db0 6c 69 6e 65 5d 0a 20 20 20 20 20 20 20 20 73 77  line].        sw
29dc0 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20  itch -- $pos {. 
29dd0 20 20 20 20 20 20 20 20 20 20 20 31 20 7b 0a 20             1 {. 
29de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29df0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
29e00 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5c 0a  romList $text \.
29e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e20 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 6f 6e              [con
29e30 63 61 74 20 5b 57 69 64 67 65 74 43 68 69 6c 64  cat [WidgetChild
29e40 72 65 6e 20 24 74 65 78 74 5d 20 5c 0a 20 20 20  ren $text] \.   
29e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 63                {c
29e70 6f 6e 66 69 67 75 72 65 20 66 6f 72 67 65 74 20  onfigure forget 
29e80 69 6e 66 6f 20 73 6c 61 76 65 73 7d 5d 5d 0a 20  info slaves}]]. 
29e90 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
29ea0 20 20 20 20 20 20 20 20 20 32 20 7b 0a 20 20 20           2 {.   
29eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69               swi
29ec0 74 63 68 20 2d 2d 20 24 73 75 62 20 7b 0a 20 20  tch -- $sub {.  
29ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ee0 20 20 63 6f 6e 66 69 67 75 72 65 20 2d 0a 20 20    configure -.  
29ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f00 20 20 66 6f 72 67 65 74 20 20 20 20 2d 0a 20 20    forget    -.  
29f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f20 20 20 69 6e 66 6f 20 20 20 20 20 20 2d 0a 20 20    info      -.  
29f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f40 20 20 73 6c 61 76 65 73 20 20 20 20 7b 20 72 65    slaves    { re
29f50 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
29f60 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b 57 69  omList $text [Wi
29f70 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 74 65  dgetChildren $te
29f80 78 74 5d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  xt]] }.         
29f90 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75             defau
29fa0 6c 74 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 50  lt   { return [P
29fb0 6c 61 63 65 43 6f 6e 66 69 67 20 24 74 65 78 74  laceConfig $text
29fc0 20 24 6c 69 6e 65 20 24 70 72 65 76 5d 20 7d 0a   $line $prev] }.
29fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fe0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
29ff0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61              defa
2a000 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ult {.          
2a010 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
2a020 24 73 75 62 20 7b 0a 20 20 20 20 20 20 20 20 20  $sub {.         
2a030 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
2a040 67 75 72 65 20 7b 20 72 65 74 75 72 6e 20 5b 50  gure { return [P
2a050 6c 61 63 65 43 6f 6e 66 69 67 20 24 74 65 78 74  laceConfig $text
2a060 20 24 6c 69 6e 65 20 24 70 72 65 76 5d 20 7d 0a   $line $prev] }.
2a070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a080 20 20 20 20 66 6f 72 67 65 74 20 20 20 20 7b 7d      forget    {}
2a090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a0a0 20 20 20 20 20 69 6e 66 6f 20 20 20 20 20 20 7b       info      {
2a0b0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
2a0c0 20 20 20 20 20 20 73 6c 61 76 65 73 20 20 20 20        slaves    
2a0d0 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {}.             
2a0e0 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 20         default  
2a0f0 20 7b 20 72 65 74 75 72 6e 20 5b 50 6c 61 63 65   { return [Place
2a100 43 6f 6e 66 69 67 20 24 74 65 78 74 20 24 6c 69  Config $text $li
2a110 6e 65 20 24 70 72 65 76 5d 20 7d 0a 20 20 20 20  ne $prev] }.    
2a120 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
2a130 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2a140 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65      }.        re
2a150 74 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20  turn "".    }.. 
2a160 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65     proc complete
2a170 28 72 61 64 69 6f 62 75 74 74 6f 6e 29 20 7b 74  (radiobutton) {t
2a180 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
2a190 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20  ne pos mod} {.  
2a1a0 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
2a1b0 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20  $pos {.         
2a1c0 20 20 20 31 20 20 20 20 20 20 20 7b 20 72 65 74     1       { ret
2a1d0 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c 6c 79 49  urn [EventuallyI
2a1e0 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f 74 20  nsertLeadingDot 
2a1f0 24 74 65 78 74 20 3c 70 61 74 68 4e 61 6d 65 3e  $text <pathName>
2a200 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
2a210 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20 20  default {.      
2a220 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2a230 20 5b 43 6f 6d 70 6c 65 74 65 57 69 64 67 65 74   [CompleteWidget
2a240 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 24  Configurations $
2a250 74 65 78 74 20 24 73 74 61 72 74 20 24 6c 69 6e  text $start $lin
2a260 65 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  e \.            
2a270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a280 7b 2d 61 63 74 69 76 65 62 61 63 6b 67 72 6f 75  {-activebackgrou
2a290 6e 64 20 2d 61 63 74 69 76 65 66 6f 72 65 67 72  nd -activeforegr
2a2a0 6f 75 6e 64 20 2d 61 6e 63 68 6f 72 20 2d 62 61  ound -anchor -ba
2a2b0 63 6b 67 72 6f 75 6e 64 0a 20 20 20 20 20 20 20  ckground.       
2a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2d0 20 20 20 20 20 20 2d 62 69 74 6d 61 70 20 2d 62        -bitmap -b
2a2e0 6f 72 64 65 72 77 69 64 74 68 20 2d 63 75 72 73  orderwidth -curs
2a2f0 6f 72 20 2d 64 69 73 61 62 6c 65 64 66 6f 72 65  or -disabledfore
2a300 67 72 6f 75 6e 64 20 2d 66 6f 6e 74 0a 20 20 20  ground -font.   
2a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a320 20 20 20 20 20 20 20 20 20 20 2d 66 6f 72 65 67            -foreg
2a330 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69 67 68 74  round -highlight
2a340 62 61 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67 68  background -high
2a350 6c 69 67 68 74 63 6f 6c 6f 72 0a 20 20 20 20 20  lightcolor.     
2a360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a370 20 20 20 20 20 20 20 20 2d 68 69 67 68 6c 69 67          -highlig
2a380 68 74 74 68 69 63 6b 6e 65 73 73 20 2d 69 6d 61  htthickness -ima
2a390 67 65 20 2d 6a 75 73 74 69 66 79 20 2d 70 61 64  ge -justify -pad
2a3a0 78 20 2d 70 61 64 79 20 2d 72 65 6c 69 65 66 0a  x -pady -relief.
2a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 74 61               -ta
2a3d0 6b 65 66 6f 63 75 73 20 2d 74 65 78 74 20 2d 74  kefocus -text -t
2a3e0 65 78 74 76 61 72 69 61 62 6c 65 20 2d 75 6e 64  extvariable -und
2a3f0 65 72 6c 69 6e 65 20 2d 77 72 61 70 6c 65 6e 67  erline -wrapleng
2a400 74 68 20 2d 63 6f 6d 6d 61 6e 64 0a 20 20 20 20  th -command.    
2a410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a420 20 20 20 20 20 20 20 20 20 2d 68 65 69 67 68 74           -height
2a430 20 2d 69 6e 64 69 63 61 74 6f 72 6f 6e 20 2d 73   -indicatoron -s
2a440 65 6c 65 63 74 63 6f 6c 6f 72 20 2d 73 65 6c 65  electcolor -sele
2a450 63 74 69 6d 61 67 65 20 2d 73 74 61 74 65 20 2d  ctimage -state -
2a460 76 61 6c 75 65 0a 20 20 20 20 20 20 20 20 20 20  value.          
2a470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a480 20 20 20 2d 76 61 72 69 61 62 6c 65 20 2d 77 69     -variable -wi
2a490 64 74 68 7d 5d 0a 20 20 20 20 20 20 20 20 20 20  dth}].          
2a4a0 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
2a4b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a        return "".
2a4c0 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20      }..    proc 
2a4d0 63 6f 6d 70 6c 65 74 65 28 72 61 69 73 65 29 20  complete(raise) 
2a4e0 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
2a4f0 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
2a500 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
2a510 63 6f 6d 70 6c 65 74 65 28 6c 6f 77 65 72 29 20  complete(lower) 
2a520 24 74 65 78 74 20 24 73 74 61 72 74 20 24 65 6e  $text $start $en
2a530 64 20 24 6c 69 6e 65 20 24 70 6f 73 20 24 6d 6f  d $line $pos $mo
2a540 64 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  d].    }..    pr
2a550 6f 63 20 63 6f 6d 70 6c 65 74 65 28 73 63 61 6c  oc complete(scal
2a560 65 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  e) {text start e
2a570 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
2a580 20 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74 63   {.        switc
2a590 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20  h -- $pos {.    
2a5a0 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20          1       
2a5b0 7b 20 72 65 74 75 72 6e 20 5b 45 76 65 6e 74 75  { return [Eventu
2a5c0 61 6c 6c 79 49 6e 73 65 72 74 4c 65 61 64 69 6e  allyInsertLeadin
2a5d0 67 44 6f 74 20 24 74 65 78 74 20 3c 70 61 74 68  gDot $text <path
2a5e0 4e 61 6d 65 3e 5d 20 7d 0a 20 20 20 20 20 20 20  Name>] }.       
2a5f0 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20       default {. 
2a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a610 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 57  eturn [CompleteW
2a620 69 64 67 65 74 43 6f 6e 66 69 67 75 72 61 74 69  idgetConfigurati
2a630 6f 6e 73 20 24 74 65 78 74 20 24 73 74 61 72 74  ons $text $start
2a640 20 24 6c 69 6e 65 20 5c 0a 20 20 20 20 20 20 20   $line \.       
2a650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a660 20 20 20 20 20 7b 2d 61 63 74 69 76 65 62 61 63       {-activebac
2a670 6b 67 72 6f 75 6e 64 20 2d 62 61 63 6b 67 72 6f  kground -backgro
2a680 75 6e 64 20 2d 62 6f 72 64 65 72 77 69 64 74 68  und -borderwidth
2a690 20 2d 63 75 72 73 6f 72 20 2d 66 6f 6e 74 0a 20   -cursor -font. 
2a6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6b0 20 20 20 20 20 20 20 20 20 20 20 20 2d 66 6f 72              -for
2a6c0 65 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69 67  eground -highlig
2a6d0 68 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d 68 69  htbackground -hi
2a6e0 67 68 6c 69 67 68 74 63 6f 6c 6f 72 0a 20 20 20  ghlightcolor.   
2a6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a700 20 20 20 20 20 20 20 20 20 20 2d 68 69 67 68 6c            -highl
2a710 69 67 68 74 74 68 69 63 6b 6e 65 73 73 20 2d 6f  ightthickness -o
2a720 72 69 65 6e 74 20 2d 72 65 6c 69 65 66 20 2d 72  rient -relief -r
2a730 65 70 65 61 74 64 65 6c 61 79 0a 20 20 20 20 20  epeatdelay.     
2a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a750 20 20 20 20 20 20 20 20 2d 72 65 70 65 61 74 69          -repeati
2a760 6e 74 65 72 76 61 6c 20 2d 74 61 6b 65 66 6f 63  nterval -takefoc
2a770 75 73 20 2d 74 72 6f 75 67 68 63 6f 6c 6f 72 20  us -troughcolor 
2a780 2d 62 69 67 69 6e 63 72 65 6d 65 6e 74 0a 20 20  -bigincrement.  
2a790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7a0 20 20 20 20 20 20 20 20 20 20 20 2d 63 6f 6d 6d             -comm
2a7b0 61 6e 64 20 2d 64 69 67 69 74 73 20 2d 66 72 6f  and -digits -fro
2a7c0 6d 20 2d 6c 61 62 65 6c 20 2d 6c 65 6e 67 74 68  m -label -length
2a7d0 20 2d 72 65 73 6f 6c 75 74 69 6f 6e 0a 20 20 20   -resolution.   
2a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7f0 20 20 20 20 20 20 20 20 20 20 2d 73 68 6f 77 76            -showv
2a800 61 6c 75 65 20 2d 73 6c 69 64 65 72 6c 65 6e 67  alue -sliderleng
2a810 74 68 20 2d 73 6c 69 64 65 72 72 65 6c 69 65 66  th -sliderrelief
2a820 20 2d 73 74 61 74 65 20 2d 74 69 63 6b 69 6e 74   -state -tickint
2a830 65 72 76 61 6c 0a 20 20 20 20 20 20 20 20 20 20  erval.          
2a840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a850 20 20 20 2d 74 6f 20 2d 76 61 72 69 61 62 6c 65     -to -variable
2a860 20 2d 77 69 64 74 68 7d 5d 0a 20 20 20 20 20 20   -width}].      
2a870 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2a880 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  }.        return
2a890 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70   "".    }..    p
2a8a0 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 73 63 72  roc complete(scr
2a8b0 6f 6c 6c 62 61 72 29 20 7b 74 65 78 74 20 73 74  ollbar) {text st
2a8c0 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
2a8d0 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20   mod} {.        
2a8e0 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
2a8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 31 20 20  .            1  
2a900 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 45       { return [E
2a910 76 65 6e 74 75 61 6c 6c 79 49 6e 73 65 72 74 4c  ventuallyInsertL
2a920 65 61 64 69 6e 67 44 6f 74 20 24 74 65 78 74 20  eadingDot $text 
2a930 3c 70 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a 20 20  <pathName>] }.  
2a940 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
2a950 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  t {.            
2a960 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70      return [Comp
2a970 6c 65 74 65 57 69 64 67 65 74 43 6f 6e 66 69 67  leteWidgetConfig
2a980 75 72 61 74 69 6f 6e 73 20 24 74 65 78 74 20 24  urations $text $
2a990 73 74 61 72 74 20 24 6c 69 6e 65 20 5c 0a 20 20  start $line \.  
2a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9b0 20 20 20 20 20 20 20 20 20 20 7b 2d 61 63 74 69            {-acti
2a9c0 76 65 62 61 63 6b 67 72 6f 75 6e 64 20 2d 62 61  vebackground -ba
2a9d0 63 6b 67 72 6f 75 6e 64 20 2d 62 6f 72 64 65 72  ckground -border
2a9e0 77 69 64 74 68 20 2d 63 75 72 73 6f 72 0a 20 20  width -cursor.  
2a9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa00 20 20 20 20 20 20 20 20 20 20 20 2d 68 69 67 68             -high
2aa10 6c 69 67 68 74 62 61 63 6b 67 72 6f 75 6e 64 20  lightbackground 
2aa20 2d 68 69 67 68 6c 69 67 68 74 63 6f 6c 6f 72 20  -highlightcolor 
2aa30 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b 6e  -highlightthickn
2aa40 65 73 73 0a 20 20 20 20 20 20 20 20 20 20 20 20  ess.            
2aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa60 20 2d 6a 75 6d 70 20 2d 6f 72 69 65 6e 74 20 2d   -jump -orient -
2aa70 72 65 6c 69 65 66 20 2d 72 65 70 65 61 74 64 65  relief -repeatde
2aa80 6c 61 79 20 2d 72 65 70 65 61 74 69 6e 74 65 72  lay -repeatinter
2aa90 76 61 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20  val.            
2aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aab0 20 2d 74 61 6b 65 66 6f 63 75 73 20 2d 74 72 6f   -takefocus -tro
2aac0 75 67 68 63 6f 6c 6f 72 20 2d 61 63 74 69 76 65  ughcolor -active
2aad0 72 65 6c 69 65 66 20 2d 63 6f 6d 6d 61 6e 64 0a  relief -command.
2aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 65 6c               -el
2ab00 65 6d 65 6e 74 62 6f 72 64 65 72 77 69 64 74 68  ementborderwidth
2ab10 20 2d 77 69 64 74 68 7d 5d 0a 20 20 20 20 20 20   -width}].      
2ab20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2ab30 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  }.        return
2ab40 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70   "".    }..    p
2ab50 72 6f 63 20 53 65 6c 65 63 74 69 6f 6e 4f 70 74  roc SelectionOpt
2ab60 73 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  s {text start en
2ab70 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 20 6c  d line pos mod l
2ab80 73 74 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  st} {.        se
2ab90 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73  t prev [Previous
2aba0 57 6f 72 64 20 24 73 74 61 72 74 20 24 6c 69 6e  Word $start $lin
2abb0 65 5d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 2d  e].        if {-
2abc0 31 20 3d 3d 20 5b 6c 73 65 61 72 63 68 20 24 6c  1 == [lsearch $l
2abd0 73 74 20 24 70 72 65 76 5d 7d 20 7b 0a 20 20 20  st $prev]} {.   
2abe0 20 20 20 20 20 20 20 20 20 73 65 74 20 70 72 65           set pre
2abf0 76 20 22 22 20 3b 23 20 66 6f 72 63 65 20 74 68  v "" ;# force th
2ac00 65 20 64 65 66 61 75 6c 74 20 61 72 6d 0a 20 20  e default arm.  
2ac10 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2ac20 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65 76 20  switch -- $prev 
2ac30 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 64  {.            -d
2ac40 69 73 70 6c 61 79 6f 66 20 7b 20 72 65 74 75 72  isplayof { retur
2ac50 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
2ac60 69 73 74 20 24 74 65 78 74 20 5b 57 69 64 67 65  ist $text [Widge
2ac70 74 43 68 69 6c 64 72 65 6e 20 24 74 65 78 74 5d  tChildren $text]
2ac80 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
2ac90 2d 73 65 6c 65 63 74 69 6f 6e 20 7b 0a 20 20 20  -selection {.   
2aca0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72               var
2acb0 69 61 62 6c 65 20 73 65 6c 65 63 74 69 6f 6e 2d  iable selection-
2acc0 73 65 6c 65 63 74 69 6f 6e 73 0a 20 20 20 20 20  selections.     
2acd0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2ace0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
2acf0 69 73 74 20 24 74 65 78 74 20 24 7b 73 65 6c 65  ist $text ${sele
2ad00 63 74 69 6f 6e 2d 73 65 6c 65 63 74 69 6f 6e 73  ction-selections
2ad10 7d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }].            }
2ad20 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 74 79  .            -ty
2ad30 70 65 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  pe      {.      
2ad40 20 20 20 20 20 20 20 20 20 20 76 61 72 69 61 62            variab
2ad50 6c 65 20 73 65 6c 65 63 74 69 6f 6e 2d 74 79 70  le selection-typ
2ad60 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  es.             
2ad70 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c     return [Compl
2ad80 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  eteFromList $tex
2ad90 74 20 24 7b 73 65 6c 65 63 74 69 6f 6e 2d 74 79  t ${selection-ty
2ada0 70 65 73 7d 5d 0a 20 20 20 20 20 20 20 20 20 20  pes}].          
2adb0 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
2adc0 2d 63 6f 6d 6d 61 6e 64 20 20 20 7b 0a 20 20 20  -command   {.   
2add0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2ade0 75 72 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d 6d  urn [BraceOrComm
2adf0 61 6e 64 20 24 74 65 78 74 20 24 73 74 61 72 74  and $text $start
2ae00 20 24 65 6e 64 20 24 6c 69 6e 65 20 24 70 6f 73   $end $line $pos
2ae10 20 24 6d 6f 64 5d 0a 20 20 20 20 20 20 20 20 20   $mod].         
2ae20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
2ae30 20 2d 66 6f 72 6d 61 74 20 20 20 20 7b 0a 20 20   -format    {.  
2ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61                va
2ae50 72 69 61 62 6c 65 20 73 65 6c 65 63 74 69 6f 6e  riable selection
2ae60 2d 66 6f 72 6d 61 74 73 0a 20 20 20 20 20 20 20  -formats.       
2ae70 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2ae80 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
2ae90 74 20 24 74 65 78 74 20 24 7b 73 65 6c 65 63 74  t $text ${select
2aea0 69 6f 6e 2d 66 6f 72 6d 61 74 73 7d 5d 0a 20 20  ion-formats}].  
2aeb0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2aec0 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20          default 
2aed0 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
2aee0 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d       return [Com
2aef0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74  pleteFromList $t
2af00 65 78 74 20 5b 52 65 6d 6f 76 65 55 73 65 64 4f  ext [RemoveUsedO
2af10 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20 24 6c 73  ptions $line $ls
2af20 74 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t]].            
2af30 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
2af40 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70  }..    proc comp
2af50 6c 65 74 65 28 73 65 6c 65 63 74 69 6f 6e 29 20  lete(selection) 
2af60 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
2af70 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
2af80 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d          switch -
2af90 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20  - $pos {.       
2afa0 20 20 20 20 20 31 20 20 20 20 20 20 20 7b 20 72       1       { r
2afb0 65 74 75 72 6e 20 5b 54 72 79 53 75 62 43 6d 64  eturn [TrySubCmd
2afc0 73 20 24 74 65 78 74 20 5b 4c 69 6e 64 65 78 20  s $text [Lindex 
2afd0 24 6c 69 6e 65 20 30 5d 5d 20 7d 0a 20 20 20 20  $line 0]] }.    
2afe0 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20          default 
2aff0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
2b000 20 20 73 65 74 20 73 75 62 20 5b 4c 69 6e 64 65    set sub [Linde
2b010 78 20 24 6c 69 6e 65 20 31 5d 0a 20 20 20 20 20  x $line 1].     
2b020 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 77             set w
2b030 69 64 67 65 74 73 20 5b 57 69 64 67 65 74 43 68  idgets [WidgetCh
2b040 69 6c 64 72 65 6e 20 24 74 65 78 74 5d 0a 20 20  ildren $text].  
2b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77                sw
2b060 69 74 63 68 20 2d 2d 20 24 73 75 62 20 7b 0a 20  itch -- $sub {. 
2b070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b080 20 20 20 63 6c 65 61 72 20 20 7b 0a 20 20 20 20     clear  {.    
2b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0a0 20 20 20 20 72 65 74 75 72 6e 20 5b 53 65 6c 65      return [Sele
2b0b0 63 74 69 6f 6e 4f 70 74 73 20 24 74 65 78 74 20  ctionOpts $text 
2b0c0 24 73 74 61 72 74 20 24 65 6e 64 20 24 6c 69 6e  $start $end $lin
2b0d0 65 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  e \.            
2b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0f0 20 20 20 20 20 20 20 20 24 70 6f 73 20 24 6d 6f          $pos $mo
2b100 64 20 7b 2d 64 69 73 70 6c 61 79 6f 66 20 2d 73  d {-displayof -s
2b110 65 6c 65 63 74 69 6f 6e 7d 5d 0a 20 20 20 20 20  election}].     
2b120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2b130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b140 20 20 20 20 20 67 65 74 20 20 20 20 7b 0a 20 20       get    {.  
2b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b160 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 53 65        return [Se
2b170 6c 65 63 74 69 6f 6e 4f 70 74 73 20 24 74 65 78  lectionOpts $tex
2b180 74 20 24 73 74 61 72 74 20 24 65 6e 64 20 24 6c  t $start $end $l
2b190 69 6e 65 20 5c 0a 20 20 20 20 20 20 20 20 20 20  ine \.          
2b1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1b0 20 20 20 20 20 20 20 20 20 20 24 70 6f 73 20 24            $pos $
2b1c0 6d 6f 64 20 7b 2d 64 69 73 70 6c 61 79 6f 66 20  mod {-displayof 
2b1d0 2d 73 65 6c 65 63 74 69 6f 6e 20 2d 74 79 70 65  -selection -type
2b1e0 7d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }].             
2b1f0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2b200 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e               han
2b210 64 6c 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  dle {.          
2b220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2b230 74 75 72 6e 20 5b 53 65 6c 65 63 74 69 6f 6e 4f  turn [SelectionO
2b240 70 74 73 20 24 74 65 78 74 20 24 73 74 61 72 74  pts $text $start
2b250 20 24 65 6e 64 20 24 6c 69 6e 65 20 24 70 6f 73   $end $line $pos
2b260 20 24 6d 6f 64 20 5c 0a 20 20 20 20 20 20 20 20   $mod \.        
2b270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b280 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 6f 6e              [con
2b290 63 61 74 20 7b 2d 73 65 6c 65 63 74 69 6f 6e 20  cat {-selection 
2b2a0 2d 74 79 70 65 20 2d 66 6f 72 6d 61 74 7d 20 24  -type -format} $
2b2b0 77 69 64 67 65 74 73 5d 5d 0a 20 20 20 20 20 20  widgets]].      
2b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
2b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2e0 20 20 20 20 6f 77 6e 20 20 20 20 7b 0a 20 20 20      own    {.   
2b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b300 20 20 20 20 20 72 65 74 75 72 6e 20 5b 53 65 6c       return [Sel
2b310 65 63 74 69 6f 6e 4f 70 74 73 20 24 74 65 78 74  ectionOpts $text
2b320 20 24 73 74 61 72 74 20 24 65 6e 64 20 24 6c 69   $start $end $li
2b330 6e 65 20 24 70 6f 73 20 24 6d 6f 64 20 5c 0a 20  ne $pos $mod \. 
2b340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b360 20 20 20 5b 63 6f 6e 63 61 74 20 7b 2d 63 6f 6d     [concat {-com
2b370 6d 61 6e 64 20 2d 73 65 6c 65 63 74 69 6f 6e 7d  mand -selection}
2b380 20 24 77 69 64 67 65 74 73 5d 5d 0a 20 20 20 20   $widgets]].    
2b390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3a0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
2b3b0 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
2b3c0 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
2b3d0 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70  }..    proc comp
2b3e0 6c 65 74 65 28 73 65 6e 64 29 20 7b 74 65 78 74  lete(send) {text
2b3f0 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
2b400 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20  pos mod} {.     
2b410 20 20 20 73 65 74 20 70 72 65 76 20 5b 50 72 65     set prev [Pre
2b420 76 69 6f 75 73 57 6f 72 64 20 24 73 74 61 72 74  viousWord $start
2b430 20 24 6c 69 6e 65 5d 0a 20 20 20 20 20 20 20 20   $line].        
2b440 69 66 20 7b 22 2d 64 69 73 70 6c 61 79 6f 66 22  if {"-displayof"
2b450 20 3d 3d 20 24 70 72 65 76 7d 20 7b 0a 20 20 20   == $prev} {.   
2b460 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2b470 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 74 65  [TryFromList $te
2b480 78 74 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72  xt [WidgetChildr
2b490 65 6e 20 24 74 65 78 74 5d 5d 0a 20 20 20 20 20  en $text]].     
2b4a0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 65 74     }.        set
2b4b0 20 63 6d 64 73 20 5b 52 65 6d 6f 76 65 55 73 65   cmds [RemoveUse
2b4c0 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20 7b  dOptions $line {
2b4d0 2d 61 73 79 6e 63 20 2d 64 69 73 70 6c 61 79 6f  -async -displayo
2b4e0 66 20 2d 2d 7d 20 7b 2d 2d 7d 5d 0a 20 20 20 20  f --} {--}].    
2b4f0 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68      if {[llength
2b500 20 24 63 6d 64 73 5d 7d 20 7b 0a 20 20 20 20 20   $cmds]} {.     
2b510 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 73         return [s
2b520 74 72 69 6e 67 20 74 72 69 6d 20 5b 43 6f 6d 70  tring trim [Comp
2b530 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65  leteFromList $te
2b540 78 74 20 5b 63 6f 6e 63 61 74 20 24 63 6d 64 73  xt [concat $cmds
2b550 20 3c 61 70 70 3e 5d 5d 5d 0a 20 20 20 20 20 20   <app>]]].      
2b560 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
2b570 20 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67 65         if {[rege
2b580 78 70 20 2d 2d 20 2d 2d 24 20 24 6c 69 6e 65 5d  xp -- --$ $line]
2b590 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  } {.            
2b5a0 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74      return [list
2b5b0 20 7b 2d 2d 7d 5d 3b 20 23 20 61 70 70 65 6e 64   {--}]; # append
2b5c0 20 61 20 62 6c 61 6e 6b 0a 20 20 20 20 20 20 20   a blank.       
2b5d0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
2b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                # 
2b5f0 54 4f 44 4f 20 6d 61 6b 65 20 74 68 69 73 20 62  TODO make this b
2b600 65 74 74 65 72 21 0a 20 20 20 20 20 20 20 20 20  etter!.         
2b610 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 44         return [D
2b620 69 73 70 6c 61 79 48 69 6e 74 73 20 5b 6c 69 73  isplayHints [lis
2b630 74 20 7b 3c 61 70 70 20 63 6d 64 20 3f 61 72 67  t {<app cmd ?arg
2b640 20 2e 2e 2e 3f 3e 7d 5d 5d 0a 20 20 20 20 20 20   ...?>}]].      
2b650 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2b660 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  }.        return
2b670 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70   "".    }..    p
2b680 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74 65 78  roc complete(tex
2b690 74 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  t) {text start e
2b6a0 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
2b6b0 20 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74 63   {.        switc
2b6c0 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20  h -- $pos {.    
2b6d0 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20          1       
2b6e0 7b 20 72 65 74 75 72 6e 20 5b 45 76 65 6e 74 75  { return [Eventu
2b6f0 61 6c 6c 79 49 6e 73 65 72 74 4c 65 61 64 69 6e  allyInsertLeadin
2b700 67 44 6f 74 20 24 74 65 78 74 20 3c 70 61 74 68  gDot $text <path
2b710 4e 61 6d 65 3e 5d 20 7d 0a 20 20 20 20 20 20 20  Name>] }.       
2b720 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20       default {. 
2b730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2b740 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 57  eturn [CompleteW
2b750 69 64 67 65 74 43 6f 6e 66 69 67 75 72 61 74 69  idgetConfigurati
2b760 6f 6e 73 20 24 74 65 78 74 20 24 73 74 61 72 74  ons $text $start
2b770 20 24 6c 69 6e 65 20 5c 0a 20 20 20 20 20 20 20   $line \.       
2b780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b790 20 20 20 20 20 7b 2d 62 61 63 6b 67 72 6f 75 6e       {-backgroun
2b7a0 64 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20 2d  d -borderwidth -
2b7b0 63 75 72 73 6f 72 20 2d 65 78 70 6f 72 74 73 65  cursor -exportse
2b7c0 6c 65 63 74 69 6f 6e 20 2d 66 6f 6e 74 0a 20 20  lection -font.  
2b7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7e0 20 20 20 20 20 20 20 20 20 20 20 2d 66 6f 72 65             -fore
2b7f0 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69 67 68  ground -highligh
2b800 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67  tbackground -hig
2b810 68 6c 69 67 68 74 63 6f 6c 6f 72 0a 20 20 20 20  hlightcolor.    
2b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b830 20 20 20 20 20 20 20 20 20 2d 68 69 67 68 6c 69           -highli
2b840 67 68 74 74 68 69 63 6b 6e 65 73 73 20 2d 69 6e  ghtthickness -in
2b850 73 65 72 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d  sertbackground -
2b860 69 6e 73 65 72 74 62 6f 72 64 65 72 77 69 64 74  insertborderwidt
2b870 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h.              
2b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
2b890 69 6e 73 65 72 74 6f 66 66 74 69 6d 65 20 2d 69  insertofftime -i
2b8a0 6e 73 65 72 74 6f 6e 74 69 6d 65 20 2d 69 6e 73  nsertontime -ins
2b8b0 65 72 74 77 69 64 74 68 20 2d 70 61 64 78 20 2d  ertwidth -padx -
2b8c0 70 61 64 79 0a 20 20 20 20 20 20 20 20 20 20 20  pady.           
2b8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8e0 20 20 2d 72 65 6c 69 65 66 20 2d 73 65 6c 65 63    -relief -selec
2b8f0 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d 73 65 6c  tbackground -sel
2b900 65 63 74 62 6f 72 64 65 72 77 69 64 74 68 0a 20  ectborderwidth. 
2b910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b920 20 20 20 20 20 20 20 20 20 20 20 20 2d 73 65 6c              -sel
2b930 65 63 74 66 6f 72 65 67 72 6f 75 6e 64 20 2d 73  ectforeground -s
2b940 65 74 67 72 69 64 20 2d 74 61 6b 65 66 6f 63 75  etgrid -takefocu
2b950 73 20 2d 78 73 63 72 6f 6c 6c 63 6f 6d 6d 61 6e  s -xscrollcomman
2b960 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d.              
2b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
2b980 79 73 63 72 6f 6c 6c 63 6f 6d 6d 61 6e 64 20 2d  yscrollcommand -
2b990 68 65 69 67 68 74 20 2d 73 70 61 63 69 6e 67 31  height -spacing1
2b9a0 20 2d 73 70 61 63 69 6e 67 32 20 2d 73 70 61 63   -spacing2 -spac
2b9b0 69 6e 67 33 0a 20 20 20 20 20 20 20 20 20 20 20  ing3.           
2b9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9d0 20 20 2d 73 74 61 74 65 20 2d 74 61 62 73 20 2d    -state -tabs -
2b9e0 77 69 64 74 68 20 2d 77 72 61 70 7d 5d 0a 20 20  width -wrap}].  
2b9f0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2ba00 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65      }.        re
2ba10 74 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20  turn "".    }.. 
2ba20 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65     proc complete
2ba30 28 74 6b 29 20 7b 74 65 78 74 20 73 74 61 72 74  (tk) {text start
2ba40 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
2ba50 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 77 69  d} {.        swi
2ba60 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20  tch -- $pos {.  
2ba70 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20            1     
2ba80 20 20 7b 20 72 65 74 75 72 6e 20 5b 54 72 79 53    { return [TryS
2ba90 75 62 43 6d 64 73 20 24 74 65 78 74 20 5b 4c 69  ubCmds $text [Li
2baa0 6e 64 65 78 20 24 6c 69 6e 65 20 30 5d 5d 20 7d  ndex $line 0]] }
2bab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66  .            def
2bac0 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 20 20  ault {.         
2bad0 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
2bae0 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31   [Lindex $line 1
2baf0 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] {.            
2bb00 20 20 20 20 20 20 20 20 61 70 70 6e 61 6d 65 20          appname 
2bb10 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
2bb20 79 48 69 6e 74 73 20 3f 6e 65 77 4e 61 6d 65 3f  yHints ?newName?
2bb30 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
2bb40 20 20 20 20 20 20 20 20 73 63 61 6c 69 6e 67 20          scaling 
2bb50 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
2bb60 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68            switch
2bb70 20 2d 2d 20 5b 50 72 65 76 69 6f 75 73 57 6f 72   -- [PreviousWor
2bb80 64 20 24 73 74 61 72 74 20 24 6c 69 6e 65 5d 20  d $start $line] 
2bb90 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
2bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 64                -d
2bbb0 69 73 70 6c 61 79 6f 66 20 7b 0a 20 20 20 20 20  isplayof {.     
2bbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbd0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2bbe0 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24  n [TryFromList $
2bbf0 74 65 78 74 20 5b 57 69 64 67 65 74 43 68 69 6c  text [WidgetChil
2bc00 64 72 65 6e 20 24 74 65 78 74 5d 5d 0a 20 20 20  dren $text]].   
2bc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
2bc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc40 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 20         default  
2bc50 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
2bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc70 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70      return [Comp
2bc80 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65  leteFromList $te
2bc90 78 74 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20  xt \.           
2bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bcc0 20 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69   [RemoveUsedOpti
2bcd0 6f 6e 73 20 24 6c 69 6e 65 20 7b 2d 64 69 73 70  ons $line {-disp
2bce0 6c 61 79 6f 66 20 3f 6e 75 6d 62 65 72 3f 7d 5d  layof ?number?}]
2bcf0 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
2bd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
2bd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
2bd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd50 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
2bd60 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a          }.    }.
2bd70 0a 20 20 20 20 23 20 70 72 6f 63 20 63 6f 6d 70  .    # proc comp
2bd80 6c 65 74 65 28 74 6b 5f 62 69 73 71 75 65 29 20  lete(tk_bisque) 
2bd90 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
2bda0 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
2bdb0 20 20 20 20 23 20 7d 0a 0a 20 20 20 20 70 72 6f      # }..    pro
2bdc0 63 20 63 6f 6d 70 6c 65 74 65 28 74 6b 5f 63 68  c complete(tk_ch
2bdd0 6f 6f 73 65 43 6f 6c 6f 72 29 20 7b 74 65 78 74  ooseColor) {text
2bde0 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
2bdf0 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20  pos mod} {.     
2be00 20 20 20 73 77 69 74 63 68 20 2d 2d 20 5b 50 72     switch -- [Pr
2be10 65 76 69 6f 75 73 57 6f 72 64 20 24 73 74 61 72  eviousWord $star
2be20 74 20 24 6c 69 6e 65 5d 20 7b 0a 20 20 20 20 20  t $line] {.     
2be30 20 20 20 20 20 20 20 2d 69 6e 69 74 69 61 6c 63         -initialc
2be40 6f 6c 6f 72 20 7b 20 72 65 74 75 72 6e 20 5b 43  olor { return [C
2be50 6f 6d 70 6c 65 74 65 43 6f 6c 6f 72 20 24 74 65  ompleteColor $te
2be60 78 74 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  xt] }.          
2be70 20 20 2d 70 61 72 65 6e 74 20 20 20 20 20 20 20    -parent       
2be80 7b 20 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f  { return [TryFro
2be90 6d 4c 69 73 74 20 24 74 65 78 74 20 5b 57 69 64  mList $text [Wid
2bea0 67 65 74 43 68 69 6c 64 72 65 6e 20 24 74 65 78  getChildren $tex
2beb0 74 5d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  t]] }.          
2bec0 20 20 2d 74 69 74 6c 65 20 20 20 20 20 20 20 20    -title        
2bed0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
2bee0 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d  yHints <string>]
2bef0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64   }.            d
2bf00 65 66 61 75 6c 74 20 20 20 20 20 20 20 7b 0a 20  efault       {. 
2bf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2bf20 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69  eturn [TryFromLi
2bf30 73 74 20 24 74 65 78 74 20 5c 0a 20 20 20 20 20  st $text \.     
2bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf50 20 20 20 20 20 20 20 5b 52 65 6d 6f 76 65 55 73         [RemoveUs
2bf60 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20  edOptions $line 
2bf70 7b 2d 69 6e 69 74 69 61 6c 63 6f 6c 6f 72 20 2d  {-initialcolor -
2bf80 70 61 72 65 6e 74 20 2d 74 69 74 6c 65 7d 5d 5d  parent -title}]]
2bf90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
2bfa0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a         }.    }..
2bfb0 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74      proc complet
2bfc0 65 28 74 6b 5f 64 69 61 6c 6f 67 29 20 7b 74 65  e(tk_dialog) {te
2bfd0 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
2bfe0 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20  e pos mod} {.   
2bff0 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24       switch -- $
2c000 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20  pos {.          
2c010 20 20 31 20 20 20 20 20 20 20 7b 20 72 65 74 75    1       { retu
2c020 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
2c030 4c 69 73 74 20 24 74 65 78 74 20 5b 54 6f 70 6c  List $text [Topl
2c040 65 76 65 6c 57 69 6e 64 6f 77 73 5d 5d 20 7d 0a  evelWindows]] }.
2c050 20 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20              2   
2c060 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69      { return [Di
2c070 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 69 74 6c  splayHints <titl
2c080 65 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  e>] }.          
2c090 20 20 33 20 20 20 20 20 20 20 7b 20 72 65 74 75    3       { retu
2c0a0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
2c0b0 20 3c 74 65 78 74 3e 5d 20 7d 0a 20 20 20 20 20   <text>] }.     
2c0c0 20 20 20 20 20 20 20 34 20 20 20 20 20 20 20 7b         4       {
2c0d0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
2c0e0 65 46 72 6f 6d 42 69 74 6d 61 70 73 20 24 74 65  eFromBitmaps $te
2c0f0 78 74 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  xt] }.          
2c100 20 20 35 20 20 20 20 20 20 20 7b 20 72 65 74 75    5       { retu
2c110 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
2c120 20 3c 64 65 66 61 75 6c 74 49 6e 64 65 78 3e 5d   <defaultIndex>]
2c130 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64   }.            d
2c140 65 66 61 75 6c 74 20 7b 20 72 65 74 75 72 6e 20  efault { return 
2c150 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 62  [DisplayHints ?b
2c160 75 74 74 6f 6e 4e 61 6d 65 3f 5d 20 7d 0a 20 20  uttonName?] }.  
2c170 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
2c180 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65     proc complete
2c190 28 74 6b 5f 66 6f 63 75 73 4e 65 78 74 29 20 7b  (tk_focusNext) {
2c1a0 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
2c1b0 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20  ine pos mod} {. 
2c1c0 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
2c1d0 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20   $pos {.        
2c1e0 20 20 20 20 31 20 7b 20 72 65 74 75 72 6e 20 5b      1 { return [
2c1f0 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
2c200 20 24 74 65 78 74 20 5b 57 69 64 67 65 74 43 68   $text [WidgetCh
2c210 69 6c 64 72 65 6e 20 24 74 65 78 74 5d 5d 20 7d  ildren $text]] }
2c220 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  .        }.    }
2c230 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c  ..    proc compl
2c240 65 74 65 28 74 6b 5f 66 6f 63 75 73 50 72 65 76  ete(tk_focusPrev
2c250 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
2c260 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
2c270 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68  {.        switch
2c280 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20   -- $pos {.     
2c290 20 20 20 20 20 20 20 31 20 7b 20 72 65 74 75 72         1 { retur
2c2a0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
2c2b0 69 73 74 20 24 74 65 78 74 20 5b 57 69 64 67 65  ist $text [Widge
2c2c0 74 43 68 69 6c 64 72 65 6e 20 24 74 65 78 74 5d  tChildren $text]
2c2d0 5d 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ] }.        }.  
2c2e0 20 20 7d 0a 0a 20 20 20 20 23 20 70 72 6f 63 20    }..    # proc 
2c2f0 63 6f 6d 70 6c 65 74 65 28 74 6b 5f 66 6f 63 75  complete(tk_focu
2c300 73 46 6f 6c 6c 6f 77 73 4d 6f 75 73 65 29 20 7b  sFollowsMouse) {
2c310 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
2c320 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20  ine pos mod} {. 
2c330 20 20 20 23 20 7d 0a 0a 20 20 20 20 70 72 6f 63     # }..    proc
2c340 20 47 65 74 4f 70 65 6e 53 61 76 65 46 69 6c 65   GetOpenSaveFile
2c350 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
2c360 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 20 7b 61   line pos mod {a
2c370 64 64 20 22 22 7d 7d 20 7b 0a 20 20 20 20 20 20  dd ""}} {.      
2c380 20 20 23 20 65 6e 61 62 6c 65 20 66 69 6c 65 6e    # enable filen
2c390 61 6d 65 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 66  ame completion f
2c3a0 6f 72 20 74 68 65 20 66 69 72 73 74 20 66 6f 75  or the first fou
2c3b0 72 20 73 77 69 74 63 68 65 73 2e 0a 20 20 20 20  r switches..    
2c3c0 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 5b 50      switch -- [P
2c3d0 72 65 76 69 6f 75 73 57 6f 72 64 20 24 73 74 61  reviousWord $sta
2c3e0 72 74 20 24 6c 69 6e 65 5d 20 7b 0a 20 20 20 20  rt $line] {.    
2c3f0 20 20 20 20 20 20 20 20 2d 64 65 66 61 75 6c 74          -default
2c400 65 78 74 65 6e 73 69 6f 6e 20 7b 7d 0a 20 20 20  extension {}.   
2c410 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 74 79           -filety
2c420 70 65 73 20 20 20 20 20 20 20 20 7b 7d 0a 20 20  pes        {}.  
2c430 20 20 20 20 20 20 20 20 20 20 2d 69 6e 69 74 69            -initi
2c440 61 6c 64 69 72 20 20 20 20 20 20 20 7b 7d 0a 20  aldir       {}. 
2c450 20 20 20 20 20 20 20 20 20 20 20 2d 69 6e 69 74             -init
2c460 69 61 6c 66 69 6c 65 20 20 20 20 20 20 7b 7d 0a  ialfile      {}.
2c470 20 20 20 20 20 20 20 20 20 20 20 20 2d 70 61 72              -par
2c480 65 6e 74 20 20 20 20 20 20 20 20 20 20 20 7b 20  ent           { 
2c490 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
2c4a0 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b  FromList $text [
2c4b0 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
2c4c0 74 65 78 74 5d 5d 20 7d 0a 20 20 20 20 20 20 20  text]] }.       
2c4d0 20 20 20 20 20 2d 74 69 74 6c 65 20 20 20 20 20       -title     
2c4e0 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20         { return 
2c4f0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74  [DisplayHints <t
2c500 69 74 6c 65 53 74 72 69 6e 67 3e 5d 20 7d 0a 20  itleString>] }. 
2c510 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75             defau
2c520 6c 74 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20  lt           {. 
2c530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2c540 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
2c550 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5c 0a  romList $text \.
2c560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c570 20 20 20 20 20 20 20 20 20 20 20 20 5b 52 65 6d              [Rem
2c580 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24  oveUsedOptions $
2c590 6c 69 6e 65 20 5c 0a 20 20 20 20 20 20 20 20 20  line \.         
2c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5b0 20 20 20 20 20 20 20 20 5b 63 6f 6e 63 61 74 20          [concat 
2c5c0 7b 2d 64 65 66 61 75 6c 74 65 78 74 65 6e 73 69  {-defaultextensi
2c5d0 6f 6e 20 2d 66 69 6c 65 74 79 70 65 73 0a 20 20  on -filetypes.  
2c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c600 20 20 20 20 20 20 20 20 2d 69 6e 69 74 69 61 6c          -initial
2c610 64 69 72 20 2d 70 61 72 65 6e 74 20 2d 74 69 74  dir -parent -tit
2c620 6c 65 7d 20 24 61 64 64 5d 5d 5d 0a 20 20 20 20  le} $add]]].    
2c630 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2c640 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70    }.    }..    p
2c650 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74 6b 5f  roc complete(tk_
2c660 67 65 74 4f 70 65 6e 46 69 6c 65 29 20 7b 74 65  getOpenFile) {te
2c670 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
2c680 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20  e pos mod} {.   
2c690 20 20 20 20 20 72 65 74 75 72 6e 20 5b 47 65 74       return [Get
2c6a0 4f 70 65 6e 53 61 76 65 46 69 6c 65 20 24 74 65  OpenSaveFile $te
2c6b0 78 74 20 24 73 74 61 72 74 20 24 65 6e 64 20 24  xt $start $end $
2c6c0 6c 69 6e 65 20 24 70 6f 73 20 24 6d 6f 64 5d 0a  line $pos $mod].
2c6d0 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20      }..    proc 
2c6e0 63 6f 6d 70 6c 65 74 65 28 74 6b 5f 67 65 74 53  complete(tk_getS
2c6f0 61 76 65 46 69 6c 65 29 20 7b 74 65 78 74 20 73  aveFile) {text s
2c700 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
2c710 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20  s mod} {.       
2c720 20 72 65 74 75 72 6e 20 5b 47 65 74 4f 70 65 6e   return [GetOpen
2c730 53 61 76 65 46 69 6c 65 20 24 74 65 78 74 20 24  SaveFile $text $
2c740 73 74 61 72 74 20 24 65 6e 64 20 24 6c 69 6e 65  start $end $line
2c750 20 24 70 6f 73 20 24 6d 6f 64 20 2d 69 6e 69 74   $pos $mod -init
2c760 69 61 6c 66 69 6c 65 5d 0a 20 20 20 20 7d 0a 0a  ialfile].    }..
2c770 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74      proc complet
2c780 65 28 74 6b 5f 6d 65 73 73 61 67 65 42 6f 78 29  e(tk_messageBox)
2c790 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
2c7a0 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
2c7b0 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20  .        switch 
2c7c0 2d 2d 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64  -- [PreviousWord
2c7d0 20 24 73 74 61 72 74 20 24 6c 69 6e 65 5d 20 7b   $start $line] {
2c7e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 64 65  .            -de
2c7f0 66 61 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b  fault { return [
2c800 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
2c810 20 24 74 65 78 74 20 7b 61 62 6f 72 74 20 63 61   $text {abort ca
2c820 6e 63 65 6c 20 69 67 6e 6f 72 65 20 6e 6f 20 6f  ncel ignore no o
2c830 6b 20 72 65 74 72 79 20 79 65 73 7d 5d 20 7d 0a  k retry yes}] }.
2c840 20 20 20 20 20 20 20 20 20 20 20 20 2d 69 63 6f              -ico
2c850 6e 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 43  n    { return [C
2c860 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
2c870 24 74 65 78 74 20 7b 65 72 72 6f 72 20 69 6e 66  $text {error inf
2c880 6f 20 71 75 65 73 74 69 6f 6e 20 77 61 72 6e 69  o question warni
2c890 6e 67 7d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  ng}] }.         
2c8a0 20 20 20 2d 6d 65 73 73 61 67 65 20 7b 20 72 65     -message { re
2c8b0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
2c8c0 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 20  ts <string>] }. 
2c8d0 20 20 20 20 20 20 20 20 20 20 20 2d 70 61 72 65             -pare
2c8e0 6e 74 20 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  nt  { return [Co
2c8f0 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
2c900 74 65 78 74 20 5b 57 69 64 67 65 74 43 68 69 6c  text [WidgetChil
2c910 64 72 65 6e 20 24 74 65 78 74 5d 5d 20 7d 0a 20  dren $text]] }. 
2c920 20 20 20 20 20 20 20 20 20 20 20 2d 74 69 74 6c             -titl
2c930 65 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  e   { return [Di
2c940 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 69 74 6c  splayHints <titl
2c950 65 53 74 72 69 6e 67 3e 5d 20 7d 0a 20 20 20 20  eString>] }.    
2c960 20 20 20 20 20 20 20 20 2d 74 79 70 65 20 20 20          -type   
2c970 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
2c980 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c     return [Compl
2c990 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  eteFromList $tex
2c9a0 74 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t \.            
2c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9c0 7b 61 62 6f 72 74 72 65 74 72 79 69 67 6e 6f 72  {abortretryignor
2c9d0 65 20 6f 6b 20 6f 6b 63 61 6e 63 65 6c 0a 20 20  e ok okcancel.  
2c9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72 79             retry
2ca00 63 61 6e 63 65 6c 20 79 65 73 6e 6f 20 79 65 73  cancel yesno yes
2ca10 6e 6f 63 61 6e 63 65 6c 7d 5d 0a 20 20 20 20 20  nocancel}].     
2ca20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2ca30 20 20 20 20 20 64 65 66 61 75 6c 74 20 20 7b 0a       default  {.
2ca40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca50 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
2ca60 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5c  FromList $text \
2ca70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 52 65               [Re
2ca90 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20  moveUsedOptions 
2caa0 24 6c 69 6e 65 20 5c 0a 20 20 20 20 20 20 20 20  $line \.        
2cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cac0 20 20 20 20 20 20 20 20 20 7b 2d 64 65 66 61 75           {-defau
2cad0 6c 74 20 2d 69 63 6f 6e 20 2d 6d 65 73 73 61 67  lt -icon -messag
2cae0 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e.              
2caf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb00 20 20 20 20 2d 70 61 72 65 6e 74 20 2d 74 69 74      -parent -tit
2cb10 6c 65 20 2d 74 79 70 65 7d 5d 5d 0a 20 20 20 20  le -type}]].    
2cb20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2cb30 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70    }.    }..    p
2cb40 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74 6b 5f  roc complete(tk_
2cb50 6f 70 74 69 6f 6e 4d 65 6e 75 29 20 7b 74 65 78  optionMenu) {tex
2cb60 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
2cb70 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20 20   pos mod} {.    
2cb80 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70      switch -- $p
2cb90 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  os {.           
2cba0 20 31 20 20 20 20 20 20 20 7b 20 72 65 74 75 72   1       { retur
2cbb0 6e 20 5b 45 76 65 6e 74 75 61 6c 6c 79 49 6e 73  n [EventuallyIns
2cbc0 65 72 74 4c 65 61 64 69 6e 67 44 6f 74 20 24 74  ertLeadingDot $t
2cbd0 65 78 74 20 3c 70 61 74 68 4e 61 6d 65 3e 5d 20  ext <pathName>] 
2cbe0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 20  }.            2 
2cbf0 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b        { return [
2cc00 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 74  VarCompletion $t
2cc10 65 78 74 20 23 30 5d 20 7d 0a 20 20 20 20 20 20  ext #0] }.      
2cc20 20 20 20 20 20 20 33 20 20 20 20 20 20 20 7b 20        3       { 
2cc30 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
2cc40 69 6e 74 73 20 3c 76 61 6c 75 65 3e 5d 20 7d 0a  ints <value>] }.
2cc50 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61              defa
2cc60 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ult { return [Di
2cc70 73 70 6c 61 79 48 69 6e 74 73 20 3f 76 61 6c 75  splayHints ?valu
2cc80 65 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a  e?] }.        }.
2cc90 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20      }..    proc 
2cca0 63 6f 6d 70 6c 65 74 65 28 74 6b 5f 70 6f 70 75  complete(tk_popu
2ccb0 70 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  p) {text start e
2ccc0 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
2ccd0 20 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74 63   {.        switc
2cce0 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20  h -- $pos {.    
2ccf0 20 20 20 20 20 20 20 20 31 20 7b 0a 20 20 20 20          1 {.    
2cd00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 64 69              # di
2cd10 73 70 6c 61 79 20 6f 6e 6c 79 20 6d 65 6e 75 20  splay only menu 
2cd20 77 69 64 67 65 74 73 0a 20 20 20 20 20 20 20 20  widgets.        
2cd30 20 20 20 20 20 20 20 20 23 0a 20 20 20 20 20 20          #.      
2cd40 20 20 20 20 20 20 20 20 20 20 73 65 74 20 77 69            set wi
2cd50 64 67 65 74 73 20 5b 57 69 64 67 65 74 43 68 69  dgets [WidgetChi
2cd60 6c 64 72 65 6e 20 24 74 65 78 74 5d 0a 20 20 20  ldren $text].   
2cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
2cd80 20 6d 65 6e 75 5f 77 69 64 67 65 74 73 20 22 22   menu_widgets ""
2cd90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cda0 20 66 6f 72 65 61 63 68 20 77 69 64 67 65 74 20   foreach widget 
2cdb0 24 77 69 64 67 65 74 73 20 7b 0a 20 20 20 20 20  $widgets {.     
2cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2cdd0 66 20 7b 22 4d 65 6e 75 22 20 3d 3d 20 5b 77 69  f {"Menu" == [wi
2cde0 6e 66 6f 20 63 6c 61 73 73 20 24 77 69 64 67 65  nfo class $widge
2cdf0 74 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  t]} {.          
2ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61                la
2ce10 70 70 65 6e 64 20 6d 65 6e 75 5f 77 69 64 67 65  ppend menu_widge
2ce20 74 73 20 24 77 69 64 67 65 74 0a 20 20 20 20 20  ts $widget.     
2ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2ce40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ce50 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
2ce60 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20     if {[llength 
2ce70 24 6d 65 6e 75 5f 77 69 64 67 65 74 73 5d 7d 20  $menu_widgets]} 
2ce80 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
2ce90 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 54 72        return [Tr
2cea0 79 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  yFromList $text 
2ceb0 24 6d 65 6e 75 5f 77 69 64 67 65 74 73 5d 0a 20  $menu_widgets]. 
2cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2ced0 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
2cee0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2cef0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
2cf00 20 3c 6d 65 6e 75 3e 5d 0a 20 20 20 20 20 20 20   <menu>].       
2cf10 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
2cf20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2cf30 20 20 20 20 20 32 20 7b 20 72 65 74 75 72 6e 20       2 { return 
2cf40 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 78  [DisplayHints <x
2cf50 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  >] }.           
2cf60 20 33 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73   3 { return [Dis
2cf70 70 6c 61 79 48 69 6e 74 73 20 3c 79 3e 5d 20 7d  playHints <y>] }
2cf80 0a 20 20 20 20 20 20 20 20 20 20 20 20 34 20 7b  .            4 {
2cf90 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
2cfa0 48 69 6e 74 73 20 3f 65 6e 74 72 79 49 6e 64 65  Hints ?entryInde
2cfb0 78 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a  x?] }.        }.
2cfc0 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 54 4f 44      }..    # TOD
2cfd0 4f 3a 20 74 68 65 20 6e 61 6d 65 20 2d 20 76 61  O: the name - va
2cfe0 6c 75 65 20 63 6f 6e 73 74 72 75 63 74 20 64 69  lue construct di
2cff0 64 6e 27 74 20 77 6f 72 6b 20 69 6e 20 6d 79 20  dn't work in my 
2d000 77 69 73 68 2e 0a 20 20 20 20 23 0a 20 20 20 20  wish..    #.    
2d010 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74 6b  proc complete(tk
2d020 5f 73 65 74 50 61 6c 65 74 74 65 29 20 7b 74 65  _setPalette) {te
2d030 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
2d040 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20 20 20  e pos mod} {.   
2d050 20 20 20 20 20 73 65 74 20 64 61 74 61 62 61 73       set databas
2d060 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e {.            
2d070 61 63 74 69 76 65 42 61 63 6b 67 72 6f 75 6e 64  activeBackground
2d080 20 20 20 20 20 20 20 20 66 6f 72 65 67 72 6f 75          foregrou
2d090 6e 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20  nd              
2d0a0 73 65 6c 65 63 74 43 6f 6c 6f 72 0a 20 20 20 20  selectColor.    
2d0b0 20 20 20 20 20 20 20 20 61 63 74 69 76 65 46 6f          activeFo
2d0c0 72 65 67 72 6f 75 6e 64 20 20 20 20 20 20 20 20  reground        
2d0d0 68 69 67 68 6c 69 67 68 74 42 61 63 6b 67 72 6f  highlightBackgro
2d0e0 75 6e 64 20 20 20 20 20 73 65 6c 65 63 74 42 61  und     selectBa
2d0f0 63 6b 67 72 6f 75 6e 64 0a 20 20 20 20 20 20 20  ckground.       
2d100 20 20 20 20 20 62 61 63 6b 67 72 6f 75 6e 64 20       background 
2d110 20 20 20 20 20 20 20 20 20 20 20 20 20 68 69 67               hig
2d120 68 6c 69 67 68 74 43 6f 6c 6f 72 20 20 20 20 20  hlightColor     
2d130 20 20 20 20 20 73 65 6c 65 63 74 46 6f 72 65 67       selectForeg
2d140 72 6f 75 6e 64 0a 20 20 20 20 20 20 20 20 20 20  round.          
2d150 20 20 64 69 73 61 62 6c 65 64 46 6f 72 65 67 72    disabledForegr
2d160 6f 75 6e 64 20 20 20 20 20 20 69 6e 73 65 72 74  ound      insert
2d170 42 61 63 6b 67 72 6f 75 6e 64 20 20 20 20 20 20  Background      
2d180 20 20 74 72 6f 75 67 68 43 6f 6c 6f 72 0a 20 20    troughColor.  
2d190 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2d1a0 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
2d1b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 31 20 20  .            1  
2d1c0 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 43       { return [C
2d1d0 6f 6d 70 6c 65 74 65 43 6f 6c 6f 72 20 24 74 65  ompleteColor $te
2d1e0 78 74 20 24 64 61 74 61 62 61 73 65 5d 20 7d 0a  xt $database] }.
2d1f0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61              defa
2d200 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ult {.          
2d210 20 20 20 20 20 20 73 77 69 74 63 68 20 5b 65 78        switch [ex
2d220 70 72 20 7b 24 70 6f 73 20 25 20 32 7d 5d 20 7b  pr {$pos % 2}] {
2d230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d240 20 20 20 20 20 31 20 7b 20 72 65 74 75 72 6e 20       1 { return 
2d250 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
2d260 74 20 24 74 65 78 74 20 24 64 61 74 61 62 61 73  t $text $databas
2d270 65 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  e] }.           
2d280 20 20 20 20 20 20 20 20 20 30 20 7b 20 72 65 74           0 { ret
2d290 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 43 6f 6c  urn [CompleteCol
2d2a0 6f 72 20 24 74 65 78 74 5d 20 7d 0a 20 20 20 20  or $text] }.    
2d2b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
2d2c0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2d2d0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
2d2e0 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74   proc complete(t
2d2f0 6b 77 61 69 74 29 20 7b 74 65 78 74 20 73 74 61  kwait) {text sta
2d300 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
2d310 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  mod} {.        s
2d320 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
2d330 20 20 20 20 20 20 20 20 20 20 20 20 31 20 7b 20              1 { 
2d340 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
2d350 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 7b  FromList $text {
2d360 76 61 72 69 61 62 6c 65 20 76 69 73 69 62 69 6c  variable visibil
2d370 69 74 79 20 77 69 6e 64 6f 77 7d 5d 20 7d 0a 20  ity window}] }. 
2d380 20 20 20 20 20 20 20 20 20 20 20 32 20 7b 0a 20             2 {. 
2d390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2d3a0 77 69 74 63 68 20 5b 4c 69 6e 64 65 78 20 24 6c  witch [Lindex $l
2d3b0 69 6e 65 20 31 5d 20 7b 0a 20 20 20 20 20 20 20  ine 1] {.       
2d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72               var
2d3d0 69 61 62 6c 65 20 20 20 7b 20 72 65 74 75 72 6e  iable   { return
2d3e0 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 20   [VarCompletion 
2d3f0 24 74 65 78 74 20 23 30 5d 20 7d 0a 20 20 20 20  $text #0] }.    
2d400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d410 76 69 73 69 62 69 6c 69 74 79 20 2d 0a 20 20 20  visibility -.   
2d420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d430 20 77 69 6e 64 6f 77 20 20 20 20 20 7b 20 72 65   window     { re
2d440 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73  turn [TryFromLis
2d450 74 20 24 74 65 78 74 20 5b 57 69 64 67 65 74 43  t $text [WidgetC
2d460 68 69 6c 64 72 65 6e 20 24 74 65 78 74 5d 5d 20  hildren $text]] 
2d470 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
2d480 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
2d490 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
2d4a0 7d 0a 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70  }..    proc comp
2d4b0 6c 65 74 65 28 74 6f 70 6c 65 76 65 6c 29 20 7b  lete(toplevel) {
2d4c0 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
2d4d0 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 20  ine pos mod} {. 
2d4e0 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
2d4f0 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20   $pos {.        
2d500 20 20 20 20 31 20 20 20 20 20 20 20 7b 20 72 65      1       { re
2d510 74 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c 6c 79  turn [Eventually
2d520 49 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f 74  InsertLeadingDot
2d530 20 24 74 65 78 74 20 3c 70 61 74 68 4e 61 6d 65   $text <pathName
2d540 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  >] }.           
2d550 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20   default {.     
2d560 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2d570 6e 20 5b 43 6f 6d 70 6c 65 74 65 57 69 64 67 65  n [CompleteWidge
2d580 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20  tConfigurations 
2d590 24 74 65 78 74 20 24 73 74 61 72 74 20 24 6c 69  $text $start $li
2d5a0 6e 65 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20  ne \.           
2d5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5c0 20 7b 2d 62 6f 72 64 65 72 77 69 64 74 68 20 2d   {-borderwidth -
2d5d0 63 75 72 73 6f 72 20 2d 68 69 67 68 6c 69 67 68  cursor -highligh
2d5e0 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67  tbackground -hig
2d5f0 68 6c 69 67 68 74 63 6f 6c 6f 72 0a 20 20 20 20  hlightcolor.    
2d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d610 20 20 20 20 20 20 20 20 20 2d 68 69 67 68 6c 69           -highli
2d620 67 68 74 74 68 69 63 6b 6e 65 73 73 20 2d 72 65  ghtthickness -re
2d630 6c 69 65 66 20 2d 74 61 6b 65 66 6f 63 75 73 20  lief -takefocus 
2d640 2d 62 61 63 6b 67 72 6f 75 6e 64 0a 20 20 20 20  -background.    
2d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d660 20 20 20 20 20 20 20 20 20 2d 63 6c 61 73 73 20           -class 
2d670 2d 63 6f 6c 6f 72 6d 61 70 20 2d 63 6f 6e 74 61  -colormap -conta
2d680 69 6e 65 72 20 2d 68 65 69 67 68 74 20 2d 6d 65  iner -height -me
2d690 6e 75 20 2d 73 63 72 65 65 6e 0a 20 20 20 20 20  nu -screen.     
2d6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d6b0 20 20 20 20 20 20 20 20 2d 75 73 65 20 2d 76 69          -use -vi
2d6c0 73 75 61 6c 20 2d 77 69 64 74 68 7d 5d 0a 20 20  sual -width}].  
2d6d0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2d6e0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65      }.        re
2d6f0 74 75 72 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20  turn "".    }.. 
2d700 20 20 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65     proc complete
2d710 28 77 69 6e 66 6f 29 20 7b 74 65 78 74 20 73 74  (winfo) {text st
2d720 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
2d730 20 6d 6f 64 7d 20 7b 0a 20 20 20 20 20 20 20 20   mod} {.        
2d740 73 65 74 20 73 75 62 20 5b 4c 69 6e 64 65 78 20  set sub [Lindex 
2d750 24 6c 69 6e 65 20 31 5d 0a 20 20 20 20 20 20 20  $line 1].       
2d760 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20   switch -- $pos 
2d770 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 31 20  {.            1 
2d780 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b        { return [
2d790 54 72 79 53 75 62 43 6d 64 73 20 24 74 65 78 74  TrySubCmds $text
2d7a0 20 77 69 6e 66 6f 5d 20 7d 0a 20 20 20 20 20 20   winfo] }.      
2d7b0 20 20 20 20 20 20 32 20 20 20 20 20 20 20 7b 0a        2       {.
2d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7d0 73 77 69 74 63 68 20 2d 2d 20 24 73 75 62 20 7b  switch -- $sub {
2d7e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d7f0 20 20 20 20 20 61 74 6f 6d 20 20 20 20 20 20 20       atom       
2d800 7b 20 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f  { return [TryFro
2d810 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 2d 64 69  mList $text {-di
2d820 73 70 6c 61 79 6f 66 20 3c 6e 61 6d 65 3e 7d 5d  splayof <name>}]
2d830 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
2d840 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e         containin
2d850 67 20 7b 20 72 65 74 75 72 6e 20 5b 54 72 79 46  g { return [TryF
2d860 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 2d  romList $text {-
2d870 64 69 73 70 6c 61 79 6f 66 20 3c 72 6f 6f 74 58  displayof <rootX
2d880 3e 7d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  >}] }.          
2d890 20 20 20 20 20 20 20 20 20 20 69 6e 74 65 72 70            interp
2d8a0 73 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 54  s    { return [T
2d8b0 72 79 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  ryFromList $text
2d8c0 20 2d 64 69 73 70 6c 61 79 6f 66 5d 20 7d 0a 20   -displayof] }. 
2d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8e0 20 20 20 61 74 6f 6d 6e 61 6d 65 20 20 20 2d 0a     atomname   -.
2d8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d900 20 20 20 20 70 61 74 68 6e 61 6d 65 20 20 20 7b      pathname   {
2d910 20 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d   return [TryFrom
2d920 4c 69 73 74 20 24 74 65 78 74 20 7b 2d 64 69 73  List $text {-dis
2d930 70 6c 61 79 6f 66 20 3c 69 64 3e 7d 5d 20 7d 0a  playof <id>}] }.
2d940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d950 20 20 20 20 64 65 66 61 75 6c 74 20 20 20 20 7b      default    {
2d960 20 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d   return [TryFrom
2d970 4c 69 73 74 20 24 74 65 78 74 20 5b 57 69 64 67  List $text [Widg
2d980 65 74 43 68 69 6c 64 72 65 6e 20 24 74 65 78 74  etChildren $text
2d990 5d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  ]] }.           
2d9a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
2d9b0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
2d9c0 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20   default {.     
2d9d0 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63             switc
2d9e0 68 20 2d 2d 20 24 73 75 62 20 7b 0a 20 20 20 20  h -- $sub {.    
2d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da00 61 74 6f 6d 20 20 20 20 20 20 20 20 20 20 20 20  atom            
2da10 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
2da20 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63             switc
2da30 68 20 2d 2d 20 5b 50 72 65 76 69 6f 75 73 57 6f  h -- [PreviousWo
2da40 72 64 20 24 73 74 61 72 74 20 24 6c 69 6e 65 5d  rd $start $line]
2da50 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
2da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
2da70 64 69 73 70 6c 61 79 6f 66 20 7b 20 72 65 74 75  displayof { retu
2da80 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20  rn [TryFromList 
2da90 24 74 65 78 74 20 5b 57 69 64 67 65 74 43 68 69  $text [WidgetChi
2daa0 6c 64 72 65 6e 20 24 74 65 78 74 5d 5d 20 7d 0a  ldren $text]] }.
2dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dac0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61              defa
2dad0 75 6c 74 20 20 20 20 7b 20 72 65 74 75 72 6e 20  ult    { return 
2dae0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6e  [DisplayHints <n
2daf0 61 6d 65 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20  ame>] }.        
2db00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db10 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
2db20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2db30 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
2db40 61 69 6e 69 6e 67 20 20 20 20 20 20 20 7b 0a 20  aining       {. 
2db50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db60 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
2db70 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 32   [Lindex $line 2
2db80 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] {.            
2db90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dba0 2d 64 69 73 70 6c 61 79 6f 66 20 7b 0a 20 20 20  -displayof {.   
2dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69               swi
2dbd0 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20  tch -- $pos {.  
2dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc00 20 20 33 20 7b 20 72 65 74 75 72 6e 20 5b 54 72    3 { return [Tr
2dc10 79 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  yFromList $text 
2dc20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
2dc30 24 74 65 78 74 5d 5d 20 7d 0a 20 20 20 20 20 20  $text]] }.      
2dc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 34 20                4 
2dc60 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
2dc70 79 48 69 6e 74 73 20 3c 72 6f 6f 74 58 3e 5d 20  yHints <rootX>] 
2dc80 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
2dc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dca0 20 20 20 20 20 20 35 20 7b 20 72 65 74 75 72 6e        5 { return
2dcb0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
2dcc0 72 6f 6f 74 59 3e 5d 20 7d 0a 20 20 20 20 20 20  rootY>] }.      
2dcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dce0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd00 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 20 20        default   
2dd30 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
2dd40 61 79 48 69 6e 74 73 20 3c 72 6f 6f 74 59 3e 5d  ayHints <rootY>]
2dd50 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
2dd60 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
2dd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd80 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
2dd90 20 20 20 20 20 20 20 69 6e 74 65 72 70 73 20 20         interps  
2dda0 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
2ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ddc0 20 20 73 77 69 74 63 68 20 2d 2d 20 5b 50 72 65    switch -- [Pre
2ddd0 76 69 6f 75 73 57 6f 72 64 20 24 73 74 61 72 74  viousWord $start
2dde0 20 24 6c 69 6e 65 5d 20 7b 0a 20 20 20 20 20 20   $line] {.      
2ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de00 20 20 20 20 20 20 2d 64 69 73 70 6c 61 79 6f 66        -displayof
2de10 20 7b 20 72 65 74 75 72 6e 20 5b 54 72 79 46 72   { return [TryFr
2de20 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b 57 69  omList $text [Wi
2de30 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 74 65  dgetChildren $te
2de40 78 74 5d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  xt]] }.         
2de50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de60 20 20 20 64 65 66 61 75 6c 74 20 20 20 20 7b 7d     default    {}
2de70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2de80 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
2de90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2dea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2deb0 20 20 20 20 20 61 74 6f 6d 6e 61 6d 65 20 20 20       atomname   
2dec0 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20        -.        
2ded0 20 20 20 20 20 20 20 20 20 20 20 20 70 61 74 68              path
2dee0 6e 61 6d 65 20 20 20 20 20 20 20 20 20 7b 0a 20  name         {. 
2def0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df00 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
2df10 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24   [PreviousWord $
2df20 73 74 61 72 74 20 24 6c 69 6e 65 5d 20 7b 0a 20  start $line] {. 
2df30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df40 20 20 20 20 20 20 20 20 20 20 20 2d 64 69 73 70             -disp
2df50 6c 61 79 6f 66 20 7b 20 72 65 74 75 72 6e 20 5b  layof { return [
2df60 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  TryFromList $tex
2df70 74 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65  t [WidgetChildre
2df80 6e 20 24 74 65 78 74 5d 5d 20 7d 0a 20 20 20 20  n $text]] }.    
2df90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfa0 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20          default 
2dfb0 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73     { return [Dis
2dfc0 70 6c 61 79 48 69 6e 74 73 20 3c 69 64 3e 5d 20  playHints <id>] 
2dfd0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
2dfe0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e000 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
2e010 20 20 20 20 20 20 76 69 73 75 61 6c 73 61 76 61        visualsava
2e020 69 6c 61 62 6c 65 20 7b 20 72 65 74 75 72 6e 20  ilable { return 
2e030 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 69  [DisplayHints ?i
2e040 6e 63 6c 75 64 65 69 64 73 3f 5d 20 7d 0a 20 20  ncludeids?] }.  
2e050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e060 20 20 64 65 66 61 75 6c 74 20 20 20 20 20 20 20    default       
2e070 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 54 72 79     { return [Try
2e080 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b  FromList $text [
2e090 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
2e0a0 74 65 78 74 5d 5d 20 7d 0a 20 20 20 20 20 20 20  text]] }.       
2e0b0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
2e0c0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2e0d0 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   }.        retur
2e0e0 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20  n "".    }..    
2e0f0 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 77 6d  proc complete(wm
2e100 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
2e110 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
2e120 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 75  {.        set su
2e130 62 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20  b [Lindex $line 
2e140 31 5d 0a 20 20 20 20 20 20 20 20 73 77 69 74 63  1].        switc
2e150 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20  h -- $pos {.    
2e160 20 20 20 20 20 20 20 20 31 20 7b 0a 20 20 20 20          1 {.    
2e170 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e180 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
2e190 4c 69 73 74 20 24 74 65 78 74 20 5c 0a 20 20 20  List $text \.   
2e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e1b0 20 20 20 20 20 20 20 20 20 7b 61 73 70 65 63 74           {aspect
2e1c0 20 63 6c 69 65 6e 74 20 63 6f 6c 6f 72 6d 61 70   client colormap
2e1d0 77 69 6e 64 6f 77 73 20 63 6f 6d 6d 61 6e 64 20  windows command 
2e1e0 64 65 69 63 6f 6e 69 66 79 20 66 6f 63 75 73 6d  deiconify focusm
2e1f0 6f 64 65 6c 0a 20 20 20 20 20 20 20 20 20 20 20  odel.           
2e200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e210 20 20 66 72 61 6d 65 20 67 65 6f 6d 65 74 72 79    frame geometry
2e220 20 67 72 69 64 20 67 72 6f 75 70 20 69 63 6f 6e   grid group icon
2e230 62 69 74 6d 61 70 20 69 63 6f 6e 69 66 79 20 69  bitmap iconify i
2e240 63 6f 6e 6d 61 73 6b 20 69 63 6f 6e 6e 61 6d 65  conmask iconname
2e250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 63                ic
2e270 6f 6e 70 6f 73 69 74 69 6f 6e 20 69 63 6f 6e 77  onposition iconw
2e280 69 6e 64 6f 77 20 6d 61 78 73 69 7a 65 20 6d 69  indow maxsize mi
2e290 6e 73 69 7a 65 20 6f 76 65 72 72 69 64 65 72 65  nsize overridere
2e2a0 64 69 72 65 63 74 0a 20 20 20 20 20 20 20 20 20  direct.         
2e2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2c0 20 20 20 20 70 6f 73 69 74 69 6f 6e 66 72 6f 6d      positionfrom
2e2d0 20 70 72 6f 74 6f 63 6f 6c 20 72 65 73 69 7a 61   protocol resiza
2e2e0 62 6c 65 20 73 69 7a 65 66 72 6f 6d 20 73 74 61  ble sizefrom sta
2e2f0 74 65 20 74 69 74 6c 65 20 74 72 61 6e 73 69 65  te title transie
2e300 6e 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  nt.             
2e310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e320 77 69 74 68 64 72 61 77 7d 5d 0a 20 20 20 20 20  withdraw}].     
2e330 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2e340 20 20 20 20 20 32 20 7b 20 72 65 74 75 72 6e 20       2 { return 
2e350 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 74 65  [TryFromList $te
2e360 78 74 20 5b 54 6f 70 6c 65 76 65 6c 57 69 6e 64  xt [ToplevelWind
2e370 6f 77 73 5d 5d 20 7d 0a 20 20 20 20 20 20 20 20  ows]] }.        
2e380 20 20 20 20 33 20 7b 0a 20 20 20 20 20 20 20 20      3 {.        
2e390 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d          switch -
2e3a0 2d 20 24 73 75 62 20 7b 0a 20 20 20 20 20 20 20  - $sub {.       
2e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 70               asp
2e3c0 65 63 74 20 20 20 20 20 20 20 20 20 20 20 7b 20  ect           { 
2e3d0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
2e3e0 69 6e 74 73 20 3f 6d 69 6e 4e 75 6d 65 72 3f 5d  ints ?minNumer?]
2e3f0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
2e400 20 20 20 20 20 20 20 63 6c 69 65 6e 74 20 20 20         client   
2e410 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e          { return
2e420 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
2e430 6e 61 6d 65 3f 5d 20 7d 0a 20 20 20 20 20 20 20  name?] }.       
2e440 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c               col
2e450 6f 72 6d 61 70 77 69 6e 64 6f 77 73 20 20 7b 0a  ormapwindows  {.
2e460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e470 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
2e480 43 6f 6d 70 6c 65 74 65 4c 69 73 74 46 72 6f 6d  CompleteListFrom
2e490 4c 69 73 74 20 24 74 65 78 74 20 5c 0a 20 20 20  List $text \.   
2e4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e4c0 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 6c 65 66   [string trimlef
2e4d0 74 20 5b 49 6e 63 6f 6d 70 6c 65 74 65 4c 69 73  t [IncompleteLis
2e4e0 74 52 65 6d 61 69 6e 64 65 72 20 24 6c 69 6e 65  tRemainder $line
2e4f0 5d 5d 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20  ]] \.           
2e500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e510 20 20 20 20 20 20 20 20 20 5b 57 69 64 67 65 74           [Widget
2e520 43 68 69 6c 64 72 65 6e 20 2e 5d 20 5c 7b 20 7b  Children .] \{ {
2e530 20 7d 20 5c 7d 5d 0a 20 20 20 20 20 20 20 20 20   } \}].         
2e540 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
2e550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e560 20 63 6f 6d 6d 61 6e 64 20 20 20 20 20 20 20 20   command        
2e570 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70    { return [Disp
2e580 6c 61 79 48 69 6e 74 73 20 3f 76 61 6c 75 65 3f  layHints ?value?
2e590 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
2e5a0 20 20 20 20 20 20 20 20 66 6f 63 75 73 6d 6f 64          focusmod
2e5b0 65 6c 20 20 20 20 20 20 20 7b 20 72 65 74 75 72  el       { retur
2e5c0 6e 20 5b 43 6f 6d 70 6c 65 74 65 4c 69 73 74 46  n [CompleteListF
2e5d0 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 61  romList $text {a
2e5e0 63 74 69 76 65 20 70 61 73 73 69 76 65 7d 5d 20  ctive passive}] 
2e5f0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
2e600 20 20 20 20 20 20 67 65 6f 6d 65 74 72 79 20 20        geometry  
2e610 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20         { return 
2e620 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 3c  [DisplayHints ?<
2e630 77 69 64 74 68 3e 78 3c 68 65 69 67 68 74 3e 2b  width>x<height>+
2e640 2d 3c 78 3e 2b 2d 3c 79 3e 3f 5d 20 7d 0a 20 20  -<x>+-<y>?] }.  
2e650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e660 20 20 67 72 69 64 20 20 20 20 20 20 20 20 20 20    grid          
2e670 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73     { return [Dis
2e680 70 6c 61 79 48 69 6e 74 73 20 3f 62 61 73 65 57  playHints ?baseW
2e690 69 64 74 68 3f 5d 20 7d 0a 20 20 20 20 20 20 20  idth?] }.       
2e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 72 6f               gro
2e6b0 75 70 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  up            { 
2e6c0 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c  return [TryFromL
2e6d0 69 73 74 20 24 74 65 78 74 20 5b 57 69 64 67 65  ist $text [Widge
2e6e0 74 43 68 69 6c 64 72 65 6e 20 24 74 65 78 74 5d  tChildren $text]
2e6f0 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
2e700 20 20 20 20 20 20 20 20 69 63 6f 6e 62 69 74 6d          iconbitm
2e710 61 70 20 20 20 20 20 20 20 2d 0a 20 20 20 20 20  ap       -.     
2e720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2e730 63 6f 6e 6d 61 73 6b 20 20 20 20 20 20 20 20 20  conmask         
2e740 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
2e750 74 65 46 72 6f 6d 42 69 74 6d 61 70 73 20 24 74  teFromBitmaps $t
2e760 65 78 74 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  ext] }.         
2e770 20 20 20 20 20 20 20 20 20 20 20 69 63 6f 6e 6e             iconn
2e780 61 6d 65 20 20 20 20 20 20 20 20 20 7b 20 72 65  ame         { re
2e790 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
2e7a0 74 73 20 3f 6e 65 77 4e 61 6d 65 3f 5d 20 7d 0a  ts ?newName?] }.
2e7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e7c0 20 20 20 20 69 63 6f 6e 70 6f 73 69 74 69 6f 6e      iconposition
2e7d0 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44       { return [D
2e7e0 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 78 3f 5d  isplayHints ?x?]
2e7f0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
2e800 20 20 20 20 20 20 20 69 63 6f 6e 77 69 6e 64 6f         iconwindo
2e810 77 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e  w       { return
2e820 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 74   [TryFromList $t
2e830 65 78 74 20 5b 57 69 64 67 65 74 43 68 69 6c 64  ext [WidgetChild
2e840 72 65 6e 20 24 74 65 78 74 5d 5d 20 7d 0a 20 20  ren $text]] }.  
2e850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e860 20 20 6d 61 78 73 69 7a 65 20 20 20 20 20 20 20    maxsize       
2e870 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20     -.           
2e880 20 20 20 20 20 20 20 20 20 6d 69 6e 73 69 7a 65           minsize
2e890 20 20 20 20 20 20 20 20 20 20 7b 20 72 65 74 75            { retu
2e8a0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
2e8b0 20 3f 77 69 64 74 68 3f 5d 20 7d 0a 20 20 20 20   ?width?] }.    
2e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8d0 6f 76 65 72 72 69 64 65 72 65 64 69 72 65 63 74  overrideredirect
2e8e0 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c   { return [Compl
2e8f0 65 74 65 42 6f 6f 6c 65 61 6e 20 24 74 65 78 74  eteBoolean $text
2e900 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
2e910 20 20 20 20 20 20 20 20 70 6f 73 69 74 69 6f 6e          position
2e920 66 72 6f 6d 20 20 20 20 20 2d 0a 20 20 20 20 20  from     -.     
2e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2e940 69 7a 65 66 72 6f 6d 20 20 20 20 20 20 20 20 20  izefrom         
2e950 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
2e960 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  teFromList $text
2e970 20 7b 70 6f 73 69 74 69 6f 6e 20 75 73 65 72 7d   {position user}
2e980 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
2e990 20 20 20 20 20 20 20 20 70 72 6f 74 6f 63 6f 6c          protocol
2e9a0 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
2e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e9c0 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c     return [Compl
2e9d0 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  eteFromList $tex
2e9e0 74 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t \.            
2e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea00 20 20 20 20 20 20 20 20 7b 57 4d 5f 54 41 4b 45          {WM_TAKE
2ea10 5f 46 4f 43 55 53 20 57 4d 5f 53 41 56 45 5f 59  _FOCUS WM_SAVE_Y
2ea20 4f 55 52 53 45 4c 46 20 57 4d 5f 44 45 4c 45 54  OURSELF WM_DELET
2ea30 45 5f 57 49 4e 44 4f 57 7d 5d 0a 20 20 20 20 20  E_WINDOW}].     
2ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2ea50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ea60 20 20 20 20 20 72 65 73 69 7a 61 62 6c 65 20 20       resizable  
2ea70 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b        { return [
2ea80 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 77 69  DisplayHints ?wi
2ea90 64 74 68 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20  dth?] }.        
2eaa0 20 20 20 20 20 20 20 20 20 20 20 20 74 69 74 6c              titl
2eab0 65 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 72  e            { r
2eac0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
2ead0 6e 74 73 20 3f 73 74 72 69 6e 67 3f 5d 20 7d 0a  nts ?string?] }.
2eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eaf0 20 20 20 20 74 72 61 6e 73 69 65 6e 74 20 20 20      transient   
2eb00 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 54       { return [T
2eb10 72 79 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  ryFromList $text
2eb20 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e   [WidgetChildren
2eb30 20 24 74 65 78 74 5d 5d 20 7d 0a 20 20 20 20 20   $text]] }.     
2eb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2eb50 65 66 61 75 6c 74 20 20 20 20 20 20 20 20 20 20  efault          
2eb60 7b 20 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f  { return [TryFro
2eb70 6d 4c 69 73 74 20 24 74 65 78 74 20 5b 54 6f 70  mList $text [Top
2eb80 6c 65 76 65 6c 57 69 6e 64 6f 77 73 5d 5d 20 7d  levelWindows]] }
2eb90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2eba0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d   }.            }
2ebb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 34 20 7b  .            4 {
2ebc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ebd0 20 73 77 69 74 63 68 20 2d 2d 20 24 73 75 62 20   switch -- $sub 
2ebe0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
2ebf0 20 20 20 20 20 20 61 73 70 65 63 74 20 20 20 20        aspect    
2ec00 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73     { return [Dis
2ec10 70 6c 61 79 48 69 6e 74 73 20 3f 6d 69 6e 44 65  playHints ?minDe
2ec20 6e 6f 6d 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20  nom?] }.        
2ec30 20 20 20 20 20 20 20 20 20 20 20 20 67 72 69 64              grid
2ec40 20 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72           { retur
2ec50 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
2ec60 3f 62 61 73 65 48 65 69 67 68 74 3f 5d 20 7d 0a  ?baseHeight?] }.
2ec70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec80 20 20 20 20 69 63 6f 6e 70 6f 73 69 74 69 6f 6e      iconposition
2ec90 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
2eca0 61 79 48 69 6e 74 73 20 3f 79 3f 5d 20 7d 0a 20  ayHints ?y?] }. 
2ecb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ecc0 20 20 20 6d 61 78 73 69 7a 65 20 20 20 20 20 20     maxsize      
2ecd0 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  -.              
2ece0 20 20 20 20 20 20 6d 69 6e 73 69 7a 65 20 20 20        minsize   
2ecf0 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73     { return [Dis
2ed00 70 6c 61 79 48 69 6e 74 73 20 3f 68 65 69 67 68  playHints ?heigh
2ed10 74 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  t?] }.          
2ed20 20 20 20 20 20 20 20 20 20 20 70 72 6f 74 6f 63            protoc
2ed30 6f 6c 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  ol     {.       
2ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed50 20 72 65 74 75 72 6e 20 5b 42 72 61 63 65 4f 72   return [BraceOr
2ed60 43 6f 6d 6d 61 6e 64 20 24 74 65 78 74 20 24 73  Command $text $s
2ed70 74 61 72 74 20 24 65 6e 64 20 24 6c 69 6e 65 20  tart $end $line 
2ed80 24 70 6f 73 20 24 6d 6f 64 5d 0a 20 20 20 20 20  $pos $mod].     
2ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2eda0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2edb0 20 20 20 20 20 72 65 73 69 7a 61 62 6c 65 20 20       resizable  
2edc0 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70    { return [Disp
2edd0 6c 61 79 48 69 6e 74 73 20 3f 68 65 69 67 68 74  layHints ?height
2ede0 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  ?] }.           
2edf0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
2ee00 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
2ee10 20 35 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20   5 {.           
2ee20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24       switch -- $
2ee30 73 75 62 20 7b 0a 20 20 20 20 20 20 20 20 20 20  sub {.          
2ee40 20 20 20 20 20 20 20 20 20 20 61 73 70 65 63 74            aspect
2ee50 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
2ee60 61 79 48 69 6e 74 73 20 3f 6d 61 78 4e 75 6d 65  ayHints ?maxNume
2ee70 72 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  r?] }.          
2ee80 20 20 20 20 20 20 20 20 20 20 67 72 69 64 20 20            grid  
2ee90 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
2eea0 61 79 48 69 6e 74 73 20 3f 77 69 64 74 68 49 6e  ayHints ?widthIn
2eeb0 63 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  c?] }.          
2eec0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2eed0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
2eee0 20 20 36 20 7b 0a 20 20 20 20 20 20 20 20 20 20    6 {.          
2eef0 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
2ef00 24 73 75 62 20 7b 0a 20 20 20 20 20 20 20 20 20  $sub {.         
2ef10 20 20 20 20 20 20 20 20 20 20 20 61 73 70 65 63             aspec
2ef20 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  t { return [Disp
2ef30 6c 61 79 48 69 6e 74 73 20 3f 6d 61 78 44 65 6e  layHints ?maxDen
2ef40 6f 6d 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  om?] }.         
2ef50 20 20 20 20 20 20 20 20 20 20 20 67 72 69 64 20             grid 
2ef60 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70    { return [Disp
2ef70 6c 61 79 48 69 6e 74 73 20 3f 68 65 69 67 68 74  layHints ?height
2ef80 49 6e 63 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20  Inc?] }.        
2ef90 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2efa0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2efb0 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  }.        return
2efc0 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23   "".    }..    #
2efd0 20 3d 3d 3d 3d 20 4f 62 6a 43 6d 64 20 63 6f 6d   ==== ObjCmd com
2efe0 70 6c 65 74 65 72 73 20 3d 3d 3d 3d 3d 3d 3d 3d  pleters ========
2eff0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2f000 3d 3d 0a 20 20 20 20 23 0a 20 20 20 20 23 20 40  ==.    #.    # @
2f010 6e 6f 74 65 20 77 68 65 6e 20 61 20 70 72 6f 63  note when a proc
2f020 20 69 73 20 63 6f 6d 6d 65 6e 74 65 64 20 6f 75   is commented ou
2f030 74 2c 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 0a  t, the fallback.
2f040 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70      #       comp
2f050 6c 65 74 65 72 73 20 64 6f 20 74 68 65 20 6a 6f  leters do the jo
2f060 62 20 72 61 74 68 65 72 20 77 65 6c 6c 2e 0a 20  b rather well.. 
2f070 20 20 20 23 0a 20 20 20 20 23 20 3d 3d 3d 3d 3d     #.    # =====
2f080 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2f090 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2f0a0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 0a 20  ============... 
2f0b0 20 20 20 23 20 70 72 6f 63 20 42 75 74 74 6f 6e     # proc Button
2f0c0 4f 62 6a 20 7b 74 65 78 74 20 73 74 61 72 74 20  Obj {text start 
2f0d0 65 6e 64 20 6c 69 6e 65 20 70 6f 73 7d 20 7b 0a  end line pos} {.
2f0e0 20 20 20 20 23 20 20 20 72 65 74 75 72 6e 20 22      #   return "
2f0f0 22 0a 20 20 20 20 23 20 7d 0a 0a 20 20 20 20 70  ".    # }..    p
2f100 72 6f 63 20 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  roc CompleteFrom
2f110 42 69 74 6d 61 70 73 20 7b 74 65 78 74 20 7b 61  Bitmaps {text {a
2f120 6c 77 61 79 73 20 31 7d 7d 20 7b 0a 20 20 20 20  lways 1}} {.    
2f130 20 20 20 20 73 65 74 20 69 6e 61 6d 65 73 20 5b      set inames [
2f140 69 6d 61 67 65 20 6e 61 6d 65 73 5d 0a 20 20 20  image names].   
2f150 20 20 20 20 20 73 65 74 20 62 69 74 6d 61 70 73       set bitmaps
2f160 20 22 22 0a 20 20 20 20 20 20 20 20 66 6f 72 65   "".        fore
2f170 61 63 68 20 6e 61 6d 65 20 24 69 6e 61 6d 65 73  ach name $inames
2f180 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69   {.            i
2f190 66 20 7b 22 62 69 74 6d 61 70 22 20 3d 3d 20 5b  f {"bitmap" == [
2f1a0 69 6d 61 67 65 20 74 79 70 65 20 24 6e 61 6d 65  image type $name
2f1b0 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ]} {.           
2f1c0 20 20 20 20 20 6c 61 70 70 65 6e 64 20 62 69 74       lappend bit
2f1d0 6d 61 70 73 20 24 6e 61 6d 65 0a 20 20 20 20 20  maps $name.     
2f1e0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2f1f0 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b   }.        if {[
2f200 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 62  string length $b
2f210 69 74 6d 61 70 73 5d 7d 20 7b 0a 20 20 20 20 20  itmaps]} {.     
2f220 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43         return [C
2f230 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
2f240 24 74 65 78 74 20 24 62 69 74 6d 61 70 73 5d 0a  $text $bitmaps].
2f250 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
2f260 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2f270 24 61 6c 77 61 79 73 20 7b 0a 20 20 20 20 20 20  $always {.      
2f280 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2f290 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
2f2a0 62 69 74 6d 61 70 73 3e 5d 0a 20 20 20 20 20 20  bitmaps>].      
2f2b0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20        } else {. 
2f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2f2d0 65 74 75 72 6e 20 22 22 0a 20 20 20 20 20 20 20  eturn "".       
2f2e0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
2f2f0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63  .    }..    proc
2f300 20 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 49 6d 61   CompleteFromIma
2f310 67 65 73 20 7b 74 65 78 74 20 7b 61 6c 77 61 79  ges {text {alway
2f320 73 20 31 7d 7d 20 7b 0a 20 20 20 20 20 20 20 20  s 1}} {.        
2f330 73 65 74 20 69 6e 61 6d 65 73 20 5b 69 6d 61 67  set inames [imag
2f340 65 20 6e 61 6d 65 73 5d 0a 20 20 20 20 20 20 20  e names].       
2f350 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
2f360 67 74 68 20 24 69 6e 61 6d 65 73 5d 7d 20 7b 0a  gth $inames]} {.
2f370 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2f380 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
2f390 4c 69 73 74 20 24 74 65 78 74 20 24 69 6e 61 6d  List $text $inam
2f3a0 65 73 5d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c  es].        } el
2f3b0 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
2f3c0 20 69 66 20 24 61 6c 77 61 79 73 20 7b 0a 20 20   if $always {.  
2f3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2f3e0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
2f3f0 74 73 20 3c 69 6d 61 67 65 3e 5d 0a 20 20 20 20  ts <image>].    
2f400 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
2f410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f420 20 72 65 74 75 72 6e 20 22 22 0a 20 20 20 20 20   return "".     
2f430 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2f440 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72   }.    }..    pr
2f450 6f 63 20 43 6f 6d 70 6c 65 74 65 41 6e 63 68 6f  oc CompleteAncho
2f460 72 20 74 65 78 74 20 7b 0a 20 20 20 20 20 20 20  r text {.       
2f470 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
2f480 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
2f490 7b 6e 20 6e 65 20 65 20 73 65 20 73 20 73 77 20  {n ne e se s sw 
2f4a0 77 20 6e 77 20 63 65 6e 74 65 72 7d 5d 0a 20 20  w nw center}].  
2f4b0 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 43 6f    }..    proc Co
2f4c0 6d 70 6c 65 74 65 4a 75 73 74 69 66 79 20 74 65  mpleteJustify te
2f4d0 78 74 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74  xt {.        ret
2f4e0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
2f4f0 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 6c 65 66  mList $text {lef
2f500 74 20 63 65 6e 74 65 72 20 72 69 67 68 74 7d 5d  t center right}]
2f510 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63  .    }..    proc
2f520 20 43 61 6e 76 61 73 49 74 65 6d 20 7b 74 65 78   CanvasItem {tex
2f530 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
2f540 20 70 6f 73 20 70 72 65 76 20 74 79 70 65 7d 20   pos prev type} 
2f550 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68  {.        switch
2f560 20 2d 2d 20 24 74 79 70 65 20 7b 0a 20 20 20 20   -- $type {.    
2f570 20 20 20 20 20 20 20 20 61 72 63 20 20 20 20 20          arc     
2f580 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
2f590 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70      switch -- $p
2f5a0 72 65 76 20 7b 0a 20 20 20 20 20 20 20 20 20 20  rev {.          
2f5b0 20 20 20 20 20 20 20 20 20 20 2d 65 78 74 65 6e            -exten
2f5c0 74 20 20 20 20 20 20 20 20 20 7b 20 72 65 74 75  t         { retu
2f5d0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
2f5e0 20 3c 64 65 67 72 65 65 73 3e 5d 20 7d 0a 20 20   <degrees>] }.  
2f5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f600 20 20 2d 66 69 6c 6c 20 20 20 20 20 20 20 20 20    -fill         
2f610 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20    -.            
2f620 20 20 20 20 20 20 20 20 2d 6f 75 74 6c 69 6e 65          -outline
2f630 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e          { return
2f640 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
2f650 63 6f 6c 6f 72 3e 5d 20 7d 0a 20 20 20 20 20 20  color>] }.      
2f660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 6f                -o
2f670 75 74 6c 69 6e 65 73 74 69 70 70 6c 65 20 2d 0a  utlinestipple -.
2f680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f690 20 20 20 20 2d 73 74 69 70 70 6c 65 20 20 20 20      -stipple    
2f6a0 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
2f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
2f6c0 74 20 69 6e 61 6d 65 73 20 5b 69 6d 61 67 65 20  t inames [image 
2f6d0 6e 61 6d 65 73 5d 0a 20 20 20 20 20 20 20 20 20  names].         
2f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2f6f0 65 74 20 62 69 74 6d 61 70 73 20 22 22 0a 20 20  et bitmaps "".  
2f700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f710 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61        foreach na
2f720 6d 65 20 24 69 6e 61 6d 65 73 20 7b 0a 20 20 20  me $inames {.   
2f730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f740 20 20 20 20 20 20 20 20 20 69 66 20 7b 22 62 69           if {"bi
2f750 74 6d 61 70 22 20 3d 3d 20 5b 69 6d 61 67 65 20  tmap" == [image 
2f760 74 79 70 65 20 24 6e 61 6d 65 5d 7d 20 7b 0a 20  type $name]} {. 
2f770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
2f790 61 70 70 65 6e 64 20 62 69 74 6d 61 70 73 20 24  append bitmaps $
2f7a0 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20  name.           
2f7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7c0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
2f7d0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
2f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7f0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
2f800 20 6c 65 6e 67 74 68 20 24 62 69 74 6d 61 70 73   length $bitmaps
2f810 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ]} {.           
2f820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f830 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
2f840 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
2f850 24 62 69 74 6d 61 70 73 5d 0a 20 20 20 20 20 20  $bitmaps].      
2f860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f870 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
2f880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f890 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 44         return [D
2f8a0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 62 69 74  isplayHints <bit
2f8b0 6d 61 70 73 3e 5d 0a 20 20 20 20 20 20 20 20 20  maps>].         
2f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2f8d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f8e0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
2f8f0 20 20 20 20 20 20 20 20 20 20 20 2d 73 74 61 72             -star
2f900 74 20 20 20 20 20 20 20 20 20 20 7b 20 72 65 74  t          { ret
2f910 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
2f920 73 20 3c 64 65 67 72 65 65 73 3e 5d 20 7d 0a 20  s <degrees>] }. 
2f930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f940 20 20 20 2d 73 74 79 6c 65 20 20 20 20 20 20 20     -style       
2f950 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73     { return [Dis
2f960 70 6c 61 79 48 69 6e 74 73 20 3c 74 79 70 65 3e  playHints <type>
2f970 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
2f980 20 20 20 20 20 20 20 20 2d 74 61 67 73 20 20 20          -tags   
2f990 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e          { return
2f9a0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
2f9b0 74 61 67 4c 69 73 74 3e 5d 20 7d 0a 20 20 20 20  tagList>] }.    
2f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9d0 2d 77 69 64 74 68 20 20 20 20 20 20 20 20 20 20  -width          
2f9e0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
2f9f0 79 48 69 6e 74 73 20 3c 6f 75 74 6c 69 6e 65 57  yHints <outlineW
2fa00 69 64 74 68 3e 5d 20 7d 0a 20 20 20 20 20 20 20  idth>] }.       
2fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66               def
2fa20 61 75 6c 74 20 20 20 20 20 20 20 20 20 7b 0a 20  ault         {. 
2fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa40 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43         return [C
2fa50 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
2fa60 24 74 65 78 74 20 5c 0a 20 20 20 20 20 20 20 20  $text \.        
2fa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa80 20 20 20 20 20 20 20 20 20 20 20 20 5b 52 65 6d              [Rem
2fa90 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24  oveUsedOptions $
2faa0 6c 69 6e 65 20 5c 0a 20 20 20 20 20 20 20 20 20  line \.         
2fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fad0 7b 2d 65 78 74 65 6e 74 20 2d 66 69 6c 6c 20 2d  {-extent -fill -
2fae0 6f 75 74 6c 69 6e 65 0a 20 20 20 20 20 20 20 20  outline.        
2faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb10 20 20 2d 6f 75 74 6c 69 6e 65 73 74 69 70 70 6c    -outlinestippl
2fb20 65 20 2d 73 74 61 72 74 0a 20 20 20 20 20 20 20  e -start.       
2fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb50 20 20 20 2d 73 74 69 70 70 6c 65 20 2d 73 74 79     -stipple -sty
2fb60 6c 65 20 2d 74 61 67 73 20 2d 77 69 64 74 68 7d  le -tags -width}
2fb70 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]].             
2fb80 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2fb90 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
2fba0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2fbb0 20 20 20 20 20 62 69 74 6d 61 70 20 20 20 20 7b       bitmap    {
2fbc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fbd0 20 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65 76   switch -- $prev
2fbe0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
2fbf0 20 20 20 20 20 20 20 2d 61 6e 63 68 6f 72 20 20         -anchor  
2fc00 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d     { return [Com
2fc10 70 6c 65 74 65 41 6e 63 68 6f 72 20 24 74 65 78  pleteAnchor $tex
2fc20 74 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  t] }.           
2fc30 20 20 20 20 20 20 20 20 20 2d 62 61 63 6b 67 72           -backgr
2fc40 6f 75 6e 64 20 2d 0a 20 20 20 20 20 20 20 20 20  ound -.         
2fc50 20 20 20 20 20 20 20 20 20 20 20 2d 66 6f 72 65             -fore
2fc60 67 72 6f 75 6e 64 20 7b 20 72 65 74 75 72 6e 20  ground { return 
2fc70 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 63  [DisplayHints <c
2fc80 6f 6c 6f 72 3e 5d 20 7d 0a 20 20 20 20 20 20 20  olor>] }.       
2fc90 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 62 69               -bi
2fca0 74 6d 61 70 20 20 20 20 20 7b 20 72 65 74 75 72  tmap     { retur
2fcb0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 42  n [CompleteFromB
2fcc0 69 74 6d 61 70 73 20 24 74 65 78 74 5d 20 7d 0a  itmaps $text] }.
2fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fce0 20 20 20 20 2d 74 61 67 73 20 20 20 20 20 20 20      -tags       
2fcf0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
2fd00 79 48 69 6e 74 73 20 3c 74 61 67 4c 69 73 74 3e  yHints <tagList>
2fd10 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
2fd20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20          default 
2fd30 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
2fd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2fd50 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
2fd60 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5c 0a 20  omList $text \. 
2fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd90 20 20 20 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70     [RemoveUsedOp
2fda0 74 69 6f 6e 73 20 24 6c 69 6e 65 20 5c 0a 20 20  tions $line \.  
2fdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fdd0 20 20 20 20 20 20 20 7b 2d 61 6e 63 68 6f 72 20         {-anchor 
2fde0 2d 62 61 63 6b 67 72 6f 75 6e 64 20 2d 62 69 74  -background -bit
2fdf0 6d 61 70 0a 20 20 20 20 20 20 20 20 20 20 20 20  map.            
2fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 66                -f
2fe20 6f 72 65 67 72 6f 75 6e 64 20 2d 74 61 67 73 7d  oreground -tags}
2fe30 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]].             
2fe40 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2fe50 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
2fe60 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2fe70 20 20 20 20 20 69 6d 61 67 65 20 20 20 20 20 7b       image     {
2fe80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fe90 20 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65 76   switch -- $prev
2fea0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
2feb0 20 20 20 20 20 20 20 2d 61 6e 63 68 6f 72 20 7b         -anchor {
2fec0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
2fed0 65 41 6e 63 68 6f 72 20 24 74 65 78 74 5d 20 7d  eAnchor $text] }
2fee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fef0 20 20 20 20 20 2d 69 6d 61 67 65 20 20 7b 20 72       -image  { r
2ff00 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
2ff10 72 6f 6d 49 6d 61 67 65 73 20 24 74 65 78 74 5d  romImages $text]
2ff20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
2ff30 20 20 20 20 20 20 20 2d 74 61 67 73 20 20 20 7b         -tags   {
2ff40 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
2ff50 48 69 6e 74 73 20 3c 74 61 67 4c 69 73 74 3e 5d  Hints <tagList>]
2ff60 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
2ff70 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b         default {
2ff80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ff90 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2ffa0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
2ffb0 74 20 24 74 65 78 74 20 5c 0a 20 20 20 20 20 20  t $text \.      
2ffc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 52                [R
2ffe0 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
2fff0 20 24 6c 69 6e 65 20 5c 0a 20 20 20 20 20 20 20   $line \.       
30000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30020 20 20 7b 2d 61 6e 63 68 6f 72 20 2d 69 6d 61 67    {-anchor -imag
30030 65 20 2d 74 61 67 73 7d 5d 5d 0a 20 20 20 20 20  e -tags}]].     
30040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
30050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30060 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d   }.            }
30070 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e  .            lin
30080 65 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  e      {.       
30090 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20           switch 
300a0 2d 2d 20 24 70 72 65 76 20 7b 0a 20 20 20 20 20  -- $prev {.     
300b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
300c0 61 72 72 6f 77 20 20 20 20 20 20 20 7b 20 72 65  arrow       { re
300d0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
300e0 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 6e 6f  omList $text {no
300f0 6e 65 20 66 69 72 73 74 20 6c 61 73 74 20 62 6f  ne first last bo
30100 74 68 7d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  th}] }.         
30110 20 20 20 20 20 20 20 20 20 20 20 2d 61 72 72 6f             -arro
30120 77 73 68 61 70 65 20 20 7b 20 72 65 74 75 72 6e  wshape  { return
30130 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
30140 73 68 61 70 65 3e 5d 20 7d 0a 20 20 20 20 20 20  shape>] }.      
30150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 63                -c
30160 61 70 73 74 79 6c 65 20 20 20 20 7b 20 72 65 74  apstyle    { ret
30170 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
30180 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 62 75 74  mList $text {but
30190 74 20 70 72 6f 6a 65 63 74 69 6e 67 20 72 6f 75  t projecting rou
301a0 6e 64 7d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  nd}] }.         
301b0 20 20 20 20 20 20 20 20 20 20 20 2d 66 69 6c 6c             -fill
301c0 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e          { return
301d0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
301e0 63 6f 6c 6f 72 3e 5d 20 7d 0a 20 20 20 20 20 20  color>] }.      
301f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 6a                -j
30200 6f 69 6e 73 74 79 6c 65 20 20 20 7b 20 72 65 74  oinstyle   { ret
30210 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
30220 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 62 65 76  mList $text {bev
30230 65 6c 20 6d 69 74 65 72 20 72 6f 75 6e 64 7d 5d  el miter round}]
30240 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
30250 20 20 20 20 20 20 20 2d 73 6d 6f 6f 74 68 20 20         -smooth  
30260 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f      { return [Co
30270 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e 20 24 74  mpleteBoolean $t
30280 65 78 74 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  ext] }.         
30290 20 20 20 20 20 20 20 20 20 20 20 2d 73 70 6c 69             -spli
302a0 6e 65 73 74 65 70 73 20 7b 20 72 65 74 75 72 6e  nesteps { return
302b0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
302c0 6e 75 6d 62 65 72 3e 5d 20 7d 0a 20 20 20 20 20  number>] }.     
302d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
302e0 73 74 69 70 70 6c 65 20 20 20 20 20 7b 20 72 65  stipple     { re
302f0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
30300 6f 6d 42 69 74 6d 61 70 73 20 24 74 65 78 74 5d  omBitmaps $text]
30310 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
30320 20 20 20 20 20 20 20 2d 74 61 67 73 20 20 20 20         -tags    
30330 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69      { return [Di
30340 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 67 4c  splayHints <tagL
30350 69 73 74 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20  ist>] }.        
30360 20 20 20 20 20 20 20 20 20 20 20 20 2d 77 69 64              -wid
30370 74 68 20 20 20 20 20 20 20 7b 20 72 65 74 75 72  th       { retur
30380 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
30390 3c 6c 69 6e 65 57 69 64 74 68 3e 5d 20 7d 0a 20  <lineWidth>] }. 
303a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
303b0 20 20 20 64 65 66 61 75 6c 74 20 20 20 20 20 20     default      
303c0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
303d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
303e0 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
303f0 73 74 20 24 74 65 78 74 20 5c 0a 20 20 20 20 20  st $text \.     
30400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
30420 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e  RemoveUsedOption
30430 73 20 24 6c 69 6e 65 20 5c 0a 20 20 20 20 20 20  s $line \.      
30440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30460 20 20 20 7b 2d 61 72 72 6f 77 20 2d 61 72 72 6f     {-arrow -arro
30470 77 73 68 61 70 65 20 2d 63 61 70 73 74 79 6c 65  wshape -capstyle
30480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304a0 20 20 20 20 20 20 20 20 20 20 20 2d 66 69 6c 6c             -fill
304b0 20 2d 6a 6f 69 6e 73 74 79 6c 65 20 2d 73 6d 6f   -joinstyle -smo
304c0 6f 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 20  oth.            
304d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 73                -s
304f0 70 6c 69 6e 65 73 74 65 70 73 20 2d 73 74 69 70  plinesteps -stip
30500 70 6c 65 20 2d 74 61 67 73 20 2d 77 69 64 74 68  ple -tags -width
30510 7d 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  }]].            
30520 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
30530 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
30540 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
30550 20 20 20 20 20 20 6f 76 61 6c 20 20 20 20 20 20        oval      
30560 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
30570 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65    switch -- $pre
30580 76 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v {.            
30590 20 20 20 20 20 20 20 20 2d 66 69 6c 6c 20 20 20          -fill   
305a0 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   -.             
305b0 20 20 20 20 20 20 20 2d 6f 75 74 6c 69 6e 65 20         -outline 
305c0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
305d0 79 48 69 6e 74 73 20 3c 63 6f 6c 6f 72 3e 5d 20  yHints <color>] 
305e0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
305f0 20 20 20 20 20 20 2d 73 74 69 70 70 6c 65 20 7b        -stipple {
30600 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
30610 65 46 72 6f 6d 42 69 74 6d 61 70 73 20 24 74 65  eFromBitmaps $te
30620 78 74 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  xt] }.          
30630 20 20 20 20 20 20 20 20 20 20 2d 74 61 67 73 20            -tags 
30640 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73     { return [Dis
30650 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 67 4c 69  playHints <tagLi
30660 73 74 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  st>] }.         
30670 20 20 20 20 20 20 20 20 20 20 20 2d 77 69 64 74             -widt
30680 68 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  h   { return [Di
30690 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c 69 6e 65  splayHints <line
306a0 57 69 64 74 68 3e 5d 20 7d 0a 20 20 20 20 20 20  Width>] }.      
306b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
306c0 66 61 75 6c 74 20 20 7b 0a 20 20 20 20 20 20 20  fault  {.       
306d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
306e0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
306f0 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
30700 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  \.              
30710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30720 20 20 20 20 20 20 5b 52 65 6d 6f 76 65 55 73 65        [RemoveUse
30730 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20 5c  dOptions $line \
30740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30760 20 20 20 20 20 20 20 20 20 20 7b 2d 66 69 6c 6c            {-fill
30770 20 2d 6f 75 74 6c 69 6e 65 20 2d 73 74 69 70 70   -outline -stipp
30780 6c 65 20 2d 74 61 67 73 20 2d 77 69 64 74 68 7d  le -tags -width}
30790 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]].             
307a0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
307b0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
307c0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
307d0 20 20 20 20 20 70 6f 6c 79 67 6f 6e 20 20 20 7b       polygon   {
307e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
307f0 20 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65 76   switch -- $prev
30800 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
30810 20 20 20 20 20 20 20 2d 66 69 6c 6c 20 20 20 20         -fill    
30820 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20      -.          
30830 20 20 20 20 20 20 20 20 20 20 2d 6f 75 74 6c 69            -outli
30840 6e 65 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20  ne     { return 
30850 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 63  [DisplayHints <c
30860 6f 6c 6f 72 3e 5d 20 7d 0a 20 20 20 20 20 20 20  olor>] }.       
30870 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 73 6d               -sm
30880 6f 6f 74 68 20 20 20 20 20 20 7b 20 72 65 74 75  ooth      { retu
30890 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c  rn [CompleteBool
308a0 65 61 6e 20 24 74 65 78 74 5d 20 7d 0a 20 20 20  ean $text] }.   
308b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308c0 20 2d 73 70 6c 69 6e 65 73 74 65 70 73 20 7b 20   -splinesteps { 
308d0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
308e0 69 6e 74 73 20 3c 6e 75 6d 62 65 72 3e 5d 20 7d  ints <number>] }
308f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30900 20 20 20 20 20 2d 73 74 69 70 70 6c 65 20 20 20       -stipple   
30910 20 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70    { return [Comp
30920 6c 65 74 65 46 72 6f 6d 42 69 74 6d 61 70 73 20  leteFromBitmaps 
30930 24 74 65 78 74 5d 20 7d 0a 20 20 20 20 20 20 20  $text] }.       
30940 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 74 61               -ta
30950 67 73 20 20 20 20 20 20 20 20 7b 20 72 65 74 75  gs        { retu
30960 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
30970 20 3c 74 61 67 4c 69 73 74 3e 5d 20 7d 0a 20 20   <tagList>] }.  
30980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30990 20 20 2d 77 69 64 74 68 20 20 20 20 20 20 20 7b    -width       {
309a0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
309b0 48 69 6e 74 73 20 3c 6f 75 74 6c 69 6e 65 57 69  Hints <outlineWi
309c0 64 74 68 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20  dth>] }.        
309d0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61              defa
309e0 75 6c 74 20 20 20 20 20 20 7b 0a 20 20 20 20 20  ult      {.     
309f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a00 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c     return [Compl
30a10 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  eteFromList $tex
30a20 74 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t \.            
30a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a40 20 20 20 20 20 20 20 20 5b 52 65 6d 6f 76 65 55          [RemoveU
30a50 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65  sedOptions $line
30a60 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   \.             
30a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a80 20 20 20 20 20 20 20 20 20 20 20 20 7b 2d 66 69              {-fi
30a90 6c 6c 20 2d 6f 75 74 6c 69 6e 65 20 2d 73 6d 6f  ll -outline -smo
30aa0 6f 74 68 20 2d 73 70 6c 69 6e 65 73 74 65 70 73  oth -splinesteps
30ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ad0 20 20 20 20 20 20 20 20 20 20 20 2d 73 74 69 70             -stip
30ae0 70 6c 65 20 2d 74 61 67 73 20 2d 77 69 64 74 68  ple -tags -width
30af0 7d 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  }]].            
30b00 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
30b10 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
30b20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
30b30 20 20 20 20 20 20 72 65 63 74 61 6e 67 6c 65 20        rectangle 
30b40 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
30b50 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65    switch -- $pre
30b60 76 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v {.            
30b70 20 20 20 20 20 20 20 20 2d 66 69 6c 6c 20 20 20          -fill   
30b80 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   -.             
30b90 20 20 20 20 20 20 20 2d 6f 75 74 6c 69 6e 65 20         -outline 
30ba0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
30bb0 79 48 69 6e 74 73 20 3c 63 6f 6c 6f 72 3e 5d 20  yHints <color>] 
30bc0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
30bd0 20 20 20 20 20 20 2d 73 74 69 70 70 6c 65 20 7b        -stipple {
30be0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
30bf0 65 46 72 6f 6d 42 69 74 6d 61 70 73 20 24 74 65  eFromBitmaps $te
30c00 78 74 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  xt] }.          
30c10 20 20 20 20 20 20 20 20 20 20 2d 74 61 67 73 20            -tags 
30c20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73     { return [Dis
30c30 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 67 4c 69  playHints <tagLi
30c40 73 74 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  st>] }.         
30c50 20 20 20 20 20 20 20 20 20 20 20 2d 77 69 64 74             -widt
30c60 68 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  h   { return [Di
30c70 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c 69 6e 65  splayHints <line
30c80 57 69 64 74 68 3e 5d 20 7d 0a 20 20 20 20 20 20  Width>] }.      
30c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
30ca0 66 61 75 6c 74 20 20 7b 0a 20 20 20 20 20 20 20  fault  {.       
30cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30cc0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
30cd0 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
30ce0 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  \.              
30cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d00 20 20 20 20 20 20 5b 52 65 6d 6f 76 65 55 73 65        [RemoveUse
30d10 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20 5c  dOptions $line \
30d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d40 20 20 20 20 20 20 20 20 20 20 7b 2d 66 69 6c 6c            {-fill
30d50 20 2d 6f 75 74 6c 69 6e 65 20 2d 73 74 69 70 70   -outline -stipp
30d60 6c 65 20 2d 74 61 67 73 20 2d 77 69 64 74 68 7d  le -tags -width}
30d70 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]].             
30d80 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
30d90 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
30da0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
30db0 20 20 20 20 20 74 65 78 74 20 20 20 20 20 20 7b       text      {
30dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30dd0 20 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65 76   switch -- $prev
30de0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
30df0 20 20 20 20 20 20 20 2d 61 6e 63 68 6f 72 20 20         -anchor  
30e00 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
30e10 74 65 41 6e 63 68 6f 72 20 24 74 65 78 74 5d 20  teAnchor $text] 
30e20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
30e30 20 20 20 20 20 20 2d 66 69 6c 6c 20 20 20 20 7b        -fill    {
30e40 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
30e50 48 69 6e 74 73 20 3c 63 6f 6c 6f 72 3e 5d 20 7d  Hints <color>] }
30e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30e70 20 20 20 20 20 2d 66 6f 6e 74 20 20 20 20 7b 20       -font    { 
30e80 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
30e90 69 6e 74 73 20 3c 66 6f 6e 74 3e 5d 20 7d 0a 20  ints <font>] }. 
30ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30eb0 20 20 20 2d 6a 75 73 74 69 66 79 20 7b 20 72 65     -justify { re
30ec0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 4a 75  turn [CompleteJu
30ed0 73 74 69 66 79 20 24 74 65 78 74 5d 20 7d 0a 20  stify $text] }. 
30ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ef0 20 20 20 2d 73 74 69 70 70 6c 65 20 7b 20 72 65     -stipple { re
30f00 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
30f10 6f 6d 42 69 74 6d 61 70 73 20 24 74 65 78 74 5d  omBitmaps $text]
30f20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
30f30 20 20 20 20 20 20 20 2d 74 61 67 73 20 20 20 20         -tags    
30f40 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
30f50 79 48 69 6e 74 73 20 3c 74 61 67 4c 69 73 74 3e  yHints <tagList>
30f60 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
30f70 20 20 20 20 20 20 20 20 2d 74 65 78 74 20 20 20          -text   
30f80 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
30f90 61 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e  ayHints <string>
30fa0 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
30fb0 20 20 20 20 20 20 20 20 2d 77 69 64 74 68 20 20          -width  
30fc0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
30fd0 61 79 48 69 6e 74 73 20 3c 6c 69 6e 65 4c 65 6e  ayHints <lineLen
30fe0 67 74 68 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20  gth>] }.        
30ff0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61              defa
31000 75 6c 74 20 20 7b 0a 20 20 20 20 20 20 20 20 20  ult  {.         
31010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
31020 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
31030 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5c 0a  romList $text \.
31040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31060 20 20 20 20 5b 52 65 6d 6f 76 65 55 73 65 64 4f      [RemoveUsedO
31070 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20 5c 0a 20  ptions $line \. 
31080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310a0 20 20 20 20 20 20 20 20 7b 2d 61 6e 63 68 6f 72          {-anchor
310b0 20 2d 66 69 6c 6c 20 2d 66 6f 6e 74 20 2d 6a 75   -fill -font -ju
310c0 73 74 69 66 79 0a 20 20 20 20 20 20 20 20 20 20  stify.          
310d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310f0 2d 73 74 69 70 70 6c 65 20 2d 74 61 67 73 20 2d  -stipple -tags -
31100 74 65 78 74 20 2d 77 69 64 74 68 7d 5d 5d 0a 20  text -width}]]. 
31110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31120 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
31130 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
31140 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
31150 20 77 69 6e 64 6f 77 20 20 20 20 7b 0a 20 20 20   window    {.   
31160 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69               swi
31170 74 63 68 20 2d 2d 20 24 70 72 65 76 20 7b 0a 20  tch -- $prev {. 
31180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31190 20 20 20 2d 61 6e 63 68 6f 72 20 7b 20 72 65 74     -anchor { ret
311a0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 41 6e 63  urn [CompleteAnc
311b0 68 6f 72 20 24 74 65 78 74 5d 20 7d 0a 20 20 20  hor $text] }.   
311c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311d0 20 2d 68 65 69 67 68 74 20 7b 20 72 65 74 75 72   -height { retur
311e0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
311f0 3c 70 69 78 65 6c 73 3e 5d 20 7d 0a 20 20 20 20  <pixels>] }.    
31200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31210 2d 74 61 67 73 20 20 20 7b 20 72 65 74 75 72 6e  -tags   { return
31220 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
31230 74 61 67 4c 69 73 74 3e 5d 20 7d 0a 20 20 20 20  tagList>] }.    
31240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31250 2d 77 69 64 74 68 20 20 7b 20 72 65 74 75 72 6e  -width  { return
31260 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
31270 6c 69 6e 65 57 69 64 74 68 3e 5d 20 7d 0a 20 20  lineWidth>] }.  
31280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31290 20 20 2d 77 69 6e 64 6f 77 20 7b 20 72 65 74 75    -window { retu
312a0 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20  rn [TryFromList 
312b0 24 74 65 78 74 20 5b 57 69 64 67 65 74 43 68 69  $text [WidgetChi
312c0 6c 64 72 65 6e 20 24 74 65 78 74 5d 5d 20 7d 0a  ldren $text]] }.
312d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312e0 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 20      default {.  
312f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31300 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f        return [Co
31310 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
31320 74 65 78 74 20 5c 0a 20 20 20 20 20 20 20 20 20  text \.         
31330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31340 20 20 20 20 20 20 20 20 20 20 20 5b 52 65 6d 6f             [Remo
31350 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c  veUsedOptions $l
31360 69 6e 65 20 5c 0a 20 20 20 20 20 20 20 20 20 20  ine \.          
31370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
31390 2d 61 6e 63 68 6f 72 20 2d 68 65 69 67 68 74 20  -anchor -height 
313a0 2d 74 61 67 73 20 2d 77 69 64 74 68 20 2d 77 69  -tags -width -wi
313b0 6e 64 6f 77 7d 5d 5d 0a 20 20 20 20 20 20 20 20  ndow}]].        
313c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
313d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
313e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
313f0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
31400 20 20 20 23 2a 2a 0a 20 20 20 20 23 20 57 69 64     #**.    # Wid
31410 67 65 74 58 76 69 65 77 59 76 69 65 77 0a 20 20  getXviewYview.  
31420 20 20 23 0a 20 20 20 20 23 20 40 70 61 72 61 6d    #.    # @param
31430 20 20 20 20 74 65 78 74 20 20 2d 2d 20 74 68 65      text  -- the
31440 20 77 6f 72 64 20 74 6f 20 63 6f 6d 70 6c 65 74   word to complet
31450 65 2e 0a 20 20 20 20 23 20 40 70 61 72 61 6d 20  e..    # @param 
31460 20 20 20 6c 69 6e 65 20 20 2d 2d 20 74 68 65 20     line  -- the 
31470 6c 69 6e 65 20 67 61 74 68 65 72 65 64 20 73 6f  line gathered so
31480 20 66 61 72 2e 0a 20 20 20 20 23 20 40 70 61 72   far..    # @par
31490 61 6d 20 20 20 20 70 6f 73 20 20 20 2d 2d 20 74  am    pos   -- t
314a0 68 65 20 63 75 72 72 65 6e 74 20 77 6f 72 64 20  he current word 
314b0 70 6f 73 69 74 69 6f 6e 2e 0a 20 20 20 20 23 20  position..    # 
314c0 40 70 61 72 61 6d 20 20 20 20 70 72 65 76 20 20  @param    prev  
314d0 2d 2d 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  -- the previous 
314e0 77 6f 72 64 2e 0a 20 20 20 20 23 20 40 72 65 74  word..    # @ret
314f0 75 72 6e 20 20 20 61 20 73 74 64 20 74 63 6c 72  urn   a std tclr
31500 65 61 64 6c 69 6e 65 20 66 6f 72 6d 61 74 74 65  eadline formatte
31510 64 20 63 6f 6d 70 6c 65 74 65 72 20 73 74 72 69  d completer stri
31520 6e 67 2e 0a 20 20 20 20 23 20 40 73 61 20 20 20  ng..    # @sa   
31530 20 20 20 20 43 61 6e 76 61 73 4f 62 6a 2c 20 45      CanvasObj, E
31540 6e 74 72 79 4f 62 6a 0a 20 20 20 20 23 0a 20 20  ntryObj.    #.  
31550 20 20 70 72 6f 63 20 57 69 64 67 65 74 58 76 69    proc WidgetXvi
31560 65 77 59 76 69 65 77 20 7b 74 65 78 74 20 6c 69  ewYview {text li
31570 6e 65 20 70 6f 73 20 70 72 65 76 7d 20 7b 0a 20  ne pos prev} {. 
31580 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
31590 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20   $pos {.        
315a0 20 20 20 20 32 20 7b 20 72 65 74 75 72 6e 20 5b      2 { return [
315b0 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
315c0 20 24 74 65 78 74 20 7b 3c 69 6e 64 65 78 3e 20   $text {<index> 
315d0 6d 6f 76 65 74 6f 20 73 63 72 6f 6c 6c 7d 5d 20  moveto scroll}] 
315e0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 33 20  }.            3 
315f0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
31600 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65    switch -- $pre
31610 76 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v {.            
31620 20 20 20 20 20 20 20 20 6d 6f 76 65 74 6f 20 7b          moveto {
31630 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
31640 48 69 6e 74 73 20 3c 66 72 61 63 74 69 6f 6e 3e  Hints <fraction>
31650 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
31660 20 20 20 20 20 20 20 20 73 63 72 6f 6c 6c 20 7b          scroll {
31670 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
31680 48 69 6e 74 73 20 3c 6e 75 6d 62 65 72 3e 5d 20  Hints <number>] 
31690 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
316a0 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
316b0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 34 20  }.            4 
316c0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
316d0 20 20 73 65 74 20 73 75 62 63 6d 64 20 5b 4c 69    set subcmd [Li
316e0 6e 64 65 78 20 24 6c 69 6e 65 20 32 5d 0a 20 20  ndex $line 2].  
316f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77                sw
31700 69 74 63 68 20 2d 2d 20 24 73 75 62 63 6d 64 20  itch -- $subcmd 
31710 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
31720 20 20 20 20 20 20 73 63 72 6f 6c 6c 20 7b 20 72        scroll { r
31730 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
31740 6e 74 73 20 3c 77 68 61 74 3e 5d 20 7d 0a 20 20  nts <what>] }.  
31750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
31760 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
31770 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
31780 20 20 20 23 2a 2a 0a 20 20 20 20 23 20 57 69 64     #**.    # Wid
31790 67 65 74 53 63 61 6e 0a 20 20 20 20 23 0a 20 20  getScan.    #.  
317a0 20 20 23 20 40 70 61 72 61 6d 20 20 20 20 74 65    # @param    te
317b0 78 74 20 20 2d 2d 20 74 68 65 20 77 6f 72 64 20  xt  -- the word 
317c0 74 6f 20 63 6f 6d 70 6c 65 74 65 2e 0a 20 20 20  to complete..   
317d0 20 23 20 40 70 61 72 61 6d 20 20 20 20 70 6f 73   # @param    pos
317e0 20 20 20 2d 2d 20 74 68 65 20 63 75 72 72 65 6e     -- the curren
317f0 74 20 77 6f 72 64 20 70 6f 73 69 74 69 6f 6e 2e  t word position.
31800 0a 20 20 20 20 23 20 40 72 65 74 75 72 6e 20 20  .    # @return  
31810 20 61 20 73 74 64 20 74 63 6c 72 65 61 64 6c 69   a std tclreadli
31820 6e 65 20 66 6f 72 6d 61 74 74 65 64 20 63 6f 6d  ne formatted com
31830 70 6c 65 74 65 72 20 73 74 72 69 6e 67 2e 0a 20  pleter string.. 
31840 20 20 20 23 20 40 73 61 20 20 20 20 20 20 20 43     # @sa       C
31850 61 6e 76 61 73 4f 62 6a 2c 20 45 6e 74 72 79 4f  anvasObj, EntryO
31860 62 6a 0a 20 20 20 20 23 0a 20 20 20 20 70 72 6f  bj.    #.    pro
31870 63 20 57 69 64 67 65 74 53 63 61 6e 20 7b 74 65  c WidgetScan {te
31880 78 74 20 70 6f 73 7d 20 7b 0a 20 20 20 20 20 20  xt pos} {.      
31890 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73    switch -- $pos
318a0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 32   {.            2
318b0 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c   { return [Compl
318c0 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  eteFromList $tex
318d0 74 20 7b 6d 61 72 6b 20 64 72 61 67 74 6f 7d 5d  t {mark dragto}]
318e0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 33   }.            3
318f0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
31900 61 79 48 69 6e 74 73 20 3c 78 3e 5d 20 7d 0a 20  ayHints <x>] }. 
31910 20 20 20 20 20 20 20 20 20 20 20 34 20 7b 20 72             4 { r
31920 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
31930 6e 74 73 20 3c 79 3e 5d 20 7d 0a 20 20 20 20 20  nts <y>] }.     
31940 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
31950 70 72 6f 63 20 43 61 6e 76 61 73 4f 62 6a 20 7b  proc CanvasObj {
31960 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
31970 69 6e 65 20 70 6f 73 7d 20 7b 0a 20 20 20 20 20  ine pos} {.     
31980 20 20 20 73 65 74 20 73 75 62 20 5b 4c 69 6e 64     set sub [Lind
31990 65 78 20 24 6c 69 6e 65 20 31 5d 0a 20 20 20 20  ex $line 1].    
319a0 20 20 20 20 73 65 74 20 70 72 65 76 20 5b 50 72      set prev [Pr
319b0 65 76 69 6f 75 73 57 6f 72 64 20 24 73 74 61 72  eviousWord $star
319c0 74 20 24 6c 69 6e 65 5d 0a 20 20 20 20 20 20 20  t $line].       
319d0 20 69 66 20 7b 31 20 3d 3d 20 24 70 6f 73 7d 20   if {1 == $pos} 
319e0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  {.            re
319f0 74 75 72 6e 20 5b 54 72 79 53 75 62 43 6d 64 73  turn [TrySubCmds
31a00 20 24 74 65 78 74 20 5b 4c 69 6e 64 65 78 20 24   $text [Lindex $
31a10 6c 69 6e 65 20 30 5d 5d 0a 20 20 20 20 20 20 20  line 0]].       
31a20 20 7d 0a 20 20 20 20 20 20 20 20 73 77 69 74 63   }.        switc
31a30 68 20 2d 2d 20 24 73 75 62 20 7b 0a 20 20 20 20  h -- $sub {.    
31a40 20 20 20 20 20 20 20 20 61 64 64 74 61 67 20 20          addtag  
31a50 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
31a60 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d          switch -
31a70 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20  - $pos {.       
31a80 20 20 20 20 20 20 20 20 20 20 20 20 20 32 20 20               2  
31a90 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44       { return [D
31aa0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 67  isplayHints <tag
31ab0 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  >] }.           
31ac0 20 20 20 20 20 20 20 20 20 33 20 20 20 20 20 20           3      
31ad0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
31ae0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
31af0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
31b00 69 73 74 20 24 74 65 78 74 20 5c 0a 20 20 20 20  ist $text \.    
31b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b30 7b 61 62 6f 76 65 20 61 6c 6c 20 62 65 6c 6f 77  {above all below
31b40 20 63 6c 6f 73 65 73 74 20 65 6e 63 6c 6f 73 65   closest enclose
31b50 64 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 77 69  d overlapping wi
31b60 74 68 74 61 67 7d 5d 0a 20 20 20 20 20 20 20 20  thtag}].        
31b70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
31b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b90 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20    default {.    
31ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bb0 20 20 20 20 73 65 74 20 73 65 61 72 63 68 20 5b      set search [
31bc0 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 33 5d 0a  Lindex $line 3].
31bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31be0 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d          switch -
31bf0 2d 20 24 73 65 61 72 63 68 20 7b 0a 20 20 20 20  - $search {.    
31c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c10 20 20 20 20 20 20 20 20 61 6c 6c 20 20 20 20 20          all     
31c20 20 20 20 20 7b 7d 0a 20 20 20 20 20 20 20 20 20      {}.         
31c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c40 20 20 20 61 62 6f 76 65 20 20 20 20 20 20 20 2d     above       -
31c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31c60 20 20 20 20 20 20 20 20 20 20 20 20 20 77 69 74               wit
31c70 68 74 61 67 20 20 20 20 20 2d 0a 20 20 20 20 20  htag     -.     
31c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c90 20 20 20 20 20 20 20 62 65 6c 6f 77 20 20 20 20         below    
31ca0 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73     { return [Dis
31cb0 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 67 4f 72  playHints <tagOr
31cc0 49 64 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  Id>] }.         
31cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ce0 20 20 20 63 6c 6f 73 65 73 74 20 20 20 20 20 7b     closest     {
31cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d10 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20   switch -- $pos 
31d20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
31d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d40 20 20 20 20 20 20 34 20 7b 20 72 65 74 75 72 6e        4 { return
31d50 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
31d60 78 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  x>] }.          
31d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d80 20 20 20 20 20 20 20 20 20 20 35 20 7b 20 72 65            5 { re
31d90 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
31da0 74 73 20 3c 79 3e 5d 20 7d 0a 20 20 20 20 20 20  ts <y>] }.      
31db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 36 20                6 
31dd0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
31de0 79 48 69 6e 74 73 20 3f 68 61 6c 6f 3f 5d 20 7d  yHints ?halo?] }
31df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e10 20 20 20 20 20 37 20 7b 20 72 65 74 75 72 6e 20       7 { return 
31e20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 73  [DisplayHints ?s
31e30 74 61 72 74 3f 5d 20 7d 0a 20 20 20 20 20 20 20  tart?] }.       
31e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e50 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
31e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e70 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
31e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e90 20 20 20 20 20 65 6e 63 6c 6f 73 65 64 20 20 20       enclosed   
31ea0 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   -.             
31eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
31ec0 76 65 72 6c 61 70 70 69 6e 67 20 7b 0a 20 20 20  verlapping {.   
31ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69               swi
31ef0 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20  tch -- $pos {.  
31f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f20 20 20 34 20 7b 20 72 65 74 75 72 6e 20 5b 44 69    4 { return [Di
31f30 73 70 6c 61 79 48 69 6e 74 73 20 3c 78 31 3e 5d  splayHints <x1>]
31f40 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
31f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f60 20 20 20 20 20 20 20 35 20 7b 20 72 65 74 75 72         5 { retur
31f70 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
31f80 3c 79 31 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20  <y1>] }.        
31f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fa0 20 20 20 20 20 20 20 20 20 20 20 20 36 20 7b 20              6 { 
31fb0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
31fc0 69 6e 74 73 20 3c 78 32 3e 5d 20 7d 0a 20 20 20  ints <x2>] }.   
31fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ff0 20 37 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73   7 { return [Dis
32000 70 6c 61 79 48 69 6e 74 73 20 3c 79 32 3e 5d 20  playHints <y2>] 
32010 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
32020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32030 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
32040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32050 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
32060 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
32070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32080 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
32090 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
320a0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 62  }.            bb
320b0 6f 78 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20  ox          {.  
320c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77                sw
320d0 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20  itch -- $pos {. 
320e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320f0 20 20 20 32 20 20 20 20 20 20 20 7b 20 72 65 74     2       { ret
32100 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
32110 73 20 3c 74 61 67 4f 72 49 64 3e 5d 20 7d 0a 20  s <tagOrId>] }. 
32120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32130 20 20 20 64 65 66 61 75 6c 74 20 7b 20 72 65 74     default { ret
32140 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
32150 73 20 3f 74 61 67 4f 72 49 64 3f 5d 20 7d 0a 20  s ?tagOrId?] }. 
32160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
32170 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
32180 20 20 20 20 20 20 20 20 20 20 20 62 69 6e 64 20             bind 
32190 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
321a0 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63             switc
321b0 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20  h -- $pos {.    
321c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321d0 32 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e  2       { return
321e0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
321f0 74 61 67 4f 72 49 64 3e 5d 20 7d 0a 20 20 20 20  tagOrId>] }.    
32200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32210 33 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  3       {.      
32220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32230 20 20 73 65 74 20 66 75 6c 6c 74 65 78 74 20 5b    set fulltext [
32240 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 33 5d 0a  Lindex $line 3].
32250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32260 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
32270 43 6f 6d 70 6c 65 74 65 53 65 71 75 65 6e 63 65  CompleteSequence
32280 20 24 74 65 78 74 20 24 66 75 6c 6c 74 65 78 74   $text $fulltext
32290 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
322a0 20 20 20 20 20 20 20 20 20 20 23 20 72 65 74 75            # retu
322b0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
322c0 20 3f 73 65 71 75 65 6e 63 65 3f 5d 0a 20 20 20   ?sequence?].   
322d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322e0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
322f0 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b         default {
32300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32310 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
32320 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e 64 20  [BraceOrCommand 
32330 24 74 65 78 74 20 24 73 74 61 72 74 20 24 65 6e  $text $start $en
32340 64 20 24 6c 69 6e 65 20 24 70 6f 73 20 24 74 65  d $line $pos $te
32350 78 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  xt].            
32360 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
32370 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
32380 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
32390 20 20 20 20 20 20 63 61 6e 76 61 73 78 20 20 20        canvasx   
323a0 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
323b0 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
323c0 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20  $pos {.         
323d0 20 20 20 20 20 20 20 20 20 20 20 32 20 7b 20 72             2 { r
323e0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
323f0 6e 74 73 20 3c 73 63 72 65 65 6e 78 3e 5d 20 7d  nts <screenx>] }
32400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32410 20 20 20 20 20 33 20 7b 20 72 65 74 75 72 6e 20       3 { return 
32420 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 67  [DisplayHints ?g
32430 72 69 64 73 70 61 63 69 6e 67 3f 5d 20 7d 0a 20  ridspacing?] }. 
32440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
32450 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
32460 20 20 20 20 20 20 20 20 20 20 20 63 61 6e 76 61             canva
32470 73 79 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  sy       {.     
32480 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63             switc
32490 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20  h -- $pos {.    
324a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324b0 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  2 { return [Disp
324c0 6c 61 79 48 69 6e 74 73 20 3c 73 63 72 65 65 6e  layHints <screen
324d0 79 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  y>] }.          
324e0 20 20 20 20 20 20 20 20 20 20 33 20 7b 20 72 65            3 { re
324f0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
32500 74 73 20 3f 67 72 69 64 73 70 61 63 69 6e 67 3f  ts ?gridspacing?
32510 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
32520 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
32530 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
32540 63 6f 6f 72 64 73 20 20 20 20 20 20 20 20 7b 0a  coords        {.
32550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32560 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
32570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32580 20 20 20 20 20 32 20 20 20 20 20 20 20 7b 20 72       2       { r
32590 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
325a0 6e 74 73 20 3c 74 61 67 4f 72 49 64 3e 5d 20 7d  nts <tagOrId>] }
325b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
325c0 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20       default {. 
325d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325e0 20 20 20 20 20 20 20 73 77 69 74 63 68 20 5b 65         switch [e
325f0 78 70 72 20 7b 24 70 6f 73 20 25 20 32 7d 5d 20  xpr {$pos % 2}] 
32600 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
32610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31 20                1 
32620 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
32630 79 48 69 6e 74 73 20 3f 78 3f 5d 20 7d 0a 20 20  yHints ?x?] }.  
32640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32650 20 20 20 20 20 20 20 20 20 20 30 20 7b 20 72 65            0 { re
32660 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
32670 74 73 20 3f 79 3f 5d 20 7d 0a 20 20 20 20 20 20  ts ?y?] }.      
32680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32690 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
326a0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
326b0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
326c0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
326d0 20 20 20 20 20 20 64 63 68 61 72 73 20 20 20 20        dchars    
326e0 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
326f0 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
32700 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20  $pos {.         
32710 20 20 20 20 20 20 20 20 20 20 20 32 20 7b 20 72             2 { r
32720 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
32730 6e 74 73 20 3c 74 61 67 4f 72 49 64 3e 5d 20 7d  nts <tagOrId>] }
32740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32750 20 20 20 20 20 33 20 7b 20 72 65 74 75 72 6e 20       3 { return 
32760 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 66  [DisplayHints <f
32770 69 72 73 74 3e 5d 20 7d 0a 20 20 20 20 20 20 20  irst>] }.       
32780 20 20 20 20 20 20 20 20 20 20 20 20 20 34 20 7b               4 {
32790 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
327a0 48 69 6e 74 73 20 3f 6c 61 73 74 3f 5d 20 7d 0a  Hints ?last?] }.
327b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327c0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
327d0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 6c 65              dele
327e0 74 65 20 20 20 20 20 20 20 20 7b 20 72 65 74 75  te        { retu
327f0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
32800 20 3f 74 61 67 4f 72 49 64 3f 5d 20 7d 0a 20 20   ?tagOrId?] }.  
32810 20 20 20 20 20 20 20 20 20 20 64 74 61 67 20 20            dtag  
32820 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
32830 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68            switch
32840 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20   -- $pos {.     
32850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
32860 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
32870 61 79 48 69 6e 74 73 20 3c 74 61 67 4f 72 49 64  ayHints <tagOrId
32880 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  >] }.           
32890 20 20 20 20 20 20 20 20 20 33 20 7b 20 72 65 74           3 { ret
328a0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
328b0 73 20 3f 74 61 67 54 6f 44 65 6c 65 74 65 3f 5d  s ?tagToDelete?]
328c0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
328d0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
328e0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66   }.            f
328f0 69 6e 64 20 20 20 20 20 20 20 20 20 20 7b 0a 20  ind          {. 
32900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
32910 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
32920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32930 20 20 20 20 32 20 20 20 20 20 20 20 7b 20 72 65      2       { re
32940 74 75 72 6e 20 5b 54 72 79 53 75 62 43 6d 64 73  turn [TrySubCmds
32950 20 24 74 65 78 74 20 5b 4c 72 61 6e 67 65 20 24   $text [Lrange $
32960 6c 69 6e 65 20 30 20 31 5d 5d 20 7d 0a 20 20 20  line 0 1]] }.   
32970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32980 20 64 65 66 61 75 6c 74 20 7b 20 72 65 74 75 72   default { retur
32990 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
329a0 3f 61 72 67 3f 5d 20 7d 0a 20 20 20 20 20 20 20  ?arg?] }.       
329b0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
329c0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
329d0 20 20 20 20 20 66 6f 63 75 73 20 20 20 20 20 20       focus      
329e0 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
329f0 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24       switch -- $
32a00 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20  pos {.          
32a10 20 20 20 20 20 20 20 20 20 20 32 20 7b 20 72 65            2 { re
32a20 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
32a30 74 73 20 3f 74 61 67 4f 72 49 64 3f 5d 20 7d 0a  ts ?tagOrId?] }.
32a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a50 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
32a60 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 74              gett
32a70 61 67 73 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ags       {.    
32a80 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74              swit
32a90 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20  ch -- $pos {.   
32aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ab0 20 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73   2 { return [Dis
32ac0 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 67 4f 72  playHints <tagOr
32ad0 49 64 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  Id>] }.         
32ae0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
32af0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
32b00 20 20 20 69 63 75 72 73 6f 72 20 20 20 20 20 20     icursor      
32b10 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69   -.            i
32b20 6e 64 65 78 20 20 20 20 20 20 20 20 20 7b 0a 20  ndex         {. 
32b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
32b40 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
32b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b60 20 20 20 20 32 20 7b 20 72 65 74 75 72 6e 20 5b      2 { return [
32b70 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 61  DisplayHints <ta
32b80 67 4f 72 49 64 3e 5d 20 7d 0a 20 20 20 20 20 20  gOrId>] }.      
32b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33 20                3 
32ba0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
32bb0 79 48 69 6e 74 73 20 3c 69 6e 64 65 78 3e 5d 20  yHints <index>] 
32bc0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
32bd0 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
32be0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  }.            in
32bf0 73 65 72 74 20 20 20 20 20 20 20 20 7b 0a 20 20  sert        {.  
32c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77                sw
32c10 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20  itch -- $pos {. 
32c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c30 20 20 20 32 20 7b 20 72 65 74 75 72 6e 20 5b 44     2 { return [D
32c40 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 67  isplayHints <tag
32c50 4f 72 49 64 3e 5d 20 7d 0a 20 20 20 20 20 20 20  OrId>] }.       
32c60 20 20 20 20 20 20 20 20 20 20 20 20 20 33 20 7b               3 {
32c70 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
32c80 48 69 6e 74 73 20 3c 62 65 66 6f 72 65 54 68 69  Hints <beforeThi
32c90 73 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  s>] }.          
32ca0 20 20 20 20 20 20 20 20 20 20 34 20 7b 20 72 65            4 { re
32cb0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
32cc0 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 20  ts <string>] }. 
32cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
32ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
32cf0 20 20 20 20 20 20 20 20 20 20 20 6c 6f 77 65 72             lower
32d00 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
32d10 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63             switc
32d20 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20  h -- $pos {.    
32d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d40 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  2 { return [Disp
32d50 6c 61 79 48 69 6e 74 73 20 3c 74 61 67 4f 72 49  layHints <tagOrI
32d60 64 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  d>] }.          
32d70 20 20 20 20 20 20 20 20 20 20 33 20 7b 20 72 65            3 { re
32d80 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
32d90 74 73 20 3f 62 65 6c 6f 77 54 68 69 73 3f 5d 20  ts ?belowThis?] 
32da0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
32db0 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
32dc0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f  }.            mo
32dd0 76 65 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20  ve          {.  
32de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77                sw
32df0 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20  itch -- $pos {. 
32e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e10 20 20 20 32 20 7b 20 72 65 74 75 72 6e 20 5b 44     2 { return [D
32e20 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 67  isplayHints <tag
32e30 4f 72 49 64 3e 5d 20 7d 0a 20 20 20 20 20 20 20  OrId>] }.       
32e40 20 20 20 20 20 20 20 20 20 20 20 20 20 33 20 7b               3 {
32e50 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
32e60 48 69 6e 74 73 20 3c 78 41 6d 6f 75 6e 74 3e 5d  Hints <xAmount>]
32e70 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
32e80 20 20 20 20 20 20 20 34 20 7b 20 72 65 74 75 72         4 { retur
32e90 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
32ea0 3c 79 41 6d 6f 75 6e 74 3e 5d 20 7d 0a 20 20 20  <yAmount>] }.   
32eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
32ec0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
32ed0 20 20 20 20 20 20 20 20 20 70 6f 73 74 73 63 72           postscr
32ee0 69 70 74 20 20 20 20 7b 0a 20 20 20 20 20 20 20  ipt    {.       
32ef0 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20           switch 
32f00 2d 2d 20 24 70 72 65 76 20 7b 0a 20 20 20 20 20  -- $prev {.     
32f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
32f20 66 69 6c 65 20 20 20 20 20 20 20 7b 20 72 65 74  file       { ret
32f30 75 72 6e 20 22 22 20 7d 0a 20 20 20 20 20 20 20  urn "" }.       
32f40 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 63 6f               -co
32f50 6c 6f 72 6d 61 70 20 20 20 2d 0a 20 20 20 20 20  lormap   -.     
32f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
32f70 63 6f 6c 6f 72 6d 6f 64 65 20 20 2d 0a 20 20 20  colormode  -.   
32f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f90 20 2d 66 6f 6e 74 6d 61 70 20 20 20 20 2d 0a 20   -fontmap    -. 
32fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fb0 20 20 20 2d 68 65 69 67 68 74 20 20 20 20 20 2d     -height     -
32fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32fd0 20 20 20 20 20 2d 70 61 67 65 61 6e 63 68 6f 72       -pageanchor
32fe0 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   -.             
32ff0 20 20 20 20 20 20 20 2d 70 61 67 65 68 65 69 67         -pageheig
33000 68 74 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20  ht -.           
33010 20 20 20 20 20 20 20 20 20 2d 70 61 67 65 77 69           -pagewi
33020 64 74 68 20 20 2d 0a 20 20 20 20 20 20 20 20 20  dth  -.         
33030 20 20 20 20 20 20 20 20 20 20 20 2d 70 61 67 65             -page
33040 78 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20  x      -.       
33050 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 70 61               -pa
33060 67 65 79 20 20 20 20 20 20 2d 0a 20 20 20 20 20  gey      -.     
33070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
33080 72 6f 74 61 74 65 20 20 20 20 20 2d 0a 20 20 20  rotate     -.   
33090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330a0 20 2d 77 69 64 74 68 20 20 20 20 20 20 2d 0a 20   -width      -. 
330b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330c0 20 20 20 2d 78 20 20 20 20 20 20 20 20 20 20 2d     -x          -
330d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
330e0 20 20 20 20 20 2d 79 20 20 20 20 20 20 20 20 20       -y         
330f0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
33100 61 79 48 69 6e 74 73 20 3c 5b 53 74 72 69 6e 67  ayHints <[String
33110 20 72 61 6e 67 65 20 24 70 72 65 76 20 31 20 65   range $prev 1 e
33120 6e 64 5d 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20  nd]>] }.        
33130 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61              defa
33140 75 6c 74 20 20 20 20 20 7b 0a 20 20 20 20 20 20  ult     {.      
33150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33160 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65    return [Comple
33170 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  teFromList $text
33180 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   \.             
33190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
331a0 20 20 20 20 20 20 20 5b 52 65 6d 6f 76 65 55 73         [RemoveUs
331b0 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20  edOptions $line 
331c0 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  \.              
331d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
331e0 20 20 20 20 20 20 20 20 20 20 20 7b 2d 63 6f 6c             {-col
331f0 6f 72 6d 61 70 20 2d 63 6f 6c 6f 72 6d 6f 64 65  ormap -colormode
33200 20 2d 66 69 6c 65 20 2d 66 6f 6e 74 6d 61 70 20   -file -fontmap 
33210 2d 68 65 69 67 68 74 0a 20 20 20 20 20 20 20 20  -height.        
33220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33240 20 20 2d 70 61 67 65 61 6e 63 68 6f 72 20 2d 70    -pageanchor -p
33250 61 67 65 68 65 69 67 68 74 20 2d 70 61 67 65 77  ageheight -pagew
33260 69 64 74 68 20 2d 70 61 67 65 78 0a 20 20 20 20  idth -pagex.    
33270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33290 20 20 20 20 20 20 2d 70 61 67 65 79 20 2d 72 6f        -pagey -ro
332a0 74 61 74 65 20 2d 77 69 64 74 68 20 2d 78 20 2d  tate -width -x -
332b0 79 7d 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20  y}]].           
332c0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
332d0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
332e0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
332f0 20 20 20 20 20 20 20 72 61 69 73 65 20 20 20 20         raise    
33300 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
33310 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
33320 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20   $pos {.        
33330 20 20 20 20 20 20 20 20 20 20 20 20 32 20 7b 20              2 { 
33340 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
33350 69 6e 74 73 20 3c 74 61 67 4f 72 49 64 3e 5d 20  ints <tagOrId>] 
33360 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
33370 20 20 20 20 20 20 33 20 7b 20 72 65 74 75 72 6e        3 { return
33380 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
33390 61 62 6f 76 65 54 68 69 73 3f 5d 20 7d 0a 20 20  aboveThis?] }.  
333a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
333b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
333c0 20 20 20 20 20 20 20 20 20 20 73 63 61 6c 65 20            scale 
333d0 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
333e0 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68            switch
333f0 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20   -- $pos {.     
33400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
33410 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
33420 61 79 48 69 6e 74 73 20 3c 74 61 67 4f 72 49 64  ayHints <tagOrId
33430 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  >] }.           
33440 20 20 20 20 20 20 20 20 20 33 20 7b 20 72 65 74           3 { ret
33450 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
33460 73 20 3c 78 4f 72 69 67 69 6e 3e 5d 20 7d 0a 20  s <xOrigin>] }. 
33470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33480 20 20 20 34 20 7b 20 72 65 74 75 72 6e 20 5b 44     4 { return [D
33490 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 79 4f 72  isplayHints <yOr
334a0 69 67 69 6e 3e 5d 20 7d 0a 20 20 20 20 20 20 20  igin>] }.       
334b0 20 20 20 20 20 20 20 20 20 20 20 20 20 35 20 7b               5 {
334c0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
334d0 48 69 6e 74 73 20 3c 78 53 63 61 6c 65 3e 5d 20  Hints <xScale>] 
334e0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
334f0 20 20 20 20 20 20 36 20 7b 20 72 65 74 75 72 6e        6 { return
33500 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
33510 79 53 63 61 6c 65 3e 5d 20 7d 0a 20 20 20 20 20  yScale>] }.     
33520 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
33530 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
33540 20 20 20 20 20 20 20 73 63 61 6e 20 20 20 20 20         scan     
33550 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 57       { return [W
33560 69 64 67 65 74 53 63 61 6e 20 24 74 65 78 74 20  idgetScan $text 
33570 24 70 6f 73 5d 20 7d 0a 20 20 20 20 20 20 20 20  $pos] }.        
33580 20 20 20 20 73 65 6c 65 63 74 20 20 20 20 20 20      select      
33590 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
335a0 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70      switch -- $p
335b0 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  os {.           
335c0 20 20 20 20 20 20 20 20 20 32 20 7b 20 72 65 74           2 { ret
335d0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
335e0 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 61 64 6a  mList $text {adj
335f0 75 73 74 20 63 6c 65 61 72 20 69 74 65 6d 20 66  ust clear item f
33600 72 6f 6d 20 74 6f 7d 5d 20 7d 0a 20 20 20 20 20  rom to}] }.     
33610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33                 3
33620 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
33630 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73             set s
33640 75 62 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65  ub [Lindex $line
33650 20 32 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20   2].            
33660 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74              swit
33670 63 68 20 2d 2d 20 24 73 75 62 20 7b 0a 20 20 20  ch -- $sub {.   
33680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33690 20 20 20 20 20 20 20 20 20 61 64 6a 75 73 74 20           adjust 
336a0 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  -.              
336b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
336c0 6f 6d 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20  om   -.         
336d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336e0 20 20 20 74 6f 20 20 20 20 20 7b 20 72 65 74 75     to     { retu
336f0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
33700 20 3c 74 61 67 4f 72 49 64 3e 5d 20 7d 0a 20 20   <tagOrId>] }.  
33710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33720 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
33730 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
33740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33750 20 20 34 20 7b 0a 20 20 20 20 20 20 20 20 20 20    4 {.          
33760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
33770 74 20 73 75 62 20 5b 4c 69 6e 64 65 78 20 24 6c  t sub [Lindex $l
33780 69 6e 65 20 32 5d 0a 20 20 20 20 20 20 20 20 20  ine 2].         
33790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
337a0 77 69 74 63 68 20 2d 2d 20 24 73 75 62 20 7b 0a  witch -- $sub {.
337b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337c0 20 20 20 20 20 20 20 20 20 20 20 20 61 64 6a 75              adju
337d0 73 74 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20  st -.           
337e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337f0 20 66 72 6f 6d 20 20 20 2d 0a 20 20 20 20 20 20   from   -.      
33800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33810 20 20 20 20 20 20 74 6f 20 20 20 20 20 7b 20 72        to     { r
33820 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
33830 6e 74 73 20 3c 69 6e 64 65 78 3e 5d 20 7d 0a 20  nts <index>] }. 
33840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33850 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
33860 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
33870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
33880 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
33890 20 20 20 20 20 20 20 20 20 20 20 78 76 69 65 77             xview
338a0 20 20 20 20 20 20 20 20 20 2d 0a 20 20 20 20 20           -.     
338b0 20 20 20 20 20 20 20 79 76 69 65 77 20 20 20 20         yview    
338c0 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 58       { return [X
338d0 76 69 65 77 59 76 69 65 77 20 24 74 65 78 74 20  viewYview $text 
338e0 24 6c 69 6e 65 20 24 70 6f 73 20 24 70 72 65 76  $line $pos $prev
338f0 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
33900 63 72 65 61 74 65 20 20 20 20 20 20 20 20 7b 0a  create        {.
33910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33920 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
33930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33940 20 20 20 20 20 32 20 20 20 20 20 20 20 7b 0a 20       2       {. 
33950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33960 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43         return [C
33970 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
33980 24 74 65 78 74 20 5c 0a 20 20 20 20 20 20 20 20  $text \.        
33990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
339a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 61 72 63              {arc
339b0 20 62 69 74 6d 61 70 20 69 6d 61 67 65 20 6c 69   bitmap image li
339c0 6e 65 20 6f 76 61 6c 0a 20 20 20 20 20 20 20 20  ne oval.        
339d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
339e0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6f 6c               pol
339f0 79 67 6f 6e 20 72 65 63 74 61 6e 67 6c 65 20 74  ygon rectangle t
33a00 65 78 74 20 77 69 6e 64 6f 77 7d 5d 0a 20 20 20  ext window}].   
33a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
33a30 20 20 20 20 20 20 20 33 20 20 20 20 20 20 20 7b         3       {
33a40 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
33a50 48 69 6e 74 73 20 3c 78 31 3e 5d 20 7d 0a 20 20  Hints <x1>] }.  
33a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a70 20 20 34 20 20 20 20 20 20 20 7b 20 72 65 74 75    4       { retu
33a80 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
33a90 20 3c 79 31 3e 5d 20 7d 0a 20 20 20 20 20 20 20   <y1>] }.       
33aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 35 20 20               5  
33ab0 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
33ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
33ad0 65 74 20 74 79 70 65 20 5b 4c 69 6e 64 65 78 20  et type [Lindex 
33ae0 24 6c 69 6e 65 20 32 5d 0a 20 20 20 20 20 20 20  $line 2].       
33af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b00 20 73 77 69 74 63 68 20 2d 2d 20 24 74 79 70 65   switch -- $type
33b10 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
33b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
33b30 72 63 20 20 20 20 20 20 20 2d 0a 20 20 20 20 20  rc       -.     
33b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b50 20 20 20 20 20 20 20 6f 76 61 6c 20 20 20 20 20         oval     
33b60 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   -.             
33b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
33b80 65 63 74 61 6e 67 6c 65 20 7b 20 72 65 74 75 72  ectangle { retur
33b90 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
33ba0 3c 78 32 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20  <x2>] }.        
33bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33bc0 20 20 20 20 23 20 54 4f 44 4f 20 69 74 65 6d 73      # TODO items
33bd0 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20   with more than 
33be0 34 20 63 6f 6f 72 64 69 6e 61 74 65 73 0a 20 20  4 coordinates.  
33bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c00 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
33c10 74 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20  t   {.          
33c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c30 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 61        return [Ca
33c40 6e 76 61 73 49 74 65 6d 20 24 74 65 78 74 20 24  nvasItem $text $
33c50 73 74 61 72 74 20 24 65 6e 64 20 5c 0a 20 20 20  start $end \.   
33c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c80 20 20 20 20 20 20 20 20 20 24 6c 69 6e 65 20 24           $line $
33c90 70 6f 73 20 24 70 72 65 76 20 24 74 79 70 65 5d  pos $prev $type]
33ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
33cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33cd0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
33ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
33cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d00 20 20 20 36 20 20 20 20 20 20 20 7b 0a 20 20 20     6       {.   
33d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d20 20 20 20 20 20 73 65 74 20 74 79 70 65 20 5b 4c       set type [L
33d30 69 6e 64 65 78 20 24 6c 69 6e 65 20 32 5d 0a 20  index $line 2]. 
33d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d50 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
33d60 20 24 74 79 70 65 20 7b 0a 20 20 20 20 20 20 20   $type {.       
33d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d80 20 20 20 20 20 61 72 63 20 20 20 20 20 20 20 2d       arc       -
33d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33da0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 76 61               ova
33db0 6c 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20  l      -.       
33dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33dd0 20 20 20 20 20 72 65 63 74 61 6e 67 6c 65 20 7b       rectangle {
33de0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
33df0 48 69 6e 74 73 20 3c 79 32 3e 5d 20 7d 0a 20 20  Hints <y2>] }.  
33e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e10 20 20 20 20 20 20 20 20 20 20 23 20 54 4f 44 4f            # TODO
33e20 20 69 74 65 6d 73 20 77 69 74 68 20 6d 6f 72 65   items with more
33e30 20 74 68 61 6e 20 34 20 63 6f 6f 72 64 69 6e 61   than 4 coordina
33e40 74 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20  tes.            
33e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e60 64 65 66 61 75 6c 74 20 20 20 7b 0a 20 20 20 20  default   {.    
33e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
33e90 72 6e 20 5b 43 61 6e 76 61 73 49 74 65 6d 20 24  rn [CanvasItem $
33ea0 74 65 78 74 20 24 73 74 61 72 74 20 24 65 6e 64  text $start $end
33eb0 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   \.             
33ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $
33ee0 6c 69 6e 65 20 24 70 6f 73 20 24 70 72 65 76 20  line $pos $prev 
33ef0 24 74 79 70 65 5d 0a 20 20 20 20 20 20 20 20 20  $type].         
33f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f10 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
33f20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
33f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f40 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
33f50 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74           default
33f60 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
33f70 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 74             set t
33f80 79 70 65 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e  ype [Lindex $lin
33f90 65 20 32 5d 0a 20 20 20 20 20 20 20 20 20 20 20  e 2].           
33fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 54               # T
33fb0 4f 44 4f 20 69 74 65 6d 73 20 77 69 74 68 20 6d  ODO items with m
33fc0 6f 72 65 20 74 68 61 6e 20 34 20 63 6f 6f 72 64  ore than 4 coord
33fd0 69 6e 61 74 65 73 0a 20 20 20 20 20 20 20 20 20  inates.         
33fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
33ff0 65 74 75 72 6e 20 5b 43 61 6e 76 61 73 49 74 65  eturn [CanvasIte
34000 6d 20 24 74 65 78 74 20 24 73 74 61 72 74 20 24  m $text $start $
34010 65 6e 64 20 5c 0a 20 20 20 20 20 20 20 20 20 20  end \.          
34020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34030 20 20 20 20 20 20 20 20 20 20 24 6c 69 6e 65 20            $line 
34040 24 70 6f 73 20 24 70 72 65 76 20 24 74 79 70 65  $pos $prev $type
34050 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
34060 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
34070 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
34080 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
34090 20 20 20 20 69 74 65 6d 63 6f 6e 66 69 67 75 72      itemconfigur
340a0 65 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e -.            
340b0 69 74 65 6d 63 67 65 74 20 20 20 20 20 20 7b 0a  itemcget      {.
340c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
340d0 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
340e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
340f0 20 20 20 20 20 32 20 20 20 20 20 20 20 7b 20 72       2       { r
34100 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
34110 6e 74 73 20 3c 74 61 67 4f 72 49 64 3e 5d 20 7d  nts <tagOrId>] }
34120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34130 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20       default {. 
34140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34150 20 20 20 20 20 20 20 73 65 74 20 69 64 20 5b 4c         set id [L
34160 69 6e 64 65 78 20 24 6c 69 6e 65 20 32 5d 0a 20  index $line 2]. 
34170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34180 20 20 20 20 20 20 20 73 65 74 20 74 79 70 65 20         set type 
34190 5b 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 30  [[Lindex $line 0
341a0 5d 20 74 79 70 65 20 24 69 64 5d 0a 20 20 20 20  ] type $id].    
341b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
341c0 20 20 20 20 69 66 20 7b 21 5b 73 74 72 69 6e 67      if {![string
341d0 20 6c 65 6e 67 74 68 20 24 74 79 70 65 5d 7d 20   length $type]} 
341e0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
341f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34200 74 75 72 6e 20 22 22 3b 20 23 20 6e 6f 20 73 75  turn ""; # no su
34210 63 68 20 65 6c 65 6d 65 6e 74 0a 20 20 20 20 20  ch element.     
34220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34230 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20     }..          
34240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34250 74 75 72 6e 20 5b 43 61 6e 76 61 73 49 74 65 6d  turn [CanvasItem
34260 20 24 74 65 78 74 20 24 73 74 61 72 74 20 24 65   $text $start $e
34270 6e 64 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20  nd \.           
34280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34290 20 20 20 20 20 20 20 20 20 24 6c 69 6e 65 20 24           $line $
342a0 70 6f 73 20 24 70 72 65 76 20 24 74 79 70 65 5d  pos $prev $type]
342b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
342c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
342d0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
342e0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
342f0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
34300 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  "".    }..    pr
34310 6f 63 20 45 6e 74 72 79 49 6e 64 65 78 20 74 65  oc EntryIndex te
34320 78 74 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74  xt {.        ret
34330 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
34340 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 3c 6e 75  mList $text {<nu
34350 6d 62 65 72 3e 20 3c 40 6e 75 6d 62 65 72 3e 20  mber> <@number> 
34360 61 6e 63 68 6f 72 20 65 6e 64 20 73 65 6c 2e 66  anchor end sel.f
34370 69 72 73 74 20 73 65 6c 2e 6c 61 73 74 7d 5d 0a  irst sel.last}].
34380 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20      }..    proc 
34390 45 6e 74 72 79 4f 62 6a 20 7b 74 65 78 74 20 73  EntryObj {text s
343a0 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
343b0 73 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  s} {.        set
343c0 20 73 75 62 20 5b 4c 69 6e 64 65 78 20 24 6c 69   sub [Lindex $li
343d0 6e 65 20 31 5d 0a 20 20 20 20 20 20 20 20 73 65  ne 1].        se
343e0 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73  t prev [Previous
343f0 57 6f 72 64 20 24 73 74 61 72 74 20 24 6c 69 6e  Word $start $lin
34400 65 5d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 31  e].        if {1
34410 20 3d 3d 20 24 70 6f 73 7d 20 7b 0a 20 20 20 20   == $pos} {.    
34420 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
34430 54 72 79 53 75 62 43 6d 64 73 20 24 74 65 78 74  TrySubCmds $text
34440 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 30   [Lindex $line 0
34450 5d 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  ]].        }.   
34460 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24       switch -- $
34470 73 75 62 20 7b 0a 20 20 20 20 20 20 20 20 20 20  sub {.          
34480 20 20 62 62 6f 78 20 20 20 20 20 20 2d 0a 20 20    bbox      -.  
34490 20 20 20 20 20 20 20 20 20 20 69 63 75 72 73 6f            icurso
344a0 72 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20  r   -.          
344b0 20 20 69 6e 64 65 78 20 20 20 20 20 7b 20 72 65    index     { re
344c0 74 75 72 6e 20 5b 45 6e 74 72 79 49 6e 64 65 78  turn [EntryIndex
344d0 20 24 74 65 78 74 5d 20 7d 0a 20 20 20 20 20 20   $text] }.      
344e0 20 20 20 20 20 20 63 67 65 74 20 20 20 20 20 20        cget      
344f0 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {}.            c
34500 6f 6e 66 69 67 75 72 65 20 7b 7d 0a 20 20 20 20  onfigure {}.    
34510 20 20 20 20 20 20 20 20 67 65 74 20 20 20 20 20          get     
34520 20 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20    {}.           
34530 20 69 6e 73 65 72 74 20 20 20 20 7b 0a 20 20 20   insert    {.   
34540 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69               swi
34550 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20  tch -- $pos {.  
34560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34570 20 20 32 20 7b 20 72 65 74 75 72 6e 20 5b 45 6e    2 { return [En
34580 74 72 79 49 6e 64 65 78 20 24 74 65 78 74 5d 20  tryIndex $text] 
34590 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
345a0 20 20 20 20 20 20 33 20 7b 20 72 65 74 75 72 6e        3 { return
345b0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
345c0 73 74 72 69 6e 67 3e 5d 20 7d 0a 20 20 20 20 20  string>] }.     
345d0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
345e0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
345f0 20 20 20 20 20 20 20 73 63 61 6e 20 20 20 20 20         scan     
34600 20 7b 20 72 65 74 75 72 6e 20 5b 57 69 64 67 65   { return [Widge
34610 74 53 63 61 6e 20 24 74 65 78 74 20 24 70 6f 73  tScan $text $pos
34620 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
34630 73 65 6c 65 63 74 69 6f 6e 20 7b 0a 20 20 20 20  selection {.    
34640 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74              swit
34650 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20  ch -- $pos {.   
34660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34670 20 32 20 7b 20 72 65 74 75 72 6e 20 5b 54 72 79   2 { return [Try
34680 53 75 62 43 6d 64 73 20 24 74 65 78 74 20 5b 4c  SubCmds $text [L
34690 72 61 6e 67 65 20 24 6c 69 6e 65 20 30 20 31 5d  range $line 0 1]
346a0 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
346b0 20 20 20 20 20 20 20 20 33 20 7b 0a 20 20 20 20          3 {.    
346c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346d0 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70      switch -- $p
346e0 72 65 76 20 7b 0a 20 20 20 20 20 20 20 20 20 20  rev {.          
346f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34700 20 20 61 64 6a 75 73 74 20 20 2d 0a 20 20 20 20    adjust  -.    
34710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34720 20 20 20 20 20 20 20 20 66 72 6f 6d 20 20 20 20          from    
34730 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  -.              
34740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6f                to
34750 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b        { return [
34760 45 6e 74 72 79 49 6e 64 65 78 20 24 74 65 78 74  EntryIndex $text
34770 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
34780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34790 63 6c 65 61 72 20 20 20 2d 0a 20 20 20 20 20 20  clear   -.      
347a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
347b0 20 20 20 20 20 20 70 72 65 73 65 6e 74 20 7b 7d        present {}
347c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
347d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 61 6e               ran
347e0 67 65 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44  ge   { return [D
347f0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 61  isplayHints <sta
34800 72 74 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  rt>] }.         
34810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
34820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34830 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
34840 20 20 20 20 20 20 20 20 20 20 20 34 20 7b 0a 20             4 {. 
34850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34860 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
34870 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 32   [Lindex $line 2
34880 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] {.            
34890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348a0 72 61 6e 67 65 20 7b 20 72 65 74 75 72 6e 20 5b  range { return [
348b0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 65 6e  DisplayHints <en
348c0 64 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  d>] }.          
348d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
348e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348f0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
34900 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
34910 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
34920 20 20 78 76 69 65 77 20 20 20 20 20 2d 0a 20 20    xview     -.  
34930 20 20 20 20 20 20 20 20 20 20 79 76 69 65 77 20            yview 
34940 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 57 69      { return [Wi
34950 64 67 65 74 58 76 69 65 77 59 76 69 65 77 20 24  dgetXviewYview $
34960 74 65 78 74 20 24 6c 69 6e 65 20 24 70 6f 73 20  text $line $pos 
34970 24 70 72 65 76 5d 20 7d 0a 20 20 20 20 20 20 20  $prev] }.       
34980 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   }.        retur
34990 6e 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20  n "".    }..    
349a0 23 20 70 72 6f 63 20 43 68 65 63 6b 62 75 74 74  # proc Checkbutt
349b0 6f 6e 4f 62 6a 20 7b 74 65 78 74 20 73 74 61 72  onObj {text star
349c0 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 7d 20  t end line pos} 
349d0 7b 0a 20 20 20 20 23 20 74 68 65 20 66 61 6c 6c  {.    # the fall
349e0 62 61 63 6b 20 72 6f 75 74 69 6e 65 73 20 64 6f  back routines do
349f0 20 74 68 65 20 6a 6f 62 20 70 72 65 74 74 79 20   the job pretty 
34a00 77 65 6c 6c 2e 0a 20 20 20 20 23 20 7d 0a 0a 20  well..    # }.. 
34a10 20 20 20 23 20 70 72 6f 63 20 46 72 61 6d 65 4f     # proc FrameO
34a20 62 6a 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  bj {text start e
34a30 6e 64 20 6c 69 6e 65 20 70 6f 73 7d 20 7b 0a 20  nd line pos} {. 
34a40 20 20 20 23 20 74 68 65 20 66 61 6c 6c 62 61 63     # the fallbac
34a50 6b 20 72 6f 75 74 69 6e 65 73 20 64 6f 20 74 68  k routines do th
34a60 65 20 6a 6f 62 20 70 72 65 74 74 79 20 77 65 6c  e job pretty wel
34a70 6c 2e 0a 20 20 20 20 23 20 7d 0a 0a 20 20 20 20  l..    # }..    
34a80 23 20 70 72 6f 63 20 4c 61 62 65 6c 4f 62 6a 20  # proc LabelObj 
34a90 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
34aa0 6c 69 6e 65 20 70 6f 73 7d 20 7b 0a 20 20 20 20  line pos} {.    
34ab0 23 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 20 72  # the fallback r
34ac0 6f 75 74 69 6e 65 73 20 64 6f 20 74 68 65 20 6a  outines do the j
34ad0 6f 62 20 70 72 65 74 74 79 20 77 65 6c 6c 2e 0a  ob pretty well..
34ae0 20 20 20 20 23 20 7d 0a 0a 20 20 20 20 70 72 6f      # }..    pro
34af0 63 20 4c 69 73 74 62 6f 78 4f 62 6a 20 7b 74 65  c ListboxObj {te
34b00 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
34b10 65 20 70 6f 73 7d 20 7b 0a 20 20 20 20 20 20 20  e pos} {.       
34b20 20 73 65 74 20 73 75 62 20 5b 4c 69 6e 64 65 78   set sub [Lindex
34b30 20 24 6c 69 6e 65 20 31 5d 0a 20 20 20 20 20 20   $line 1].      
34b40 20 20 73 65 74 20 70 72 65 76 20 5b 50 72 65 76    set prev [Prev
34b50 69 6f 75 73 57 6f 72 64 20 24 73 74 61 72 74 20  iousWord $start 
34b60 24 6c 69 6e 65 5d 0a 20 20 20 20 20 20 20 20 69  $line].        i
34b70 66 20 7b 31 20 3d 3d 20 24 70 6f 73 7d 20 7b 0a  f {1 == $pos} {.
34b80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
34b90 72 6e 20 5b 54 72 79 53 75 62 43 6d 64 73 20 24  rn [TrySubCmds $
34ba0 74 65 78 74 20 5b 4c 69 6e 64 65 78 20 24 6c 69  text [Lindex $li
34bb0 6e 65 20 30 5d 5d 0a 20 20 20 20 20 20 20 20 7d  ne 0]].        }
34bc0 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20  .        switch 
34bd0 2d 2d 20 24 73 75 62 20 7b 0a 20 20 20 20 20 20  -- $sub {.      
34be0 20 20 20 20 20 20 61 63 74 69 76 61 74 65 20 20        activate  
34bf0 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20     -.           
34c00 20 62 62 6f 78 20 20 20 20 20 20 20 20 20 2d 0a   bbox         -.
34c10 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
34c20 78 20 20 20 20 20 20 20 20 2d 0a 20 20 20 20 20  x        -.     
34c30 20 20 20 20 20 20 20 73 65 65 20 20 20 20 20 20         see      
34c40 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
34c50 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20        switch -- 
34c60 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20  $pos {.         
34c70 20 20 20 20 20 20 20 20 20 20 20 32 20 7b 20 72             2 { r
34c80 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
34c90 6e 74 73 20 3c 69 6e 64 65 78 3e 5d 20 7d 0a 20  nts <index>] }. 
34ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
34cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
34cc0 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72             inser
34cd0 74 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  t       {.      
34ce0 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68            switch
34cf0 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20   -- $pos {.     
34d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
34d10 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20         { return 
34d20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 69  [DisplayHints <i
34d30 6e 64 65 78 3e 5d 20 7d 0a 20 20 20 20 20 20 20  ndex>] }.       
34d40 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66               def
34d50 61 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b 44  ault { return [D
34d60 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 65 6c 65  isplayHints ?ele
34d70 6d 65 6e 74 3f 5d 20 7d 0a 20 20 20 20 20 20 20  ment?] }.       
34d80 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
34d90 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
34da0 20 20 20 20 20 63 67 65 74 20 20 20 20 20 20 20       cget       
34db0 20 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20    {}.           
34dc0 20 63 6f 6e 66 69 67 75 72 65 20 20 20 20 7b 7d   configure    {}
34dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72  .            cur
34de0 73 65 6c 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 20  selection {}.   
34df0 20 20 20 20 20 20 20 20 20 64 65 6c 65 74 65 20           delete 
34e00 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20        -.        
34e10 20 20 20 20 67 65 74 20 20 20 20 20 20 20 20 20      get         
34e20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
34e30 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f     switch -- $po
34e40 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s {.            
34e50 20 20 20 20 20 20 20 20 32 20 7b 20 72 65 74 75          2 { retu
34e60 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
34e70 20 3c 66 69 72 73 74 3e 5d 20 7d 0a 20 20 20 20   <first>] }.    
34e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e90 33 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  3 { return [Disp
34ea0 6c 61 79 48 69 6e 74 73 20 3f 6c 61 73 74 3f 5d  layHints ?last?]
34eb0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
34ec0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
34ed0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e   }.            n
34ee0 65 61 72 65 73 74 20 20 20 20 20 20 7b 0a 20 20  earest      {.  
34ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77                sw
34f00 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20  itch -- $pos {. 
34f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f20 20 20 20 32 20 7b 20 72 65 74 75 72 6e 20 5b 44     2 { return [D
34f30 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 79 3e 5d  isplayHints <y>]
34f40 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
34f50 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
34f60 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73   }.            s
34f70 69 7a 65 20 20 20 20 20 20 20 20 20 7b 7d 0a 0a  ize         {}..
34f80 20 20 20 20 20 20 20 20 20 20 20 20 73 63 61 6e              scan
34f90 20 7b 20 72 65 74 75 72 6e 20 5b 57 69 64 67 65   { return [Widge
34fa0 74 53 63 61 6e 20 24 74 65 78 74 20 24 70 6f 73  tScan $text $pos
34fb0 5d 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20  ] }..           
34fc0 20 78 76 69 65 77 20 2d 0a 20 20 20 20 20 20 20   xview -.       
34fd0 20 20 20 20 20 79 76 69 65 77 20 7b 20 72 65 74       yview { ret
34fe0 75 72 6e 20 5b 57 69 64 67 65 74 58 76 69 65 77  urn [WidgetXview
34ff0 59 76 69 65 77 20 24 74 65 78 74 20 24 6c 69 6e  Yview $text $lin
35000 65 20 24 70 6f 73 20 24 70 72 65 76 5d 20 7d 0a  e $pos $prev] }.
35010 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c  .            sel
35020 65 63 74 69 6f 6e 20 7b 0a 20 20 20 20 20 20 20  ection {.       
35030 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20           switch 
35040 2d 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20  -- $pos {.      
35050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 20                2 
35060 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
35070 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  teFromList $text
35080 20 7b 61 6e 63 68 6f 72 20 63 6c 65 61 72 20 69   {anchor clear i
35090 6e 63 6c 75 64 65 73 20 73 65 74 7d 5d 20 7d 0a  ncludes set}] }.
350a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350b0 20 20 20 20 33 20 7b 0a 20 20 20 20 20 20 20 20      3 {.        
350c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350d0 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65 76 20  switch -- $prev 
350e0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
350f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e                an
35100 63 68 6f 72 20 20 20 2d 0a 20 20 20 20 20 20 20  chor   -.       
35110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35120 20 20 20 20 20 69 6e 63 6c 75 64 65 73 20 7b 0a       includes {.
35130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35150 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
35160 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5c  FromList $text \
35170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35190 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 61 63               {ac
351a0 74 69 76 65 20 61 6e 63 68 6f 72 20 65 6e 64 20  tive anchor end 
351b0 40 78 20 40 79 20 3c 6e 75 6d 62 65 72 3e 7d 5d  @x @y <number>}]
351c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
351d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
351e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351f0 20 20 20 20 20 20 20 20 20 20 20 63 6c 65 61 72             clear
35200 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20      -.          
35210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35220 20 20 73 65 74 20 20 20 20 20 20 7b 20 72 65 74    set      { ret
35230 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
35240 73 20 3c 66 69 72 73 74 3e 5d 20 7d 0a 20 20 20  s <first>] }.   
35250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35260 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
35270 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
35280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35290 20 34 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20   4 {.           
352a0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69               swi
352b0 74 63 68 20 2d 2d 20 5b 4c 69 6e 64 65 78 20 24  tch -- [Lindex $
352c0 6c 69 6e 65 20 32 5d 20 7b 0a 20 20 20 20 20 20  line 2] {.      
352d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
352e0 20 20 20 20 20 20 63 6c 65 61 72 20 2d 0a 20 20        clear -.  
352f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35300 20 20 20 20 20 20 20 20 20 20 73 65 74 20 20 20            set   
35310 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
35320 79 48 69 6e 74 73 20 3f 6c 61 73 74 3f 5d 20 7d  yHints ?last?] }
35330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35340 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
35350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
35360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35370 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d   }.            }
35380 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  .        }.    }
35390 0a 0a 20 20 20 20 70 72 6f 63 20 4d 65 6e 75 49  ..    proc MenuI
353a0 6e 64 65 78 20 74 65 78 74 20 7b 0a 20 20 20 20  ndex text {.    
353b0 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70      return [Comp
353c0 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65  leteFromList $te
353d0 78 74 20 7b 3c 6e 75 6d 62 65 72 3e 20 61 63 74  xt {<number> act
353e0 69 76 65 20 65 6e 64 20 6c 61 73 74 20 6e 6f 6e  ive end last non
353f0 65 20 3c 40 6e 75 6d 62 65 72 3e 20 3c 6c 61 62  e <@number> <lab
35400 65 6c 50 61 74 74 65 72 6e 3e 7d 5d 0a 20 20 20  elPattern>}].   
35410 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 4d 65 6e   }..    proc Men
35420 75 49 74 65 6d 20 7b 74 65 78 74 20 73 74 61 72  uItem {text star
35430 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 76  t end line pos v
35440 69 72 74 75 61 6c 70 6f 73 7d 20 7b 0a 20 20 20  irtualpos} {.   
35450 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24       switch -- $
35460 76 69 72 74 75 61 6c 70 6f 73 20 7b 0a 20 20 20  virtualpos {.   
35470 20 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20           2      
35480 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
35490 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c     return [Compl
354a0 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  eteFromList $tex
354b0 74 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t \.            
354c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354d0 7b 63 61 73 63 61 64 65 20 63 68 65 63 6b 62 75  {cascade checkbu
354e0 74 74 6f 6e 20 63 6f 6d 6d 61 6e 64 20 72 61 64  tton command rad
354f0 69 6f 62 75 74 74 6f 6e 20 73 65 70 61 72 61 74  iobutton separat
35500 6f 72 7d 5d 0a 20 20 20 20 20 20 20 20 20 20 20  or}].           
35510 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64   }.            d
35520 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20  efault {.       
35530 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20           switch 
35540 2d 2d 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64  -- [PreviousWord
35550 20 24 73 74 61 72 74 20 24 6c 69 6e 65 5d 20 7b   $start $line] {
35560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35570 20 20 20 20 20 2d 61 63 74 69 76 65 62 61 63 6b       -activeback
35580 67 72 6f 75 6e 64 20 2d 0a 20 20 20 20 20 20 20  ground -.       
35590 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 61 63               -ac
355a0 74 69 76 65 66 6f 72 65 67 72 6f 75 6e 64 20 2d  tiveforeground -
355b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
355c0 20 20 20 20 20 2d 62 61 63 6b 67 72 6f 75 6e 64       -background
355d0 20 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20         -.       
355e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 66 6f               -fo
355f0 72 65 67 72 6f 75 6e 64 20 20 20 20 20 20 20 2d  reground       -
35600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35610 20 20 20 20 20 2d 73 65 6c 65 63 74 63 6f 6c 6f       -selectcolo
35620 72 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20  r      { return 
35630 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 63  [DisplayHints <c
35640 6f 6c 6f 72 3e 5d 20 7d 0a 0a 20 20 20 20 20 20  olor>] }..      
35650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 61                -a
35660 63 63 65 6c 65 72 61 74 6f 72 20 7b 20 72 65 74  ccelerator { ret
35670 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
35680 73 20 3c 61 63 63 65 6c 3e 5d 20 7d 0a 20 20 20  s <accel>] }.   
35690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356a0 20 2d 62 69 74 6d 61 70 20 20 20 20 20 20 7b 20   -bitmap      { 
356b0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
356c0 46 72 6f 6d 42 69 74 6d 61 70 73 20 24 74 65 78  FromBitmaps $tex
356d0 74 5d 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20  t] }..          
356e0 20 20 20 20 20 20 20 20 20 20 2d 63 6f 6c 75 6d            -colum
356f0 6e 62 72 65 61 6b 20 2d 0a 20 20 20 20 20 20 20  nbreak -.       
35700 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 68 69               -hi
35710 64 65 6d 61 72 67 69 6e 20 20 2d 0a 20 20 20 20  demargin  -.    
35720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35730 2d 69 6e 64 69 63 61 74 6f 72 6f 6e 20 7b 20 72  -indicatoron { r
35740 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 42  eturn [CompleteB
35750 6f 6f 6c 65 61 6e 20 24 74 65 78 74 5d 20 7d 0a  oolean $text] }.
35760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35770 20 20 20 20 2d 63 6f 6d 6d 61 6e 64 20 20 20 20      -command    
35780 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
35790 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
357a0 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e  n [BraceOrComman
357b0 64 20 24 74 65 78 74 20 24 73 74 61 72 74 20 5c  d $text $start \
357c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
357d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357e0 20 20 20 20 20 24 65 6e 64 20 24 6c 69 6e 65 20       $end $line 
357f0 24 70 6f 73 20 24 74 65 78 74 5d 0a 20 20 20 20  $pos $text].    
35800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35810 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
35820 20 20 20 20 20 20 2d 66 6f 6e 74 20 20 20 20 20        -font     
35830 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
35840 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
35850 20 6e 61 6d 65 73 20 5b 66 6f 6e 74 20 6e 61 6d   names [font nam
35860 65 73 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es].            
35870 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
35880 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $
35890 6e 61 6d 65 73 5d 7d 20 7b 0a 20 20 20 20 20 20  names]} {.      
358a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f        return [Co
358c0 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
358d0 74 65 78 74 20 24 6e 61 6d 65 73 5d 0a 20 20 20  text $names].   
358e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358f0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
35900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35910 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
35920 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
35930 66 6f 6e 74 6e 61 6d 65 3e 5d 0a 20 20 20 20 20  fontname>].     
35940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35950 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
35960 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
35970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
35980 69 6d 61 67 65 20 20 20 20 20 20 20 2d 0a 20 20  image       -.  
35990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
359a0 20 20 2d 73 65 6c 65 63 74 69 6d 61 67 65 20 7b    -selectimage {
359b0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
359c0 65 46 72 6f 6d 49 6d 61 67 65 73 20 24 74 65 78  eFromImages $tex
359d0 74 5d 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20  t] }..          
359e0 20 20 20 20 20 20 20 20 20 20 2d 6c 61 62 65 6c            -label
359f0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
35a00 61 79 48 69 6e 74 73 20 3c 6c 61 62 65 6c 3e 5d  ayHints <label>]
35a10 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
35a20 20 20 20 20 20 20 20 2d 6d 65 6e 75 20 20 7b 0a         -menu  {.
35a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a40 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65          set name
35a50 73 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65  s [WidgetChildre
35a60 6e 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20  n [Lindex $line 
35a70 30 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0]].            
35a80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
35a90 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $
35aa0 6e 61 6d 65 73 5d 7d 20 7b 0a 20 20 20 20 20 20  names]} {.      
35ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ac0 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f        return [Co
35ad0 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
35ae0 74 65 78 74 20 24 6e 61 6d 65 73 5d 0a 20 20 20  text $names].   
35af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b00 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
35b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
35b30 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
35b40 6d 65 6e 75 3e 5d 0a 20 20 20 20 20 20 20 20 20  menu>].         
35b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
35b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35b70 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
35b80 20 20 20 20 20 20 20 20 20 20 20 20 2d 6f 66 66              -off
35b90 76 61 6c 75 65 20 2d 0a 20 20 20 20 20 20 20 20  value -.        
35ba0 20 20 20 20 20 20 20 20 20 20 20 20 2d 6f 6e 76              -onv
35bb0 61 6c 75 65 20 20 7b 20 72 65 74 75 72 6e 20 5b  alue  { return [
35bc0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 76 61  DisplayHints <va
35bd0 6c 75 65 3e 5d 20 7d 0a 0a 20 20 20 20 20 20 20  lue>] }..       
35be0 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 73 74               -st
35bf0 61 74 65 20 20 20 20 20 7b 20 72 65 74 75 72 6e  ate     { return
35c00 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
35c10 73 74 20 24 74 65 78 74 20 7b 6e 6f 72 6d 61 6c  st $text {normal
35c20 20 61 63 74 69 76 65 20 64 69 73 61 62 6c 65 64   active disabled
35c30 7d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  }] }.           
35c40 20 20 20 20 20 20 20 20 20 2d 75 6e 64 65 72 6c           -underl
35c50 69 6e 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ine { return [Di
35c60 73 70 6c 61 79 48 69 6e 74 73 20 3c 69 6e 74 65  splayHints <inte
35c70 67 65 72 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20  ger>] }.        
35c80 20 20 20 20 20 20 20 20 20 20 20 20 2d 76 61 6c              -val
35c90 75 65 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20  ue     { return 
35ca0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 76  [DisplayHints <v
35cb0 61 6c 75 65 3e 5d 20 7d 0a 20 20 20 20 20 20 20  alue>] }.       
35cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 76 61               -va
35cd0 72 69 61 62 6c 65 20 20 7b 20 72 65 74 75 72 6e  riable  { return
35ce0 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 20   [VarCompletion 
35cf0 24 74 65 78 74 20 23 30 5d 20 7d 0a 0a 20 20 20  $text #0] }..   
35d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d10 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20   default {.     
35d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d30 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c     return [Compl
35d40 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  eteFromList $tex
35d50 74 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t \.            
35d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d70 20 20 20 20 20 20 20 20 5b 52 65 6d 6f 76 65 55          [RemoveU
35d80 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65  sedOptions $line
35d90 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   \.             
35da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35db0 20 20 20 20 20 20 20 20 20 20 20 20 7b 2d 61 63              {-ac
35dc0 74 69 76 65 62 61 63 6b 67 72 6f 75 6e 64 20 2d  tivebackground -
35dd0 61 63 74 69 76 65 66 6f 72 65 67 72 6f 75 6e 64  activeforeground
35de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e00 20 20 20 20 20 20 20 20 20 20 20 2d 61 63 63 65             -acce
35e10 6c 65 72 61 74 6f 72 20 2d 62 61 63 6b 67 72 6f  lerator -backgro
35e20 75 6e 64 20 2d 62 69 74 6d 61 70 20 2d 63 6f 6c  und -bitmap -col
35e30 75 6d 6e 62 72 65 61 6b 0a 20 20 20 20 20 20 20  umnbreak.       
35e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e60 20 20 20 2d 63 6f 6d 6d 61 6e 64 20 2d 66 6f 6e     -command -fon
35e70 74 20 2d 66 6f 72 65 67 72 6f 75 6e 64 20 2d 68  t -foreground -h
35e80 69 64 65 6d 61 72 67 69 6e 20 2d 69 6d 61 67 65  idemargin -image
35e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35eb0 20 20 20 20 20 20 20 20 20 20 20 2d 69 6e 64 69             -indi
35ec0 63 61 74 6f 72 6f 6e 20 2d 6c 61 62 65 6c 20 2d  catoron -label -
35ed0 6d 65 6e 75 20 2d 6f 66 66 76 61 6c 75 65 20 2d  menu -offvalue -
35ee0 6f 6e 76 61 6c 75 65 0a 20 20 20 20 20 20 20 20  onvalue.        
35ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f10 20 20 2d 73 65 6c 65 63 74 63 6f 6c 6f 72 20 2d    -selectcolor -
35f20 73 65 6c 65 63 74 69 6d 61 67 65 20 2d 73 74 61  selectimage -sta
35f30 74 65 20 2d 75 6e 64 65 72 6c 69 6e 65 0a 20 20  te -underline.  
35f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f60 20 20 20 20 20 20 20 20 2d 76 61 6c 75 65 20 2d          -value -
35f70 76 61 72 69 61 62 6c 65 7d 5d 5d 0a 20 20 20 20  variable}]].    
35f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f90 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
35fa0 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
35fb0 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
35fc0 7d 0a 0a 20 20 20 20 70 72 6f 63 20 4d 65 6e 75  }..    proc Menu
35fd0 4f 62 6a 20 7b 74 65 78 74 20 73 74 61 72 74 20  Obj {text start 
35fe0 65 6e 64 20 6c 69 6e 65 20 70 6f 73 7d 20 7b 0a  end line pos} {.
35ff0 20 20 20 20 20 20 20 20 73 65 74 20 73 75 62 20          set sub 
36000 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d  [Lindex $line 1]
36010 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 72 65  .        set pre
36020 76 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20  v [PreviousWord 
36030 24 73 74 61 72 74 20 24 6c 69 6e 65 5d 0a 20 20  $start $line].  
36040 20 20 20 20 20 20 69 66 20 7b 31 20 3d 3d 20 24        if {1 == $
36050 70 6f 73 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  pos} {.         
36060 20 20 20 72 65 74 75 72 6e 20 5b 54 72 79 53 75     return [TrySu
36070 62 43 6d 64 73 20 24 74 65 78 74 20 5b 4c 69 6e  bCmds $text [Lin
36080 64 65 78 20 24 6c 69 6e 65 20 30 5d 5d 0a 20 20  dex $line 0]].  
36090 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
360a0 73 77 69 74 63 68 20 2d 2d 20 24 73 75 62 20 7b  switch -- $sub {
360b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 63 74  .            act
360c0 69 76 61 74 65 20 20 20 20 2d 0a 20 20 20 20 20  ivate    -.     
360d0 20 20 20 20 20 20 20 69 6e 64 65 78 20 20 20 20         index    
360e0 20 20 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20     -.           
360f0 20 69 6e 76 6f 6b 65 20 20 20 20 20 20 2d 0a 20   invoke      -. 
36100 20 20 20 20 20 20 20 20 20 20 20 70 6f 73 74 63             postc
36110 61 73 63 61 64 65 20 2d 0a 20 20 20 20 20 20 20  ascade -.       
36120 20 20 20 20 20 74 79 70 65 20 20 20 20 20 20 20       type       
36130 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20 79   -.            y
36140 70 6f 73 69 74 69 6f 6e 20 20 20 7b 0a 20 20 20  position   {.   
36150 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69               swi
36160 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20  tch -- $pos {.  
36170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36180 20 20 32 20 7b 20 72 65 74 75 72 6e 20 5b 4d 65    2 { return [Me
36190 6e 75 49 6e 64 65 78 20 24 74 65 78 74 5d 20 7d  nuIndex $text] }
361a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
361b0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d   }.            }
361c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
361d0 66 69 67 75 72 65 20 20 20 7b 7d 0a 20 20 20 20  figure   {}.    
361e0 20 20 20 20 20 20 20 20 63 67 65 74 20 20 20 20          cget    
361f0 20 20 20 20 7b 7d 0a 0a 20 20 20 20 20 20 20 20      {}..        
36200 20 20 20 20 61 64 64 20 20 20 20 20 20 20 20 20      add         
36210 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 4d 65 6e     { return [Men
36220 75 49 74 65 6d 20 24 74 65 78 74 20 24 73 74 61  uItem $text $sta
36230 72 74 20 24 65 6e 64 20 24 6c 69 6e 65 20 24 70  rt $end $line $p
36240 6f 73 20 24 70 6f 73 5d 20 7d 0a 20 20 20 20 20  os $pos] }.     
36250 20 20 20 20 20 20 20 63 6c 6f 6e 65 20 20 20 20         clone    
36260 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
36270 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d          switch -
36280 2d 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20  - $pos {.       
36290 20 20 20 20 20 20 20 20 20 20 20 20 20 32 20 7b               2 {
362a0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
362b0 48 69 6e 74 73 20 3c 6e 65 77 50 61 74 68 6e 61  Hints <newPathna
362c0 6d 65 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  me>] }.         
362d0 20 20 20 20 20 20 20 20 20 20 20 33 20 7b 20 72             3 { r
362e0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
362f0 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 6e  romList $text {n
36300 6f 72 6d 61 6c 20 6d 65 6e 75 62 61 72 20 74 65  ormal menubar te
36310 61 72 6f 66 66 7d 5d 20 7d 0a 20 20 20 20 20 20  aroff}] }.      
36320 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
36330 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
36340 20 20 20 20 20 20 64 65 6c 65 74 65 20 20 20 20        delete    
36350 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
36360 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
36370 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20   $pos {.        
36380 20 20 20 20 20 20 20 20 20 20 20 20 32 20 2d 0a              2 -.
36390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363a0 20 20 20 20 33 20 7b 20 72 65 74 75 72 6e 20 5b      3 { return [
363b0 4d 65 6e 75 49 6e 64 65 78 20 24 74 65 78 74 5d  MenuIndex $text]
363c0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
363d0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
363e0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69   }.            i
363f0 6e 73 65 72 74 20 20 20 20 20 20 20 20 20 7b 0a  nsert         {.
36400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36410 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
36420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36430 20 20 20 20 20 32 20 20 20 20 20 20 20 7b 20 72       2       { r
36440 65 74 75 72 6e 20 5b 4d 65 6e 75 49 6e 64 65 78  eturn [MenuIndex
36450 20 24 74 65 78 74 5d 20 7d 0a 20 20 20 20 20 20   $text] }.      
36460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
36470 66 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 20  fault {.        
36480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36490 72 65 74 75 72 6e 20 5b 4d 65 6e 75 49 74 65 6d  return [MenuItem
364a0 20 24 74 65 78 74 20 24 73 74 61 72 74 20 24 65   $text $start $e
364b0 6e 64 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20  nd \.           
364c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364d0 20 20 20 20 20 20 20 20 20 24 6c 69 6e 65 20 24           $line $
364e0 70 6f 73 20 5b 65 78 70 72 20 7b 24 70 6f 73 20  pos [expr {$pos 
364f0 2d 20 31 7d 5d 5d 0a 20 20 20 20 20 20 20 20 20  - 1}]].         
36500 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
36510 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
36520 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
36530 20 20 20 20 20 20 20 20 20 65 6e 74 72 79 63 67           entrycg
36540 65 74 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20  et      -.      
36550 20 20 20 20 20 20 65 6e 74 72 79 63 6f 6e 66 69        entryconfi
36560 67 75 72 65 20 7b 0a 20 20 20 20 20 20 20 20 20  gure {.         
36570 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d         switch --
36580 20 24 70 6f 73 20 7b 0a 20 20 20 20 20 20 20 20   $pos {.        
36590 20 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20              2   
365a0 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 4d 65      { return [Me
365b0 6e 75 49 6e 64 65 78 20 24 74 65 78 74 5d 20 7d  nuIndex $text] }
365c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
365d0 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 20 72       default { r
365e0 65 74 75 72 6e 20 5b 4d 65 6e 75 49 74 65 6d 20  eturn [MenuItem 
365f0 24 74 65 78 74 20 24 73 74 61 72 74 20 24 65 6e  $text $start $en
36600 64 20 24 6c 69 6e 65 20 24 70 6f 73 20 24 70 6f  d $line $pos $po
36610 73 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  s] }.           
36620 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
36630 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
36640 20 70 6f 73 74 20 20 20 20 20 20 20 20 20 20 20   post           
36650 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
36660 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73    switch -- $pos
36670 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
36680 20 20 20 20 20 20 20 32 20 7b 20 72 65 74 75 72         2 { retur
36690 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
366a0 3c 78 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  <x>] }.         
366b0 20 20 20 20 20 20 20 20 20 20 20 33 20 7b 20 72             3 { r
366c0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
366d0 6e 74 73 20 3c 79 3e 5d 20 7d 0a 20 20 20 20 20  nts <y>] }.     
366e0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
366f0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
36700 20 20 20 20 20 20 20 23 20 3f 3f 3f 20 58 58 58         # ??? XXX
36710 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 70  .            unp
36720 6f 73 74 20 20 20 20 20 20 20 20 20 7b 7d 0a 20  ost         {}. 
36730 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a         }.    }..
36740 20 20 20 20 70 72 6f 63 20 50 68 6f 74 6f 4f 62      proc PhotoOb
36750 6a 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  j {text start en
36760 64 20 6c 69 6e 65 20 70 6f 73 7d 20 7b 0a 20 20  d line pos} {.  
36770 20 20 20 20 20 20 73 65 74 20 73 75 62 20 5b 4c        set sub [L
36780 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a 20  index $line 1]. 
36790 20 20 20 20 20 20 20 73 65 74 20 70 72 65 76 20         set prev 
367a0 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 73  [PreviousWord $s
367b0 74 61 72 74 20 24 6c 69 6e 65 5d 0a 20 20 20 20  tart $line].    
367c0 20 20 20 20 73 65 74 20 63 6f 70 79 5f 6f 70 74      set copy_opt
367d0 73 20 7b 20 2d 66 72 6f 6d 20 2d 74 6f 20 2d 73  s { -from -to -s
367e0 68 72 69 6e 6b 20 2d 7a 6f 6f 6d 20 2d 73 75 62  hrink -zoom -sub
367f0 73 61 6d 70 6c 65 20 7d 0a 20 20 20 20 20 20 20  sample }.       
36800 20 73 65 74 20 72 65 61 64 5f 6f 70 74 73 20 7b   set read_opts {
36810 20 2d 66 72 6f 6d 20 2d 74 6f 20 2d 73 68 72 69   -from -to -shri
36820 6e 6b 20 2d 66 6f 72 6d 61 74 20 7d 0a 20 20 20  nk -format }.   
36830 20 20 20 20 20 73 65 74 20 77 72 69 74 65 5f 6f       set write_o
36840 70 74 73 20 7b 20 2d 66 72 6f 6d 20 2d 66 6f 72  pts { -from -for
36850 6d 61 74 20 7d 0a 20 20 20 20 20 20 20 20 73 77  mat }.        sw
36860 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20  itch -- $pos {. 
36870 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20             1    
36880 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
36890 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d       return [Com
368a0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74  pleteFromList $t
368b0 65 78 74 20 5c 0a 20 20 20 20 20 20 20 20 20 20  ext \.          
368c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
368d0 20 20 7b 62 6c 61 6e 6b 20 63 67 65 74 20 63 6f    {blank cget co
368e0 6e 66 69 67 75 72 65 20 63 6f 70 79 20 67 65 74  nfigure copy get
368f0 20 70 75 74 20 72 65 61 64 20 72 65 64 69 74 68   put read redith
36900 65 72 20 77 72 69 74 65 7d 5d 0a 20 20 20 20 20  er write}].     
36910 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
36920 20 20 20 20 20 32 20 20 20 20 20 20 20 7b 0a 20       2       {. 
36930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
36940 77 69 74 63 68 20 2d 2d 20 24 73 75 62 20 7b 0a  witch -- $sub {.
36950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36960 20 20 20 20 62 6c 61 6e 6b 20 20 20 20 20 7b 7d      blank     {}
36970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36980 20 20 20 20 20 63 67 65 74 20 20 20 20 20 20 7b       cget      {
36990 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
369a0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 65 20        configure 
369b0 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {}.             
369c0 20 20 20 20 20 20 20 72 65 64 69 74 68 65 72 20         redither 
369d0 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {}.            
369e0 20 20 20 20 20 20 20 20 63 6f 70 79 20 20 20 20          copy    
369f0 20 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70    { return [Comp
36a00 6c 65 74 65 46 72 6f 6d 49 6d 61 67 65 73 20 24  leteFromImages $
36a10 74 65 78 74 5d 20 7d 0a 20 20 20 20 20 20 20 20  text] }.        
36a20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
36a30 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b        { return [
36a40 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 78 3e  DisplayHints <x>
36a50 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
36a60 20 20 20 20 20 20 20 20 70 75 74 20 20 20 20 20          put     
36a70 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70    { return [Disp
36a80 6c 61 79 48 69 6e 74 73 20 3c 64 61 74 61 3e 5d  layHints <data>]
36a90 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
36aa0 20 20 20 20 20 20 20 72 65 61 64 20 20 20 20 20         read     
36ab0 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {}.            
36ac0 20 20 20 20 20 20 20 20 77 72 69 74 65 20 20 20          write   
36ad0 20 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20    {}.           
36ae0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
36af0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
36b00 20 33 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20   3       {.     
36b10 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63             switc
36b20 68 20 2d 2d 20 24 73 75 62 20 7b 0a 20 20 20 20  h -- $sub {.    
36b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b40 62 6c 61 6e 6b 20 20 20 20 20 7b 7d 0a 20 20 20  blank     {}.   
36b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b60 20 63 67 65 74 20 20 20 20 20 20 7b 7d 0a 20 20   cget      {}.  
36b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b80 20 20 63 6f 6e 66 69 67 75 72 65 20 7b 7d 0a 20    configure {}. 
36b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ba0 20 20 20 72 65 64 69 74 68 65 72 20 20 7b 7d 0a     redither  {}.
36bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36bc0 20 20 20 20 63 6f 70 79 20 20 20 20 20 20 7b 20      copy      { 
36bd0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
36be0 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 24  FromList $text $
36bf0 63 6f 70 79 5f 6f 70 74 73 5d 20 7d 0a 20 20 20  copy_opts] }.   
36c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c10 20 67 65 74 20 20 20 20 20 20 20 7b 20 72 65 74   get       { ret
36c20 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
36c30 73 20 3c 79 3e 5d 20 7d 0a 20 20 20 20 20 20 20  s <y>] }.       
36c40 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75 74               put
36c50 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20         { return 
36c60 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
36c70 74 20 24 74 65 78 74 20 2d 74 6f 5d 20 7d 0a 20  t $text -to] }. 
36c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c90 20 20 20 72 65 61 64 20 20 20 20 20 20 7b 20 72     read      { r
36ca0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
36cb0 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 24 72  romList $text $r
36cc0 65 61 64 5f 6f 70 74 73 5d 20 7d 0a 20 20 20 20  ead_opts] }.    
36cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ce0 77 72 69 74 65 20 20 20 20 20 7b 20 72 65 74 75  write     { retu
36cf0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
36d00 4c 69 73 74 20 24 74 65 78 74 20 24 77 72 69 74  List $text $writ
36d10 65 5f 6f 70 74 73 5d 20 7d 0a 20 20 20 20 20 20  e_opts] }.      
36d20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
36d30 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
36d40 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0a        default {.
36d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d60 73 77 69 74 63 68 20 2d 2d 20 24 73 75 62 20 7b  switch -- $sub {
36d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36d80 20 20 20 20 20 62 6c 61 6e 6b 20 20 20 20 20 7b       blank     {
36d90 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
36da0 20 20 20 20 20 20 63 67 65 74 20 20 20 20 20 20        cget      
36db0 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {}.             
36dc0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 65         configure
36dd0 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {}.            
36de0 20 20 20 20 20 20 20 20 72 65 64 69 74 68 65 72          redither
36df0 20 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20    {}.           
36e00 20 20 20 20 20 20 20 20 20 67 65 74 20 20 20 20           get    
36e10 20 20 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20     {}.          
36e20 20 20 20 20 20 20 20 20 20 20 63 6f 70 79 20 20            copy  
36e30 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
36e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77                sw
36e50 69 74 63 68 20 2d 2d 20 24 70 72 65 76 20 7b 0a  itch -- $prev {.
36e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e70 20 20 20 20 20 20 20 20 20 20 20 20 2d 66 72 6f              -fro
36e80 6d 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20  m      -.       
36e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ea0 20 20 20 20 20 2d 74 6f 20 20 20 20 20 20 20 20       -to        
36eb0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
36ec0 79 48 69 6e 74 73 20 5b 6c 69 73 74 20 3c 78 31  yHints [list <x1
36ed0 20 79 31 20 78 32 20 79 32 3e 5d 5d 20 7d 0a 20   y1 x2 y2>]] }. 
36ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ef0 20 20 20 20 20 20 20 20 20 20 20 2d 7a 6f 6f 6d             -zoom
36f00 20 20 20 20 20 20 2d 0a 20 20 20 20 20 20 20 20        -.        
36f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f20 20 20 20 20 2d 73 75 62 73 61 6d 70 6c 65 20 7b      -subsample {
36f30 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
36f40 48 69 6e 74 73 20 5b 6c 69 73 74 20 3c 78 20 79  Hints [list <x y
36f50 3e 5d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  >]] }.          
36f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f70 20 20 64 65 66 61 75 6c 74 20 20 20 20 7b 0a 20    default    {. 
36f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
36fa0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
36fb0 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5c 0a  romList $text \.
36fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36fe0 20 20 20 20 20 20 20 20 20 20 20 20 5b 52 65 6d              [Rem
36ff0 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24  oveUsedOptions $
37000 6c 69 6e 65 20 24 63 6f 70 79 5f 6f 70 74 73 5d  line $copy_opts]
37010 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
37020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
37030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37040 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
37050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
37060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37070 20 20 20 20 70 75 74 20 20 20 20 20 20 20 7b 0a      put       {.
37080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37090 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d          switch -
370a0 2d 20 24 70 72 65 76 20 7b 0a 20 20 20 20 20 20  - $prev {.      
370b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370c0 20 20 20 20 20 20 2d 74 6f 20 7b 20 72 65 74 75        -to { retu
370d0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
370e0 20 5b 6c 69 73 74 20 3c 78 31 20 79 31 20 78 32   [list <x1 y1 x2
370f0 20 79 32 3e 5d 5d 20 7d 0a 20 20 20 20 20 20 20   y2>]] }.       
37100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37110 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
37120 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
37130 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 61               rea
37140 64 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  d      {.       
37150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37160 20 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65 76   switch -- $prev
37170 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
37180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
37190 66 72 6f 6d 20 20 20 7b 20 72 65 74 75 72 6e 20  from   { return 
371a0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 5b 6c  [DisplayHints [l
371b0 69 73 74 20 3c 78 31 20 79 31 20 78 32 20 79 32  ist <x1 y1 x2 y2
371c0 3e 5d 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  >]] }.          
371d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371e0 20 20 2d 74 6f 20 20 20 20 20 7b 20 72 65 74 75    -to     { retu
371f0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
37200 20 5b 6c 69 73 74 20 3c 78 20 79 3e 5d 5d 20 7d   [list <x y>]] }
37210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37220 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 66 6f               -fo
37230 72 6d 61 74 20 7b 20 72 65 74 75 72 6e 20 5b 44  rmat { return [D
37240 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 66 6f 72  isplayHints <for
37250 6d 61 74 4e 61 6d 65 3e 5d 20 7d 0a 20 20 20 20  matName>] }.    
37260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37270 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20          default 
37280 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
37290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372a0 20 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65    return [Comple
372b0 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  teFromList $text
372c0 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   \.             
372d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
372f0 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e  RemoveUsedOption
37300 73 20 24 6c 69 6e 65 20 24 72 65 61 64 5f 6f 70  s $line $read_op
37310 74 73 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20  ts]].           
37320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37330 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
37340 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
37350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37360 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
37370 20 20 20 20 20 20 20 77 72 69 74 65 20 20 20 20         write    
37380 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
37390 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63             switc
373a0 68 20 2d 2d 20 24 70 72 65 76 20 7b 0a 20 20 20  h -- $prev {.   
373b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373c0 20 20 20 20 20 20 20 20 20 2d 66 72 6f 6d 20 20           -from  
373d0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
373e0 61 79 48 69 6e 74 73 20 5b 6c 69 73 74 20 3c 78  ayHints [list <x
373f0 31 20 79 31 20 78 32 20 79 32 3e 5d 5d 20 7d 0a  1 y1 x2 y2>]] }.
37400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37410 20 20 20 20 20 20 20 20 20 20 20 20 2d 66 6f 72              -for
37420 6d 61 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  mat { return [Di
37430 73 70 6c 61 79 48 69 6e 74 73 20 3c 66 6f 72 6d  splayHints <form
37440 61 74 4e 61 6d 65 3e 5d 20 7d 0a 20 20 20 20 20  atName>] }.     
37450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37460 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b         default {
37470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37490 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
374a0 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
374b0 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  \.              
374c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 52                [R
374e0 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
374f0 20 24 6c 69 6e 65 20 24 77 72 69 74 65 5f 6f 70   $line $write_op
37500 74 73 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20  ts]].           
37510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37520 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
37530 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
37540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37550 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
37560 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
37570 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
37580 20 7d 0a 0a 20 20 20 20 23 20 70 72 6f 63 20 52   }..    # proc R
37590 61 64 69 6f 62 75 74 74 6f 6e 4f 62 6a 20 7b 74  adiobuttonObj {t
375a0 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
375b0 6e 65 20 70 6f 73 7d 20 7b 0a 20 20 20 20 23 20  ne pos} {.    # 
375c0 74 68 65 20 66 61 6c 6c 62 61 63 6b 20 72 6f 75  the fallback rou
375d0 74 69 6e 65 73 20 64 6f 20 74 68 65 20 6a 6f 62  tines do the job
375e0 20 70 72 65 74 74 79 20 77 65 6c 6c 2e 0a 20 20   pretty well..  
375f0 20 20 23 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20    # }..    proc 
37600 53 63 61 6c 65 4f 62 6a 20 7b 74 65 78 74 20 73  ScaleObj {text s
37610 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
37620 73 7d 20 7b 0a 0a 20 20 20 20 20 20 20 20 73 65  s} {..        se
37630 74 20 73 75 62 20 5b 4c 69 6e 64 65 78 20 24 6c  t sub [Lindex $l
37640 69 6e 65 20 31 5d 0a 20 20 20 20 20 20 20 20 73  ine 1].        s
37650 65 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75  et prev [Previou
37660 73 57 6f 72 64 20 24 73 74 61 72 74 20 24 6c 69  sWord $start $li
37670 6e 65 5d 0a 0a 20 20 20 20 20 20 20 20 73 77 69  ne]..        swi
37680 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 20 20  tch -- $pos {.  
37690 20 20 20 20 20 20 20 20 20 20 31 20 7b 20 72 65            1 { re
376a0 74 75 72 6e 20 5b 54 72 79 53 75 62 43 6d 64 73  turn [TrySubCmds
376b0 20 24 74 65 78 74 20 5b 4c 69 6e 64 65 78 20 24   $text [Lindex $
376c0 6c 69 6e 65 20 30 5d 5d 20 7d 0a 20 20 20 20 20  line 0]] }.     
376d0 20 20 20 20 20 20 20 32 20 7b 0a 20 20 20 20 20         2 {.     
376e0 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63             switc
376f0 68 20 2d 2d 20 24 73 75 62 20 7b 0a 20 20 20 20  h -- $sub {.    
37700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37710 63 6f 6f 72 64 73 20 20 20 7b 20 72 65 74 75 72  coords   { retur
37720 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
37730 3f 76 61 6c 75 65 3f 5d 20 7d 0a 20 20 20 20 20  ?value?] }.     
37740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
37750 65 74 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e  et      { return
37760 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
37770 78 3f 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20  x?] }.          
37780 20 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69            identi
37790 66 79 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  fy { return [Dis
377a0 70 6c 61 79 48 69 6e 74 73 20 3c 78 3e 5d 20 7d  playHints <x>] }
377b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
377c0 20 20 20 20 20 73 65 74 20 20 20 20 20 20 7b 20       set      { 
377d0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
377e0 69 6e 74 73 20 3c 76 61 6c 75 65 3e 5d 20 7d 0a  ints <value>] }.
377f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37800 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
37810 20 20 20 20 20 20 20 20 20 20 20 20 33 20 7b 0a              3 {.
37820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37830 73 77 69 74 63 68 20 2d 2d 20 24 73 75 62 20 7b  switch -- $sub {
37840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37850 20 20 20 20 20 67 65 74 20 20 20 20 20 20 7b 20       get      { 
37860 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
37870 69 6e 74 73 20 3f 79 3f 5d 20 7d 0a 20 20 20 20  ints ?y?] }.    
37880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37890 69 64 65 6e 74 69 66 79 20 7b 20 72 65 74 75 72  identify { retur
378a0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
378b0 3c 79 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20  <y>] }.         
378c0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
378d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
378e0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63  .    }..    proc
378f0 20 53 63 72 6f 6c 6c 62 61 72 4f 62 6a 20 7b 74   ScrollbarObj {t
37900 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
37910 6e 65 20 70 6f 73 7d 20 7b 0a 0a 20 20 20 20 20  ne pos} {..     
37920 20 20 20 73 65 74 20 73 75 62 20 5b 4c 69 6e 64     set sub [Lind
37930 65 78 20 24 6c 69 6e 65 20 31 5d 0a 20 20 20 20  ex $line 1].    
37940 20 20 20 20 73 65 74 20 70 72 65 76 20 5b 50 72      set prev [Pr
37950 65 76 69 6f 75 73 57 6f 72 64 20 24 73 74 61 72  eviousWord $star
37960 74 20 24 6c 69 6e 65 5d 0a 0a 20 20 20 20 20 20  t $line]..      
37970 20 20 23 20 6e 6f 74 65 20 74 68 61 74 20 74 68    # note that th
37980 65 20 60 70 72 65 66 69 78 20 6d 6f 76 65 74 6f  e `prefix moveto
37990 7c 73 63 72 6f 6c 6c 27 0a 20 20 20 20 20 20 20  |scroll'.       
379a0 20 23 20 63 6f 6e 73 74 72 75 63 74 20 69 73 20   # construct is 
379b0 68 61 72 64 20 74 6f 20 63 6f 6d 70 6c 65 74 65  hard to complete
379c0 2e 0a 20 20 20 20 20 20 20 20 23 0a 20 20 20 20  ..        #.    
379d0 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 70      switch -- $p
379e0 6f 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  os {.           
379f0 20 31 20 7b 20 72 65 74 75 72 6e 20 5b 54 72 79   1 { return [Try
37a00 53 75 62 43 6d 64 73 20 24 74 65 78 74 20 5b 4c  SubCmds $text [L
37a10 69 6e 64 65 78 20 24 6c 69 6e 65 20 30 5d 5d 20  index $line 0]] 
37a20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 20  }.            2 
37a30 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
37a40 20 20 73 77 69 74 63 68 20 2d 2d 20 24 73 75 62    switch -- $sub
37a50 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
37a60 20 20 20 20 20 20 20 61 63 74 69 76 61 74 65 20         activate 
37a70 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
37a80 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  teFromList $text
37a90 20 7b 61 72 72 6f 77 31 20 73 6c 69 64 65 72 20   {arrow1 slider 
37aa0 61 72 72 6f 77 32 7d 5d 20 7d 0a 20 20 20 20 20  arrow2}] }.     
37ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
37ac0 72 61 63 74 69 6f 6e 20 2d 0a 20 20 20 20 20 20  raction -.      
37ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64                id
37ae0 65 6e 74 69 66 79 20 7b 20 72 65 74 75 72 6e 20  entify { return 
37af0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 78  [DisplayHints <x
37b00 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  >] }.           
37b10 20 20 20 20 20 20 20 20 20 64 65 6c 74 61 20 20           delta  
37b20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70    { return [Disp
37b30 6c 61 79 48 69 6e 74 73 20 3c 64 65 6c 74 61 58  layHints <deltaX
37b40 3e 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20  >] }.           
37b50 20 20 20 20 20 20 20 20 20 73 65 74 20 20 20 20           set    
37b60 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70    { return [Disp
37b70 6c 61 79 48 69 6e 74 73 20 3c 66 69 72 73 74 3e  layHints <first>
37b80 5d 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] }.            
37b90 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
37ba0 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
37bb0 33 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  3 {.            
37bc0 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 73      switch -- $s
37bd0 75 62 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ub {.           
37be0 20 20 20 20 20 20 20 20 20 66 72 61 63 74 69 6f           fractio
37bf0 6e 20 2d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n -.            
37c00 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66 79          identify
37c10 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
37c20 61 79 48 69 6e 74 73 20 3c 79 3e 5d 20 7d 0a 20  ayHints <y>] }. 
37c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c40 20 20 20 64 65 6c 74 61 20 20 20 20 7b 20 72 65     delta    { re
37c50 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
37c60 74 73 20 3c 64 65 6c 74 61 59 3e 5d 20 7d 0a 20  ts <deltaY>] }. 
37c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c80 20 20 20 73 65 74 20 20 20 20 20 20 7b 20 72 65     set      { re
37c90 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
37ca0 74 73 20 3c 6c 61 73 74 3e 5d 20 7d 0a 20 20 20  ts <last>] }.   
37cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
37cc0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
37cd0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20       }.    }..  
37ce0 20 20 70 72 6f 63 20 54 65 78 74 4f 62 6a 20 7b    proc TextObj {
37cf0 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
37d00 69 6e 65 20 70 6f 73 7d 20 7b 0a 20 20 20 20 20  ine pos} {.     
37d10 20 20 20 23 20 54 4f 44 4f 20 2e 2e 2e 0a 20 20     # TODO ....  
37d20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 43 6f        return [Co
37d30 6d 70 6c 65 74 65 46 72 6f 6d 4f 70 74 69 6f 6e  mpleteFromOption
37d40 73 4f 72 53 75 62 43 6d 64 73 20 24 74 65 78 74  sOrSubCmds $text
37d50 20 24 73 74 61 72 74 20 24 65 6e 64 20 24 6c 69   $start $end $li
37d60 6e 65 20 24 70 6f 73 5d 0a 20 20 20 20 7d 0a 0a  ne $pos].    }..
37d70 7d 3b 20 23 20 6e 61 6d 65 73 70 61 63 65 20 74  }; # namespace t
37d80 63 6c 72 65 61 64 6c 69 6e 65 0a 0a              clreadline..