Hex Artifact Content
Not logged in

Artifact e34a842808a20a34c4caa244281f206ed42fd9f0:


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 22 2f 68 6f 6d 65 2f 6a  # FILE: "/home/j
0020: 6f 7a 65 2f 73 72 63 2f 74 63 6c 72 65 61 64 6c  oze/src/tclreadl
0030: 69 6e 65 2f 74 63 6c 72 65 61 64 6c 69 6e 65 43  ine/tclreadlineC
0040: 6f 6d 70 6c 65 74 65 72 2e 74 63 6c 22 0a 23 20  ompleter.tcl".# 
0050: 4c 41 53 54 20 4d 4f 44 49 46 49 43 41 54 49 4f  LAST MODIFICATIO
0060: 4e 3a 20 22 53 61 74 2c 20 30 31 20 4a 75 6c 20  N: "Sat, 01 Jul 
0070: 32 30 30 30 20 31 36 3a 31 35 3a 35 35 20 2b 30  2000 16:15:55 +0
0080: 32 30 30 20 28 6a 6f 7a 65 29 22 0a 23 20 28 43  200 (joze)".# (C
0090: 29 20 31 39 39 38 20 2d 20 32 30 30 30 20 62 79  ) 1998 - 2000 by
00a0: 20 4a 6f 68 61 6e 6e 65 73 20 5a 65 6c 6c 6e 65   Johannes Zellne
00b0: 72 2c 20 3c 6a 6f 68 61 6e 6e 65 73 40 7a 65 6c  r, <johannes@zel
00c0: 6c 6e 65 72 2e 6f 72 67 3e 0a 23 20 24 49 64 24  lner.org>.# $Id$
00d0: 0a 23 20 76 69 6d 3a 73 65 74 20 74 73 3d 34 3a  .# vim:set ts=4:
00e0: 0a 23 20 2d 2d 2d 0a 23 0a 23 20 74 63 6c 72 65  .# ---.#.# tclre
00f0: 61 64 6c 69 6e 65 20 2d 2d 20 67 6e 75 20 72 65  adline -- gnu re
0100: 61 64 6c 69 6e 65 20 66 6f 72 20 74 63 6c 0a 23  adline for tcl.#
0110: 20 68 74 74 70 3a 2f 2f 77 77 77 2e 7a 65 6c 6c   http://www.zell
0120: 6e 65 72 2e 6f 72 67 2f 74 63 6c 72 65 61 64 6c  ner.org/tclreadl
0130: 69 6e 65 2f 0a 23 20 43 6f 70 79 72 69 67 68 74  ine/.# Copyright
0140: 20 28 63 29 20 31 39 39 38 20 2d 20 32 30 30 30   (c) 1998 - 2000
0150: 2c 20 4a 6f 68 61 6e 6e 65 73 20 5a 65 6c 6c 6e  , Johannes Zelln
0160: 65 72 20 3c 6a 6f 68 61 6e 6e 65 73 40 7a 65 6c  er <johannes@zel
0170: 6c 6e 65 72 2e 6f 72 67 3e 0a 23 0a 23 20 54 68  lner.org>.#.# Th
0180: 69 73 20 73 6f 66 74 77 61 72 65 20 69 73 20 63  is software is c
0190: 6f 70 79 72 69 67 68 74 20 75 6e 64 65 72 20 74  opyright under t
01a0: 68 65 20 42 53 44 20 6c 69 63 65 6e 73 65 2e 0a  he BSD license..
01b0: 23 0a 23 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  #.# ============
01c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01f0: 3d 3d 3d 3d 3d 3d 20 0a 0a 0a 23 20 54 4f 44 4f  ====== ...# TODO
0200: 3a 0a 23 0a 23 09 2d 20 74 63 6c 74 65 73 74 20  :.#.#.- tcltest 
0210: 69 73 20 6d 69 73 73 69 6e 67 0a 23 09 2d 20 62  is missing.#.- b
0220: 65 74 74 65 72 20 63 6f 6d 70 6c 65 74 69 6f 6e  etter completion
0230: 20 66 6f 72 20 43 6f 6d 70 6c 65 74 65 4c 69 73   for CompleteLis
0240: 74 46 72 6f 6d 4c 69 73 74 3a 0a 23 09 20 20 52  tFromList:.#.  R
0250: 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
0260: 20 2e 2e 2e 0a 23 09 2d 20 6e 61 6d 65 73 70 61   ....#.- namespa
0270: 63 65 20 65 76 61 6c 20 66 72 65 64 20 7b 2e 2e  ce eval fred {..
0280: 2e 20 3c 2d 2d 20 63 6f 6e 74 69 6e 75 65 20 77  . <-- continue w
0290: 69 74 68 20 61 20 0a 23 09 09 09 09 09 09 09 09  ith a .#........
02a0: 20 20 20 73 75 62 73 74 69 74 75 74 69 6f 6e 20     substitution 
02b0: 69 6e 20 66 72 65 64 2e 0a 23 09 2d 20 73 65 74  in fred..#.- set
02c0: 20 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 70 72   tclreadline::pr
02d0: 6f 3c 74 61 62 3e 20 64 6f 65 73 6e 27 74 20 77  o<tab> doesn't w
02e0: 6f 72 6b 0a 23 09 20 20 73 65 74 20 3a 3a 74 63  ork.#.  set ::tc
02f0: 6c 72 65 61 64 6c 69 6e 65 3a 3a 70 72 6f 3c 74  lreadline::pro<t
0300: 61 62 3e 20 64 6f 65 73 0a 23 0a 23 20 20 20 2d  ab> does.#.#   -
0310: 20 54 65 78 74 4f 62 6a 20 2e 2e 2e 0a 23 0a 0a   TextObj ....#..
0320: 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c  ..namespace eval
0330: 20 74 63 6c 72 65 61 64 6c 69 6e 65 20 7b 0a 0a   tclreadline {..
0340: 09 23 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .# the following
0350: 20 74 68 72 65 65 20 61 72 65 20 66 72 6f 6d 20   three are from 
0360: 74 68 65 20 69 63 63 63 6d 0a 09 23 20 61 6e 64  the icccm..# and
0370: 20 75 73 65 64 20 69 6e 20 63 6f 6d 70 6c 65 74   used in complet
0380: 65 28 73 65 6c 65 63 74 69 6f 6e 29 20 61 6e 64  e(selection) and
0390: 0a 09 23 20 64 65 73 63 65 6e 64 61 6e 74 73 2e  ..# descendants.
03a0: 0a 09 23 0a 09 76 61 72 69 61 62 6c 65 20 73 65  ..#..variable se
03b0: 6c 65 63 74 69 6f 6e 2d 73 65 6c 65 63 74 69 6f  lection-selectio
03c0: 6e 73 20 7b 0a 09 09 50 52 49 4d 41 52 59 20 53  ns {...PRIMARY S
03d0: 45 43 4f 4e 44 41 52 59 20 43 4c 49 50 42 4f 41  ECONDARY CLIPBOA
03e0: 52 44 0a 09 7d 0a 09 76 61 72 69 61 62 6c 65 20  RD..}..variable 
03f0: 73 65 6c 65 63 74 69 6f 6e 2d 74 79 70 65 73 20  selection-types 
0400: 7b 0a 09 09 41 44 4f 42 45 5f 50 4f 52 54 41 42  {...ADOBE_PORTAB
0410: 4c 45 5f 44 4f 43 55 4d 45 4e 54 5f 46 4f 52 4d  LE_DOCUMENT_FORM
0420: 41 54 0a 09 09 41 50 50 4c 45 5f 50 49 43 54 0a  AT...APPLE_PICT.
0430: 09 09 42 41 43 4b 47 52 4f 55 4e 44 0a 09 09 42  ..BACKGROUND...B
0440: 49 54 4d 41 50 0a 09 09 43 48 41 52 41 43 54 45  ITMAP...CHARACTE
0450: 52 5f 50 4f 53 49 54 49 4f 4e 0a 09 09 43 4c 41  R_POSITION...CLA
0460: 53 53 0a 09 09 43 4c 49 45 4e 54 5f 57 49 4e 44  SS...CLIENT_WIND
0470: 4f 57 0a 09 09 43 4f 4c 4f 52 4d 41 50 0a 09 09  OW...COLORMAP...
0480: 43 4f 4c 55 4d 4e 5f 4e 55 4d 42 45 52 0a 09 09  COLUMN_NUMBER...
0490: 43 4f 4d 50 4f 55 4e 44 5f 54 45 58 54 0a 09 09  COMPOUND_TEXT...
04a0: 44 45 4c 45 54 45 0a 09 09 44 52 41 57 41 42 4c  DELETE...DRAWABL
04b0: 45 0a 09 09 45 4e 43 41 50 53 55 4c 41 54 45 44  E...ENCAPSULATED
04c0: 5f 50 4f 53 54 53 43 52 49 50 54 0a 09 09 45 4e  _POSTSCRIPT...EN
04d0: 43 41 50 53 55 4c 41 54 45 44 5f 50 4f 53 54 53  CAPSULATED_POSTS
04e0: 43 52 49 50 54 5f 49 4e 54 45 52 43 48 41 4e 47  CRIPT_INTERCHANG
04f0: 45 0a 09 09 46 49 4c 45 5f 4e 41 4d 45 0a 09 09  E...FILE_NAME...
0500: 46 4f 52 45 47 52 4f 55 4e 44 0a 09 09 48 4f 53  FOREGROUND...HOS
0510: 54 5f 4e 41 4d 45 0a 09 09 49 4e 53 45 52 54 5f  T_NAME...INSERT_
0520: 50 52 4f 50 45 52 54 59 0a 09 09 49 4e 53 45 52  PROPERTY...INSER
0530: 54 5f 53 45 4c 45 43 54 49 4f 4e 0a 09 09 4c 45  T_SELECTION...LE
0540: 4e 47 54 48 0a 09 09 4c 49 4e 45 5f 4e 55 4d 42  NGTH...LINE_NUMB
0550: 45 52 0a 09 09 4c 49 53 54 5f 4c 45 4e 47 54 48  ER...LIST_LENGTH
0560: 0a 09 09 4d 4f 44 55 4c 45 0a 09 09 4d 55 4c 54  ...MODULE...MULT
0570: 49 50 4c 45 0a 09 09 4e 41 4d 45 0a 09 09 4f 44  IPLE...NAME...OD
0580: 49 46 0a 09 09 4f 57 4e 45 52 5f 4f 53 0a 09 09  IF...OWNER_OS...
0590: 50 49 58 4d 41 50 0a 09 09 50 4f 53 54 53 43 52  PIXMAP...POSTSCR
05a0: 49 50 54 0a 09 09 50 52 4f 43 45 44 55 52 45 0a  IPT...PROCEDURE.
05b0: 09 09 50 52 4f 43 45 53 53 0a 09 09 53 54 52 49  ..PROCESS...STRI
05c0: 4e 47 0a 09 09 54 41 52 47 45 54 53 0a 09 09 54  NG...TARGETS...T
05d0: 41 53 4b 0a 09 09 54 45 58 54 0a 09 09 54 49 4d  ASK...TEXT...TIM
05e0: 45 53 54 41 4d 50 0a 09 09 55 53 45 52 0a 09 7d  ESTAMP...USER..}
05f0: 0a 09 76 61 72 69 61 62 6c 65 20 73 65 6c 65 63  ..variable selec
0600: 74 69 6f 6e 2d 66 6f 72 6d 61 74 73 20 7b 0a 09  tion-formats {..
0610: 09 41 50 50 4c 45 5f 50 49 43 54 0a 09 09 41 54  .APPLE_PICT...AT
0620: 4f 4d 0a 09 09 41 54 4f 4d 5f 50 41 49 52 0a 09  OM...ATOM_PAIR..
0630: 09 42 49 54 4d 41 50 0a 09 09 43 4f 4c 4f 52 4d  .BITMAP...COLORM
0640: 41 50 0a 09 09 43 4f 4d 50 4f 55 4e 44 5f 54 45  AP...COMPOUND_TE
0650: 58 54 0a 09 09 44 52 41 57 41 42 4c 45 0a 09 09  XT...DRAWABLE...
0660: 49 4e 54 45 47 45 52 0a 09 09 4e 55 4c 4c 0a 09  INTEGER...NULL..
0670: 09 50 49 58 45 4c 0a 09 09 50 49 58 4d 41 50 37  .PIXEL...PIXMAP7
0680: 0a 09 09 53 50 41 4e 0a 09 09 53 54 52 49 4e 47  ...SPAN...STRING
0690: 0a 09 09 54 45 58 54 0a 09 09 57 49 4e 44 4f 57  ...TEXT...WINDOW
06a0: 0a 09 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65  ..}..namespace e
06b0: 78 70 6f 72 74 20 5c 0a 54 72 79 46 72 6f 6d 4c  xport \.TryFromL
06c0: 69 73 74 20 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  ist CompleteFrom
06d0: 4c 69 73 74 20 44 69 73 70 6c 61 79 48 69 6e 74  List DisplayHint
06e0: 73 20 52 65 68 61 73 68 20 5c 0a 50 72 65 76 69  s Rehash \.Previ
06f0: 6f 75 73 57 6f 72 64 20 43 6f 6d 6d 61 6e 64 43  ousWord CommandC
0700: 6f 6d 70 6c 65 74 69 6f 6e 20 52 65 6d 6f 76 65  ompletion Remove
0710: 55 73 65 64 4f 70 74 69 6f 6e 73 20 5c 0a 48 6f  UsedOptions \.Ho
0720: 73 74 4c 69 73 74 20 43 68 61 6e 6e 65 6c 49 64  stList ChannelId
0730: 20 49 6e 43 68 61 6e 6e 65 6c 49 64 20 4f 75 74   InChannelId Out
0740: 43 68 61 6e 6e 65 6c 49 64 20 5c 0a 4c 69 6e 64  ChannelId \.Lind
0750: 65 78 20 4c 6c 65 6e 67 74 68 20 43 6f 6d 70 6c  ex Llength Compl
0760: 65 74 65 42 6f 6f 6c 65 61 6e 20 57 69 64 67 65  eteBoolean Widge
0770: 74 43 68 69 6c 64 72 65 6e 0a 0a 23 20 73 65 74  tChildren..# set
0780: 20 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 74 72   tclreadline::tr
0790: 61 63 65 20 74 6f 20 31 2c 20 69 66 20 79 6f 75  ace to 1, if you
07a0: 0a 23 20 77 61 6e 74 20 74 6f 20 65 6e 61 62 6c  .# want to enabl
07b0: 65 20 65 78 70 6c 69 63 69 74 20 74 72 61 63 65  e explicit trace
07c0: 20 63 61 6c 6c 73 2e 0a 23 0a 76 61 72 69 61 62   calls..#.variab
07d0: 6c 65 20 74 72 61 63 65 0a 0a 23 20 73 65 74 20  le trace..# set 
07e0: 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 74 72 61  tclreadline::tra
07f0: 63 65 5f 70 72 6f 63 73 20 74 6f 20 31 2c 20 69  ce_procs to 1, i
0800: 66 20 79 6f 75 0a 23 20 77 61 6e 74 20 74 6f 20  f you.# want to 
0810: 65 6e 61 62 6c 65 20 74 72 61 63 69 6e 67 20 65  enable tracing e
0820: 76 65 72 79 20 65 6e 74 72 79 20 74 6f 20 61 20  very entry to a 
0830: 70 72 6f 63 2e 0a 23 0a 76 61 72 69 61 62 6c 65  proc..#.variable
0840: 20 74 72 61 63 65 5f 70 72 6f 63 73 0a 0a 69 66   trace_procs..if
0850: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 74   {[info exists t
0860: 72 61 63 65 5f 70 72 6f 63 73 5d 20 26 26 20 24  race_procs] && $
0870: 74 72 61 63 65 5f 70 72 6f 63 73 7d 20 7b 0a 09  trace_procs} {..
0880: 3a 3a 70 72 6f 63 20 70 72 6f 63 20 7b 6e 61 6d  ::proc proc {nam
0890: 65 20 61 72 67 75 6d 65 6e 74 73 20 62 6f 64 79  e arguments body
08a0: 7d 20 7b 0a 09 09 3a 3a 70 72 6f 63 20 24 6e 61  } {...::proc $na
08b0: 6d 65 20 24 61 72 67 75 6d 65 6e 74 73 20 5b 73  me $arguments [s
08c0: 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73  ubst -nocommands
08d0: 20 7b 0a 09 09 09 54 72 61 63 65 54 65 78 74 20   {....TraceText 
08e0: 5b 6c 72 61 6e 67 65 20 5b 69 6e 66 6f 20 6c 65  [lrange [info le
08f0: 76 65 6c 20 30 5d 20 31 20 65 6e 64 5d 0a 09 09  vel 0] 1 end]...
0900: 09 24 62 6f 64 79 0a 09 09 7d 5d 0a 09 7d 0a 7d  .$body...}]..}.}
0910: 20 65 6c 73 65 20 7b 20 3b 23 20 21 24 74 72 61   else { ;# !$tra
0920: 63 65 5f 70 72 6f 63 73 0a 09 63 61 74 63 68 20  ce_procs..catch 
0930: 7b 72 65 6e 61 6d 65 20 3a 3a 74 63 6c 72 65 61  {rename ::tclrea
0940: 64 6c 69 6e 65 3a 3a 70 72 6f 63 20 22 22 7d 0a  dline::proc ""}.
0950: 7d 0a 0a 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69  }..if {[info exi
0960: 73 74 73 20 74 72 61 63 65 5d 20 26 26 20 24 74  sts trace] && $t
0970: 72 61 63 65 7d 20 7b 0a 0a 09 3a 3a 70 72 6f 63  race} {...::proc
0980: 20 54 72 61 63 65 52 65 63 6f 6e 66 20 7b 61 72   TraceReconf {ar
0990: 67 73 7d 20 7b 0a 09 09 65 76 61 6c 20 2e 74 63  gs} {...eval .tc
09a0: 6c 72 65 61 64 6c 69 6e 65 5f 74 72 61 63 65 2e  lreadline_trace.
09b0: 73 63 72 6f 6c 6c 20 73 65 74 20 24 61 72 67 73  scroll set $args
09c0: 0a 09 09 2e 74 63 6c 72 65 61 64 6c 69 6e 65 5f  ....tclreadline_
09d0: 74 72 61 63 65 2e 74 65 78 74 20 73 65 65 20 65  trace.text see e
09e0: 6e 64 0a 09 7d 0a 0a 09 3a 3a 70 72 6f 63 20 41  nd..}...::proc A
09f0: 73 73 75 72 65 54 72 61 63 65 57 69 6e 64 6f 77  ssureTraceWindow
0a00: 20 7b 7d 20 7b 0a 09 09 76 61 72 69 61 62 6c 65   {} {...variable
0a10: 20 74 72 61 63 65 0a 09 09 69 66 20 7b 21 5b 69   trace...if {![i
0a20: 6e 66 6f 20 65 78 69 73 74 73 20 74 72 61 63 65  nfo exists trace
0a30: 5d 7d 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 30  ]} {....return 0
0a40: 0a 09 09 7d 0a 09 09 69 66 20 7b 21 24 74 72 61  ...}...if {!$tra
0a50: 63 65 7d 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  ce} {....return 
0a60: 30 0a 09 09 7d 0a 09 09 69 66 20 7b 21 5b 77 69  0...}...if {![wi
0a70: 6e 66 6f 20 65 78 69 73 74 73 20 2e 74 63 6c 72  nfo exists .tclr
0a80: 65 61 64 6c 69 6e 65 5f 74 72 61 63 65 2e 74 65  eadline_trace.te
0a90: 78 74 5d 7d 20 7b 0a 09 09 09 74 6f 70 6c 65 76  xt]} {....toplev
0aa0: 65 6c 20 2e 74 63 6c 72 65 61 64 6c 69 6e 65 5f  el .tclreadline_
0ab0: 74 72 61 63 65 0a 09 09 09 74 65 78 74 20 2e 74  trace....text .t
0ac0: 63 6c 72 65 61 64 6c 69 6e 65 5f 74 72 61 63 65  clreadline_trace
0ad0: 2e 74 65 78 74 20 5c 0a 09 09 09 09 2d 79 73 63  .text \.....-ysc
0ae0: 72 6f 6c 6c 63 6f 6d 6d 61 6e 64 20 7b 20 74 63  rollcommand { tc
0af0: 6c 72 65 61 64 6c 69 6e 65 3a 3a 54 72 61 63 65  lreadline::Trace
0b00: 52 65 63 6f 6e 66 20 7d 20 5c 0a 09 09 09 09 2d  Reconf } \.....-
0b10: 77 72 61 70 20 6e 6f 6e 65 0a 09 09 09 73 63 72  wrap none....scr
0b20: 6f 6c 6c 62 61 72 20 2e 74 63 6c 72 65 61 64 6c  ollbar .tclreadl
0b30: 69 6e 65 5f 74 72 61 63 65 2e 73 63 72 6f 6c 6c  ine_trace.scroll
0b40: 20 5c 0a 09 09 09 09 2d 6f 72 69 65 6e 74 20 76   \.....-orient v
0b50: 65 72 74 69 63 61 6c 20 5c 0a 09 09 09 09 2d 63  ertical \.....-c
0b60: 6f 6d 6d 61 6e 64 20 7b 20 2e 74 63 6c 72 65 61  ommand { .tclrea
0b70: 64 6c 69 6e 65 5f 74 72 61 63 65 2e 74 65 78 74  dline_trace.text
0b80: 20 79 76 69 65 77 20 7d 0a 09 09 09 70 61 63 6b   yview }....pack
0b90: 20 2e 74 63 6c 72 65 61 64 6c 69 6e 65 5f 74 72   .tclreadline_tr
0ba0: 61 63 65 2e 74 65 78 74 20 2d 73 69 64 65 20 6c  ace.text -side l
0bb0: 65 66 74 20 2d 65 78 70 61 6e 64 20 79 65 73 20  eft -expand yes 
0bc0: 2d 66 69 6c 6c 20 62 6f 74 68 0a 09 09 09 70 61  -fill both....pa
0bd0: 63 6b 20 2e 74 63 6c 72 65 61 64 6c 69 6e 65 5f  ck .tclreadline_
0be0: 74 72 61 63 65 2e 73 63 72 6f 6c 6c 20 2d 73 69  trace.scroll -si
0bf0: 64 65 20 72 69 67 68 74 20 2d 65 78 70 61 6e 64  de right -expand
0c00: 20 79 65 73 20 2d 66 69 6c 6c 20 79 0a 09 09 7d   yes -fill y...}
0c10: 20 65 6c 73 65 20 7b 0a 09 09 09 72 61 69 73 65   else {....raise
0c20: 20 2e 74 63 6c 72 65 61 64 6c 69 6e 65 5f 74 72   .tclreadline_tr
0c30: 61 63 65 0a 09 09 7d 0a 09 09 72 65 74 75 72 6e  ace...}...return
0c40: 20 31 0a 09 7d 0a 0a 09 3a 3a 70 72 6f 63 20 54   1..}...::proc T
0c50: 72 61 63 65 56 61 72 20 76 54 20 7b 0a 09 09 69  raceVar vT {...i
0c60: 66 20 7b 21 5b 41 73 73 75 72 65 54 72 61 63 65  f {![AssureTrace
0c70: 57 69 6e 64 6f 77 5d 7d 20 7b 0a 09 09 09 72 65  Window]} {....re
0c80: 74 75 72 6e 0a 09 09 7d 0a 09 09 75 70 76 61 72  turn...}...upvar
0c90: 20 24 76 54 20 76 0a 09 09 69 66 20 7b 5b 69 6e   $vT v...if {[in
0ca0: 66 6f 20 65 78 69 73 74 73 20 76 5d 7d 20 7b 0a  fo exists v]} {.
0cb0: 09 09 09 2e 74 63 6c 72 65 61 64 6c 69 6e 65 5f  ....tclreadline_
0cc0: 74 72 61 63 65 2e 74 65 78 74 20 69 6e 73 65 72  trace.text inser
0cd0: 74 20 65 6e 64 20 5c 0a 09 09 09 22 28 5b 6c 69  t end \...."([li
0ce0: 6e 64 65 78 20 5b 69 6e 66 6f 20 6c 65 76 65 6c  ndex [info level
0cf0: 20 2d 31 5d 20 30 5d 29 20 24 76 54 3d 7c 24 76   -1] 0]) $vT=|$v
0d00: 7c 5c 6e 22 0a 09 09 7d 0a 09 09 23 20 73 69 6c  |\n"...}...# sil
0d10: 65 6e 74 6c 79 20 69 67 6e 6f 72 65 20 75 6e 73  ently ignore uns
0d20: 65 74 20 76 61 72 69 61 62 6c 65 73 2e 0a 09 7d  et variables...}
0d30: 0a 0a 09 3a 3a 70 72 6f 63 20 54 72 61 63 65 54  ...::proc TraceT
0d40: 65 78 74 20 74 78 74 20 7b 0a 09 09 69 66 20 7b  ext txt {...if {
0d50: 21 5b 41 73 73 75 72 65 54 72 61 63 65 57 69 6e  ![AssureTraceWin
0d60: 64 6f 77 5d 7d 20 7b 0a 09 09 09 72 65 74 75 72  dow]} {....retur
0d70: 6e 0a 09 09 7d 0a 09 09 2e 74 63 6c 72 65 61 64  n...}....tclread
0d80: 6c 69 6e 65 5f 74 72 61 63 65 2e 74 65 78 74 20  line_trace.text 
0d90: 69 6e 73 65 72 74 20 65 6e 64 20 5c 0a 09 09 5b  insert end \...[
0da0: 66 6f 72 6d 61 74 20 7b 25 33 32 73 20 25 73 7d  format {%32s %s}
0db0: 20 28 5b 6c 69 6e 64 65 78 20 5b 69 6e 66 6f 20   ([lindex [info 
0dc0: 6c 65 76 65 6c 20 2d 31 5d 20 30 5d 29 20 24 74  level -1] 0]) $t
0dd0: 78 74 5c 6e 5d 0a 09 7d 0a 0a 7d 20 65 6c 73 65  xt\n]..}..} else
0de0: 20 7b 0a 09 3a 3a 70 72 6f 63 20 54 72 61 63 65   {..::proc Trace
0df0: 52 65 63 6f 6e 66 20 61 72 67 73 20 7b 7d 0a 09  Reconf args {}..
0e00: 3a 3a 70 72 6f 63 20 41 73 73 75 72 65 54 72 61  ::proc AssureTra
0e10: 63 65 57 69 6e 64 6f 77 20 61 72 67 73 20 7b 7d  ceWindow args {}
0e20: 0a 09 3a 3a 70 72 6f 63 20 54 72 61 63 65 56 61  ..::proc TraceVa
0e30: 72 20 61 72 67 73 20 7b 7d 0a 09 3a 3a 70 72 6f  r args {}..::pro
0e40: 63 20 54 72 61 63 65 54 65 78 74 20 61 72 67 73  c TraceText args
0e50: 20 7b 7d 0a 7d 0a 0a 23 2a 2a 0a 23 20 54 72 79   {}.}..#**.# Try
0e60: 46 72 6f 6d 4c 69 73 74 20 77 69 6c 6c 20 72 65  FromList will re
0e70: 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74  turn an empty st
0e80: 72 69 6e 67 2c 20 69 66 0a 23 20 74 68 65 20 74  ring, if.# the t
0e90: 65 78 74 20 74 79 70 65 64 20 73 6f 20 66 61 72  ext typed so far
0ea0: 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20   does not match 
0eb0: 61 6e 79 20 6f 66 20 74 68 65 0a 23 20 65 6c 65  any of the.# ele
0ec0: 6d 65 6e 74 73 20 69 6e 20 6c 69 73 74 2e 20 54  ments in list. T
0ed0: 68 69 73 20 6d 69 67 68 74 20 62 65 20 75 73 65  his might be use
0ee0: 64 20 74 6f 20 61 6c 6c 6f 77 0a 23 20 73 75 62  d to allow.# sub
0ef0: 73 65 71 75 65 6e 74 20 66 69 6c 65 6e 61 6d 65  sequent filename
0f00: 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 62 79 20 74   completion by t
0f10: 68 65 20 62 75 69 6c 74 69 6e 0a 23 20 63 6f 6d  he builtin.# com
0f20: 70 6c 65 74 65 72 2e 0a 23 20 49 66 20 69 6e 68  pleter..# If inh
0f30: 69 62 69 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  ibit is non-zero
0f40: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 77 69 6c  , the result wil
0f50: 6c 20 62 65 0a 23 20 66 6f 72 6d 61 74 74 65 64  l be.# formatted
0f60: 20 73 75 63 68 20 74 68 61 74 20 72 65 61 64 6c   such that readl
0f70: 69 6e 65 20 77 69 6c 6c 20 6e 6f 74 20 69 6e 73  ine will not ins
0f80: 65 72 74 0a 23 20 61 20 73 70 61 63 65 20 61 66  ert.# a space af
0f90: 74 65 72 20 61 20 63 6f 6d 70 6c 65 74 65 20 28  ter a complete (
0fa0: 73 69 6e 67 6c 65 29 20 6d 61 74 63 68 2e 0a 23  single) match..#
0fb0: 0a 70 72 6f 63 20 54 72 79 46 72 6f 6d 4c 69 73  .proc TryFromLis
0fc0: 74 20 7b 74 65 78 74 20 6c 73 74 20 7b 61 6c 6c  t {text lst {all
0fd0: 6f 77 20 22 22 7d 20 7b 69 6e 68 69 62 69 74 20  ow ""} {inhibit 
0fe0: 30 7d 7d 20 7b 0a 0a 09 23 20 70 75 74 73 20 73  0}} {...# puts s
0ff0: 74 64 65 72 72 20 22 28 43 6f 6d 70 6c 65 74 65  tderr "(Complete
1000: 46 72 6f 6d 4c 69 73 74 29 20 5c 6e 74 65 78 74  FromList) \ntext
1010: 3d 7c 24 74 65 78 74 7c 22 0a 09 23 20 70 75 74  =|$text|"..# put
1020: 73 20 73 74 64 65 72 72 20 22 28 43 6f 6d 70 6c  s stderr "(Compl
1030: 65 74 65 46 72 6f 6d 4c 69 73 74 29 20 6c 73 74  eteFromList) lst
1040: 3d 7c 24 6c 73 74 7c 22 0a 09 73 65 74 20 70 72  =|$lst|"..set pr
1050: 65 20 5b 47 65 74 51 75 6f 74 65 64 50 72 65 66  e [GetQuotedPref
1060: 69 78 20 24 7b 74 65 78 74 7d 5d 0a 09 73 65 74  ix ${text}]..set
1070: 20 6d 61 74 63 68 65 73 20 5b 4d 61 74 63 68 65   matches [Matche
1080: 73 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  sFromList ${text
1090: 7d 20 24 7b 6c 73 74 7d 20 24 7b 61 6c 6c 6f 77  } ${lst} ${allow
10a0: 7d 5d 0a 0a 09 23 20 70 75 74 73 20 73 74 64 65  }]...# puts stde
10b0: 72 72 20 22 28 43 6f 6d 70 6c 65 74 65 46 72 6f  rr "(CompleteFro
10c0: 6d 4c 69 73 74 29 20 6d 61 74 63 68 65 73 3d 7c  mList) matches=|
10d0: 24 6d 61 74 63 68 65 73 7c 22 0a 09 69 66 20 7b  $matches|"..if {
10e0: 31 20 3d 3d 20 5b 6c 6c 65 6e 67 74 68 20 24 6d  1 == [llength $m
10f0: 61 74 63 68 65 73 5d 7d 20 7b 20 3b 20 23 20 75  atches]} { ; # u
1100: 6e 69 71 75 65 20 6d 61 74 63 68 0a 09 09 23 20  nique match...# 
1110: 70 75 74 73 20 73 74 64 65 72 72 20 5c 6e 75 6e  puts stderr \nun
1120: 69 71 75 65 3d 24 6d 61 74 63 68 65 73 5c 6e 0a  ique=$matches\n.
1130: 09 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20  ..# puts stderr 
1140: 22 5c 6e 7c 24 7b 70 72 65 7d 24 7b 6d 61 74 63  "\n|${pre}${matc
1150: 68 65 73 7d 5b 52 69 67 68 74 20 24 7b 70 72 65  hes}[Right ${pre
1160: 7d 5d 7c 5c 6e 22 0a 09 09 73 65 74 20 6e 75 6c  }]|\n"...set nul
1170: 6c 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20  l [string index 
1180: 24 6d 61 74 63 68 65 73 20 30 5d 0a 09 09 69 66  $matches 0]...if
1190: 20 7b 28 22 3c 22 20 3d 3d 20 24 7b 6e 75 6c 6c   {("<" == ${null
11a0: 7d 20 7c 7c 20 22 3f 22 20 3d 3d 20 24 7b 6e 75  } || "?" == ${nu
11b0: 6c 6c 7d 29 20 26 26 20 5c 0a 09 09 09 2d 31 20  ll}) && \....-1 
11c0: 3d 3d 20 5b 73 74 72 69 6e 67 20 66 69 72 73 74  == [string first
11d0: 20 24 7b 6e 75 6c 6c 7d 20 24 7b 61 6c 6c 6f 77   ${null} ${allow
11e0: 7d 5d 0a 09 09 7d 20 7b 0a 09 09 09 73 65 74 20  }]...} {....set 
11f0: 63 6f 6d 70 6c 65 74 69 6f 6e 20 5b 73 74 72 69  completion [stri
1200: 6e 67 20 74 72 69 6d 20 22 5b 6c 69 73 74 20 24  ng trim "[list $
1210: 74 65 78 74 5d 20 24 6c 73 74 22 5d 0a 09 09 7d  text] $lst"]...}
1220: 20 65 6c 73 65 20 7b 0a 09 09 09 73 65 74 20 63   else {....set c
1230: 6f 6d 70 6c 65 74 69 6f 6e 20 5b 73 74 72 69 6e  ompletion [strin
1240: 67 20 74 72 69 6d 20 24 7b 70 72 65 7d 24 7b 6d  g trim ${pre}${m
1250: 61 74 63 68 65 73 7d 5b 52 69 67 68 74 20 24 7b  atches}[Right ${
1260: 70 72 65 7d 5d 5d 0a 09 09 7d 0a 09 09 69 66 20  pre}]]...}...if 
1270: 7b 24 69 6e 68 69 62 69 74 7d 20 7b 0a 09 09 09  {$inhibit} {....
1280: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f  return [list $co
1290: 6d 70 6c 65 74 69 6f 6e 20 7b 7d 5d 0a 09 09 7d  mpletion {}]...}
12a0: 20 65 6c 73 65 20 7b 0a 09 09 09 72 65 74 75 72   else {....retur
12b0: 6e 20 24 63 6f 6d 70 6c 65 74 69 6f 6e 0a 09 09  n $completion...
12c0: 7d 0a 09 7d 20 65 6c 73 65 69 66 20 7b 22 22 20  }..} elseif {"" 
12d0: 21 3d 20 24 7b 6d 61 74 63 68 65 73 7d 7d 20 7b  != ${matches}} {
12e0: 0a 09 09 23 20 70 75 74 73 20 73 74 64 65 72 72  ...# puts stderr
12f0: 20 5c 6e 6d 6f 72 65 3d 24 6d 61 74 63 68 65 73   \nmore=$matches
1300: 5c 6e 0a 09 09 73 65 74 20 6c 6f 6e 67 65 73 74  \n...set longest
1310: 20 5b 43 6f 6d 70 6c 65 74 65 4c 6f 6e 67 65 73   [CompleteLonges
1320: 74 20 24 7b 6d 61 74 63 68 65 73 7d 5d 0a 09 09  t ${matches}]...
1330: 23 20 70 75 74 73 20 73 74 64 65 72 72 20 6c 6f  # puts stderr lo
1340: 6e 67 65 73 74 3d 7c 24 6c 6f 6e 67 65 73 74 7c  ngest=|$longest|
1350: 0a 09 09 69 66 20 7b 22 22 20 3d 3d 20 24 6c 6f  ...if {"" == $lo
1360: 6e 67 65 73 74 7d 20 7b 0a 09 09 09 72 65 74 75  ngest} {....retu
1370: 72 6e 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20  rn [string trim 
1380: 22 5b 6c 69 73 74 20 24 74 65 78 74 5d 20 24 7b  "[list $text] ${
1390: 6d 61 74 63 68 65 73 7d 22 5d 0a 09 09 7d 20 65  matches}"]...} e
13a0: 6c 73 65 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  lse {....return 
13b0: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 22 24 7b  [string trim "${
13c0: 70 72 65 7d 24 7b 6c 6f 6e 67 65 73 74 7d 20 24  pre}${longest} $
13d0: 7b 6d 61 74 63 68 65 73 7d 22 5d 0a 09 09 7d 0a  {matches}"]...}.
13e0: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 72 65 74 75  .} else {...retu
13f0: 72 6e 20 22 22 3b 20 23 20 6e 6f 74 68 69 6e 67  rn ""; # nothing
1400: 20 74 6f 20 63 6f 6d 70 6c 65 74 65 0a 09 7d 0a   to complete..}.
1410: 7d 0a 0a 23 2a 2a 0a 23 20 43 6f 6d 70 6c 65 74  }..#**.# Complet
1420: 65 46 72 6f 6d 4c 69 73 74 20 77 69 6c 6c 20 6e  eFromList will n
1430: 65 76 65 72 20 72 65 74 75 72 6e 20 61 6e 20 65  ever return an e
1440: 6d 70 74 79 20 73 74 72 69 6e 67 2e 0a 23 20 63  mpty string..# c
1450: 6f 6d 70 6c 65 74 65 73 2c 20 69 66 20 61 20 63  ompletes, if a c
1460: 6f 6d 70 6c 65 74 69 6f 6e 20 63 61 6e 20 62 65  ompletion can be
1470: 20 64 6f 6e 65 2c 20 6f 72 20 72 69 6e 67 0a 23   done, or ring.#
1480: 20 74 68 65 20 62 65 6c 6c 20 69 66 20 6e 6f 74   the bell if not
1490: 2e 20 49 66 20 69 6e 68 69 62 69 74 20 69 73 20  . If inhibit is 
14a0: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 72 65  non-zero, the re
14b0: 73 75 6c 74 0a 23 20 77 69 6c 6c 20 62 65 20 66  sult.# will be f
14c0: 6f 72 6d 61 74 74 65 64 20 73 75 63 68 20 74 68  ormatted such th
14d0: 61 74 20 72 65 61 64 6c 69 6e 65 20 77 69 6c 6c  at readline will
14e0: 20 6e 6f 74 20 69 6e 73 65 72 74 0a 23 20 61 20   not insert.# a 
14f0: 73 70 61 63 65 20 61 66 74 65 72 20 61 20 63 6f  space after a co
1500: 6d 70 6c 65 74 65 20 28 73 69 6e 67 6c 65 29 20  mplete (single) 
1510: 6d 61 74 63 68 2e 0a 23 0a 70 72 6f 63 20 43 6f  match..#.proc Co
1520: 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 7b  mpleteFromList {
1530: 74 65 78 74 20 6c 73 74 20 7b 61 6c 6c 6f 77 20  text lst {allow 
1540: 22 22 7d 20 7b 69 6e 68 69 62 69 74 20 30 7d 7d  ""} {inhibit 0}}
1550: 20 7b 0a 09 73 65 74 20 72 65 73 75 6c 74 20 5b   {..set result [
1560: 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  TryFromList ${te
1570: 78 74 7d 20 24 7b 6c 73 74 7d 20 24 7b 61 6c 6c  xt} ${lst} ${all
1580: 6f 77 7d 20 24 7b 69 6e 68 69 62 69 74 7d 5d 0a  ow} ${inhibit}].
1590: 09 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24  .if {![llength $
15a0: 7b 72 65 73 75 6c 74 7d 5d 7d 20 7b 0a 09 09 41  {result}]} {...A
15b0: 6c 65 72 74 0a 09 09 23 20 72 65 74 75 72 6e 20  lert...# return 
15c0: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 6c 69  [string trim [li
15d0: 73 74 20 24 7b 74 65 78 74 7d 5d 20 24 7b 6c 73  st ${text}] ${ls
15e0: 74 7d 22 5d 0a 09 09 69 66 20 7b 5b 6c 6c 65 6e  t}"]...if {[llen
15f0: 67 74 68 20 24 7b 6c 73 74 7d 5d 7d 20 7b 0a 09  gth ${lst}]} {..
1600: 09 09 72 65 74 75 72 6e 20 5b 73 74 72 69 6e 67  ..return [string
1610: 20 74 72 69 6d 20 22 24 7b 74 65 78 74 7d 20 24   trim "${text} $
1620: 7b 6c 73 74 7d 22 5d 0a 09 09 7d 20 65 6c 73 65  {lst}"]...} else
1630: 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 73 74   {....return [st
1640: 72 69 6e 67 20 74 72 69 6d 20 5b 6c 69 73 74 20  ring trim [list 
1650: 24 7b 74 65 78 74 7d 20 7b 7d 5d 5d 0a 09 09 7d  ${text} {}]]...}
1660: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 72 65 74  ..} else {...ret
1670: 75 72 6e 20 24 7b 72 65 73 75 6c 74 7d 0a 09 7d  urn ${result}..}
1680: 0a 7d 0a 0a 23 2a 2a 0a 23 20 43 6f 6d 70 6c 65  .}..#**.# Comple
1690: 74 65 42 6f 6f 6c 65 61 6e 20 64 6f 65 73 20 61  teBoolean does a
16a0: 20 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73   CompleteFromLis
16b0: 74 0a 23 20 77 69 74 68 20 61 20 6c 69 73 74 20  t.# with a list 
16c0: 6f 66 20 61 6c 6c 20 76 61 6c 69 64 20 62 6f 6f  of all valid boo
16d0: 6c 65 61 6e 20 76 61 6c 75 65 73 2e 0a 23 0a 70  lean values..#.p
16e0: 72 6f 63 20 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c  roc CompleteBool
16f0: 65 61 6e 20 7b 74 65 78 74 7d 20 7b 0a 09 72 65  ean {text} {..re
1700: 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
1710: 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 79 65  omList $text {ye
1720: 73 20 6e 6f 20 74 72 75 65 20 66 61 6c 73 65 20  s no true false 
1730: 31 20 30 7d 5d 0a 7d 0a 0a 23 2a 2a 0a 23 20 62  1 0}].}..#**.# b
1740: 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 61  uild a list of a
1750: 6c 6c 20 65 78 65 63 75 74 61 62 6c 65 73 20 77  ll executables w
1760: 68 69 63 68 20 63 61 6e 20 62 65 0a 23 20 66 6f  hich can be.# fo
1770: 75 6e 64 20 69 6e 20 24 65 6e 76 28 50 41 54 48  und in $env(PATH
1780: 29 2e 20 54 68 69 73 20 69 73 20 28 6e 61 74 75  ). This is (natu
1790: 72 61 6c 6c 79 29 20 61 20 62 69 74 0a 23 20 73  rally) a bit.# s
17a0: 6c 6f 77 2c 20 61 6e 64 20 73 68 6f 75 6c 64 20  low, and should 
17b0: 6e 6f 74 20 63 61 6c 6c 65 64 20 66 72 65 71 75  not called frequ
17c0: 65 6e 74 6c 79 2e 20 49 6e 73 74 65 61 64 0a 23  ently. Instead.#
17d0: 20 69 74 20 69 73 20 61 20 67 6f 6f 64 20 69 64   it is a good id
17e0: 65 61 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74  ea to check if t
17f0: 68 65 20 76 61 72 69 61 62 6c 65 0a 23 20 60 65  he variable.# `e
1800: 78 65 63 75 74 61 62 6c 65 73 27 20 65 78 69 73  xecutables' exis
1810: 74 73 20 61 6e 64 20 74 68 65 6e 20 6a 75 73 74  ts and then just
1820: 20 75 73 65 20 69 74 27 73 0a 23 20 63 6f 6e 74   use it's.# cont
1830: 65 6e 74 20 69 6e 73 74 65 61 64 20 6f 66 20 63  ent instead of c
1840: 61 6c 6c 69 6e 67 20 52 65 68 61 73 68 2e 0a 23  alling Rehash..#
1850: 20 28 73 65 65 20 63 6f 6d 70 6c 65 74 65 28 65   (see complete(e
1860: 78 65 63 29 29 2e 0a 23 20 0a 70 72 6f 63 20 52  xec))..# .proc R
1870: 65 68 61 73 68 20 7b 7d 20 7b 0a 0a 09 67 6c 6f  ehash {} {...glo
1880: 62 61 6c 20 65 6e 76 0a 09 76 61 72 69 61 62 6c  bal env..variabl
1890: 65 20 65 78 65 63 75 74 61 62 6c 65 73 0a 0a 09  e executables...
18a0: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
18b0: 73 20 65 6e 76 5d 20 7c 7c 20 21 5b 61 72 72 61  s env] || ![arra
18c0: 79 20 65 78 69 73 74 73 20 65 6e 76 5d 7d 20 7b  y exists env]} {
18d0: 0a 09 09 72 65 74 75 72 6e 0a 09 7d 0a 09 69 66  ...return..}..if
18e0: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists 
18f0: 65 6e 76 28 50 41 54 48 29 5d 7d 20 7b 0a 09 09  env(PATH)]} {...
1900: 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 73 65 74 20  return..}...set 
1910: 65 78 65 63 75 74 61 62 6c 65 73 20 30 0a 09 66  executables 0..f
1920: 6f 72 65 61 63 68 20 64 69 72 20 5b 73 70 6c 69  oreach dir [spli
1930: 74 20 24 65 6e 76 28 50 41 54 48 29 20 3a 5d 20  t $env(PATH) :] 
1940: 7b 0a 09 09 69 66 20 7b 5b 63 61 74 63 68 20 5b  {...if {[catch [
1950: 6c 69 73 74 20 73 65 74 20 66 69 6c 65 73 20 5b  list set files [
1960: 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  glob -nocomplain
1970: 20 24 7b 64 69 72 7d 2f 2a 5d 5d 5d 7d 20 7b 20   ${dir}/*]]]} { 
1980: 63 6f 6e 74 69 6e 75 65 20 7d 0a 09 09 66 6f 72  continue }...for
1990: 65 61 63 68 20 66 69 6c 65 20 24 66 69 6c 65 73  each file $files
19a0: 20 7b 0a 09 09 09 69 66 20 7b 5b 66 69 6c 65 20   {....if {[file 
19b0: 65 78 65 63 75 74 61 62 6c 65 20 24 66 69 6c 65  executable $file
19c0: 5d 7d 20 7b 0a 09 09 09 09 6c 61 70 70 65 6e 64  ]} {.....lappend
19d0: 20 65 78 65 63 75 74 61 62 6c 65 73 20 5b 66 69   executables [fi
19e0: 6c 65 20 74 61 69 6c 20 24 7b 66 69 6c 65 7d 5d  le tail ${file}]
19f0: 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a  ....}...}..}.}..
1a00: 23 2a 2a 0a 23 20 62 75 69 6c 64 20 61 20 6c 69  #**.# build a li
1a10: 73 74 20 68 6f 73 74 73 20 66 72 6f 6d 20 74 68  st hosts from th
1a20: 65 20 2f 65 74 63 2f 68 6f 73 74 73 20 66 69 6c  e /etc/hosts fil
1a30: 65 2e 0a 23 20 74 68 69 73 20 69 73 20 6f 6e 6c  e..# this is onl
1a40: 79 20 64 6f 6e 65 20 6f 6e 63 65 2e 20 54 68 69  y done once. Thi
1a50: 73 20 69 73 20 73 6f 72 74 20 6f 66 20 61 0a 23  s is sort of a.#
1a60: 20 64 69 72 74 79 20 68 61 63 6b 2c 20 2f 65 74   dirty hack, /et
1a70: 63 2f 68 6f 73 74 73 20 69 73 20 68 61 72 64 63  c/hosts is hardc
1a80: 6f 64 65 64 20 2e 2e 2e 0a 23 20 42 75 74 20 6f  oded ....# But o
1a90: 6e 20 74 68 65 20 6f 74 68 65 72 20 73 69 64 65  n the other side
1aa0: 2c 20 69 66 20 74 68 65 20 75 73 65 72 20 73 75  , if the user su
1ab0: 70 70 6c 69 65 73 0a 23 20 61 20 76 61 6c 69 64  pplies.# a valid
1ac0: 20 68 6f 73 74 20 74 61 62 6c 65 20 69 6e 20 74   host table in t
1ad0: 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 68 6f 73 74  clreadline::host
1ae0: 73 0a 23 20 62 65 66 6f 72 65 20 65 6e 74 65 72  s.# before enter
1af0: 69 6e 67 20 74 68 65 20 65 76 65 6e 74 20 6c 6f  ing the event lo
1b00: 6f 70 2c 20 74 68 69 73 20 70 72 6f 63 0a 23 20  op, this proc.# 
1b10: 77 69 6c 6c 20 72 65 74 75 72 6e 20 74 68 69 73  will return this
1b20: 20 6c 69 73 74 2e 0a 23 20 0a 70 72 6f 63 20 48   list..# .proc H
1b30: 6f 73 74 4c 69 73 74 20 7b 7d 20 7b 0a 09 23 20  ostList {} {..# 
1b40: 72 65 61 64 20 74 68 65 20 68 6f 73 74 20 74 61  read the host ta
1b50: 62 6c 65 20 6f 6e 6c 79 20 6f 6e 63 65 2e 0a 09  ble only once...
1b60: 23 0a 09 76 61 72 69 61 62 6c 65 20 68 6f 73 74  #..variable host
1b70: 73 0a 09 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78  s..if {![info ex
1b80: 69 73 74 73 20 68 6f 73 74 73 5d 7d 20 7b 0a 09  ists hosts]} {..
1b90: 09 63 61 74 63 68 20 7b 0a 09 09 09 73 65 74 20  .catch {....set 
1ba0: 68 6f 73 74 73 20 22 22 0a 09 09 09 73 65 74 20  hosts ""....set 
1bb0: 69 64 20 5b 6f 70 65 6e 20 2f 65 74 63 2f 68 6f  id [open /etc/ho
1bc0: 73 74 73 20 72 5d 0a 09 09 09 69 66 20 7b 30 20  sts r]....if {0 
1bd0: 21 3d 20 24 7b 69 64 7d 7d 20 7b 0a 09 09 09 09  != ${id}} {.....
1be0: 77 68 69 6c 65 20 7b 2d 31 20 21 3d 20 5b 67 65  while {-1 != [ge
1bf0: 74 73 20 24 7b 69 64 7d 20 6c 69 6e 65 5d 7d 20  ts ${id} line]} 
1c00: 7b 0a 09 09 09 09 09 72 65 67 73 75 62 20 7b 23  {......regsub {#
1c10: 2e 2a 7d 20 24 7b 6c 69 6e 65 7d 20 7b 7d 20 6c  .*} ${line} {} l
1c20: 69 6e 65 0a 09 09 09 09 09 69 66 20 7b 5b 6c 6c  ine......if {[ll
1c30: 65 6e 67 74 68 20 24 7b 6c 69 6e 65 7d 5d 20 3e  ength ${line}] >
1c40: 3d 20 32 7d 20 7b 0a 09 09 09 09 09 09 6c 61 70  = 2} {.......lap
1c50: 70 65 6e 64 20 68 6f 73 74 73 20 5b 6c 69 6e 64  pend hosts [lind
1c60: 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 09  ex ${line} 1]...
1c70: 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09 63  ...}.....}.....c
1c80: 6c 6f 73 65 20 24 7b 69 64 7d 20 0a 09 09 09 7d  lose ${id} ....}
1c90: 20 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e   ...}..}..return
1ca0: 20 24 7b 68 6f 73 74 73 7d 20 0a 7d 0a 0a 23 2a   ${hosts} .}..#*
1cb0: 2a 0a 23 20 6e 65 76 65 72 20 72 65 74 75 72 6e  *.# never return
1cc0: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67   an empty string
1cd0: 2c 20 6e 65 76 65 72 20 63 6f 6d 70 6c 65 74 65  , never complete
1ce0: 2e 0a 23 20 54 68 69 73 20 69 73 20 75 73 65 66  ..# This is usef
1cf0: 75 6c 20 66 6f 72 20 73 68 6f 77 69 6e 67 20 6f  ul for showing o
1d00: 70 74 69 6f 6e 73 20 6c 69 73 74 73 20 66 6f 72  ptions lists for
1d10: 20 65 78 61 6d 70 6c 65 2e 0a 23 0a 70 72 6f 63   example..#.proc
1d20: 20 44 69 73 70 6c 61 79 48 69 6e 74 73 20 7b 6c   DisplayHints {l
1d30: 73 74 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 73  st} {..return [s
1d40: 74 72 69 6e 67 20 74 72 69 6d 20 22 7b 7d 20 24  tring trim "{} $
1d50: 7b 6c 73 74 7d 22 5d 0a 7d 0a 0a 23 2a 2a 0a 23  {lst}"].}..#**.#
1d60: 20 66 69 6e 64 20 28 70 61 72 74 69 61 6c 29 20   find (partial) 
1d70: 6d 61 74 63 68 65 73 20 66 6f 72 20 60 74 65 78  matches for `tex
1d80: 74 27 20 69 6e 20 60 6c 73 74 27 2e 20 52 69 6e  t' in `lst'. Rin
1d90: 67 0a 23 20 74 68 65 20 62 65 6c 6c 20 61 6e 64  g.# the bell and
1da0: 20 72 65 74 75 72 6e 20 74 68 65 20 77 68 6f 6c   return the whol
1db0: 65 20 6c 69 73 74 2c 20 69 66 20 74 68 65 20 75  e list, if the u
1dc0: 73 65 72 0a 23 20 74 72 69 65 73 20 74 6f 20 63  ser.# tries to c
1dd0: 6f 6d 70 6c 65 74 65 20 3f 2e 2e 3f 20 6f 70 74  omplete ?..? opt
1de0: 69 6f 6e 73 20 6f 72 20 3c 2e 2e 3e 20 68 69 6e  ions or <..> hin
1df0: 74 73 2e 0a 23 0a 23 20 4d 61 74 63 68 65 73 46  ts..#.# MatchesF
1e00: 72 6f 6d 4c 69 73 74 20 72 65 74 75 72 6e 73 20  romList returns 
1e10: 61 20 6c 69 73 74 20 77 68 69 63 68 20 69 73 20  a list which is 
1e20: 6e 6f 74 20 73 75 69 74 61 62 6c 65 0a 23 20 66  not suitable.# f
1e30: 6f 72 20 70 61 73 73 69 6e 67 20 74 6f 20 74 68  or passing to th
1e40: 65 20 72 65 61 64 6c 69 6e 65 20 63 6f 6d 70 6c  e readline compl
1e50: 65 74 65 72 2e 20 54 68 75 73 2c 0a 23 20 4d 61  eter. Thus,.# Ma
1e60: 74 63 68 65 73 46 72 6f 6d 4c 69 73 74 20 73 68  tchesFromList sh
1e70: 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 61 6c 6c  ould not be call
1e80: 65 64 20 64 69 72 65 63 74 6c 79 20 62 75 74 0a  ed directly but.
1e90: 23 20 66 72 6f 6d 20 66 6f 72 6d 61 74 74 69 6e  # from formattin
1ea0: 67 20 72 6f 75 74 69 6e 65 73 20 61 73 20 54 72  g routines as Tr
1eb0: 79 46 72 6f 6d 4c 69 73 74 2e 0a 23 0a 70 72 6f  yFromList..#.pro
1ec0: 63 20 4d 61 74 63 68 65 73 46 72 6f 6d 4c 69 73  c MatchesFromLis
1ed0: 74 20 7b 74 65 78 74 20 6c 73 74 20 7b 61 6c 6c  t {text lst {all
1ee0: 6f 77 20 22 22 7d 7d 20 7b 0a 09 73 65 74 20 72  ow ""}} {..set r
1ef0: 65 73 75 6c 74 20 22 22 0a 09 73 65 74 20 74 65  esult ""..set te
1f00: 78 74 20 5b 53 74 72 69 70 50 72 65 66 69 78 20  xt [StripPrefix 
1f10: 24 74 65 78 74 5d 0a 09 73 65 74 20 6e 75 6c 6c  $text]..set null
1f20: 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24   [string index $
1f30: 74 65 78 74 20 30 5d 0a 09 66 6f 72 65 61 63 68  text 0]..foreach
1f40: 20 63 68 61 72 20 7b 3c 20 3f 7d 20 7b 0a 09 09   char {< ?} {...
1f50: 69 66 20 7b 24 63 68 61 72 20 3d 3d 20 24 6e 75  if {$char == $nu
1f60: 6c 6c 20 26 26 20 2d 31 20 3d 3d 20 5b 73 74 72  ll && -1 == [str
1f70: 69 6e 67 20 66 69 72 73 74 20 24 63 68 61 72 20  ing first $char 
1f80: 24 61 6c 6c 6f 77 5d 7d 20 7b 0a 09 09 09 41 6c  $allow]} {....Al
1f90: 65 72 74 0a 09 09 09 72 65 74 75 72 6e 20 24 6c  ert....return $l
1fa0: 73 74 0a 09 09 7d 0a 09 7d 0a 09 23 20 70 75 74  st...}..}..# put
1fb0: 73 20 73 74 64 65 72 72 20 22 28 4d 61 74 63 68  s stderr "(Match
1fc0: 65 73 46 72 6f 6d 4c 69 73 74 29 20 74 65 78 74  esFromList) text
1fd0: 3d 24 74 65 78 74 22 0a 09 23 20 70 75 74 73 20  =$text"..# puts 
1fe0: 73 74 64 65 72 72 20 22 28 4d 61 74 63 68 65 73  stderr "(Matches
1ff0: 46 72 6f 6d 4c 69 73 74 29 20 6c 73 74 3d 24 6c  FromList) lst=$l
2000: 73 74 22 0a 09 66 6f 72 65 61 63 68 20 77 6f 72  st"..foreach wor
2010: 64 20 24 6c 73 74 20 7b 0a 09 09 69 66 20 7b 5b  d $lst {...if {[
2020: 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24 7b 74  string match ${t
2030: 65 78 74 7d 2a 20 24 7b 77 6f 72 64 7d 5d 7d 20  ext}* ${word}]} 
2040: 7b 0a 09 09 09 6c 61 70 70 65 6e 64 20 72 65 73  {....lappend res
2050: 75 6c 74 20 24 7b 77 6f 72 64 7d 0a 09 09 7d 0a  ult ${word}...}.
2060: 09 7d 0a 09 72 65 74 75 72 6e 20 5b 73 74 72 69  .}..return [stri
2070: 6e 67 20 74 72 69 6d 20 24 72 65 73 75 6c 74 5d  ng trim $result]
2080: 0a 7d 0a 0a 23 2a 2a 0a 23 20 69 6e 76 6f 6b 65  .}..#**.# invoke
2090: 20 63 6d 64 20 77 69 74 68 20 61 20 28 68 6f 70   cmd with a (hop
20a0: 65 66 75 6c 6c 79 29 20 69 6e 76 61 6c 69 64 20  efully) invalid 
20b0: 73 74 72 69 6e 67 20 61 6e 64 0a 23 20 70 61 72  string and.# par
20c0: 73 65 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  se the error mes
20d0: 73 61 67 65 20 74 6f 20 67 65 74 20 61 6e 20 6f  sage to get an o
20e0: 70 74 69 6f 6e 20 6c 69 73 74 2e 0a 23 20 54 68  ption list..# Th
20f0: 65 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 61  e strings are ca
2100: 72 65 66 75 6c 6c 79 20 63 68 6f 73 65 6e 20 74  refully chosen t
2110: 6f 20 6d 61 74 63 68 20 74 68 65 0a 23 20 72 65  o match the.# re
2120: 73 75 6c 74 73 20 70 72 6f 64 75 63 65 64 20 62  sults produced b
2130: 79 20 6b 6e 6f 77 6e 20 74 63 6c 20 72 6f 75 74  y known tcl rout
2140: 69 6e 65 73 2e 20 49 74 27 73 20 61 0a 23 20 70  ines. It's a.# p
2150: 69 74 79 2c 20 74 68 61 74 20 6e 6f 74 20 61 6c  ity, that not al
2160: 6c 20 6f 62 6a 65 63 74 20 63 6f 6d 6d 61 6e 64  l object command
2170: 73 20 67 65 6e 65 72 61 74 65 0a 23 20 73 74 61  s generate.# sta
2180: 6e 64 61 72 64 20 65 72 72 6f 72 20 6d 65 73 73  ndard error mess
2190: 61 67 65 73 21 0a 23 0a 23 20 40 70 61 72 61 6d  ages!.#.# @param
21a0: 20 20 20 63 6d 64 0a 23 20 40 72 65 74 75 72 6e     cmd.# @return
21b0: 20 20 6c 69 73 74 20 6f 66 20 6f 70 74 69 6f 6e    list of option
21c0: 73 20 66 6f 72 20 63 6d 64 0a 23 20 40 64 61 74  s for cmd.# @dat
21d0: 65 20 20 20 20 53 65 70 2d 31 34 2d 31 39 39 39  e    Sep-14-1999
21e0: 0a 23 0a 70 72 6f 63 20 54 72 79 53 75 62 43 6d  .#.proc TrySubCm
21f0: 64 73 20 7b 74 65 78 74 20 63 6d 64 7d 20 7b 0a  ds {text cmd} {.
2200: 0a 09 73 65 74 20 74 72 79 73 74 72 69 6e 67 20  ..set trystring 
2210: 2d 2d 2d 2d 0a 0a 09 23 20 74 72 79 20 74 68 65  ----...# try the
2220: 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 20 61 6e   command with an
2230: 64 20 77 2f 6f 20 74 72 79 73 74 72 69 6e 67 2e  d w/o trystring.
2240: 0a 09 23 20 53 6f 6d 65 20 63 6f 6d 6d 61 6e 64  ..# Some command
2250: 73 2c 20 65 2e 67 2e 0a 09 23 20 20 20 20 20 2e  s, e.g...#     .
2260: 63 61 6e 76 61 73 20 62 69 6e 64 0a 09 23 20 72  canvas bind..# r
2270: 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
2280: 66 20 69 6e 76 6f 6b 65 64 20 77 2f 6f 20 61 72  f invoked w/o ar
2290: 67 75 6d 65 6e 74 73 0a 09 23 20 62 75 74 20 6e  guments..# but n
22a0: 6f 74 2c 20 69 66 20 69 6e 76 6f 6b 65 64 20 77  ot, if invoked w
22b0: 69 74 68 20 61 72 67 75 6d 65 6e 74 73 2e 20 42  ith arguments. B
22c0: 72 65 61 6b 69 6e 67 0a 09 23 20 74 68 65 20 6c  reaking..# the l
22d0: 6f 6f 70 20 69 73 20 65 76 65 6e 74 75 61 6c 6c  oop is eventuall
22e0: 79 20 64 6f 6e 65 20 61 74 20 74 68 65 20 65 6e  y done at the en
22f0: 64 20 2e 2e 2e 0a 09 23 0a 09 66 6f 72 20 7b 73  d .....#..for {s
2300: 65 74 20 73 74 72 20 24 7b 74 72 79 73 74 72 69  et str ${trystri
2310: 6e 67 7d 7d 20 7b 31 7d 20 7b 73 65 74 20 73 74  ng}} {1} {set st
2320: 72 20 22 22 7d 20 7b 0a 0a 09 09 73 65 74 20 63  r ""} {....set c
2330: 6f 64 65 20 5b 63 61 74 63 68 20 7b 73 65 74 20  ode [catch {set 
2340: 72 65 73 75 6c 74 20 5b 65 76 61 6c 20 24 7b 63  result [eval ${c
2350: 6d 64 7d 20 24 7b 73 74 72 7d 5d 7d 20 6d 73 67  md} ${str}]} msg
2360: 5d 0a 09 09 73 65 74 20 72 65 73 75 6c 74 20 22  ]...set result "
2370: 22 0a 0a 09 09 69 66 20 7b 24 63 6f 64 65 7d 20  "....if {$code} 
2380: 7b 0a 09 09 09 73 65 74 20 74 63 6d 64 20 5b 73  {....set tcmd [s
2390: 74 72 69 6e 67 20 74 72 69 6d 20 24 7b 63 6d 64  tring trim ${cmd
23a0: 7d 5d 0a 09 09 09 23 20 70 75 74 73 20 73 74 64  }]....# puts std
23b0: 65 72 72 20 6d 73 67 3d 24 6d 73 67 0a 09 09 09  err msg=$msg....
23c0: 23 20 58 58 58 20 73 65 65 0a 09 09 09 23 20 20  # XXX see....#  
23d0: 20 20 20 20 20 20 20 74 63 6c 49 6e 64 65 78 4f         tclIndexO
23e0: 62 6a 2e 63 0a 09 09 09 23 20 20 20 20 20 20 20  bj.c....#       
23f0: 20 20 74 6b 49 6d 67 50 68 6f 74 6f 2e 63 0a 09    tkImgPhoto.c..
2400: 09 09 23 20 58 58 58 0a 09 09 09 69 66 20 7b 5b  ..# XXX....if {[
2410: 72 65 67 65 78 70 20 5c 0a 09 09 09 09 7b 28 62  regexp \.....{(b
2420: 61 64 7c 61 6d 62 69 67 75 6f 75 73 7c 75 6e 72  ad|ambiguous|unr
2430: 65 63 6f 67 6e 69 7a 65 64 29 20 2e 2a 22 2d 2d  ecognized) .*"--
2440: 2d 2d 22 3a 20 2a 6d 75 73 74 20 2a 62 65 28 20  --": *must *be( 
2450: 2e 2a 24 29 7d 20 5c 0a 09 09 09 09 24 7b 6d 73  .*$)} \.....${ms
2460: 67 7d 20 61 6c 6c 20 6a 75 6e 6b 20 72 61 77 5d  g} all junk raw]
2470: 0a 09 09 09 7d 20 7b 0a 09 09 09 09 72 65 67 73  ....} {.....regs
2480: 75 62 20 2d 61 6c 6c 20 2d 2d 20 2c 20 24 7b 72  ub -all -- , ${r
2490: 61 77 7d 20 7b 20 7d 20 72 61 77 0a 09 09 09 09  aw} { } raw.....
24a0: 73 65 74 20 6c 65 6e 20 5b 6c 6c 65 6e 67 74 68  set len [llength
24b0: 20 24 7b 72 61 77 7d 5d 0a 09 09 09 09 73 65 74   ${raw}].....set
24c0: 20 6c 65 6e 5f 32 20 5b 65 78 70 72 20 24 7b 6c   len_2 [expr ${l
24d0: 65 6e 7d 20 2d 20 32 5d 0a 09 09 09 09 66 6f 72  en} - 2].....for
24e0: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 7b 69 7d   {set i 0} {${i}
24f0: 20 3c 20 24 7b 6c 65 6e 7d 7d 20 7b 69 6e 63 72   < ${len}} {incr
2500: 20 69 7d 20 7b 0a 09 09 09 09 09 73 65 74 20 77   i} {......set w
2510: 6f 72 64 20 5b 6c 69 6e 64 65 78 20 24 7b 72 61  ord [lindex ${ra
2520: 77 7d 20 24 7b 69 7d 5d 0a 09 09 09 09 09 69 66  w} ${i}]......if
2530: 20 7b 22 6f 72 22 20 21 3d 20 24 7b 77 6f 72 64   {"or" != ${word
2540: 7d 20 26 26 20 24 7b 69 7d 20 21 3d 20 24 7b 6c  } && ${i} != ${l
2550: 65 6e 5f 32 7d 7d 20 7b 0a 09 09 09 09 09 09 6c  en_2}} {.......l
2560: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 7b  append result ${
2570: 77 6f 72 64 7d 0a 09 09 09 09 09 7d 0a 09 09 09  word}......}....
2580: 09 7d 0a 09 09 09 09 69 66 20 7b 5b 73 74 72 69  .}.....if {[stri
2590: 6e 67 20 6c 65 6e 67 74 68 20 24 7b 72 65 73 75  ng length ${resu
25a0: 6c 74 7d 5d 20 26 26 20 5c 0a 09 09 09 09 09 2d  lt}] && \......-
25b0: 31 20 3d 3d 20 5b 73 74 72 69 6e 67 20 66 69 72  1 == [string fir
25c0: 73 74 20 24 7b 74 72 79 73 74 72 69 6e 67 7d 20  st ${trystring} 
25d0: 24 7b 72 65 73 75 6c 74 7d 5d 0a 09 09 09 09 7d  ${result}].....}
25e0: 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
25f0: 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  TryFromList ${te
2600: 78 74 7d 20 24 7b 72 65 73 75 6c 74 7d 5d 0a 09  xt} ${result}]..
2610: 09 09 09 7d 0a 0a 09 09 09 7d 20 65 6c 73 65 69  ...}.....} elsei
2620: 66 20 7b 5b 72 65 67 65 78 70 20 5c 0a 09 09 09  f {[regexp \....
2630: 09 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20  ."wrong # args: 
2640: 73 68 6f 75 6c 64 20 62 65 20 5c 22 3f 24 7b 74  should be \"?${t
2650: 63 6d 64 7d 5c 5b 5e 20 5c 74 5c 5d 2a 5c 28 2e  cmd}\[^ \t\]*\(.
2660: 2a 5c 5b 5e 5c 22 5c 5d 5c 29 22 20 5c 0a 09 09  *\[^\"\]\)" \...
2670: 09 09 24 7b 6d 73 67 7d 20 61 6c 6c 20 68 69 6e  ..${msg} all hin
2680: 74 5d 0a 0a 09 09 09 7d 20 7b 0a 0a 09 09 09 09  t].....} {......
2690: 23 20 58 58 58 20 73 65 65 20 74 63 6c 49 6e 64  # XXX see tclInd
26a0: 65 78 4f 62 6a 2e 63 20 58 58 58 0a 09 09 09 09  exObj.c XXX.....
26b0: 69 66 20 7b 2d 31 20 3d 3d 20 5b 73 74 72 69 6e  if {-1 == [strin
26c0: 67 20 66 69 72 73 74 20 24 7b 74 72 79 73 74 72  g first ${trystr
26d0: 69 6e 67 7d 20 24 7b 68 69 6e 74 7d 5d 7d 20 7b  ing} ${hint}]} {
26e0: 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  ......return [Di
26f0: 73 70 6c 61 79 48 69 6e 74 73 20 5b 6c 69 73 74  splayHints [list
2700: 20 3c 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24   <[string trim $
2710: 68 69 6e 74 5d 3e 5d 5d 0a 09 09 09 09 7d 0a 09  hint]>]].....}..
2720: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 23  ..} else {.....#
2730: 20 63 68 65 63 6b 2c 20 69 66 20 69 74 27 73 20   check, if it's 
2740: 61 20 62 6c 74 20 65 72 72 6f 72 20 6d 73 67 20  a blt error msg 
2750: 2e 2e 2e 0a 09 09 09 09 23 0a 09 09 09 09 73 65  ........#.....se
2760: 74 20 6d 73 67 6c 73 74 20 5b 73 70 6c 69 74 20  t msglst [split 
2770: 24 7b 6d 73 67 7d 20 5c 6e 5d 0a 09 09 09 09 66  ${msg} \n].....f
2780: 6f 72 65 61 63 68 20 6c 69 6e 65 20 24 7b 6d 73  oreach line ${ms
2790: 67 6c 73 74 7d 20 7b 0a 09 09 09 09 09 69 66 20  glst} {......if 
27a0: 7b 5b 72 65 67 65 78 70 20 22 24 7b 74 63 6d 64  {[regexp "${tcmd
27b0: 7d 5c 5b 20 5c 74 5c 5d 5c 2b 5c 28 5c 5b 5e 20  }\[ \t\]\+\(\[^ 
27c0: 5c 74 5c 5d 2a 5c 29 5c 5b 5e 3a 5c 5d 2a 24 22  \t\]*\)\[^:\]*$"
27d0: 20 5c 0a 09 09 09 09 09 09 24 7b 6c 69 6e 65 7d   \.......${line}
27e0: 20 61 6c 6c 20 73 75 62 5d 0a 09 09 09 09 09 7d   all sub]......}
27f0: 20 7b 0a 09 09 09 09 09 09 6c 61 70 70 65 6e 64   {.......lappend
2800: 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 7b   result [list ${
2810: 73 75 62 7d 5d 0a 09 09 09 09 09 7d 0a 09 09 09  sub}]......}....
2820: 09 7d 0a 09 09 09 09 69 66 20 7b 5b 73 74 72 69  .}.....if {[stri
2830: 6e 67 20 6c 65 6e 67 74 68 20 24 7b 72 65 73 75  ng length ${resu
2840: 6c 74 7d 5d 20 26 26 20 5c 0a 09 09 09 09 09 2d  lt}] && \......-
2850: 31 20 3d 3d 20 5b 73 74 72 69 6e 67 20 66 69 72  1 == [string fir
2860: 73 74 20 24 7b 74 72 79 73 74 72 69 6e 67 7d 20  st ${trystring} 
2870: 24 7b 72 65 73 75 6c 74 7d 5d 0a 09 09 09 09 7d  ${result}].....}
2880: 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
2890: 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  TryFromList ${te
28a0: 78 74 7d 20 24 7b 72 65 73 75 6c 74 7d 5d 0a 09  xt} ${result}]..
28b0: 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  ...}....}...}...
28c0: 69 66 20 7b 22 22 20 3d 3d 20 24 7b 73 74 72 7d  if {"" == ${str}
28d0: 7d 20 7b 0a 09 09 09 62 72 65 61 6b 0a 09 09 7d  } {....break...}
28e0: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
28f0: 0a 0a 23 2a 2a 0a 23 20 74 72 79 20 74 6f 20 67  ..#**.# try to g
2900: 65 74 20 63 61 73 73 65 73 20 66 6f 72 20 63 6f  et casses for co
2910: 6d 6d 61 6e 64 73 20 77 68 69 63 68 0a 23 20 61  mmands which.# a
2920: 6c 6c 6f 77 20 60 63 6f 6e 66 69 67 75 72 65 27  llow `configure'
2930: 20 28 63 67 65 74 29 2e 0a 23 20 40 70 61 72 61   (cget)..# @para
2940: 6d 20 20 63 6f 6d 6d 61 6e 64 2e 0a 23 20 40 70  m  command..# @p
2950: 61 72 61 6d 20 20 6f 70 74 69 6f 6e 73 54 20 77  aram  optionsT w
2960: 68 65 72 65 20 74 68 65 20 74 61 62 6c 65 20 77  here the table w
2970: 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 2e 0a 23  ill be stored..#
2980: 20 40 72 65 74 75 72 6e 20 6e 75 6d 62 65 72 20   @return number 
2990: 6f 66 20 6f 70 74 69 6f 6e 73 0a 23 20 40 64 61  of options.# @da
29a0: 74 65 20 20 20 53 61 74 2d 53 65 70 2d 31 38 0a  te   Sat-Sep-18.
29b0: 23 0a 70 72 6f 63 20 43 6c 61 73 73 54 61 62 6c  #.proc ClassTabl
29c0: 65 20 7b 63 6d 64 7d 20 7b 0a 0a 09 23 20 66 69  e {cmd} {...# fi
29d0: 72 73 74 20 77 65 20 62 75 69 6c 64 20 61 6e 20  rst we build an 
29e0: 6f 70 74 69 6f 6e 20 74 61 62 6c 65 2e 0a 09 23  option table...#
29f0: 20 57 65 20 61 6c 77 61 79 73 20 75 73 65 20 60   We always use `
2a00: 63 6f 6e 66 69 67 75 72 65 27 20 68 65 72 65 2c  configure' here,
2a10: 0a 09 23 20 62 65 63 61 75 73 65 20 63 67 65 74  ..# because cget
2a20: 20 77 69 6c 6c 20 6e 6f 74 20 72 65 74 75 72 6e   will not return
2a30: 20 74 68 65 0a 09 23 20 6f 70 74 69 6f 6e 20 74   the..# option t
2a40: 61 62 6c 65 2e 0a 09 23 0a 09 69 66 20 7b 5b 63  able...#..if {[c
2a50: 61 74 63 68 20 5b 6c 69 73 74 20 73 65 74 20 6f  atch [list set o
2a60: 70 74 69 6f 6e 5f 74 61 62 6c 65 20 5b 65 76 61  ption_table [eva
2a70: 6c 20 24 7b 63 6d 64 7d 20 63 6f 6e 66 69 67 75  l ${cmd} configu
2a80: 72 65 5d 5d 20 6d 73 67 5d 7d 20 7b 0a 09 09 72  re]] msg]} {...r
2a90: 65 74 75 72 6e 20 22 22 0a 09 7d 0a 09 73 65 74  eturn ""..}..set
2aa0: 20 63 6c 61 73 73 65 73 20 22 22 0a 09 66 6f 72   classes ""..for
2ab0: 65 61 63 68 20 6f 70 74 6c 69 6e 65 20 24 7b 6f  each optline ${o
2ac0: 70 74 69 6f 6e 5f 74 61 62 6c 65 7d 20 7b 0a 09  ption_table} {..
2ad0: 09 69 66 20 7b 35 20 21 3d 20 5b 6c 6c 65 6e 67  .if {5 != [lleng
2ae0: 74 68 20 24 7b 6f 70 74 6c 69 6e 65 7d 5d 7d 20  th ${optline}]} 
2af0: 63 6f 6e 74 69 6e 75 65 20 65 6c 73 65 20 7b 0a  continue else {.
2b00: 09 09 09 6c 61 70 70 65 6e 64 20 63 6c 61 73 73  ...lappend class
2b10: 65 73 20 5b 6c 69 6e 64 65 78 20 24 7b 6f 70 74  es [lindex ${opt
2b20: 6c 69 6e 65 7d 20 32 5d 0a 09 09 7d 0a 09 7d 0a  line} 2]...}..}.
2b30: 09 72 65 74 75 72 6e 20 24 7b 63 6c 61 73 73 65  .return ${classe
2b40: 73 7d 0a 7d 0a 0a 23 2a 2a 0a 23 20 74 72 79 20  s}.}..#**.# try 
2b50: 74 6f 20 67 65 74 20 6f 70 74 69 6f 6e 73 20 66  to get options f
2b60: 6f 72 20 63 6f 6d 6d 61 6e 64 73 20 77 68 69 63  or commands whic
2b70: 68 0a 23 20 61 6c 6c 6f 77 20 60 63 6f 6e 66 69  h.# allow `confi
2b80: 67 75 72 65 27 20 28 63 67 65 74 29 2e 0a 23 20  gure' (cget)..# 
2b90: 40 70 61 72 61 6d 20 63 6f 6d 6d 61 6e 64 2e 0a  @param command..
2ba0: 23 20 40 70 61 72 61 6d 20 6f 70 74 69 6f 6e 73  # @param options
2bb0: 54 20 77 68 65 72 65 20 74 68 65 20 74 61 62 6c  T where the tabl
2bc0: 65 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  e will be stored
2bd0: 2e 0a 23 20 40 72 65 74 75 72 6e 20 6e 75 6d 62  ..# @return numb
2be0: 65 72 20 6f 66 20 6f 70 74 69 6f 6e 73 0a 23 20  er of options.# 
2bf0: 40 64 61 74 65 20 53 65 70 2d 31 34 2d 31 39 39  @date Sep-14-199
2c00: 39 0a 23 0a 70 72 6f 63 20 4f 70 74 69 6f 6e 54  9.#.proc OptionT
2c10: 61 62 6c 65 20 7b 63 6d 64 20 6f 70 74 69 6f 6e  able {cmd option
2c20: 73 54 7d 20 7b 0a 09 75 70 76 61 72 20 24 6f 70  sT} {..upvar $op
2c30: 74 69 6f 6e 73 54 20 6f 70 74 69 6f 6e 73 0a 09  tionsT options..
2c40: 23 20 66 69 72 73 74 20 77 65 20 62 75 69 6c 64  # first we build
2c50: 20 61 6e 20 6f 70 74 69 6f 6e 20 74 61 62 6c 65   an option table
2c60: 2e 0a 09 23 20 57 65 20 61 6c 77 61 79 73 20 75  ...# We always u
2c70: 73 65 20 60 63 6f 6e 66 69 67 75 72 65 27 20 68  se `configure' h
2c80: 65 72 65 2c 0a 09 23 20 62 65 63 61 75 73 65 20  ere,..# because 
2c90: 63 67 65 74 20 77 69 6c 6c 20 6e 6f 74 20 72 65  cget will not re
2ca0: 74 75 72 6e 20 74 68 65 0a 09 23 20 6f 70 74 69  turn the..# opti
2cb0: 6f 6e 20 74 61 62 6c 65 2e 0a 09 23 0a 09 69 66  on table...#..if
2cc0: 20 7b 5b 63 61 74 63 68 20 5b 6c 69 73 74 20 73   {[catch [list s
2cd0: 65 74 20 6f 70 74 69 6f 6e 5f 74 61 62 6c 65 20  et option_table 
2ce0: 5b 65 76 61 6c 20 24 7b 63 6d 64 7d 20 63 6f 6e  [eval ${cmd} con
2cf0: 66 69 67 75 72 65 5d 5d 20 6d 73 67 5d 7d 20 7b  figure]] msg]} {
2d00: 0a 09 09 72 65 74 75 72 6e 20 30 0a 09 7d 0a 09  ...return 0..}..
2d10: 73 65 74 20 72 65 74 76 61 6c 20 30 0a 09 66 6f  set retval 0..fo
2d20: 72 65 61 63 68 20 6f 70 74 6c 69 6e 65 20 24 7b  reach optline ${
2d30: 6f 70 74 69 6f 6e 5f 74 61 62 6c 65 7d 20 7b 0a  option_table} {.
2d40: 09 09 69 66 20 7b 35 20 3d 3d 20 5b 6c 6c 65 6e  ..if {5 == [llen
2d50: 67 74 68 20 24 7b 6f 70 74 6c 69 6e 65 7d 5d 7d  gth ${optline}]}
2d60: 20 7b 0a 09 09 09 23 20 74 6b 20 72 65 74 75 72   {....# tk retur
2d70: 6e 73 20 61 20 6c 69 73 74 20 6f 66 20 6c 65 6e  ns a list of len
2d80: 67 74 68 20 35 0a 09 09 09 6c 61 70 70 65 6e 64  gth 5....lappend
2d90: 20 6f 70 74 69 6f 6e 73 28 73 77 69 74 63 68 65   options(switche
2da0: 73 29 20 5b 6c 69 6e 64 65 78 20 24 7b 6f 70 74  s) [lindex ${opt
2db0: 6c 69 6e 65 7d 20 30 5d 0a 09 09 09 6c 61 70 70  line} 0]....lapp
2dc0: 65 6e 64 20 6f 70 74 69 6f 6e 73 28 76 61 6c 75  end options(valu
2dd0: 65 29 20 20 20 20 5b 6c 69 6e 64 65 78 20 24 7b  e)    [lindex ${
2de0: 6f 70 74 6c 69 6e 65 7d 20 34 5d 0a 09 09 09 69  optline} 4]....i
2df0: 6e 63 72 20 72 65 74 76 61 6c 0a 09 09 7d 20 65  ncr retval...} e
2e00: 6c 73 65 69 66 20 7b 33 20 3d 3d 20 5b 6c 6c 65  lseif {3 == [lle
2e10: 6e 67 74 68 20 24 7b 6f 70 74 6c 69 6e 65 7d 5d  ngth ${optline}]
2e20: 7d 20 7b 0a 09 09 09 23 20 69 74 63 6c 20 72 65  } {....# itcl re
2e30: 74 75 72 6e 73 20 61 20 6c 69 73 74 20 6f 66 20  turns a list of 
2e40: 6c 65 6e 67 74 68 20 33 0a 09 09 09 6c 61 70 70  length 3....lapp
2e50: 65 6e 64 20 6f 70 74 69 6f 6e 73 28 73 77 69 74  end options(swit
2e60: 63 68 65 73 29 20 5b 6c 69 6e 64 65 78 20 24 7b  ches) [lindex ${
2e70: 6f 70 74 6c 69 6e 65 7d 20 30 5d 0a 09 09 09 6c  optline} 0]....l
2e80: 61 70 70 65 6e 64 20 6f 70 74 69 6f 6e 73 28 76  append options(v
2e90: 61 6c 75 65 29 20 20 20 20 5b 6c 69 6e 64 65 78  alue)    [lindex
2ea0: 20 24 7b 6f 70 74 6c 69 6e 65 7d 20 32 5d 0a 09   ${optline} 2]..
2eb0: 09 09 69 6e 63 72 20 72 65 74 76 61 6c 0a 09 09  ..incr retval...
2ec0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 72 65  }..}..return $re
2ed0: 74 76 61 6c 0a 7d 0a 0a 23 2a 2a 0a 23 20 74 72  tval.}..#**.# tr
2ee0: 79 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 61 20  y to complete a 
2ef0: 60 63 6d 64 20 63 6f 6e 66 69 67 75 72 65 7c 63  `cmd configure|c
2f00: 67 65 74 20 2e 2e 27 20 66 72 6f 6d 20 74 68 65  get ..' from the
2f10: 20 63 6f 6d 6d 61 6e 64 27 73 20 6f 70 74 69 6f   command's optio
2f20: 6e 73 2e 0a 23 20 40 70 61 72 61 6d 20 20 20 74  ns..# @param   t
2f30: 65 78 74 20 73 74 61 72 74 20 6c 69 6e 65 20 63  ext start line c
2f40: 6d 64 2c 20 73 74 61 6e 64 61 72 64 20 74 63 6c  md, standard tcl
2f50: 72 65 61 64 6c 69 6e 65 43 6f 6d 70 6c 65 74 65  readlineComplete
2f60: 72 20 61 72 67 75 6d 65 6e 74 73 2e 0a 23 20 40  r arguments..# @
2f70: 72 65 74 75 72 6e 20 20 2d 2d 20 61 20 66 6c 61  return  -- a fla
2f80: 67 20 69 6e 64 69 63 61 74 69 6e 67 2c 20 69 66  g indicating, if
2f90: 20 28 63 67 65 74 7c 63 6f 6e 66 69 67 75 72 65   (cget|configure
2fa0: 29 20 77 61 73 20 66 6f 75 6e 64 2e 0a 23 20 40  ) was found..# @
2fb0: 72 65 74 75 72 6e 20 20 72 65 73 75 6c 74 54 20  return  resultT 
2fc0: 2d 2d 20 61 20 74 63 6c 72 65 61 64 6c 69 6e 65  -- a tclreadline
2fd0: 20 63 6f 6d 70 6c 65 74 65 72 20 66 6f 72 6d 61   completer forma
2fe0: 74 74 65 64 20 73 74 72 69 6e 67 2e 0a 23 20 40  tted string..# @
2ff0: 64 61 74 65 20 20 20 20 53 65 70 2d 31 34 2d 31  date    Sep-14-1
3000: 39 39 39 0a 23 0a 70 72 6f 63 20 43 6f 6d 70 6c  999.#.proc Compl
3010: 65 74 65 46 72 6f 6d 4f 70 74 69 6f 6e 73 20 7b  eteFromOptions {
3020: 74 65 78 74 20 73 74 61 72 74 20 6c 69 6e 65 20  text start line 
3030: 72 65 73 75 6c 74 54 7d 20 7b 0a 0a 09 75 70 76  resultT} {...upv
3040: 61 72 20 24 7b 72 65 73 75 6c 74 54 7d 20 72 65  ar ${resultT} re
3050: 73 75 6c 74 0a 09 73 65 74 20 72 65 73 75 6c 74  sult..set result
3060: 20 22 22 0a 0a 09 23 20 63 68 65 63 6b 20 69 66   ""...# check if
3070: 20 65 69 74 68 65 72 20 60 63 6f 6e 66 69 67 75   either `configu
3080: 72 65 27 20 6f 72 20 60 63 67 65 74 27 20 69 73  re' or `cget' is
3090: 20 70 72 65 73 65 6e 74 2e 0a 09 23 0a 09 73 65   present...#..se
30a0: 74 20 6c 73 74 20 5b 50 72 6f 70 65 72 4c 69 73  t lst [ProperLis
30b0: 74 20 24 7b 6c 69 6e 65 7d 5d 0a 09 66 6f 72 65  t ${line}]..fore
30c0: 61 63 68 20 6b 65 79 77 6f 72 64 20 7b 63 6f 6e  ach keyword {con
30d0: 66 69 67 75 72 65 20 63 67 65 74 7d 20 7b 0a 09  figure cget} {..
30e0: 09 73 65 74 20 69 64 78 20 5b 6c 73 65 61 72 63  .set idx [lsearc
30f0: 68 20 24 7b 6c 73 74 7d 20 24 7b 6b 65 79 77 6f  h ${lst} ${keywo
3100: 72 64 7d 5d 0a 09 09 69 66 20 7b 2d 31 20 21 3d  rd}]...if {-1 !=
3110: 20 24 7b 69 64 78 7d 7d 20 7b 0a 09 09 09 62 72   ${idx}} {....br
3120: 65 61 6b 0a 09 09 7d 0a 09 7d 0a 09 69 66 20 7b  eak...}..}..if {
3130: 2d 31 20 3d 3d 20 24 7b 69 64 78 7d 7d 20 7b 0a  -1 == ${idx}} {.
3140: 09 09 72 65 74 75 72 6e 20 30 0a 09 7d 0a 0a 09  ..return 0..}...
3150: 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 28 63 67  if {[regexp {(cg
3160: 65 74 7c 63 6f 6e 66 69 67 75 72 65 29 24 7d 20  et|configure)$} 
3170: 24 7b 6c 69 6e 65 7d 5d 7d 20 7b 0a 09 09 23 20  ${line}]} {...# 
3180: 77 65 20 61 72 65 20 61 74 20 74 68 65 20 65 6e  we are at the en
3190: 64 20 6f 66 20 28 63 6f 6e 66 69 67 75 72 65 7c  d of (configure|
31a0: 63 67 65 74 29 0a 09 09 23 20 62 75 74 20 74 68  cget)...# but th
31b0: 65 72 65 27 73 20 6e 6f 20 73 70 61 63 65 20 79  ere's no space y
31c0: 65 74 2e 0a 09 09 23 0a 09 09 73 65 74 20 72 65  et....#...set re
31d0: 73 75 6c 74 20 24 7b 74 65 78 74 7d 0a 09 09 72  sult ${text}...r
31e0: 65 74 75 72 6e 20 31 0a 09 7d 0a 0a 09 23 20 73  eturn 1..}...# s
31f0: 65 70 61 72 61 74 65 20 74 68 65 20 63 6f 6d 6d  eparate the comm
3200: 61 6e 64 2c 20 62 75 74 20 65 78 63 6c 75 64 65  and, but exclude
3210: 20 28 63 67 65 74 7c 63 6f 6e 66 69 67 75 72 65   (cget|configure
3220: 29 0a 09 23 20 62 65 63 61 75 73 65 20 63 67 65  )..# because cge
3230: 74 20 77 6f 6e 27 74 20 72 65 74 75 72 6e 20 74  t won't return t
3240: 68 65 20 6f 70 74 69 6f 6e 20 74 61 62 6c 65 2e  he option table.
3250: 20 49 6e 73 74 65 61 64 0a 09 23 20 4f 70 74 69   Instead..# Opti
3260: 6f 6e 54 61 62 6c 65 20 61 6c 77 61 79 73 20 75  onTable always u
3270: 73 65 73 20 60 63 6f 6e 66 69 67 75 72 65 27 20  ses `configure' 
3280: 74 6f 20 67 65 74 20 74 68 65 0a 09 23 20 6f 70  to get the..# op
3290: 74 69 6f 6e 20 74 61 62 6c 65 2e 0a 09 23 0a 09  tion table...#..
32a0: 73 65 74 20 63 6d 64 20 5b 6c 72 61 6e 67 65 20  set cmd [lrange 
32b0: 24 7b 6c 73 74 7d 20 30 20 5b 65 78 70 72 20 24  ${lst} 0 [expr $
32c0: 7b 69 64 78 7d 20 2d 20 31 5d 5d 0a 0a 09 54 72  {idx} - 1]]...Tr
32d0: 61 63 65 54 65 78 74 20 24 7b 63 6d 64 7d 0a 09  aceText ${cmd}..
32e0: 69 66 20 7b 30 20 3c 20 5b 4f 70 74 69 6f 6e 54  if {0 < [OptionT
32f0: 61 62 6c 65 20 24 7b 63 6d 64 7d 20 6f 70 74 69  able ${cmd} opti
3300: 6f 6e 73 5d 7d 20 7b 0a 0a 09 09 73 65 74 20 70  ons]} {....set p
3310: 72 65 76 20 5b 50 72 65 76 69 6f 75 73 57 6f 72  rev [PreviousWor
3320: 64 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e  d ${start} ${lin
3330: 65 7d 5d 0a 09 09 69 66 20 7b 2d 31 20 21 3d 20  e}]...if {-1 != 
3340: 5b 73 65 74 20 66 6f 75 6e 64 20 5b 6c 73 65 61  [set found [lsea
3350: 72 63 68 20 2d 65 78 61 63 74 20 24 6f 70 74 69  rch -exact $opti
3360: 6f 6e 73 28 73 77 69 74 63 68 65 73 29 20 24 7b  ons(switches) ${
3370: 70 72 65 76 7d 5d 5d 7d 20 7b 0a 0a 09 09 09 23  prev}]]} {.....#
3380: 20 63 6f 6d 70 6c 65 74 65 20 6f 6e 6c 79 20 69   complete only i
3390: 66 20 74 68 65 20 75 73 65 72 20 68 61 73 20 6e  f the user has n
33a0: 6f 74 0a 09 09 09 23 20 61 6c 72 65 61 64 79 20  ot....# already 
33b0: 65 6e 74 65 72 65 64 20 73 6f 6d 65 74 68 69 6e  entered somethin
33c0: 67 20 68 65 72 65 2e 0a 09 09 09 23 0a 09 09 09  g here.....#....
33d0: 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 7b  if {![llength ${
33e0: 74 65 78 74 7d 5d 7d 20 7b 0a 0a 09 09 09 09 23  text}]} {......#
33f0: 20 63 68 65 63 6b 20 66 69 72 73 74 2c 20 69 66   check first, if
3400: 20 74 68 65 20 53 70 65 63 69 66 69 63 53 77 69   the SpecificSwi
3410: 74 63 68 43 6f 6d 70 6c 65 74 65 72 0a 09 09 09  tchCompleter....
3420: 09 23 20 6b 6e 6f 77 73 20 73 6f 6d 65 74 68 69  .# knows somethi
3430: 6e 67 20 61 62 6f 75 74 20 74 68 69 73 20 73 77  ng about this sw
3440: 69 74 63 68 2e 20 28 6e 6f 74 65 20 74 68 61 74  itch. (note that
3450: 0a 09 09 09 09 23 20 60 70 72 65 76 27 20 63 6f  .....# `prev' co
3460: 6e 74 61 69 6e 73 20 74 68 65 20 73 77 69 74 63  ntains the switc
3470: 68 29 2e 20 54 68 65 20 60 30 27 20 61 73 20 6c  h). The `0' as l
3480: 61 73 74 0a 09 09 09 09 23 20 61 72 67 75 6d 65  ast.....# argume
3490: 6e 74 20 6d 61 6b 65 73 20 74 68 65 20 53 70 65  nt makes the Spe
34a0: 63 69 66 69 63 53 77 69 74 63 68 43 6f 6d 70 6c  cificSwitchCompl
34b0: 65 74 65 72 0a 09 09 09 09 23 20 72 65 74 75 72  eter.....# retur
34c0: 6e 69 6e 67 20 22 22 20 69 66 20 69 74 20 6b 6e  ning "" if it kn
34d0: 6f 77 73 20 6e 6f 74 68 69 6e 67 20 73 70 65 63  ows nothing spec
34e0: 69 66 69 63 0a 09 09 09 09 23 20 61 62 6f 75 74  ific.....# about
34f0: 20 74 68 69 73 20 73 77 69 74 63 68 2e 0a 09 09   this switch....
3500: 09 09 23 0a 09 09 09 09 73 65 74 20 76 61 6c 75  ..#.....set valu
3510: 65 73 20 5b 53 70 65 63 69 66 69 63 53 77 69 74  es [SpecificSwit
3520: 63 68 43 6f 6d 70 6c 65 74 65 72 20 5c 0a 09 09  chCompleter \...
3530: 09 09 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72  ..${text} ${star
3540: 74 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 72 65  t} ${line} ${pre
3550: 76 7d 20 30 5d 0a 0a 09 09 09 09 69 66 20 5b 73  v} 0]......if [s
3560: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b 76  tring length ${v
3570: 61 6c 75 65 73 7d 5d 20 7b 0a 09 09 09 09 09 73  alues}] {......s
3580: 65 74 20 72 65 73 75 6c 74 20 24 7b 76 61 6c 75  et result ${valu
3590: 65 73 7d 0a 09 09 09 09 09 72 65 74 75 72 6e 20  es}......return 
35a0: 31 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09  1.....} else {..
35b0: 09 09 09 09 73 65 74 20 76 61 6c 20 5b 6c 69 6e  ....set val [lin
35c0: 64 65 78 20 24 6f 70 74 69 6f 6e 73 28 76 61 6c  dex $options(val
35d0: 75 65 29 20 24 7b 66 6f 75 6e 64 7d 5d 0a 09 09  ue) ${found}]...
35e0: 09 09 09 69 66 20 5b 73 74 72 69 6e 67 20 6c 65  ...if [string le
35f0: 6e 67 74 68 20 24 7b 76 61 6c 7d 5d 20 7b 0a 09  ngth ${val}] {..
3600: 09 09 09 09 09 23 20 72 65 74 75 72 6e 20 74 68  .....# return th
3610: 65 20 6f 6c 64 20 76 61 6c 75 65 20 6f 6e 6c 79  e old value only
3620: 2c 20 69 66 20 69 74 27 73 20 6e 6f 6e 2d 65 6d  , if it's non-em
3630: 70 74 79 2e 0a 09 09 09 09 09 09 23 20 55 73 65  pty........# Use
3640: 20 74 68 69 73 20 64 6f 75 62 6c 65 20 6c 69 73   this double lis
3650: 74 20 74 6f 20 71 75 6f 74 65 20 6f 70 74 69 6f  t to quote optio
3660: 6e 0a 09 09 09 09 09 09 23 20 76 61 6c 75 65 73  n.......# values
3670: 20 77 68 69 63 68 20 68 61 76 65 20 74 6f 20 62   which have to b
3680: 65 20 71 75 6f 74 65 64 2e 0a 09 09 09 09 09 09  e quoted........
3690: 23 0a 09 09 09 09 09 09 73 65 74 20 72 65 73 75  #.......set resu
36a0: 6c 74 20 5b 6c 69 73 74 20 5b 6c 69 73 74 20 24  lt [list [list $
36b0: 7b 76 61 6c 7d 5d 5d 0a 09 09 09 09 09 09 72 65  {val}]].......re
36c0: 74 75 72 6e 20 31 0a 09 09 09 09 09 7d 20 65 6c  turn 1......} el
36d0: 73 65 20 7b 0a 09 09 09 09 09 09 73 65 74 20 72  se {.......set r
36e0: 65 73 75 6c 74 20 22 22 0a 09 09 09 09 09 09 72  esult "".......r
36f0: 65 74 75 72 6e 20 31 0a 09 09 09 09 09 7d 0a 09  eturn 1......}..
3700: 09 09 09 7d 0a 09 09 09 7d 20 65 6c 73 65 20 7b  ...}....} else {
3710: 0a 09 09 09 09 73 65 74 20 72 65 73 75 6c 74 20  .....set result 
3720: 5b 53 70 65 63 69 66 69 63 53 77 69 74 63 68 43  [SpecificSwitchC
3730: 6f 6d 70 6c 65 74 65 72 20 5c 0a 09 09 09 09 24  ompleter \.....$
3740: 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20  {text} ${start} 
3750: 24 7b 6c 69 6e 65 7d 20 24 7b 70 72 65 76 7d 20  ${line} ${prev} 
3760: 31 5d 0a 09 09 09 09 72 65 74 75 72 6e 20 31 0a  1].....return 1.
3770: 09 09 09 7d 0a 0a 09 09 7d 20 65 6c 73 65 20 7b  ...}....} else {
3780: 0a 09 09 09 73 65 74 20 72 65 73 75 6c 74 20 5b  ....set result [
3790: 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
37a0: 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 5b 52   ${text} \....[R
37b0: 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
37c0: 20 24 7b 6c 69 6e 65 7d 20 24 6f 70 74 69 6f 6e   ${line} $option
37d0: 73 28 73 77 69 74 63 68 65 73 29 5d 5d 0a 09 09  s(switches)]]...
37e0: 09 72 65 74 75 72 6e 20 31 0a 09 09 7d 0a 09 7d  .return 1...}..}
37f0: 0a 09 72 65 74 75 72 6e 20 31 0a 7d 0a 0a 70 72  ..return 1.}..pr
3800: 6f 63 20 4f 62 6a 65 63 74 43 6c 61 73 73 43 6f  oc ObjectClassCo
3810: 6d 70 6c 65 74 65 72 20 7b 74 65 78 74 20 73 74  mpleter {text st
3820: 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
3830: 20 72 65 73 75 6c 74 54 7d 20 7b 0a 09 75 70 76   resultT} {..upv
3840: 61 72 20 24 7b 72 65 73 75 6c 74 54 7d 20 72 65  ar ${resultT} re
3850: 73 75 6c 74 0a 09 73 65 74 20 63 6d 64 20 5b 4c  sult..set cmd [L
3860: 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 30 5d  index ${line} 0]
3870: 0a 09 69 66 20 7b 22 2e 22 20 3d 3d 20 5b 73 74  ..if {"." == [st
3880: 72 69 6e 67 20 69 6e 64 65 78 20 24 7b 6c 69 6e  ring index ${lin
3890: 65 7d 20 30 5d 7d 20 7b 0a 09 09 23 20 69 74 27  e} 0]} {...# it'
38a0: 73 20 61 20 77 69 64 67 65 74 2e 20 54 72 79 20  s a widget. Try 
38b0: 74 6f 20 67 65 74 20 69 74 27 73 20 63 6c 61 73  to get it's clas
38c0: 73 20 6e 61 6d 65 2e 0a 09 09 23 0a 09 09 69 66  s name....#...if
38d0: 20 7b 21 5b 63 61 74 63 68 20 5b 6c 69 73 74 20   {![catch [list 
38e0: 73 65 74 20 63 6c 61 73 73 20 5b 77 69 6e 66 6f  set class [winfo
38f0: 20 63 6c 61 73 73 20 5b 4c 69 6e 64 65 78 20 24   class [Lindex $
3900: 7b 6c 69 6e 65 7d 20 30 5d 5d 5d 5d 7d 20 7b 0a  {line} 0]]]]} {.
3910: 09 09 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c  ...if {[string l
3920: 65 6e 67 74 68 20 5b 69 6e 66 6f 20 70 72 6f 63  ength [info proc
3930: 20 24 7b 63 6c 61 73 73 7d 4f 62 6a 5d 5d 7d 20   ${class}Obj]]} 
3940: 7b 0a 09 09 09 09 73 65 74 20 72 65 73 75 6c 74  {.....set result
3950: 20 5b 24 7b 63 6c 61 73 73 7d 4f 62 6a 20 24 7b   [${class}Obj ${
3960: 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24  text} ${start} $
3970: 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b  {end} ${line} ${
3980: 70 6f 73 7d 5d 0a 09 09 09 09 23 20 70 75 74 73  pos}].....# puts
3990: 20 73 74 64 65 72 72 20 72 65 73 75 6c 74 3d 7c   stderr result=|
39a0: 24 72 65 73 75 6c 74 7c 0a 09 09 09 09 23 20 6a  $result|.....# j
39b0: 6f 7a 65 2c 20 54 68 75 20 53 65 70 20 33 30 20  oze, Thu Sep 30 
39c0: 31 36 3a 34 33 3a 31 37 20 31 39 39 39 0a 09 09  16:43:17 1999...
39d0: 09 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65  ..if {[string le
39e0: 6e 67 74 68 20 24 72 65 73 75 6c 74 5d 7d 20 7b  ngth $result]} {
39f0: 0a 09 09 09 09 09 72 65 74 75 72 6e 20 31 0a 09  ......return 1..
3a00: 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ...} else {.....
3a10: 09 72 65 74 75 72 6e 20 30 0a 09 09 09 09 7d 0a  .return 0.....}.
3a20: 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ...} else {.....
3a30: 72 65 74 75 72 6e 20 30 0a 09 09 09 7d 0a 09 09  return 0....}...
3a40: 7d 0a 09 7d 0a 09 69 66 20 7b 21 5b 63 61 74 63  }..}..if {![catc
3a50: 68 20 5b 6c 69 73 74 20 73 65 74 20 74 79 70 65  h [list set type
3a60: 20 5b 69 6d 61 67 65 20 74 79 70 65 20 24 7b 63   [image type ${c
3a70: 6d 64 7d 5d 5d 5d 7d 20 7b 0a 09 09 73 77 69 74  md}]]]} {...swit
3a80: 63 68 20 2d 2d 20 24 7b 74 79 70 65 7d 20 7b 0a  ch -- ${type} {.
3a90: 09 09 09 70 68 6f 74 6f 20 7b 0a 09 09 09 09 73  ...photo {.....s
3aa0: 65 74 20 72 65 73 75 6c 74 20 5b 50 68 6f 74 6f  et result [Photo
3ab0: 4f 62 6a 20 24 7b 74 65 78 74 7d 20 24 7b 73 74  Obj ${text} ${st
3ac0: 61 72 74 7d 20 24 7b 65 6e 64 7d 20 24 7b 6c 69  art} ${end} ${li
3ad0: 6e 65 7d 20 24 7b 70 6f 73 7d 5d 0a 09 09 09 09  ne} ${pos}].....
3ae0: 72 65 74 75 72 6e 20 31 0a 09 09 09 7d 0a 09 09  return 1....}...
3af0: 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 23  .default {.....#
3b00: 20 6c 65 74 20 74 68 65 20 66 61 6c 6c 62 61 63   let the fallbac
3b10: 6b 20 63 6f 6d 70 6c 65 74 65 72 73 20 64 6f 20  k completers do 
3b20: 74 68 65 20 6a 6f 62 2e 0a 09 09 09 09 72 65 74  the job......ret
3b30: 75 72 6e 20 30 0a 09 09 09 7d 0a 09 09 7d 0a 09  urn 0....}...}..
3b40: 7d 0a 09 72 65 74 75 72 6e 20 30 0a 7d 0a 0a 70  }..return 0.}..p
3b50: 72 6f 63 20 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  roc CompleteFrom
3b60: 4f 70 74 69 6f 6e 73 4f 72 53 75 62 43 6d 64 73  OptionsOrSubCmds
3b70: 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
3b80: 20 6c 69 6e 65 20 70 6f 73 7d 20 7b 0a 09 69 66   line pos} {..if
3b90: 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4f 70   [CompleteFromOp
3ba0: 74 69 6f 6e 73 20 24 7b 74 65 78 74 7d 20 24 7b  tions ${text} ${
3bb0: 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 20 66  start} ${line} f
3bc0: 72 6f 6d 5f 6f 70 74 73 5d 20 7b 0a 09 09 23 20  rom_opts] {...# 
3bd0: 61 6c 77 61 79 73 20 72 65 74 75 72 6e 2c 20 69  always return, i
3be0: 66 20 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4f 70  f CompleteFromOp
3bf0: 74 69 6f 6e 73 20 72 65 74 75 72 6e 73 20 6e 6f  tions returns no
3c00: 6e 2d 7a 65 72 6f 2c 0a 09 09 23 20 74 68 61 74  n-zero,...# that
3c10: 20 6d 65 61 6e 73 20 28 63 6f 6e 66 69 67 75 72   means (configur
3c20: 65 7c 63 67 65 74 29 20 77 65 72 65 20 70 72 65  e|cget) were pre
3c30: 73 65 6e 74 2e 20 54 68 69 73 20 65 6e 73 75 72  sent. This ensur
3c40: 65 73 0a 09 09 23 20 74 68 61 74 20 54 72 79 53  es...# that TryS
3c50: 75 62 43 6d 64 73 20 77 69 6c 6c 20 6e 6f 74 20  ubCmds will not 
3c60: 63 6f 6e 66 69 67 75 72 65 20 73 6f 6d 65 74 68  configure someth
3c70: 69 6e 67 20 62 79 20 63 68 61 6e 63 65 2e 0a 09  ing by chance...
3c80: 09 23 0a 09 09 72 65 74 75 72 6e 20 24 7b 66 72  .#...return ${fr
3c90: 6f 6d 5f 6f 70 74 73 7d 0a 09 7d 20 65 6c 73 65  om_opts}..} else
3ca0: 20 7b 0a 09 09 23 20 70 75 74 73 20 73 74 64 65   {...# puts stde
3cb0: 72 72 20 5c 6e 5c 6e 5b 6c 72 61 6e 67 65 20 5b  rr \n\n[lrange [
3cc0: 50 72 6f 70 65 72 4c 69 73 74 20 24 7b 6c 69 6e  ProperList ${lin
3cd0: 65 7d 5d 20 30 20 5b 65 78 70 72 20 24 70 6f 73  e}] 0 [expr $pos
3ce0: 20 2d 20 31 5d 5d 5c 6e 0a 09 09 72 65 74 75 72   - 1]]\n...retur
3cf0: 6e 20 5b 54 72 79 53 75 62 43 6d 64 73 20 24 7b  n [TrySubCmds ${
3d00: 74 65 78 74 7d 20 5c 0a 09 09 5b 6c 72 61 6e 67  text} \...[lrang
3d10: 65 20 5b 50 72 6f 70 65 72 4c 69 73 74 20 24 7b  e [ProperList ${
3d20: 6c 69 6e 65 7d 5d 20 30 20 5b 65 78 70 72 20 24  line}] 0 [expr $
3d30: 70 6f 73 20 2d 20 31 5d 5d 5d 0a 09 7d 0a 09 72  pos - 1]]]..}..r
3d40: 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 23 2a 2a 0a  eturn "".}..#**.
3d50: 23 20 54 4f 44 4f 3a 20 73 68 69 74 2e 20 6d 61  # TODO: shit. ma
3d60: 6b 65 20 74 68 69 73 20 62 65 74 74 65 72 21 0a  ke this better!.
3d70: 23 20 40 70 61 72 61 6d 20 20 74 65 78 74 2c 20  # @param  text, 
3d80: 61 20 73 74 64 20 63 6f 6d 70 6c 65 74 65 72 20  a std completer 
3d90: 61 72 67 75 6d 65 6e 74 20 28 63 75 72 72 65 6e  argument (curren
3da0: 74 20 77 6f 72 64 29 2e 0a 23 20 40 70 61 72 61  t word)..# @para
3db0: 6d 20 20 66 75 6c 6c 70 61 72 74 2c 20 74 68 65  m  fullpart, the
3dc0: 20 66 75 6c 6c 20 74 65 78 74 20 6f 66 20 74 68   full text of th
3dd0: 65 20 63 75 72 72 65 6e 74 20 70 6f 73 69 74 69  e current positi
3de0: 6f 6e 2e 0a 23 20 40 70 61 72 61 6d 20 20 6c 73  on..# @param  ls
3df0: 74 2c 20 74 68 65 20 6c 69 73 74 20 74 6f 20 63  t, the list to c
3e00: 6f 6d 70 6c 65 74 65 20 66 72 6f 6d 2e 0a 23 20  omplete from..# 
3e10: 40 70 61 72 61 6d 20 20 70 72 65 2c 20 6c 65 61  @param  pre, lea
3e20: 64 69 6e 67 20 60 71 75 6f 74 65 27 2e 0a 23 20  ding `quote'..# 
3e30: 40 70 61 72 61 6d 20 20 73 65 70 2c 20 77 6f 72  @param  sep, wor
3e40: 64 20 73 65 70 61 72 61 74 6f 72 2e 0a 23 20 40  d separator..# @
3e50: 70 61 72 61 6d 20 20 70 6f 73 74 2c 20 74 72 61  param  post, tra
3e60: 69 6c 69 6e 67 20 60 71 75 6f 74 65 27 2e 0a 23  iling `quote'..#
3e70: 20 40 72 65 74 75 72 6e 20 61 20 66 6f 72 6d 61   @return a forma
3e80: 74 74 65 64 20 63 6f 6d 70 6c 65 74 65 72 20 73  tted completer s
3e90: 74 72 69 6e 67 2e 0a 23 20 40 64 61 74 65 20 20  tring..# @date  
3ea0: 20 53 65 70 2d 31 35 2d 31 39 39 39 0a 23 0a 70   Sep-15-1999.#.p
3eb0: 72 6f 63 20 43 6f 6d 70 6c 65 74 65 4c 69 73 74  roc CompleteList
3ec0: 46 72 6f 6d 4c 69 73 74 20 7b 74 65 78 74 20 66  FromList {text f
3ed0: 75 6c 6c 70 61 72 74 20 6c 73 74 20 70 72 65 20  ullpart lst pre 
3ee0: 73 65 70 20 70 6f 73 74 7d 20 7b 0a 0a 09 23 20  sep post} {...# 
3ef0: 70 75 74 73 20 73 74 64 65 72 72 20 22 22 0a 09  puts stderr ""..
3f00: 23 20 70 75 74 73 20 73 74 64 65 72 72 20 74 65  # puts stderr te
3f10: 78 74 3d 7c 24 74 65 78 74 7c 0a 09 23 20 70 75  xt=|$text|..# pu
3f20: 74 73 20 73 74 64 65 72 72 20 6c 73 74 3d 7c 24  ts stderr lst=|$
3f30: 6c 73 74 7c 0a 09 23 20 70 75 74 73 20 73 74 64  lst|..# puts std
3f40: 65 72 72 20 70 72 65 3d 7c 24 70 72 65 7c 0a 09  err pre=|$pre|..
3f50: 23 20 70 75 74 73 20 73 74 64 65 72 72 20 73 65  # puts stderr se
3f60: 70 3d 7c 24 73 65 70 7c 0a 09 23 20 70 75 74 73  p=|$sep|..# puts
3f70: 20 73 74 64 65 72 72 20 70 6f 73 74 3d 7c 24 70   stderr post=|$p
3f80: 6f 73 74 7c 0a 0a 09 69 66 20 7b 21 5b 73 74 72  ost|...if {![str
3f90: 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b 66 75 6c  ing length ${ful
3fa0: 6c 70 61 72 74 7d 5d 7d 20 7b 0a 0a 09 09 23 20  lpart}]} {....# 
3fb0: 6e 6f 74 68 69 6e 67 20 74 79 70 65 64 20 73 6f  nothing typed so
3fc0: 20 66 61 72 2e 20 49 6e 73 65 72 74 20 61 20 24   far. Insert a $
3fd0: 70 72 65 0a 09 09 23 20 61 6e 64 20 69 6e 68 69  pre...# and inhi
3fe0: 62 69 74 20 66 75 72 74 68 65 72 20 63 6f 6d 70  bit further comp
3ff0: 6c 65 74 69 6f 6e 2e 0a 09 09 23 0a 09 09 72 65  letion....#...re
4000: 74 75 72 6e 20 5b 6c 69 73 74 20 24 7b 70 72 65  turn [list ${pre
4010: 7d 20 7b 7d 5d 0a 0a 09 7d 20 65 6c 73 65 69 66  } {}]...} elseif
4020: 20 7b 24 7b 70 6f 73 74 7d 20 3d 3d 20 5b 53 74   {${post} == [St
4030: 72 69 6e 67 20 69 6e 64 65 78 20 24 7b 74 65 78  ring index ${tex
4040: 74 7d 20 65 6e 64 5d 7d 20 7b 0a 0a 09 09 23 20  t} end]} {....# 
4050: 66 69 6e 61 6c 69 7a 65 2c 20 61 70 70 65 6e 64  finalize, append
4060: 20 74 68 65 20 70 6f 73 74 20 61 6e 64 20 61 20   the post and a 
4070: 73 70 61 63 65 2e 0a 09 09 23 0a 09 09 73 65 74  space....#...set
4080: 20 64 69 66 66 20 5c 0a 09 09 5b 65 78 70 72 20   diff \...[expr 
4090: 5b 43 6f 75 6e 74 43 68 61 72 20 24 7b 66 75 6c  [CountChar ${ful
40a0: 6c 70 61 72 74 7d 20 24 7b 70 72 65 7d 5d 20 2d  lpart} ${pre}] -
40b0: 20 5b 43 6f 75 6e 74 43 68 61 72 20 24 7b 66 75   [CountChar ${fu
40c0: 6c 6c 70 61 72 74 7d 20 24 7b 70 6f 73 74 7d 5d  llpart} ${post}]
40d0: 5d 0a 09 09 66 6f 72 20 7b 73 65 74 20 69 20 30  ]...for {set i 0
40e0: 7d 20 7b 24 7b 69 7d 20 3c 20 24 7b 64 69 66 66  } {${i} < ${diff
40f0: 7d 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 09 09  }} {incr i} {...
4100: 09 61 70 70 65 6e 64 20 74 65 78 74 20 24 7b 70  .append text ${p
4110: 6f 73 74 7d 0a 09 09 7d 0a 09 09 61 70 70 65 6e  ost}...}...appen
4120: 64 20 74 65 78 74 20 22 20 22 0a 09 09 72 65 74  d text " "...ret
4130: 75 72 6e 20 24 7b 74 65 78 74 7d 0a 0a 09 7d 20  urn ${text}...} 
4140: 65 6c 73 65 69 66 20 7b 21 5b 72 65 67 65 78 70  elseif {![regexp
4150: 20 2d 2d 20 5e 5c 28 2e 2a 5c 5b 24 7b 70 72 65   -- ^\(.*\[${pre
4160: 7d 24 7b 73 65 70 7d 5c 5d 5c 29 5c 28 5c 5b 5e  }${sep}\]\)\(\[^
4170: 24 7b 70 72 65 7d 24 7b 73 65 70 7d 5c 5d 2a 5c  ${pre}${sep}\]*\
4180: 29 24 20 5c 0a 09 09 24 7b 74 65 78 74 7d 20 61  )$ \...${text} a
4190: 6c 6c 20 6c 65 66 74 20 72 69 67 68 74 5d 0a 09  ll left right]..
41a0: 7d 20 7b 0a 09 09 73 65 74 20 6c 65 66 74 20 7b  } {...set left {
41b0: 7d 0a 09 09 73 65 74 20 72 69 67 68 74 20 24 7b  }...set right ${
41c0: 74 65 78 74 7d 0a 09 7d 0a 0a 09 23 20 54 72 61  text}..}...# Tra
41d0: 63 65 56 61 72 20 6c 65 66 74 0a 09 23 20 54 72  ceVar left..# Tr
41e0: 61 63 65 56 61 72 20 72 69 67 68 74 0a 0a 09 23  aceVar right...#
41f0: 20 70 75 74 73 20 73 74 64 65 72 72 20 5c 6e 6c   puts stderr \nl
4200: 65 66 74 3d 7c 24 6c 65 66 74 7c 0a 09 23 20 70  eft=|$left|..# p
4210: 75 74 73 20 73 74 64 65 72 72 20 5c 6e 72 69 67  uts stderr \nrig
4220: 68 74 3d 7c 24 72 69 67 68 74 7c 0a 09 73 65 74  ht=|$right|..set
4230: 20 65 78 61 63 74 5f 6d 61 74 63 68 65 73 20 5b   exact_matches [
4240: 4d 61 74 63 68 65 73 46 72 6f 6d 4c 69 73 74 20  MatchesFromList 
4250: 24 7b 72 69 67 68 74 7d 20 24 7b 6c 73 74 7d 5d  ${right} ${lst}]
4260: 0a 09 23 20 54 4f 44 4f 20 74 68 69 73 20 69 73  ..# TODO this is
4270: 20 61 77 6b 77 61 72 64 2e 20 54 68 69 6e 6b 20   awkward. Think 
4280: 6f 66 20 6d 61 6b 69 6e 67 20 69 74 20 62 65 74  of making it bet
4290: 74 65 72 21 0a 09 23 0a 09 69 66 20 7b 31 20 3d  ter!..#..if {1 =
42a0: 3d 20 5b 6c 6c 65 6e 67 74 68 20 24 7b 65 78 61  = [llength ${exa
42b0: 63 74 5f 6d 61 74 63 68 65 73 7d 5d 20 26 26 20  ct_matches}] && 
42c0: 2d 31 20 21 3d 20 5b 6c 73 65 61 72 63 68 20 24  -1 != [lsearch $
42d0: 7b 6c 73 74 7d 20 24 7b 72 69 67 68 74 7d 5d 0a  {lst} ${right}].
42e0: 09 7d 20 7b 0a 09 09 23 73 65 74 20 63 6f 6d 70  .} {...#set comp
42f0: 6c 65 74 69 6f 6e 20 5b 43 6f 6d 70 6c 65 74 65  letion [Complete
4300: 46 72 6f 6d 4c 69 73 74 20 24 7b 72 69 67 68 74  FromList ${right
4310: 7d 20 5b 6c 69 73 74 20 24 7b 73 65 70 7d 20 24  } [list ${sep} $
4320: 7b 70 6f 73 74 7d 5d 20 31 5d 0a 09 09 72 65 74  {post}] 1]...ret
4330: 75 72 6e 20 5b 6c 69 73 74 20 24 7b 6c 65 66 74  urn [list ${left
4340: 7d 24 7b 72 69 67 68 74 7d 24 7b 73 65 70 7d 20  }${right}${sep} 
4350: 7b 7d 5d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09  {}]..} else {...
4360: 73 65 74 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 5b  set completion [
4370: 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
4380: 20 24 7b 72 69 67 68 74 7d 20 24 7b 6c 73 74 7d   ${right} ${lst}
4390: 20 22 22 20 31 5d 0a 09 7d 0a 09 23 20 70 75 74   "" 1]..}..# put
43a0: 73 20 73 74 64 65 72 72 20 5c 6e 63 6f 6d 70 6c  s stderr \ncompl
43b0: 65 74 69 6f 6e 3d 7c 24 63 6f 6d 70 6c 65 74 69  etion=|$completi
43c0: 6f 6e 7c 0a 09 69 66 20 7b 21 5b 73 74 72 69 6e  on|..if {![strin
43d0: 67 20 6c 65 6e 67 74 68 20 5b 6c 69 6e 64 65 78  g length [lindex
43e0: 20 24 63 6f 6d 70 6c 65 74 69 6f 6e 20 30 5d 5d   $completion 0]]
43f0: 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 5b 63 6f  } {...return [co
4400: 6e 63 61 74 20 5b 6c 69 73 74 20 24 7b 6c 65 66  ncat [list ${lef
4410: 74 7d 5d 20 5b 6c 72 61 6e 67 65 20 24 63 6f 6d  t}] [lrange $com
4420: 70 6c 65 74 69 6f 6e 20 31 20 65 6e 64 5d 5d 0a  pletion 1 end]].
4430: 09 7d 20 65 6c 73 65 69 66 20 7b 5b 73 74 72 69  .} elseif {[stri
4440: 6e 67 20 6c 65 6e 67 74 68 20 24 7b 6c 65 66 74  ng length ${left
4450: 7d 5d 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 5b  }]} {...return [
4460: 6c 69 73 74 20 24 7b 6c 65 66 74 7d 5d 24 7b 63  list ${left}]${c
4470: 6f 6d 70 6c 65 74 69 6f 6e 7d 0a 09 7d 20 65 6c  ompletion}..} el
4480: 73 65 20 7b 0a 09 09 72 65 74 75 72 6e 20 24 7b  se {...return ${
4490: 63 6f 6d 70 6c 65 74 69 6f 6e 7d 0a 09 7d 0a 09  completion}..}..
44a0: 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f  return "".}..pro
44b0: 63 20 46 69 72 73 74 4e 6f 6e 4f 70 74 69 6f 6e  c FirstNonOption
44c0: 20 7b 6c 69 6e 65 7d 20 7b 0a 09 73 65 74 20 65   {line} {..set e
44d0: 78 70 72 5f 70 6f 73 20 31 0a 09 66 6f 72 65 61  xpr_pos 1..forea
44e0: 63 68 20 77 6f 72 64 20 5b 6c 72 61 6e 67 65 20  ch word [lrange 
44f0: 24 7b 6c 69 6e 65 7d 20 31 20 65 6e 64 5d 20 7b  ${line} 1 end] {
4500: 3b 20 23 20 30 20 69 73 20 74 68 65 20 63 6f 6d  ; # 0 is the com
4510: 6d 61 6e 64 20 69 74 73 65 6c 66 0a 09 09 69 66  mand itself...if
4520: 20 7b 22 2d 22 20 21 3d 20 5b 73 74 72 69 6e 67   {"-" != [string
4530: 20 69 6e 64 65 78 20 24 7b 77 6f 72 64 7d 20 30   index ${word} 0
4540: 5d 7d 20 7b 0a 09 09 09 62 72 65 61 6b 0a 09 09  ]} {....break...
4550: 7d 20 65 6c 73 65 20 7b 0a 09 09 09 69 6e 63 72  } else {....incr
4560: 20 65 78 70 72 5f 70 6f 73 0a 09 09 7d 0a 09 7d   expr_pos...}..}
4570: 0a 09 72 65 74 75 72 6e 20 24 7b 65 78 70 72 5f  ..return ${expr_
4580: 70 6f 73 7d 0a 7d 0a 0a 70 72 6f 63 20 52 65 6d  pos}.}..proc Rem
4590: 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 7b  oveUsedOptions {
45a0: 6c 69 6e 65 20 6f 70 74 73 20 7b 74 65 72 6d 69  line opts {termi
45b0: 6e 61 74 65 20 7b 7d 7d 7d 20 7b 0a 09 69 66 20  nate {}}} {..if 
45c0: 7b 5b 6c 6c 65 6e 67 74 68 20 24 7b 74 65 72 6d  {[llength ${term
45d0: 69 6e 61 74 65 7d 5d 7d 20 7b 0a 09 09 69 66 20  inate}]} {...if 
45e0: 7b 5b 72 65 67 65 78 70 20 2d 2d 20 24 7b 74 65  {[regexp -- ${te
45f0: 72 6d 69 6e 61 74 65 7d 20 24 7b 6c 69 6e 65 7d  rminate} ${line}
4600: 5d 7d 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 22  ]} {....return "
4610: 22 0a 09 09 7d 0a 09 7d 0a 09 73 65 74 20 6e 65  "...}..}..set ne
4620: 77 20 22 22 0a 09 66 6f 72 65 61 63 68 20 77 6f  w ""..foreach wo
4630: 72 64 20 24 7b 6f 70 74 73 7d 20 7b 0a 09 09 69  rd ${opts} {...i
4640: 66 20 7b 2d 31 20 3d 3d 20 5b 73 74 72 69 6e 67  f {-1 == [string
4650: 20 66 69 72 73 74 20 24 7b 77 6f 72 64 7d 20 24   first ${word} $
4660: 7b 6c 69 6e 65 7d 5d 7d 20 7b 0a 09 09 09 6c 61  {line}]} {....la
4670: 70 70 65 6e 64 20 6e 65 77 20 24 7b 77 6f 72 64  ppend new ${word
4680: 7d 0a 09 09 7d 0a 09 7d 0a 0a 09 23 20 63 68 65  }...}..}...# che
4690: 63 6b 20 69 66 20 74 68 65 20 6c 61 73 74 20 77  ck if the last w
46a0: 6f 72 64 20 69 6e 20 74 68 65 20 6c 69 6e 65 20  ord in the line 
46b0: 69 73 20 61 6e 20 6f 70 74 69 6f 6e 73 0a 09 23  is an options..#
46c0: 20 61 6e 64 20 69 66 20 74 68 69 73 20 77 6f 72   and if this wor
46d0: 64 20 69 73 20 61 74 20 74 68 65 20 76 65 72 79  d is at the very
46e0: 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 69 6e 65   end of the line
46f0: 2c 0a 09 23 20 74 68 61 74 20 6d 65 61 6e 73 20  ,..# that means 
4700: 6e 6f 20 73 70 61 63 65 20 61 66 74 65 72 2e 0a  no space after..
4710: 09 23 20 49 66 20 74 68 69 73 20 69 73 20 73 6f  .# If this is so
4720: 2c 20 74 68 65 20 77 6f 72 64 20 69 73 20 73 74  , the word is st
4730: 75 66 66 65 64 20 69 6e 74 6f 20 74 68 65 20 72  uffed into the r
4740: 65 73 75 6c 74 2c 0a 09 23 20 73 6f 20 74 68 61  esult,..# so tha
4750: 74 20 69 74 20 63 61 6e 20 62 65 20 63 6f 6d 70  t it can be comp
4760: 6c 65 74 65 64 20 2d 2d 20 70 72 6f 62 61 62 6c  leted -- probabl
4770: 79 20 77 69 74 68 20 61 20 73 70 61 63 65 2e 0a  y with a space..
4780: 09 23 0a 09 73 65 74 20 6c 61 73 74 20 5b 4c 69  .#..set last [Li
4790: 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 65 6e 64  ndex ${line} end
47a0: 5d 0a 09 69 66 20 7b 5b 65 78 70 72 20 5b 73 74  ]..if {[expr [st
47b0: 72 69 6e 67 20 6c 61 73 74 20 24 7b 6c 61 73 74  ring last ${last
47c0: 7d 20 24 7b 6c 69 6e 65 7d 5d 20 2b 20 5b 73 74  } ${line}] + [st
47d0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b 6c 61  ring length ${la
47e0: 73 74 7d 5d 5d 20 3d 3d 20 5c 0a 09 09 5b 73 74  st}]] == \...[st
47f0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b 6c 69  ring length ${li
4800: 6e 65 7d 5d 0a 09 7d 20 7b 0a 09 09 69 66 20 7b  ne}]..} {...if {
4810: 2d 31 20 21 3d 20 5b 6c 73 65 61 72 63 68 20 24  -1 != [lsearch $
4820: 7b 6f 70 74 73 7d 20 24 7b 6c 61 73 74 7d 5d 7d  {opts} ${last}]}
4830: 20 7b 0a 09 09 09 6c 61 70 70 65 6e 64 20 6e 65   {....lappend ne
4840: 77 20 24 7b 6c 61 73 74 7d 0a 09 09 7d 0a 09 7d  w ${last}...}..}
4850: 0a 0a 09 72 65 74 75 72 6e 20 5b 73 74 72 69 6e  ...return [strin
4860: 67 20 74 72 69 6d 20 24 7b 6e 65 77 7d 5d 0a 7d  g trim ${new}].}
4870: 0a 0a 70 72 6f 63 20 41 6c 65 72 74 20 7b 7d 20  ..proc Alert {} 
4880: 7b 0a 09 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65  {..::tclreadline
4890: 3a 3a 72 65 61 64 6c 69 6e 65 20 62 65 6c 6c 0a  ::readline bell.
48a0: 7d 0a 0a 23 2a 2a 0a 23 20 67 65 74 20 74 68 65  }..#**.# get the
48b0: 20 6c 6f 6e 67 65 73 74 20 63 6f 6d 6d 6f 6e 20   longest common 
48c0: 63 6f 6d 70 6c 65 74 69 6f 6e 0a 23 20 65 2e 67  completion.# e.g
48d0: 2e 20 73 74 72 20 3d 3d 20 7b 74 63 6c 5f 76 65  . str == {tcl_ve
48e0: 72 73 69 6f 6e 20 74 63 6c 72 65 61 64 6c 69 6e  rsion tclreadlin
48f0: 65 5f 76 65 72 73 69 6f 6e 20 74 63 6c 72 65 61  e_version tclrea
4900: 64 6c 69 6e 65 5f 6c 69 62 72 61 72 79 7d 0a 23  dline_library}.#
4910: 20 2d 2d 3e 20 5b 43 6f 6d 70 6c 65 74 65 4c 6f   --> [CompleteLo
4920: 6e 67 65 73 74 20 24 7b 73 74 72 7d 5d 20 3d 3d  ngest ${str}] ==
4930: 20 22 74 63 6c 22 0a 23 0a 70 72 6f 63 20 43 6f   "tcl".#.proc Co
4940: 6d 70 6c 65 74 65 4c 6f 6e 67 65 73 74 20 7b 73  mpleteLongest {s
4950: 74 72 7d 20 7b 0a 09 23 20 70 75 74 73 20 73 74  tr} {..# puts st
4960: 64 65 72 72 20 73 74 72 3d 24 73 74 72 0a 09 73  derr str=$str..s
4970: 65 74 20 6d 61 74 63 68 30 20 5b 6c 69 6e 64 65  et match0 [linde
4980: 78 20 24 7b 73 74 72 7d 20 30 5d 0a 09 73 65 74  x ${str} 0]..set
4990: 20 6c 65 6e 30 20 5b 73 74 72 69 6e 67 20 6c 65   len0 [string le
49a0: 6e 67 74 68 20 24 6d 61 74 63 68 30 5d 0a 09 73  ngth $match0]..s
49b0: 65 74 20 6e 6f 5f 6d 61 74 63 68 65 73 20 5b 6c  et no_matches [l
49c0: 6c 65 6e 67 74 68 20 24 7b 73 74 72 7d 5d 0a 09  length ${str}]..
49d0: 73 65 74 20 70 61 72 74 20 22 22 0a 09 66 6f 72  set part ""..for
49e0: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c   {set i 0} {$i <
49f0: 20 24 6c 65 6e 30 7d 20 7b 69 6e 63 72 20 69 7d   $len0} {incr i}
4a00: 20 7b 0a 09 09 73 65 74 20 63 68 61 72 20 5b 73   {...set char [s
4a10: 74 72 69 6e 67 20 69 6e 64 65 78 20 24 6d 61 74  tring index $mat
4a20: 63 68 30 20 24 69 5d 0a 09 09 66 6f 72 20 7b 73  ch0 $i]...for {s
4a30: 65 74 20 6a 20 31 7d 20 7b 24 6a 20 3c 20 24 6e  et j 1} {$j < $n
4a40: 6f 5f 6d 61 74 63 68 65 73 7d 20 7b 69 6e 63 72  o_matches} {incr
4a50: 20 6a 7d 20 7b 0a 09 09 09 69 66 20 7b 24 63 68   j} {....if {$ch
4a60: 61 72 20 21 3d 20 5b 73 74 72 69 6e 67 20 69 6e  ar != [string in
4a70: 64 65 78 20 5b 6c 69 6e 64 65 78 20 24 7b 73 74  dex [lindex ${st
4a80: 72 7d 20 24 6a 5d 20 24 69 5d 7d 20 7b 0a 09 09  r} $j] $i]} {...
4a90: 09 09 62 72 65 61 6b 0a 09 09 09 7d 0a 09 09 7d  ..break....}...}
4aa0: 0a 09 09 69 66 20 7b 24 6a 20 3c 20 24 6e 6f 5f  ...if {$j < $no_
4ab0: 6d 61 74 63 68 65 73 7d 20 7b 0a 09 09 09 62 72  matches} {....br
4ac0: 65 61 6b 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09  eak...} else {..
4ad0: 09 09 61 70 70 65 6e 64 20 70 61 72 74 20 24 63  ..append part $c
4ae0: 68 61 72 0a 09 09 7d 0a 09 7d 0a 09 23 20 70 75  har...}..}..# pu
4af0: 74 73 20 73 74 64 65 72 72 20 70 61 72 74 3d 24  ts stderr part=$
4b00: 70 61 72 74 0a 09 72 65 74 75 72 6e 20 24 7b 70  part..return ${p
4b10: 61 72 74 7d 0a 7d 0a 0a 70 72 6f 63 20 53 70 6c  art}.}..proc Spl
4b20: 69 74 4c 69 6e 65 20 7b 73 74 61 72 74 20 6c 69  itLine {start li
4b30: 6e 65 7d 20 7b 0a 09 73 65 74 20 64 65 70 74 68  ne} {..set depth
4b40: 20 30 0a 09 23 20 70 75 74 73 20 73 74 64 65 72   0..# puts stder
4b50: 72 20 53 70 6c 69 74 4c 69 6e 65 0a 09 66 6f 72  r SplitLine..for
4b60: 20 7b 73 65 74 20 69 20 24 73 74 61 72 74 7d 20   {set i $start} 
4b70: 7b 24 69 20 3e 3d 20 30 7d 20 7b 69 6e 63 72 20  {$i >= 0} {incr 
4b80: 69 20 2d 31 7d 20 7b 0a 09 09 73 65 74 20 63 20  i -1} {...set c 
4b90: 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 6c  [string index $l
4ba0: 69 6e 65 20 24 69 5d 0a 09 09 69 66 20 7b 7b 3b  ine $i]...if {{;
4bb0: 7d 20 3d 3d 20 24 63 7d 20 7b 0a 09 09 09 69 6e  } == $c} {....in
4bc0: 63 72 20 69 3b 20 23 20 64 69 73 63 61 72 64 20  cr i; # discard 
4bd0: 63 6f 6d 6d 61 6e 64 20 62 72 65 61 6b 20 63 68  command break ch
4be0: 61 72 61 63 74 65 72 0a 09 09 09 72 65 74 75 72  aracter....retur
4bf0: 6e 20 5b 6c 69 73 74 20 5b 65 78 70 72 20 24 73  n [list [expr $s
4c00: 74 61 72 74 20 2d 20 24 69 5d 20 5b 53 74 72 69  tart - $i] [Stri
4c10: 6e 67 20 72 61 6e 67 65 20 24 6c 69 6e 65 20 24  ng range $line $
4c20: 69 20 65 6e 64 5d 5d 0a 09 09 7d 20 65 6c 73 65  i end]]...} else
4c30: 69 66 20 7b 7b 5d 7d 20 3d 3d 20 24 63 7d 20 7b  if {{]} == $c} {
4c40: 0a 09 09 09 69 6e 63 72 20 64 65 70 74 68 0a 09  ....incr depth..
4c50: 09 7d 20 65 6c 73 65 69 66 20 7b 7b 5b 7d 20 3d  .} elseif {{[} =
4c60: 3d 20 24 63 7d 20 7b 0a 09 09 09 69 6e 63 72 20  = $c} {....incr 
4c70: 64 65 70 74 68 20 2d 31 0a 09 09 09 69 66 20 7b  depth -1....if {
4c80: 24 64 65 70 74 68 20 3c 20 30 7d 20 7b 0a 09 09  $depth < 0} {...
4c90: 09 09 69 6e 63 72 20 69 3b 20 23 20 64 69 73 63  ..incr i; # disc
4ca0: 61 72 64 20 63 6f 6d 6d 61 6e 64 20 62 72 65 61  ard command brea
4cb0: 6b 20 63 68 61 72 61 63 74 65 72 0a 09 09 09 09  k character.....
4cc0: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5b 65 78  return [list [ex
4cd0: 70 72 20 24 73 74 61 72 74 20 2d 20 24 69 5d 20  pr $start - $i] 
4ce0: 5b 53 74 72 69 6e 67 20 72 61 6e 67 65 20 24 6c  [String range $l
4cf0: 69 6e 65 20 24 69 20 65 6e 64 5d 5d 0a 09 09 09  ine $i end]]....
4d00: 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  }...}..}..return
4d10: 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 49 73 57 68   "".}..proc IsWh
4d20: 69 74 65 20 7b 63 68 61 72 7d 20 7b 0a 09 69 66  ite {char} {..if
4d30: 20 7b 22 20 22 20 3d 3d 20 24 63 68 61 72 20 7c   {" " == $char |
4d40: 7c 20 22 5c 6e 22 20 3d 3d 20 24 63 68 61 72 20  | "\n" == $char 
4d50: 7c 7c 20 22 5c 74 22 20 3d 3d 20 24 63 68 61 72  || "\t" == $char
4d60: 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 31 0a 09  } {...return 1..
4d70: 7d 20 65 6c 73 65 20 7b 0a 09 09 72 65 74 75 72  } else {...retur
4d80: 6e 20 30 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 50  n 0..}.}..proc P
4d90: 72 65 76 69 6f 75 73 57 6f 72 64 4f 66 49 6e 63  reviousWordOfInc
4da0: 6f 6d 70 6c 65 74 65 50 6f 73 69 74 69 6f 6e 20  ompletePosition 
4db0: 7b 73 74 61 72 74 20 6c 69 6e 65 7d 20 7b 0a 09  {start line} {..
4dc0: 72 65 74 75 72 6e 20 5b 6c 69 6e 64 65 78 20 5b  return [lindex [
4dd0: 50 72 6f 70 65 72 4c 69 73 74 20 5b 73 74 72 69  ProperList [stri
4de0: 6e 67 20 72 61 6e 67 65 20 24 7b 6c 69 6e 65 7d  ng range ${line}
4df0: 20 30 20 24 7b 73 74 61 72 74 7d 5d 5d 20 65 6e   0 ${start}]] en
4e00: 64 5d 0a 7d 0a 0a 70 72 6f 63 20 50 72 65 76 69  d].}..proc Previ
4e10: 6f 75 73 57 6f 72 64 20 7b 73 74 61 72 74 20 6c  ousWord {start l
4e20: 69 6e 65 7d 20 7b 0a 09 69 6e 63 72 20 73 74 61  ine} {..incr sta
4e30: 72 74 20 2d 31 0a 09 73 65 74 20 66 6f 75 6e 64  rt -1..set found
4e40: 20 30 0a 09 66 6f 72 20 7b 73 65 74 20 69 20 24   0..for {set i $
4e50: 73 74 61 72 74 7d 20 7b 24 69 20 3e 20 30 7d 20  start} {$i > 0} 
4e60: 7b 69 6e 63 72 20 69 20 2d 31 7d 20 7b 0a 09 09  {incr i -1} {...
4e70: 73 65 74 20 63 20 5b 73 74 72 69 6e 67 20 69 6e  set c [string in
4e80: 64 65 78 20 24 6c 69 6e 65 20 24 69 5d 0a 09 09  dex $line $i]...
4e90: 69 66 20 7b 24 7b 66 6f 75 6e 64 7d 20 26 26 20  if {${found} && 
4ea0: 5b 49 73 57 68 69 74 65 20 24 63 5d 7d 20 7b 0a  [IsWhite $c]} {.
4eb0: 09 09 09 62 72 65 61 6b 0a 09 09 7d 20 65 6c 73  ...break...} els
4ec0: 65 69 66 20 7b 21 24 7b 66 6f 75 6e 64 7d 20 26  eif {!${found} &
4ed0: 26 20 21 5b 49 73 57 68 69 74 65 20 24 63 5d 7d  & ![IsWhite $c]}
4ee0: 20 7b 0a 09 09 09 73 65 74 20 66 6f 75 6e 64 20   {....set found 
4ef0: 31 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  1...}..}..return
4f00: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 73   [string trim [s
4f10: 74 72 69 6e 67 20 72 61 6e 67 65 20 24 7b 6c 69  tring range ${li
4f20: 6e 65 7d 20 24 69 20 24 73 74 61 72 74 5d 5d 0a  ne} $i $start]].
4f30: 7d 0a 0a 70 72 6f 63 20 51 75 6f 74 65 20 7b 76  }..proc Quote {v
4f40: 61 6c 75 65 20 6c 65 66 74 7d 20 7b 0a 09 73 65  alue left} {..se
4f50: 74 20 72 69 67 68 74 20 5b 52 69 67 68 74 20 24  t right [Right $
4f60: 7b 6c 65 66 74 7d 5d 0a 09 69 66 20 7b 31 20 3c  {left}]..if {1 <
4f70: 20 5b 6c 6c 65 6e 67 74 68 20 24 76 61 6c 75 65   [llength $value
4f80: 5d 20 26 26 20 22 22 20 3d 3d 20 24 72 69 67 68  ] && "" == $righ
4f90: 74 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 5b 6c  t} {...return [l
4fa0: 69 73 74 20 5c 22 24 7b 76 61 6c 75 65 7d 5c 22  ist \"${value}\"
4fb0: 5d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 72 65  ]..} else {...re
4fc0: 74 75 72 6e 20 5b 6c 69 73 74 20 24 7b 6c 65 66  turn [list ${lef
4fd0: 74 7d 24 7b 76 61 6c 75 65 7d 24 7b 72 69 67 68  t}${value}${righ
4fe0: 74 7d 5d 0a 09 7d 0a 7d 0a 0a 23 20 74 68 65 20  t}]..}.}..# the 
4ff0: 66 6f 6c 6c 6f 77 69 6e 67 20 74 77 6f 20 63 68  following two ch
5000: 61 6e 6e 65 6c 20 70 72 6f 63 27 73 20 6d 61 6b  annel proc's mak
5010: 65 20 75 73 65 20 6f 66 0a 23 20 74 68 65 20 62  e use of.# the b
5020: 72 61 6e 64 6e 65 77 20 28 53 65 70 20 39 39 29  randnew (Sep 99)
5030: 20 60 66 69 6c 65 20 63 68 61 6e 6e 65 6c 73 27   `file channels'
5040: 20 63 6f 6d 6d 61 6e 64 0a 23 20 62 75 74 20 68   command.# but h
5050: 61 76 65 20 73 6f 6d 65 20 66 61 6c 6c 62 61 63  ave some fallbac
5060: 6b 20 62 65 68 61 76 69 6f 75 72 20 66 6f 72 20  k behaviour for 
5070: 6f 6c 64 65 72 0a 23 20 74 63 6c 20 76 65 72 73  older.# tcl vers
5080: 69 6f 6e 2e 0a 23 0a 70 72 6f 63 20 49 6e 43 68  ion..#.proc InCh
5090: 61 6e 6e 65 6c 49 64 20 7b 74 65 78 74 20 7b 73  annelId {text {s
50a0: 77 69 74 63 68 65 73 20 22 22 7d 7d 20 7b 0a 09  witches ""}} {..
50b0: 69 66 20 5b 63 61 74 63 68 20 7b 73 65 74 20 63  if [catch {set c
50c0: 68 73 20 5b 66 69 6c 65 20 63 68 61 6e 6e 65 6c  hs [file channel
50d0: 73 5d 7d 5d 20 7b 0a 09 09 73 65 74 20 63 68 73  s]}] {...set chs
50e0: 20 7b 73 74 64 69 6e 7d 0a 09 7d 0a 09 73 65 74   {stdin}..}..set
50f0: 20 72 65 73 75 6c 74 20 22 22 0a 09 66 6f 72 65   result ""..fore
5100: 61 63 68 20 63 68 20 24 63 68 73 20 7b 0a 09 09  ach ch $chs {...
5110: 69 66 20 7b 21 5b 63 61 74 63 68 20 7b 66 69 6c  if {![catch {fil
5120: 65 65 76 65 6e 74 20 24 63 68 20 72 65 61 64 61  eevent $ch reada
5130: 62 6c 65 7d 5d 7d 20 7b 0a 09 09 09 6c 61 70 70  ble}]} {....lapp
5140: 65 6e 64 20 72 65 73 75 6c 74 20 24 63 68 0a 09  end result $ch..
5150: 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 5b 43  .}..}..return [C
5160: 68 61 6e 6e 65 6c 49 64 20 24 7b 74 65 78 74 7d  hannelId ${text}
5170: 20 3c 69 6e 43 68 61 6e 6e 65 6c 3e 20 24 72 65   <inChannel> $re
5180: 73 75 6c 74 20 24 73 77 69 74 63 68 65 73 5d 0a  sult $switches].
5190: 7d 0a 0a 70 72 6f 63 20 4f 75 74 43 68 61 6e 6e  }..proc OutChann
51a0: 65 6c 49 64 20 7b 74 65 78 74 20 7b 73 77 69 74  elId {text {swit
51b0: 63 68 65 73 20 22 22 7d 7d 20 7b 0a 09 69 66 20  ches ""}} {..if 
51c0: 5b 63 61 74 63 68 20 7b 73 65 74 20 63 68 73 20  [catch {set chs 
51d0: 5b 66 69 6c 65 20 63 68 61 6e 6e 65 6c 73 5d 7d  [file channels]}
51e0: 5d 20 7b 0a 09 09 73 65 74 20 63 68 73 20 7b 73  ] {...set chs {s
51f0: 74 64 6f 75 74 20 73 74 64 65 72 72 7d 0a 09 7d  tdout stderr}..}
5200: 0a 09 73 65 74 20 72 65 73 75 6c 74 20 22 22 0a  ..set result "".
5210: 09 66 6f 72 65 61 63 68 20 63 68 20 24 63 68 73  .foreach ch $chs
5220: 20 7b 0a 09 09 69 66 20 7b 21 5b 63 61 74 63 68   {...if {![catch
5230: 20 7b 66 69 6c 65 65 76 65 6e 74 20 24 63 68 20   {fileevent $ch 
5240: 77 72 69 74 61 62 6c 65 7d 5d 7d 20 7b 0a 09 09  writable}]} {...
5250: 09 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20  .lappend result 
5260: 24 63 68 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75  $ch...}..}..retu
5270: 72 6e 20 5b 43 68 61 6e 6e 65 6c 49 64 20 24 7b  rn [ChannelId ${
5280: 74 65 78 74 7d 20 3c 6f 75 74 43 68 61 6e 6e 65  text} <outChanne
5290: 6c 3e 20 24 72 65 73 75 6c 74 20 24 73 77 69 74  l> $result $swit
52a0: 63 68 65 73 5d 0a 7d 0a 0a 70 72 6f 63 20 43 68  ches].}..proc Ch
52b0: 61 6e 6e 65 6c 49 64 20 7b 74 65 78 74 20 7b 64  annelId {text {d
52c0: 65 73 63 72 69 70 74 20 3c 63 68 61 6e 6e 65 6c  escript <channel
52d0: 49 64 3e 7d 20 7b 63 68 73 20 22 22 7d 20 7b 73  Id>} {chs ""} {s
52e0: 77 69 74 63 68 65 73 20 22 22 7d 7d 20 7b 0a 09  witches ""}} {..
52f0: 69 66 20 7b 22 22 20 3d 3d 20 24 7b 63 68 73 7d  if {"" == ${chs}
5300: 7d 20 7b 0a 09 09 23 20 74 68 65 20 60 66 69 6c  } {...# the `fil
5310: 65 20 63 68 61 6e 6e 65 6c 73 27 20 63 6f 6d 6d  e channels' comm
5320: 61 6e 64 20 69 73 20 70 72 65 73 65 6e 74 0a 09  and is present..
5330: 09 23 20 6f 6e 6c 79 20 69 6e 20 70 72 65 74 74  .# only in prett
5340: 79 20 6e 65 77 20 76 65 72 73 69 6f 6e 73 2e 0a  y new versions..
5350: 09 09 23 0a 09 09 69 66 20 5b 63 61 74 63 68 20  ..#...if [catch 
5360: 7b 73 65 74 20 63 68 73 20 5b 66 69 6c 65 20 63  {set chs [file c
5370: 68 61 6e 6e 65 6c 73 5d 7d 5d 20 7b 0a 09 09 09  hannels]}] {....
5380: 73 65 74 20 63 68 73 20 7b 73 74 64 69 6e 20 73  set chs {stdin s
5390: 74 64 6f 75 74 20 73 74 64 65 72 72 7d 0a 09 09  tdout stderr}...
53a0: 7d 0a 09 7d 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67  }..}..if {[lleng
53b0: 74 68 20 5b 73 65 74 20 63 68 61 6e 6e 65 6c 20  th [set channel 
53c0: 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74  [TryFromList ${t
53d0: 65 78 74 7d 20 22 24 7b 63 68 73 7d 20 24 7b 73  ext} "${chs} ${s
53e0: 77 69 74 63 68 65 73 7d 22 5d 5d 5d 7d 20 7b 0a  witches}"]]]} {.
53f0: 09 09 72 65 74 75 72 6e 20 24 7b 63 68 61 6e 6e  ..return ${chann
5400: 65 6c 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09  el}..} else {...
5410: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
5420: 69 6e 74 73 20 5b 73 74 72 69 6e 67 20 74 72 69  ints [string tri
5430: 6d 20 22 24 7b 64 65 73 63 72 69 70 74 7d 20 24  m "${descript} $
5440: 7b 73 77 69 74 63 68 65 73 7d 22 5d 5d 0a 09 7d  {switches}"]]..}
5450: 0a 7d 0a 0a 70 72 6f 63 20 51 75 6f 74 65 51 75  .}..proc QuoteQu
5460: 6f 74 65 73 20 7b 6c 69 6e 65 7d 20 7b 0a 09 72  otes {line} {..r
5470: 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 5c 22  egsub -all -- \"
5480: 20 24 6c 69 6e 65 20 7b 5c 22 7d 20 6c 69 6e 65   $line {\"} line
5490: 0a 09 72 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d  ..regsub -all --
54a0: 20 5c 7b 20 24 6c 69 6e 65 20 7b 5c 7b 7d 20 6c   \{ $line {\{} l
54b0: 69 6e 65 3b 20 23 20 5c 7d 5c 7d 20 28 6b 65 65  ine; # \}\} (kee
54c0: 70 20 74 68 65 20 65 64 69 74 6f 72 20 68 61 70  p the editor hap
54d0: 70 79 29 0a 09 72 65 74 75 72 6e 20 24 6c 69 6e  py)..return $lin
54e0: 65 0a 7d 0a 0a 23 2a 2a 0a 23 20 67 65 74 20 74  e.}..#**.# get t
54f0: 68 65 20 77 6f 72 64 20 70 6f 73 69 74 69 6f 6e  he word position
5500: 2e 0a 23 20 40 72 65 74 75 72 6e 20 74 68 65 20  ..# @return the 
5510: 77 6f 72 64 20 70 6f 73 69 74 69 6f 6e 0a 23 20  word position.# 
5520: 40 6e 6f 74 65 20 77 69 6c 6c 20 72 65 74 75 72  @note will retur
5530: 6e 65 64 20 6d 6f 64 69 66 69 65 64 20 76 61 6c  ned modified val
5540: 75 65 73 2e 0a 23 20 40 73 61 20 45 76 65 6e 74  ues..# @sa Event
5550: 75 61 6c 6c 79 45 76 61 6c 75 61 74 65 46 69 72  uallyEvaluateFir
5560: 73 74 0a 23 20 40 64 61 74 65 20 53 65 70 2d 30  st.# @date Sep-0
5570: 36 2d 31 39 39 39 0a 23 0a 23 20 25 20 70 3c 54  6-1999.#.# % p<T
5580: 41 42 3e 0a 23 20 25 20 62 6c 61 20 70 75 74 3c  AB>.# % bla put<
5590: 54 41 42 3e 20 24 62 0a 23 20 25 20 70 75 74 3c  TAB> $b.# % put<
55a0: 54 41 42 3e 20 24 62 0a 23 20 70 61 72 74 20 20  TAB> $b.# part  
55b0: 3d 3d 20 70 75 74 0a 23 20 73 74 61 72 74 20 3d  == put.# start =
55c0: 3d 20 30 0a 23 20 65 6e 64 20 20 20 3d 3d 20 33  = 0.# end   == 3
55d0: 0a 23 20 6c 69 6e 65 20 20 3d 3d 20 22 70 75 74  .# line  == "put
55e0: 20 24 62 22 0a 23 20 5b 50 61 72 74 50 6f 73 69   $b".# [PartPosi
55f0: 74 69 6f 6e 5d 20 73 68 6f 75 6c 64 20 72 65 74  tion] should ret
5600: 75 72 6e 20 30 0a 23 0a 70 72 6f 63 20 50 61 72  urn 0.#.proc Par
5610: 74 50 6f 73 69 74 69 6f 6e 20 7b 70 61 72 74 54  tPosition {partT
5620: 20 73 74 61 72 74 54 20 65 6e 64 54 20 6c 69 6e   startT endT lin
5630: 65 54 7d 20 7b 0a 0a 09 75 70 76 61 72 20 24 70  eT} {...upvar $p
5640: 61 72 74 54 20 70 61 72 74 20 24 73 74 61 72 74  artT part $start
5650: 54 20 73 74 61 72 74 20 24 65 6e 64 54 20 65 6e  T start $endT en
5660: 64 20 24 6c 69 6e 65 54 20 6c 69 6e 65 0a 09 45  d $lineT line..E
5670: 76 65 6e 74 75 61 6c 6c 79 45 76 61 6c 75 61 74  ventuallyEvaluat
5680: 65 46 69 72 73 74 20 70 61 72 74 20 73 74 61 72  eFirst part star
5690: 74 20 65 6e 64 20 6c 69 6e 65 0a 09 72 65 74 75  t end line..retu
56a0: 72 6e 20 5b 4c 6c 65 6e 67 74 68 20 5b 73 74 72  rn [Llength [str
56b0: 69 6e 67 20 72 61 6e 67 65 20 24 6c 69 6e 65 20  ing range $line 
56c0: 30 20 5b 65 78 70 72 20 24 73 74 61 72 74 20 2d  0 [expr $start -
56d0: 20 31 5d 5d 5d 0a 0a 23 20 0a 23 20 20 20 20 20   1]]]..# .#     
56e0: 73 65 74 20 6c 6f 63 61 6c 5f 73 74 61 72 74 20  set local_start 
56f0: 5b 65 78 70 72 20 24 73 74 61 72 74 20 2d 20 31  [expr $start - 1
5700: 5d 0a 23 20 20 20 20 20 73 65 74 20 6c 6f 63 61  ].#     set loca
5710: 6c 5f 73 74 61 72 74 5f 63 68 72 20 5b 73 74 72  l_start_chr [str
5720: 69 6e 67 20 69 6e 64 65 78 20 24 6c 69 6e 65 20  ing index $line 
5730: 24 6c 6f 63 61 6c 5f 73 74 61 72 74 5d 0a 23 20  $local_start].# 
5740: 20 20 20 20 69 66 20 7b 22 5c 22 22 20 3d 3d 20      if {"\"" == 
5750: 24 6c 6f 63 61 6c 5f 73 74 61 72 74 5f 63 68 72  $local_start_chr
5760: 20 7c 7c 20 22 5c 7b 22 20 3d 3d 20 24 6c 6f 63   || "\{" == $loc
5770: 61 6c 5f 73 74 61 72 74 5f 63 68 72 7d 20 7b 0a  al_start_chr} {.
5780: 23 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 6c  #         incr l
5790: 6f 63 61 6c 5f 73 74 61 72 74 20 2d 31 0a 23 20  ocal_start -1.# 
57a0: 20 20 20 20 7d 0a 23 20 0a 23 20 20 20 20 20 73      }.# .#     s
57b0: 65 74 20 70 72 65 5f 74 65 78 74 20 5b 51 75 6f  et pre_text [Quo
57c0: 74 65 51 75 6f 74 65 73 20 5b 73 74 72 69 6e 67  teQuotes [string
57d0: 20 72 61 6e 67 65 20 24 6c 69 6e 65 20 30 20 24   range $line 0 $
57e0: 6c 6f 63 61 6c 5f 73 74 61 72 74 5d 5d 0a 23 20  local_start]].# 
57f0: 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 6c 65 6e      return [llen
5800: 67 74 68 20 24 70 72 65 5f 74 65 78 74 5d 0a 23  gth $pre_text].#
5810: 20 0a 7d 0a 0a 70 72 6f 63 20 52 69 67 68 74 20   .}..proc Right 
5820: 7b 6c 65 66 74 7d 20 7b 0a 09 23 20 70 75 74 73  {left} {..# puts
5830: 20 6c 65 66 74 3d 24 6c 65 66 74 0a 09 69 66 20   left=$left..if 
5840: 7b 22 5c 22 22 20 3d 3d 20 24 6c 65 66 74 7d 20  {"\"" == $left} 
5850: 7b 0a 09 09 72 65 74 75 72 6e 20 22 5c 22 22 0a  {...return "\"".
5860: 09 7d 20 65 6c 73 65 69 66 20 7b 22 5c 5c 5c 22  .} elseif {"\\\"
5870: 22 20 3d 3d 20 24 6c 65 66 74 7d 20 7b 0a 09 09  " == $left} {...
5880: 72 65 74 75 72 6e 20 22 5c 5c 5c 22 22 0a 09 7d  return "\\\""..}
5890: 20 65 6c 73 65 69 66 20 7b 22 5c 7b 22 20 3d 3d   elseif {"\{" ==
58a0: 20 24 6c 65 66 74 7d 20 7b 0a 09 09 72 65 74 75   $left} {...retu
58b0: 72 6e 20 22 5c 7d 22 0a 09 7d 20 65 6c 73 65 69  rn "\}"..} elsei
58c0: 66 20 7b 22 5c 5c 5c 7b 22 20 3d 3d 20 24 6c 65  f {"\\\{" == $le
58d0: 66 74 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 22  ft} {...return "
58e0: 5c 5c 5c 7d 22 0a 09 7d 0a 09 72 65 74 75 72 6e  \\\}"..}..return
58f0: 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 47 65 74 51   "".}..proc GetQ
5900: 75 6f 74 65 64 50 72 65 66 69 78 20 7b 74 65 78  uotedPrefix {tex
5910: 74 7d 20 7b 0a 09 73 65 74 20 6e 75 6c 6c 20 5b  t} {..set null [
5920: 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 74 65  string index $te
5930: 78 74 20 30 5d 0a 09 69 66 20 7b 22 5c 22 22 20  xt 0]..if {"\"" 
5940: 3d 3d 20 24 6e 75 6c 6c 20 7c 7c 20 22 5c 7b 22  == $null || "\{"
5950: 20 3d 3d 20 24 6e 75 6c 6c 7d 20 7b 0a 09 09 72   == $null} {...r
5960: 65 74 75 72 6e 20 5c 5c 24 6e 75 6c 6c 0a 09 7d  eturn \\$null..}
5970: 20 65 6c 73 65 20 7b 0a 09 09 72 65 74 75 72 6e   else {...return
5980: 20 7b 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 43   {}..}.}..proc C
5990: 6f 75 6e 74 43 68 61 72 20 7b 6c 69 6e 65 20 63  ountChar {line c
59a0: 68 61 72 7d 20 7b 0a 09 23 20 70 75 74 73 20 73  har} {..# puts s
59b0: 74 64 65 72 72 20 63 68 61 72 3d 7c 24 63 68 61  tderr char=|$cha
59c0: 72 7c 0a 09 73 65 74 20 66 6f 75 6e 64 20 30 0a  r|..set found 0.
59d0: 09 73 65 74 20 70 6f 73 20 30 0a 09 77 68 69 6c  .set pos 0..whil
59e0: 65 20 7b 2d 31 20 21 3d 20 5b 73 65 74 20 70 6f  e {-1 != [set po
59f0: 73 20 5b 73 74 72 69 6e 67 20 66 69 72 73 74 20  s [string first 
5a00: 24 63 68 61 72 20 24 6c 69 6e 65 20 24 70 6f 73  $char $line $pos
5a10: 5d 5d 7d 20 7b 0a 09 09 69 6e 63 72 20 70 6f 73  ]]} {...incr pos
5a20: 0a 09 09 69 6e 63 72 20 66 6f 75 6e 64 0a 09 7d  ...incr found..}
5a30: 0a 09 72 65 74 75 72 6e 20 24 66 6f 75 6e 64 0a  ..return $found.
5a40: 7d 0a 0a 23 2a 2a 0a 23 20 6d 61 6b 65 20 61 20  }..#**.# make a 
5a50: 70 72 6f 70 65 72 20 74 63 6c 20 6c 69 73 74 20  proper tcl list 
5a60: 66 72 6f 6d 20 61 6e 20 69 63 6f 6d 70 6c 65 74  from an icomplet
5a70: 65 0a 23 20 73 74 72 69 6e 67 2c 20 74 68 61 74  e.# string, that
5a80: 20 69 73 3a 20 72 65 6d 6f 76 65 20 74 68 65 20   is: remove the 
5a90: 6a 75 6e 6b 2e 20 54 68 69 73 20 69 73 0a 23 20  junk. This is.# 
5aa0: 63 6f 6d 70 6c 65 6d 65 6e 74 61 72 79 20 74 6f  complementary to
5ab0: 20 60 49 6e 63 6f 6d 70 6c 65 74 65 4c 69 73 74   `IncompleteList
5ac0: 52 65 6d 61 69 6e 64 65 72 27 2e 0a 23 20 65 2e  Remainder'..# e.
5ad0: 67 2e 3a 0a 23 20 20 20 20 20 20 20 66 6f 72 20  g.:.#       for 
5ae0: 7b 73 65 74 20 69 20 31 7d 20 22 0a 23 20 20 2d  {set i 1} ".#  -
5af0: 2d 3e 20 20 66 6f 72 20 7b 73 65 74 20 69 20 31  ->  for {set i 1
5b00: 7d 0a 23 0a 70 72 6f 63 20 50 72 6f 70 65 72 4c  }.#.proc ProperL
5b10: 69 73 74 20 7b 6c 69 6e 65 7d 20 7b 0a 09 73 65  ist {line} {..se
5b20: 74 20 6c 61 73 74 20 5b 65 78 70 72 20 5b 73 74  t last [expr [st
5b30: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6c 69 6e  ring length $lin
5b40: 65 5d 20 2d 20 31 5d 0a 09 66 6f 72 20 7b 73 65  e] - 1]..for {se
5b50: 74 20 69 20 24 6c 61 73 74 7d 20 7b 24 69 20 3e  t i $last} {$i >
5b60: 3d 20 30 7d 20 7b 69 6e 63 72 20 69 20 2d 31 7d  = 0} {incr i -1}
5b70: 20 7b 0a 09 09 69 66 20 7b 21 5b 63 61 74 63 68   {...if {![catch
5b80: 20 7b 6c 6c 65 6e 67 74 68 20 5b 73 74 72 69 6e   {llength [strin
5b90: 67 20 72 61 6e 67 65 20 24 6c 69 6e 65 20 30 20  g range $line 0 
5ba0: 24 69 5d 7d 5d 7d 20 7b 0a 09 09 09 62 72 65 61  $i]}]} {....brea
5bb0: 6b 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  k...}..}..return
5bc0: 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24   [string range $
5bd0: 6c 69 6e 65 20 30 20 24 69 5d 0a 7d 0a 0a 23 2a  line 0 $i].}..#*
5be0: 2a 0a 23 20 72 65 74 75 72 6e 20 74 68 65 20 6c  *.# return the l
5bf0: 61 73 74 20 70 61 72 74 20 6f 66 20 61 20 6c 69  ast part of a li
5c00: 6e 65 20 77 68 69 63 68 0a 23 20 70 72 65 76 65  ne which.# preve
5c10: 6e 74 73 20 74 68 65 20 6c 69 6e 65 20 66 72 6f  nts the line fro
5c20: 6d 20 62 65 65 69 6e 67 20 61 20 6c 69 73 74 2e  m beeing a list.
5c30: 0a 23 20 54 68 69 73 20 69 73 20 63 6f 6d 70 6c  .# This is compl
5c40: 65 6d 65 6e 74 61 72 79 20 74 6f 20 60 50 72 6f  ementary to `Pro
5c50: 70 65 72 4c 69 73 74 27 2e 0a 23 0a 70 72 6f 63  perList'..#.proc
5c60: 20 49 6e 63 6f 6d 70 6c 65 74 65 4c 69 73 74 52   IncompleteListR
5c70: 65 6d 61 69 6e 64 65 72 20 7b 6c 69 6e 65 7d 20  emainder {line} 
5c80: 7b 0a 09 73 65 74 20 6c 61 73 74 20 5b 65 78 70  {..set last [exp
5c90: 72 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  r [string length
5ca0: 20 24 6c 69 6e 65 5d 20 2d 20 31 5d 0a 09 66 6f   $line] - 1]..fo
5cb0: 72 20 7b 73 65 74 20 69 20 24 6c 61 73 74 7d 20  r {set i $last} 
5cc0: 7b 24 69 20 3e 3d 20 30 7d 20 7b 69 6e 63 72 20  {$i >= 0} {incr 
5cd0: 69 20 2d 31 7d 20 7b 0a 09 09 69 66 20 7b 21 5b  i -1} {...if {![
5ce0: 63 61 74 63 68 20 7b 6c 6c 65 6e 67 74 68 20 5b  catch {llength [
5cf0: 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 6c 69  string range $li
5d00: 6e 65 20 30 20 24 69 5d 7d 5d 7d 20 7b 0a 09 09  ne 0 $i]}]} {...
5d10: 09 62 72 65 61 6b 0a 09 09 7d 0a 09 7d 0a 09 69  .break...}..}..i
5d20: 6e 63 72 20 69 0a 09 72 65 74 75 72 6e 20 5b 53  ncr i..return [S
5d30: 74 72 69 6e 67 20 72 61 6e 67 65 20 24 6c 69 6e  tring range $lin
5d40: 65 20 24 69 20 65 6e 64 5d 0a 7d 0a 0a 23 2a 2a  e $i end].}..#**
5d50: 0a 23 20 73 61 76 65 20 60 6c 69 6e 64 65 78 27  .# save `lindex'
5d60: 2e 20 77 6f 72 6b 73 20 61 6c 73 6f 20 66 6f 72  . works also for
5d70: 20 6e 6f 6e 2d 63 6f 6d 70 6c 65 74 65 20 6c 69   non-complete li
5d80: 6e 65 73 0a 23 20 77 69 74 68 20 6f 70 65 6e 69  nes.# with openi
5d90: 6e 67 20 70 61 72 65 6e 74 68 65 73 65 73 20 6f  ng parentheses o
5da0: 72 20 71 75 6f 74 65 73 2e 0a 23 20 75 73 61 67  r quotes..# usag
5db0: 65 20 61 73 20 60 6c 69 6e 64 65 78 27 2e 0a 23  e as `lindex'..#
5dc0: 20 45 76 65 6e 74 75 61 6c 6c 79 20 72 65 74 75   Eventually retu
5dd0: 72 6e 73 20 74 68 65 20 52 65 73 74 20 6f 66 20  rns the Rest of 
5de0: 61 6e 20 69 6e 63 6f 6d 70 6c 65 74 65 20 6c 69  an incomplete li
5df0: 6e 65 2c 0a 23 20 69 66 20 74 68 65 20 69 6e 64  ne,.# if the ind
5e00: 65 78 20 69 73 20 60 65 6e 64 27 20 6f 72 20 3d  ex is `end' or =
5e10: 3d 20 5b 4c 6c 65 6e 67 74 68 20 24 6c 69 6e 65  = [Llength $line
5e20: 5d 2e 0a 23 0a 70 72 6f 63 20 4c 69 6e 64 65 78  ]..#.proc Lindex
5e30: 20 7b 6c 69 6e 65 20 70 6f 73 7d 20 7b 0a 09 69   {line pos} {..i
5e40: 66 20 7b 5b 63 61 74 63 68 20 5b 6c 69 73 74 20  f {[catch [list 
5e50: 73 65 74 20 73 75 62 20 5b 6c 69 6e 64 65 78 20  set sub [lindex 
5e60: 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 5d 5d  ${line} ${pos}]]
5e70: 5d 7d 20 7b 0a 09 09 69 66 20 7b 22 65 6e 64 22  ]} {...if {"end"
5e80: 20 3d 3d 20 24 7b 70 6f 73 7d 20 7c 7c 20 5b 4c   == ${pos} || [L
5e90: 6c 65 6e 67 74 68 20 24 7b 6c 69 6e 65 7d 5d 20  length ${line}] 
5ea0: 3d 3d 20 24 7b 70 6f 73 7d 7d 20 7b 0a 09 09 09  == ${pos}} {....
5eb0: 72 65 74 75 72 6e 20 5b 49 6e 63 6f 6d 70 6c 65  return [Incomple
5ec0: 74 65 4c 69 73 74 52 65 6d 61 69 6e 64 65 72 20  teListRemainder 
5ed0: 24 7b 6c 69 6e 65 7d 5d 0a 09 09 7d 0a 09 09 73  ${line}]...}...s
5ee0: 65 74 20 6c 69 6e 65 20 5b 50 72 6f 70 65 72 4c  et line [ProperL
5ef0: 69 73 74 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09 23  ist ${line}]...#
5f00: 20 70 75 74 73 20 73 74 64 65 72 72 20 5c 6e 70   puts stderr \np
5f10: 72 6f 70 65 72 5f 6c 69 6e 65 3d 7c 24 70 72 6f  roper_line=|$pro
5f20: 70 65 72 5f 6c 69 6e 65 7c 0a 09 09 69 66 20 7b  per_line|...if {
5f30: 5b 63 61 74 63 68 20 5b 6c 69 73 74 20 73 65 74  [catch [list set
5f40: 20 73 75 62 20 5b 6c 69 6e 64 65 78 20 24 7b 6c   sub [lindex ${l
5f50: 69 6e 65 7d 20 24 7b 70 6f 73 7d 5d 5d 5d 7d 20  ine} ${pos}]]]} 
5f60: 7b 20 72 65 74 75 72 6e 20 7b 7d 20 7d 0a 09 7d  { return {} }..}
5f70: 0a 09 72 65 74 75 72 6e 20 24 7b 73 75 62 7d 0a  ..return ${sub}.
5f80: 7d 0a 0a 23 2a 2a 0a 23 20 73 61 76 65 20 60 6c  }..#**.# save `l
5f90: 6c 65 6e 67 74 68 27 20 28 73 65 65 20 61 62 6f  length' (see abo
5fa0: 76 65 29 2e 0a 23 0a 70 72 6f 63 20 4c 6c 65 6e  ve)..#.proc Llen
5fb0: 67 74 68 20 7b 6c 69 6e 65 7d 20 7b 0a 09 69 66  gth {line} {..if
5fc0: 20 7b 5b 63 61 74 63 68 20 5b 6c 69 73 74 20 73   {[catch [list s
5fd0: 65 74 20 6c 65 6e 20 5b 6c 6c 65 6e 67 74 68 20  et len [llength 
5fe0: 24 7b 6c 69 6e 65 7d 5d 5d 5d 7d 20 7b 0a 09 09  ${line}]]]} {...
5ff0: 73 65 74 20 6c 69 6e 65 20 5b 50 72 6f 70 65 72  set line [Proper
6000: 4c 69 73 74 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09  List ${line}]...
6010: 69 66 20 7b 5b 63 61 74 63 68 20 5b 6c 69 73 74  if {[catch [list
6020: 20 73 65 74 20 6c 65 6e 20 5b 6c 6c 65 6e 67 74   set len [llengt
6030: 68 20 24 7b 6c 69 6e 65 7d 5d 5d 5d 7d 20 7b 20  h ${line}]]]} { 
6040: 72 65 74 75 72 6e 20 7b 7d 20 7d 0a 09 7d 0a 09  return {} }..}..
6050: 23 20 70 75 74 73 20 73 74 64 65 72 72 20 5c 6e  # puts stderr \n
6060: 6c 69 6e 65 3d 24 6c 69 6e 65 0a 09 72 65 74 75  line=$line..retu
6070: 72 6e 20 24 7b 6c 65 6e 7d 0a 7d 0a 0a 23 2a 2a  rn ${len}.}..#**
6080: 0a 23 20 73 61 76 65 20 60 6c 72 61 6e 67 65 27  .# save `lrange'
6090: 20 28 73 65 65 20 61 62 6f 76 65 29 2e 0a 23 0a   (see above)..#.
60a0: 70 72 6f 63 20 4c 72 61 6e 67 65 20 7b 6c 69 6e  proc Lrange {lin
60b0: 65 20 66 69 72 73 74 20 6c 61 73 74 7d 20 7b 0a  e first last} {.
60c0: 09 69 66 20 7b 5b 63 61 74 63 68 20 5b 6c 69 73  .if {[catch [lis
60d0: 74 20 73 65 74 20 72 61 6e 67 65 20 5b 6c 72 61  t set range [lra
60e0: 6e 67 65 20 24 7b 6c 69 6e 65 7d 20 24 7b 66 69  nge ${line} ${fi
60f0: 72 73 74 7d 20 24 7b 6c 61 73 74 7d 5d 5d 5d 7d  rst} ${last}]]]}
6100: 20 7b 0a 09 09 73 65 74 20 72 65 73 74 20 5b 49   {...set rest [I
6110: 6e 63 6f 6d 70 6c 65 74 65 4c 69 73 74 52 65 6d  ncompleteListRem
6120: 61 69 6e 64 65 72 20 24 7b 6c 69 6e 65 7d 5d 0a  ainder ${line}].
6130: 09 09 73 65 74 20 70 72 6f 70 65 72 20 5b 50 72  ..set proper [Pr
6140: 6f 70 65 72 4c 69 73 74 20 24 7b 6c 69 6e 65 7d  operList ${line}
6150: 5d 0a 09 09 69 66 20 7b 5b 63 61 74 63 68 20 5b  ]...if {[catch [
6160: 6c 69 73 74 20 73 65 74 20 72 61 6e 67 65 20 5b  list set range [
6170: 6c 69 6e 64 65 78 20 24 7b 70 72 6f 70 65 72 7d  lindex ${proper}
6180: 20 24 7b 66 69 72 73 74 7d 20 24 7b 6c 61 73 74   ${first} ${last
6190: 7d 5d 5d 5d 7d 20 7b 0a 09 09 09 72 65 74 75 72  }]]]} {....retur
61a0: 6e 20 7b 7d 0a 09 09 7d 0a 09 09 69 66 20 7b 22  n {}...}...if {"
61b0: 65 6e 64 22 20 3d 3d 20 24 7b 6c 61 73 74 7d 20  end" == ${last} 
61c0: 7c 7c 20 5b 4c 6c 65 6e 67 74 68 20 24 7b 6c 69  || [Llength ${li
61d0: 6e 65 7d 5d 20 3d 3d 20 24 7b 6c 61 73 74 7d 7d  ne}] == ${last}}
61e0: 20 7b 0a 09 09 09 61 70 70 65 6e 64 20 73 75 62   {....append sub
61f0: 20 22 20 24 7b 72 65 73 74 7d 22 0a 09 09 7d 0a   " ${rest}"...}.
6200: 09 7d 0a 09 72 65 74 75 72 6e 20 24 7b 72 61 6e  .}..return ${ran
6210: 67 65 7d 0a 7d 0a 0a 23 2a 2a 0a 23 20 4c 75 6e  ge}.}..#**.# Lun
6220: 69 71 75 65 20 2d 2d 20 72 65 6d 6f 76 65 20 64  ique -- remove d
6230: 75 70 6c 69 63 61 74 65 20 65 6e 74 72 69 65 73  uplicate entries
6240: 20 66 72 6f 6d 20 61 20 73 6f 72 74 65 64 20 6c   from a sorted l
6250: 69 73 74 0a 23 20 40 70 61 72 61 6d 20 20 20 6c  ist.# @param   l
6260: 69 73 74 0a 23 20 40 72 65 74 75 72 6e 20 20 75  ist.# @return  u
6270: 6e 69 71 75 65 20 6c 69 73 74 0a 23 20 40 61 75  nique list.# @au
6280: 74 68 6f 72 20 20 4a 6f 68 61 6e 6e 65 73 20 5a  thor  Johannes Z
6290: 65 6c 6c 6e 65 72 0a 23 20 40 64 61 74 65 20 20  ellner.# @date  
62a0: 20 20 53 65 70 2d 31 39 2d 31 39 39 39 0a 23 0a    Sep-19-1999.#.
62b0: 70 72 6f 63 20 4c 75 6e 69 71 75 65 20 6c 73 74  proc Lunique lst
62c0: 20 7b 0a 09 73 65 74 20 75 6e 69 71 75 65 20 22   {..set unique "
62d0: 22 0a 09 66 6f 72 65 61 63 68 20 65 6c 65 6d 65  "..foreach eleme
62e0: 6e 74 20 24 7b 6c 73 74 7d 20 7b 0a 09 09 69 66  nt ${lst} {...if
62f0: 20 7b 24 7b 65 6c 65 6d 65 6e 74 7d 20 21 3d 20   {${element} != 
6300: 5b 6c 69 6e 64 65 78 20 24 7b 75 6e 69 71 75 65  [lindex ${unique
6310: 7d 20 65 6e 64 5d 7d 20 7b 0a 09 09 09 6c 61 70  } end]} {....lap
6320: 70 65 6e 64 20 75 6e 69 71 75 65 20 24 7b 65 6c  pend unique ${el
6330: 65 6d 65 6e 74 7d 0a 09 09 7d 0a 09 7d 0a 09 72  ement}...}..}..r
6340: 65 74 75 72 6e 20 24 7b 75 6e 69 71 75 65 7d 0a  eturn ${unique}.
6350: 7d 0a 0a 23 2a 2a 0a 23 20 73 74 72 69 6e 67 20  }..#**.# string 
6360: 66 75 6e 63 74 69 6f 6e 2c 20 77 68 69 63 68 20  function, which 
6370: 77 6f 72 6b 73 20 61 6c 73 6f 20 66 6f 72 20 6f  works also for o
6380: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 0a 23 20  lder versions.# 
6390: 6f 66 20 74 63 6c 2c 20 77 68 69 63 68 20 64 6f  of tcl, which do
63a0: 6e 27 74 20 68 61 76 65 20 74 68 65 20 60 65 6e  n't have the `en
63b0: 64 27 20 69 6e 64 65 78 2e 0a 23 20 49 20 74 72  d' index..# I tr
63c0: 69 65 64 20 61 6c 73 6f 20 64 65 66 69 6e 69 6e  ied also definin
63d0: 67 20 60 73 74 72 69 6e 67 27 20 61 6e 64 20 74  g `string' and t
63e0: 68 75 73 20 6f 76 65 72 72 69 64 69 6e 67 0a 23  hus overriding.#
63f0: 20 74 68 65 20 62 75 69 6c 74 69 6e 20 60 73 74   the builtin `st
6400: 72 69 6e 67 27 20 77 68 69 63 68 20 77 6f 72 6b  ring' which work
6410: 65 64 2c 20 62 75 74 20 73 6c 6f 77 65 64 20 64  ed, but slowed d
6420: 6f 77 6e 0a 23 20 74 68 69 6e 67 73 20 63 6f 6e  own.# things con
6430: 73 69 64 65 72 61 62 6c 79 2e 20 53 6f 20 49 20  siderably. So I 
6440: 64 65 63 69 64 65 64 20 74 6f 20 63 61 6c 6c 20  decided to call 
6450: 60 53 74 72 69 6e 67 27 0a 23 20 6f 6e 6c 79 20  `String'.# only 
6460: 69 66 20 49 20 72 65 61 6c 6c 79 20 6e 65 65 64  if I really need
6470: 20 74 68 65 20 60 65 6e 64 27 20 69 6e 64 65 78   the `end' index
6480: 2e 0a 23 0a 70 72 6f 63 20 53 74 72 69 6e 67 20  ..#.proc String 
6490: 61 72 67 73 20 7b 0a 09 69 66 20 7b 5b 69 6e 66  args {..if {[inf
64a0: 6f 20 74 63 6c 76 65 72 73 69 6f 6e 5d 20 3c 20  o tclversion] < 
64b0: 38 2e 32 7d 20 7b 0a 09 09 73 77 69 74 63 68 20  8.2} {...switch 
64c0: 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 20 31 5d  [lindex $args 1]
64d0: 20 7b 0a 09 09 09 72 61 6e 67 65 20 2d 0a 09 09   {....range -...
64e0: 09 69 6e 64 65 78 20 7b 0a 09 09 09 09 69 66 20  .index {.....if 
64f0: 7b 22 65 6e 64 22 20 3d 3d 20 5b 6c 69 6e 64 65  {"end" == [linde
6500: 78 20 24 61 72 67 73 20 65 6e 64 5d 7d 20 7b 0a  x $args end]} {.
6510: 09 09 09 09 09 73 65 74 20 73 74 72 20 5b 6c 69  .....set str [li
6520: 6e 64 65 78 20 24 61 72 67 73 20 32 5d 0a 09 09  ndex $args 2]...
6530: 09 09 09 6c 72 65 70 6c 61 63 65 20 61 72 67 73  ...lreplace args
6540: 20 65 6e 64 20 65 6e 64 20 5b 65 78 70 72 20 5b   end end [expr [
6550: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73  string length $s
6560: 74 72 5d 20 2d 20 31 5d 0a 09 09 09 09 7d 0a 09  tr] - 1].....}..
6570: 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75  ..}...}..}..retu
6580: 72 6e 20 5b 65 76 61 6c 20 73 74 72 69 6e 67 20  rn [eval string 
6590: 24 61 72 67 73 5d 0a 7d 0a 0a 70 72 6f 63 20 53  $args].}..proc S
65a0: 74 72 69 70 50 72 65 66 69 78 20 7b 74 65 78 74  tripPrefix {text
65b0: 7d 20 7b 0a 09 23 20 70 75 74 73 20 22 28 53 74  } {..# puts "(St
65c0: 72 69 70 50 72 65 66 69 78 29 20 74 65 78 74 3d  ripPrefix) text=
65d0: 7c 24 74 65 78 74 7c 22 0a 09 73 65 74 20 6e 75  |$text|"..set nu
65e0: 6c 6c 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78  ll [string index
65f0: 20 24 74 65 78 74 20 30 5d 0a 09 69 66 20 7b 22   $text 0]..if {"
6600: 5c 22 22 20 3d 3d 20 24 6e 75 6c 6c 20 7c 7c 20  \"" == $null || 
6610: 22 5c 7b 22 20 3d 3d 20 24 6e 75 6c 6c 7d 20 7b  "\{" == $null} {
6620: 0a 09 09 72 65 74 75 72 6e 20 5b 53 74 72 69 6e  ...return [Strin
6630: 67 20 72 61 6e 67 65 20 24 74 65 78 74 20 31 20  g range $text 1 
6640: 65 6e 64 5d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09  end]..} else {..
6650: 09 72 65 74 75 72 6e 20 24 74 65 78 74 0a 09 7d  .return $text..}
6660: 0a 7d 0a 0a 70 72 6f 63 20 56 61 72 43 6f 6d 70  .}..proc VarComp
6670: 6c 65 74 69 6f 6e 20 7b 74 65 78 74 20 7b 6c 65  letion {text {le
6680: 76 65 6c 20 2d 31 7d 7d 20 7b 0a 09 69 66 20 7b  vel -1}} {..if {
6690: 22 23 22 20 21 3d 20 5b 73 74 72 69 6e 67 20 69  "#" != [string i
66a0: 6e 64 65 78 20 24 7b 6c 65 76 65 6c 7d 20 30 5d  ndex ${level} 0]
66b0: 7d 20 7b 0a 09 09 69 66 20 7b 2d 31 20 3d 3d 20  } {...if {-1 == 
66c0: 24 7b 6c 65 76 65 6c 7d 7d 20 7b 0a 09 09 09 73  ${level}} {....s
66d0: 65 74 20 6c 65 76 65 6c 20 5b 69 6e 66 6f 20 6c  et level [info l
66e0: 65 76 65 6c 5d 0a 09 09 7d 20 65 6c 73 65 20 7b  evel]...} else {
66f0: 0a 09 09 09 69 6e 63 72 20 6c 65 76 65 6c 0a 09  ....incr level..
6700: 09 7d 0a 09 7d 0a 09 73 65 74 20 70 72 65 20 5b  .}..}..set pre [
6710: 47 65 74 51 75 6f 74 65 64 50 72 65 66 69 78 20  GetQuotedPrefix 
6720: 24 7b 74 65 78 74 7d 5d 0a 09 73 65 74 20 76 61  ${text}]..set va
6730: 72 20 5b 53 74 72 69 70 50 72 65 66 69 78 20 24  r [StripPrefix $
6740: 7b 74 65 78 74 7d 5d 0a 09 23 20 70 75 74 73 20  {text}]..# puts 
6750: 73 74 64 65 72 72 20 22 28 56 61 72 43 6f 6d 70  stderr "(VarComp
6760: 6c 65 74 69 6f 6e 29 20 70 72 65 3d 7c 24 70 72  letion) pre=|$pr
6770: 65 7c 22 0a 09 23 20 70 75 74 73 20 73 74 64 65  e|"..# puts stde
6780: 72 72 20 22 28 56 61 72 43 6f 6d 70 6c 65 74 69  rr "(VarCompleti
6790: 6f 6e 29 20 76 61 72 3d 7c 24 76 61 72 7c 22 0a  on) var=|$var|".
67a0: 0a 09 23 20 61 72 72 61 79 73 0a 09 23 0a 09 69  ..# arrays..#..i
67b0: 66 20 7b 5b 72 65 67 65 78 70 20 7b 28 5b 5e 28  f {[regexp {([^(
67c0: 5d 2a 29 5c 28 28 2e 2a 29 7d 20 24 7b 76 61 72  ]*)\((.*)} ${var
67d0: 7d 20 61 6c 6c 20 61 72 72 61 79 20 6e 61 6d 65  } all array name
67e0: 5d 7d 20 7b 0a 09 09 73 65 74 20 6e 61 6d 65 73  ]} {...set names
67f0: 20 5b 75 70 6c 65 76 65 6c 20 24 7b 6c 65 76 65   [uplevel ${leve
6800: 6c 7d 20 61 72 72 61 79 20 6e 61 6d 65 73 20 24  l} array names $
6810: 7b 61 72 72 61 79 7d 20 24 7b 6e 61 6d 65 7d 2a  {array} ${name}*
6820: 5d 0a 09 09 69 66 20 7b 31 20 3d 3d 20 5b 6c 6c  ]...if {1 == [ll
6830: 65 6e 67 74 68 20 24 6e 61 6d 65 73 5d 7d 20 7b  ength $names]} {
6840: 20 3b 20 23 20 75 6e 69 71 75 65 20 6d 61 74 63   ; # unique matc
6850: 68 0a 09 09 09 72 65 74 75 72 6e 20 22 24 7b 61  h....return "${a
6860: 72 72 61 79 7d 28 24 7b 6e 61 6d 65 73 7d 29 22  rray}(${names})"
6870: 0a 09 09 7d 20 65 6c 73 65 69 66 20 7b 22 22 20  ...} elseif {"" 
6880: 21 3d 20 24 7b 6e 61 6d 65 73 7d 7d 20 7b 0a 09  != ${names}} {..
6890: 09 09 72 65 74 75 72 6e 20 22 24 7b 61 72 72 61  ..return "${arra
68a0: 79 7d 28 5b 43 6f 6d 70 6c 65 74 65 4c 6f 6e 67  y}([CompleteLong
68b0: 65 73 74 20 24 7b 6e 61 6d 65 73 7d 5d 20 24 7b  est ${names}] ${
68c0: 6e 61 6d 65 73 7d 22 0a 09 09 7d 20 65 6c 73 65  names}"...} else
68d0: 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 22 22 3b   {....return "";
68e0: 20 23 20 6e 6f 74 68 69 6e 67 20 74 6f 20 63 6f   # nothing to co
68f0: 6d 70 6c 65 74 65 0a 09 09 7d 0a 09 7d 0a 0a 09  mplete...}..}...
6900: 23 20 6e 6f 6e 2d 61 72 72 61 79 73 0a 09 23 0a  # non-arrays..#.
6910: 09 72 65 67 73 75 62 20 22 3a 24 22 20 24 7b 76  .regsub ":$" ${v
6920: 61 72 7d 20 22 3a 3a 22 20 76 61 72 0a 09 73 65  ar} "::" var..se
6930: 74 20 6e 61 6d 65 73 70 61 63 65 73 20 5b 6e 61  t namespaces [na
6940: 6d 65 73 70 61 63 65 20 63 68 69 6c 64 72 65 6e  mespace children
6950: 20 3a 3a 20 24 7b 76 61 72 7d 2a 5d 0a 09 69 66   :: ${var}*]..if
6960: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 7b 6e 61 6d   {[llength ${nam
6970: 65 73 70 61 63 65 73 7d 5d 20 26 26 20 22 3a 3a  espaces}] && "::
6980: 22 20 21 3d 20 5b 73 74 72 69 6e 67 20 72 61 6e  " != [string ran
6990: 67 65 20 24 7b 76 61 72 7d 20 30 20 31 5d 7d 20  ge ${var} 0 1]} 
69a0: 7b 0a 09 09 66 6f 72 65 61 63 68 20 6e 61 6d 65  {...foreach name
69b0: 20 24 7b 6e 61 6d 65 73 70 61 63 65 73 7d 20 7b   ${namespaces} {
69c0: 0a 09 09 09 72 65 67 73 75 62 20 22 5e 3a 3a 22  ....regsub "^::"
69d0: 20 24 7b 6e 61 6d 65 7d 20 22 22 20 6e 61 6d 65   ${name} "" name
69e0: 0a 09 09 09 69 66 20 7b 5b 73 74 72 69 6e 67 20  ....if {[string 
69f0: 6c 65 6e 67 74 68 20 24 7b 6e 61 6d 65 7d 5d 7d  length ${name}]}
6a00: 20 7b 0a 09 09 09 09 6c 61 70 70 65 6e 64 20 6e   {.....lappend n
6a10: 65 77 20 24 7b 6e 61 6d 65 7d 3a 3a 0a 09 09 09  ew ${name}::....
6a20: 7d 0a 09 09 7d 0a 09 09 73 65 74 20 6e 61 6d 65  }...}...set name
6a30: 73 70 61 63 65 73 20 24 7b 6e 65 77 7d 0a 09 09  spaces ${new}...
6a40: 75 6e 73 65 74 20 6e 65 77 0a 09 7d 0a 09 73 65  unset new..}..se
6a50: 74 20 6d 61 74 63 68 65 73 20 5c 0a 09 5b 73 74  t matches \..[st
6a60: 72 69 6e 67 20 74 72 69 6d 20 22 5b 75 70 6c 65  ring trim "[uple
6a70: 76 65 6c 20 24 7b 6c 65 76 65 6c 7d 20 69 6e 66  vel ${level} inf
6a80: 6f 20 76 61 72 73 20 24 7b 76 61 72 7d 2a 5d 20  o vars ${var}*] 
6a90: 24 7b 6e 61 6d 65 73 70 61 63 65 73 7d 22 5d 0a  ${namespaces}"].
6aa0: 09 69 66 20 7b 31 20 3d 3d 20 5b 6c 6c 65 6e 67  .if {1 == [lleng
6ab0: 74 68 20 24 6d 61 74 63 68 65 73 5d 7d 20 7b 20  th $matches]} { 
6ac0: 3b 20 23 20 75 6e 69 71 75 65 20 6d 61 74 63 68  ; # unique match
6ad0: 0a 0a 09 09 23 20 63 68 65 63 6b 20 69 66 20 74  ....# check if t
6ae0: 68 69 73 20 75 6e 69 71 75 65 20 6d 61 74 63 68  his unique match
6af0: 20 69 73 20 61 6e 0a 09 09 23 20 61 72 72 61 79   is an...# array
6b00: 20 6e 61 6d 65 2c 20 28 77 68 69 74 68 20 6e 6f   name, (whith no
6b10: 20 22 28 22 20 79 65 74 29 2e 0a 09 09 23 0a 09   "(" yet)....#..
6b20: 09 69 66 20 7b 5b 75 70 6c 65 76 65 6c 20 24 7b  .if {[uplevel ${
6b30: 6c 65 76 65 6c 7d 20 61 72 72 61 79 20 65 78 69  level} array exi
6b40: 73 74 73 20 24 6d 61 74 63 68 65 73 5d 7d 20 7b  sts $matches]} {
6b50: 0a 09 09 09 72 65 74 75 72 6e 20 5b 56 61 72 43  ....return [VarC
6b60: 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 6d 61 74 63  ompletion ${matc
6b70: 68 65 73 7d 28 20 24 7b 6c 65 76 65 6c 7d 5d 3b  hes}( ${level}];
6b80: 20 23 20 72 65 63 75 72 73 69 6f 6e 0a 09 09 7d   # recursion...}
6b90: 20 65 6c 73 65 20 7b 0a 09 09 09 72 65 74 75 72   else {....retur
6ba0: 6e 20 24 7b 70 72 65 7d 24 7b 6d 61 74 63 68 65  n ${pre}${matche
6bb0: 73 7d 5b 52 69 67 68 74 20 24 7b 70 72 65 7d 5d  s}[Right ${pre}]
6bc0: 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 69 66 20 7b  ...}..} elseif {
6bd0: 22 22 20 21 3d 20 24 6d 61 74 63 68 65 73 7d 20  "" != $matches} 
6be0: 7b 20 3b 20 23 20 6d 6f 72 65 20 74 68 61 6e 20  { ; # more than 
6bf0: 6f 6e 65 20 6d 61 74 63 68 0a 09 09 20 20 72 65  one match...  re
6c00: 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
6c10: 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24  omList ${text} $
6c20: 7b 6d 61 74 63 68 65 73 7d 5d 0a 09 7d 20 65 6c  {matches}]..} el
6c30: 73 65 20 7b 0a 09 09 72 65 74 75 72 6e 20 22 22  se {...return ""
6c40: 3b 20 23 20 6e 6f 74 68 69 6e 67 20 74 6f 20 63  ; # nothing to c
6c50: 6f 6d 70 6c 65 74 65 0a 09 7d 0a 7d 0a 0a 70 72  omplete..}.}..pr
6c60: 6f 63 20 43 6f 6d 70 6c 65 74 65 43 6f 6e 74 72  oc CompleteContr
6c70: 6f 6c 53 74 61 74 65 6d 65 6e 74 20 7b 74 65 78  olStatement {tex
6c80: 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
6c90: 20 70 6f 73 20 6d 6f 64 20 70 72 65 20 6e 65 77   pos mod pre new
6ca0: 5f 6c 69 6e 65 7d 20 7b 0a 09 73 65 74 20 70 72  _line} {..set pr
6cb0: 65 20 5b 47 65 74 51 75 6f 74 65 64 50 72 65 66  e [GetQuotedPref
6cc0: 69 78 20 24 7b 70 72 65 7d 5d 0a 09 73 65 74 20  ix ${pre}]..set 
6cd0: 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6e 65 77  cmd [Lindex $new
6ce0: 5f 6c 69 6e 65 20 30 5d 0a 09 73 65 74 20 64 69  _line 0]..set di
6cf0: 66 66 20 5b 65 78 70 72 20 5c 0a 09 5b 73 74 72  ff [expr \..[str
6d00: 69 6e 67 20 6c 65 6e 67 74 68 20 24 6c 69 6e 65  ing length $line
6d10: 5d 20 2d 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67  ] - [string leng
6d20: 74 68 20 24 6e 65 77 5f 6c 69 6e 65 5d 5d 0a 09  th $new_line]]..
6d30: 69 66 20 7b 24 64 69 66 66 20 3d 3d 20 5b 65 78  if {$diff == [ex
6d40: 70 72 20 24 73 74 61 72 74 20 2b 20 31 5d 7d 20  pr $start + 1]} 
6d50: 7b 0a 09 09 73 65 74 20 6d 6f 64 31 20 24 6d 6f  {...set mod1 $mo
6d60: 64 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 73 65  d..} else {...se
6d70: 74 20 6d 6f 64 31 20 24 74 65 78 74 0a 09 09 73  t mod1 $text...s
6d80: 65 74 20 70 72 65 20 22 22 0a 09 7d 0a 09 73 65  et pre ""..}..se
6d90: 74 20 6e 65 77 5f 65 6e 64 20 5b 65 78 70 72 20  t new_end [expr 
6da0: 24 65 6e 64 20 2d 20 24 64 69 66 66 5d 0a 09 73  $end - $diff]..s
6db0: 65 74 20 6e 65 77 5f 73 74 61 72 74 20 5b 65 78  et new_start [ex
6dc0: 70 72 20 24 6e 65 77 5f 65 6e 64 20 2d 20 5b 73  pr $new_end - [s
6dd0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d 6f  tring length $mo
6de0: 64 31 5d 5d 0a 09 23 20 70 75 74 73 20 22 22 0a  d1]]..# puts "".
6df0: 09 23 20 70 75 74 73 20 6e 65 77 5f 73 74 61 72  .# puts new_star
6e00: 74 3d 24 6e 65 77 5f 73 74 61 72 74 0a 09 23 20  t=$new_start..# 
6e10: 70 75 74 73 20 6e 65 77 5f 65 6e 64 3d 24 6e 65  puts new_end=$ne
6e20: 77 5f 65 6e 64 0a 09 23 20 70 75 74 73 20 6e 65  w_end..# puts ne
6e30: 77 5f 6c 69 6e 65 3d 24 6e 65 77 5f 6c 69 6e 65  w_line=$new_line
6e40: 0a 09 23 20 70 75 74 73 20 6d 6f 64 31 3d 24 6d  ..# puts mod1=$m
6e50: 6f 64 31 0a 09 69 66 20 7b 24 6e 65 77 5f 73 74  od1..if {$new_st
6e60: 61 72 74 20 3c 20 30 7d 20 7b 0a 09 09 72 65 74  art < 0} {...ret
6e70: 75 72 6e 20 22 22 3b 20 23 20 77 68 65 6e 20 64  urn ""; # when d
6e80: 6f 65 73 20 74 68 69 73 20 6f 63 63 75 72 3f 0a  oes this occur?.
6e90: 09 7d 0a 09 23 20 70 75 74 73 20 73 74 64 65 72  .}..# puts stder
6ea0: 72 20 22 22 0a 09 23 20 70 75 74 73 20 73 74 64  r ""..# puts std
6eb0: 65 72 72 20 73 74 61 72 74 3d 7c 24 73 74 61 72  err start=|$star
6ec0: 74 7c 0a 09 23 20 70 75 74 73 20 73 74 64 65 72  t|..# puts stder
6ed0: 72 20 65 6e 64 3d 7c 24 65 6e 64 7c 0a 09 23 20  r end=|$end|..# 
6ee0: 70 75 74 73 20 73 74 64 65 72 72 20 6d 6f 64 3d  puts stderr mod=
6ef0: 7c 24 6d 6f 64 7c 0a 09 23 20 70 75 74 73 20 73  |$mod|..# puts s
6f00: 74 64 65 72 72 20 6e 65 77 5f 73 74 61 72 74 3d  tderr new_start=
6f10: 7c 24 6e 65 77 5f 73 74 61 72 74 7c 0a 09 23 20  |$new_start|..# 
6f20: 70 75 74 73 20 73 74 64 65 72 72 20 6e 65 77 5f  puts stderr new_
6f30: 65 6e 64 3d 7c 24 6e 65 77 5f 65 6e 64 7c 0a 09  end=|$new_end|..
6f40: 23 20 70 75 74 73 20 73 74 64 65 72 72 20 6e 65  # puts stderr ne
6f50: 77 5f 6c 69 6e 65 3d 7c 24 6e 65 77 5f 6c 69 6e  w_line=|$new_lin
6f60: 65 7c 0a 09 23 20 70 75 74 73 20 73 74 64 65 72  e|..# puts stder
6f70: 72 20 22 22 0a 09 73 65 74 20 72 65 73 20 5b 53  r ""..set res [S
6f80: 63 72 69 70 74 43 6f 6d 70 6c 65 74 65 72 20 24  criptCompleter $
6f90: 6d 6f 64 31 20 24 6e 65 77 5f 73 74 61 72 74 20  mod1 $new_start 
6fa0: 24 6e 65 77 5f 65 6e 64 20 24 6e 65 77 5f 6c 69  $new_end $new_li
6fb0: 6e 65 5d 0a 09 23 20 70 75 74 73 20 73 74 64 65  ne]..# puts stde
6fc0: 72 72 20 5c 6e 5c 24 7b 70 72 65 7d 5c 24 7b 72  rr \n\${pre}\${r
6fd0: 65 73 7d 3d 7c 24 7b 70 72 65 7d 24 7b 72 65 73  es}=|${pre}${res
6fe0: 7d 7c 0a 09 69 66 20 7b 5b 73 74 72 69 6e 67 20  }|..if {[string 
6ff0: 6c 65 6e 67 74 68 20 5b 4c 69 6e 64 65 78 20 24  length [Lindex $
7000: 7b 72 65 73 7d 20 30 5d 5d 7d 20 7b 0a 09 09 72  {res} 0]]} {...r
7010: 65 74 75 72 6e 20 24 7b 70 72 65 7d 24 7b 72 65  eturn ${pre}${re
7020: 73 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 72  s}..} else {...r
7030: 65 74 75 72 6e 20 24 7b 72 65 73 7d 0a 09 7d 0a  eturn ${res}..}.
7040: 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
7050: 6f 63 20 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e  oc BraceOrComman
7060: 64 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  d {text start en
7070: 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
7080: 7b 0a 09 69 66 20 7b 21 5b 73 74 72 69 6e 67 20  {..if {![string 
7090: 6c 65 6e 67 74 68 20 5b 4c 69 6e 64 65 78 20 24  length [Lindex $
70a0: 6c 69 6e 65 20 24 70 6f 73 5d 5d 7d 20 7b 0a 09  line $pos]]} {..
70b0: 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5c 7b  .return [list \{
70c0: 20 7b 7d 5d 3b 20 23 20 5c 7d 0a 09 7d 20 65 6c   {}]; # \}..} el
70d0: 73 65 20 7b 0a 09 09 73 65 74 20 6e 65 77 5f 6c  se {...set new_l
70e0: 69 6e 65 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  ine [string trim
70f0: 20 5b 49 6e 63 6f 6d 70 6c 65 74 65 4c 69 73 74   [IncompleteList
7100: 52 65 6d 61 69 6e 64 65 72 20 24 6c 69 6e 65 5d  Remainder $line]
7110: 5d 0a 09 09 69 66 20 7b 21 5b 72 65 67 65 78 70  ]...if {![regexp
7120: 20 7b 5e 28 5b 5c 7b 5c 22 5d 29 28 2e 2a 29 24   {^([\{\"])(.*)$
7130: 7d 20 24 6e 65 77 5f 6c 69 6e 65 20 61 6c 6c 20  } $new_line all 
7140: 70 72 65 20 6e 65 77 5f 6c 69 6e 65 5d 7d 20 7b  pre new_line]} {
7150: 0a 09 09 09 73 65 74 20 70 72 65 20 22 22 0a 09  ....set pre ""..
7160: 09 7d 0a 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .}...return [Com
7170: 70 6c 65 74 65 43 6f 6e 74 72 6f 6c 53 74 61 74  pleteControlStat
7180: 65 6d 65 6e 74 20 24 74 65 78 74 20 5c 0a 09 09  ement $text \...
7190: 24 73 74 61 72 74 20 24 65 6e 64 20 24 6c 69 6e  $start $end $lin
71a0: 65 20 24 70 6f 73 20 24 6d 6f 64 20 24 70 72 65  e $pos $mod $pre
71b0: 20 24 6e 65 77 5f 6c 69 6e 65 5d 0a 09 7d 0a 7d   $new_line]..}.}
71c0: 0a 0a 70 72 6f 63 20 46 75 6c 6c 51 75 61 6c 69  ..proc FullQuali
71d0: 66 69 65 64 4d 61 74 63 68 65 73 20 7b 71 75 61  fiedMatches {qua
71e0: 6c 69 66 69 65 72 20 6d 61 74 63 68 6c 69 73 74  lifier matchlist
71f0: 7d 20 7b 0a 09 73 65 74 20 6e 65 77 20 22 22 0a  } {..set new "".
7200: 09 69 66 20 7b 22 22 20 21 3d 20 24 71 75 61 6c  .if {"" != $qual
7210: 69 66 69 65 72 20 26 26 20 21 5b 72 65 67 65 78  ifier && ![regex
7220: 70 20 3a 3a 24 20 24 71 75 61 6c 69 66 69 65 72  p ::$ $qualifier
7230: 5d 7d 20 7b 0a 09 09 61 70 70 65 6e 64 20 71 75  ]} {...append qu
7240: 61 6c 69 66 69 65 72 20 3a 3a 0a 09 7d 0a 09 66  alifier ::..}..f
7250: 6f 72 65 61 63 68 20 65 6e 74 72 79 20 24 7b 6d  oreach entry ${m
7260: 61 74 63 68 6c 69 73 74 7d 20 7b 0a 09 09 73 65  atchlist} {...se
7270: 74 20 66 75 6c 6c 20 24 7b 71 75 61 6c 69 66 69  t full ${qualifi
7280: 65 72 7d 24 7b 65 6e 74 72 79 7d 0a 09 09 69 66  er}${entry}...if
7290: 20 7b 22 22 20 21 3d 20 5b 6e 61 6d 65 73 70 61   {"" != [namespa
72a0: 63 65 20 77 68 69 63 68 20 24 7b 66 75 6c 6c 7d  ce which ${full}
72b0: 5d 7d 20 7b 0a 09 09 09 6c 61 70 70 65 6e 64 20  ]} {....lappend 
72c0: 6e 65 77 20 24 7b 66 75 6c 6c 7d 0a 09 09 7d 0a  new ${full}...}.
72d0: 09 7d 0a 09 72 65 74 75 72 6e 20 24 7b 6e 65 77  .}..return ${new
72e0: 7d 0a 7d 0a 0a 70 72 6f 63 20 50 72 6f 63 73 4f  }.}..proc ProcsO
72f0: 6e 6c 79 43 6f 6d 70 6c 65 74 69 6f 6e 20 7b 63  nlyCompletion {c
7300: 6d 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 43  md} {..return [C
7310: 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e  ommandCompletion
7320: 20 24 7b 63 6d 64 7d 20 70 72 6f 63 73 5d 0a 7d   ${cmd} procs].}
7330: 0a 0a 70 72 6f 63 20 43 6f 6d 6d 61 6e 64 73 4f  ..proc CommandsO
7340: 6e 6c 79 43 6f 6d 70 6c 65 74 69 6f 6e 20 7b 63  nlyCompletion {c
7350: 6d 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 43  md} {..return [C
7360: 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e  ommandCompletion
7370: 20 24 7b 63 6d 64 7d 20 63 6f 6d 6d 61 6e 64 73   ${cmd} commands
7380: 5d 0a 7d 0a 0a 70 72 6f 63 20 43 6f 6d 6d 61 6e  ].}..proc Comman
7390: 64 43 6f 6d 70 6c 65 74 69 6f 6e 20 7b 63 6d 64  dCompletion {cmd
73a0: 20 7b 61 63 74 69 6f 6e 20 62 6f 74 68 7d 20 7b   {action both} {
73b0: 73 70 63 20 3a 3a 7d 7d 20 7b 0a 09 23 20 67 65  spc ::}} {..# ge
73c0: 74 20 74 68 65 20 6c 65 61 64 69 6e 67 20 63 6f  t the leading co
73d0: 6c 6f 6e 73 20 69 6e 20 60 63 6d 64 27 2e 0a 09  lons in `cmd'...
73e0: 72 65 67 65 78 70 20 7b 5e 3a 2a 7d 20 24 7b 63  regexp {^:*} ${c
73f0: 6d 64 7d 20 70 72 65 0a 09 72 65 74 75 72 6e 20  md} pre..return 
7400: 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69  [CommandCompleti
7410: 6f 6e 57 69 74 68 50 72 65 20 24 63 6d 64 20 24  onWithPre $cmd $
7420: 61 63 74 69 6f 6e 20 24 73 70 63 20 24 70 72 65  action $spc $pre
7430: 5d 0a 7d 0a 0a 70 72 6f 63 20 43 6f 6d 6d 61 6e  ].}..proc Comman
7440: 64 43 6f 6d 70 6c 65 74 69 6f 6e 57 69 74 68 50  dCompletionWithP
7450: 72 65 20 7b 63 6d 64 20 61 63 74 69 6f 6e 20 73  re {cmd action s
7460: 70 63 20 70 72 65 7d 20 7b 0a 09 23 20 70 75 74  pc pre} {..# put
7470: 73 20 73 74 64 65 72 72 20 22 28 43 6f 6d 6d 61  s stderr "(Comma
7480: 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 29 20 63 6d  ndCompletion) cm
7490: 64 3d 7c 24 63 6d 64 7c 22 0a 09 23 20 70 75 74  d=|$cmd|"..# put
74a0: 73 20 73 74 64 65 72 72 20 22 28 43 6f 6d 6d 61  s stderr "(Comma
74b0: 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 29 20 61 63  ndCompletion) ac
74c0: 74 69 6f 6e 3d 7c 24 61 63 74 69 6f 6e 7c 22 0a  tion=|$action|".
74d0: 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20 22  .# puts stderr "
74e0: 28 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69  (CommandCompleti
74f0: 6f 6e 29 20 73 70 63 3d 7c 24 73 70 63 7c 22 0a  on) spc=|$spc|".
7500: 0a 09 73 65 74 20 63 6d 64 20 5b 53 74 72 69 70  ..set cmd [Strip
7510: 50 72 65 66 69 78 20 24 7b 63 6d 64 7d 5d 0a 09  Prefix ${cmd}]..
7520: 73 65 74 20 71 75 61 6c 69 20 5b 6e 61 6d 65 73  set quali [names
7530: 70 61 63 65 20 71 75 61 6c 69 66 69 65 72 73 20  pace qualifiers 
7540: 24 7b 63 6d 64 7d 5d 0a 09 69 66 20 7b 5b 73 74  ${cmd}]..if {[st
7550: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b 71 75  ring length ${qu
7560: 61 6c 69 7d 5d 7d 20 7b 0a 09 09 23 20 70 75 74  ali}]} {...# put
7570: 73 20 73 74 64 65 72 72 20 5c 6e 71 75 61 6c 69  s stderr \nquali
7580: 3d 7c 24 71 75 61 6c 69 7c 0a 09 09 73 65 74 20  =|$quali|...set 
7590: 6d 61 74 63 68 65 73 20 5b 43 6f 6d 6d 61 6e 64  matches [Command
75a0: 43 6f 6d 70 6c 65 74 69 6f 6e 57 69 74 68 50 72  CompletionWithPr
75b0: 65 20 5c 0a 09 09 5b 6e 61 6d 65 73 70 61 63 65  e \...[namespace
75c0: 20 74 61 69 6c 20 24 7b 63 6d 64 7d 5d 20 24 7b   tail ${cmd}] ${
75d0: 61 63 74 69 6f 6e 7d 20 24 7b 73 70 63 7d 24 7b  action} ${spc}${
75e0: 71 75 61 6c 69 7d 20 24 7b 70 72 65 7d 5d 0a 09  quali} ${pre}]..
75f0: 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20 5c  .# puts stderr \
7600: 6e 6d 61 74 63 68 65 73 31 3d 7c 24 6d 61 74 63  nmatches1=|$matc
7610: 68 65 73 7c 0a 09 09 72 65 74 75 72 6e 20 24 6d  hes|...return $m
7620: 61 74 63 68 65 73 0a 09 7d 0a 09 73 65 74 20 63  atches..}..set c
7630: 6d 64 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20  md [string trim 
7640: 24 7b 63 6d 64 7d 5d 2a 0a 09 23 20 70 75 74 73  ${cmd}]*..# puts
7650: 20 73 74 64 65 72 72 20 5c 6e 63 6d 64 3d 7c 24   stderr \ncmd=|$
7660: 63 6d 64 7c 5c 6e 0a 09 69 66 20 7b 22 70 72 6f  cmd|\n..if {"pro
7670: 63 73 22 20 21 3d 20 24 7b 61 63 74 69 6f 6e 7d  cs" != ${action}
7680: 7d 20 7b 0a 09 09 73 65 74 20 61 6c 6c 5f 63 6f  } {...set all_co
7690: 6d 6d 61 6e 64 73 20 5b 6e 61 6d 65 73 70 61 63  mmands [namespac
76a0: 65 20 65 76 61 6c 20 24 73 70 63 20 5b 6c 69 73  e eval $spc [lis
76b0: 74 20 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20  t info commands 
76c0: 24 7b 63 6d 64 7d 5d 5d 0a 09 09 23 20 70 75 74  ${cmd}]]...# put
76d0: 73 20 73 74 64 65 72 72 20 61 6c 6c 5f 63 6f 6d  s stderr all_com
76e0: 6d 61 6e 64 73 3d 7c 24 61 6c 6c 5f 63 6f 6d 6d  mands=|$all_comm
76f0: 61 6e 64 73 7c 0a 09 09 73 65 74 20 63 6f 6d 6d  ands|...set comm
7700: 61 6e 64 73 20 22 22 0a 09 09 66 6f 72 65 61 63  ands ""...foreac
7710: 68 20 63 6f 6d 6d 61 6e 64 20 24 61 6c 6c 5f 63  h command $all_c
7720: 6f 6d 6d 61 6e 64 73 20 7b 0a 09 09 09 69 66 20  ommands {....if 
7730: 7b 5b 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c  {[namespace eval
7740: 20 24 73 70 63 20 5b 6c 69 73 74 20 6e 61 6d 65   $spc [list name
7750: 73 70 61 63 65 20 6f 72 69 67 69 6e 20 24 63 6f  space origin $co
7760: 6d 6d 61 6e 64 5d 5d 20 3d 3d 20 5c 0a 09 09 09  mmand]] == \....
7770: 09 5b 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c  .[namespace eval
7780: 20 24 73 70 63 20 5b 6c 69 73 74 20 6e 61 6d 65   $spc [list name
7790: 73 70 61 63 65 20 77 68 69 63 68 20 24 63 6f 6d  space which $com
77a0: 6d 61 6e 64 5d 5d 7d 20 7b 0a 09 09 09 09 6c 61  mand]]} {.....la
77b0: 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 73 20 24  ppend commands $
77c0: 63 6f 6d 6d 61 6e 64 0a 09 09 09 7d 0a 09 09 7d  command....}...}
77d0: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 73 65 74  ..} else {...set
77e0: 20 63 6f 6d 6d 61 6e 64 73 20 22 22 0a 09 7d 0a   commands ""..}.
77f0: 09 69 66 20 7b 22 63 6f 6d 6d 61 6e 64 73 22 20  .if {"commands" 
7800: 21 3d 20 24 7b 61 63 74 69 6f 6e 7d 7d 20 7b 0a  != ${action}} {.
7810: 09 09 73 65 74 20 61 6c 6c 5f 70 72 6f 63 73 20  ..set all_procs 
7820: 5b 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  [namespace eval 
7830: 24 73 70 63 20 5b 6c 69 73 74 20 69 6e 66 6f 20  $spc [list info 
7840: 70 72 6f 63 73 20 24 7b 63 6d 64 7d 5d 5d 0a 09  procs ${cmd}]]..
7850: 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20 70  .# puts stderr p
7860: 72 6f 63 73 3d 7c 24 70 72 6f 63 73 7c 0a 09 09  rocs=|$procs|...
7870: 73 65 74 20 70 72 6f 63 73 20 22 22 0a 09 09 66  set procs ""...f
7880: 6f 72 65 61 63 68 20 70 72 6f 63 20 24 61 6c 6c  oreach proc $all
7890: 5f 70 72 6f 63 73 20 7b 0a 09 09 09 69 66 20 7b  _procs {....if {
78a0: 5b 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  [namespace eval 
78b0: 24 73 70 63 20 5b 6c 69 73 74 20 6e 61 6d 65 73  $spc [list names
78c0: 70 61 63 65 20 6f 72 69 67 69 6e 20 24 70 72 6f  pace origin $pro
78d0: 63 5d 5d 20 3d 3d 20 5c 0a 09 09 09 09 5b 6e 61  c]] == \.....[na
78e0: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 24 73 70  mespace eval $sp
78f0: 63 20 5b 6c 69 73 74 20 6e 61 6d 65 73 70 61 63  c [list namespac
7900: 65 20 77 68 69 63 68 20 24 70 72 6f 63 5d 5d 7d  e which $proc]]}
7910: 20 7b 0a 09 09 09 09 6c 61 70 70 65 6e 64 20 70   {.....lappend p
7920: 72 6f 63 73 20 24 70 72 6f 63 0a 09 09 09 7d 0a  rocs $proc....}.
7930: 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09  ..}..} else {...
7940: 73 65 74 20 70 72 6f 63 73 20 22 22 0a 09 7d 0a  set procs ""..}.
7950: 09 73 65 74 20 6d 61 74 63 68 65 73 20 5b 6e 61  .set matches [na
7960: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 24 73 70  mespace eval $sp
7970: 63 20 63 6f 6e 63 61 74 20 24 7b 63 6f 6d 6d 61  c concat ${comma
7980: 6e 64 73 7d 20 24 7b 70 72 6f 63 73 7d 5d 0a 09  nds} ${procs}]..
7990: 73 65 74 20 6e 61 6d 65 73 70 61 63 65 73 20 5b  set namespaces [
79a0: 6e 61 6d 65 73 70 61 63 65 20 63 68 69 6c 64 72  namespace childr
79b0: 65 6e 20 24 73 70 63 20 24 7b 63 6d 64 7d 5d 0a  en $spc ${cmd}].
79c0: 0a 09 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20  ..if {![llength 
79d0: 24 7b 6d 61 74 63 68 65 73 7d 5d 20 26 26 20 31  ${matches}] && 1
79e0: 20 3d 3d 20 5b 6c 6c 65 6e 67 74 68 20 24 7b 6e   == [llength ${n
79f0: 61 6d 65 73 70 61 63 65 73 7d 5d 7d 20 7b 0a 09  amespaces}]} {..
7a00: 09 73 65 74 20 6d 61 74 63 68 65 73 20 5b 43 6f  .set matches [Co
7a10: 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 57  mmandCompletionW
7a20: 69 74 68 50 72 65 20 7b 7d 20 24 7b 61 63 74 69  ithPre {} ${acti
7a30: 6f 6e 7d 20 24 7b 6e 61 6d 65 73 70 61 63 65 73  on} ${namespaces
7a40: 7d 20 24 7b 70 72 65 7d 5d 0a 09 09 23 20 70 75  } ${pre}]...# pu
7a50: 74 73 20 73 74 64 65 72 72 20 5c 6e 6d 61 74 63  ts stderr \nmatc
7a60: 68 65 73 3d 7c 24 6d 61 74 63 68 65 73 7c 0a 09  hes=|$matches|..
7a70: 09 72 65 74 75 72 6e 20 24 6d 61 74 63 68 65 73  .return $matches
7a80: 0a 09 7d 0a 0a 09 23 20 6d 61 6b 65 20 60 6e 61  ..}...# make `na
7a90: 6d 65 73 70 61 63 65 73 27 20 68 61 76 69 6e 67  mespaces' having
7aa0: 20 65 78 61 63 74 6c 79 0a 09 23 20 74 68 65 20   exactly..# the 
7ab0: 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  same number of c
7ac0: 6f 6c 6f 6e 73 20 61 73 20 60 63 6d 64 27 2e 0a  olons as `cmd'..
7ad0: 09 23 0a 09 72 65 67 73 75 62 20 2d 61 6c 6c 20  .#..regsub -all 
7ae0: 7b 5e 3a 2a 7d 20 24 73 70 63 20 24 70 72 65 20  {^:*} $spc $pre 
7af0: 73 70 63 0a 0a 09 73 65 74 20 6d 61 74 63 68 65  spc...set matche
7b00: 73 20 5b 46 75 6c 6c 51 75 61 6c 69 66 69 65 64  s [FullQualified
7b10: 4d 61 74 63 68 65 73 20 24 7b 73 70 63 7d 20 24  Matches ${spc} $
7b20: 7b 6d 61 74 63 68 65 73 7d 5d 0a 09 23 20 70 75  {matches}]..# pu
7b30: 74 73 20 73 74 64 65 72 72 20 5c 6e 6d 61 74 63  ts stderr \nmatc
7b40: 68 65 73 33 3d 7c 24 6d 61 74 63 68 65 73 7c 0a  hes3=|$matches|.
7b50: 09 72 65 74 75 72 6e 20 5b 73 74 72 69 6e 67 20  .return [string 
7b60: 74 72 69 6d 20 22 24 7b 6d 61 74 63 68 65 73 7d  trim "${matches}
7b70: 20 24 7b 6e 61 6d 65 73 70 61 63 65 73 7d 22 5d   ${namespaces}"]
7b80: 0a 7d 0a 0a 23 2a 2a 0a 23 20 63 68 65 63 6b 2c  .}..#**.# check,
7b90: 20 69 66 20 74 68 65 20 66 69 72 73 74 20 61 72   if the first ar
7ba0: 67 75 6d 65 6e 74 20 73 74 61 72 74 73 20 77 69  gument starts wi
7bb0: 74 68 20 61 20 27 5b 27 0a 23 20 61 6e 64 20 6d  th a '['.# and m
7bc0: 75 73 74 20 62 65 20 65 76 61 6c 75 61 74 65 64  ust be evaluated
7bd0: 20 62 65 66 6f 72 65 20 63 6f 6e 74 69 6e 75 69   before continui
7be0: 6e 67 2e 0a 23 20 4e 4f 54 45 3a 20 74 72 69 6d  ng..# NOTE: trim
7bf0: 73 20 74 68 65 20 60 6c 69 6e 65 27 2e 0a 23 20  s the `line'..# 
7c00: 20 20 20 20 20 20 65 76 65 6e 74 75 61 6c 6c 79        eventually
7c10: 20 6d 6f 64 69 66 69 65 73 20 61 6c 6c 20 61 72   modifies all ar
7c20: 67 75 6d 65 6e 74 73 2e 0a 23 20 44 41 54 45 3a  guments..# DATE:
7c30: 20 53 65 70 2d 30 36 2d 31 39 39 39 0a 23 0a 70   Sep-06-1999.#.p
7c40: 72 6f 63 20 45 76 65 6e 74 75 61 6c 6c 79 45 76  roc EventuallyEv
7c50: 61 6c 75 61 74 65 46 69 72 73 74 20 7b 70 61 72  aluateFirst {par
7c60: 74 54 20 73 74 61 72 74 54 20 65 6e 64 54 20 6c  tT startT endT l
7c70: 69 6e 65 54 7d 20 7b 0a 09 23 20 72 65 74 75 72  ineT} {..# retur
7c80: 6e 3b 20 23 20 64 69 73 61 62 6c 65 64 0a 09 75  n; # disabled..u
7c90: 70 76 61 72 20 24 70 61 72 74 54 20 70 61 72 74  pvar $partT part
7ca0: 20 24 73 74 61 72 74 54 20 73 74 61 72 74 20 24   $startT start $
7cb0: 65 6e 64 54 20 65 6e 64 20 24 6c 69 6e 65 54 20  endT end $lineT 
7cc0: 6c 69 6e 65 0a 0a 09 73 65 74 20 6f 6c 64 6c 65  line...set oldle
7cd0: 6e 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  n [string length
7ce0: 20 24 7b 6c 69 6e 65 7d 5d 0a 09 23 20 73 65 74   ${line}]..# set
7cf0: 20 6c 69 6e 65 20 5b 73 74 72 69 6e 67 20 74 72   line [string tr
7d00: 69 6d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 73 65 74  im ${line}]..set
7d10: 20 6c 69 6e 65 20 5b 73 74 72 69 6e 67 20 74 72   line [string tr
7d20: 69 6d 6c 65 66 74 20 24 7b 6c 69 6e 65 7d 5d 0a  imleft ${line}].
7d30: 09 73 65 74 20 64 69 66 66 20 5b 65 78 70 72 20  .set diff [expr 
7d40: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $
7d50: 6c 69 6e 65 5d 20 2d 20 24 6f 6c 64 6c 65 6e 5d  line] - $oldlen]
7d60: 0a 09 69 6e 63 72 20 73 74 61 72 74 20 24 64 69  ..incr start $di
7d70: 66 66 0a 09 69 6e 63 72 20 65 6e 64 20 24 64 69  ff..incr end $di
7d80: 66 66 0a 0a 09 73 65 74 20 63 68 61 72 20 5b 73  ff...set char [s
7d90: 74 72 69 6e 67 20 69 6e 64 65 78 20 24 7b 6c 69  tring index ${li
7da0: 6e 65 7d 20 30 5d 0a 09 69 66 20 7b 7b 5b 7d 20  ne} 0]..if {{[} 
7db0: 21 3d 20 24 7b 63 68 61 72 7d 20 26 26 20 7b 24  != ${char} && {$
7dc0: 7d 20 21 3d 20 24 7b 63 68 61 72 7d 7d 20 7b 72  } != ${char}} {r
7dd0: 65 74 75 72 6e 7d 0a 0a 09 73 65 74 20 70 6f 73  eturn}...set pos
7de0: 20 30 0a 09 77 68 69 6c 65 20 7b 2d 31 20 21 3d   0..while {-1 !=
7df0: 20 5b 73 65 74 20 69 64 78 20 5b 73 74 72 69 6e   [set idx [strin
7e00: 67 20 66 69 72 73 74 20 7b 5d 7d 20 24 7b 6c 69  g first {]} ${li
7e10: 6e 65 7d 20 24 7b 70 6f 73 7d 5d 5d 7d 20 7b 0a  ne} ${pos}]]} {.
7e20: 09 09 73 65 74 20 63 6d 64 20 5b 73 74 72 69 6e  ..set cmd [strin
7e30: 67 20 72 61 6e 67 65 20 24 7b 6c 69 6e 65 7d 20  g range ${line} 
7e40: 30 20 24 7b 69 64 78 7d 5d 0a 09 09 69 66 20 7b  0 ${idx}]...if {
7e50: 5b 69 6e 66 6f 20 63 6f 6d 70 6c 65 74 65 20 24  [info complete $
7e60: 7b 63 6d 64 7d 5d 7d 20 7b 0a 09 09 09 62 72 65  {cmd}]} {....bre
7e70: 61 6b 3b 0a 09 09 7d 0a 09 09 73 65 74 20 70 6f  ak;...}...set po
7e80: 73 20 5b 65 78 70 72 20 24 7b 69 64 78 7d 20 2b  s [expr ${idx} +
7e90: 20 31 5d 0a 09 7d 0a 0a 09 69 66 20 7b 21 5b 69   1]..}...if {![i
7ea0: 6e 66 6f 20 65 78 69 73 74 73 20 63 6d 64 5d 7d  nfo exists cmd]}
7eb0: 20 7b 72 65 74 75 72 6e 7d 0a 09 69 66 20 7b 21   {return}..if {!
7ec0: 5b 69 6e 66 6f 20 63 6f 6d 70 6c 65 74 65 20 24  [info complete $
7ed0: 7b 63 6d 64 7d 5d 7d 20 7b 72 65 74 75 72 6e 7d  {cmd}]} {return}
7ee0: 0a 09 73 65 74 20 63 6d 64 20 5b 73 74 72 69 6e  ..set cmd [strin
7ef0: 67 20 72 61 6e 67 65 20 24 7b 63 6d 64 7d 20 31  g range ${cmd} 1
7f00: 20 5b 65 78 70 72 20 5b 73 74 72 69 6e 67 20 6c   [expr [string l
7f10: 65 6e 67 74 68 20 24 7b 63 6d 64 7d 5d 20 2d 20  ength ${cmd}] - 
7f20: 32 5d 5d 0a 09 73 65 74 20 72 65 73 74 20 5b 53  2]]..set rest [S
7f30: 74 72 69 6e 67 20 72 61 6e 67 65 20 24 7b 6c 69  tring range ${li
7f40: 6e 65 7d 20 5b 65 78 70 72 20 24 7b 69 64 78 7d  ne} [expr ${idx}
7f50: 20 2b 20 31 5d 20 65 6e 64 5d 0a 0a 09 69 66 20   + 1] end]...if 
7f60: 7b 5b 63 61 74 63 68 20 5b 6c 69 73 74 20 73 65  {[catch [list se
7f70: 74 20 72 65 73 75 6c 74 20 5b 73 74 72 69 6e 67  t result [string
7f80: 20 74 72 69 6d 20 5b 65 76 61 6c 20 24 7b 63 6d   trim [eval ${cm
7f90: 64 7d 5d 5d 5d 5d 7d 20 7b 72 65 74 75 72 6e 7d  d}]]]]} {return}
7fa0: 0a 0a 09 73 65 74 20 6c 69 6e 65 20 24 7b 72 65  ...set line ${re
7fb0: 73 75 6c 74 7d 24 7b 72 65 73 74 7d 0a 09 73 65  sult}${rest}..se
7fc0: 74 20 64 69 66 66 20 5b 65 78 70 72 20 5b 73 74  t diff [expr [st
7fd0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b 72 65  ring length ${re
7fe0: 73 75 6c 74 7d 5d 20 2d 20 28 5b 73 74 72 69 6e  sult}] - ([strin
7ff0: 67 20 6c 65 6e 67 74 68 20 24 7b 63 6d 64 7d 5d  g length ${cmd}]
8000: 20 2b 20 32 29 5d 0a 09 69 6e 63 72 20 73 74 61   + 2)]..incr sta
8010: 72 74 20 24 7b 64 69 66 66 7d 0a 09 69 6e 63 72  rt ${diff}..incr
8020: 20 65 6e 64 20 24 7b 64 69 66 66 7d 0a 7d 0a 0a   end ${diff}.}..
8030: 23 20 69 66 20 74 68 65 20 6c 69 6e 65 20 65 6e  # if the line en
8040: 74 65 72 65 64 20 73 6f 20 66 61 72 20 69 73 0a  tered so far is.
8050: 23 20 25 20 70 75 74 73 20 24 62 3c 54 41 42 3e  # % puts $b<TAB>
8060: 0a 23 20 70 61 72 74 20 20 3d 3d 20 24 62 0a 23  .# part  == $b.#
8070: 20 73 74 61 72 74 20 3d 3d 20 35 0a 23 20 65 6e   start == 5.# en
8080: 64 20 20 20 3d 3d 20 37 0a 23 20 6c 69 6e 65 20  d   == 7.# line 
8090: 20 3d 3d 20 22 24 70 75 74 73 20 24 62 22 0a 23   == "$puts $b".#
80a0: 0a 70 72 6f 63 20 53 63 72 69 70 74 43 6f 6d 70  .proc ScriptComp
80b0: 6c 65 74 65 72 20 7b 70 61 72 74 20 73 74 61 72  leter {part star
80c0: 74 20 65 6e 64 20 6c 69 6e 65 7d 20 7b 0a 0a 09  t end line} {...
80d0: 23 20 70 75 74 73 20 73 74 64 65 72 72 20 22 28  # puts stderr "(
80e0: 53 63 72 69 70 74 43 6f 6d 70 6c 65 74 65 72 29  ScriptCompleter)
80f0: 20 7c 24 70 61 72 74 7c 20 24 73 74 61 72 74 20   |$part| $start 
8100: 24 65 6e 64 20 7c 24 6c 69 6e 65 7c 22 0a 0a 09  $end |$line|"...
8110: 23 20 69 66 20 74 68 65 20 63 68 61 72 61 63 74  # if the charact
8120: 65 72 20 62 65 66 6f 72 65 20 74 68 65 20 63 75  er before the cu
8130: 72 73 6f 72 20 69 73 20 61 20 74 65 72 6d 69 6e  rsor is a termin
8140: 61 74 69 6e 67 0a 09 23 20 71 75 6f 74 65 20 61  ating..# quote a
8150: 6e 64 20 74 68 65 20 75 73 65 72 20 77 61 6e 74  nd the user want
8160: 73 20 63 6f 6d 70 6c 65 74 69 6f 6e 2c 20 77 65  s completion, we
8170: 20 69 6e 73 65 72 74 20 61 20 77 68 69 74 65 0a   insert a white.
8180: 09 23 20 73 70 61 63 65 20 68 65 72 65 2e 0a 09  .# space here...
8190: 23 0a 09 73 65 74 20 63 68 61 72 20 5b 73 74 72  #..set char [str
81a0: 69 6e 67 20 69 6e 64 65 78 20 24 6c 69 6e 65 20  ing index $line 
81b0: 5b 65 78 70 72 20 24 65 6e 64 20 2d 20 31 5d 5d  [expr $end - 1]]
81c0: 0a 09 69 66 20 7b 22 5c 7d 22 20 3d 3d 20 24 63  ..if {"\}" == $c
81d0: 68 61 72 7d 20 7b 0a 09 09 61 70 70 65 6e 64 20  har} {...append 
81e0: 24 70 61 72 74 20 22 20 22 0a 09 09 72 65 74 75  $part " "...retu
81f0: 72 6e 20 5b 6c 69 73 74 20 24 70 61 72 74 5d 0a  rn [list $part].
8200: 09 7d 0a 0a 09 69 66 20 7b 7b 24 7d 20 3d 3d 20  .}...if {{$} == 
8210: 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 70  [string index $p
8220: 61 72 74 20 30 5d 7d 20 7b 0a 0a 09 09 23 20 63  art 0]} {....# c
8230: 68 65 63 6b 20 66 6f 72 20 61 20 21 24 20 68 69  heck for a !$ hi
8240: 73 74 6f 72 79 20 65 76 65 6e 74 0a 09 09 23 0a  story event...#.
8250: 09 09 69 66 20 7b 24 73 74 61 72 74 20 3e 20 30  ..if {$start > 0
8260: 7d 20 7b 0a 09 09 09 69 66 20 7b 7b 21 7d 20 3d  } {....if {{!} =
8270: 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20  = [string index 
8280: 24 6c 69 6e 65 20 5b 65 78 70 72 20 24 73 74 61  $line [expr $sta
8290: 72 74 20 2d 20 31 5d 5d 7d 20 7b 0a 09 09 09 09  rt - 1]]} {.....
82a0: 72 65 74 75 72 6e 20 22 22 0a 09 09 09 7d 0a 09  return ""....}..
82b0: 09 7d 0a 09 09 23 20 76 61 72 69 61 62 6c 65 20  .}...# variable 
82c0: 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 43 68 65 63  completion. Chec
82d0: 6b 20 66 69 72 73 74 2c 20 69 66 20 74 68 65 0a  k first, if the.
82e0: 09 09 23 20 76 61 72 69 61 62 6c 65 20 73 74 61  ..# variable sta
82f0: 72 74 73 20 77 69 74 68 20 61 20 70 6c 61 69 6e  rts with a plain
8300: 20 60 24 27 20 6f 72 20 73 68 6f 75 6c 64 0a 09   `$' or should..
8310: 09 23 20 62 65 20 65 6e 63 6c 6f 73 65 64 20 69  .# be enclosed i
8320: 6e 20 62 72 61 63 65 73 2e 0a 09 09 23 0a 09 09  n braces....#...
8330: 73 65 74 20 76 61 72 20 5b 53 74 72 69 6e 67 20  set var [String 
8340: 72 61 6e 67 65 20 24 70 61 72 74 20 31 20 65 6e  range $part 1 en
8350: 64 5d 0a 0a 09 09 23 20 63 68 65 63 6b 20 69 66  d]....# check if
8360: 20 24 76 61 72 20 69 73 20 61 6e 20 61 72 72 61   $var is an arra
8370: 79 20 6e 61 6d 65 2c 20 77 68 69 63 68 0a 09 09  y name, which...
8380: 23 20 61 6c 72 65 61 64 79 20 68 61 73 20 61 6c  # already has al
8390: 72 65 61 64 79 20 61 20 22 28 22 20 73 6f 6d 65  ready a "(" some
83a0: 77 68 65 72 65 20 69 6e 73 69 64 65 2e 0a 09 09  where inside....
83b0: 23 0a 09 09 69 66 20 7b 22 22 20 21 3d 20 5b 73  #...if {"" != [s
83c0: 65 74 20 76 63 20 5b 56 61 72 43 6f 6d 70 6c 65  et vc [VarComple
83d0: 74 69 6f 6e 20 24 76 61 72 5d 5d 7d 20 7b 0a 09  tion $var]]} {..
83e0: 09 09 69 66 20 7b 22 22 20 3d 3d 20 5b 6c 69 6e  ..if {"" == [lin
83f0: 64 65 78 20 24 76 63 20 30 5d 7d 20 7b 0a 09 09  dex $vc 0]} {...
8400: 09 09 72 65 74 75 72 6e 20 22 5c 24 20 5b 6c 72  ..return "\$ [lr
8410: 61 6e 67 65 20 24 7b 76 63 7d 20 31 20 65 6e 64  ange ${vc} 1 end
8420: 5d 22 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09  ]"....} else {..
8430: 09 09 09 72 65 74 75 72 6e 20 5c 24 24 7b 76 63  ...return \$${vc
8440: 7d 0a 09 09 09 7d 0a 09 09 09 23 20 70 75 74 73  }....}....# puts
8450: 20 73 74 64 65 72 72 20 76 63 3d 7c 24 76 63 7c   stderr vc=|$vc|
8460: 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 72  ...} else {....r
8470: 65 74 75 72 6e 20 22 22 0a 09 09 7d 0a 0a 09 23  eturn ""...}...#
8480: 20 53 43 45 4e 41 52 49 4f 3a 0a 09 23 0a 09 23   SCENARIO:..#..#
8490: 20 25 20 70 75 74 73 20 62 6c 61 3b 20 70 75 74   % puts bla; put
84a0: 3c 54 41 42 3e 20 24 62 0a 09 23 20 70 61 72 74  <TAB> $b..# part
84b0: 20 20 3d 3d 20 70 75 74 0a 09 23 20 73 74 61 72    == put..# star
84c0: 74 20 3d 3d 20 31 30 0a 09 23 20 65 6e 64 20 20  t == 10..# end  
84d0: 20 3d 3d 20 31 33 0a 09 23 20 6c 69 6e 65 20 20   == 13..# line  
84e0: 3d 3d 20 22 70 75 74 73 20 62 6c 61 3b 20 70 75  == "puts bla; pu
84f0: 74 20 24 62 22 0a 09 23 20 5b 53 70 6c 69 74 4c  t $b"..# [SplitL
8500: 69 6e 65 5d 20 2d 2d 3e 20 7b 31 20 22 20 70 75  ine] --> {1 " pu
8510: 74 20 24 62 22 7d 20 3d 3d 20 73 75 62 0a 09 23  t $b"} == sub..#
8520: 20 6e 65 77 5f 73 74 61 72 74 20 3d 20 5b 6c 69   new_start = [li
8530: 6e 64 65 78 20 24 73 75 62 20 30 5d 20 3d 3d 20  ndex $sub 0] == 
8540: 31 0a 09 23 20 6e 65 77 5f 65 6e 64 20 20 20 3d  1..# new_end   =
8550: 20 5b 65 78 70 72 20 24 65 6e 64 20 2d 20 28 24   [expr $end - ($
8560: 73 74 61 72 74 20 2d 20 24 6e 65 77 5f 73 74 61  start - $new_sta
8570: 72 74 29 5d 20 3d 3d 20 34 0a 09 23 20 6e 65 77  rt)] == 4..# new
8580: 5f 70 61 72 74 20 20 3d 3d 20 24 70 61 72 74 20  _part  == $part 
8590: 3d 3d 20 70 75 74 0a 09 23 20 6e 65 77 5f 6c 69  == put..# new_li
85a0: 6e 65 20 20 3d 20 5b 6c 69 6e 64 65 78 20 24 73  ne  = [lindex $s
85b0: 75 62 20 31 5d 20 3d 3d 20 22 20 70 75 74 20 24  ub 1] == " put $
85c0: 62 22 0a 09 23 20 0a 09 7d 20 65 6c 73 65 69 66  b"..# ..} elseif
85d0: 20 7b 22 22 20 21 3d 20 5b 73 65 74 20 73 75 62   {"" != [set sub
85e0: 20 5b 53 70 6c 69 74 4c 69 6e 65 20 24 73 74 61   [SplitLine $sta
85f0: 72 74 20 24 6c 69 6e 65 5d 5d 7d 20 7b 0a 0a 09  rt $line]]} {...
8600: 09 73 65 74 20 6e 65 77 5f 73 74 61 72 74 20 5b  .set new_start [
8610: 6c 69 6e 64 65 78 20 24 73 75 62 20 30 5d 0a 09  lindex $sub 0]..
8620: 09 73 65 74 20 6e 65 77 5f 65 6e 64 20 5b 65 78  .set new_end [ex
8630: 70 72 20 24 65 6e 64 20 2d 20 28 24 73 74 61 72  pr $end - ($star
8640: 74 20 2d 20 24 6e 65 77 5f 73 74 61 72 74 29 5d  t - $new_start)]
8650: 0a 09 09 73 65 74 20 6e 65 77 5f 6c 69 6e 65 20  ...set new_line 
8660: 5b 6c 69 6e 64 65 78 20 24 73 75 62 20 31 5d 0a  [lindex $sub 1].
8670: 09 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20  ..# puts stderr 
8680: 22 28 53 70 6c 69 74 4c 69 6e 65 29 20 24 6e 65  "(SplitLine) $ne
8690: 77 5f 73 74 61 72 74 20 24 6e 65 77 5f 65 6e 64  w_start $new_end
86a0: 20 24 6e 65 77 5f 6c 69 6e 65 22 0a 09 09 72 65   $new_line"...re
86b0: 74 75 72 6e 20 5b 53 63 72 69 70 74 43 6f 6d 70  turn [ScriptComp
86c0: 6c 65 74 65 72 20 24 70 61 72 74 20 24 6e 65 77  leter $part $new
86d0: 5f 73 74 61 72 74 20 24 6e 65 77 5f 65 6e 64 20  _start $new_end 
86e0: 24 6e 65 77 5f 6c 69 6e 65 5d 0a 0a 09 7d 20 65  $new_line]...} e
86f0: 6c 73 65 69 66 20 7b 30 20 3d 3d 20 5b 73 65 74  lseif {0 == [set
8700: 20 70 6f 73 20 5b 50 61 72 74 50 6f 73 69 74 69   pos [PartPositi
8710: 6f 6e 20 70 61 72 74 20 73 74 61 72 74 20 65 6e  on part start en
8720: 64 20 6c 69 6e 65 5d 5d 7d 20 7b 0a 0a 09 09 23  d line]]} {....#
8730: 20 58 58 58 0a 09 09 23 20 20 20 20 20 6e 6f 74   XXX...#     not
8740: 65 20 74 68 61 74 20 6c 69 6e 65 20 77 69 6c 6c  e that line will
8750: 20 62 65 20 5b 73 74 72 69 6e 67 20 74 72 69 6d   be [string trim
8760: 6c 65 66 74 27 65 64 5d 0a 09 09 23 20 20 20 20  left'ed]...#    
8770: 20 61 66 74 65 72 20 50 61 72 74 50 6f 73 69 74   after PartPosit
8780: 69 6f 6e 2e 0a 09 09 23 20 58 58 58 0a 0a 09 09  ion....# XXX....
8790: 23 20 70 75 74 73 20 73 74 64 65 72 72 20 22 28  # puts stderr "(
87a0: 50 61 72 74 50 6f 73 69 74 69 6f 6e 29 20 24 70  PartPosition) $p
87b0: 61 72 74 20 24 73 74 61 72 74 20 24 65 6e 64 20  art $start $end 
87c0: 24 6c 69 6e 65 22 0a 09 09 73 65 74 20 61 6c 6c  $line"...set all
87d0: 20 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74   [CommandComplet
87e0: 69 6f 6e 20 24 7b 70 61 72 74 7d 5d 0a 09 09 23  ion ${part}]...#
87f0: 20 70 75 74 73 20 73 74 64 65 72 72 20 22 28 53   puts stderr "(S
8800: 63 72 69 70 74 43 6f 6d 70 6c 65 74 65 72 29 20  criptCompleter) 
8810: 61 6c 6c 3d 24 61 6c 6c 22 0a 09 09 23 70 75 74  all=$all"...#put
8820: 73 20 5c 6e 6d 61 74 63 68 65 73 3d 24 6d 61 74  s \nmatches=$mat
8830: 63 68 65 73 5c 6e 0a 09 09 23 20 72 65 74 75 72  ches\n...# retur
8840: 6e 20 5b 46 6f 72 6d 61 74 20 24 61 6c 6c 20 24  n [Format $all $
8850: 70 61 72 74 5d 0a 09 09 72 65 74 75 72 6e 20 5b  part]...return [
8860: 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 70 61 72  TryFromList $par
8870: 74 20 24 61 6c 6c 5d 0a 0a 09 7d 20 65 6c 73 65  t $all]...} else
8880: 20 7b 0a 0a 09 09 23 20 74 72 79 20 74 6f 20 75   {....# try to u
8890: 73 65 20 24 70 6f 73 20 66 75 72 74 68 65 72 20  se $pos further 
88a0: 2e 2e 2e 0a 09 09 23 20 70 75 74 73 20 73 74 64  ......# puts std
88b0: 65 72 72 20 7c 24 6c 69 6e 65 7c 0a 09 09 23 0a  err |$line|...#.
88c0: 09 09 23 20 69 66 20 7b 22 2e 22 20 3d 3d 20 5b  ..# if {"." == [
88d0: 73 74 72 69 6e 67 20 69 6e 64 65 78 20 5b 73 74  string index [st
88e0: 72 69 6e 67 20 74 72 69 6d 20 24 7b 6c 69 6e 65  ring trim ${line
88f0: 7d 5d 20 30 5d 7d 20 7b 0a 09 09 23 20 09 73 65  }] 0]} {...# .se
8900: 74 20 61 6c 69 61 73 20 57 49 44 47 45 54 0a 09  t alias WIDGET..
8910: 09 23 20 09 73 65 74 20 6e 61 6d 65 73 70 63 20  .# .set namespc 
8920: 22 22 3b 20 23 20 77 69 64 67 65 74 73 20 61 72  ""; # widgets ar
8930: 65 20 61 6c 77 61 79 73 20 69 6e 20 74 68 65 20  e always in the 
8940: 67 6c 6f 62 61 6c 0a 09 09 23 20 7d 20 65 6c 73  global...# } els
8950: 65 20 7b 0a 0a 09 09 09 23 20 74 68 65 20 64 6f  e {.....# the do
8960: 75 62 6c 65 20 60 6c 69 6e 64 65 78 27 20 73 74  uble `lindex' st
8970: 72 69 70 73 20 7b 7d 20 6f 72 20 71 75 6f 74 65  rips {} or quote
8980: 73 2e 0a 09 09 09 23 20 74 68 65 20 73 75 62 73  s.....# the subs
8990: 74 20 65 6e 61 62 6c 65 73 20 76 61 72 69 61 62  t enables variab
89a0: 6c 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 09  les containing..
89b0: 09 09 23 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65  ..# command name
89c0: 73 2e 0a 09 09 09 23 0a 09 09 09 73 65 74 20 61  s.....#....set a
89d0: 6c 69 61 73 20 5b 75 70 6c 65 76 65 6c 20 5b 69  lias [uplevel [i
89e0: 6e 66 6f 20 6c 65 76 65 6c 5d 20 5c 0a 09 09 09  nfo level] \....
89f0: 73 75 62 73 74 20 5b 6c 69 6e 64 65 78 20 5b 6c  subst [lindex [l
8a00: 69 6e 64 65 78 20 5b 51 75 6f 74 65 51 75 6f 74  index [QuoteQuot
8a10: 65 73 20 24 7b 6c 69 6e 65 7d 5d 20 30 5d 20 30  es ${line}] 0] 0
8a20: 5d 5d 0a 0a 09 09 09 23 20 6d 61 6b 65 20 60 61  ]].....# make `a
8a30: 6c 69 61 73 27 20 61 20 66 75 6c 6c 79 20 71 75  lias' a fully qu
8a40: 61 6c 69 66 69 65 64 20 6e 61 6d 65 2e 0a 09 09  alified name....
8a50: 09 23 20 74 68 69 73 20 63 61 6e 20 72 61 69 73  .# this can rais
8a60: 65 20 61 6e 20 65 72 72 6f 72 2c 20 69 66 20 61  e an error, if a
8a70: 6c 69 61 73 20 69 73 0a 09 09 09 23 20 6e 6f 20  lias is....# no 
8a80: 76 61 6c 69 64 20 63 6f 6d 6d 61 6e 64 2e 0a 09  valid command...
8a90: 09 09 23 0a 09 09 09 69 66 20 7b 5b 63 61 74 63  ..#....if {[catc
8aa0: 68 20 5b 6c 69 73 74 20 73 65 74 20 61 6c 69 61  h [list set alia
8ab0: 73 20 5b 6e 61 6d 65 73 70 61 63 65 20 6f 72 69  s [namespace ori
8ac0: 67 69 6e 20 24 61 6c 69 61 73 5d 5d 5d 7d 20 7b  gin $alias]]]} {
8ad0: 0a 09 09 09 09 72 65 74 75 72 6e 20 22 22 0a 09  .....return ""..
8ae0: 09 09 7d 0a 0a 09 09 09 23 20 73 74 72 69 70 20  ..}.....# strip 
8af0: 6c 65 61 64 69 6e 67 20 3a 3a 27 73 2e 0a 09 09  leading ::'s....
8b00: 09 23 0a 09 09 09 72 65 67 73 75 62 20 2d 61 6c  .#....regsub -al
8b10: 6c 20 7b 5e 3a 3a 7d 20 24 61 6c 69 61 73 20 7b  l {^::} $alias {
8b20: 7d 20 61 6c 69 61 73 0a 09 09 09 73 65 74 20 6e  } alias....set n
8b30: 61 6d 65 73 70 63 20 5b 6e 61 6d 65 73 70 61 63  amespc [namespac
8b40: 65 20 71 75 61 6c 69 66 69 65 72 73 20 24 61 6c  e qualifiers $al
8b50: 69 61 73 5d 0a 09 09 09 73 65 74 20 61 6c 69 61  ias]....set alia
8b60: 73 20 5b 6e 61 6d 65 73 70 61 63 65 20 74 61 69  s [namespace tai
8b70: 6c 20 24 61 6c 69 61 73 5d 0a 09 09 23 20 7d 0a  l $alias]...# }.
8b80: 0a 09 09 23 20 74 72 79 20 66 69 72 73 74 20 61  ...# try first a
8b90: 20 73 70 65 63 69 66 69 63 20 63 6f 6d 70 6c 65   specific comple
8ba0: 74 65 72 2c 20 74 68 65 6e 2c 20 61 6e 64 20 6f  ter, then, and o
8bb0: 6e 6c 79 20 74 68 65 6e 0a 09 09 23 20 74 68 65  nly then...# the
8bc0: 20 74 63 6c 72 65 61 64 6c 69 6e 65 5f 63 6f 6d   tclreadline_com
8bd0: 70 6c 65 74 65 5f 75 6e 6b 6e 6f 77 6e 2e 0a 09  plete_unknown...
8be0: 09 23 0a 09 09 66 6f 72 65 61 63 68 20 63 6d 64  .#...foreach cmd
8bf0: 20 5b 6c 69 73 74 20 24 7b 61 6c 69 61 73 7d 20   [list ${alias} 
8c00: 74 63 6c 72 65 61 64 6c 69 6e 65 5f 63 6f 6d 70  tclreadline_comp
8c10: 6c 65 74 65 5f 75 6e 6b 6e 6f 77 6e 5d 20 7b 0a  lete_unknown] {.
8c20: 09 09 09 23 20 70 75 74 73 20 73 74 64 65 72 72  ...# puts stderr
8c30: 20 24 7b 6e 61 6d 65 73 70 63 7d 63 6f 6d 70 6c   ${namespc}compl
8c40: 65 74 65 28 24 7b 63 6d 64 7d 29 0a 09 09 09 69  ete(${cmd})....i
8c50: 66 20 7b 22 22 20 21 3d 20 5b 6e 61 6d 65 73 70  f {"" != [namesp
8c60: 61 63 65 20 65 76 61 6c 20 3a 3a 74 63 6c 72 65  ace eval ::tclre
8c70: 61 64 6c 69 6e 65 3a 3a 24 7b 6e 61 6d 65 73 70  adline::${namesp
8c80: 63 7d 20 5c 0a 09 09 09 09 5b 6c 69 73 74 20 69  c} \.....[list i
8c90: 6e 66 6f 20 70 72 6f 63 73 20 63 6f 6d 70 6c 65  nfo procs comple
8ca0: 74 65 28 24 7b 63 6d 64 7d 29 5d 5d 0a 09 09 09  te(${cmd})]]....
8cb0: 7d 20 7b 0a 09 09 09 09 23 20 70 75 74 73 20 66  } {.....# puts f
8cc0: 6f 75 6e 64 3d 7c 63 6f 6d 70 6c 65 74 65 28 24  ound=|complete($
8cd0: 63 6d 64 29 7c 0a 09 09 09 09 23 20 74 6f 20 62  cmd)|.....# to b
8ce0: 65 20 6d 6f 72 65 20 65 72 72 6f 72 2d 70 72 6f  e more error-pro
8cf0: 6f 66 2c 20 77 65 20 63 68 65 63 6b 20 68 65 72  of, we check her
8d00: 65 2c 0a 09 09 09 09 23 20 69 66 20 63 6f 6d 70  e,.....# if comp
8d10: 6c 65 74 65 28 24 63 6d 64 29 20 74 61 6b 65 73  lete($cmd) takes
8d20: 20 65 78 61 63 74 6c 79 20 35 20 61 72 67 75 6d   exactly 5 argum
8d30: 65 6e 74 73 2e 0a 09 09 09 09 23 0a 09 09 09 09  ents......#.....
8d40: 69 66 20 7b 36 20 21 3d 20 5b 73 65 74 20 61 72  if {6 != [set ar
8d50: 67 75 6d 65 6e 74 73 20 5b 6c 6c 65 6e 67 74 68  guments [llength
8d60: 20 5c 0a 09 09 09 09 09 5b 6e 61 6d 65 73 70 61   \......[namespa
8d70: 63 65 20 65 76 61 6c 20 3a 3a 74 63 6c 72 65 61  ce eval ::tclrea
8d80: 64 6c 69 6e 65 3a 3a 24 7b 6e 61 6d 65 73 70 63  dline::${namespc
8d90: 7d 20 5c 0a 09 09 09 09 09 5b 6c 69 73 74 20 69  } \......[list i
8da0: 6e 66 6f 20 61 72 67 73 20 63 6f 6d 70 6c 65 74  nfo args complet
8db0: 65 28 24 63 6d 64 29 5d 5d 5d 5d 0a 09 09 09 09  e($cmd)]]]].....
8dc0: 7d 20 7b 0a 09 09 09 09 09 65 72 72 6f 72 20 5b  } {......error [
8dd0: 6c 69 73 74 20 63 6f 6d 70 6c 65 74 65 28 24 7b  list complete(${
8de0: 63 6d 64 7d 29 20 74 61 6b 65 73 20 24 7b 61 72  cmd}) takes ${ar
8df0: 67 75 6d 65 6e 74 73 7d 20 5c 0a 09 09 09 09 09  guments} \......
8e00: 61 72 67 75 6d 65 6e 74 73 2c 20 62 75 74 20 73  arguments, but s
8e10: 68 6f 75 6c 64 20 74 61 6b 65 20 65 78 61 63 74  hould take exact
8e20: 6c 79 20 36 2e 5d 0a 09 09 09 09 7d 0a 0a 09 09  ly 6.].....}....
8e30: 09 09 23 20 72 65 6d 6f 76 65 20 6c 65 61 64 69  ..# remove leadi
8e40: 6e 67 20 71 75 6f 74 65 73 0a 09 09 09 09 23 0a  ng quotes.....#.
8e50: 09 09 09 09 73 65 74 20 6d 6f 64 20 5b 53 74 72  ....set mod [Str
8e60: 69 70 50 72 65 66 69 78 20 24 70 61 72 74 5d 0a  ipPrefix $part].
8e70: 09 09 09 09 23 20 70 75 74 73 20 73 74 64 65 72  ....# puts stder
8e80: 72 20 6d 6f 64 3d 24 6d 6f 64 0a 0a 09 09 09 09  r mod=$mod......
8e90: 69 66 20 7b 5b 63 61 74 63 68 20 5b 6c 69 73 74  if {[catch [list
8ea0: 20 73 65 74 20 73 63 72 69 70 74 5f 72 65 73 75   set script_resu
8eb0: 6c 74 20 5c 0a 09 09 09 09 09 5b 6e 61 6d 65 73  lt \......[names
8ec0: 70 61 63 65 20 65 76 61 6c 20 3a 3a 74 63 6c 72  pace eval ::tclr
8ed0: 65 61 64 6c 69 6e 65 3a 3a 24 7b 6e 61 6d 65 73  eadline::${names
8ee0: 70 63 7d 20 5c 0a 09 09 09 09 09 5b 6c 69 73 74  pc} \......[list
8ef0: 20 63 6f 6d 70 6c 65 74 65 28 24 7b 63 6d 64 7d   complete(${cmd}
8f00: 29 20 24 70 61 72 74 20 24 73 74 61 72 74 20 24  ) $part $start $
8f10: 65 6e 64 20 24 6c 69 6e 65 20 24 70 6f 73 20 24  end $line $pos $
8f20: 6d 6f 64 5d 5d 5d 5c 0a 09 09 09 09 09 3a 3a 74  mod]]]\......::t
8f30: 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 65 72 72 6f  clreadline::erro
8f40: 72 4d 73 67 5d 0a 09 09 09 09 7d 20 7b 0a 09 09  rMsg].....} {...
8f50: 09 09 09 65 72 72 6f 72 20 5b 6c 69 73 74 20 65  ...error [list e
8f60: 72 72 6f 72 20 64 75 72 69 6e 67 20 65 76 61 6c  rror during eval
8f70: 75 61 74 69 6f 6e 20 6f 66 20 60 63 6f 6d 70 6c  uation of `compl
8f80: 65 74 65 28 24 7b 63 6d 64 7d 29 27 5d 0a 09 09  ete(${cmd})']...
8f90: 09 09 7d 0a 09 09 09 09 23 20 70 75 74 73 20 73  ..}.....# puts s
8fa0: 74 64 65 72 72 20 5c 6e 73 63 72 69 70 74 5f 72  tderr \nscript_r
8fb0: 65 73 75 6c 74 3d 7c 24 7b 73 63 72 69 70 74 5f  esult=|${script_
8fc0: 72 65 73 75 6c 74 7d 7c 0a 09 09 09 09 69 66 20  result}|.....if 
8fd0: 7b 21 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  {![string length
8fe0: 20 24 7b 73 63 72 69 70 74 5f 72 65 73 75 6c 74   ${script_result
8ff0: 7d 5d 20 26 26 20 5c 0a 09 09 09 09 09 22 74 63  }] && \......"tc
9000: 6c 72 65 61 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65  lreadline_comple
9010: 74 65 5f 75 6e 6b 6e 6f 77 6e 22 20 3d 3d 20 24  te_unknown" == $
9020: 7b 63 6d 64 7d 0a 09 09 09 09 7d 20 7b 0a 09 09  {cmd}.....} {...
9030: 09 09 09 23 20 61 73 20 77 65 27 72 65 20 68 65  ...# as we're he
9040: 72 65 2c 20 74 68 65 20 74 63 6c 72 65 61 64 6c  re, the tclreadl
9050: 69 6e 65 5f 63 6f 6d 70 6c 65 74 65 5f 75 6e 6b  ine_complete_unk
9060: 6e 6f 77 6e 0a 09 09 09 09 09 23 20 72 65 74 75  nown......# retu
9070: 72 6e 65 64 20 61 6e 20 65 6d 70 74 79 20 73 74  rned an empty st
9080: 72 69 6e 67 2e 20 46 61 6c 6c 20 74 68 72 75 20  ring. Fall thru 
9090: 61 6e 64 20 74 72 79 0a 09 09 09 09 09 23 20 66  and try......# f
90a0: 75 72 74 68 65 72 20 66 61 6c 6c 62 61 63 6b 20  urther fallback 
90b0: 63 6f 6d 70 6c 65 74 65 72 73 2e 0a 09 09 09 09  completers......
90c0: 09 23 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a  .#.....} else {.
90d0: 09 09 09 09 09 23 20 72 65 74 75 72 6e 20 61 6c  .....# return al
90e0: 73 6f 20 65 6d 70 74 79 20 73 74 72 69 6e 67 73  so empty strings
90f0: 2c 20 69 66 0a 09 09 09 09 09 23 20 74 68 65 79  , if......# they
9100: 27 72 65 20 66 72 6f 6d 20 61 20 73 70 65 63 69  're from a speci
9110: 66 69 63 20 63 6f 6d 70 6c 65 74 65 72 2e 0a 09  fic completer...
9120: 09 09 09 09 23 0a 09 09 09 09 09 54 72 61 63 65  ....#......Trace
9130: 54 65 78 74 20 73 63 72 69 70 74 5f 72 65 73 75  Text script_resu
9140: 6c 74 3d 7c 24 7b 73 63 72 69 70 74 5f 72 65 73  lt=|${script_res
9150: 75 6c 74 7d 7c 0a 09 09 09 09 09 72 65 74 75 72  ult}|......retur
9160: 6e 20 24 7b 73 63 72 69 70 74 5f 72 65 73 75 6c  n ${script_resul
9170: 74 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09  t}.....}....}...
9180: 09 23 20 73 65 74 20 6e 61 6d 65 73 70 63 20 22  .# set namespc "
9190: 22 3b 20 23 20 6e 6f 20 71 75 61 6c 69 66 69 65  "; # no qualifie
91a0: 72 73 20 66 6f 72 20 74 63 6c 72 65 61 64 6c 69  rs for tclreadli
91b0: 6e 65 5f 63 6f 6d 70 6c 65 74 65 5f 75 6e 6b 6e  ne_complete_unkn
91c0: 6f 77 6e 0a 09 09 7d 0a 0a 09 09 23 20 61 73 20  own...}....# as 
91d0: 77 65 27 76 65 20 72 65 61 63 68 65 64 20 68 65  we've reached he
91e0: 72 65 20 6e 6f 20 76 61 6c 69 64 20 73 70 65 63  re no valid spec
91f0: 69 66 69 63 20 63 6f 6d 70 6c 65 74 65 72 0a 09  ific completer..
9200: 09 23 20 77 61 73 20 66 6f 75 6e 64 2e 20 43 68  .# was found. Ch
9210: 65 63 6b 2c 20 69 66 20 69 74 27 73 20 61 20 70  eck, if it's a p
9220: 72 6f 63 20 61 6e 64 20 72 65 74 75 72 6e 20 74  roc and return t
9230: 68 65 0a 09 09 23 20 61 72 67 75 6d 65 6e 74 73  he...# arguments
9240: 2e 0a 09 09 23 0a 09 09 69 66 20 7b 21 5b 73 74  ....#...if {![st
9250: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b 6e 61  ring length ${na
9260: 6d 65 73 70 63 7d 5d 7d 20 7b 0a 09 09 09 73 65  mespc}]} {....se
9270: 74 20 6e 61 6d 65 73 70 63 20 3a 3a 0a 09 09 7d  t namespc ::...}
9280: 0a 09 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c  ...if {[string l
9290: 65 6e 67 74 68 20 5b 75 70 6c 65 76 65 6c 20 5b  ength [uplevel [
92a0: 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 5c 0a 09 09  info level] \...
92b0: 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  .namespace eval 
92c0: 24 7b 6e 61 6d 65 73 70 63 7d 20 5b 6c 69 73 74  ${namespc} [list
92d0: 20 3a 3a 69 6e 66 6f 20 70 72 6f 63 20 24 61 6c   ::info proc $al
92e0: 69 61 73 5d 5d 5d 0a 09 09 7d 20 7b 0a 09 09 09  ias]]]...} {....
92f0: 69 66 20 21 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if ![string leng
9300: 74 68 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20  th [string trim 
9310: 24 70 61 72 74 5d 5d 20 7b 0a 09 09 09 09 73 65  $part]] {.....se
9320: 74 20 61 72 67 73 20 5b 75 70 6c 65 76 65 6c 20  t args [uplevel 
9330: 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 5c 0a 09  [info level] \..
9340: 09 09 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61  ...namespace eva
9350: 6c 20 24 7b 6e 61 6d 65 73 70 63 7d 20 5b 6c 69  l ${namespc} [li
9360: 73 74 20 69 6e 66 6f 20 61 72 67 73 20 24 61 6c  st info args $al
9370: 69 61 73 5d 5d 0a 09 09 09 09 73 65 74 20 61 72  ias]].....set ar
9380: 67 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 20  g [lindex $args 
9390: 5b 65 78 70 72 20 24 70 6f 73 20 2d 20 31 5d 5d  [expr $pos - 1]]
93a0: 0a 09 09 09 09 69 66 20 7b 22 22 20 21 3d 20 24  .....if {"" != $
93b0: 61 72 67 20 26 26 20 22 61 72 67 73 22 20 21 3d  arg && "args" !=
93c0: 20 24 61 72 67 7d 20 7b 0a 09 09 09 09 09 69 66   $arg} {......if
93d0: 20 7b 5b 75 70 6c 65 76 65 6c 20 5b 69 6e 66 6f   {[uplevel [info
93e0: 20 6c 65 76 65 6c 5d 20 6e 61 6d 65 73 70 61 63   level] namespac
93f0: 65 20 65 76 61 6c 20 5c 0a 09 09 09 09 09 09 24  e eval \.......$
9400: 7b 6e 61 6d 65 73 70 63 7d 20 5b 6c 69 73 74 20  {namespc} [list 
9410: 69 6e 66 6f 20 64 65 66 61 75 6c 74 20 24 61 6c  info default $al
9420: 69 61 73 20 24 61 72 67 20 6a 75 6e 6b 5d 5d 7d  ias $arg junk]]}
9430: 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e   {........return
9440: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
9450: 24 61 72 67 3f 5d 0a 09 09 09 09 09 09 7d 20 65  $arg?].......} e
9460: 6c 73 65 20 7b 0a 09 09 09 09 09 09 09 72 65 74  lse {........ret
9470: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
9480: 73 20 3c 24 61 72 67 3e 5d 0a 09 09 09 09 09 09  s <$arg>].......
9490: 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 20 65 6c 73  }.....}....} els
94a0: 65 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 20 22  e {.....return "
94b0: 22 3b 20 23 20 65 6e 61 62 6c 65 20 66 69 6c 65  "; # enable file
94c0: 20 6e 61 6d 65 20 63 6f 6d 70 6c 65 74 69 6f 6e   name completion
94d0: 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 23 20 63  ....}...}....# c
94e0: 68 65 63 6b 20 69 66 20 74 68 65 20 63 6f 6d 6d  heck if the comm
94f0: 61 6e 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74  and is an object
9500: 20 6f 66 20 6b 6e 6f 77 6e 20 63 6c 61 73 73 2e   of known class.
9510: 0a 09 09 23 20 0a 09 09 69 66 20 5b 4f 62 6a 65  ...# ...if [Obje
9520: 63 74 43 6c 61 73 73 43 6f 6d 70 6c 65 74 65 72  ctClassCompleter
9530: 20 24 7b 70 61 72 74 7d 20 24 7b 73 74 61 72 74   ${part} ${start
9540: 7d 20 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d  } ${end} ${line}
9550: 20 24 7b 70 6f 73 7d 20 72 65 73 5d 20 7b 0a 09   ${pos} res] {..
9560: 09 09 72 65 74 75 72 6e 20 24 7b 72 65 73 7d 0a  ..return ${res}.
9570: 09 09 7d 0a 0a 09 09 23 20 4f 6b 2c 20 61 6c 73  ..}....# Ok, als
9580: 6f 20 6e 6f 20 70 72 6f 63 2e 20 54 72 79 20 74  o no proc. Try t
9590: 6f 20 64 6f 20 74 68 65 20 73 61 6d 65 20 61 73  o do the same as
95a0: 20 66 6f 72 20 77 69 64 67 65 74 73 20 6e 6f 77   for widgets now
95b0: 3a 0a 09 09 23 20 74 72 79 20 74 6f 20 63 6f 6d  :...# try to com
95c0: 70 6c 65 74 65 20 66 72 6f 6d 20 74 68 65 20 6f  plete from the o
95d0: 70 74 69 6f 6e 20 74 61 62 6c 65 20 69 66 20 74  ption table if t
95e0: 68 65 20 73 75 62 63 6f 6d 6d 61 6e 64 0a 09 09  he subcommand...
95f0: 23 20 69 73 20 60 63 6f 6e 66 69 67 75 72 65 27  # is `configure'
9600: 20 6f 72 20 60 63 67 65 74 27 20 6f 74 68 65 72   or `cget' other
9610: 77 69 73 65 20 74 72 79 20 74 6f 20 67 65 74 20  wise try to get 
9620: 66 75 72 74 68 65 72 0a 09 09 23 20 73 75 62 63  further...# subc
9630: 6f 6d 6d 61 6e 64 73 2e 0a 09 09 23 0a 09 09 72  ommands....#...r
9640: 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
9650: 72 6f 6d 4f 70 74 69 6f 6e 73 4f 72 53 75 62 43  romOptionsOrSubC
9660: 6d 64 73 20 5c 0a 09 09 24 7b 70 61 72 74 7d 20  mds \...${part} 
9670: 24 7b 73 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20  ${start} ${end} 
9680: 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 5d 0a  ${line} ${pos}].
9690: 09 7d 0a 09 65 72 72 6f 72 20 22 7b 4e 4f 54 52  .}..error "{NOTR
96a0: 45 41 43 48 45 44 20 28 74 68 69 73 20 69 73 20  EACHED (this is 
96b0: 70 72 6f 62 61 62 6c 79 20 61 6e 20 65 72 72 6f  probably an erro
96c0: 72 29 7d 22 0a 7d 0a 0a 0a 23 20 65 78 70 6c 69  r)}".}...# expli
96d0: 63 69 74 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 70  cit command comp
96e0: 6c 65 74 65 72 73 0a 23 0a 0a 23 20 2d 2d 2d 2d  leters.#..# ----
96f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9700: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9710: 2d 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20  -.#             
9720: 20 20 20 20 54 43 4c 0a 23 20 2d 2d 2d 2d 2d 2d      TCL.# ------
9730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
9750: 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 61  .proc complete(a
9760: 66 74 65 72 29 20 7b 74 65 78 74 20 73 74 61 72  fter) {text star
9770: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
9780: 6f 64 7d 20 7b 0a 09 73 65 74 20 73 75 62 20 5b  od} {..set sub [
9790: 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a  Lindex $line 1].
97a0: 09 23 20 70 75 74 73 20 5c 6e 70 6f 73 3d 24 70  .# puts \npos=$p
97b0: 6f 73 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70  os..switch -- $p
97c0: 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65  os {...1 {....re
97d0: 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
97e0: 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b  omList ${text} {
97f0: 3c 6d 73 3e 20 63 61 6e 63 65 6c 20 69 64 6c 65  <ms> cancel idle
9800: 20 69 6e 66 6f 7d 5d 0a 09 09 7d 0a 09 09 32 20   info}]...}...2 
9810: 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  {....switch -- $
9820: 73 75 62 20 7b 0a 09 09 09 09 63 61 6e 63 65 6c  sub {.....cancel
9830: 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
9840: 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
9850: 20 24 74 65 78 74 20 22 3c 73 63 72 69 70 74 3e   $text "<script>
9860: 20 5b 61 66 74 65 72 20 69 6e 66 6f 5d 22 5d 0a   [after info]"].
9870: 09 09 09 09 7d 0a 09 09 09 09 69 64 6c 65 20 7b  ....}.....idle {
9880: 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  ......return [Di
9890: 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 63 72 69  splayHints <scri
98a0: 70 74 3e 5d 0a 09 09 09 09 7d 0a 09 09 09 09 69  pt>].....}.....i
98b0: 6e 66 6f 20 7b 0a 09 09 09 09 09 72 65 74 75 72  nfo {......retur
98c0: 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
98d0: 69 73 74 20 24 74 65 78 74 20 5b 61 66 74 65 72  ist $text [after
98e0: 20 69 6e 66 6f 5d 5d 0a 09 09 09 09 7d 0a 09 09   info]].....}...
98f0: 09 09 64 65 66 61 75 6c 74 20 7b 20 72 65 74 75  ..default { retu
9900: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
9910: 20 3f 73 63 72 69 70 74 3f 5d 20 7d 0a 09 09 09   ?script?] }....
9920: 7d 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c 74 20  }...}...default 
9930: 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  {....switch -- $
9940: 73 75 62 20 7b 0a 09 09 09 09 69 6e 66 6f 20 7b  sub {.....info {
9950: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
9960: 48 69 6e 74 73 20 7b 7d 5d 20 7d 0a 09 09 09 09  Hints {}] }.....
9970: 64 65 66 61 75 6c 74 20 7b 20 72 65 74 75 72 6e  default { return
9980: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
9990: 73 63 72 69 70 74 3f 5d 20 7d 0a 09 09 09 7d 0a  script?] }....}.
99a0: 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
99b0: 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
99c0: 74 65 28 61 70 70 65 6e 64 29 20 7b 74 65 78 74  te(append) {text
99d0: 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
99e0: 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74  pos mod} {..swit
99f0: 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31  ch -- $pos {...1
9a00: 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20         { return 
9a10: 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 20 24  [VarCompletion $
9a20: 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 64 65 66 61  {text}] }...defa
9a30: 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ult { return [Di
9a40: 73 70 6c 61 79 48 69 6e 74 73 20 3f 76 61 6c 75  splayHints ?valu
9a50: 65 3f 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  e?] }..}..return
9a60: 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70   "".}..proc comp
9a70: 6c 65 74 65 28 61 72 72 61 79 29 20 7b 74 65 78  lete(array) {tex
9a80: 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
9a90: 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69   pos mod} {..swi
9aa0: 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09  tch -- $pos {...
9ab0: 31 20 7b 0a 09 09 09 73 65 74 20 63 6d 64 73 20  1 {....set cmds 
9ac0: 7b 0a 09 09 09 09 61 6e 79 6d 6f 72 65 20 64 6f  {.....anymore do
9ad0: 6e 65 73 65 61 72 63 68 20 65 78 69 73 74 73 20  nesearch exists 
9ae0: 67 65 74 20 6e 61 6d 65 73 0a 09 09 09 09 6e 65  get names.....ne
9af0: 78 74 65 6c 65 6d 65 6e 74 20 73 65 74 20 73 69  xtelement set si
9b00: 7a 65 20 73 74 61 72 74 73 65 61 72 63 68 0a 09  ze startsearch..
9b10: 09 09 7d 0a 09 09 09 72 65 74 75 72 6e 20 5b 43  ..}....return [C
9b20: 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
9b30: 24 74 65 78 74 20 24 63 6d 64 73 5d 0a 09 09 7d  $text $cmds]...}
9b40: 0a 09 09 32 20 7b 0a 09 09 09 73 65 74 20 6d 61  ...2 {....set ma
9b50: 74 63 68 65 73 20 22 22 0a 09 09 09 23 20 73 65  tches ""....# se
9b60: 74 20 76 61 72 73 20 5b 75 70 6c 65 76 65 6c 20  t vars [uplevel 
9b70: 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 69 6e 66  [info level] inf
9b80: 6f 20 76 61 72 73 20 24 7b 6d 6f 64 7d 2a 5d 0a  o vars ${mod}*].
9b90: 09 09 09 23 0a 09 09 09 23 20 62 65 74 74 65 72  ...#....# better
9ba0: 3a 20 74 68 69 73 20 64 69 73 70 6c 61 79 73 20  : this displays 
9bb0: 61 20 6c 69 73 74 20 6f 66 20 61 72 72 61 79 20  a list of array 
9bc0: 6e 61 6d 65 73 20 69 66 20 74 68 65 0a 09 09 09  names if the....
9bd0: 23 20 75 73 65 72 20 69 6e 74 65 72 73 20 77 69  # user inters wi
9be0: 74 68 20 73 6f 6d 65 74 68 69 6e 67 20 77 68 69  th something whi
9bf0: 63 68 20 63 61 6e 6e 6f 74 20 62 65 20 6d 61 74  ch cannot be mat
9c00: 63 68 65 64 2e 0a 09 09 09 23 20 54 68 65 20 6d  ched.....# The m
9c10: 61 74 63 68 69 6e 67 20 61 67 61 69 6e 73 74 20  atching against 
9c20: 60 74 65 78 74 27 20 69 73 20 64 6f 6e 65 20 62  `text' is done b
9c30: 79 20 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69  y CompleteFromLi
9c40: 73 74 2e 0a 09 09 09 23 0a 09 09 09 73 65 74 20  st.....#....set 
9c50: 76 61 72 73 20 5b 75 70 6c 65 76 65 6c 20 5b 69  vars [uplevel [i
9c60: 6e 66 6f 20 6c 65 76 65 6c 5d 20 69 6e 66 6f 20  nfo level] info 
9c70: 76 61 72 73 5d 0a 09 09 09 66 6f 72 65 61 63 68  vars]....foreach
9c80: 20 76 61 72 20 24 7b 76 61 72 73 7d 20 7b 0a 09   var ${vars} {..
9c90: 09 09 09 69 66 20 7b 5b 75 70 6c 65 76 65 6c 20  ...if {[uplevel 
9ca0: 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 61 72 72  [info level] arr
9cb0: 61 79 20 65 78 69 73 74 73 20 24 7b 76 61 72 7d  ay exists ${var}
9cc0: 5d 7d 20 7b 0a 09 09 09 09 09 6c 61 70 70 65 6e  ]} {......lappen
9cd0: 64 20 6d 61 74 63 68 65 73 20 24 7b 76 61 72 7d  d matches ${var}
9ce0: 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 09 72  .....}....}....r
9cf0: 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
9d00: 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
9d10: 24 7b 6d 61 74 63 68 65 73 7d 5d 0a 09 09 7d 0a  ${matches}]...}.
9d20: 09 09 33 20 7b 0a 09 09 09 73 65 74 20 63 6d 64  ..3 {....set cmd
9d30: 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31   [Lindex $line 1
9d40: 5d 0a 09 09 09 73 65 74 20 61 72 72 61 79 5f 6e  ]....set array_n
9d50: 61 6d 65 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e  ame [Lindex $lin
9d60: 65 20 32 5d 0a 09 09 09 73 77 69 74 63 68 20 2d  e 2]....switch -
9d70: 2d 20 24 63 6d 64 20 7b 0a 09 09 09 09 67 65 74  - $cmd {.....get
9d80: 20 2d 0a 09 09 09 09 6e 61 6d 65 73 20 7b 0a 09   -.....names {..
9d90: 09 09 09 09 73 65 74 20 70 61 74 74 65 72 6e 20  ....set pattern 
9da0: 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 33 5d  [Lindex $line 3]
9db0: 0a 09 09 09 09 09 73 65 74 20 6d 61 74 63 68 65  ......set matche
9dc0: 73 20 5b 75 70 6c 65 76 65 6c 20 5b 69 6e 66 6f  s [uplevel [info
9dd0: 20 6c 65 76 65 6c 5d 20 5c 0a 09 09 09 09 09 61   level] \......a
9de0: 72 72 61 79 20 6e 61 6d 65 73 20 24 7b 61 72 72  rray names ${arr
9df0: 61 79 5f 6e 61 6d 65 7d 20 24 7b 70 61 74 74 65  ay_name} ${patte
9e00: 72 6e 7d 2a 5d 0a 09 09 09 09 09 69 66 20 7b 21  rn}*]......if {!
9e10: 5b 6c 6c 65 6e 67 74 68 20 24 6d 61 74 63 68 65  [llength $matche
9e20: 73 5d 7d 20 7b 0a 09 09 09 09 09 09 72 65 74 75  s]} {.......retu
9e30: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
9e40: 20 3f 70 61 74 74 65 72 6e 3f 5d 0a 09 09 09 09   ?pattern?].....
9e50: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09  .} else {.......
9e60: 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
9e70: 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
9e80: 20 24 7b 6d 61 74 63 68 65 73 7d 5d 0a 09 09 09   ${matches}]....
9e90: 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09 61 6e  ..}.....}.....an
9ea0: 79 6d 6f 72 65 20 2d 0a 09 09 09 09 64 6f 6e 65  ymore -.....done
9eb0: 73 65 61 72 63 68 20 2d 0a 09 09 09 09 6e 65 78  search -.....nex
9ec0: 74 65 6c 65 6d 65 6e 74 20 7b 20 72 65 74 75 72  telement { retur
9ed0: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
9ee0: 3c 73 65 61 72 63 68 49 64 3e 5d 20 7d 0a 09 09  <searchId>] }...
9ef0: 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72  .}...}..}..retur
9f00: 6e 20 22 22 0a 7d 0a 0a 23 20 70 72 6f 63 20 63  n "".}..# proc c
9f10: 6f 6d 70 6c 65 74 65 28 62 67 65 72 72 6f 72 29  omplete(bgerror)
9f20: 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
9f30: 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
9f40: 0a 23 20 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  .# }..proc compl
9f50: 65 74 65 28 62 69 6e 61 72 79 29 20 7b 74 65 78  ete(binary) {tex
9f60: 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
9f70: 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74   pos mod} {..set
9f80: 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6c 69   cmd [Lindex $li
9f90: 6e 65 20 31 5d 0a 09 73 77 69 74 63 68 20 2d 2d  ne 1]..switch --
9fa0: 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09   $pos {...1 {...
9fb0: 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
9fc0: 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
9fd0: 7b 66 6f 72 6d 61 74 20 73 63 61 6e 7d 5d 0a 09  {format scan}]..
9fe0: 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73 77 69 74  .}...2 {....swit
9ff0: 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 09  ch -- $cmd {....
a000: 09 66 6f 72 6d 61 74 20 7b 20 72 65 74 75 72 6e  .format { return
a010: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
a020: 66 6f 72 6d 61 74 53 74 72 69 6e 67 3e 5d 20 7d  formatString>] }
a030: 0a 09 09 09 09 73 63 61 6e 20 20 20 7b 20 72 65  .....scan   { re
a040: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
a050: 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 09  ts <string>] }..
a060: 09 09 7d 0a 09 09 7d 0a 09 09 33 20 7b 0a 09 09  ..}...}...3 {...
a070: 09 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64 20  .switch -- $cmd 
a080: 7b 0a 09 09 09 09 66 6f 72 6d 61 74 20 7b 20 72  {.....format { r
a090: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
a0a0: 6e 74 73 20 3f 61 72 67 3f 5d 20 7d 0a 09 09 09  nts ?arg?] }....
a0b0: 09 73 63 61 6e 20 20 20 7b 20 72 65 74 75 72 6e  .scan   { return
a0c0: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
a0d0: 66 6f 72 6d 61 74 53 74 72 69 6e 67 3e 5d 20 7d  formatString>] }
a0e0: 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 64 65 66 61  ....}...}...defa
a0f0: 75 6c 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ult {....switch 
a100: 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 09 09 66 6f  -- $cmd {.....fo
a110: 72 6d 61 74 20 7b 20 72 65 74 75 72 6e 20 5b 44  rmat { return [D
a120: 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 61 72 67  isplayHints ?arg
a130: 3f 5d 20 7d 0a 09 09 09 09 73 63 61 6e 20 20 20  ?] }.....scan   
a140: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
a150: 79 48 69 6e 74 73 20 3f 76 61 72 4e 61 6d 65 3f  yHints ?varName?
a160: 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a  ] }....}...}..}.
a170: 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 23 20  .return "".}..# 
a180: 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 62 72  proc complete(br
a190: 65 61 6b 29 20 7b 74 65 78 74 20 73 74 61 72 74  eak) {text start
a1a0: 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
a1b0: 64 7d 20 7b 0a 23 20 7d 0a 0a 70 72 6f 63 20 63  d} {.# }..proc c
a1c0: 6f 6d 70 6c 65 74 65 28 63 61 74 63 68 29 20 7b  omplete(catch) {
a1d0: 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
a1e0: 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
a1f0: 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
a200: 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...1 { return [D
a210: 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 63 72  isplayHints <scr
a220: 69 70 74 3e 5d 20 7d 0a 09 09 32 20 7b 20 72 65  ipt>] }...2 { re
a230: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
a240: 74 73 20 3f 76 61 72 4e 61 6d 65 3f 5d 20 7d 0a  ts ?varName?] }.
a250: 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
a260: 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 63  .proc complete(c
a270: 64 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  d) {text start e
a280: 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
a290: 20 7b 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a   {..return "".}.
a2a0: 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 63  .proc complete(c
a2b0: 6c 6f 63 6b 29 20 7b 74 65 78 74 20 73 74 61 72  lock) {text star
a2c0: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
a2d0: 6f 64 7d 20 7b 0a 09 73 65 74 20 63 6d 64 20 5b  od} {..set cmd [
a2e0: 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a  Lindex $line 1].
a2f0: 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20  .switch -- $pos 
a300: 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65 74 75 72  {...1 {....retur
a310: 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
a320: 69 73 74 20 24 74 65 78 74 20 7b 63 6c 69 63 6b  ist $text {click
a330: 73 20 66 6f 72 6d 61 74 20 73 63 61 6e 20 73 65  s format scan se
a340: 63 6f 6e 64 73 7d 5d 0a 09 09 7d 0a 09 09 32 20  conds}]...}...2 
a350: 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  {....switch -- $
a360: 63 6d 64 20 7b 0a 09 09 09 09 66 6f 72 6d 61 74  cmd {.....format
a370: 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70    { return [Disp
a380: 6c 61 79 48 69 6e 74 73 20 3c 63 6c 6f 63 6b 56  layHints <clockV
a390: 61 6c 75 65 3e 5d 20 7d 0a 09 09 09 09 73 63 61  alue>] }.....sca
a3a0: 6e 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44  n    { return [D
a3b0: 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 64 61 74  isplayHints <dat
a3c0: 65 53 74 72 69 6e 67 3e 5d 20 7d 0a 09 09 09 09  eString>] }.....
a3d0: 63 6c 69 63 6b 73 20 20 2d 0a 09 09 09 09 73 65  clicks  -.....se
a3e0: 63 6f 6e 64 73 20 7b 7d 0a 09 09 09 7d 0a 09 09  conds {}....}...
a3f0: 7d 0a 09 09 33 20 2d 0a 09 09 35 20 7b 0a 09 09  }...3 -...5 {...
a400: 09 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64 20  .switch -- $cmd 
a410: 7b 0a 09 09 09 09 66 6f 72 6d 61 74 20 7b 0a 09  {.....format {..
a420: 09 09 09 09 73 65 74 20 73 75 62 63 6d 64 73 20  ....set subcmds 
a430: 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f  [RemoveUsedOptio
a440: 6e 73 20 24 6c 69 6e 65 20 7b 2d 66 6f 72 6d 61  ns $line {-forma
a450: 74 20 2d 67 6d 74 7d 5d 0a 09 09 09 09 09 72 65  t -gmt}]......re
a460: 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73  turn [TryFromLis
a470: 74 20 24 74 65 78 74 20 24 73 75 62 63 6d 64 73  t $text $subcmds
a480: 5d 0a 09 09 09 09 7d 0a 09 09 09 09 73 63 61 6e  ].....}.....scan
a490: 20 7b 0a 09 09 09 09 09 73 65 74 20 73 75 62 63   {......set subc
a4a0: 6d 64 73 20 5b 52 65 6d 6f 76 65 55 73 65 64 4f  mds [RemoveUsedO
a4b0: 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20 7b 2d 62  ptions $line {-b
a4c0: 61 73 65 20 2d 67 6d 74 7d 5d 0a 09 09 09 09 09  ase -gmt}]......
a4d0: 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c  return [TryFromL
a4e0: 69 73 74 20 24 74 65 78 74 20 24 73 75 62 63 6d  ist $text $subcm
a4f0: 64 73 5d 0a 09 09 09 09 7d 0a 09 09 09 09 63 6c  ds].....}.....cl
a500: 69 63 6b 73 20 20 2d 0a 09 09 09 09 73 65 63 6f  icks  -.....seco
a510: 6e 64 73 20 7b 7d 0a 09 09 09 7d 0a 09 09 7d 0a  nds {}....}...}.
a520: 09 09 34 20 2d 0a 09 09 36 20 7b 0a 09 09 09 73  ..4 -...6 {....s
a530: 65 74 20 73 75 62 20 5b 4c 69 6e 64 65 78 20 24  et sub [Lindex $
a540: 6c 69 6e 65 20 5b 65 78 70 72 20 24 70 6f 73 20  line [expr $pos 
a550: 2d 20 31 5d 5d 0a 09 09 09 73 77 69 74 63 68 20  - 1]]....switch 
a560: 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 09 09 66 6f  -- $cmd {.....fo
a570: 72 6d 61 74 20 7b 0a 09 09 09 09 09 73 77 69 74  rmat {......swit
a580: 63 68 20 2d 2d 20 24 73 75 62 20 7b 0a 09 09 09  ch -- $sub {....
a590: 09 09 09 2d 66 6f 72 6d 61 74 20 7b 20 72 65 74  ...-format { ret
a5a0: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
a5b0: 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 09 09  s <string>] }...
a5c0: 09 09 09 09 2d 67 6d 74 20 20 20 20 7b 20 72 65  ....-gmt    { re
a5d0: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
a5e0: 74 73 20 3c 62 6f 6f 6c 65 61 6e 3e 5d 20 7d 0a  ts <boolean>] }.
a5f0: 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09  .....}.....}....
a600: 09 73 63 61 6e 20 7b 0a 09 09 09 09 09 73 77 69  .scan {......swi
a610: 74 63 68 20 2d 2d 20 24 73 75 62 20 7b 0a 09 09  tch -- $sub {...
a620: 09 09 09 09 2d 62 61 73 65 20 7b 20 72 65 74 75  ....-base { retu
a630: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
a640: 20 3c 63 6c 6f 63 6b 56 61 6c 3e 5d 20 7d 0a 09   <clockVal>] }..
a650: 09 09 09 09 09 2d 67 6d 74 20 20 7b 20 72 65 74  .....-gmt  { ret
a660: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
a670: 73 20 3c 62 6f 6f 6c 65 61 6e 3e 5d 20 7d 0a 09  s <boolean>] }..
a680: 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09  ....}.....}.....
a690: 63 6c 69 63 6b 73 20 20 2d 0a 09 09 09 09 73 65  clicks  -.....se
a6a0: 63 6f 6e 64 73 20 7b 7d 0a 09 09 09 7d 0a 09 09  conds {}....}...
a6b0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
a6c0: 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
a6d0: 28 63 6c 6f 73 65 29 20 7b 74 65 78 74 20 73 74  (close) {text st
a6e0: 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
a6f0: 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
a700: 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20  -- $pos {...1 { 
a710: 72 65 74 75 72 6e 20 5b 43 68 61 6e 6e 65 6c 49  return [ChannelI
a720: 64 20 24 74 65 78 74 5d 20 7d 0a 09 7d 0a 09 72  d $text] }..}..r
a730: 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63  eturn "".}..proc
a740: 20 63 6f 6d 70 6c 65 74 65 28 63 6f 6e 63 61 74   complete(concat
a750: 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
a760: 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
a770: 7b 0a 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  {..return [Displ
a780: 61 79 48 69 6e 74 73 20 3f 61 72 67 3f 5d 0a 7d  ayHints ?arg?].}
a790: 0a 0a 23 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74  ..# proc complet
a7a0: 65 28 63 6f 6e 74 69 6e 75 65 29 20 7b 74 65 78  e(continue) {tex
a7b0: 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
a7c0: 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 23 20 7d 0a   pos mod} {.# }.
a7d0: 0a 23 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  .# proc complete
a7e0: 28 64 64 65 29 20 7b 74 65 78 74 20 73 74 61 72  (dde) {text star
a7f0: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
a800: 6f 64 7d 20 7b 0a 23 20 20 20 20 20 57 65 27 72  od} {.#     We'r
a810: 65 20 6e 6f 74 20 6f 6e 20 77 69 6e 64 6f 7a 65  e not on windoze
a820: 20 68 65 72 65 20 2e 2e 2e 0a 23 20 7d 0a 0a 70   here ....# }..p
a830: 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 65 6e 63  roc complete(enc
a840: 6f 64 69 6e 67 29 20 7b 74 65 78 74 20 73 74 61  oding) {text sta
a850: 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
a860: 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 63 6d 64 20  mod} {..set cmd 
a870: 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d  [Lindex $line 1]
a880: 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73  ..switch -- $pos
a890: 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65 74 75   {...1 {....retu
a8a0: 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
a8b0: 4c 69 73 74 20 24 74 65 78 74 20 7b 63 6f 6e 76  List $text {conv
a8c0: 65 72 74 66 72 6f 6d 20 63 6f 6e 76 65 72 74 74  ertfrom convertt
a8d0: 6f 20 6e 61 6d 65 73 20 73 79 73 74 65 6d 7d 5d  o names system}]
a8e0: 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73 77  ...}...2 {....sw
a8f0: 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 09  itch -- $cmd {..
a900: 09 09 09 63 6f 6e 76 65 72 74 66 72 6f 6d 20 2d  ...convertfrom -
a910: 0a 09 09 09 09 63 6f 6e 76 65 72 74 74 6f 20 2d  .....convertto -
a920: 0a 09 09 09 09 73 79 73 74 65 6d 20 7b 0a 09 09  .....system {...
a930: 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
a940: 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
a950: 78 74 7d 20 5b 65 6e 63 6f 64 69 6e 67 20 6e 61  xt} [encoding na
a960: 6d 65 73 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d  mes]].....}....}
a970: 0a 09 09 7d 0a 09 09 33 20 7b 0a 09 09 09 73 77  ...}...3 {....sw
a980: 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 09  itch -- $cmd {..
a990: 09 09 09 63 6f 6e 76 65 72 74 66 72 6f 6d 20 7b  ...convertfrom {
a9a0: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
a9b0: 48 69 6e 74 73 20 3c 64 61 74 61 3e 5d 20 7d 0a  Hints <data>] }.
a9c0: 09 09 09 09 63 6f 6e 76 65 72 74 74 6f 20 7b 20  ....convertto { 
a9d0: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
a9e0: 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d  ints <string>] }
a9f0: 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65  ....}...}..}..re
aa00: 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20  turn "".}..proc 
aa10: 63 6f 6d 70 6c 65 74 65 28 65 6f 66 29 20 7b 74  complete(eof) {t
aa20: 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
aa30: 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
aa40: 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
aa50: 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 49 6e  ..1 { return [In
aa60: 43 68 61 6e 6e 65 6c 49 64 20 24 74 65 78 74 5d  ChannelId $text]
aa70: 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22   }..}..return ""
aa80: 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74  .}..proc complet
aa90: 65 28 65 72 72 6f 72 29 20 7b 74 65 78 74 20 73  e(error) {text s
aaa0: 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
aab0: 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
aac0: 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b   -- $pos {...1 {
aad0: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
aae0: 48 69 6e 74 73 20 3c 6d 65 73 73 61 67 65 3e 5d  Hints <message>]
aaf0: 20 7d 0a 09 09 32 20 7b 20 72 65 74 75 72 6e 20   }...2 { return 
ab00: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 69  [DisplayHints ?i
ab10: 6e 66 6f 3f 5d 20 7d 0a 09 09 33 20 7b 20 72 65  nfo?] }...3 { re
ab20: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
ab30: 74 73 20 3f 63 6f 64 65 3f 5d 20 7d 0a 09 7d 0a  ts ?code?] }..}.
ab40: 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
ab50: 6f 63 20 63 6f 6d 70 6c 65 74 65 28 65 76 61 6c  oc complete(eval
ab60: 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
ab70: 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
ab80: 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f  {..switch -- $po
ab90: 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e  s {...1 { return
aba0: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
abb0: 61 72 67 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c  arg>] }...defaul
abc0: 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  t { return [Disp
abd0: 6c 61 79 48 69 6e 74 73 20 3f 61 72 67 3f 5d 20  layHints ?arg?] 
abe0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
abf0: 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
ac00: 28 65 78 65 63 29 20 7b 74 65 78 74 20 73 74 61  (exec) {text sta
ac10: 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
ac20: 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 72 65 64 69  mod} {..set redi
ac30: 72 20 5b 6c 69 73 74 20 7c 20 7c 26 20 3c 20 3c  r [list | |& < <
ac40: 40 20 3c 3c 20 3e 20 32 3e 20 3e 26 20 3e 3e 20  @ << > 2> >& >> 
ac50: 32 3e 3e 20 3e 3e 26 20 3e 40 20 32 3e 40 20 3e  2>> >>& >@ 2>@ >
ac60: 26 40 5d 0a 09 76 61 72 69 61 62 6c 65 20 65 78  &@]..variable ex
ac70: 65 63 75 74 61 62 6c 65 73 0a 09 69 66 20 7b 21  ecutables..if {!
ac80: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 78 65  [info exists exe
ac90: 63 75 74 61 62 6c 65 73 5d 7d 20 7b 0a 09 09 52  cutables]} {...R
aca0: 65 68 61 73 68 0a 09 7d 0a 09 73 77 69 74 63 68  ehash..}..switch
acb0: 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b   -- $pos {...1 {
acc0: 0a 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46  ....return [TryF
acd0: 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 22 2d  romList $text "-
ace0: 6b 65 65 70 6e 65 77 6c 69 6e 65 20 2d 2d 20 24  keepnewline -- $
acf0: 65 78 65 63 75 74 61 62 6c 65 73 22 5d 0a 09 09  executables"]...
ad00: 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09  }...default {...
ad10: 09 73 65 74 20 70 72 65 76 20 5b 50 72 65 76 69  .set prev [Previ
ad20: 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d  ousWord ${start}
ad30: 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09 09 69 66 20   ${line}]....if 
ad40: 7b 22 2d 6b 65 65 70 6e 65 77 6c 69 6e 65 22 20  {"-keepnewline" 
ad50: 3d 3d 20 24 70 72 65 76 20 26 26 20 32 20 3d 3d  == $prev && 2 ==
ad60: 20 24 70 6f 73 7d 20 7b 0a 09 09 09 09 72 65 74   $pos} {.....ret
ad70: 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74  urn [TryFromList
ad80: 20 24 74 65 78 74 20 22 2d 2d 20 24 65 78 65 63   $text "-- $exec
ad90: 75 74 61 62 6c 65 73 22 5d 0a 09 09 09 7d 0a 09  utables"]....}..
ada0: 09 09 73 77 69 74 63 68 20 2d 65 78 61 63 74 20  ..switch -exact 
adb0: 2d 2d 20 24 70 72 65 76 20 7b 0a 09 09 09 09 7c  -- $prev {.....|
adc0: 20 2d 0a 09 09 09 09 7c 26 20 7b 20 72 65 74 75   -.....|& { retu
add0: 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20  rn [TryFromList 
ade0: 24 74 65 78 74 20 24 65 78 65 63 75 74 61 62 6c  $text $executabl
adf0: 65 73 5d 20 7d 0a 09 09 09 09 3c 20 2d 0a 09 09  es] }.....< -...
ae00: 09 09 3e 20 2d 0a 09 09 09 09 32 3e 20 2d 0a 09  ..> -.....2> -..
ae10: 09 09 09 3e 26 20 2d 0a 09 09 09 09 3e 3e 20 2d  ...>& -.....>> -
ae20: 0a 09 09 09 09 32 3e 3e 20 2d 0a 09 09 09 09 3e  .....2>> -.....>
ae30: 3e 26 20 7b 20 72 65 74 75 72 6e 20 22 22 20 7d  >& { return "" }
ae40: 0a 09 09 09 09 3c 40 20 2d 0a 09 09 09 09 3e 40  .....<@ -.....>@
ae50: 20 2d 0a 09 09 09 09 32 3e 40 20 2d 0a 09 09 09   -.....2>@ -....
ae60: 09 3e 26 40 20 7b 20 72 65 74 75 72 6e 20 5b 43  .>&@ { return [C
ae70: 68 61 6e 6e 65 6c 49 64 20 24 74 65 78 74 5d 20  hannelId $text] 
ae80: 7d 0a 09 09 09 09 3c 3c 20 7b 20 72 65 74 75 72  }.....<< { retur
ae90: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
aea0: 3c 76 61 6c 75 65 3e 5d 20 7d 0a 09 09 09 09 64  <value>] }.....d
aeb0: 65 66 61 75 6c 74 20 7b 20 72 65 74 75 72 6e 20  efault { return 
aec0: 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 74 65  [TryFromList $te
aed0: 78 74 20 24 72 65 64 69 72 20 22 3c 3e 22 5d 20  xt $redir "<>"] 
aee0: 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72  }....}...}..}..r
aef0: 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63  eturn "".}..proc
af00: 20 63 6f 6d 70 6c 65 74 65 28 65 78 69 74 29 20   complete(exit) 
af10: 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
af20: 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
af30: 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20  .switch -- $pos 
af40: 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b  {...1 { return [
af50: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 72 65  DisplayHints ?re
af60: 74 75 72 6e 43 6f 64 65 3f 5d 20 7d 0a 09 7d 0a  turnCode?] }..}.
af70: 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
af80: 6f 63 20 63 6f 6d 70 6c 65 74 65 28 65 78 70 72  oc complete(expr
af90: 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
afa0: 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
afb0: 7b 0a 09 73 65 74 20 6c 65 66 74 20 24 74 65 78  {..set left $tex
afc0: 74 0a 09 73 65 74 20 72 69 67 68 74 20 22 22 0a  t..set right "".
afd0: 09 73 65 74 20 73 75 62 73 74 69 74 75 74 69 6f  .set substitutio
afe0: 6e 20 5b 72 65 67 65 78 70 20 2d 2d 20 7b 28 2e  n [regexp -- {(.
aff0: 2a 29 28 5c 28 2e 2a 29 7d 20 24 74 65 78 74 20  *)(\(.*)} $text 
b000: 61 6c 6c 20 6c 65 66 74 20 72 69 67 68 74 5d 3b  all left right];
b010: 20 23 2d 29 0a 0a 09 73 65 74 20 63 6d 64 73 20   #-)...set cmds 
b020: 7b 0a 09 09 2d 20 2b 20 7e 20 21 20 20 2a 20 2f  {...- + ~ !  * /
b030: 20 25 20 2b 20 2d 20 3c 3c 20 3e 3e 20 3c 20 3e   % + - << >> < >
b040: 20 3c 3d 20 3e 3d 20 3d 3d 20 21 3d 20 26 20 5e   <= >= == != & ^
b050: 20 7c 20 26 26 20 7c 7c 20 3c 78 3f 79 3a 7a 3e   | && || <x?y:z>
b060: 0a 09 09 61 63 6f 73 20 20 20 20 63 6f 73 20 20  ...acos    cos  
b070: 20 20 20 68 79 70 6f 74 20 20 20 73 69 6e 68 20     hypot   sinh 
b080: 0a 09 09 61 73 69 6e 20 20 20 20 63 6f 73 68 20  ...asin    cosh 
b090: 20 20 20 6c 6f 67 20 20 20 20 20 73 71 72 74 20     log     sqrt 
b0a0: 0a 09 09 61 74 61 6e 20 20 20 20 65 78 70 20 20  ...atan    exp  
b0b0: 20 20 20 6c 6f 67 31 30 20 20 20 74 61 6e 20 0a     log10   tan .
b0c0: 09 09 61 74 61 6e 32 20 20 20 66 6c 6f 6f 72 20  ..atan2   floor 
b0d0: 20 20 70 6f 77 20 20 20 20 20 74 61 6e 68 20 0a    pow     tanh .
b0e0: 09 09 63 65 69 6c 20 20 20 20 66 6d 6f 64 20 20  ..ceil    fmod  
b0f0: 20 20 73 69 6e 20 20 20 20 20 61 62 73 20 0a 09    sin     abs ..
b100: 09 64 6f 75 62 6c 65 20 20 69 6e 74 20 20 20 20  .double  int    
b110: 20 72 61 6e 64 20 20 20 20 72 6f 75 6e 64 20 0a   rand    round .
b120: 09 09 73 72 61 6e 64 20 0a 09 7d 0a 0a 09 69 66  ..srand ..}...if
b130: 20 7b 22 29 22 20 3d 3d 20 5b 53 74 72 69 6e 67   {")" == [String
b140: 20 69 6e 64 65 78 20 24 74 65 78 74 20 65 6e 64   index $text end
b150: 5d 20 26 26 20 2d 31 20 21 3d 20 5b 6c 73 65 61  ] && -1 != [lsea
b160: 72 63 68 20 24 63 6d 64 73 20 24 6c 65 66 74 5d  rch $cmds $left]
b170: 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 22 24 74  } {...return "$t
b180: 65 78 74 20 22 3b 20 23 20 61 70 70 65 6e 64 20  ext "; # append 
b190: 61 20 73 70 61 63 65 20 61 66 74 65 72 20 61 20  a space after a 
b1a0: 63 6c 6f 73 69 6e 67 20 27 29 27 0a 09 7d 0a 0a  closing ')'..}..
b1b0: 09 73 77 69 74 63 68 20 2d 2d 20 24 6c 65 66 74  .switch -- $left
b1c0: 20 7b 0a 09 09 72 61 6e 64 20 7b 20 72 65 74 75   {...rand { retu
b1d0: 72 6e 20 22 72 61 6e 64 28 29 20 22 20 7d 0a 0a  rn "rand() " }..
b1e0: 09 09 61 62 73 20 20 2d 0a 09 09 61 63 6f 73 20  ..abs  -...acos 
b1f0: 2d 0a 09 09 61 73 69 6e 20 2d 0a 09 09 61 74 61  -...asin -...ata
b200: 6e 20 2d 0a 09 09 63 65 69 6c 20 20 2d 0a 09 09  n -...ceil  -...
b210: 63 6f 73 20 2d 0a 09 09 63 6f 73 68 20 2d 0a 09  cos -...cosh -..
b220: 09 64 6f 75 62 6c 65 20 2d 0a 09 09 65 78 70 20  .double -...exp 
b230: 2d 0a 09 09 66 6c 6f 6f 72 20 2d 0a 09 09 69 6e  -...floor -...in
b240: 74 20 2d 0a 09 09 6c 6f 67 20 2d 0a 09 09 6c 6f  t -...log -...lo
b250: 67 31 30 20 2d 0a 09 09 72 6f 75 6e 64 20 20 2d  g10 -...round  -
b260: 0a 09 09 73 69 6e 20 20 2d 0a 09 09 73 69 6e 68  ...sin  -...sinh
b270: 20 20 2d 0a 09 09 73 71 72 74 20 20 2d 0a 09 09    -...sqrt  -...
b280: 73 72 61 6e 64 20 20 2d 0a 09 09 74 61 6e 20 20  srand  -...tan  
b290: 2d 0a 09 09 74 61 6e 68 20 7b 20 72 65 74 75 72  -...tanh { retur
b2a0: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
b2b0: 3c 76 61 6c 75 65 3e 5d 20 7d 0a 0a 0a 09 09 61  <value>] }.....a
b2c0: 74 61 6e 32 20 2d 0a 09 09 66 6d 6f 64 20 2d 0a  tan2 -...fmod -.
b2d0: 09 09 68 79 70 6f 74 20 2d 0a 09 09 70 6f 77 20  ..hypot -...pow 
b2e0: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
b2f0: 79 48 69 6e 74 73 20 3c 76 61 6c 75 65 3e 2c 3c  yHints <value>,<
b300: 76 61 6c 75 65 3e 5d 20 7d 0a 09 7d 0a 0a 09 73  value>] }..}...s
b310: 65 74 20 63 6f 6d 70 6c 65 74 69 6f 6e 73 20 5b  et completions [
b320: 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 6c 65 66  TryFromList $lef
b330: 74 20 24 63 6d 64 73 20 3c 3e 5d 0a 09 69 66 20  t $cmds <>]..if 
b340: 7b 31 20 3d 3d 20 5b 6c 6c 65 6e 67 74 68 20 24  {1 == [llength $
b350: 63 6f 6d 70 6c 65 74 69 6f 6e 73 5d 7d 20 7b 0a  completions]} {.
b360: 09 09 69 66 20 7b 21 24 73 75 62 73 74 69 74 75  ..if {!$substitu
b370: 74 69 6f 6e 7d 20 7b 0a 09 09 09 69 66 20 7b 22  tion} {....if {"
b380: 72 61 6e 64 22 20 3d 3d 20 24 63 6f 6d 70 6c 65  rand" == $comple
b390: 74 69 6f 6e 73 7d 20 7b 0a 09 09 09 09 72 65 74  tions} {.....ret
b3a0: 75 72 6e 20 22 72 61 6e 64 28 29 20 22 3b 20 23  urn "rand() "; #
b3b0: 20 72 61 6e 64 28 29 20 74 61 6b 65 73 20 6e 6f   rand() takes no
b3c0: 20 61 72 67 75 6d 65 6e 74 73 0a 09 09 09 7d 0a   arguments....}.
b3d0: 09 09 09 61 70 70 65 6e 64 20 63 6f 6d 70 6c 65  ...append comple
b3e0: 74 69 6f 6e 73 20 28 3b 20 23 2d 29 0a 09 09 09  tions (; #-)....
b3f0: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f  return [list $co
b400: 6d 70 6c 65 74 69 6f 6e 73 20 7b 7d 5d 0a 09 09  mpletions {}]...
b410: 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 72 65  }..} else {...re
b420: 74 75 72 6e 20 24 63 6f 6d 70 6c 65 74 69 6f 6e  turn $completion
b430: 73 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  s..}..return "".
b440: 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
b450: 28 66 62 6c 6f 63 6b 65 64 29 20 7b 74 65 78 74  (fblocked) {text
b460: 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
b470: 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74  pos mod} {..swit
b480: 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31  ch -- $pos {...1
b490: 20 7b 20 72 65 74 75 72 6e 20 5b 49 6e 43 68 61   { return [InCha
b4a0: 6e 6e 65 6c 49 64 20 24 74 65 78 74 5d 20 7d 0a  nnelId $text] }.
b4b0: 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
b4c0: 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 66  .proc complete(f
b4d0: 63 6f 6e 66 69 67 75 72 65 29 20 7b 74 65 78 74  configure) {text
b4e0: 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
b4f0: 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20  pos mod} {..set 
b500: 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e  cmd [Lindex $lin
b510: 65 20 31 5d 0a 09 73 77 69 74 63 68 20 2d 2d 20  e 1]..switch -- 
b520: 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09  $pos {...1 {....
b530: 72 65 74 75 72 6e 20 5b 43 68 61 6e 6e 65 6c 49  return [ChannelI
b540: 64 20 24 7b 74 65 78 74 7d 5d 0a 09 09 7d 0a 09  d ${text}]...}..
b550: 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 73 65  .default {....se
b560: 74 20 6f 70 74 69 6f 6e 20 5b 50 72 65 76 69 6f  t option [Previo
b570: 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20  usWord ${start} 
b580: 24 7b 6c 69 6e 65 7d 5d 0a 09 09 09 73 77 69 74  ${line}]....swit
b590: 63 68 20 2d 2d 20 24 6f 70 74 69 6f 6e 20 7b 0a  ch -- $option {.
b5a0: 09 09 09 09 2d 62 6c 6f 63 6b 69 6e 67 20 7b 0a  ....-blocking {.
b5b0: 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
b5c0: 70 6c 65 74 65 42 6f 6f 6c 65 61 6e 20 24 7b 74  pleteBoolean ${t
b5d0: 65 78 74 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 09  ext}].....}.....
b5e0: 2d 62 75 66 66 65 72 69 6e 67 20 7b 0a 09 09 09  -buffering {....
b5f0: 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
b600: 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
b610: 74 7d 20 7b 66 75 6c 6c 20 6c 69 6e 65 20 6e 6f  t} {full line no
b620: 6e 65 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 2d  ne}].....}.....-
b630: 62 75 66 66 65 72 73 69 7a 65 20 7b 0a 09 09 09  buffersize {....
b640: 09 09 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20  ..if {![llength 
b650: 24 7b 74 65 78 74 7d 5d 7d 20 7b 0a 09 09 09 09  ${text}]} {.....
b660: 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  ..return [Displa
b670: 79 48 69 6e 74 73 20 3c 6e 65 77 53 69 7a 65 3e  yHints <newSize>
b680: 5d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09  ]......}.....}..
b690: 09 09 09 2d 65 6e 63 6f 64 69 6e 67 20 7b 0a 09  ...-encoding {..
b6a0: 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
b6b0: 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
b6c0: 65 78 74 7d 20 5b 65 6e 63 6f 64 69 6e 67 20 6e  ext} [encoding n
b6d0: 61 6d 65 73 5d 5d 0a 09 09 09 09 7d 0a 09 09 09  ames]].....}....
b6e0: 09 2d 65 6f 66 63 68 61 72 20 7b 0a 09 09 09 09  .-eofchar {.....
b6f0: 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79  .return [Display
b700: 48 69 6e 74 73 20 7b 5c 7b 3c 69 6e 43 68 61 72  Hints {\{<inChar
b710: 3e 5c 20 3c 6f 75 74 43 68 61 72 3e 5c 7d 7d 5d  >\ <outChar>\}}]
b720: 0a 09 09 09 09 7d 0a 09 09 09 09 2d 74 72 61 6e  .....}.....-tran
b730: 73 6c 61 74 69 6f 6e 20 7b 0a 09 09 09 09 09 72  slation {......r
b740: 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
b750: 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
b760: 7b 61 75 74 6f 20 62 69 6e 61 72 79 20 63 72 20  {auto binary cr 
b770: 63 72 6c 66 20 6c 66 7d 5d 0a 09 09 09 09 7d 0a  crlf lf}].....}.
b780: 09 09 09 09 64 65 66 61 75 6c 74 20 7b 72 65 74  ....default {ret
b790: 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
b7a0: 6d 4c 69 73 74 20 24 74 65 78 74 20 5c 0a 09 09  mList $text \...
b7b0: 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70  ...[RemoveUsedOp
b7c0: 74 69 6f 6e 73 20 24 6c 69 6e 65 20 7b 0a 09 09  tions $line {...
b7d0: 09 09 09 2d 62 6c 6f 63 6b 69 6e 67 20 2d 62 75  ...-blocking -bu
b7e0: 66 66 65 72 69 6e 67 20 2d 62 75 66 66 65 72 73  ffering -buffers
b7f0: 69 7a 65 0a 09 09 09 09 09 2d 65 6e 63 6f 64 69  ize......-encodi
b800: 6e 67 20 2d 65 6f 66 63 68 61 72 20 2d 74 72 61  ng -eofchar -tra
b810: 6e 73 6c 61 74 69 6f 6e 7d 5d 5d 0a 09 09 09 09  nslation}]].....
b820: 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72  }....}...}..}..r
b830: 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63  eturn "".}..proc
b840: 20 63 6f 6d 70 6c 65 74 65 28 66 63 6f 70 79 29   complete(fcopy)
b850: 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
b860: 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
b870: 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73  ..switch -- $pos
b880: 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65 74 75   {...1 {....retu
b890: 72 6e 20 5b 49 6e 43 68 61 6e 6e 65 6c 49 64 20  rn [InChannelId 
b8a0: 24 7b 74 65 78 74 7d 5d 0a 09 09 7d 0a 09 09 32  ${text}]...}...2
b8b0: 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 4f 75   {....return [Ou
b8c0: 74 43 68 61 6e 6e 65 6c 49 64 20 24 7b 74 65 78  tChannelId ${tex
b8d0: 74 7d 5d 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c  t}]...}...defaul
b8e0: 74 20 7b 0a 09 09 09 73 65 74 20 6f 70 74 69 6f  t {....set optio
b8f0: 6e 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20  n [PreviousWord 
b900: 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d  ${start} ${line}
b910: 5d 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  ]....switch -- $
b920: 6f 70 74 69 6f 6e 20 7b 0a 09 09 09 09 2d 73 69  option {.....-si
b930: 7a 65 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b  ze    { return [
b940: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 69  DisplayHints <si
b950: 7a 65 3e 5d 20 7d 0a 09 09 09 09 2d 63 6f 6d 6d  ze>] }.....-comm
b960: 61 6e 64 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  and { return [Di
b970: 73 70 6c 61 79 48 69 6e 74 73 20 3c 63 61 6c 6c  splayHints <call
b980: 62 61 63 6b 3e 5d 20 7d 0a 09 09 09 09 64 65 66  back>] }.....def
b990: 61 75 6c 74 20 20 7b 20 72 65 74 75 72 6e 20 5b  ault  { return [
b9a0: 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
b9b0: 20 24 74 65 78 74 20 5c 0a 09 09 09 09 09 5b 52   $text \......[R
b9c0: 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
b9d0: 20 24 6c 69 6e 65 20 7b 2d 73 69 7a 65 20 2d 63   $line {-size -c
b9e0: 6f 6d 6d 61 6e 64 7d 5d 5d 0a 09 09 09 09 7d 0a  ommand}]].....}.
b9f0: 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74  ...}...}..}..ret
ba00: 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63  urn "".}..proc c
ba10: 6f 6d 70 6c 65 74 65 28 66 69 6c 65 29 20 7b 74  omplete(file) {t
ba20: 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
ba30: 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
ba40: 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
ba50: 09 09 31 20 7b 0a 09 09 09 73 65 74 20 63 6d 64  ..1 {....set cmd
ba60: 73 20 7b 0a 09 09 09 09 61 74 69 6d 65 20 61 74  s {.....atime at
ba70: 74 72 69 62 75 74 65 73 20 63 68 61 6e 6e 65 6c  tributes channel
ba80: 73 20 63 6f 70 79 20 64 65 6c 65 74 65 20 64 69  s copy delete di
ba90: 72 6e 61 6d 65 20 65 78 65 63 75 74 61 62 6c 65  rname executable
baa0: 20 65 78 69 73 74 73 0a 09 09 09 09 65 78 74 65   exists.....exte
bab0: 6e 73 69 6f 6e 20 69 73 64 69 72 65 63 74 6f 72  nsion isdirector
bac0: 79 20 69 73 66 69 6c 65 20 6a 6f 69 6e 20 6c 73  y isfile join ls
bad0: 74 61 74 20 6d 6b 64 69 72 20 6d 74 69 6d 65 0a  tat mkdir mtime.
bae0: 09 09 09 09 6e 61 74 69 76 65 6e 61 6d 65 20 6f  ....nativename o
baf0: 77 6e 65 64 20 70 61 74 68 74 79 70 65 20 72 65  wned pathtype re
bb00: 61 64 61 62 6c 65 20 72 65 61 64 6c 69 6e 6b 20  adable readlink 
bb10: 72 65 6e 61 6d 65 0a 09 09 09 09 72 6f 6f 74 6e  rename.....rootn
bb20: 61 6d 65 20 73 69 7a 65 20 73 70 6c 69 74 20 73  ame size split s
bb30: 74 61 74 20 74 61 69 6c 20 74 79 70 65 20 76 6f  tat tail type vo
bb40: 6c 75 6d 65 73 20 77 72 69 74 61 62 6c 65 0a 09  lumes writable..
bb50: 09 09 7d 0a 09 09 09 72 65 74 75 72 6e 20 5b 54  ..}....return [T
bb60: 72 79 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  ryFromList $text
bb70: 20 24 63 6d 64 73 5d 0a 09 09 7d 0a 09 09 32 20   $cmds]...}...2 
bb80: 7b 0a 09 09 09 73 65 74 20 63 6d 64 20 5b 4c 69  {....set cmd [Li
bb90: 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a 09 09  ndex $line 1]...
bba0: 09 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64 20  .switch -- $cmd 
bbb0: 7b 0a 09 09 09 09 61 74 69 6d 65 20 2d 0a 09 09  {.....atime -...
bbc0: 09 09 61 74 74 72 69 62 75 74 65 73 20 2d 0a 09  ..attributes -..
bbd0: 09 09 09 63 68 61 6e 6e 65 6c 73 20 2d 0a 09 09  ...channels -...
bbe0: 09 09 64 69 72 6e 61 6d 65 20 2d 0a 09 09 09 09  ..dirname -.....
bbf0: 65 78 65 63 75 74 61 62 6c 65 20 2d 0a 09 09 09  executable -....
bc00: 09 65 78 69 73 74 73 20 2d 0a 09 09 09 09 65 78  .exists -.....ex
bc10: 74 65 6e 73 69 6f 6e 20 2d 0a 09 09 09 09 69 73  tension -.....is
bc20: 64 69 72 65 63 74 6f 72 79 20 2d 0a 09 09 09 09  directory -.....
bc30: 69 73 66 69 6c 65 20 2d 0a 09 09 09 09 6a 6f 69  isfile -.....joi
bc40: 6e 20 2d 0a 09 09 09 09 6c 73 74 61 74 20 2d 0a  n -.....lstat -.
bc50: 09 09 09 09 6d 74 69 6d 65 20 2d 0a 09 09 09 09  ....mtime -.....
bc60: 6d 6b 64 69 72 20 2d 0a 09 09 09 09 6e 61 74 69  mkdir -.....nati
bc70: 76 65 6e 61 6d 65 20 2d 0a 09 09 09 09 6f 77 6e  vename -.....own
bc80: 65 64 20 2d 0a 09 09 09 09 70 61 74 68 74 79 70  ed -.....pathtyp
bc90: 65 20 2d 0a 09 09 09 09 72 65 61 64 61 62 6c 65  e -.....readable
bca0: 20 2d 0a 09 09 09 09 72 65 61 64 6c 69 6e 6b 20   -.....readlink 
bcb0: 2d 0a 09 09 09 09 72 6f 6f 74 6e 61 6d 65 20 2d  -.....rootname -
bcc0: 0a 09 09 09 09 73 69 7a 65 20 2d 0a 09 09 09 09  .....size -.....
bcd0: 73 70 6c 69 74 20 2d 0a 09 09 09 09 73 74 61 74  split -.....stat
bce0: 20 2d 0a 09 09 09 09 74 61 69 6c 20 2d 0a 09 09   -.....tail -...
bcf0: 09 09 74 79 70 65 20 2d 0a 09 09 09 09 76 6f 6c  ..type -.....vol
bd00: 75 6d 65 73 20 2d 0a 09 09 09 09 77 72 69 74 61  umes -.....writa
bd10: 62 6c 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72  ble {......retur
bd20: 6e 20 22 22 0a 09 09 09 09 7d 0a 0a 09 09 09 09  n "".....}......
bd30: 63 6f 70 79 20 2d 0a 09 09 09 09 64 65 6c 65 74  copy -.....delet
bd40: 65 20 2d 0a 09 09 09 09 72 65 6e 61 6d 65 20 7b  e -.....rename {
bd50: 0a 09 09 09 09 09 23 20 72 65 74 75 72 6e 20 5b  ......# return [
bd60: 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  TryFromList $tex
bd70: 74 20 22 2d 66 6f 72 63 65 20 5b 67 6c 6f 62 20  t "-force [glob 
bd80: 2a 5d 22 5d 0a 09 09 09 09 09 23 20 74 68 69 73  *]"]......# this
bd90: 20 69 73 20 6e 6f 74 20 70 65 72 66 65 63 74 2e   is not perfect.
bda0: 20 54 68 65 20 20 60 2d 66 6f 72 63 65 27 20 61   The  `-force' a
bdb0: 6e 64 20 60 2d 2d 27 0a 09 09 09 09 09 23 20 6f  nd `--'......# o
bdc0: 70 74 69 6f 6e 73 20 77 69 6c 6c 20 6e 6f 74 20  ptions will not 
bdd0: 62 65 20 64 69 73 70 6c 61 79 65 64 2e 0a 09 09  be displayed....
bde0: 09 09 09 72 65 74 75 72 6e 20 22 22 0a 09 09 09  ...return ""....
bdf0: 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09  .}....}...}..}..
be00: 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f  return "".}..pro
be10: 63 20 63 6f 6d 70 6c 65 74 65 28 66 69 6c 65 65  c complete(filee
be20: 76 65 6e 74 29 20 7b 74 65 78 74 20 73 74 61 72  vent) {text star
be30: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
be40: 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d  od} {..switch --
be50: 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09   $pos {...1 {...
be60: 09 72 65 74 75 72 6e 20 5b 43 68 61 6e 6e 65 6c  .return [Channel
be70: 49 64 20 24 7b 74 65 78 74 7d 5d 0a 09 09 7d 0a  Id ${text}]...}.
be80: 09 09 32 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  ..2 {....return 
be90: 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
bea0: 74 20 24 7b 74 65 78 74 7d 20 7b 72 65 61 64 61  t ${text} {reada
beb0: 62 6c 65 20 77 72 69 74 61 62 6c 65 7d 5d 0a 09  ble writable}]..
bec0: 09 7d 0a 09 09 33 20 7b 0a 09 09 09 72 65 74 75  .}...3 {....retu
bed0: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
bee0: 20 3f 73 63 72 69 70 74 3f 5d 0a 09 09 7d 0a 09   ?script?]...}..
bef0: 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
bf00: 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 66 6c  proc complete(fl
bf10: 75 73 68 29 20 7b 74 65 78 74 20 73 74 61 72 74  ush) {text start
bf20: 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
bf30: 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20  d} {..switch -- 
bf40: 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74  $pos {...1 { ret
bf50: 75 72 6e 20 5b 4f 75 74 43 68 61 6e 6e 65 6c 49  urn [OutChannelI
bf60: 64 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 7d 0a  d ${text}] }..}.
bf70: 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
bf80: 6f 63 20 63 6f 6d 70 6c 65 74 65 28 66 6f 72 29  oc complete(for)
bf90: 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
bfa0: 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
bfb0: 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73  ..switch -- $pos
bfc0: 20 7b 0a 09 09 31 20 2d 0a 09 09 32 20 2d 0a 09   {...1 -...2 -..
bfd0: 09 33 20 2d 0a 09 09 34 20 7b 0a 09 09 09 72 65  .3 -...4 {....re
bfe0: 74 75 72 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d  turn [BraceOrCom
bff0: 6d 61 6e 64 20 24 74 65 78 74 20 24 73 74 61 72  mand $text $star
c000: 74 20 24 65 6e 64 20 24 6c 69 6e 65 20 24 70 6f  t $end $line $po
c010: 73 20 24 6d 6f 64 5d 0a 09 09 7d 0a 09 7d 0a 09  s $mod]...}..}..
c020: 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f  return "".}..pro
c030: 63 20 63 6f 6d 70 6c 65 74 65 28 66 6f 72 65 61  c complete(forea
c040: 63 68 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  ch) {text start 
c050: 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
c060: 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  } {..switch -- $
c070: 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75  pos {...1 { retu
c080: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
c090: 20 3c 76 61 72 6e 61 6d 65 3e 5d 20 7d 0a 09 09   <varname>] }...
c0a0: 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  2 { return [Disp
c0b0: 6c 61 79 48 69 6e 74 73 20 3c 6c 69 73 74 3e 5d  layHints <list>]
c0c0: 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09   }...default {..
c0d0: 09 09 69 66 20 7b 5b 65 78 70 72 20 24 70 6f 73  ..if {[expr $pos
c0e0: 20 25 20 32 5d 7d 20 7b 0a 09 09 09 09 72 65 74   % 2]} {.....ret
c0f0: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
c100: 73 20 5b 6c 69 73 74 20 3f 76 61 72 6e 61 6d 65  s [list ?varname
c110: 3f 20 3c 62 6f 64 79 3e 5d 5d 0a 09 09 09 7d 20  ? <body>]]....} 
c120: 65 6c 73 65 20 7b 0a 09 09 09 09 72 65 74 75 72  else {.....retur
c130: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
c140: 3f 6c 69 73 74 3f 5d 0a 09 09 09 7d 0a 09 09 7d  ?list?]....}...}
c150: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
c160: 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
c170: 66 6f 72 6d 61 74 29 20 7b 74 65 78 74 20 73 74  format) {text st
c180: 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
c190: 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
c1a0: 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20  -- $pos {...1 { 
c1b0: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
c1c0: 69 6e 74 73 20 3c 66 6f 72 6d 61 74 53 74 72 69  ints <formatStri
c1d0: 6e 67 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74  ng>] }...default
c1e0: 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
c1f0: 61 79 48 69 6e 74 73 20 3f 61 72 67 3f 5d 20 7d  ayHints ?arg?] }
c200: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
c210: 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
c220: 67 65 74 73 29 20 7b 74 65 78 74 20 73 74 61 72  gets) {text star
c230: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
c240: 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d  od} {..switch --
c250: 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65   $pos {...1 { re
c260: 74 75 72 6e 20 5b 49 6e 43 68 61 6e 6e 65 6c 49  turn [InChannelI
c270: 64 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 32  d ${text}] }...2
c280: 20 7b 20 72 65 74 75 72 6e 20 5b 56 61 72 43 6f   { return [VarCo
c290: 6d 70 6c 65 74 69 6f 6e 20 24 7b 74 65 78 74 7d  mpletion ${text}
c2a0: 5d 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22  ]}..}..return ""
c2b0: 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74  .}..proc complet
c2c0: 65 28 67 6c 6f 62 29 20 7b 74 65 78 74 20 73 74  e(glob) {text st
c2d0: 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
c2e0: 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
c2f0: 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a  -- $pos {...1 {.
c300: 09 09 09 23 20 54 68 69 73 20 61 6c 73 6f 20 69  ...# This also i
c310: 73 20 6e 6f 74 20 70 65 72 66 65 63 74 2e 0a 09  s not perfect...
c320: 09 09 23 20 54 68 69 73 20 77 69 6c 6c 20 6e 6f  ..# This will no
c330: 74 20 64 69 73 70 6c 61 79 20 74 68 65 20 6f 70  t display the op
c340: 74 69 6f 6e 73 20 61 73 20 68 69 6e 74 73 21 0a  tions as hints!.
c350: 09 09 09 73 65 74 20 6d 61 74 63 68 65 73 20 5b  ...set matches [
c360: 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  TryFromList ${te
c370: 78 74 7d 20 7b 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  xt} {-nocomplain
c380: 20 2d 2d 7d 5d 0a 09 09 09 69 66 20 7b 5b 6c 6c   --}]....if {[ll
c390: 65 6e 67 74 68 20 5b 73 74 72 69 6e 67 20 74 72  ength [string tr
c3a0: 69 6d 20 24 7b 74 65 78 74 7d 5d 5d 20 26 26 20  im ${text}]] && 
c3b0: 5b 6c 6c 65 6e 67 74 68 20 24 7b 6d 61 74 63 68  [llength ${match
c3c0: 65 73 7d 5d 7d 20 7b 0a 09 09 09 09 72 65 74 75  es}]} {.....retu
c3d0: 72 6e 20 24 7b 6d 61 74 63 68 65 73 7d 0a 09 09  rn ${matches}...
c3e0: 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72  .}...}..}..retur
c3f0: 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d  n "".}..proc com
c400: 70 6c 65 74 65 28 67 6c 6f 62 61 6c 29 20 7b 74  plete(global) {t
c410: 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
c420: 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 72  ne pos mod} {..r
c430: 65 74 75 72 6e 20 5b 56 61 72 43 6f 6d 70 6c 65  eturn [VarComple
c440: 74 69 6f 6e 20 24 7b 74 65 78 74 7d 5d 0a 7d 0a  tion ${text}].}.
c450: 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 68  .proc complete(h
c460: 69 73 74 6f 72 79 29 20 7b 74 65 78 74 20 73 74  istory) {text st
c470: 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
c480: 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
c490: 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a  -- $pos {...1 {.
c4a0: 09 09 09 73 65 74 20 63 6d 64 73 20 7b 61 64 64  ...set cmds {add
c4b0: 20 63 68 61 6e 67 65 20 63 6c 65 61 72 20 65 76   change clear ev
c4c0: 65 6e 74 20 69 6e 66 6f 20 6b 65 65 70 20 6e 65  ent info keep ne
c4d0: 78 74 69 64 20 72 65 64 6f 7d 0a 09 09 09 72 65  xtid redo}....re
c4e0: 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73  turn [TryFromLis
c4f0: 74 20 24 74 65 78 74 20 24 63 6d 64 73 5d 0a 09  t $text $cmds]..
c500: 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73 65 74 20  .}...2 {....set 
c510: 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e  cmd [Lindex $lin
c520: 65 20 31 5d 0a 09 09 09 73 77 69 74 63 68 20 2d  e 1]....switch -
c530: 2d 20 24 63 6d 64 20 7b 0a 09 09 09 09 61 64 64  - $cmd {.....add
c540: 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
c550: 61 79 48 69 6e 74 73 20 3c 63 6f 6d 6d 61 6e 64  ayHints <command
c560: 3e 5d 20 7d 0a 09 09 09 09 63 68 61 6e 67 65 20  >] }.....change 
c570: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
c580: 79 48 69 6e 74 73 20 3c 6e 65 77 56 61 6c 75 65  yHints <newValue
c590: 3e 5d 20 7d 0a 0a 09 09 09 09 69 6e 66 6f 20 2d  >] }......info -
c5a0: 0a 09 09 09 09 6b 65 65 70 20 7b 20 72 65 74 75  .....keep { retu
c5b0: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
c5c0: 20 3f 63 6f 75 6e 74 3f 5d 20 7d 0a 0a 09 09 09   ?count?] }.....
c5d0: 09 65 76 65 6e 74 20 2d 0a 09 09 09 09 72 65 64  .event -.....red
c5e0: 6f 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  o { return [Disp
c5f0: 6c 61 79 48 69 6e 74 73 20 3f 65 76 65 6e 74 3f  layHints ?event?
c600: 5d 20 7d 0a 0a 09 09 09 09 63 6c 65 61 72 20 2d  ] }......clear -
c610: 0a 09 09 09 09 6e 65 78 74 69 64 20 7b 20 72 65  .....nextid { re
c620: 74 75 72 6e 20 22 22 20 7d 0a 09 09 09 7d 0a 09  turn "" }....}..
c630: 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22  .}..}..return ""
c640: 0a 7d 0a 0a 23 20 2d 2d 2d 20 48 54 54 50 20 50  .}..# --- HTTP P
c650: 41 43 4b 41 47 45 20 2d 2d 2d 0a 0a 23 20 63 72  ACKAGE ---..# cr
c660: 65 61 74 65 20 61 20 68 74 74 70 20 6e 61 6d 65  eate a http name
c670: 73 70 61 63 65 20 69 6e 73 69 64 65 0a 23 20 74  space inside.# t
c680: 63 6c 72 65 61 64 6c 69 6e 65 20 61 6e 64 20 69  clreadline and i
c690: 6d 70 6f 72 74 20 73 6f 6d 65 20 63 6f 6d 6d 61  mport some comma
c6a0: 6e 64 73 2e 0a 23 0a 6e 61 6d 65 73 70 61 63 65  nds..#.namespace
c6b0: 20 65 76 61 6c 20 68 74 74 70 20 7b 0a 09 63 61   eval http {..ca
c6c0: 74 63 68 20 7b 0a 09 09 6e 61 6d 65 73 70 61 63  tch {...namespac
c6d0: 65 20 69 6d 70 6f 72 74 20 5c 0a 09 09 3a 3a 74  e import \...::t
c6e0: 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 44 69 73 70  clreadline::Disp
c6f0: 6c 61 79 48 69 6e 74 73 20 3a 3a 74 63 6c 72 65  layHints ::tclre
c700: 61 64 6c 69 6e 65 3a 3a 50 72 65 76 69 6f 75 73  adline::Previous
c710: 57 6f 72 64 20 5c 0a 09 09 3a 3a 74 63 6c 72 65  Word \...::tclre
c720: 61 64 6c 69 6e 65 3a 3a 43 6f 6d 70 6c 65 74 65  adline::Complete
c730: 46 72 6f 6d 4c 69 73 74 20 3a 3a 74 63 6c 72 65  FromList ::tclre
c740: 61 64 6c 69 6e 65 3a 3a 43 6f 6d 6d 61 6e 64 43  adline::CommandC
c750: 6f 6d 70 6c 65 74 69 6f 6e 20 5c 0a 09 09 3a 3a  ompletion \...::
c760: 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 52 65 6d  tclreadline::Rem
c770: 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 3a  oveUsedOptions :
c780: 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 48 6f  :tclreadline::Ho
c790: 73 74 4c 69 73 74 20 5c 0a 09 09 3a 3a 74 63 6c  stList \...::tcl
c7a0: 72 65 61 64 6c 69 6e 65 3a 3a 43 68 61 6e 6e 65  readline::Channe
c7b0: 6c 49 64 20 3a 3a 74 63 6c 72 65 61 64 6c 69 6e  lId ::tclreadlin
c7c0: 65 3a 3a 4c 69 6e 64 65 78 20 5c 0a 09 09 3a 3a  e::Lindex \...::
c7d0: 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 43 6f 6d  tclreadline::Com
c7e0: 70 6c 65 74 65 42 6f 6f 6c 65 61 6e 0a 09 7d 0a  pleteBoolean..}.
c7f0: 7d 0a 0a 70 72 6f 63 20 68 74 74 70 3a 3a 63 6f  }..proc http::co
c800: 6d 70 6c 65 74 65 28 63 6f 6e 66 69 67 29 20 7b  mplete(config) {
c810: 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
c820: 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
c830: 73 65 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f  set prev [Previo
c840: 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20  usWord ${start} 
c850: 24 7b 6c 69 6e 65 7d 5d 0a 09 73 77 69 74 63 68  ${line}]..switch
c860: 20 2d 2d 20 24 70 72 65 76 20 7b 0a 09 09 2d 61   -- $prev {...-a
c870: 63 63 65 70 74 20 7b 20 72 65 74 75 72 6e 20 5b  ccept { return [
c880: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6d 69  DisplayHints <mi
c890: 6d 65 74 79 70 65 73 3e 5d 20 7d 0a 09 09 2d 70  metypes>] }...-p
c8a0: 72 6f 78 79 68 6f 73 74 20 7b 0a 09 09 09 72 65  roxyhost {....re
c8b0: 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
c8c0: 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b 48 6f  omList $text [Ho
c8d0: 73 74 4c 69 73 74 5d 5d 0a 09 09 7d 0a 09 09 2d  stList]]...}...-
c8e0: 70 72 6f 78 79 70 6f 72 74 20 7b 20 72 65 74 75  proxyport { retu
c8f0: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
c900: 20 3c 6e 75 6d 62 65 72 3e 5d 20 7d 0a 09 09 2d   <number>] }...-
c910: 70 72 6f 78 79 66 69 6c 74 65 72 20 7b 0a 09 09  proxyfilter {...
c920: 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
c930: 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
c940: 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69  [CommandCompleti
c950: 6f 6e 20 24 74 65 78 74 5d 5d 0a 09 09 7d 0a 09  on $text]]...}..
c960: 09 2d 75 73 65 72 61 67 65 6e 74 20 7b 20 72 65  .-useragent { re
c970: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
c980: 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 09  ts <string>] }..
c990: 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 72 65  .default {....re
c9a0: 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
c9b0: 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b 52 65  omList $text [Re
c9c0: 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20  moveUsedOptions 
c9d0: 24 6c 69 6e 65 20 7b 0a 09 09 09 09 2d 61 63 63  $line {.....-acc
c9e0: 65 70 74 20 2d 70 72 6f 78 79 68 6f 73 74 20 2d  ept -proxyhost -
c9f0: 70 72 6f 78 79 70 6f 72 74 20 2d 70 72 6f 78 79  proxyport -proxy
ca00: 66 69 6c 74 65 72 20 2d 75 73 65 72 61 67 65 6e  filter -useragen
ca10: 74 0a 09 09 09 7d 5d 5d 0a 09 09 7d 0a 09 7d 0a  t....}]]...}..}.
ca20: 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
ca30: 6f 63 20 68 74 74 70 3a 3a 63 6f 6d 70 6c 65 74  oc http::complet
ca40: 65 28 67 65 74 75 72 6c 29 20 7b 74 65 78 74 20  e(geturl) {text 
ca50: 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
ca60: 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63  os mod} {..switc
ca70: 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20  h -- $pos {...1 
ca80: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
ca90: 79 48 69 6e 74 73 20 3c 75 72 6c 3e 5d 20 7d 0a  yHints <url>] }.
caa0: 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 73  ..default {....s
cab0: 65 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75  et prev [Previou
cac0: 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24  sWord ${start} $
cad0: 7b 6c 69 6e 65 7d 5d 0a 09 09 09 73 77 69 74 63  {line}]....switc
cae0: 68 20 2d 2d 20 24 70 72 65 76 20 7b 0a 09 09 09  h -- $prev {....
caf0: 09 2d 62 6c 6f 63 6b 73 69 7a 65 20 7b 20 72 65  .-blocksize { re
cb00: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
cb10: 74 73 20 3c 73 69 7a 65 3e 5d 20 7d 0a 09 09 09  ts <size>] }....
cb20: 09 2d 63 68 61 6e 6e 65 6c 20 7b 20 72 65 74 75  .-channel { retu
cb30: 72 6e 20 5b 43 68 61 6e 6e 65 6c 49 64 20 24 7b  rn [ChannelId ${
cb40: 74 65 78 74 7d 5d 20 7d 0a 09 09 09 09 2d 63 6f  text}] }.....-co
cb50: 6d 6d 61 6e 64 20 2d 0a 09 09 09 09 2d 68 61 6e  mmand -.....-han
cb60: 64 6c 65 72 20 2d 0a 09 09 09 09 2d 70 72 6f 67  dler -.....-prog
cb70: 72 65 73 73 20 7b 0a 09 09 09 09 09 72 65 74 75  ress {......retu
cb80: 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
cb90: 4c 69 73 74 20 24 74 65 78 74 20 5b 43 6f 6d 6d  List $text [Comm
cba0: 61 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 74  andCompletion $t
cbb0: 65 78 74 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09  ext]].....}.....
cbc0: 2d 68 65 61 64 65 72 73 20 7b 20 72 65 74 75 72  -headers { retur
cbd0: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
cbe0: 3c 6b 65 79 76 61 6c 75 65 6c 69 73 74 3e 5d 20  <keyvaluelist>] 
cbf0: 7d 0a 09 09 09 09 2d 71 75 65 72 79 20 7b 20 72  }.....-query { r
cc00: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
cc10: 6e 74 73 20 3c 71 75 65 72 79 3e 5d 20 7d 0a 09  nts <query>] }..
cc20: 09 09 09 2d 74 69 6d 65 6f 75 74 20 7b 20 72 65  ...-timeout { re
cc30: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
cc40: 74 73 20 3c 6d 69 6c 6c 69 73 65 63 6f 6e 64 73  ts <milliseconds
cc50: 3e 5d 20 7d 0a 09 09 09 09 2d 76 61 6c 69 64 61  >] }.....-valida
cc60: 74 65 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d  te { return [Com
cc70: 70 6c 65 74 65 42 6f 6f 6c 65 61 6e 20 24 74 65  pleteBoolean $te
cc80: 78 74 5d 20 7d 0a 09 09 09 09 64 65 66 61 75 6c  xt] }.....defaul
cc90: 74 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  t {......return 
cca0: 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
ccb0: 74 20 24 74 65 78 74 20 5b 52 65 6d 6f 76 65 55  t $text [RemoveU
ccc0: 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65  sedOptions $line
ccd0: 20 7b 0a 09 09 09 09 09 09 2d 62 6c 6f 63 6b 73   {.......-blocks
cce0: 69 7a 65 20 2d 63 68 61 6e 6e 65 6c 20 2d 63 6f  ize -channel -co
ccf0: 6d 6d 61 6e 64 20 2d 68 61 6e 64 6c 65 72 20 2d  mmand -handler -
cd00: 68 65 61 64 65 72 73 0a 09 09 09 09 09 09 2d 70  headers.......-p
cd10: 72 6f 67 72 65 73 73 20 2d 71 75 65 72 79 20 2d  rogress -query -
cd20: 74 69 6d 65 6f 75 74 20 2d 76 61 6c 69 64 61 74  timeout -validat
cd30: 65 0a 09 09 09 09 09 7d 5d 5d 0a 09 09 09 09 7d  e......}]].....}
cd40: 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65  ....}...}..}..re
cd50: 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20  turn "".}..proc 
cd60: 68 74 74 70 3a 3a 63 6f 6d 70 6c 65 74 65 28 66  http::complete(f
cd70: 6f 72 6d 61 74 51 75 65 72 79 29 20 7b 74 65 78  ormatQuery) {tex
cd80: 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
cd90: 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69   pos mod} {..swi
cda0: 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09  tch -- $pos {...
cdb0: 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  1 { return [Disp
cdc0: 6c 61 79 48 69 6e 74 73 20 3c 6b 65 79 3e 5d 20  layHints <key>] 
cdd0: 7d 0a 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b  }...2 { return [
cde0: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 76 61  DisplayHints <va
cdf0: 6c 75 65 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c  lue>] }...defaul
ce00: 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20 5b 65  t {....switch [e
ce10: 78 70 72 20 24 70 6f 73 20 25 20 32 5d 20 7b 0a  xpr $pos % 2] {.
ce20: 09 09 09 09 30 20 7b 20 72 65 74 75 72 6e 20 5b  ....0 { return [
ce30: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 76 61  DisplayHints ?va
ce40: 6c 75 65 3f 5d 20 7d 0a 09 09 09 09 31 20 7b 20  lue?] }.....1 { 
ce50: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
ce60: 69 6e 74 73 20 3f 6b 65 79 3f 5d 20 7d 0a 09 09  ints ?key?] }...
ce70: 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72  .}...}..}..retur
ce80: 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 68 74 74  n "".}..proc htt
ce90: 70 3a 3a 63 6f 6d 70 6c 65 74 65 28 72 65 73 65  p::complete(rese
cea0: 74 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  t) {text start e
ceb0: 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
cec0: 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70   {..switch -- $p
ced0: 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72  os {...1 { retur
cee0: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
cef0: 3c 74 6f 6b 65 6e 3e 5d 20 7d 0a 09 09 32 20 7b  <token>] }...2 {
cf00: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
cf10: 48 69 6e 74 73 20 3f 77 68 79 3f 5d 20 7d 0a 09  Hints ?why?] }..
cf20: 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
cf30: 23 20 74 68 65 20 75 6e 6b 6e 6f 77 6e 20 70 72  # the unknown pr
cf40: 6f 63 20 68 61 6e 64 6c 65 73 20 74 68 65 20 72  oc handles the r
cf50: 65 73 74 0a 23 0a 70 72 6f 63 20 68 74 74 70 3a  est.#.proc http:
cf60: 3a 63 6f 6d 70 6c 65 74 65 28 74 63 6c 72 65 61  :complete(tclrea
cf70: 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65 74 65 5f 75  dline_complete_u
cf80: 6e 6b 6e 6f 77 6e 29 20 7b 74 65 78 74 20 73 74  nknown) {text st
cf90: 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
cfa0: 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 63 6d 64   mod} {..set cmd
cfb0: 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 30   [Lindex $line 0
cfc0: 5d 0a 09 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  ]..regsub -all {
cfd0: 5e 2e 2a 3a 3a 7d 20 24 63 6d 64 20 22 22 20 63  ^.*::} $cmd "" c
cfe0: 6d 64 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70  md..switch -- $p
cff0: 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09 73 77  os {...1 {....sw
d000: 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 09  itch -- $cmd {..
d010: 09 09 09 72 65 73 65 74 20 2d 0a 09 09 09 09 77  ...reset -.....w
d020: 61 69 74 20 2d 0a 09 09 09 09 64 61 74 61 20 2d  ait -.....data -
d030: 0a 09 09 09 09 73 74 61 74 75 73 20 2d 0a 09 09  .....status -...
d040: 09 09 63 6f 64 65 20 2d 0a 09 09 09 09 73 69 7a  ..code -.....siz
d050: 65 20 2d 0a 09 09 09 09 63 6c 65 61 6e 75 70 20  e -.....cleanup 
d060: 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44  {......return [D
d070: 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 6f 6b  isplayHints <tok
d080: 65 6e 3e 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a  en>].....}....}.
d090: 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
d0a0: 22 0a 7d 0a 0a 23 20 2d 2d 2d 20 45 4e 44 20 4f  ".}..# --- END O
d0b0: 46 20 48 54 54 50 20 50 41 43 4b 41 47 45 20 2d  F HTTP PACKAGE -
d0c0: 2d 2d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74  --..proc complet
d0d0: 65 28 69 66 29 20 7b 74 65 78 74 20 73 74 61 72  e(if) {text star
d0e0: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
d0f0: 6f 64 7d 20 7b 0a 09 23 20 77 65 20 64 6f 6e 27  od} {..# we don'
d100: 74 20 6f 66 66 65 72 20 74 68 65 20 63 6f 6d 70  t offer the comp
d110: 6c 65 74 69 6f 6e 20 60 74 68 65 6e 27 3a 0a 09  letion `then':..
d120: 23 20 69 74 27 73 20 6f 70 74 69 6f 6e 61 6c 2c  # it's optional,
d130: 20 6d 6f 72 65 20 64 69 66 66 69 63 75 6c 74 20   more difficult 
d140: 74 6f 20 70 61 72 73 65 0a 09 23 20 61 6e 64 20  to parse..# and 
d150: 77 68 6f 20 75 73 65 73 20 69 74 20 61 6e 79 77  who uses it anyw
d160: 61 79 3f 0a 09 23 0a 09 73 77 69 74 63 68 20 2d  ay?..#..switch -
d170: 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 2d 0a 09  - $pos {...1 -..
d180: 09 32 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b  .2 {....return [
d190: 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e 64 20 24  BraceOrCommand $
d1a0: 74 65 78 74 20 24 73 74 61 72 74 20 24 65 6e 64  text $start $end
d1b0: 20 24 6c 69 6e 65 20 24 70 6f 73 20 24 6d 6f 64   $line $pos $mod
d1c0: 5d 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c 74 20  ]...}...default 
d1d0: 7b 0a 09 09 09 73 65 74 20 70 72 65 76 20 5b 50  {....set prev [P
d1e0: 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74  reviousWord ${st
d1f0: 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09  art} ${line}]...
d200: 09 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65 76  .switch -- $prev
d210: 20 7b 0a 09 09 09 09 74 68 65 6e 20 2d 0a 09 09   {.....then -...
d220: 09 09 65 6c 73 65 20 2d 0a 09 09 09 09 65 6c 73  ..else -.....els
d230: 65 69 66 20 7b 0a 09 09 09 09 09 72 65 74 75 72  eif {......retur
d240: 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e  n [BraceOrComman
d250: 64 20 5c 0a 09 09 09 09 09 24 74 65 78 74 20 24  d \......$text $
d260: 73 74 61 72 74 20 24 65 6e 64 20 24 6c 69 6e 65  start $end $line
d270: 20 24 70 6f 73 20 24 6d 6f 64 5d 0a 09 09 09 09   $pos $mod].....
d280: 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a  }.....default {.
d290: 09 09 09 09 09 69 66 20 7b 2d 31 20 3d 3d 20 5b  .....if {-1 == [
d2a0: 6c 73 65 61 72 63 68 20 5b 50 72 6f 70 65 72 4c  lsearch [ProperL
d2b0: 69 73 74 20 24 6c 69 6e 65 5d 20 65 6c 73 65 5d  ist $line] else]
d2c0: 7d 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e  } {.......return
d2d0: 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
d2e0: 73 74 20 24 74 65 78 74 20 7b 65 6c 73 65 20 65  st $text {else e
d2f0: 6c 73 65 69 66 7d 5d 0a 09 09 09 09 09 7d 0a 09  lseif}]......}..
d300: 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d  ...}....}...}..}
d310: 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70  ..return "".}..p
d320: 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 69 6e 63  roc complete(inc
d330: 72 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  r) {text start e
d340: 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
d350: 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70   {..switch -- $p
d360: 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09 73 65  os {...1 {....se
d370: 74 20 6d 61 74 63 68 65 73 20 5b 75 70 6c 65 76  t matches [uplev
d380: 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20  el [info level] 
d390: 69 6e 66 6f 20 76 61 72 73 20 24 7b 6d 6f 64 7d  info vars ${mod}
d3a0: 2a 5d 0a 09 09 09 73 65 74 20 69 6e 74 65 67 65  *]....set intege
d3b0: 72 73 20 22 22 0a 09 09 09 23 20 63 68 65 63 6b  rs ""....# check
d3c0: 20 66 6f 72 20 69 6e 74 65 67 65 72 73 0a 09 09   for integers...
d3d0: 09 23 0a 09 09 09 66 6f 72 65 61 63 68 20 6d 61  .#....foreach ma
d3e0: 74 63 68 20 24 6d 61 74 63 68 65 73 20 7b 0a 09  tch $matches {..
d3f0: 09 09 09 69 66 20 7b 5b 75 70 6c 65 76 65 6c 20  ...if {[uplevel 
d400: 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 61 72 72  [info level] arr
d410: 61 79 20 65 78 69 73 74 73 20 24 6d 61 74 63 68  ay exists $match
d420: 5d 7d 20 7b 0a 09 09 09 09 09 63 6f 6e 74 69 6e  ]} {......contin
d430: 75 65 0a 09 09 09 09 7d 0a 09 09 09 09 69 66 20  ue.....}.....if 
d440: 7b 5b 72 65 67 65 78 70 20 7b 5e 5b 30 2d 39 5d  {[regexp {^[0-9]
d450: 2b 24 7d 20 5b 75 70 6c 65 76 65 6c 20 5b 69 6e  +$} [uplevel [in
d460: 66 6f 20 6c 65 76 65 6c 5d 20 73 65 74 20 24 6d  fo level] set $m
d470: 61 74 63 68 5d 5d 7d 20 7b 0a 09 09 09 09 09 6c  atch]]} {......l
d480: 61 70 70 65 6e 64 20 69 6e 74 65 67 65 72 73 20  append integers 
d490: 24 6d 61 74 63 68 0a 09 09 09 09 7d 0a 09 09 09  $match.....}....
d4a0: 7d 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  }....return [Com
d4b0: 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
d4c0: 74 65 78 74 7d 20 24 7b 69 6e 74 65 67 65 72 73  text} ${integers
d4d0: 7d 5d 0a 09 09 7d 0a 09 09 32 20 7b 20 72 65 74  }]...}...2 { ret
d4e0: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
d4f0: 73 20 3f 69 6e 63 72 65 6d 65 6e 74 3f 5d 20 7d  s ?increment?] }
d500: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
d510: 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
d520: 69 6e 66 6f 29 20 7b 74 65 78 74 20 73 74 61 72  info) {text star
d530: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
d540: 6f 64 7d 20 7b 0a 09 73 65 74 20 63 6d 64 20 5b  od} {..set cmd [
d550: 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a  Lindex $line 1].
d560: 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20  .switch -- $pos 
d570: 7b 0a 09 09 31 20 7b 0a 09 09 09 73 65 74 20 63  {...1 {....set c
d580: 6d 64 73 20 7b 0a 09 09 09 09 61 72 67 73 20 62  mds {.....args b
d590: 6f 64 79 20 63 6d 64 63 6f 75 6e 74 20 63 6f 6d  ody cmdcount com
d5a0: 6d 61 6e 64 73 20 63 6f 6d 70 6c 65 74 65 20 64  mands complete d
d5b0: 65 66 61 75 6c 74 20 65 78 69 73 74 73 0a 09 09  efault exists...
d5c0: 09 09 67 6c 6f 62 61 6c 73 20 68 6f 73 74 6e 61  ..globals hostna
d5d0: 6d 65 20 6c 65 76 65 6c 20 6c 69 62 72 61 72 79  me level library
d5e0: 20 6c 6f 61 64 65 64 20 6c 6f 63 61 6c 73 20 6e   loaded locals n
d5f0: 61 6d 65 6f 66 65 78 65 63 75 74 61 62 6c 65 0a  ameofexecutable.
d600: 09 09 09 09 70 61 74 63 68 6c 65 76 65 6c 20 70  ....patchlevel p
d610: 72 6f 63 73 20 73 63 72 69 70 74 20 73 68 61 72  rocs script shar
d620: 65 64 6c 69 62 65 78 74 65 6e 73 69 6f 6e 20 74  edlibextension t
d630: 63 6c 76 65 72 73 69 6f 6e 20 76 61 72 73 7d 0a  clversion vars}.
d640: 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
d650: 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  eteFromList $tex
d660: 74 20 24 63 6d 64 73 5d 0a 09 09 7d 0a 09 09 32  t $cmds]...}...2
d670: 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
d680: 24 63 6d 64 20 7b 0a 09 09 09 09 61 72 67 73 20  $cmd {.....args 
d690: 2d 0a 09 09 09 09 62 6f 64 79 20 2d 0a 09 09 09  -.....body -....
d6a0: 09 64 65 66 61 75 6c 74 20 2d 0a 09 09 09 09 70  .default -.....p
d6b0: 72 6f 63 73 20 7b 20 72 65 74 75 72 6e 20 5b 63  rocs { return [c
d6c0: 6f 6d 70 6c 65 74 65 28 70 72 6f 63 29 20 24 7b  omplete(proc) ${
d6d0: 74 65 78 74 7d 20 30 20 30 20 24 7b 6c 69 6e 65  text} 0 0 ${line
d6e0: 7d 20 31 20 24 7b 6d 6f 64 7d 5d 20 7d 0a 09 09  } 1 ${mod}] }...
d6f0: 09 09 63 6f 6d 70 6c 65 74 65 20 7b 20 72 65 74  ..complete { ret
d700: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
d710: 73 20 3c 63 6f 6d 6d 61 6e 64 3e 5d 20 7d 0a 09  s <command>] }..
d720: 09 09 09 6c 65 76 65 6c 20 7b 20 72 65 74 75 72  ...level { retur
d730: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
d740: 3f 6e 75 6d 62 65 72 3f 5d 20 7d 0a 09 09 09 09  ?number?] }.....
d750: 6c 6f 61 64 65 64 20 7b 20 72 65 74 75 72 6e 20  loaded { return 
d760: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 69  [DisplayHints ?i
d770: 6e 74 65 72 70 3f 5d 20 7d 0a 09 09 09 09 63 6f  nterp?] }.....co
d780: 6d 6d 61 6e 64 73 20 2d 0a 09 09 09 09 65 78 69  mmands -.....exi
d790: 73 74 73 20 2d 0a 09 09 09 09 67 6c 6f 62 61 6c  sts -.....global
d7a0: 73 20 2d 0a 09 09 09 09 6c 6f 63 61 6c 73 20 2d  s -.....locals -
d7b0: 0a 09 09 09 09 76 61 72 73 20 7b 0a 09 09 09 09  .....vars {.....
d7c0: 09 69 66 20 7b 22 65 78 69 73 74 73 22 20 3d 3d  .if {"exists" ==
d7d0: 20 24 63 6d 64 7d 20 7b 0a 09 09 09 09 09 09 73   $cmd} {.......s
d7e0: 65 74 20 64 6f 20 76 61 72 73 0a 09 09 09 09 09  et do vars......
d7f0: 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 73  } else {.......s
d800: 65 74 20 64 6f 20 24 63 6d 64 0a 09 09 09 09 09  et do $cmd......
d810: 7d 0a 09 09 09 09 09 23 20 70 75 74 73 20 73 74  }......# puts st
d820: 64 65 72 72 20 5b 6c 69 73 74 20 63 6f 6d 70 6c  derr [list compl
d830: 65 74 65 28 69 6e 66 6f 29 20 6c 65 76 65 6c 20  ete(info) level 
d840: 3d 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 5d 0a  = [info level]].
d850: 09 09 09 09 09 72 65 74 75 72 6e 20 5c 0a 09 09  .....return \...
d860: 09 09 09 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  ...[CompleteFrom
d870: 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 75 70  List ${text} [up
d880: 6c 65 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65  level [info leve
d890: 6c 5d 20 69 6e 66 6f 20 24 7b 64 6f 7d 5d 5d 0a  l] info ${do}]].
d8a0: 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  ....}....}...}..
d8b0: 09 33 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  .3 {....switch -
d8c0: 2d 20 24 63 6d 64 20 7b 0a 09 09 09 09 64 65 66  - $cmd {.....def
d8d0: 61 75 6c 74 20 7b 0a 09 09 09 09 09 73 65 74 20  ault {......set 
d8e0: 70 72 6f 63 20 5b 4c 69 6e 64 65 78 20 24 6c 69  proc [Lindex $li
d8f0: 6e 65 20 32 5d 0a 09 09 09 09 09 72 65 74 75 72  ne 2]......retur
d900: 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
d910: 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09  ist ${text} \...
d920: 09 09 09 5b 75 70 6c 65 76 65 6c 20 5b 69 6e 66  ...[uplevel [inf
d930: 6f 20 6c 65 76 65 6c 5d 20 69 6e 66 6f 20 61 72  o level] info ar
d940: 67 73 20 24 70 72 6f 63 5d 5d 0a 09 09 09 09 7d  gs $proc]].....}
d950: 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b 7d 0a  .....default {}.
d960: 09 09 09 7d 0a 09 09 7d 0a 09 09 34 20 7b 0a 09  ...}...}...4 {..
d970: 09 09 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64  ..switch -- $cmd
d980: 20 7b 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b   {.....default {
d990: 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 56 61  ......return [Va
d9a0: 72 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 74 65  rCompletion ${te
d9b0: 78 74 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 64  xt}].....}.....d
d9c0: 65 66 61 75 6c 74 20 7b 7d 0a 09 09 09 7d 0a 09  efault {}....}..
d9d0: 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22  .}..}..return ""
d9e0: 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74  .}..proc complet
d9f0: 65 28 69 6e 74 65 72 70 29 20 7b 74 65 78 74 20  e(interp) {text 
da00: 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
da10: 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 63  os mod} {..set c
da20: 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65  md [Lindex $line
da30: 20 31 5d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24   1]..switch -- $
da40: 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09 73  pos {...1 {....s
da50: 65 74 20 63 6d 64 73 20 7b 0a 09 09 09 09 61 6c  et cmds {.....al
da60: 69 61 73 20 61 6c 69 61 73 65 73 20 63 72 65 61  ias aliases crea
da70: 74 65 20 64 65 6c 65 74 65 20 65 76 61 6c 20 65  te delete eval e
da80: 78 69 73 74 73 20 65 78 70 6f 73 65 20 68 69 64  xists expose hid
da90: 65 20 68 69 64 64 65 6e 0a 09 09 09 09 69 6e 76  e hidden.....inv
daa0: 6f 6b 65 68 69 64 64 65 6e 20 69 73 73 61 66 65  okehidden issafe
dab0: 20 6d 61 72 6b 74 72 75 73 74 65 64 20 73 68 61   marktrusted sha
dac0: 72 65 20 73 6c 61 76 65 73 20 74 61 72 67 65 74  re slaves target
dad0: 20 74 72 61 6e 73 66 65 72 7d 0a 09 09 09 72 65   transfer}....re
dae0: 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73  turn [TryFromLis
daf0: 74 20 24 74 65 78 74 20 24 63 6d 64 73 5d 0a 09  t $text $cmds]..
db00: 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73 77 69 74  .}...2 {....swit
db10: 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 0a 09 09  ch -- $cmd {....
db20: 09 09 63 72 65 61 74 65 20 7b 0a 09 09 09 09 09  ..create {......
db30: 73 65 74 20 63 6d 64 73 20 5b 52 65 6d 6f 76 65  set cmds [Remove
db40: 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69  UsedOptions ${li
db50: 6e 65 7d 20 7b 2d 73 61 76 65 20 2d 2d 7d 20 7b  ne} {-save --} {
db60: 2d 2d 7d 5d 0a 09 09 09 09 09 69 66 20 7b 5b 6c  --}]......if {[l
db70: 6c 65 6e 67 74 68 20 24 63 6d 64 73 5d 7d 20 7b  length $cmds]} {
db80: 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  .......return [C
db90: 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
dba0: 24 74 65 78 74 20 22 24 63 6d 64 73 20 3f 70 61  $text "$cmds ?pa
dbb0: 74 68 3f 22 5d 0a 09 09 09 09 09 7d 20 65 6c 73  th?"]......} els
dbc0: 65 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e  e {.......return
dbd0: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
dbe0: 70 61 74 68 3f 5d 0a 09 09 09 09 09 7d 0a 09 09  path?]......}...
dbf0: 09 09 7d 0a 0a 09 09 09 09 65 76 61 6c 20 2d 0a  ..}......eval -.
dc00: 09 09 09 09 65 78 69 73 74 73 20 2d 0a 09 09 09  ....exists -....
dc10: 09 65 78 70 6f 73 65 20 2d 0a 09 09 09 09 68 69  .expose -.....hi
dc20: 64 65 20 2d 0a 09 09 09 09 68 69 64 64 65 6e 20  de -.....hidden 
dc30: 2d 0a 09 09 09 09 69 6e 76 6f 6b 65 68 69 64 64  -.....invokehidd
dc40: 65 6e 20 2d 0a 09 09 09 09 6d 61 72 6b 74 72 75  en -.....marktru
dc50: 73 74 65 64 20 2d 0a 09 09 09 09 74 61 72 67 65  sted -.....targe
dc60: 74 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  t { return [Comp
dc70: 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
dc80: 65 78 74 7d 20 5b 69 6e 74 65 72 70 20 73 6c 61  ext} [interp sla
dc90: 76 65 73 5d 5d 20 7d 0a 0a 09 09 09 09 61 6c 69  ves]] }......ali
dca0: 61 73 65 73 20 2d 0a 09 09 09 09 64 65 6c 65 74  ases -.....delet
dcb0: 65 20 2d 0a 09 09 09 09 69 73 73 61 66 65 20 2d  e -.....issafe -
dcc0: 0a 09 09 09 09 73 6c 61 76 65 73 20 7b 20 72 65  .....slaves { re
dcd0: 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
dce0: 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b  omList ${text} [
dcf0: 69 6e 74 65 72 70 20 73 6c 61 76 65 73 5d 5d 20  interp slaves]] 
dd00: 7d 0a 0a 09 09 09 09 61 6c 69 61 73 20 2d 0a 09  }......alias -..
dd10: 09 09 09 73 68 61 72 65 20 2d 0a 09 09 09 09 74  ...share -.....t
dd20: 72 61 6e 73 66 65 72 20 7b 20 72 65 74 75 72 6e  ransfer { return
dd30: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
dd40: 73 72 63 50 61 74 68 3e 5d 20 7d 0a 09 09 09 7d  srcPath>] }....}
dd50: 0a 09 09 7d 0a 09 09 33 20 7b 0a 09 09 09 73 77  ...}...3 {....sw
dd60: 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 0a  itch -- $cmd {..
dd70: 09 09 09 09 61 6c 69 61 73 20 7b 20 72 65 74 75  ....alias { retu
dd80: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
dd90: 20 3c 73 72 63 43 6d 64 3e 5d 20 7d 0a 0a 09 09   <srcCmd>] }....
dda0: 09 09 63 72 65 61 74 65 20 7b 0a 09 09 09 09 09  ..create {......
ddb0: 73 65 74 20 63 6d 64 73 20 5b 52 65 6d 6f 76 65  set cmds [Remove
ddc0: 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69  UsedOptions ${li
ddd0: 6e 65 7d 20 7b 2d 73 61 76 65 20 2d 2d 7d 20 7b  ne} {-save --} {
dde0: 2d 2d 7d 5d 0a 09 09 09 09 09 69 66 20 7b 5b 6c  --}]......if {[l
ddf0: 6c 65 6e 67 74 68 20 24 63 6d 64 73 5d 7d 20 7b  length $cmds]} {
de00: 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  .......return [C
de10: 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
de20: 24 74 65 78 74 20 22 24 63 6d 64 73 20 3f 70 61  $text "$cmds ?pa
de30: 74 68 3f 22 5d 0a 09 09 09 09 09 7d 20 65 6c 73  th?"]......} els
de40: 65 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e  e {.......return
de50: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
de60: 70 61 74 68 3f 5d 0a 09 09 09 09 09 7d 0a 09 09  path?]......}...
de70: 09 09 7d 0a 0a 09 09 09 09 65 76 61 6c 20 7b 20  ..}......eval { 
de80: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
de90: 69 6e 74 73 20 3c 61 72 67 3e 5d 20 7d 0a 09 09  ints <arg>] }...
dea0: 09 09 64 65 6c 65 74 65 20 7b 20 72 65 74 75 72  ..delete { retur
deb0: 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
dec0: 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 69 6e 74  ist ${text} [int
ded0: 65 72 70 20 73 6c 61 76 65 73 5d 5d 20 7d 0a 0a  erp slaves]] }..
dee0: 09 09 09 09 65 78 70 6f 73 65 20 7b 20 72 65 74  ....expose { ret
def0: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
df00: 73 20 3c 68 69 64 64 65 6e 4e 61 6d 65 3e 5d 20  s <hiddenName>] 
df10: 7d 0a 09 09 09 09 68 69 64 65 20 7b 20 72 65 74  }.....hide { ret
df20: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
df30: 73 20 3c 65 78 70 6f 73 65 64 43 6d 64 4e 61 6d  s <exposedCmdNam
df40: 65 3e 5d 20 7d 0a 0a 09 09 09 09 69 6e 76 6f 6b  e>] }......invok
df50: 65 68 69 64 64 65 6e 20 7b 0a 09 09 09 09 09 72  ehidden {......r
df60: 65 74 75 72 6e 20 5c 0a 09 09 09 09 09 5b 43 6f  eturn \......[Co
df70: 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
df80: 74 65 78 74 20 7b 3f 2d 67 6c 6f 62 61 6c 3f 20  text {?-global? 
df90: 3c 68 69 64 64 65 6e 43 6d 64 4e 61 6d 65 3e 7d  <hiddenCmdName>}
dfa0: 5d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 74 61 72  ].....}......tar
dfb0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  get { return [Di
dfc0: 73 70 6c 61 79 48 69 6e 74 73 20 3c 61 6c 69 61  splayHints <alia
dfd0: 73 3e 5d 20 7d 0a 0a 09 09 09 09 65 78 69 73 74  s>] }......exist
dfe0: 73 20 7b 7d 0a 09 09 09 09 68 69 64 64 65 6e 20  s {}.....hidden 
dff0: 7b 7d 0a 09 09 09 09 6d 61 72 6b 74 72 75 73 74  {}.....marktrust
e000: 65 64 20 7b 7d 0a 09 09 09 09 61 6c 69 61 73 65  ed {}.....aliase
e010: 73 20 7b 7d 0a 09 09 09 09 69 73 73 61 66 65 20  s {}.....issafe 
e020: 7b 7d 0a 09 09 09 09 73 6c 61 76 65 73 20 7b 7d  {}.....slaves {}
e030: 0a 0a 09 09 09 09 73 68 61 72 65 20 2d 0a 09 09  ......share -...
e040: 09 09 74 72 61 6e 73 66 65 72 20 7b 72 65 74 75  ..transfer {retu
e050: 72 6e 20 5b 43 68 61 6e 6e 65 6c 49 64 20 24 7b  rn [ChannelId ${
e060: 74 65 78 74 7d 5d 7d 0a 09 09 09 7d 0a 09 09 7d  text}]}....}...}
e070: 0a 09 09 34 20 7b 0a 09 09 09 73 77 69 74 63 68  ...4 {....switch
e080: 20 2d 2d 20 24 63 6d 64 20 7b 0a 0a 09 09 09 09   -- $cmd {......
e090: 61 6c 69 61 73 20 7b 20 72 65 74 75 72 6e 20 5b  alias { return [
e0a0: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 61  DisplayHints <ta
e0b0: 72 67 65 74 50 61 74 68 3e 5d 20 7d 0a 09 09 09  rgetPath>] }....
e0c0: 09 65 76 61 6c 20 7b 20 72 65 74 75 72 6e 20 5b  .eval { return [
e0d0: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 61 72  DisplayHints ?ar
e0e0: 67 3f 5d 20 7d 0a 0a 09 09 09 09 69 6e 76 6f 6b  g?] }......invok
e0f0: 65 68 69 64 64 65 6e 20 7b 0a 09 09 09 09 09 72  ehidden {......r
e100: 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
e110: 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 3c  romList $text {<
e120: 68 69 64 64 65 6e 43 6d 64 4e 61 6d 65 3e 20 3f  hiddenCmdName> ?
e130: 61 72 67 3f 7d 5d 0a 09 09 09 09 7d 0a 0a 09 09  arg?}].....}....
e140: 09 09 63 72 65 61 74 65 20 7b 0a 09 09 09 09 09  ..create {......
e150: 73 65 74 20 63 6d 64 73 20 5b 52 65 6d 6f 76 65  set cmds [Remove
e160: 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69  UsedOptions ${li
e170: 6e 65 7d 20 7b 2d 73 61 76 65 20 2d 2d 7d 20 7b  ne} {-save --} {
e180: 2d 2d 7d 5d 0a 09 09 09 09 09 69 66 20 7b 5b 6c  --}]......if {[l
e190: 6c 65 6e 67 74 68 20 24 63 6d 64 73 5d 7d 20 7b  length $cmds]} {
e1a0: 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  .......return [C
e1b0: 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
e1c0: 24 74 65 78 74 20 22 24 63 6d 64 73 20 3f 70 61  $text "$cmds ?pa
e1d0: 74 68 3f 22 5d 0a 09 09 09 09 09 7d 20 65 6c 73  th?"]......} els
e1e0: 65 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e  e {.......return
e1f0: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
e200: 70 61 74 68 3f 5d 0a 09 09 09 09 09 7d 0a 09 09  path?]......}...
e210: 09 09 7d 0a 0a 09 09 09 09 65 78 70 6f 73 65 20  ..}......expose 
e220: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
e230: 79 48 69 6e 74 73 20 3f 65 78 70 6f 73 65 64 43  yHints ?exposedC
e240: 6d 64 4e 61 6d 65 3f 5d 20 7d 0a 09 09 09 09 68  mdName?] }.....h
e250: 69 64 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ide { return [Di
e260: 73 70 6c 61 79 48 69 6e 74 73 20 3f 68 69 64 64  splayHints ?hidd
e270: 65 6e 43 6d 64 4e 61 6d 65 3f 5d 20 7d 0a 0a 09  enCmdName?] }...
e280: 09 09 09 73 68 61 72 65 20 2d 0a 09 09 09 09 74  ...share -.....t
e290: 72 61 6e 73 66 65 72 20 7b 20 72 65 74 75 72 6e  ransfer { return
e2a0: 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
e2b0: 73 74 20 24 7b 74 65 78 74 7d 20 5b 69 6e 74 65  st ${text} [inte
e2c0: 72 70 20 73 6c 61 76 65 73 5d 5d 20 7d 0a 09 09  rp slaves]] }...
e2d0: 09 7d 0a 09 09 7d 0a 09 09 35 20 7b 0a 09 09 09  .}...}...5 {....
e2e0: 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b  switch -- $cmd {
e2f0: 0a 0a 09 09 09 09 61 6c 69 61 73 20 7b 20 72 65  ......alias { re
e300: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
e310: 74 73 20 3c 74 61 72 67 65 74 43 6d 64 3e 5d 20  ts <targetCmd>] 
e320: 7d 0a 09 09 09 09 69 6e 76 6f 6b 65 68 69 64 64  }.....invokehidd
e330: 65 6e 20 2d 0a 09 09 09 09 65 76 61 6c 20 7b 20  en -.....eval { 
e340: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
e350: 69 6e 74 73 20 3f 61 72 67 3f 5d 20 7d 0a 0a 09  ints ?arg?] }...
e360: 09 09 09 65 78 70 6f 73 65 20 7b 20 72 65 74 75  ...expose { retu
e370: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
e380: 20 3f 65 78 70 6f 73 65 64 43 6d 64 4e 61 6d 65   ?exposedCmdName
e390: 3f 5d 20 7d 0a 09 09 09 09 68 69 64 65 20 7b 20  ?] }.....hide { 
e3a0: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
e3b0: 69 6e 74 73 20 3f 68 69 64 64 65 6e 43 6d 64 4e  ints ?hiddenCmdN
e3c0: 61 6d 65 3f 5d 20 7d 0a 0a 09 09 09 09 73 68 61  ame?] }......sha
e3d0: 72 65 20 2d 0a 09 09 09 09 74 72 61 6e 73 66 65  re -.....transfe
e3e0: 72 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  r { return [Comp
e3f0: 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
e400: 65 78 74 7d 20 5b 69 6e 74 65 72 70 20 73 6c 61  ext} [interp sla
e410: 76 65 73 5d 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d  ves]] }....}...}
e420: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
e430: 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
e440: 6a 6f 69 6e 29 20 7b 74 65 78 74 20 73 74 61 72  join) {text star
e450: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
e460: 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d  od} {..switch --
e470: 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65   $pos {...1 { re
e480: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
e490: 74 73 20 3c 6c 69 73 74 3e 5d 20 7d 0a 09 09 32  ts <list>] }...2
e4a0: 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
e4b0: 61 79 48 69 6e 74 73 20 3f 6a 6f 69 6e 53 74 72  ayHints ?joinStr
e4c0: 69 6e 67 3f 5d 20 7d 0a 09 7d 0a 09 72 65 74 75  ing?] }..}..retu
e4d0: 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f  rn "".}..proc co
e4e0: 6d 70 6c 65 74 65 28 6c 61 70 70 65 6e 64 29 20  mplete(lappend) 
e4f0: 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
e500: 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
e510: 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20  .switch -- $pos 
e520: 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b  {...1 { return [
e530: 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b  VarCompletion ${
e540: 74 65 78 74 7d 5d 20 7d 0a 09 09 64 65 66 61 75  text}] }...defau
e550: 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b 54 72 79  lt { return [Try
e560: 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
e570: 20 3f 76 61 6c 75 65 3f 5d 20 7d 0a 09 7d 0a 09   ?value?] }..}..
e580: 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 23 20 74  return "".}..# t
e590: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75  he following rou
e5a0: 74 69 6e 65 73 20 61 72 65 20 64 65 73 63 72 69  tines are descri
e5b0: 62 65 64 20 69 6e 20 74 68 65 0a 23 20 60 6c 69  bed in the.# `li
e5c0: 62 72 61 72 79 27 20 6d 61 6e 20 70 61 67 65 2e  brary' man page.
e5d0: 0a 23 20 2d 2d 2d 20 4c 49 42 52 41 52 59 20 2d  .# --- LIBRARY -
e5e0: 2d 2d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74  --..proc complet
e5f0: 65 28 61 75 74 6f 5f 65 78 65 63 6f 6b 29 20 7b  e(auto_execok) {
e600: 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
e610: 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
e620: 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
e630: 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...1 { return [D
e640: 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 63 6d 64  isplayHints <cmd
e650: 3e 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  >] }..}..return 
e660: 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  "".}..proc compl
e670: 65 74 65 28 61 75 74 6f 5f 6c 6f 61 64 29 20 7b  ete(auto_load) {
e680: 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
e690: 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
e6a0: 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
e6b0: 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...1 { return [D
e6c0: 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 63 6d 64  isplayHints <cmd
e6d0: 3e 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  >] }..}..return 
e6e0: 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  "".}..proc compl
e6f0: 65 74 65 28 61 75 74 6f 5f 6d 6b 69 6e 64 65 78  ete(auto_mkindex
e700: 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
e710: 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
e720: 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f  {..switch -- $po
e730: 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e  s {...1 { return
e740: 20 22 22 20 7d 0a 09 09 64 65 66 61 75 6c 74 20   "" }...default 
e750: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
e760: 79 48 69 6e 74 73 20 3f 70 61 74 74 65 72 6e 3f  yHints ?pattern?
e770: 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ] }..}..return "
e780: 22 0a 7d 0a 0a 23 20 70 72 6f 63 20 63 6f 6d 70  ".}..# proc comp
e790: 6c 65 74 65 28 61 75 74 6f 5f 72 65 73 65 74 29  lete(auto_reset)
e7a0: 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
e7b0: 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
e7c0: 0a 23 20 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  .# }..proc compl
e7d0: 65 74 65 28 74 63 6c 5f 66 69 6e 64 4c 69 62 72  ete(tcl_findLibr
e7e0: 61 72 79 29 20 7b 74 65 78 74 20 73 74 61 72 74  ary) {text start
e7f0: 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
e800: 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20  d} {..switch -- 
e810: 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74  $pos {...1 { ret
e820: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
e830: 73 20 3c 62 61 73 65 6e 61 6d 65 3e 5d 20 7d 0a  s <basename>] }.
e840: 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..2 { return [Di
e850: 73 70 6c 61 79 48 69 6e 74 73 20 3c 76 65 72 73  splayHints <vers
e860: 69 6f 6e 3e 5d 20 7d 0a 09 09 33 20 7b 20 72 65  ion>] }...3 { re
e870: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
e880: 74 73 20 3c 70 61 74 63 68 3e 5d 20 7d 0a 09 09  ts <patch>] }...
e890: 34 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  4 { return [Disp
e8a0: 6c 61 79 48 69 6e 74 73 20 3c 69 6e 69 74 53 63  layHints <initSc
e8b0: 72 69 70 74 3e 5d 20 7d 0a 09 09 35 20 7b 20 72  ript>] }...5 { r
e8c0: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
e8d0: 6e 74 73 20 3c 65 6e 56 61 72 4e 61 6d 65 3e 5d  nts <enVarName>]
e8e0: 20 7d 0a 09 09 36 20 7b 20 72 65 74 75 72 6e 20   }...6 { return 
e8f0: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 76  [DisplayHints <v
e900: 61 72 4e 61 6d 65 3e 5d 20 7d 0a 09 7d 0a 09 72  arName>] }..}..r
e910: 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63  eturn "".}..proc
e920: 20 63 6f 6d 70 6c 65 74 65 28 70 61 72 72 61 79   complete(parray
e930: 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
e940: 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
e950: 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f  {..switch -- $po
e960: 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09 73 65 74  s {...1 {....set
e970: 20 76 61 72 73 20 5b 75 70 6c 65 76 65 6c 20 5b   vars [uplevel [
e980: 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 69 6e 66 6f  info level] info
e990: 20 76 61 72 73 5d 0a 09 09 09 66 6f 72 65 61 63   vars]....foreac
e9a0: 68 20 76 61 72 20 24 7b 76 61 72 73 7d 20 7b 0a  h var ${vars} {.
e9b0: 09 09 09 09 69 66 20 7b 5b 75 70 6c 65 76 65 6c  ....if {[uplevel
e9c0: 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 61 72   [info level] ar
e9d0: 72 61 79 20 65 78 69 73 74 73 20 24 7b 76 61 72  ray exists ${var
e9e0: 7d 5d 7d 20 7b 0a 09 09 09 09 09 6c 61 70 70 65  }]} {......lappe
e9f0: 6e 64 20 6d 61 74 63 68 65 73 20 24 7b 76 61 72  nd matches ${var
ea00: 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 09  }.....}....}....
ea10: 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
ea20: 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 24  FromList $text $
ea30: 6d 61 74 63 68 65 73 5d 0a 09 09 7d 0a 09 7d 0a  matches]...}..}.
ea40: 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
ea50: 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74 63 6c 5f  oc complete(tcl_
ea60: 65 6e 64 4f 66 57 6f 72 64 29 20 7b 74 65 78 74  endOfWord) {text
ea70: 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
ea80: 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74  pos mod} {..swit
ea90: 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31  ch -- $pos {...1
eaa0: 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
eab0: 61 79 48 69 6e 74 73 20 3c 73 74 72 3e 5d 20 7d  ayHints <str>] }
eac0: 0a 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...2 { return [D
ead0: 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 61  isplayHints <sta
eae0: 72 74 3e 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72  rt>] }..}..retur
eaf0: 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d  n "".}..proc com
eb00: 70 6c 65 74 65 28 74 63 6c 5f 73 74 61 72 74 4f  plete(tcl_startO
eb10: 66 4e 65 78 74 57 6f 72 64 29 20 7b 74 65 78 74  fNextWord) {text
eb20: 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
eb30: 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 72 65 74 75  pos mod} {..retu
eb40: 72 6e 20 5b 63 6f 6d 70 6c 65 74 65 28 74 63 6c  rn [complete(tcl
eb50: 5f 65 6e 64 4f 66 57 6f 72 64 29 20 24 74 65 78  _endOfWord) $tex
eb60: 74 20 24 73 74 61 72 74 20 24 65 6e 64 20 24 6c  t $start $end $l
eb70: 69 6e 65 20 24 70 6f 73 20 24 6d 6f 64 5d 0a 7d  ine $pos $mod].}
eb80: 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
eb90: 74 63 6c 5f 73 74 61 72 74 4f 66 50 72 65 76 69  tcl_startOfPrevi
eba0: 6f 75 73 57 6f 72 64 29 20 7b 74 65 78 74 20 73  ousWord) {text s
ebb0: 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
ebc0: 73 20 6d 6f 64 7d 20 7b 0a 09 72 65 74 75 72 6e  s mod} {..return
ebd0: 20 5b 63 6f 6d 70 6c 65 74 65 28 74 63 6c 5f 65   [complete(tcl_e
ebe0: 6e 64 4f 66 57 6f 72 64 29 20 24 74 65 78 74 20  ndOfWord) $text 
ebf0: 24 73 74 61 72 74 20 24 65 6e 64 20 24 6c 69 6e  $start $end $lin
ec00: 65 20 24 70 6f 73 20 24 6d 6f 64 5d 0a 7d 0a 0a  e $pos $mod].}..
ec10: 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74 63  proc complete(tc
ec20: 6c 5f 77 6f 72 64 42 72 65 61 6b 41 66 74 65 72  l_wordBreakAfter
ec30: 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
ec40: 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
ec50: 7b 0a 09 72 65 74 75 72 6e 20 5b 63 6f 6d 70 6c  {..return [compl
ec60: 65 74 65 28 74 63 6c 5f 65 6e 64 4f 66 57 6f 72  ete(tcl_endOfWor
ec70: 64 29 20 24 74 65 78 74 20 24 73 74 61 72 74 20  d) $text $start 
ec80: 24 65 6e 64 20 24 6c 69 6e 65 20 24 70 6f 73 20  $end $line $pos 
ec90: 24 6d 6f 64 5d 0a 7d 0a 0a 70 72 6f 63 20 63 6f  $mod].}..proc co
eca0: 6d 70 6c 65 74 65 28 74 63 6c 5f 77 6f 72 64 42  mplete(tcl_wordB
ecb0: 72 65 61 6b 42 65 66 6f 72 65 29 20 7b 74 65 78  reakBefore) {tex
ecc0: 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
ecd0: 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 72 65 74   pos mod} {..ret
ece0: 75 72 6e 20 5b 63 6f 6d 70 6c 65 74 65 28 74 63  urn [complete(tc
ecf0: 6c 5f 65 6e 64 4f 66 57 6f 72 64 29 20 24 74 65  l_endOfWord) $te
ed00: 78 74 20 24 73 74 61 72 74 20 24 65 6e 64 20 24  xt $start $end $
ed10: 6c 69 6e 65 20 24 70 6f 73 20 24 6d 6f 64 5d 0a  line $pos $mod].
ed20: 7d 0a 0a 23 20 2d 2d 2d 20 45 4e 44 20 4f 46 20  }..# --- END OF 
ed30: 60 4c 49 42 52 41 52 59 27 20 2d 2d 2d 0a 0a 70  `LIBRARY' ---..p
ed40: 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6c 69 6e  roc complete(lin
ed50: 64 65 78 29 20 7b 74 65 78 74 20 73 74 61 72 74  dex) {text start
ed60: 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
ed70: 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20  d} {..switch -- 
ed80: 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74  $pos {...1 { ret
ed90: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
eda0: 73 20 3c 6c 69 73 74 3e 5d 20 7d 0a 09 09 32 20  s <list>] }...2 
edb0: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
edc0: 79 48 69 6e 74 73 20 3c 69 6e 64 65 78 3e 5d 20  yHints <index>] 
edd0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
ede0: 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
edf0: 28 6c 69 6e 73 65 72 74 29 20 7b 74 65 78 74 20  (linsert) {text 
ee00: 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
ee10: 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63  os mod} {..switc
ee20: 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20  h -- $pos {...1 
ee30: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
ee40: 79 48 69 6e 74 73 20 3c 6c 69 73 74 3e 5d 20 7d  yHints <list>] }
ee50: 0a 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...2 { return [D
ee60: 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 69 6e 64  isplayHints <ind
ee70: 65 78 3e 5d 20 7d 0a 09 09 33 20 7b 20 72 65 74  ex>] }...3 { ret
ee80: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
ee90: 73 20 3c 65 6c 65 6d 65 6e 74 3e 5d 20 7d 0a 09  s <element>] }..
eea0: 09 64 65 66 61 75 6c 74 20 7b 20 72 65 74 75 72  .default { retur
eeb0: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
eec0: 3f 65 6c 65 6d 65 6e 74 3f 5d 20 7d 0a 09 7d 0a  ?element?] }..}.
eed0: 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
eee0: 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6c 69 73 74  oc complete(list
eef0: 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
ef00: 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
ef10: 7b 0a 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  {..return [Displ
ef20: 61 79 48 69 6e 74 73 20 3f 61 72 67 3f 5d 0a 7d  ayHints ?arg?].}
ef30: 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
ef40: 6c 6c 65 6e 67 74 68 29 20 7b 74 65 78 74 20 73  llength) {text s
ef50: 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
ef60: 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
ef70: 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b   -- $pos {...1 {
ef80: 0a 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70  ....return [Disp
ef90: 6c 61 79 48 69 6e 74 73 20 3c 6c 69 73 74 3e 5d  layHints <list>]
efa0: 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  ...}..}..return 
efb0: 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  "".}..proc compl
efc0: 65 74 65 28 6c 6f 61 64 29 20 7b 74 65 78 74 20  ete(load) {text 
efd0: 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
efe0: 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63  os mod} {..switc
eff0: 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20  h -- $pos {...1 
f000: 7b 0a 09 09 09 72 65 74 75 72 6e 20 22 22 3b 20  {....return ""; 
f010: 23 20 66 69 6c 65 6e 61 6d 65 0a 09 09 7d 0a 09  # filename...}..
f020: 09 32 20 7b 0a 09 09 09 69 66 20 7b 21 5b 6c 6c  .2 {....if {![ll
f030: 65 6e 67 74 68 20 24 7b 6d 6f 64 7d 5d 7d 20 7b  ength ${mod}]} {
f040: 0a 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73  .....return [Dis
f050: 70 6c 61 79 48 69 6e 74 73 20 3f 70 61 63 6b 61  playHints ?packa
f060: 67 65 4e 61 6d 65 3f 5d 0a 09 09 09 7d 0a 09 09  geName?]....}...
f070: 7d 0a 09 09 33 20 7b 0a 09 09 09 69 66 20 7b 21  }...3 {....if {!
f080: 5b 6c 6c 65 6e 67 74 68 20 24 7b 6d 6f 64 7d 5d  [llength ${mod}]
f090: 7d 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 20 5b  } {.....return [
f0a0: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 69 6e  DisplayHints ?in
f0b0: 74 65 72 70 3f 5d 0a 09 09 09 7d 0a 09 09 7d 0a  terp?]....}...}.
f0c0: 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
f0d0: 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6c  .proc complete(l
f0e0: 72 61 6e 67 65 29 20 7b 74 65 78 74 20 73 74 61  range) {text sta
f0f0: 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
f100: 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d  mod} {..switch -
f110: 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72  - $pos {...1 { r
f120: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
f130: 6e 74 73 20 3c 6c 69 73 74 3e 5d 20 7d 0a 09 09  nts <list>] }...
f140: 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  2 { return [Disp
f150: 6c 61 79 48 69 6e 74 73 20 3c 66 69 72 73 74 3e  layHints <first>
f160: 5d 20 7d 0a 09 09 33 20 7b 20 72 65 74 75 72 6e  ] }...3 { return
f170: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
f180: 6c 61 73 74 3e 5d 20 7d 0a 09 7d 0a 09 72 65 74  last>] }..}..ret
f190: 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63  urn "".}..proc c
f1a0: 6f 6d 70 6c 65 74 65 28 6c 72 65 70 6c 61 63 65  omplete(lreplace
f1b0: 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
f1c0: 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
f1d0: 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f  {..switch -- $po
f1e0: 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e  s {...1 { return
f1f0: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
f200: 6c 69 73 74 3e 5d 20 7d 0a 09 09 32 20 7b 20 72  list>] }...2 { r
f210: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
f220: 6e 74 73 20 3c 66 69 72 73 74 3e 5d 20 7d 0a 09  nts <first>] }..
f230: 09 33 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .3 { return [Dis
f240: 70 6c 61 79 48 69 6e 74 73 20 3c 6c 61 73 74 3e  playHints <last>
f250: 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 20  ] }...default { 
f260: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
f270: 69 6e 74 73 20 3f 65 6c 65 6d 65 6e 74 3f 5d 20  ints ?element?] 
f280: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
f290: 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
f2a0: 28 6c 73 65 61 72 63 68 29 20 7b 74 65 78 74 20  (lsearch) {text 
f2b0: 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
f2c0: 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 6f  os mod} {..set o
f2d0: 70 74 69 6f 6e 73 20 7b 2d 65 78 61 63 74 20 2d  ptions {-exact -
f2e0: 67 6c 6f 62 20 2d 72 65 67 65 78 70 7d 0a 09 73  glob -regexp}..s
f2f0: 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
f300: 09 09 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  ..1 {....return 
f310: 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
f320: 74 20 24 7b 74 65 78 74 7d 20 22 24 6f 70 74 69  t ${text} "$opti
f330: 6f 6e 73 20 3c 6c 69 73 74 3e 22 5d 0a 09 09 7d  ons <list>"]...}
f340: 0a 09 09 32 20 2d 0a 09 09 33 20 2d 0a 09 09 34  ...2 -...3 -...4
f350: 20 7b 0a 09 09 09 73 65 74 20 73 75 62 20 5b 4c   {....set sub [L
f360: 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a 09  index $line 1]..
f370: 09 09 69 66 20 7b 2d 31 20 21 3d 20 5b 6c 73 65  ..if {-1 != [lse
f380: 61 72 63 68 20 24 6f 70 74 69 6f 6e 73 20 24 73  arch $options $s
f390: 75 62 5d 7d 20 7b 0a 09 09 09 09 69 6e 63 72 20  ub]} {.....incr 
f3a0: 70 6f 73 20 2d 31 0a 09 09 09 7d 0a 09 09 09 73  pos -1....}....s
f3b0: 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
f3c0: 09 09 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b  ....1 { return [
f3d0: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c 69  DisplayHints <li
f3e0: 73 74 3e 5d 20 7d 0a 09 09 09 09 32 20 7b 20 72  st>] }.....2 { r
f3f0: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
f400: 6e 74 73 20 3c 70 61 74 74 65 72 6e 3e 5d 20 7d  nts <pattern>] }
f410: 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65  ....}...}..}..re
f420: 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20  turn "".}..proc 
f430: 63 6f 6d 70 6c 65 74 65 28 6c 73 6f 72 74 29 20  complete(lsort) 
f440: 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
f450: 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
f460: 09 73 65 74 20 6f 70 74 69 6f 6e 73 20 5b 52 65  .set options [Re
f470: 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20  moveUsedOptions 
f480: 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 2d 61 73 63  ${line} {...-asc
f490: 69 69 20 2d 64 69 63 74 69 6f 6e 61 72 79 20 2d  ii -dictionary -
f4a0: 69 6e 74 65 67 65 72 20 2d 72 65 61 6c 20 2d 63  integer -real -c
f4b0: 6f 6d 6d 61 6e 64 0a 09 09 2d 69 6e 63 72 65 61  ommand...-increa
f4c0: 73 69 6e 67 20 2d 64 65 63 72 65 61 73 69 6e 67  sing -decreasing
f4d0: 20 2d 69 6e 64 65 78 20 3c 6c 69 73 74 3e 0a 09   -index <list>..
f4e0: 7d 5d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70  }]..switch -- $p
f4f0: 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72  os {...1 { retur
f500: 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
f510: 69 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 6f 70  ist ${text} ${op
f520: 74 69 6f 6e 73 7d 5d 20 7d 0a 09 09 64 65 66 61  tions}] }...defa
f530: 75 6c 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ult {....switch 
f540: 2d 2d 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64  -- [PreviousWord
f550: 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65   ${start} ${line
f560: 7d 5d 20 7b 0a 09 09 09 09 2d 63 6f 6d 6d 61 6e  }] {.....-comman
f570: 64 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  d {......return 
f580: 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
f590: 74 20 24 74 65 78 74 20 5b 43 6f 6d 6d 61 6e 64  t $text [Command
f5a0: 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 74 65 78 74  Completion $text
f5b0: 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 2d 69 6e  ]].....}.....-in
f5c0: 64 65 78 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  dex { return [Di
f5d0: 73 70 6c 61 79 48 69 6e 74 73 20 3c 69 6e 64 65  splayHints <inde
f5e0: 78 3e 5d 20 7d 0a 09 09 09 09 64 65 66 61 75 6c  x>] }.....defaul
f5f0: 74 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  t { return [Comp
f600: 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
f610: 65 78 74 7d 20 24 7b 6f 70 74 69 6f 6e 73 7d 5d  ext} ${options}]
f620: 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09   }....}...}..}..
f630: 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 23 20 2d  return "".}..# -
f640: 2d 2d 20 4d 53 47 43 41 54 20 50 41 43 4b 41 47  -- MSGCAT PACKAG
f650: 45 20 2d 2d 2d 0a 0a 23 20 63 72 65 61 74 65 20  E ---..# create 
f660: 61 20 6d 73 67 63 61 74 20 6e 61 6d 65 73 70 61  a msgcat namespa
f670: 63 65 20 69 6e 73 69 64 65 0a 23 20 74 63 6c 72  ce inside.# tclr
f680: 65 61 64 6c 69 6e 65 20 61 6e 64 20 69 6d 70 6f  eadline and impo
f690: 72 74 20 73 6f 6d 65 20 63 6f 6d 6d 61 6e 64 73  rt some commands
f6a0: 2e 0a 23 0a 6e 61 6d 65 73 70 61 63 65 20 65 76  ..#.namespace ev
f6b0: 61 6c 20 6d 73 67 63 61 74 20 7b 0a 09 63 61 74  al msgcat {..cat
f6c0: 63 68 20 7b 6e 61 6d 65 73 70 61 63 65 20 69 6d  ch {namespace im
f6d0: 70 6f 72 74 20 3a 3a 74 63 6c 72 65 61 64 6c 69  port ::tclreadli
f6e0: 6e 65 3a 3a 44 69 73 70 6c 61 79 48 69 6e 74 73  ne::DisplayHints
f6f0: 7d 0a 7d 0a 0a 70 72 6f 63 20 6d 73 67 63 61 74  }.}..proc msgcat
f700: 3a 3a 63 6f 6d 70 6c 65 74 65 28 6d 63 29 20 7b  ::complete(mc) {
f710: 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
f720: 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
f730: 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
f740: 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...1 { return [D
f750: 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 72 63  isplayHints <src
f760: 2d 73 74 72 69 6e 67 3e 5d 20 7d 0a 09 7d 0a 09  -string>] }..}..
f770: 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f  return "".}..pro
f780: 63 20 6d 73 67 63 61 74 3a 3a 63 6f 6d 70 6c 65  c msgcat::comple
f790: 74 65 28 6d 63 6c 6f 63 61 6c 65 29 20 7b 74 65  te(mclocale) {te
f7a0: 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
f7b0: 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77  e pos mod} {..sw
f7c0: 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09  itch -- $pos {..
f7d0: 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .1 { return [Dis
f7e0: 70 6c 61 79 48 69 6e 74 73 20 3f 6e 65 77 4c 6f  playHints ?newLo
f7f0: 63 61 6c 65 3f 5d 20 7d 0a 09 7d 0a 09 72 65 74  cale?] }..}..ret
f800: 75 72 6e 20 22 22 0a 7d 0a 0a 23 20 70 72 6f 63  urn "".}..# proc
f810: 20 6d 73 67 63 61 74 3a 3a 63 6f 6d 70 6c 65 74   msgcat::complet
f820: 65 28 6d 63 70 72 65 66 65 72 65 6e 63 65 73 29  e(mcpreferences)
f830: 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
f840: 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
f850: 0a 23 20 7d 0a 0a 70 72 6f 63 20 6d 73 67 63 61  .# }..proc msgca
f860: 74 3a 3a 63 6f 6d 70 6c 65 74 65 28 6d 63 6c 6f  t::complete(mclo
f870: 61 64 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  ad) {text start 
f880: 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
f890: 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  } {..switch -- $
f8a0: 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75  pos {...1 { retu
f8b0: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
f8c0: 20 3c 64 69 72 6e 61 6d 65 3e 5d 20 7d 0a 09 7d   <dirname>] }..}
f8d0: 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70  ..return "".}..p
f8e0: 72 6f 63 20 6d 73 67 63 61 74 3a 3a 63 6f 6d 70  roc msgcat::comp
f8f0: 6c 65 74 65 28 6d 63 73 65 74 29 20 7b 74 65 78  lete(mcset) {tex
f900: 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
f910: 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69   pos mod} {..swi
f920: 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09  tch -- $pos {...
f930: 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  1 { return [Disp
f940: 6c 61 79 48 69 6e 74 73 20 3c 6c 6f 63 61 6c 65  layHints <locale
f950: 3e 5d 20 7d 0a 09 09 32 20 7b 20 72 65 74 75 72  >] }...2 { retur
f960: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
f970: 3c 73 72 63 2d 73 74 72 69 6e 67 3e 5d 20 7d 0a  <src-string>] }.
f980: 09 09 33 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..3 { return [Di
f990: 73 70 6c 61 79 48 69 6e 74 73 20 3f 74 72 61 6e  splayHints ?tran
f9a0: 73 6c 61 74 65 2d 73 74 72 69 6e 67 3f 5d 20 7d  slate-string?] }
f9b0: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
f9c0: 0a 0a 70 72 6f 63 20 6d 73 67 63 61 74 3a 3a 63  ..proc msgcat::c
f9d0: 6f 6d 70 6c 65 74 65 28 6d 63 75 6e 6b 6e 6f 77  omplete(mcunknow
f9e0: 6e 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  n) {text start e
f9f0: 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
fa00: 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70   {..switch -- $p
fa10: 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72  os {...1 { retur
fa20: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
fa30: 3c 6c 6f 63 61 6c 65 3e 5d 20 7d 0a 09 09 32 20  <locale>] }...2 
fa40: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
fa50: 79 48 69 6e 74 73 20 3c 73 72 63 2d 73 74 72 69  yHints <src-stri
fa60: 6e 67 3e 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72  ng>] }..}..retur
fa70: 6e 20 22 22 0a 7d 0a 0a 23 20 2d 2d 2d 20 45 4e  n "".}..# --- EN
fa80: 44 20 4f 46 20 4d 53 47 43 41 54 20 50 41 43 4b  D OF MSGCAT PACK
fa90: 41 47 45 20 2d 2d 2d 0a 0a 23 20 54 4f 44 4f 20  AGE ---..# TODO 
faa0: 69 6d 70 6f 72 74 20 21 20 2d 66 6f 72 63 65 0a  import ! -force.
fab0: 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6e 61  proc complete(na
fac0: 6d 65 73 70 61 63 65 29 20 7b 74 65 78 74 20 73  mespace) {text s
fad0: 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
fae0: 73 20 6d 6f 64 7d 20 7b 0a 09 23 20 54 4f 44 4f  s mod} {..# TODO
faf0: 20 64 6f 73 6e 27 74 20 77 6f 72 6b 20 3f 3f 3f   dosn't work ???
fb00: 0a 09 73 65 74 20 73 70 61 63 65 5f 6d 61 74 63  ..set space_matc
fb10: 68 65 73 20 5b 6e 61 6d 65 73 70 61 63 65 20 63  hes [namespace c
fb20: 68 69 6c 64 72 65 6e 20 3a 3a 20 5b 73 74 72 69  hildren :: [stri
fb30: 6e 67 20 74 72 69 6d 20 24 7b 6d 6f 64 7d 2a 5d  ng trim ${mod}*]
fb40: 5d 0a 09 23 20 70 75 74 73 20 5c 6e 73 70 61 63  ]..# puts \nspac
fb50: 65 5f 6d 61 74 63 68 65 73 3d 7c 24 7b 73 70 61  e_matches=|${spa
fb60: 63 65 5f 6d 61 74 63 68 65 73 7d 7c 0a 09 73 65  ce_matches}|..se
fb70: 74 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6c  t cmd [Lindex $l
fb80: 69 6e 65 20 31 5d 0a 09 73 77 69 74 63 68 20 2d  ine 1]..switch -
fb90: 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09  - $pos {...1 {..
fba0: 09 09 73 65 74 20 63 6d 64 73 20 7b 0a 09 09 09  ..set cmds {....
fbb0: 09 63 68 69 6c 64 72 65 6e 20 63 6f 64 65 20 63  .children code c
fbc0: 75 72 72 65 6e 74 20 64 65 6c 65 74 65 20 65 76  urrent delete ev
fbd0: 61 6c 20 65 78 70 6f 72 74 20 66 6f 72 67 65 74  al export forget
fbe0: 0a 09 09 09 09 69 6d 70 6f 72 74 20 69 6e 73 63  .....import insc
fbf0: 6f 70 65 20 6f 72 69 67 69 6e 20 70 61 72 65 6e  ope origin paren
fc00: 74 20 71 75 61 6c 69 66 69 65 72 73 20 74 61 69  t qualifiers tai
fc10: 6c 20 77 68 69 63 68 7d 0a 09 09 09 72 65 74 75  l which}....retu
fc20: 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20  rn [TryFromList 
fc30: 24 74 65 78 74 20 24 63 6d 64 73 5d 0a 09 09 7d  $text $cmds]...}
fc40: 0a 09 09 32 20 7b 0a 09 09 09 73 77 69 74 63 68  ...2 {....switch
fc50: 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 09 09 63   -- $cmd {.....c
fc60: 68 69 6c 64 72 65 6e 20 2d 0a 09 09 09 09 64 65  hildren -.....de
fc70: 6c 65 74 65 20 2d 0a 09 09 09 09 65 76 61 6c 20  lete -.....eval 
fc80: 2d 0a 09 09 09 09 69 6e 73 63 6f 70 65 20 2d 0a  -.....inscope -.
fc90: 09 09 09 09 66 6f 72 67 65 74 20 2d 0a 09 09 09  ....forget -....
fca0: 09 70 61 72 65 6e 74 20 2d 0a 09 09 09 09 71 75  .parent -.....qu
fcb0: 61 6c 69 66 69 65 72 73 20 2d 0a 09 09 09 09 74  alifiers -.....t
fcc0: 61 69 6c 20 7b 0a 09 09 09 09 09 72 65 67 73 75  ail {......regsu
fcd0: 62 20 7b 5e 28 5b 5e 3a 5d 29 7d 20 24 7b 6d 6f  b {^([^:])} ${mo
fce0: 64 7d 20 7b 3a 3a 5c 31 7d 20 6d 6f 64 3b 20 23  d} {::\1} mod; #
fcf0: 20 66 75 6c 6c 20 71 75 61 6c 2e 20 6e 61 6d 65   full qual. name
fd00: 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 54 72  ......return [Tr
fd10: 79 46 72 6f 6d 4c 69 73 74 20 24 7b 6d 6f 64 7d  yFromList ${mod}
fd20: 20 24 73 70 61 63 65 5f 6d 61 74 63 68 65 73 5d   $space_matches]
fd30: 0a 09 09 09 09 7d 0a 09 09 09 09 63 6f 64 65 20  .....}.....code 
fd40: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
fd50: 79 48 69 6e 74 73 20 3c 73 63 72 69 70 74 3e 20  yHints <script> 
fd60: 5d 20 7d 0a 09 09 09 09 63 75 72 72 65 6e 74 20  ] }.....current 
fd70: 7b 7d 0a 09 09 09 09 65 78 70 6f 72 74 20 7b 20  {}.....export { 
fd80: 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
fd90: 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
fda0: 20 7b 2d 63 6c 65 61 72 20 3f 70 61 74 74 65 72   {-clear ?patter
fdb0: 6e 3f 7d 5d 20 7d 0a 09 09 09 09 69 6d 70 6f 72  n?}] }.....impor
fdc0: 74 20 7b 0a 09 09 09 09 09 69 66 20 7b 22 2d 22  t {......if {"-"
fdd0: 20 21 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65   != [string inde
fde0: 78 20 24 7b 6d 6f 64 7d 20 30 5d 7d 20 7b 0a 09  x ${mod} 0]} {..
fdf0: 09 09 09 09 09 72 65 67 73 75 62 20 7b 5e 28 5b  .....regsub {^([
fe00: 5e 3a 5d 29 7d 20 24 7b 6d 6f 64 7d 20 7b 3a 3a  ^:])} ${mod} {::
fe10: 5c 31 7d 20 6d 6f 64 3b 20 23 20 66 75 6c 6c 20  \1} mod; # full 
fe20: 71 75 61 6c 2e 20 6e 61 6d 65 0a 09 09 09 09 09  qual. name......
fe30: 7d 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  }......return [C
fe40: 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
fe50: 24 7b 6d 6f 64 7d 20 22 2d 66 6f 72 63 65 20 24  ${mod} "-force $
fe60: 73 70 61 63 65 5f 6d 61 74 63 68 65 73 22 5d 0a  space_matches"].
fe70: 09 09 09 09 7d 0a 09 09 09 09 6f 72 69 67 69 6e  ....}.....origin
fe80: 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
fe90: 61 79 48 69 6e 74 73 20 3c 63 6f 6d 6d 61 6e 64  ayHints <command
fea0: 3e 5d 20 7d 0a 09 09 09 09 23 20 71 75 61 6c 69  >] }.....# quali
feb0: 66 69 65 72 73 20 2d 0a 09 09 09 09 23 20 74 61  fiers -.....# ta
fec0: 69 6c 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  il { return [Dis
fed0: 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 72 69 6e  playHints <strin
fee0: 67 3e 5d 20 7d 0a 09 09 09 09 77 68 69 63 68 20  g>] }.....which 
fef0: 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
ff00: 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 6d 6f 64  teFromList ${mod
ff10: 7d 20 7b 0a 09 09 09 09 09 2d 63 6f 6d 6d 61 6e  } {......-comman
ff20: 64 20 2d 76 61 72 69 61 62 6c 65 20 3c 6e 61 6d  d -variable <nam
ff30: 65 3e 7d 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a  e>}] }....}...}.
ff40: 09 09 33 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ..3 {....switch 
ff50: 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 09 09 63 68  -- $cmd {.....ch
ff60: 69 6c 64 72 65 6e 20 2d 0a 09 09 09 09 65 78 70  ildren -.....exp
ff70: 6f 72 74 20 2d 0a 09 09 09 09 66 6f 72 67 65 74  ort -.....forget
ff80: 20 2d 0a 09 09 09 09 69 6d 70 6f 72 74 20 7b 20   -.....import { 
ff90: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
ffa0: 69 6e 74 73 20 3f 70 61 74 74 65 72 6e 3f 5d 20  ints ?pattern?] 
ffb0: 7d 0a 09 09 09 09 64 65 6c 65 74 65 20 7b 20 72  }.....delete { r
ffc0: 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69  eturn [TryFromLi
ffd0: 73 74 20 24 7b 6d 6f 64 7d 20 24 73 70 61 63 65  st ${mod} $space
ffe0: 5f 6d 61 74 63 68 65 73 5d 20 7d 0a 09 09 09 09  _matches] }.....
fff0: 65 76 61 6c 20 2d 0a 09 09 09 09 69 6e 73 63 6f  eval -.....insco
10000 70 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  pe {......return
10010 20 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e 64   [BraceOrCommand
10020 20 5c 0a 09 09 09 09 09 24 74 65 78 74 20 24 73   \......$text $s
10030 74 61 72 74 20 24 65 6e 64 20 24 6c 69 6e 65 20  tart $end $line 
10040 24 70 6f 73 20 24 6d 6f 64 5d 0a 09 09 09 09 7d  $pos $mod].....}
10050 0a 09 09 09 09 77 68 69 63 68 20 7b 20 72 65 74  .....which { ret
10060 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
10070 6d 4c 69 73 74 20 24 7b 6d 6f 64 7d 20 7b 2d 76  mList ${mod} {-v
10080 61 72 69 61 62 6c 65 20 3c 6e 61 6d 65 3e 7d 5d  ariable <name>}]
10090 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 34 20   }....}...}...4 
100a0 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  {....switch -- $
100b0 63 6d 64 20 7b 0a 09 09 09 09 65 78 70 6f 72 74  cmd {.....export
100c0 20 2d 0a 09 09 09 09 66 6f 72 67 65 74 20 2d 0a   -.....forget -.
100d0 09 09 09 09 69 6d 70 6f 72 74 20 7b 20 72 65 74  ....import { ret
100e0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
100f0 73 20 3f 70 61 74 74 65 72 6e 3f 5d 20 7d 0a 09  s ?pattern?] }..
10100 09 09 09 64 65 6c 65 74 65 20 7b 20 72 65 74 75  ...delete { retu
10110 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20  rn [TryFromList 
10120 24 7b 6d 6f 64 7d 20 24 73 70 61 63 65 5f 6d 61  ${mod} $space_ma
10130 74 63 68 65 73 5d 20 7d 0a 09 09 09 09 65 76 61  tches] }.....eva
10140 6c 20 2d 0a 09 09 09 09 69 6e 73 63 6f 70 65 20  l -.....inscope 
10150 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
10160 79 48 69 6e 74 73 20 3f 61 72 67 3f 5d 20 7d 0a  yHints ?arg?] }.
10170 09 09 09 09 77 68 69 63 68 20 7b 20 72 65 74 75  ....which { retu
10180 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
10190 4c 69 73 74 20 24 7b 6d 6f 64 7d 20 7b 3c 6e 61  List ${mod} {<na
101a0 6d 65 3e 7d 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d  me>}] }....}...}
101b0 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
101c0 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
101d0 6f 70 65 6e 29 20 7b 74 65 78 74 20 73 74 61 72  open) {text star
101e0 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
101f0 6f 64 7d 20 7b 0a 09 09 23 20 32 20 7b 20 72 65  od} {...# 2 { re
10200 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
10210 74 73 20 3f 61 63 63 65 73 73 3f 5d 20 7d 0a 09  ts ?access?] }..
10220 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
10230 0a 09 09 32 20 7b 0a 09 09 09 73 65 74 20 61 63  ...2 {....set ac
10240 63 65 73 73 20 7b 72 20 72 2b 20 77 20 77 2b 20  cess {r r+ w w+ 
10250 61 20 61 2b 20 0a 09 09 09 09 52 44 4f 4e 4c 59  a a+ .....RDONLY
10260 20 57 52 4f 4e 4c 59 20 52 44 57 52 20 41 50 50   WRONLY RDWR APP
10270 45 4e 44 20 43 52 45 41 54 20 45 58 43 4c 20 4e  END CREAT EXCL N
10280 4f 43 54 54 59 20 4e 4f 4e 42 4c 4f 43 4b 20 54  OCTTY NONBLOCK T
10290 52 55 4e 43 7d 0a 09 09 09 72 65 74 75 72 6e 20  RUNC}....return 
102a0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
102b0 74 20 24 7b 74 65 78 74 7d 20 24 7b 61 63 63 65  t ${text} ${acce
102c0 73 73 7d 5d 0a 09 09 7d 0a 09 09 33 20 7b 20 72  ss}]...}...3 { r
102d0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
102e0 6e 74 73 20 3f 70 65 72 6d 69 73 73 69 6f 6e 73  nts ?permissions
102f0 3f 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  ?] }..}..return 
10300 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  "".}..proc compl
10310 65 74 65 28 70 61 63 6b 61 67 65 29 20 7b 74 65  ete(package) {te
10320 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
10330 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65  e pos mod} {..se
10340 74 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6c  t cmd [Lindex $l
10350 69 6e 65 20 31 5d 0a 09 73 77 69 74 63 68 20 2d  ine 1]..switch -
10360 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09  - $pos {...1 {..
10370 09 09 73 65 74 20 63 6d 64 73 20 7b 0a 09 09 09  ..set cmds {....
10380 09 66 6f 72 67 65 74 20 69 66 6e 65 65 64 65 64  .forget ifneeded
10390 20 6e 61 6d 65 73 20 70 72 65 73 65 6e 74 20 70   names present p
103a0 72 6f 76 69 64 65 20 72 65 71 75 69 72 65 0a 09  rovide require..
103b0 09 09 09 75 6e 6b 6e 6f 77 6e 20 76 63 6f 6d 70  ...unknown vcomp
103c0 61 72 65 20 76 65 72 73 69 6f 6e 73 20 76 73 61  are versions vsa
103d0 74 69 73 66 69 65 73 7d 0a 09 09 09 72 65 74 75  tisfies}....retu
103e0 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20  rn [TryFromList 
103f0 24 74 65 78 74 20 24 63 6d 64 73 5d 0a 09 09 7d  $text $cmds]...}
10400 0a 09 09 32 20 7b 0a 09 09 09 73 77 69 74 63 68  ...2 {....switch
10410 20 2d 2d 20 24 7b 63 6d 64 7d 20 7b 0a 09 09 09   -- ${cmd} {....
10420 09 66 6f 72 67 65 74 20 2d 0a 09 09 09 09 69 66  .forget -.....if
10430 6e 65 65 64 65 64 20 2d 0a 09 09 09 09 70 72 6f  needed -.....pro
10440 76 69 64 65 20 2d 0a 09 09 09 09 76 65 72 73 69  vide -.....versi
10450 6f 6e 73 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  ons { return [Co
10460 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
10470 7b 6d 6f 64 7d 20 5b 70 61 63 6b 61 67 65 20 6e  {mod} [package n
10480 61 6d 65 73 5d 5d 20 7d 0a 09 09 09 09 70 72 65  ames]] }.....pre
10490 73 65 6e 74 20 2d 0a 09 09 09 09 72 65 71 75 69  sent -.....requi
104a0 72 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  re {......return
104b0 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
104c0 73 74 20 24 7b 6d 6f 64 7d 20 22 2d 65 78 61 63  st ${mod} "-exac
104d0 74 20 5b 70 61 63 6b 61 67 65 20 6e 61 6d 65 73  t [package names
104e0 5d 22 5d 20 7d 0a 09 09 09 09 6e 61 6d 65 73 20  ]"] }.....names 
104f0 7b 7d 0a 09 09 09 09 75 6e 6b 6e 6f 77 6e 20 7b  {}.....unknown {
10500 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
10510 48 69 6e 74 73 20 3f 63 6f 6d 6d 61 6e 64 3f 5d  Hints ?command?]
10520 20 7d 0a 09 09 09 09 76 63 6f 6d 70 61 72 65 20   }.....vcompare 
10530 2d 0a 09 09 09 09 76 73 61 74 69 73 66 69 65 73  -.....vsatisfies
10540 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
10550 61 79 48 69 6e 74 73 20 3c 76 65 72 73 69 6f 6e  ayHints <version
10560 31 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  1>] }....}...}..
10570 09 33 20 7b 0a 09 09 09 73 65 74 20 76 65 72 73  .3 {....set vers
10580 69 6f 6e 73 20 22 22 0a 09 09 09 63 61 74 63 68  ions ""....catch
10590 20 5b 6c 69 73 74 20 73 65 74 20 76 65 72 73 69   [list set versi
105a0 6f 6e 73 20 5b 70 61 63 6b 61 67 65 20 76 65 72  ons [package ver
105b0 73 69 6f 6e 73 20 5b 4c 69 6e 64 65 78 20 24 7b  sions [Lindex ${
105c0 6c 69 6e 65 7d 20 32 5d 5d 5d 0a 09 09 09 73 77  line} 2]]]....sw
105d0 69 74 63 68 20 2d 2d 20 24 7b 63 6d 64 7d 20 7b  itch -- ${cmd} {
105e0 0a 09 09 09 09 66 6f 72 67 65 74 20 7b 7d 0a 09  .....forget {}..
105f0 09 09 09 69 66 6e 65 65 64 65 64 20 7b 0a 09 09  ...ifneeded {...
10600 09 09 09 69 66 20 7b 22 22 20 21 3d 20 24 76 65  ...if {"" != $ve
10610 72 73 69 6f 6e 73 7d 20 7b 0a 09 09 09 09 09 09  rsions} {.......
10620 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
10630 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
10640 20 24 7b 76 65 72 73 69 6f 6e 73 7d 5d 0a 09 09   ${versions}]...
10650 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ...} else {.....
10660 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  ..return [Displa
10670 79 48 69 6e 74 73 20 3c 76 65 72 73 69 6f 6e 3e  yHints <version>
10680 5d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09  ]......}.....}..
10690 09 09 09 70 72 6f 76 69 64 65 20 7b 0a 09 09 09  ...provide {....
106a0 09 09 69 66 20 7b 22 22 20 21 3d 20 24 7b 76 65  ..if {"" != ${ve
106b0 72 73 69 6f 6e 73 7d 7d 20 7b 0a 09 09 09 09 09  rsions}} {......
106c0 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
106d0 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
106e0 7d 20 24 7b 76 65 72 73 69 6f 6e 73 7d 5d 0a 09  } ${versions}]..
106f0 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09  ....} else {....
10700 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  ...return [Displ
10710 61 79 48 69 6e 74 73 20 3f 76 65 72 73 69 6f 6e  ayHints ?version
10720 3f 5d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a  ?]......}.....}.
10730 09 09 09 09 76 65 72 73 69 6f 6e 73 20 7b 7d 0a  ....versions {}.
10740 09 09 09 09 70 72 65 73 65 6e 74 20 2d 0a 09 09  ....present -...
10750 09 09 72 65 71 75 69 72 65 20 7b 0a 09 09 09 09  ..require {.....
10760 09 69 66 20 7b 22 2d 65 78 61 63 74 22 20 3d 3d  .if {"-exact" ==
10770 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24   [PreviousWord $
10780 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d  {start} ${line}]
10790 7d 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e  } {.......return
107a0 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
107b0 73 74 20 24 7b 6d 6f 64 7d 20 5b 70 61 63 6b 61  st ${mod} [packa
107c0 67 65 20 6e 61 6d 65 73 5d 5d 0a 09 09 09 09 09  ge names]]......
107d0 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 69  } else {.......i
107e0 66 20 7b 22 22 20 21 3d 20 24 7b 76 65 72 73 69  f {"" != ${versi
107f0 6f 6e 73 7d 7d 20 7b 0a 09 09 09 09 09 09 09 72  ons}} {........r
10800 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
10810 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
10820 24 7b 76 65 72 73 69 6f 6e 73 7d 5d 0a 09 09 09  ${versions}]....
10830 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ...} else {.....
10840 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  ...return [Displ
10850 61 79 48 69 6e 74 73 20 3f 76 65 72 73 69 6f 6e  ayHints ?version
10860 3f 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09  ?].......}......
10870 7d 0a 09 09 09 09 7d 0a 09 09 09 09 6e 61 6d 65  }.....}.....name
10880 73 20 7b 7d 0a 09 09 09 09 75 6e 6b 6e 6f 77 6e  s {}.....unknown
10890 20 7b 7d 0a 09 09 09 09 76 63 6f 6d 70 61 72 65   {}.....vcompare
108a0 20 2d 0a 09 09 09 09 76 73 61 74 69 73 66 69 65   -.....vsatisfie
108b0 73 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  s { return [Disp
108c0 6c 61 79 48 69 6e 74 73 20 3c 76 65 72 73 69 6f  layHints <versio
108d0 6e 32 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a  n2>] }....}...}.
108e0 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
108f0 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 70  .proc complete(p
10900 69 64 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  id) {text start 
10910 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
10920 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  } {..switch -- $
10930 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65  {pos} {...1 { re
10940 74 75 72 6e 20 5b 43 68 61 6e 6e 65 6c 49 64 20  turn [ChannelId 
10950 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 7d 0a 7d 0a  ${text}] }..}.}.
10960 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 70  .proc complete(p
10970 6b 67 5f 6d 6b 49 6e 64 65 78 29 20 7b 74 65 78  kg_mkIndex) {tex
10980 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
10990 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74   pos mod} {..set
109a0 20 63 6d 64 73 20 5b 52 65 6d 6f 76 65 55 73 65   cmds [RemoveUse
109b0 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d  dOptions ${line}
109c0 20 7b 2d 64 69 72 65 63 74 20 2d 6c 6f 61 64 20   {-direct -load 
109d0 2d 76 65 72 62 6f 73 65 20 2d 2d 20 3c 64 69 72  -verbose -- <dir
109e0 3e 7d 20 7b 2d 2d 7d 5d 0a 09 73 65 74 20 72 65  >} {--}]..set re
109f0 73 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b  s [string trim [
10a00 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  TryFromList ${te
10a10 78 74 7d 20 24 7b 63 6d 64 73 7d 5d 5d 0a 09 73  xt} ${cmds}]]..s
10a20 65 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75  et prev [Previou
10a30 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24  sWord ${start} $
10a40 7b 6c 69 6e 65 7d 5d 0a 09 69 66 20 7b 22 2d 6c  {line}]..if {"-l
10a50 6f 61 64 22 20 3d 3d 20 24 7b 70 72 65 76 7d 7d  oad" == ${prev}}
10a60 20 7b 0a 09 09 72 65 74 75 72 6e 20 5b 44 69 73   {...return [Dis
10a70 70 6c 61 79 48 69 6e 74 73 20 3c 70 6b 67 50 61  playHints <pkgPa
10a80 74 3e 5d 0a 09 7d 20 65 6c 73 65 69 66 20 7b 22  t>]..} elseif {"
10a90 2d 2d 22 20 3d 3d 20 24 7b 70 72 65 76 7d 7d 20  --" == ${prev}} 
10aa0 7b 0a 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46  {...return [TryF
10ab0 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
10ac0 3c 64 69 72 3e 5d 0a 09 7d 0a 09 72 65 74 75 72  <dir>]..}..retur
10ad0 6e 20 24 7b 72 65 73 7d 0a 7d 0a 0a 70 72 6f 63  n ${res}.}..proc
10ae0 20 63 6f 6d 70 6c 65 74 65 28 70 72 6f 63 29 20   complete(proc) 
10af0 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
10b00 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
10b10 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73  .switch -- ${pos
10b20 7d 20 7b 0a 09 09 31 20 7b 0a 09 09 09 73 65 74  } {...1 {....set
10b30 20 6b 6e 6f 77 6e 5f 70 72 6f 63 73 20 5b 50 72   known_procs [Pr
10b40 6f 63 73 4f 6e 6c 79 43 6f 6d 70 6c 65 74 69 6f  ocsOnlyCompletio
10b50 6e 20 24 7b 74 65 78 74 7d 5d 0a 09 09 09 72 65  n ${text}]....re
10b60 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
10b70 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24  omList ${text} $
10b80 7b 6b 6e 6f 77 6e 5f 70 72 6f 63 73 7d 5d 0a 09  {known_procs}]..
10b90 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73 65 74 20  .}...2 {....set 
10ba0 70 72 6f 63 20 5b 4c 69 6e 64 65 78 20 24 7b 6c  proc [Lindex ${l
10bb0 69 6e 65 7d 20 31 5d 0a 09 09 09 69 66 20 7b 5b  ine} 1]....if {[
10bc0 63 61 74 63 68 20 7b 73 65 74 20 61 72 67 73 20  catch {set args 
10bd0 5b 75 70 6c 65 76 65 6c 20 5b 69 6e 66 6f 20 6c  [uplevel [info l
10be0 65 76 65 6c 5d 20 69 6e 66 6f 20 61 72 67 73 20  evel] info args 
10bf0 24 7b 70 72 6f 63 7d 5d 7d 5d 7d 20 7b 0a 09 09  ${proc}]}]} {...
10c00 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  ..return [Displa
10c10 79 48 69 6e 74 73 20 3c 61 72 67 73 3e 5d 0a 09  yHints <args>]..
10c20 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 72  ..} else {.....r
10c30 65 74 75 72 6e 20 5b 6c 69 73 74 20 22 5c 7b 24  eturn [list "\{$
10c40 7b 61 72 67 73 7d 5c 7d 22 5d 0a 09 09 09 7d 0a  {args}\}"]....}.
10c50 09 09 7d 0a 09 09 33 20 7b 0a 09 09 09 69 66 20  ..}...3 {....if 
10c60 7b 21 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  {![string length
10c70 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d   [Lindex ${line}
10c80 20 24 7b 70 6f 73 7d 5d 5d 7d 20 7b 0a 09 09 09   ${pos}]]} {....
10c90 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5c 7b  .return [list \{
10ca0 20 7b 7d 5d 3b 20 23 20 5c 7d 0a 09 09 09 7d 20   {}]; # \}....} 
10cb0 65 6c 73 65 20 7b 0a 09 09 09 09 23 20 72 65 74  else {.....# ret
10cc0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
10cd0 73 20 3c 62 6f 64 79 3e 5d 0a 09 09 09 09 72 65  s <body>].....re
10ce0 74 75 72 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d  turn [BraceOrCom
10cf0 6d 61 6e 64 20 5c 0a 09 09 09 09 24 7b 74 65 78  mand \.....${tex
10d00 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 65 6e  t} ${start} ${en
10d10 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73  d} ${line} ${pos
10d20 7d 20 24 7b 6d 6f 64 7d 5d 0a 09 09 09 7d 0a 09  } ${mod}]....}..
10d30 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22  .}..}..return ""
10d40 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74  .}..proc complet
10d50 65 28 70 75 74 73 29 20 7b 74 65 78 74 20 73 74  e(puts) {text st
10d60 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
10d70 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 63 6d 64   mod} {..set cmd
10d80 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31   [Lindex $line 1
10d90 5d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f  ]..switch -- $po
10da0 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65 74  s {...1 {....ret
10db0 75 72 6e 20 5b 4f 75 74 43 68 61 6e 6e 65 6c 49  urn [OutChannelI
10dc0 64 20 24 7b 74 65 78 74 7d 20 22 2d 6e 6f 6e 65  d ${text} "-none
10dd0 77 6c 69 6e 65 22 5d 0a 09 09 7d 0a 09 09 32 20  wline"]...}...2 
10de0 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  {....switch -- $
10df0 63 6d 64 20 7b 0a 09 09 09 09 2d 6e 6f 6e 65 77  cmd {.....-nonew
10e00 6c 69 6e 65 20 7b 20 72 65 74 75 72 6e 20 5b 4f  line { return [O
10e10 75 74 43 68 61 6e 6e 65 6c 49 64 20 24 7b 74 65  utChannelId ${te
10e20 78 74 7d 5d 20 7d 0a 09 09 09 09 64 65 66 61 75  xt}] }.....defau
10e30 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  lt { return [Dis
10e40 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 72 69 6e  playHints <strin
10e50 67 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  g>] }....}...}..
10e60 09 33 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  .3 {....switch -
10e70 2d 20 24 63 6d 64 20 7b 0a 09 09 09 09 2d 6e 6f  - $cmd {.....-no
10e80 6e 65 77 6c 69 6e 65 20 7b 20 72 65 74 75 72 6e  newline { return
10e90 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
10ea0 73 74 72 69 6e 67 3e 5d 20 7d 0a 09 09 09 7d 0a  string>] }....}.
10eb0 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
10ec0 22 0a 7d 0a 0a 23 20 70 72 6f 63 20 63 6f 6d 70  ".}..# proc comp
10ed0 6c 65 74 65 28 70 77 64 29 20 7b 74 65 78 74 20  lete(pwd) {text 
10ee0 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
10ef0 6f 73 20 6d 6f 64 7d 20 7b 0a 23 20 7d 0a 0a 70  os mod} {.# }..p
10f00 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 72 65 61  roc complete(rea
10f10 64 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  d) {text start e
10f20 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
10f30 20 7b 0a 09 73 65 74 20 63 6d 64 20 5b 4c 69 6e   {..set cmd [Lin
10f40 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a 09 73 77  dex $line 1]..sw
10f50 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09  itch -- $pos {..
10f60 09 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b  .1 {....return [
10f70 49 6e 43 68 61 6e 6e 65 6c 49 64 20 24 7b 74 65  InChannelId ${te
10f80 78 74 7d 20 22 2d 6e 6f 6e 65 77 6c 69 6e 65 22  xt} "-nonewline"
10f90 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73  ]...}...2 {....s
10fa0 77 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a  witch -- $cmd {.
10fb0 09 09 09 09 2d 6e 6f 6e 65 77 6c 69 6e 65 20 7b  ....-nonewline {
10fc0 20 72 65 74 75 72 6e 20 5b 49 6e 43 68 61 6e 6e   return [InChann
10fd0 65 6c 49 64 20 24 7b 74 65 78 74 7d 5d 20 7d 0a  elId ${text}] }.
10fe0 09 09 09 09 64 65 66 61 75 6c 74 20 7b 20 72 65  ....default { re
10ff0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
11000 74 73 20 3c 6e 75 6d 43 68 61 72 73 3e 5d 20 7d  ts <numChars>] }
11010 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65  ....}...}..}..re
11020 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20  turn "".}..proc 
11030 63 6f 6d 70 6c 65 74 65 28 72 65 67 65 78 70 29  complete(regexp)
11040 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
11050 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
11060 0a 09 73 65 74 20 70 72 65 76 20 5b 50 72 65 76  ..set prev [Prev
11070 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74  iousWord ${start
11080 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 69 66 20 7b  } ${line}]..if {
11090 5b 6c 6c 65 6e 67 74 68 20 24 7b 70 72 65 76 7d  [llength ${prev}
110a0 5d 20 26 26 20 22 2d 2d 22 20 21 3d 20 24 70 72  ] && "--" != $pr
110b0 65 76 20 26 26 20 5c 0a 09 09 28 22 2d 22 20 3d  ev && \...("-" =
110c0 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20  = [string index 
110d0 24 7b 70 72 65 76 7d 20 30 5d 20 7c 7c 20 31 20  ${prev} 0] || 1 
110e0 3d 3d 20 24 70 6f 73 29 7d 20 7b 0a 09 09 73 65  == $pos)} {...se
110f0 74 20 63 6d 64 73 20 5b 52 65 6d 6f 76 65 55 73  t cmds [RemoveUs
11100 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65  edOptions ${line
11110 7d 20 7b 0a 09 09 09 2d 6e 6f 63 61 73 65 20 2d  } {....-nocase -
11120 69 6e 64 69 63 65 73 20 2d 65 78 70 61 6e 64 65  indices -expande
11130 64 20 2d 6c 69 6e 65 20 0a 09 09 09 2d 6c 69 6e  d -line ....-lin
11140 65 73 74 6f 70 20 2d 6c 69 6e 65 61 6e 63 68 6f  estop -lineancho
11150 72 20 2d 61 62 6f 75 74 20 3c 65 78 70 72 65 73  r -about <expres
11160 73 69 6f 6e 3e 20 2d 2d 7d 20 7b 2d 2d 7d 5d 0a  sion> --} {--}].
11170 09 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24  ..if {[llength $
11180 7b 63 6d 64 73 7d 5d 7d 20 7b 0a 09 09 09 72 65  {cmds}]} {....re
11190 74 75 72 6e 20 5b 73 74 72 69 6e 67 20 74 72 69  turn [string tri
111a0 6d 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  m [CompleteFromL
111b0 69 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 63 6d  ist ${text} ${cm
111c0 64 73 7d 5d 5d 0a 09 09 7d 0a 09 7d 20 65 6c 73  ds}]]...}..} els
111d0 65 20 7b 0a 09 09 73 65 74 20 76 69 72 74 75 61  e {...set virtua
111e0 6c 5f 70 6f 73 20 5b 65 78 70 72 20 24 7b 70 6f  l_pos [expr ${po
111f0 73 7d 20 2d 20 5b 46 69 72 73 74 4e 6f 6e 4f 70  s} - [FirstNonOp
11200 74 69 6f 6e 20 24 7b 6c 69 6e 65 7d 5d 5d 0a 09  tion ${line}]]..
11210 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 76 69 72  .switch -- ${vir
11220 74 75 61 6c 5f 70 6f 73 7d 20 7b 0a 09 09 09 30  tual_pos} {....0
11230 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
11240 61 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e  ayHints <string>
11250 5d 20 7d 0a 09 09 09 31 20 7b 20 72 65 74 75 72  ] }....1 { retur
11260 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
11270 3f 6d 61 74 63 68 56 61 72 3f 5d 20 7d 0a 09 09  ?matchVar?] }...
11280 09 64 65 66 61 75 6c 74 20 7b 20 72 65 74 75 72  .default { retur
11290 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
112a0 3f 73 75 62 4d 61 74 63 68 56 61 72 3f 5d 20 7d  ?subMatchVar?] }
112b0 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  ...}..}..return 
112c0 22 22 0a 7d 0a 0a 23 20 70 72 6f 63 20 63 6f 6d  "".}..# proc com
112d0 70 6c 65 74 65 28 72 65 67 65 78 70 29 20 7b 74  plete(regexp) {t
112e0 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
112f0 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 23 20  ne pos mod} {.# 
11300 20 20 20 20 57 65 27 72 65 20 6e 6f 74 20 6f 6e      We're not on
11310 20 77 69 6e 64 6f 7a 65 20 68 65 72 65 20 2e 2e   windoze here ..
11320 2e 0a 23 20 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70  ..# }..proc comp
11330 6c 65 74 65 28 72 65 67 73 75 62 29 20 7b 74 65  lete(regsub) {te
11340 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
11350 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65  e pos mod} {..se
11360 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73  t prev [Previous
11370 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b  Word ${start} ${
11380 6c 69 6e 65 7d 5d 0a 09 69 66 20 7b 5b 6c 6c 65  line}]..if {[lle
11390 6e 67 74 68 20 24 7b 70 72 65 76 7d 5d 20 26 26  ngth ${prev}] &&
113a0 20 22 2d 2d 22 20 21 3d 20 24 70 72 65 76 20 26   "--" != $prev &
113b0 26 20 5c 0a 09 09 28 22 2d 22 20 3d 3d 20 5b 73  & \...("-" == [s
113c0 74 72 69 6e 67 20 69 6e 64 65 78 20 24 7b 70 72  tring index ${pr
113d0 65 76 7d 20 30 5d 20 7c 7c 20 31 20 3d 3d 20 24  ev} 0] || 1 == $
113e0 7b 70 6f 73 29 7d 7d 20 7b 0a 09 09 73 65 74 20  {pos)}} {...set 
113f0 63 6d 64 73 20 5b 52 65 6d 6f 76 65 55 73 65 64  cmds [RemoveUsed
11400 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20  Options ${line} 
11410 7b 0a 09 09 09 2d 61 6c 6c 20 2d 6e 6f 63 61 73  {....-all -nocas
11420 65 20 2d 2d 7d 20 7b 2d 2d 7d 5d 0a 09 09 69 66  e --} {--}]...if
11430 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 7b 63 6d 64   {[llength ${cmd
11440 73 7d 5d 7d 20 7b 0a 09 09 09 72 65 74 75 72 6e  s}]} {....return
11450 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 43   [string trim [C
11460 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
11470 24 7b 74 65 78 74 7d 20 24 7b 63 6d 64 73 7d 5d  ${text} ${cmds}]
11480 5d 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a  ]...}..} else {.
11490 09 09 73 65 74 20 76 69 72 74 75 61 6c 5f 70 6f  ..set virtual_po
114a0 73 20 5b 65 78 70 72 20 24 7b 70 6f 73 7d 20 2d  s [expr ${pos} -
114b0 20 5b 46 69 72 73 74 4e 6f 6e 4f 70 74 69 6f 6e   [FirstNonOption
114c0 20 24 7b 6c 69 6e 65 7d 5d 5d 0a 09 09 73 77 69   ${line}]]...swi
114d0 74 63 68 20 2d 2d 20 24 7b 76 69 72 74 75 61 6c  tch -- ${virtual
114e0 5f 70 6f 73 7d 20 7b 0a 09 09 09 30 20 7b 20 72  _pos} {....0 { r
114f0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
11500 6e 74 73 20 3c 65 78 70 72 65 73 73 69 6f 6e 3e  nts <expression>
11510 5d 20 7d 0a 09 09 09 31 20 7b 20 72 65 74 75 72  ] }....1 { retur
11520 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
11530 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 09 09 09 32  <string>] }....2
11540 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
11550 61 79 48 69 6e 74 73 20 3c 73 75 62 53 70 65 63  ayHints <subSpec
11560 3e 5d 20 7d 0a 09 09 09 33 20 7b 20 72 65 74 75  >] }....3 { retu
11570 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
11580 20 3c 76 61 72 4e 61 6d 65 3e 5d 20 7d 0a 09 09   <varName>] }...
11590 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
115a0 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
115b0 28 72 65 6e 61 6d 65 29 20 7b 74 65 78 74 20 73  (rename) {text s
115c0 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
115d0 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
115e0 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b   -- $pos {...1 {
115f0 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
11600 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
11610 65 78 74 7d 20 5b 43 6f 6d 6d 61 6e 64 43 6f 6d  ext} [CommandCom
11620 70 6c 65 74 69 6f 6e 20 24 7b 74 65 78 74 7d 5d  pletion ${text}]
11630 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09 72  ]...}...2 {....r
11640 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
11650 6e 74 73 20 3c 6e 65 77 4e 61 6d 65 3e 5d 0a 09  nts <newName>]..
11660 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22  .}..}..return ""
11670 0a 7d 0a 0a 23 20 70 72 6f 63 20 63 6f 6d 70 6c  .}..# proc compl
11680 65 74 65 28 72 65 73 6f 75 72 63 65 29 20 7b 74  ete(resource) {t
11690 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
116a0 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 23 20  ne pos mod} {.# 
116b0 20 20 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20      This is not 
116c0 61 20 6d 61 63 20 2e 2e 2e 0a 23 20 7d 0a 0a 70  a mac ....# }..p
116d0 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 72 65 74  roc complete(ret
116e0 75 72 6e 29 20 7b 74 65 78 74 20 73 74 61 72 74  urn) {text start
116f0 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
11700 64 7d 20 7b 0a 09 23 20 54 4f 44 4f 20 74 68 69  d} {..# TODO thi
11710 73 20 69 73 20 6e 6f 74 20 70 65 72 66 65 63 74  s is not perfect
11720 20 79 65 74 0a 09 73 65 74 20 63 6d 64 73 20 7b   yet..set cmds {
11730 2d 63 6f 64 65 20 2d 65 72 72 6f 72 69 6e 66 6f  -code -errorinfo
11740 20 2d 65 72 72 6f 72 63 6f 64 65 20 3f 73 74 72   -errorcode ?str
11750 69 6e 67 3f 7d 0a 09 73 65 74 20 72 65 73 20 5b  ing?}..set res [
11760 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73  PreviousWord ${s
11770 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09  tart} ${line}]..
11780 73 77 69 74 63 68 20 2d 2d 20 24 7b 72 65 73 7d  switch -- ${res}
11790 20 7b 0a 09 09 2d 65 72 72 6f 72 69 6e 66 6f 20   {...-errorinfo 
117a0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
117b0 79 48 69 6e 74 73 20 3c 69 6e 66 6f 3e 5d 20 7d  yHints <info>] }
117c0 0a 09 09 2d 63 6f 64 65 20 2d 0a 09 09 2d 65 72  ...-code -...-er
117d0 72 6f 72 63 6f 64 65 20 7b 0a 09 09 09 73 65 74  rorcode {....set
117e0 20 63 6f 64 65 73 20 7b 6f 6b 20 65 72 72 6f 72   codes {ok error
117f0 20 72 65 74 75 72 6e 20 62 72 65 61 6b 20 63 6f   return break co
11800 6e 74 69 6e 75 65 7d 0a 09 09 09 72 65 74 75 72  ntinue}....retur
11810 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24  n [TryFromList $
11820 7b 6d 6f 64 7d 20 24 7b 63 6f 64 65 73 7d 5d 0a  {mod} ${codes}].
11830 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 5b  ..}..}..return [
11840 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
11850 20 24 7b 74 65 78 74 7d 20 5b 52 65 6d 6f 76 65   ${text} [Remove
11860 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69  UsedOptions ${li
11870 6e 65 7d 20 24 7b 63 6d 64 73 7d 5d 5d 0a 7d 0a  ne} ${cmds}]].}.
11880 0a 23 20 2d 2d 2d 20 53 41 46 45 20 50 41 43 4b  .# --- SAFE PACK
11890 41 47 45 20 2d 2d 2d 0a 0a 23 20 63 72 65 61 74  AGE ---..# creat
118a0 65 20 61 20 73 61 66 65 20 6e 61 6d 65 73 70 61  e a safe namespa
118b0 63 65 20 69 6e 73 69 64 65 0a 23 20 74 63 6c 72  ce inside.# tclr
118c0 65 61 64 6c 69 6e 65 20 61 6e 64 20 69 6d 70 6f  eadline and impo
118d0 72 74 20 73 6f 6d 65 20 63 6f 6d 6d 61 6e 64 73  rt some commands
118e0 2e 0a 23 0a 6e 61 6d 65 73 70 61 63 65 20 65 76  ..#.namespace ev
118f0 61 6c 20 73 61 66 65 20 7b 0a 09 63 61 74 63 68  al safe {..catch
11900 20 7b 0a 09 09 6e 61 6d 65 73 70 61 63 65 20 69   {...namespace i
11910 6d 70 6f 72 74 20 5c 0a 09 09 3a 3a 74 63 6c 72  mport \...::tclr
11920 65 61 64 6c 69 6e 65 3a 3a 44 69 73 70 6c 61 79  eadline::Display
11930 48 69 6e 74 73 20 3a 3a 74 63 6c 72 65 61 64 6c  Hints ::tclreadl
11940 69 6e 65 3a 3a 50 72 65 76 69 6f 75 73 57 6f 72  ine::PreviousWor
11950 64 20 5c 0a 09 09 3a 3a 74 63 6c 72 65 61 64 6c  d \...::tclreadl
11960 69 6e 65 3a 3a 43 6f 6d 70 6c 65 74 65 46 72 6f  ine::CompleteFro
11970 6d 4c 69 73 74 20 3a 3a 74 63 6c 72 65 61 64 6c  mList ::tclreadl
11980 69 6e 65 3a 3a 43 6f 6d 6d 61 6e 64 43 6f 6d 70  ine::CommandComp
11990 6c 65 74 69 6f 6e 20 5c 0a 09 09 3a 3a 74 63 6c  letion \...::tcl
119a0 72 65 61 64 6c 69 6e 65 3a 3a 52 65 6d 6f 76 65  readline::Remove
119b0 55 73 65 64 4f 70 74 69 6f 6e 73 20 3a 3a 74 63  UsedOptions ::tc
119c0 6c 72 65 61 64 6c 69 6e 65 3a 3a 48 6f 73 74 4c  lreadline::HostL
119d0 69 73 74 20 5c 0a 09 09 3a 3a 74 63 6c 72 65 61  ist \...::tclrea
119e0 64 6c 69 6e 65 3a 3a 43 68 61 6e 6e 65 6c 49 64  dline::ChannelId
119f0 20 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a   ::tclreadline::
11a00 4c 69 6e 64 65 78 20 5c 0a 09 09 3a 3a 74 63 6c  Lindex \...::tcl
11a10 72 65 61 64 6c 69 6e 65 3a 3a 43 6f 6d 70 6c 65  readline::Comple
11a20 74 65 42 6f 6f 6c 65 61 6e 20 5c 0a 09 09 3a 3a  teBoolean \...::
11a30 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 57 69 64  tclreadline::Wid
11a40 67 65 74 43 68 69 6c 64 72 65 6e 0a 09 7d 0a 09  getChildren..}..
11a50 76 61 72 69 61 62 6c 65 20 6f 70 74 73 0a 09 73  variable opts..s
11a60 65 74 20 6f 70 74 73 20 7b 0a 09 09 2d 61 63 63  et opts {...-acc
11a70 65 73 73 50 61 74 68 20 2d 73 74 61 74 69 63 73  essPath -statics
11a80 20 2d 6e 6f 53 74 61 74 69 63 73 20 2d 6e 65 73   -noStatics -nes
11a90 74 65 64 20 2d 6e 65 73 74 65 64 4c 6f 61 64 4f  ted -nestedLoadO
11aa0 6b 20 2d 64 65 6c 65 74 65 48 6f 6f 6b 0a 09 7d  k -deleteHook..}
11ab0 0a 09 70 72 6f 63 20 53 6c 61 76 65 4f 72 4f 70  ..proc SlaveOrOp
11ac0 74 73 20 7b 74 65 78 74 20 73 74 61 72 74 20 6c  ts {text start l
11ad0 69 6e 65 20 70 6f 73 20 73 6c 61 76 65 7d 20 7b  ine pos slave} {
11ae0 0a 09 09 73 65 74 20 70 72 65 76 20 5b 50 72 65  ...set prev [Pre
11af0 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72  viousWord ${star
11b00 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09 76 61  t} ${line}]...va
11b10 72 69 61 62 6c 65 20 6f 70 74 73 0a 09 09 69 66  riable opts...if
11b20 20 7b 24 70 6f 73 20 3e 20 31 7d 20 7b 0a 09 09   {$pos > 1} {...
11b30 09 73 65 74 20 73 6c 61 76 65 20 22 22 0a 09 09  .set slave ""...
11b40 7d 0a 09 09 73 77 69 74 63 68 20 2d 2d 20 24 70  }...switch -- $p
11b50 72 65 76 20 7b 0a 09 09 09 2d 61 63 63 65 73 73  rev {....-access
11b60 50 61 74 68 20 7b 20 72 65 74 75 72 6e 20 5b 44  Path { return [D
11b70 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 64 69 72  isplayHints <dir
11b80 65 63 74 6f 72 79 4c 69 73 74 3e 5d 20 7d 0a 09  ectoryList>] }..
11b90 09 09 2d 73 74 61 74 69 63 73 20 7b 20 72 65 74  ..-statics { ret
11ba0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f  urn [CompleteBoo
11bb0 6c 65 61 6e 20 24 74 65 78 74 5d 20 7d 0a 09 09  lean $text] }...
11bc0 09 2d 6e 65 73 74 65 64 20 7b 20 72 65 74 75 72  .-nested { retur
11bd0 6e 20 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65  n [CompleteBoole
11be0 61 6e 20 24 74 65 78 74 5d 20 7d 0a 09 09 09 2d  an $text] }....-
11bf0 64 65 6c 65 74 65 48 6f 6f 6b 20 7b 20 72 65 74  deleteHook { ret
11c00 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
11c10 73 20 3c 73 63 72 69 70 74 3e 5d 20 7d 0a 09 09  s <script>] }...
11c20 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 72  .default {.....r
11c30 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
11c40 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
11c50 5c 0a 09 09 09 09 5b 52 65 6d 6f 76 65 55 73 65  \.....[RemoveUse
11c60 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d  dOptions ${line}
11c70 20 22 24 7b 6f 70 74 73 7d 20 24 73 6c 61 76 65   "${opts} $slave
11c80 22 5d 5d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a  "]]....}...}..}.
11c90 7d 0a 0a 70 72 6f 63 20 73 61 66 65 3a 3a 63 6f  }..proc safe::co
11ca0 6d 70 6c 65 74 65 28 69 6e 74 65 72 70 43 72 65  mplete(interpCre
11cb0 61 74 65 29 20 7b 74 65 78 74 20 73 74 61 72 74  ate) {text start
11cc0 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
11cd0 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 53 6c  d} {..return [Sl
11ce0 61 76 65 4f 72 4f 70 74 73 20 24 7b 74 65 78 74  aveOrOpts ${text
11cf0 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e  } ${start} ${lin
11d00 65 7d 20 24 7b 70 6f 73 7d 20 3f 73 6c 61 76 65  e} ${pos} ?slave
11d10 3f 5d 0a 7d 0a 0a 70 72 6f 63 20 73 61 66 65 3a  ?].}..proc safe:
11d20 3a 63 6f 6d 70 6c 65 74 65 28 69 6e 74 65 72 70  :complete(interp
11d30 49 6e 69 74 29 20 7b 74 65 78 74 20 73 74 61 72  Init) {text star
11d40 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
11d50 6f 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 53  od} {..return [S
11d60 6c 61 76 65 4f 72 4f 70 74 73 20 24 7b 74 65 78  laveOrOpts ${tex
11d70 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69  t} ${start} ${li
11d80 6e 65 7d 20 24 7b 70 6f 73 7d 20 5b 69 6e 74 65  ne} ${pos} [inte
11d90 72 70 20 73 6c 61 76 65 73 5d 5d 0a 7d 0a 0a 70  rp slaves]].}..p
11da0 72 6f 63 20 73 61 66 65 3a 3a 63 6f 6d 70 6c 65  roc safe::comple
11db0 74 65 28 69 6e 74 65 72 70 43 6f 6e 66 69 67 75  te(interpConfigu
11dc0 72 65 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  re) {text start 
11dd0 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
11de0 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 53 6c 61  } {..return [Sla
11df0 76 65 4f 72 4f 70 74 73 20 24 74 65 78 74 20 24  veOrOpts $text $
11e00 73 74 61 72 74 20 24 6c 69 6e 65 20 24 70 6f 73  start $line $pos
11e10 20 5b 69 6e 74 65 72 70 20 73 6c 61 76 65 73 5d   [interp slaves]
11e20 5d 0a 7d 0a 0a 70 72 6f 63 20 73 61 66 65 3a 3a  ].}..proc safe::
11e30 63 6f 6d 70 6c 65 74 65 28 69 6e 74 65 72 70 44  complete(interpD
11e40 65 6c 65 74 65 29 20 7b 74 65 78 74 20 73 74 61  elete) {text sta
11e50 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
11e60 6d 6f 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b  mod} {..return [
11e70 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
11e80 20 24 7b 74 65 78 74 7d 20 5b 69 6e 74 65 72 70   ${text} [interp
11e90 20 73 6c 61 76 65 73 5d 5d 0a 7d 0a 0a 70 72 6f   slaves]].}..pro
11ea0 63 20 73 61 66 65 3a 3a 63 6f 6d 70 6c 65 74 65  c safe::complete
11eb0 28 69 6e 74 65 72 70 41 64 64 54 6f 41 63 63 65  (interpAddToAcce
11ec0 73 73 50 61 74 68 29 20 7b 74 65 78 74 20 73 74  ssPath) {text st
11ed0 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
11ee0 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
11ef0 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20  -- ${pos} {...1 
11f00 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
11f10 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
11f20 74 7d 20 5b 69 6e 74 65 72 70 20 73 6c 61 76 65  t} [interp slave
11f30 73 5d 5d 20 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63  s]] }..}.}..proc
11f40 20 73 61 66 65 3a 3a 63 6f 6d 70 6c 65 74 65 28   safe::complete(
11f50 69 6e 74 65 72 70 46 69 6e 64 49 6e 41 63 63 65  interpFindInAcce
11f60 73 73 50 61 74 68 29 20 7b 74 65 78 74 20 73 74  ssPath) {text st
11f70 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
11f80 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
11f90 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20  -- ${pos} {...1 
11fa0 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
11fb0 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
11fc0 74 7d 20 5b 69 6e 74 65 72 70 20 73 6c 61 76 65  t} [interp slave
11fd0 73 5d 5d 20 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63  s]] }..}.}..proc
11fe0 20 73 61 66 65 3a 3a 63 6f 6d 70 6c 65 74 65 28   safe::complete(
11ff0 73 65 74 4c 6f 67 43 6d 64 29 20 7b 74 65 78 74  setLogCmd) {text
12000 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
12010 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74  pos mod} {..swit
12020 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09  ch -- ${pos} {..
12030 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .1 { return [Dis
12040 70 6c 61 79 48 69 6e 74 73 20 3f 63 6d 64 3f 5d  playHints ?cmd?]
12050 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 20 72   }...default { r
12060 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
12070 6e 74 73 20 3f 61 72 67 3f 5d 20 7d 0a 09 7d 0a  nts ?arg?] }..}.
12080 7d 0a 0a 70 72 6f 63 20 73 61 66 65 3a 3a 63 6f  }..proc safe::co
12090 6d 70 6c 65 74 65 28 6c 6f 61 64 54 6b 29 20 7b  mplete(loadTk) {
120a0 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
120b0 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
120c0 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d  switch -- ${pos}
120d0 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20   {...1 { return 
120e0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73  [DisplayHints <s
120f0 6c 61 76 65 3e 5d 20 7d 0a 09 09 64 65 66 61 75  lave>] }...defau
12100 6c 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  lt {....switch -
12110 2d 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20  - [PreviousWord 
12120 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d  ${start} ${line}
12130 5d 20 7b 0a 09 09 09 09 2d 75 73 65 20 7b 0a 09  ] {.....-use {..
12140 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
12150 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
12160 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b 3a 3a 74  ext} \......[::t
12170 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 57 69 64 67  clreadline::Widg
12180 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65 78  etChildren ${tex
12190 74 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 2d  t}]].....}.....-
121a0 64 69 73 70 6c 61 79 20 7b 0a 09 09 09 09 09 72  display {......r
121b0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
121c0 6e 74 73 20 3c 64 69 73 70 6c 61 79 3e 5d 0a 09  nts <display>]..
121d0 09 09 09 7d 0a 09 09 09 09 64 65 66 61 75 6c 74  ...}.....default
121e0 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
121f0 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
12200 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09   ${text} \......
12210 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f  [RemoveUsedOptio
12220 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b 2d 75 73 65  ns ${line} {-use
12230 20 2d 64 69 73 70 6c 61 79 7d 5d 5d 0a 09 09 09   -display}]]....
12240 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d  .}....}...}..}.}
12250 0a 0a 23 20 2d 2d 2d 20 45 4e 44 20 4f 46 20 53  ..# --- END OF S
12260 41 46 45 20 50 41 43 4b 41 47 45 20 2d 2d 2d 0a  AFE PACKAGE ---.
12270 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 73  .proc complete(s
12280 63 61 6e 29 20 7b 74 65 78 74 20 73 74 61 72 74  can) {text start
12290 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
122a0 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20  d} {..switch -- 
122b0 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72  ${pos} {...1 { r
122c0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
122d0 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a  nts <string>] }.
122e0 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..2 { return [Di
122f0 73 70 6c 61 79 48 69 6e 74 73 20 3c 66 6f 72 6d  splayHints <form
12300 61 74 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74  at>] }...default
12310 20 7b 20 72 65 74 75 72 6e 20 5b 56 61 72 43 6f   { return [VarCo
12320 6d 70 6c 65 74 69 6f 6e 20 24 7b 74 65 78 74 7d  mpletion ${text}
12330 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ] }..}..return "
12340 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
12350 74 65 28 73 65 65 6b 29 20 7b 74 65 78 74 20 73  te(seek) {text s
12360 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
12370 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
12380 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31   -- ${pos} {...1
12390 20 7b 20 72 65 74 75 72 6e 20 5b 43 68 61 6e 6e   { return [Chann
123a0 65 6c 49 64 20 24 7b 74 65 78 74 7d 5d 20 7d 0a  elId ${text}] }.
123b0 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..2 { return [Di
123c0 73 70 6c 61 79 48 69 6e 74 73 20 3c 6f 66 66 73  splayHints <offs
123d0 65 74 3e 5d 20 7d 0a 09 09 33 20 7b 20 72 65 74  et>] }...3 { ret
123e0 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74  urn [TryFromList
123f0 20 24 7b 74 65 78 74 7d 20 7b 73 74 61 72 74 20   ${text} {start 
12400 63 75 72 72 65 6e 74 20 65 6e 64 7d 5d 20 7d 0a  current end}] }.
12410 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
12420 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 73  .proc complete(s
12430 65 74 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  et) {text start 
12440 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
12450 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  } {..switch -- $
12460 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65  {pos} {...1 { re
12470 74 75 72 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74  turn [VarComplet
12480 69 6f 6e 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09  ion ${text}] }..
12490 09 32 20 7b 0a 09 09 09 69 66 20 7b 24 7b 74 65  .2 {....if {${te
124a0 78 74 7d 20 3d 3d 20 22 22 20 7c 7c 20 24 7b 74  xt} == "" || ${t
124b0 65 78 74 7d 20 3d 3d 20 22 5c 22 22 20 7c 7c 20  ext} == "\"" || 
124c0 24 7b 74 65 78 74 7d 20 3d 3d 20 22 5c 7b 22 7d  ${text} == "\{"}
124d0 20 7b 0a 09 09 09 09 23 20 73 65 74 20 6c 69 6e   {.....# set lin
124e0 65 20 5b 51 75 6f 74 65 51 75 6f 74 65 73 20 24  e [QuoteQuotes $
124f0 6c 69 6e 65 5d 0a 09 09 09 09 69 66 20 7b 5b 63  line].....if {[c
12500 61 74 63 68 20 5b 6c 69 73 74 20 73 65 74 20 76  atch [list set v
12510 61 6c 75 65 20 5b 6c 69 73 74 20 5b 75 70 6c 65  alue [list [uple
12520 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d  vel [info level]
12530 20 5c 0a 09 09 09 09 09 73 65 74 20 5b 4c 69 6e   \......set [Lin
12540 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 5d 5d  dex ${line} 1]]]
12550 5d 20 6d 73 67 5d 0a 09 09 09 09 7d 20 7b 0a 09  ] msg].....} {..
12560 09 09 09 09 72 65 74 75 72 6e 20 22 22 0a 09 09  ....return ""...
12570 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09  ..} else {......
12580 72 65 74 75 72 6e 20 5b 51 75 6f 74 65 20 24 7b  return [Quote ${
12590 76 61 6c 75 65 7d 20 24 7b 74 65 78 74 7d 5d 0a  value} ${text}].
125a0 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  ....}....}...}..
125b0 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
125c0 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 73 6f  proc complete(so
125d0 63 6b 65 74 29 20 7b 74 65 78 74 20 73 74 61 72  cket) {text star
125e0 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
125f0 6f 64 7d 20 7b 0a 09 73 65 74 20 63 6d 64 20 5b  od} {..set cmd [
12600 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31  Lindex ${line} 1
12610 5d 0a 09 73 65 74 20 70 72 65 76 20 5b 50 72 65  ]..set prev [Pre
12620 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72  viousWord ${star
12630 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 69 66 20  t} ${line}]..if 
12640 7b 22 2d 73 65 72 76 65 72 22 20 3d 3d 20 24 7b  {"-server" == ${
12650 63 6d 64 7d 7d 20 7b 0a 09 09 23 20 73 65 72 76  cmd}} {...# serv
12660 65 72 20 73 6f 63 6b 65 74 73 0a 09 09 23 0a 09  er sockets...#..
12670 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73  .switch -- ${pos
12680 7d 20 7b 0a 09 09 09 32 20 7b 20 72 65 74 75 72  } {....2 { retur
12690 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
126a0 3c 63 6f 6d 6d 61 6e 64 3e 5d 20 7d 0a 09 09 09  <command>] }....
126b0 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 69 66  default {.....if
126c0 20 7b 22 2d 6d 79 61 64 64 72 22 20 3d 3d 20 24   {"-myaddr" == $
126d0 7b 70 72 65 76 7d 7d 20 7b 0a 09 09 09 09 09 72  {prev}} {......r
126e0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
126f0 6e 74 73 20 3c 61 64 64 72 3e 5d 0a 09 09 09 09  nts <addr>].....
12700 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 72 65  } else {......re
12710 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
12720 6f 6d 4c 69 73 74 20 24 7b 6d 6f 64 7d 20 5c 0a  omList ${mod} \.
12730 09 09 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64  .....[RemoveUsed
12740 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20 7b 2d  Options $line {-
12750 6d 79 61 64 64 72 20 2d 65 72 72 6f 72 20 2d 73  myaddr -error -s
12760 6f 63 6b 6e 61 6d 65 20 3c 70 6f 72 74 3e 7d 5d  ockname <port>}]
12770 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d  ].....}....}...}
12780 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 23 20 63  ..} else {...# c
12790 6c 69 65 6e 74 20 73 6f 63 6b 65 74 73 0a 09 09  lient sockets...
127a0 23 0a 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  #...switch -- ${
127b0 70 72 65 76 7d 20 7b 0a 09 09 09 2d 6d 79 61 64  prev} {....-myad
127c0 64 72 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  dr { return [Dis
127d0 70 6c 61 79 48 69 6e 74 73 20 3c 61 64 64 72 3e  playHints <addr>
127e0 5d 20 7d 0a 09 09 09 2d 6d 79 70 6f 72 74 20 7b  ] }....-myport {
127f0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
12800 48 69 6e 74 73 20 3c 70 6f 72 74 3e 5d 20 7d 0a  Hints <port>] }.
12810 09 09 7d 0a 0a 09 09 73 65 74 20 68 6f 73 74 73  ..}....set hosts
12820 20 5b 48 6f 73 74 4c 69 73 74 5d 0a 09 09 73 65   [HostList]...se
12830 74 20 63 6d 64 73 20 7b 2d 6d 79 61 64 64 72 20  t cmds {-myaddr 
12840 2d 6d 79 70 6f 72 74 20 2d 61 73 79 6e 63 20 2d  -myport -async -
12850 6d 79 61 64 64 72 20 2d 65 72 72 6f 72 20 2d 73  myaddr -error -s
12860 6f 63 6b 6e 61 6d 65 20 2d 70 65 65 72 6e 61 6d  ockname -peernam
12870 65 7d 0a 09 09 69 66 20 7b 24 7b 70 6f 73 7d 20  e}...if {${pos} 
12880 3c 3d 20 31 7d 20 7b 0a 09 09 09 6c 61 70 70 65  <= 1} {....lappe
12890 6e 64 20 63 6d 64 73 20 2d 73 65 72 76 65 72 0a  nd cmds -server.
128a0 09 09 7d 0a 09 09 73 65 74 20 63 6d 64 73 20 5b  ..}...set cmds [
128b0 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e  RemoveUsedOption
128c0 73 20 24 7b 6c 69 6e 65 7d 20 24 7b 63 6d 64 73  s ${line} ${cmds
128d0 7d 5d 0a 09 09 69 66 20 7b 2d 31 20 21 3d 20 5b  }]...if {-1 != [
128e0 6c 73 65 61 72 63 68 20 24 7b 68 6f 73 74 73 7d  lsearch ${hosts}
128f0 20 24 7b 70 72 65 76 7d 5d 7d 20 7b 0a 09 09 09   ${prev}]} {....
12900 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
12910 69 6e 74 73 20 3c 70 6f 72 74 3e 5d 0a 09 09 7d  ints <port>]...}
12920 20 65 6c 73 65 20 7b 0a 09 09 09 72 65 74 75 72   else {....retur
12930 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
12940 69 73 74 20 24 7b 6d 6f 64 7d 20 5b 63 6f 6e 63  ist ${mod} [conc
12950 61 74 20 24 7b 63 6d 64 73 7d 20 24 7b 68 6f 73  at ${cmds} ${hos
12960 74 73 7d 5d 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65  ts}]]...}..}..re
12970 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20  turn "".}..proc 
12980 63 6f 6d 70 6c 65 74 65 28 73 6f 75 72 63 65 29  complete(source)
12990 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
129a0 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
129b0 0a 09 23 20 61 6c 6c 6f 77 20 66 69 6c 65 20 6e  ..# allow file n
129c0 61 6d 65 20 63 6f 6d 70 6c 65 74 69 6f 6e 0a 09  ame completion..
129d0 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f  return "".}..pro
129e0 63 20 63 6f 6d 70 6c 65 74 65 28 73 70 6c 69 74  c complete(split
129f0 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
12a00 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
12a10 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  {..switch -- ${p
12a20 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74 75  os} {...1 { retu
12a30 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
12a40 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 09 09 32   <string>] }...2
12a50 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
12a60 61 79 48 69 6e 74 73 20 3f 73 70 6c 69 74 43 68  ayHints ?splitCh
12a70 61 72 73 3f 5d 20 7d 0a 09 7d 0a 7d 0a 0a 70 72  ars?] }..}.}..pr
12a80 6f 63 20 63 6f 6d 70 6c 65 74 65 28 73 74 72 69  oc complete(stri
12a90 6e 67 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  ng) {text start 
12aa0 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
12ab0 7d 20 7b 0a 09 73 65 74 20 63 6d 64 20 5b 4c 69  } {..set cmd [Li
12ac0 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a  ndex ${line} 1].
12ad0 09 73 65 74 20 70 72 65 76 20 5b 50 72 65 76 69  .set prev [Previ
12ae0 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d  ousWord ${start}
12af0 20 24 7b 6c 69 6e 65 7d 5d 0a 09 73 65 74 20 63   ${line}]..set c
12b00 6d 64 73 20 7b 0a 09 09 62 79 74 65 6c 65 6e 67  mds {...byteleng
12b10 74 68 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  th compare equal
12b20 20 66 69 72 73 74 20 69 6e 64 65 78 20 69 73 20   first index is 
12b30 6c 61 73 74 20 6c 65 6e 67 74 68 20 6d 61 70 20  last length map 
12b40 6d 61 74 63 68 0a 09 09 72 61 6e 67 65 20 72 65  match...range re
12b50 70 65 61 74 20 72 65 70 6c 61 63 65 20 74 6f 6c  peat replace tol
12b60 6f 77 65 72 20 74 6f 75 70 70 65 72 20 74 6f 74  ower toupper tot
12b70 69 74 6c 65 20 74 72 69 6d 20 74 72 69 6d 6c 65  itle trim trimle
12b80 66 74 0a 09 09 74 72 69 6d 72 69 67 68 74 20 77  ft...trimright w
12b90 6f 72 64 65 6e 64 20 77 6f 72 64 73 74 61 72 74  ordend wordstart
12ba0 7d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  }..switch -- ${p
12bb0 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72  os} {...1 {....r
12bc0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
12bd0 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
12be0 24 7b 63 6d 64 73 7d 5d 0a 09 09 7d 0a 09 09 32  ${cmds}]...}...2
12bf0 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
12c00 24 7b 63 6d 64 7d 20 7b 0a 09 09 09 09 63 6f 6d  ${cmd} {.....com
12c10 70 61 72 65 20 2d 0a 09 09 09 09 65 71 75 61 6c  pare -.....equal
12c20 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
12c30 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
12c40 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 09   ${text} {......
12c50 09 2d 6e 6f 63 61 73 65 20 2d 6c 65 6e 67 74 68  .-nocase -length
12c60 20 3c 73 74 72 69 6e 67 3e 20 7d 5d 0a 09 09 09   <string> }]....
12c70 09 7d 0a 0a 09 09 09 09 66 69 72 73 74 20 2d 0a  .}......first -.
12c80 09 09 09 09 6c 61 73 74 20 7b 20 72 65 74 75 72  ....last { retur
12c90 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
12ca0 3c 73 74 72 69 6e 67 31 3e 5d 20 7d 0a 0a 09 09  <string1>] }....
12cb0 09 09 6d 61 70 20 7b 20 72 65 74 75 72 6e 20 5b  ..map { return [
12cc0 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
12cd0 20 24 7b 74 65 78 74 7d 20 7b 2d 6e 6f 63 61 73   ${text} {-nocas
12ce0 65 20 3c 63 68 61 72 4d 61 70 3e 5d 7d 20 7d 0a  e <charMap>]} }.
12cf0 09 09 09 09 6d 61 74 63 68 20 7b 20 72 65 74 75  ....match { retu
12d00 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
12d10 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 2d 6e  List ${text} {-n
12d20 6f 63 61 73 65 20 3c 70 61 74 74 65 72 6e 3e 5d  ocase <pattern>]
12d30 7d 20 7d 0a 0a 09 09 09 09 69 73 20 7b 0a 09 09  } }......is {...
12d40 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
12d50 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
12d60 78 74 7d 20 7b 0a 09 09 09 09 09 09 61 6c 6e 75  xt} {.......alnu
12d70 6d 20 61 6c 70 68 61 20 61 73 63 69 69 20 62 6f  m alpha ascii bo
12d80 6f 6c 65 61 6e 20 63 6f 6e 74 72 6f 6c 20 64 69  olean control di
12d90 67 69 74 20 64 6f 75 62 6c 65 20 0a 09 09 09 09  git double .....
12da0 09 09 66 61 6c 73 65 20 67 72 61 70 68 20 69 6e  ..false graph in
12db0 74 65 67 65 72 20 6c 6f 77 65 72 20 70 72 69 6e  teger lower prin
12dc0 74 20 70 75 6e 63 74 20 73 70 61 63 65 20 0a 09  t punct space ..
12dd0 09 09 09 09 09 74 72 75 65 20 75 70 70 65 72 20  .....true upper 
12de0 77 6f 72 64 63 68 61 72 20 78 64 69 67 69 74 20  wordchar xdigit 
12df0 0a 09 09 09 09 09 7d 5d 0a 09 09 09 09 7d 0a 0a  ......}].....}..
12e00 09 09 09 09 62 79 74 65 6c 65 6e 67 74 68 20 2d  ....bytelength -
12e10 0a 09 09 09 09 69 6e 64 65 78 20 2d 0a 09 09 09  .....index -....
12e20 09 6c 65 6e 67 74 68 20 2d 0a 09 09 09 09 72 61  .length -.....ra
12e30 6e 67 65 20 2d 0a 09 09 09 09 72 65 70 65 61 74  nge -.....repeat
12e40 20 2d 0a 09 09 09 09 72 65 70 6c 61 63 65 20 2d   -.....replace -
12e50 0a 09 09 09 09 74 6f 6c 6f 77 65 72 20 2d 0a 09  .....tolower -..
12e60 09 09 09 74 6f 74 69 74 6c 65 20 2d 0a 09 09 09  ...totitle -....
12e70 09 74 6f 75 70 70 65 72 20 2d 0a 09 09 09 09 74  .toupper -.....t
12e80 72 69 6d 20 2d 0a 09 09 09 09 74 72 69 6d 6c 65  rim -.....trimle
12e90 66 74 20 2d 0a 09 09 09 09 74 72 69 6d 72 69 67  ft -.....trimrig
12ea0 68 74 20 2d 0a 09 09 09 09 77 6f 72 64 65 6e 64  ht -.....wordend
12eb0 20 2d 0a 09 09 09 09 77 6f 72 64 73 74 61 72 74   -.....wordstart
12ec0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
12ed0 61 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e  ayHints <string>
12ee0 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 33  ] }....}...}...3
12ef0 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
12f00 24 7b 63 6d 64 7d 20 7b 0a 09 09 09 09 63 6f 6d  ${cmd} {.....com
12f10 70 61 72 65 20 2d 0a 09 09 09 09 65 71 75 61 6c  pare -.....equal
12f20 20 7b 0a 09 09 09 09 09 69 66 20 7b 22 2d 6c 65   {......if {"-le
12f30 6e 67 74 68 22 20 3d 3d 20 24 7b 70 72 65 76 7d  ngth" == ${prev}
12f40 7d 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e  } {.......return
12f50 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
12f60 69 6e 74 3e 5d 0a 09 09 09 09 09 7d 0a 09 09 09  int>]......}....
12f70 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
12f80 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
12f90 74 7d 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f 76  t} \......[Remov
12fa0 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c  eUsedOptions ${l
12fb0 69 6e 65 7d 20 7b 2d 6e 6f 63 61 73 65 20 2d 6c  ine} {-nocase -l
12fc0 65 6e 67 74 68 20 3c 73 74 72 69 6e 67 3e 7d 5d  ength <string>}]
12fd0 5d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 66 69 72  ].....}......fir
12fe0 73 74 20 2d 0a 09 09 09 09 6c 61 73 74 20 7b 20  st -.....last { 
12ff0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
13000 69 6e 74 73 20 3c 73 74 72 69 6e 67 32 3e 5d 20  ints <string2>] 
13010 7d 0a 0a 09 09 09 09 6d 61 70 20 7b 0a 09 09 09  }......map {....
13020 09 09 69 66 20 7b 22 2d 6e 6f 63 61 73 65 22 20  ..if {"-nocase" 
13030 3d 3d 20 24 7b 70 72 65 76 7d 7d 20 7b 0a 09 09  == ${prev}} {...
13040 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70  ....return [Disp
13050 6c 61 79 48 69 6e 74 73 20 3c 63 68 61 72 4d 61  layHints <charMa
13060 70 3e 5d 0a 09 09 09 09 09 7d 20 65 6c 73 65 20  p>]......} else 
13070 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b  {.......return [
13080 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 74  DisplayHints <st
13090 72 69 6e 67 3e 5d 0a 09 09 09 09 09 7d 0a 09 09  ring>]......}...
130a0 09 09 7d 0a 09 09 09 09 6d 61 74 63 68 20 7b 0a  ..}.....match {.
130b0 09 09 09 09 09 69 66 20 7b 22 2d 6e 6f 63 61 73  .....if {"-nocas
130c0 65 22 20 3d 3d 20 24 7b 70 72 65 76 7d 7d 20 7b  e" == ${prev}} {
130d0 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44  .......return [D
130e0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 70 61 74  isplayHints <pat
130f0 74 65 72 6e 3e 5d 0a 09 09 09 09 09 7d 20 65 6c  tern>]......} el
13100 73 65 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72  se {.......retur
13110 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
13120 3c 73 74 72 69 6e 67 3e 5d 0a 09 09 09 09 09 7d  <string>]......}
13130 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 73 20 7b  .....}......is {
13140 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
13150 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
13160 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b 52  {text} \......[R
13170 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
13180 20 24 7b 6c 69 6e 65 7d 20 7b 2d 73 74 72 69 63   ${line} {-stric
13190 74 20 2d 66 61 69 6c 69 6e 64 65 78 20 3c 73 74  t -failindex <st
131a0 72 69 6e 67 3e 7d 5d 5d 0a 09 09 09 09 7d 0a 0a  ring>}]].....}..
131b0 09 09 09 09 62 79 74 65 6c 65 6e 67 74 68 20 7b  ....bytelength {
131c0 7d 0a 09 09 09 09 69 6e 64 65 78 20 2d 0a 09 09  }.....index -...
131d0 09 09 77 6f 72 64 65 6e 64 20 2d 0a 09 09 09 09  ..wordend -.....
131e0 77 6f 72 64 73 74 61 72 74 20 7b 20 72 65 74 75  wordstart { retu
131f0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
13200 20 3c 63 68 61 72 49 6e 64 65 78 3e 5d 20 7d 0a   <charIndex>] }.
13210 09 09 09 09 72 61 6e 67 65 20 2d 0a 09 09 09 09  ....range -.....
13220 72 65 70 6c 61 63 65 20 7b 20 72 65 74 75 72 6e  replace { return
13230 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
13240 66 69 72 73 74 3e 5d 20 7d 0a 09 09 09 09 72 65  first>] }.....re
13250 70 65 61 74 20 7b 20 72 65 74 75 72 6e 20 5b 44  peat { return [D
13260 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 63 6f 75  isplayHints <cou
13270 6e 74 3e 5d 20 7d 0a 09 09 09 09 74 6f 6c 6f 77  nt>] }.....tolow
13280 65 72 20 2d 0a 09 09 09 09 74 6f 74 69 74 6c 65  er -.....totitle
13290 20 2d 0a 09 09 09 09 74 6f 75 70 70 65 72 20 7b   -.....toupper {
132a0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
132b0 48 69 6e 74 73 20 3f 66 69 72 73 74 3f 5d 20 7d  Hints ?first?] }
132c0 0a 09 09 09 09 74 72 69 6d 20 2d 0a 09 09 09 09  .....trim -.....
132d0 74 72 69 6d 6c 65 66 74 20 2d 0a 09 09 09 09 74  trimleft -.....t
132e0 72 69 6d 72 69 67 68 74 20 7b 20 72 65 74 75 72  rimright { retur
132f0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
13300 3f 63 68 61 72 73 3f 5d 20 7d 0a 09 09 09 7d 0a  ?chars?] }....}.
13310 09 09 7d 0a 09 09 34 20 7b 0a 09 09 09 73 77 69  ..}...4 {....swi
13320 74 63 68 20 2d 2d 20 24 7b 63 6d 64 7d 20 7b 0a  tch -- ${cmd} {.
13330 09 09 09 09 63 6f 6d 70 61 72 65 20 2d 0a 09 09  ....compare -...
13340 09 09 65 71 75 61 6c 20 7b 0a 09 09 09 09 09 69  ..equal {......i
13350 66 20 7b 22 2d 6c 65 6e 67 74 68 22 20 3d 3d 20  f {"-length" == 
13360 24 7b 70 72 65 76 7d 7d 20 7b 0a 09 09 09 09 09  ${prev}} {......
13370 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79  .return [Display
13380 48 69 6e 74 73 20 3c 69 6e 74 3e 5d 0a 09 09 09  Hints <int>]....
13390 09 09 7d 0a 09 09 09 09 09 72 65 74 75 72 6e 20  ..}......return 
133a0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
133b0 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09  t ${text} \.....
133c0 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69  .[RemoveUsedOpti
133d0 6f 6e 73 20 24 6c 69 6e 65 20 7b 2d 6e 6f 63 61  ons $line {-noca
133e0 73 65 20 2d 6c 65 6e 67 74 68 20 3c 73 74 72 69  se -length <stri
133f0 6e 67 3e 7d 5d 5d 0a 09 09 09 09 7d 0a 0a 09 09  ng>}]].....}....
13400 09 09 66 69 72 73 74 20 2d 0a 09 09 09 09 6c 61  ..first -.....la
13410 73 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  st { return [Dis
13420 70 6c 61 79 48 69 6e 74 73 20 3f 73 74 61 72 74  playHints ?start
13430 49 6e 64 65 78 3f 5d 20 7d 0a 0a 09 09 09 09 6d  Index?] }......m
13440 61 70 20 2d 0a 09 09 09 09 6d 61 74 63 68 20 7b  ap -.....match {
13450 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
13460 48 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20  Hints <string>] 
13470 7d 0a 0a 09 09 09 09 69 73 20 7b 0a 09 09 09 09  }......is {.....
13480 09 69 66 20 7b 22 2d 66 61 69 6c 69 6e 64 65 78  .if {"-failindex
13490 22 20 3d 3d 20 24 7b 70 72 65 76 7d 7d 20 7b 0a  " == ${prev}} {.
134a0 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 56 61  ......return [Va
134b0 72 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 74 65  rCompletion ${te
134c0 78 74 7d 5d 0a 09 09 09 09 09 7d 0a 09 09 09 09  xt}]......}.....
134d0 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
134e0 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
134f0 7d 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f 76 65  } \......[Remove
13500 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e  UsedOptions $lin
13510 65 20 7b 2d 73 74 72 69 63 74 20 2d 66 61 69 6c  e {-strict -fail
13520 69 6e 64 65 78 20 3c 73 74 72 69 6e 67 3e 7d 5d  index <string>}]
13530 5d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 62 79 74  ].....}......byt
13540 65 6c 65 6e 67 74 68 20 7b 7d 0a 09 09 09 09 69  elength {}.....i
13550 6e 64 65 78 20 7b 7d 0a 09 09 09 09 6c 65 6e 67  ndex {}.....leng
13560 74 68 20 7b 7d 0a 09 09 09 09 72 61 6e 67 65 20  th {}.....range 
13570 2d 0a 09 09 09 09 72 65 70 6c 61 63 65 20 7b 20  -.....replace { 
13580 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
13590 69 6e 74 73 20 3c 6c 61 73 74 3e 5d 20 7d 0a 09  ints <last>] }..
135a0 09 09 09 72 65 70 65 61 74 20 7b 7d 0a 09 09 09  ...repeat {}....
135b0 09 74 6f 6c 6f 77 65 72 20 2d 0a 09 09 09 09 74  .tolower -.....t
135c0 6f 74 69 74 6c 65 20 2d 0a 09 09 09 09 74 6f 75  otitle -.....tou
135d0 70 70 65 72 20 7b 20 72 65 74 75 72 6e 20 5b 44  pper { return [D
135e0 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 6c 61 73  isplayHints ?las
135f0 74 3f 5d 20 7d 0a 09 09 09 09 74 72 69 6d 20 2d  t?] }.....trim -
13600 0a 09 09 09 09 74 72 69 6d 6c 65 66 74 20 2d 0a  .....trimleft -.
13610 09 09 09 09 74 72 69 6d 72 69 67 68 74 20 7b 7d  ....trimright {}
13620 0a 09 09 09 09 77 6f 72 64 65 6e 64 20 2d 0a 09  .....wordend -..
13630 09 09 09 77 6f 72 64 73 74 61 72 74 20 7b 7d 0a  ...wordstart {}.
13640 09 09 09 7d 0a 09 09 7d 0a 09 09 64 65 66 61 75  ...}...}...defau
13650 6c 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  lt {....switch -
13660 2d 20 24 7b 63 6d 64 7d 20 7b 0a 09 09 09 09 63  - ${cmd} {.....c
13670 6f 6d 70 61 72 65 20 2d 0a 09 09 09 09 65 71 75  ompare -.....equ
13680 61 6c 20 7b 0a 09 09 09 09 09 69 66 20 7b 22 2d  al {......if {"-
13690 6c 65 6e 67 74 68 22 20 3d 3d 20 24 7b 70 72 65  length" == ${pre
136a0 76 7d 7d 20 7b 0a 09 09 09 09 09 09 72 65 74 75  v}} {.......retu
136b0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
136c0 20 3c 69 6e 74 3e 5d 0a 09 09 09 09 09 7d 0a 09   <int>]......}..
136d0 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
136e0 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
136f0 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b 52 65 6d  ext} \......[Rem
13700 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24  oveUsedOptions $
13710 6c 69 6e 65 20 7b 2d 6e 6f 63 61 73 65 20 2d 6c  line {-nocase -l
13720 65 6e 67 74 68 20 3c 73 74 72 69 6e 67 3e 7d 5d  ength <string>}]
13730 5d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 73 20  ].....}......is 
13740 7b 0a 09 09 09 09 09 69 66 20 7b 22 2d 66 61 69  {......if {"-fai
13750 6c 69 6e 64 65 78 22 20 3d 3d 20 24 7b 70 72 65  lindex" == ${pre
13760 76 7d 7d 20 7b 0a 09 09 09 09 09 09 72 65 74 75  v}} {.......retu
13770 72 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f  rn [VarCompletio
13780 6e 20 24 7b 74 65 78 74 7d 5d 0a 09 09 09 09 09  n ${text}]......
13790 7d 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  }......return [C
137a0 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
137b0 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b  ${text} \......[
137c0 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e  RemoveUsedOption
137d0 73 20 24 7b 6c 69 6e 65 7d 20 7b 2d 73 74 72 69  s ${line} {-stri
137e0 63 74 20 2d 66 61 69 6c 69 6e 64 65 78 20 3c 73  ct -failindex <s
137f0 74 72 69 6e 67 3e 7d 5d 5d 0a 09 09 09 09 7d 0a  tring>}]].....}.
13800 0a 09 09 09 09 72 65 70 6c 61 63 65 20 7b 20 72  .....replace { r
13810 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
13820 6e 74 73 20 3f 6e 65 77 53 74 72 69 6e 67 3f 5d  nts ?newString?]
13830 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09   }....}...}..}..
13840 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f  return "".}..pro
13850 63 20 63 6f 6d 70 6c 65 74 65 28 73 75 62 73 74  c complete(subst
13860 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
13870 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
13880 7b 0a 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  {..return [Compl
13890 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
138a0 78 74 7d 20 5b 52 65 6d 6f 76 65 55 73 65 64 4f  xt} [RemoveUsedO
138b0 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b  ptions ${line} {
138c0 0a 09 09 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65  ...-nobackslashe
138d0 73 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e  s -nocommands -n
138e0 6f 76 61 72 69 61 62 6c 65 73 20 3c 73 74 72 69  ovariables <stri
138f0 6e 67 3e 7d 5d 5d 0a 7d 0a 0a 70 72 6f 63 20 63  ng>}]].}..proc c
13900 6f 6d 70 6c 65 74 65 28 73 77 69 74 63 68 29 20  omplete(switch) 
13910 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
13920 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
13930 09 73 65 74 20 70 72 65 76 20 5b 50 72 65 76 69  .set prev [Previ
13940 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d  ousWord ${start}
13950 20 24 7b 6c 69 6e 65 7d 5d 0a 09 69 66 20 7b 5b   ${line}]..if {[
13960 6c 6c 65 6e 67 74 68 20 24 7b 70 72 65 76 7d 5d  llength ${prev}]
13970 20 26 26 20 22 2d 2d 22 20 21 3d 20 24 7b 70 72   && "--" != ${pr
13980 65 76 7d 20 26 26 20 5c 0a 09 09 28 22 2d 22 20  ev} && \...("-" 
13990 3d 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78  == [string index
139a0 20 24 7b 70 72 65 76 7d 20 30 5d 20 7c 7c 20 31   ${prev} 0] || 1
139b0 20 3d 3d 20 24 7b 70 6f 73 29 7d 7d 20 7b 0a 09   == ${pos)}} {..
139c0 09 73 65 74 20 63 6d 64 73 20 5b 52 65 6d 6f 76  .set cmds [Remov
139d0 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c  eUsedOptions ${l
139e0 69 6e 65 7d 20 7b 0a 09 09 09 2d 65 78 61 63 74  ine} {....-exact
139f0 20 2d 67 6c 6f 62 20 2d 72 65 67 65 78 70 20 2d   -glob -regexp -
13a00 2d 7d 20 7b 2d 2d 7d 5d 0a 09 09 69 66 20 7b 5b  -} {--}]...if {[
13a10 6c 6c 65 6e 67 74 68 20 24 7b 63 6d 64 73 7d 5d  llength ${cmds}]
13a20 7d 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 73  } {....return [s
13a30 74 72 69 6e 67 20 74 72 69 6d 20 5b 43 6f 6d 70  tring trim [Comp
13a40 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
13a50 65 78 74 7d 20 24 7b 63 6d 64 73 7d 5d 5d 0a 09  ext} ${cmds}]]..
13a60 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 73  .}..} else {...s
13a70 65 74 20 76 69 72 74 75 61 6c 5f 70 6f 73 20 5b  et virtual_pos [
13a80 65 78 70 72 20 24 7b 70 6f 73 7d 20 2d 20 5b 46  expr ${pos} - [F
13a90 69 72 73 74 4e 6f 6e 4f 70 74 69 6f 6e 20 24 7b  irstNonOption ${
13aa0 6c 69 6e 65 7d 5d 5d 0a 09 09 73 77 69 74 63 68  line}]]...switch
13ab0 20 2d 2d 20 24 7b 76 69 72 74 75 61 6c 5f 70 6f   -- ${virtual_po
13ac0 73 7d 20 7b 0a 09 09 09 30 20 7b 20 72 65 74 75  s} {....0 { retu
13ad0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
13ae0 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 09 09 09   <string>] }....
13af0 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  1 { return [Disp
13b00 6c 61 79 48 69 6e 74 73 20 3c 70 61 74 74 65 72  layHints <patter
13b10 6e 3e 5d 20 7d 0a 09 09 09 32 20 7b 20 72 65 74  n>] }....2 { ret
13b20 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
13b30 73 20 3c 62 6f 64 79 3e 5d 20 7d 0a 09 09 09 64  s <body>] }....d
13b40 65 66 61 75 6c 74 20 7b 20 0a 09 09 09 09 73 77  efault { .....sw
13b50 69 74 63 68 20 5b 65 78 70 72 20 24 7b 76 69 72  itch [expr ${vir
13b60 74 75 61 6c 5f 70 6f 73 7d 20 25 20 32 5d 20 7b  tual_pos} % 2] {
13b70 0a 09 09 09 09 09 30 20 7b 20 72 65 74 75 72 6e  ......0 { return
13b80 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
13b90 62 6f 64 79 3f 5d 20 7d 0a 09 09 09 09 09 31 20  body?] }......1 
13ba0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
13bb0 79 48 69 6e 74 73 20 3f 70 61 74 74 65 72 6e 3f  yHints ?pattern?
13bc0 5d 20 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09  ] }.....}....}..
13bd0 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22  .}..}..return ""
13be0 0a 7d 0a 0a 23 20 2d 2d 2d 20 54 43 4c 52 45 41  .}..# --- TCLREA
13bf0 44 4c 49 4e 45 20 50 41 43 4b 41 47 45 20 2d 2d  DLINE PACKAGE --
13c00 2d 0a 0a 23 20 63 72 65 61 74 65 20 61 20 74 63  -..# create a tc
13c10 6c 72 65 61 64 6c 69 6e 65 20 6e 61 6d 65 73 70  lreadline namesp
13c20 61 63 65 20 69 6e 73 69 64 65 0a 23 20 74 63 6c  ace inside.# tcl
13c30 72 65 61 64 6c 69 6e 65 20 61 6e 64 20 69 6d 70  readline and imp
13c40 6f 72 74 20 73 6f 6d 65 20 63 6f 6d 6d 61 6e 64  ort some command
13c50 73 2e 0a 23 0a 6e 61 6d 65 73 70 61 63 65 20 65  s..#.namespace e
13c60 76 61 6c 20 74 63 6c 72 65 61 64 6c 69 6e 65 20  val tclreadline 
13c70 7b 0a 09 63 61 74 63 68 20 7b 0a 09 09 6e 61 6d  {..catch {...nam
13c80 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 5c 0a  espace import \.
13c90 09 09 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a  ..::tclreadline:
13ca0 3a 44 69 73 70 6c 61 79 48 69 6e 74 73 20 5c 0a  :DisplayHints \.
13cb0 09 09 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a  ..::tclreadline:
13cc0 3a 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  :CompleteFromLis
13cd0 74 20 5c 0a 09 09 3a 3a 74 63 6c 72 65 61 64 6c  t \...::tclreadl
13ce0 69 6e 65 3a 3a 4c 69 6e 64 65 78 20 5c 0a 09 09  ine::Lindex \...
13cf0 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 43  ::tclreadline::C
13d00 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e 0a 09  ompleteBoolean..
13d10 7d 0a 7d 0a 0a 70 72 6f 63 20 74 63 6c 72 65 61  }.}..proc tclrea
13d20 64 6c 69 6e 65 3a 3a 63 6f 6d 70 6c 65 74 65 28  dline::complete(
13d30 72 65 61 64 6c 69 6e 65 29 20 7b 74 65 78 74 20  readline) {text 
13d40 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
13d50 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 63  os mod} {..set c
13d60 6d 64 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e  md [Lindex ${lin
13d70 65 7d 20 31 5d 0a 09 73 77 69 74 63 68 20 2d 2d  e} 1]..switch --
13d80 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20   ${pos} {...1 { 
13d90 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
13da0 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
13db0 20 7b 0a 09 09 09 72 65 61 64 20 69 6e 69 74 69   {....read initi
13dc0 61 6c 69 7a 65 20 77 72 69 74 65 20 61 64 64 20  alize write add 
13dd0 63 6f 6d 70 6c 65 74 65 20 63 75 73 74 6f 6d 63  complete customc
13de0 6f 6d 70 6c 65 74 65 72 0a 09 09 09 62 75 69 6c  ompleter....buil
13df0 74 69 6e 63 6f 6d 70 6c 65 74 65 72 20 65 6f 66  tincompleter eof
13e00 63 68 61 72 20 72 65 73 65 74 2d 74 65 72 6d 69  char reset-termi
13e10 6e 61 6c 20 62 65 6c 6c 7d 5d 0a 09 09 7d 0a 09  nal bell}]...}..
13e20 09 32 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  .2 {....switch -
13e30 2d 20 24 7b 63 6d 64 7d 20 7b 0a 09 09 09 09 72  - ${cmd} {.....r
13e40 65 61 64 20 7b 7d 0a 09 09 09 09 69 6e 69 74 69  ead {}.....initi
13e50 61 6c 69 7a 65 20 7b 7d 0a 09 09 09 09 77 72 69  alize {}.....wri
13e60 74 65 20 7b 7d 0a 09 09 09 09 61 64 64 20 7b 20  te {}.....add { 
13e70 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
13e80 69 6e 74 73 20 3c 63 6f 6d 70 6c 65 74 65 72 4c  ints <completerL
13e90 69 6e 65 3e 5d 20 7d 0a 09 09 09 09 63 6f 6d 70  ine>] }.....comp
13ea0 6c 65 74 65 72 20 7b 20 72 65 74 75 72 6e 20 5b  leter { return [
13eb0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c 69  DisplayHints <li
13ec0 6e 65 3e 5d 20 7d 0a 09 09 09 09 63 75 73 74 6f  ne>] }.....custo
13ed0 6d 63 6f 6d 70 6c 65 74 65 72 20 7b 20 72 65 74  mcompleter { ret
13ee0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
13ef0 73 20 3f 73 63 72 69 70 74 43 6f 6d 70 6c 65 74  s ?scriptComplet
13f00 65 72 3f 5d 20 7d 0a 09 09 09 09 62 75 69 6c 74  er?] }.....built
13f10 69 6e 63 6f 6d 70 6c 65 74 65 72 20 7b 20 72 65  incompleter { re
13f20 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 42 6f  turn [CompleteBo
13f30 6f 6c 65 61 6e 20 24 7b 74 65 78 74 7d 5d 20 7d  olean ${text}] }
13f40 0a 09 09 09 09 65 6f 66 63 68 61 72 20 7b 20 72  .....eofchar { r
13f50 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
13f60 6e 74 73 20 3f 73 63 72 69 70 74 3f 5d 20 7d 0a  nts ?script?] }.
13f70 09 09 09 09 72 65 73 65 74 2d 74 65 72 6d 69 6e  ....reset-termin
13f80 61 6c 20 7b 0a 09 09 09 09 09 69 66 20 7b 5b 69  al {......if {[i
13f90 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76  nfo exists ::env
13fa0 28 54 45 52 4d 29 5d 7d 20 7b 0a 09 09 09 09 09  (TERM)]} {......
13fb0 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
13fc0 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
13fd0 7d 20 24 3a 3a 65 6e 76 28 54 45 52 4d 29 5d 0a  } $::env(TERM)].
13fe0 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09  .....} else {...
13ff0 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70  ....return [Disp
14000 6c 61 79 48 69 6e 74 73 20 3f 74 65 72 6d 69 6e  layHints ?termin
14010 61 6c 4e 61 6d 65 3f 5d 0a 09 09 09 09 09 7d 0a  alName?]......}.
14020 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  ....}....}...}..
14030 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
14040 23 20 2d 2d 2d 20 45 4e 44 20 4f 46 20 54 43 4c  # --- END OF TCL
14050 52 45 41 44 4c 49 4e 45 20 50 41 43 4b 41 47 45  READLINE PACKAGE
14060 20 2d 2d 2d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c   ---..proc compl
14070 65 74 65 28 74 65 6c 6c 29 20 7b 74 65 78 74 20  ete(tell) {text 
14080 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
14090 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63  os mod} {..switc
140a0 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09  h -- ${pos} {...
140b0 31 20 7b 20 72 65 74 75 72 6e 20 5b 43 68 61 6e  1 { return [Chan
140c0 6e 65 6c 49 64 20 24 7b 74 65 78 74 7d 5d 20 7d  nelId ${text}] }
140d0 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
140e0 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
140f0 74 65 73 74 74 68 72 65 61 64 29 20 7b 74 65 78  testthread) {tex
14100 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
14110 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 0a 09 73 65   pos mod} {...se
14120 74 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 7b  t cmd [Lindex ${
14130 6c 69 6e 65 7d 20 31 5d 0a 09 73 77 69 74 63 68  line} 1]..switch
14140 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31   -- ${pos} {...1
14150 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f   {....return [Co
14160 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
14170 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 2d 61 73  {text} {.....-as
14180 79 6e 63 20 63 72 65 61 74 65 20 65 72 72 6f 72  ync create error
14190 70 72 6f 63 20 65 78 69 74 20 69 64 20 6e 61 6d  proc exit id nam
141a0 65 73 20 73 65 6e 64 20 77 61 69 74 0a 09 09 09  es send wait....
141b0 7d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09  }]...}...2 {....
141c0 73 77 69 74 63 68 20 2d 2d 20 5b 50 72 65 76 69  switch -- [Previ
141d0 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d  ousWord ${start}
141e0 20 24 7b 6c 69 6e 65 7d 5d 20 7b 0a 09 09 09 09   ${line}] {.....
141f0 63 72 65 61 74 65 20 7b 0a 09 09 09 09 09 72 65  create {......re
14200 74 75 72 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d  turn [BraceOrCom
14210 6d 61 6e 64 20 5c 0a 09 09 09 09 09 24 7b 74 65  mand \......${te
14220 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 65  xt} ${start} ${e
14230 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f  nd} ${line} ${po
14240 73 7d 20 24 7b 6d 6f 64 7d 5d 0a 09 09 09 09 7d  s} ${mod}].....}
14250 0a 09 09 09 09 2d 61 73 79 6e 63 20 7b 0a 09 09  .....-async {...
14260 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
14270 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
14280 78 74 7d 20 73 65 6e 64 5d 0a 09 09 09 09 7d 0a  xt} send].....}.
14290 09 09 09 09 73 65 6e 64 20 7b 0a 09 09 09 09 09  ....send {......
142a0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
142b0 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
142c0 20 5b 74 65 73 74 74 68 72 65 61 64 20 6e 61 6d   [testthread nam
142d0 65 73 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 64  es]].....}.....d
142e0 65 66 61 75 6c 74 20 7b 7d 0a 09 09 09 7d 0a 09  efault {}....}..
142f0 09 7d 0a 09 09 33 20 7b 0a 09 09 09 69 66 20 7b  .}...3 {....if {
14300 22 73 65 6e 64 22 20 3d 3d 20 5b 50 72 65 76 69  "send" == [Previ
14310 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d  ousWord ${start}
14320 20 24 7b 6c 69 6e 65 7d 5d 7d 20 7b 0a 09 09 09   ${line}]} {....
14330 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
14340 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
14350 7d 20 5b 74 65 73 74 74 68 72 65 61 64 20 6e 61  } [testthread na
14360 6d 65 73 5d 5d 0a 09 09 09 7d 20 65 6c 73 65 69  mes]]....} elsei
14370 66 20 7b 22 73 65 6e 64 22 20 3d 3d 20 24 7b 63  f {"send" == ${c
14380 6d 64 7d 7d 20 7b 0a 09 09 09 09 72 65 74 75 72  md}} {.....retur
14390 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e  n [BraceOrComman
143a0 64 20 5c 0a 09 09 09 09 24 7b 74 65 78 74 7d 20  d \.....${text} 
143b0 24 7b 73 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20  ${start} ${end} 
143c0 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 24  ${line} ${pos} $
143d0 7b 6d 6f 64 7d 5d 0a 09 09 09 7d 0a 09 09 7d 0a  {mod}]....}...}.
143e0 09 09 34 20 7b 0a 09 09 09 69 66 20 7b 22 73 65  ..4 {....if {"se
143f0 6e 64 22 20 3d 3d 20 5b 4c 69 6e 64 65 78 20 24  nd" == [Lindex $
14400 7b 6c 69 6e 65 7d 20 32 5d 7d 20 7b 0a 09 09 09  {line} 2]} {....
14410 09 72 65 74 75 72 6e 20 5b 42 72 61 63 65 4f 72  .return [BraceOr
14420 43 6f 6d 6d 61 6e 64 20 5c 0a 09 09 09 09 24 7b  Command \.....${
14430 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24  text} ${start} $
14440 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b  {end} ${line} ${
14450 70 6f 73 7d 20 24 7b 6d 6f 64 7d 5d 0a 09 09 09  pos} ${mod}]....
14460 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  }...}..}..return
14470 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70   "".}..proc comp
14480 6c 65 74 65 28 74 69 6d 65 29 20 7b 74 65 78 74  lete(time) {text
14490 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
144a0 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74  pos mod} {..swit
144b0 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09  ch -- ${pos} {..
144c0 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 42 72 61  .1 { return [Bra
144d0 63 65 4f 72 43 6f 6d 6d 61 6e 64 20 5c 0a 09 09  ceOrCommand \...
144e0 09 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74  .${text} ${start
144f0 7d 20 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d  } ${end} ${line}
14500 20 24 7b 70 6f 73 7d 20 24 7b 6d 6f 64 7d 5d 0a   ${pos} ${mod}].
14510 09 09 7d 0a 09 09 32 20 7b 20 72 65 74 75 72 6e  ..}...2 { return
14520 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
14530 63 6f 75 6e 74 3f 5d 20 7d 0a 09 7d 0a 09 72 65  count?] }..}..re
14540 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20  turn "".}..proc 
14550 63 6f 6d 70 6c 65 74 65 28 74 72 61 63 65 29 20  complete(trace) 
14560 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
14570 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
14580 09 73 65 74 20 63 6d 64 20 5b 4c 69 6e 64 65 78  .set cmd [Lindex
14590 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73 77 69   ${line} 1]..swi
145a0 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a  tch -- ${pos} {.
145b0 09 09 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  ..1 {....return 
145c0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
145d0 74 20 24 7b 6d 6f 64 7d 20 7b 76 61 72 69 61 62  t ${mod} {variab
145e0 6c 65 20 76 64 65 6c 65 74 65 20 76 69 6e 66 6f  le vdelete vinfo
145f0 7d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09  }]...}...2 {....
14600 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
14610 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
14620 20 5c 0a 09 09 09 5b 75 70 6c 65 76 65 6c 20 5b   \....[uplevel [
14630 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 69 6e 66 6f  info level] info
14640 20 76 61 72 73 20 22 24 7b 6d 6f 64 7d 2a 22 5d   vars "${mod}*"]
14650 5d 0a 09 09 7d 0a 09 09 33 20 7b 0a 09 09 09 73  ]...}...3 {....s
14660 77 69 74 63 68 20 2d 2d 20 24 7b 63 6d 64 7d 20  witch -- ${cmd} 
14670 7b 0a 09 09 09 09 76 61 72 69 61 62 6c 65 20 2d  {.....variable -
14680 0a 09 09 09 09 76 61 72 69 61 62 6c 65 20 7b 20  .....variable { 
14690 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
146a0 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
146b0 20 7b 72 20 77 20 75 7d 5d 20 7d 0a 09 09 09 09   {r w u}] }.....
146c0 76 64 65 6c 65 74 65 20 7b 0a 09 09 09 09 09 73  vdelete {......s
146d0 65 74 20 76 61 72 20 5b 50 72 65 76 69 6f 75 73  et var [Previous
146e0 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b  Word ${start} ${
146f0 6c 69 6e 65 7d 5d 0a 09 09 09 09 09 73 65 74 20  line}]......set 
14700 6d 6f 64 65 73 20 22 22 0a 09 09 09 09 09 66 6f  modes ""......fo
14710 72 65 61 63 68 20 69 6e 66 6f 20 5b 75 70 6c 65  reach info [uple
14720 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d  vel [info level]
14730 20 74 72 61 63 65 20 76 69 6e 66 6f 20 24 7b 76   trace vinfo ${v
14740 61 72 7d 5d 20 7b 0a 09 09 09 09 09 09 6c 61 70  ar}] {.......lap
14750 70 65 6e 64 20 6d 6f 64 65 73 20 5b 6c 69 6e 64  pend modes [lind
14760 65 78 20 24 7b 69 6e 66 6f 7d 20 30 5d 0a 09 09  ex ${info} 0]...
14770 09 09 09 7d 0a 09 09 09 09 09 72 65 74 75 72 6e  ...}......return
14780 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
14790 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 6d 6f 64  st ${text} ${mod
147a0 65 73 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a  es}].....}....}.
147b0 09 09 7d 0a 09 09 34 20 7b 0a 09 09 09 73 77 69  ..}...4 {....swi
147c0 74 63 68 20 2d 2d 20 24 7b 63 6d 64 7d 20 7b 0a  tch -- ${cmd} {.
147d0 09 09 09 09 76 61 72 69 61 62 6c 65 20 7b 0a 09  ....variable {..
147e0 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
147f0 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
14800 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b 43 6f 6d  ext} \......[Com
14810 6d 61 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 20 24  mandCompletion $
14820 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a 09  {text}]].....}..
14830 09 09 09 76 64 65 6c 65 74 65 20 7b 0a 09 09 09  ...vdelete {....
14840 09 09 73 65 74 20 76 61 72 20 5b 4c 69 6e 64 65  ..set var [Linde
14850 78 20 24 7b 6c 69 6e 65 7d 20 32 5d 0a 09 09 09  x ${line} 2]....
14860 09 09 73 65 74 20 6d 6f 64 65 20 5b 50 72 65 76  ..set mode [Prev
14870 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74  iousWord ${start
14880 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09 09 09 09  } ${line}]......
14890 73 65 74 20 73 63 72 69 70 74 73 20 22 22 0a 09  set scripts ""..
148a0 09 09 09 09 66 6f 72 65 61 63 68 20 69 6e 66 6f  ....foreach info
148b0 20 5b 75 70 6c 65 76 65 6c 20 5b 69 6e 66 6f 20   [uplevel [info 
148c0 6c 65 76 65 6c 5d 20 74 72 61 63 65 20 76 69 6e  level] trace vin
148d0 66 6f 20 24 7b 76 61 72 7d 5d 20 7b 0a 09 09 09  fo ${var}] {....
148e0 09 09 09 69 66 20 7b 24 7b 6d 6f 64 65 7d 20 3d  ...if {${mode} =
148f0 3d 20 5b 6c 69 6e 64 65 78 20 24 7b 69 6e 66 6f  = [lindex ${info
14900 7d 20 30 5d 7d 20 7b 0a 09 09 09 09 09 09 09 6c  } 0]} {........l
14910 61 70 70 65 6e 64 20 73 63 72 69 70 74 73 20 5b  append scripts [
14920 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 7b 69  list [lindex ${i
14930 6e 66 6f 7d 20 31 5d 5d 0a 09 09 09 09 09 09 7d  nfo} 1]].......}
14940 0a 09 09 09 09 09 7d 0a 09 09 09 09 09 72 65 74  ......}......ret
14950 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
14960 73 20 24 7b 73 63 72 69 70 74 73 7d 5d 0a 09 09  s ${scripts}]...
14970 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a  ..}....}...}..}.
14980 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
14990 6f 63 20 63 6f 6d 70 6c 65 74 65 28 75 6e 6b 6e  oc complete(unkn
149a0 6f 77 6e 29 20 7b 74 65 78 74 20 73 74 61 72 74  own) {text start
149b0 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
149c0 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20  d} {..switch -- 
149d0 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a 09  ${pos} {...1 {..
149e0 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
149f0 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
14a00 74 7d 20 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c  t} [CommandCompl
14a10 65 74 69 6f 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a  etion ${text}]].
14a20 09 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 20  ..}...default { 
14a30 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
14a40 69 6e 74 73 20 3f 61 72 67 3f 5d 20 7d 0a 09 7d  ints ?arg?] }..}
14a50 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70  ..return "".}..p
14a60 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 75 6e 73  roc complete(uns
14a70 65 74 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  et) {text start 
14a80 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
14a90 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 56 61 72  } {..return [Var
14aa0 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 74 65 78  Completion ${tex
14ab0 74 7d 5d 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70  t}].}..proc comp
14ac0 6c 65 74 65 28 75 70 64 61 74 65 29 20 7b 74 65  lete(update) {te
14ad0 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
14ae0 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77  e pos mod} {..sw
14af0 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
14b00 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 69 64  ...1 { return id
14b10 6c 65 74 61 73 6b 73 20 7d 0a 09 7d 0a 09 72 65  letasks }..}..re
14b20 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20  turn "".}..proc 
14b30 63 6f 6d 70 6c 65 74 65 28 75 70 6c 65 76 65 6c  complete(uplevel
14b40 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
14b50 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
14b60 7b 0a 09 73 65 74 20 6f 6e 65 20 5b 4c 69 6e 64  {..set one [Lind
14b70 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73  ex ${line} 1]..s
14b80 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
14b90 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65 74 75 72  {...1 {....retur
14ba0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
14bb0 69 73 74 20 5c 0a 09 09 09 24 7b 74 65 78 74 7d  ist \....${text}
14bc0 20 22 3f 6c 65 76 65 6c 3f 20 5b 43 6f 6d 6d 61   "?level? [Comma
14bd0 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 74  ndCompletion ${t
14be0 65 78 74 7d 5d 22 5d 0a 09 09 7d 0a 09 09 32 20  ext}]"]...}...2 
14bf0 7b 0a 09 09 09 69 66 20 7b 22 23 22 20 3d 3d 20  {....if {"#" == 
14c00 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 7b  [string index ${
14c10 6f 6e 65 7d 20 30 5d 20 7c 7c 20 5b 72 65 67 65  one} 0] || [rege
14c20 78 70 20 7b 5e 5b 30 2d 39 5d 2a 24 7d 20 24 7b  xp {^[0-9]*$} ${
14c30 6f 6e 65 7d 5d 7d 20 7b 0a 09 09 09 09 72 65 74  one}]} {.....ret
14c40 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
14c50 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 43  mList ${text} [C
14c60 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e  ommandCompletion
14c70 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 7d 20   ${text}]]....} 
14c80 65 6c 73 65 20 7b 0a 09 09 09 09 72 65 74 75 72  else {.....retur
14c90 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
14ca0 3f 61 72 67 3f 5d 0a 09 09 09 7d 0a 09 09 7d 0a  ?arg?]....}...}.
14cb0 09 09 64 65 66 61 75 6c 74 20 7b 20 72 65 74 75  ..default { retu
14cc0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
14cd0 20 3f 61 72 67 3f 5d 20 7d 0a 09 7d 0a 09 72 65   ?arg?] }..}..re
14ce0 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20  turn "".}..proc 
14cf0 63 6f 6d 70 6c 65 74 65 28 75 70 76 61 72 29 20  complete(upvar) 
14d00 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
14d10 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
14d20 09 73 65 74 20 6f 6e 65 20 5b 4c 69 6e 64 65 78  .set one [Lindex
14d30 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73 77 69   ${line} 1]..swi
14d40 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09  tch -- $pos {...
14d50 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 44  1 {....return [D
14d60 69 73 70 6c 61 79 48 69 6e 74 73 20 7b 3f 6c 65  isplayHints {?le
14d70 76 65 6c 3f 20 3c 6f 74 68 65 72 56 61 72 3e 7d  vel? <otherVar>}
14d80 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09 69  ]...}...2 {....i
14d90 66 20 7b 22 23 22 20 3d 3d 20 5b 73 74 72 69 6e  f {"#" == [strin
14da0 67 20 69 6e 64 65 78 20 24 6f 6e 65 20 30 5d 20  g index $one 0] 
14db0 7c 7c 20 5b 72 65 67 65 78 70 20 7b 5e 5b 30 2d  || [regexp {^[0-
14dc0 39 5d 2a 24 7d 20 24 6f 6e 65 5d 7d 20 7b 0a 09  9]*$} $one]} {..
14dd0 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  ...return [Displ
14de0 61 79 48 69 6e 74 73 20 3c 6f 74 68 65 72 56 61  ayHints <otherVa
14df0 72 3e 5d 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a  r>]....} else {.
14e00 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70  ....return [Disp
14e10 6c 61 79 48 69 6e 74 73 20 3c 6d 79 56 61 72 3e  layHints <myVar>
14e20 5d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 33 20 7b  ]....}...}...3 {
14e30 0a 09 09 09 69 66 20 7b 22 23 22 20 3d 3d 20 5b  ....if {"#" == [
14e40 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 6f 6e  string index $on
14e50 65 20 30 5d 20 7c 7c 20 5b 72 65 67 65 78 70 20  e 0] || [regexp 
14e60 7b 5e 5b 30 2d 39 5d 2a 24 7d 20 24 6f 6e 65 5d  {^[0-9]*$} $one]
14e70 7d 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 20 5b  } {.....return [
14e80 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6d 79  DisplayHints <my
14e90 56 61 72 3e 5d 0a 09 09 09 7d 20 65 6c 73 65 20  Var>]....} else 
14ea0 7b 0a 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  {.....return [Di
14eb0 73 70 6c 61 79 48 69 6e 74 73 20 3f 6f 74 68 65  splayHints ?othe
14ec0 72 56 61 72 3f 5d 0a 09 09 09 7d 0a 09 09 7d 0a  rVar?]....}...}.
14ed0 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 73  ..default {....s
14ee0 65 74 20 76 69 72 74 75 61 6c 5f 70 6f 73 20 24  et virtual_pos $
14ef0 70 6f 73 0a 09 09 09 69 66 20 7b 22 23 22 20 3d  pos....if {"#" =
14f00 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20  = [string index 
14f10 24 6f 6e 65 20 30 5d 20 7c 7c 20 5b 72 65 67 65  $one 0] || [rege
14f20 78 70 20 7b 5e 5b 30 2d 39 5d 2a 24 7d 20 24 6f  xp {^[0-9]*$} $o
14f30 6e 65 5d 7d 20 7b 0a 09 09 09 09 69 6e 63 72 20  ne]} {.....incr 
14f40 76 69 72 74 75 61 6c 5f 70 6f 73 0a 09 09 09 7d  virtual_pos....}
14f50 0a 09 09 09 73 77 69 74 63 68 20 5b 65 78 70 72  ....switch [expr
14f60 20 24 76 69 72 74 75 61 6c 5f 70 6f 73 20 25 20   $virtual_pos % 
14f70 32 5d 20 7b 0a 09 09 09 09 30 20 7b 20 72 65 74  2] {.....0 { ret
14f80 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
14f90 73 20 3f 6d 79 56 61 72 3f 5d 20 7d 0a 09 09 09  s ?myVar?] }....
14fa0 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .1 { return [Dis
14fb0 70 6c 61 79 48 69 6e 74 73 20 3f 6f 74 68 65 72  playHints ?other
14fc0 56 61 72 3f 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d  Var?] }....}...}
14fd0 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
14fe0 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
14ff0 76 61 72 69 61 62 6c 65 29 20 7b 74 65 78 74 20  variable) {text 
15000 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
15010 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 6d  os mod} {..set m
15020 6f 64 75 6c 6f 20 5b 65 78 70 72 20 24 70 6f 73  odulo [expr $pos
15030 20 25 20 32 5d 0a 09 73 77 69 74 63 68 20 2d 2d   % 2]..switch --
15040 20 24 6d 6f 64 75 6c 6f 20 7b 0a 09 09 31 20 7b   $modulo {...1 {
15050 20 72 65 74 75 72 6e 20 5b 56 61 72 43 6f 6d 70   return [VarComp
15060 6c 65 74 69 6f 6e 20 24 7b 74 65 78 74 7d 5d 20  letion ${text}] 
15070 7d 0a 09 09 30 20 7b 0a 09 09 09 69 66 20 7b 24  }...0 {....if {$
15080 74 65 78 74 20 3d 3d 20 22 22 20 7c 7c 20 24 74  text == "" || $t
15090 65 78 74 20 3d 3d 20 22 5c 22 22 20 7c 7c 20 24  ext == "\"" || $
150a0 74 65 78 74 20 3d 3d 20 22 5c 7b 22 7d 20 7b 0a  text == "\{"} {.
150b0 09 09 09 09 73 65 74 20 6c 69 6e 65 20 5b 51 75  ....set line [Qu
150c0 6f 74 65 51 75 6f 74 65 73 20 24 6c 69 6e 65 5d  oteQuotes $line]
150d0 0a 09 09 09 09 69 66 20 7b 5b 63 61 74 63 68 20  .....if {[catch 
150e0 5b 6c 69 73 74 20 73 65 74 20 76 61 6c 75 65 20  [list set value 
150f0 5b 6c 69 73 74 20 5b 75 70 6c 65 76 65 6c 20 5b  [list [uplevel [
15100 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 5c 0a 09 09  info level] \...
15110 09 09 09 73 65 74 20 5b 50 72 65 76 69 6f 75 73  ...set [Previous
15120 57 6f 72 64 20 24 73 74 61 72 74 20 24 6c 69 6e  Word $start $lin
15130 65 5d 5d 5d 5d 20 6d 73 67 5d 0a 09 09 09 09 7d  e]]]] msg].....}
15140 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 22   {......return "
15150 22 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09  ".....} else {..
15160 09 09 09 09 72 65 74 75 72 6e 20 5b 51 75 6f 74  ....return [Quot
15170 65 20 24 76 61 6c 75 65 20 24 7b 74 65 78 74 7d  e $value ${text}
15180 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d  ].....}....}...}
15190 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
151a0 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
151b0 76 77 61 69 74 29 20 7b 74 65 78 74 20 73 74 61  vwait) {text sta
151c0 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
151d0 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d  mod} {..switch -
151e0 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72  - $pos {...1 { r
151f0 65 74 75 72 6e 20 5b 56 61 72 43 6f 6d 70 6c 65  eturn [VarComple
15200 74 69 6f 6e 20 24 7b 6d 6f 64 7d 5d 20 7d 0a 09  tion ${mod}] }..
15210 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
15220 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 77 68  proc complete(wh
15230 69 6c 65 29 20 7b 74 65 78 74 20 73 74 61 72 74  ile) {text start
15240 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
15250 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20  d} {..switch -- 
15260 24 70 6f 73 20 7b 0a 09 09 31 20 2d 0a 09 09 32  $pos {...1 -...2
15270 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 42 72   {....return [Br
15280 61 63 65 4f 72 43 6f 6d 6d 61 6e 64 20 24 74 65  aceOrCommand $te
15290 78 74 20 24 73 74 61 72 74 20 24 65 6e 64 20 24  xt $start $end $
152a0 6c 69 6e 65 20 24 70 6f 73 20 24 6d 6f 64 5d 0a  line $pos $mod].
152b0 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
152c0 22 0a 7d 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  ".}..# ---------
152d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
152e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 20  ------------.#  
152f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15300 54 4b 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  TK.# -----------
15310 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15320 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 47 45  ----------..# GE
15330 4e 45 52 49 43 20 57 49 44 47 45 54 20 43 4f 4e  NERIC WIDGET CON
15340 46 49 47 55 52 41 54 49 4f 4e 0a 0a 70 72 6f 63  FIGURATION..proc
15350 20 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20   WidgetChildren 
15360 7b 7b 70 61 74 74 65 72 6e 20 2e 7d 7d 20 7b 0a  {{pattern .}} {.
15370 09 72 65 67 73 75 62 20 7b 5e 28 5b 5e 5c 2e 5d  .regsub {^([^\.]
15380 29 7d 20 24 7b 70 61 74 74 65 72 6e 7d 20 7b 5c  )} ${pattern} {\
15390 2e 5c 31 7d 20 70 61 74 74 65 72 6e 0a 09 69 66  .\1} pattern..if
153a0 20 7b 21 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74   {![string lengt
153b0 68 20 24 7b 70 61 74 74 65 72 6e 7d 5d 7d 20 7b  h ${pattern}]} {
153c0 0a 09 09 73 65 74 20 70 61 74 74 65 72 6e 20 2e  ...set pattern .
153d0 0a 09 7d 0a 09 69 66 20 7b 5b 77 69 6e 66 6f 20  ..}..if {[winfo 
153e0 65 78 69 73 74 73 20 24 7b 70 61 74 74 65 72 6e  exists ${pattern
153f0 7d 5d 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 5b  }]} {...return [
15400 63 6f 6e 63 61 74 20 24 7b 70 61 74 74 65 72 6e  concat ${pattern
15410 7d 20 5b 77 69 6e 66 6f 20 63 68 69 6c 64 72 65  } [winfo childre
15420 6e 20 24 7b 70 61 74 74 65 72 6e 7d 5d 5d 0a 09  n ${pattern}]]..
15430 7d 20 65 6c 73 65 20 7b 0a 09 09 72 65 67 73 75  } else {...regsu
15440 62 20 7b 2e 5b 5e 2e 5d 2a 24 7d 20 24 70 61 74  b {.[^.]*$} $pat
15450 74 65 72 6e 20 7b 2e 7d 20 70 61 74 74 65 72 6e  tern {.} pattern
15460 0a 09 09 69 66 20 7b 5b 77 69 6e 66 6f 20 65 78  ...if {[winfo ex
15470 69 73 74 73 20 24 7b 70 61 74 74 65 72 6e 7d 5d  ists ${pattern}]
15480 7d 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 63  } {....return [c
15490 6f 6e 63 61 74 20 24 7b 70 61 74 74 65 72 6e 7d  oncat ${pattern}
154a0 20 5b 77 69 6e 66 6f 20 63 68 69 6c 64 72 65 6e   [winfo children
154b0 20 24 7b 70 61 74 74 65 72 6e 7d 5d 5d 0a 09 09   ${pattern}]]...
154c0 7d 20 65 6c 73 65 20 7b 0a 09 09 09 72 65 74 75  } else {....retu
154d0 72 6e 20 22 22 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a  rn ""...}..}.}..
154e0 70 72 6f 63 20 57 69 64 67 65 74 44 65 73 63 65  proc WidgetDesce
154f0 6e 64 61 6e 74 73 20 7b 7b 70 61 74 74 65 72 6e  ndants {{pattern
15500 20 2e 7d 7d 20 7b 0a 09 73 65 74 20 74 72 65 65   .}} {..set tree
15510 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e   [WidgetChildren
15520 20 24 7b 70 61 74 74 65 72 6e 7d 5d 0a 09 66 6f   ${pattern}]..fo
15530 72 65 61 63 68 20 77 69 64 67 65 74 20 24 74 72  reach widget $tr
15540 65 65 20 7b 0a 09 09 61 70 70 65 6e 64 20 74 72  ee {...append tr
15550 65 65 20 22 20 5b 57 69 64 67 65 74 44 65 73 63  ee " [WidgetDesc
15560 65 6e 64 61 6e 74 73 20 24 77 69 64 67 65 74 5d  endants $widget]
15570 22 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 74 72  "..}..return $tr
15580 65 65 0a 7d 0a 0a 70 72 6f 63 20 54 6f 70 6c 65  ee.}..proc Tople
15590 76 65 6c 57 69 6e 64 6f 77 73 20 7b 7d 20 7b 0a  velWindows {} {.
155a0 09 73 65 74 20 63 68 69 6c 64 72 65 6e 20 5b 57  .set children [W
155b0 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 22 22  idgetChildren ""
155c0 5d 0a 09 73 65 74 20 74 6f 70 6c 65 76 65 6c 73  ]..set toplevels
155d0 20 22 22 0a 09 66 6f 72 65 61 63 68 20 77 69 64   ""..foreach wid
155e0 67 65 74 20 24 63 68 69 6c 64 72 65 6e 20 7b 0a  get $children {.
155f0 09 09 73 65 74 20 74 6f 70 6c 65 76 65 6c 20 5b  ..set toplevel [
15600 77 69 6e 66 6f 20 74 6f 70 6c 65 76 65 6c 20 24  winfo toplevel $
15610 77 69 64 67 65 74 5d 0a 09 09 69 66 20 7b 2d 31  widget]...if {-1
15620 20 3d 3d 20 5b 6c 73 65 61 72 63 68 20 24 74 6f   == [lsearch $to
15630 70 6c 65 76 65 6c 73 20 24 74 6f 70 6c 65 76 65  plevels $topleve
15640 6c 5d 7d 20 7b 0a 09 09 09 6c 61 70 70 65 6e 64  l]} {....lappend
15650 20 74 6f 70 6c 65 76 65 6c 73 20 24 74 6f 70 6c   toplevels $topl
15660 65 76 65 6c 0a 09 09 7d 0a 09 7d 0a 09 72 65 74  evel...}..}..ret
15670 75 72 6e 20 24 74 6f 70 6c 65 76 65 6c 73 0a 7d  urn $toplevels.}
15680 0a 0a 23 20 54 4f 44 4f 0a 23 20 77 72 69 74 65  ..# TODO.# write
15690 20 61 20 64 69 73 70 61 74 63 68 65 72 20 68 65   a dispatcher he
156a0 72 65 2c 20 77 68 69 63 68 20 67 65 74 73 20 74  re, which gets t
156b0 68 65 20 77 69 64 67 65 74 20 63 6c 61 73 73 20  he widget class 
156c0 6e 61 6d 65 0a 23 20 61 6e 64 20 63 61 6c 6c 73  name.# and calls
156d0 20 73 70 65 63 69 66 69 63 20 63 6f 6d 70 6c 65   specific comple
156e0 74 65 72 73 2e 0a 23 0a 23 20 70 72 6f 63 20 63  ters..#.# proc c
156f0 6f 6d 70 6c 65 74 65 28 57 49 44 47 45 54 5f 43  omplete(WIDGET_C
15700 4f 4d 4d 41 4e 44 29 20 7b 74 65 78 74 20 73 74  OMMAND) {text st
15710 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
15720 20 6d 6f 64 7d 20 7b 0a 23 20 09 72 65 74 75 72   mod} {.# .retur
15730 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4f  n [CompleteFromO
15740 70 74 69 6f 6e 73 4f 72 53 75 62 43 6d 64 73 20  ptionsOrSubCmds 
15750 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d  ${text} ${start}
15760 20 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20   ${end} ${line} 
15770 24 7b 70 6f 73 7d 5d 0a 23 20 7d 0a 0a 70 72 6f  ${pos}].# }..pro
15780 63 20 45 76 65 6e 74 75 61 6c 6c 79 49 6e 73 65  c EventuallyInse
15790 72 74 4c 65 61 64 69 6e 67 44 6f 74 20 7b 74 65  rtLeadingDot {te
157a0 78 74 20 66 61 6c 6c 62 61 63 6b 7d 20 7b 0a 09  xt fallback} {..
157b0 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6c 65 6e  if {![string len
157c0 67 74 68 20 24 7b 74 65 78 74 7d 5d 7d 20 7b 0a  gth ${text}]} {.
157d0 09 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 2e  ..return [list .
157e0 20 7b 7d 5d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09   {}]..} else {..
157f0 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79  .return [Display
15800 48 69 6e 74 73 20 24 7b 66 61 6c 6c 62 61 63 6b  Hints ${fallback
15810 7d 5d 0a 09 7d 0a 7d 0a 0a 23 20 54 4f 44 4f 0a  }]..}.}..# TODO.
15820 70 72 6f 63 20 43 6f 6d 70 6c 65 74 65 43 6f 6c  proc CompleteCol
15830 6f 72 20 7b 74 65 78 74 20 7b 61 64 64 20 22 22  or {text {add ""
15840 7d 7d 20 7b 0a 0a 09 23 20 77 65 20 73 65 74 20  }} {...# we set 
15850 74 68 65 20 76 61 72 69 61 62 6c 65 20 6f 6e 6c  the variable onl
15860 79 20 6f 6e 63 65 20 74 6f 20 73 70 65 65 64 20  y once to speed 
15870 75 70 2e 0a 09 23 0a 09 76 61 72 69 61 62 6c 65  up...#..variable
15880 20 63 6f 6c 6f 72 73 0a 09 76 61 72 69 61 62 6c   colors..variabl
15890 65 20 6e 75 6d 62 65 72 6c 65 73 73 5f 63 6f 6c  e numberless_col
158a0 6f 72 73 0a 0a 09 69 66 20 21 5b 69 6e 66 6f 20  ors...if ![info 
158b0 65 78 69 73 74 73 20 63 6f 6c 6f 72 73 5d 20 7b  exists colors] {
158c0 0a 09 09 23 20 66 72 6f 6d 20 2e 2e 20 58 31 31  ...# from .. X11
158d0 52 36 2f 6c 69 62 2f 58 31 31 2f 72 67 62 2e 74  R6/lib/X11/rgb.t
158e0 78 74 0a 09 09 23 20 0a 09 09 73 65 74 20 63 6f  xt...# ...set co
158f0 6c 6f 72 73 20 7b 0a 09 09 09 73 6e 6f 77 20 47  lors {....snow G
15900 68 6f 73 74 57 68 69 74 65 20 57 68 69 74 65 53  hostWhite WhiteS
15910 6d 6f 6b 65 20 67 61 69 6e 73 62 6f 72 6f 20 46  moke gainsboro F
15920 6c 6f 72 61 6c 57 68 69 74 65 20 4f 6c 64 4c 61  loralWhite OldLa
15930 63 65 20 6c 69 6e 65 6e 0a 09 09 09 41 6e 74 69  ce linen....Anti
15940 71 75 65 57 68 69 74 65 20 50 61 70 61 79 61 57  queWhite PapayaW
15950 68 69 70 20 42 6c 61 6e 63 68 65 64 41 6c 6d 6f  hip BlanchedAlmo
15960 6e 64 20 62 69 73 71 75 65 20 50 65 61 63 68 50  nd bisque PeachP
15970 75 66 66 20 4e 61 76 61 6a 6f 57 68 69 74 65 0a  uff NavajoWhite.
15980 09 09 09 6d 6f 63 63 61 73 69 6e 20 63 6f 72 6e  ...moccasin corn
15990 73 69 6c 6b 20 69 76 6f 72 79 20 4c 65 6d 6f 6e  silk ivory Lemon
159a0 43 68 69 66 66 6f 6e 20 73 65 61 73 68 65 6c 6c  Chiffon seashell
159b0 20 68 6f 6e 65 79 64 65 77 20 4d 69 6e 74 43 72   honeydew MintCr
159c0 65 61 6d 0a 09 09 09 61 7a 75 72 65 20 41 6c 69  eam....azure Ali
159d0 63 65 42 6c 75 65 20 6c 61 76 65 6e 64 65 72 20  ceBlue lavender 
159e0 4c 61 76 65 6e 64 65 72 42 6c 75 73 68 20 4d 69  LavenderBlush Mi
159f0 73 74 79 52 6f 73 65 20 77 68 69 74 65 20 62 6c  styRose white bl
15a00 61 63 6b 0a 09 09 09 44 61 72 6b 53 6c 61 74 65  ack....DarkSlate
15a10 47 72 61 79 20 44 61 72 6b 53 6c 61 74 65 47 72  Gray DarkSlateGr
15a20 65 79 20 44 69 6d 47 72 61 79 20 44 69 6d 47 72  ey DimGray DimGr
15a30 65 79 20 53 6c 61 74 65 47 72 61 79 20 53 6c 61  ey SlateGray Sla
15a40 74 65 47 72 65 79 0a 09 09 09 4c 69 67 68 74 53  teGrey....LightS
15a50 6c 61 74 65 47 72 61 79 20 4c 69 67 68 74 53 6c  lateGray LightSl
15a60 61 74 65 47 72 65 79 20 67 72 61 79 20 67 72 65  ateGrey gray gre
15a70 79 20 4c 69 67 68 74 47 72 65 79 20 4c 69 67 68  y LightGrey Ligh
15a80 74 47 72 61 79 0a 09 09 09 4d 69 64 6e 69 67 68  tGray....Midnigh
15a90 74 42 6c 75 65 20 6e 61 76 79 20 4e 61 76 79 42  tBlue navy NavyB
15aa0 6c 75 65 20 43 6f 72 6e 66 6c 6f 77 65 72 42 6c  lue CornflowerBl
15ab0 75 65 20 44 61 72 6b 53 6c 61 74 65 42 6c 75 65  ue DarkSlateBlue
15ac0 20 53 6c 61 74 65 42 6c 75 65 0a 09 09 09 4d 65   SlateBlue....Me
15ad0 64 69 75 6d 53 6c 61 74 65 42 6c 75 65 20 4c 69  diumSlateBlue Li
15ae0 67 68 74 53 6c 61 74 65 42 6c 75 65 20 4d 65 64  ghtSlateBlue Med
15af0 69 75 6d 42 6c 75 65 20 52 6f 79 61 6c 42 6c 75  iumBlue RoyalBlu
15b00 65 20 62 6c 75 65 20 44 6f 64 67 65 72 42 6c 75  e blue DodgerBlu
15b10 65 0a 09 09 09 44 65 65 70 53 6b 79 42 6c 75 65  e....DeepSkyBlue
15b20 20 53 6b 79 42 6c 75 65 20 4c 69 67 68 74 53 6b   SkyBlue LightSk
15b30 79 42 6c 75 65 20 53 74 65 65 6c 42 6c 75 65 20  yBlue SteelBlue 
15b40 4c 69 67 68 74 53 74 65 65 6c 42 6c 75 65 20 4c  LightSteelBlue L
15b50 69 67 68 74 42 6c 75 65 0a 09 09 09 50 6f 77 64  ightBlue....Powd
15b60 65 72 42 6c 75 65 20 50 61 6c 65 54 75 72 71 75  erBlue PaleTurqu
15b70 6f 69 73 65 20 44 61 72 6b 54 75 72 71 75 6f 69  oise DarkTurquoi
15b80 73 65 20 4d 65 64 69 75 6d 54 75 72 71 75 6f 69  se MediumTurquoi
15b90 73 65 20 74 75 72 71 75 6f 69 73 65 0a 09 09 09  se turquoise....
15ba0 63 79 61 6e 20 4c 69 67 68 74 43 79 61 6e 20 43  cyan LightCyan C
15bb0 61 64 65 74 42 6c 75 65 20 4d 65 64 69 75 6d 41  adetBlue MediumA
15bc0 71 75 61 6d 61 72 69 6e 65 20 61 71 75 61 6d 61  quamarine aquama
15bd0 72 69 6e 65 20 44 61 72 6b 47 72 65 65 6e 0a 09  rine DarkGreen..
15be0 09 09 44 61 72 6b 4f 6c 69 76 65 47 72 65 65 6e  ..DarkOliveGreen
15bf0 20 44 61 72 6b 53 65 61 47 72 65 65 6e 20 53 65   DarkSeaGreen Se
15c00 61 47 72 65 65 6e 20 4d 65 64 69 75 6d 53 65 61  aGreen MediumSea
15c10 47 72 65 65 6e 20 4c 69 67 68 74 53 65 61 47 72  Green LightSeaGr
15c20 65 65 6e 0a 09 09 09 50 61 6c 65 47 72 65 65 6e  een....PaleGreen
15c30 20 53 70 72 69 6e 67 47 72 65 65 6e 20 4c 61 77   SpringGreen Law
15c40 6e 47 72 65 65 6e 20 67 72 65 65 6e 20 63 68 61  nGreen green cha
15c50 72 74 72 65 75 73 65 20 4d 65 64 69 75 6d 53 70  rtreuse MediumSp
15c60 72 69 6e 67 47 72 65 65 6e 0a 09 09 09 47 72 65  ringGreen....Gre
15c70 65 6e 59 65 6c 6c 6f 77 20 4c 69 6d 65 47 72 65  enYellow LimeGre
15c80 65 6e 20 59 65 6c 6c 6f 77 47 72 65 65 6e 20 46  en YellowGreen F
15c90 6f 72 65 73 74 47 72 65 65 6e 20 4f 6c 69 76 65  orestGreen Olive
15ca0 44 72 61 62 20 44 61 72 6b 4b 68 61 6b 69 0a 09  Drab DarkKhaki..
15cb0 09 09 6b 68 61 6b 69 20 50 61 6c 65 47 6f 6c 64  ..khaki PaleGold
15cc0 65 6e 72 6f 64 20 4c 69 67 68 74 47 6f 6c 64 65  enrod LightGolde
15cd0 6e 72 6f 64 59 65 6c 6c 6f 77 20 4c 69 67 68 74  nrodYellow Light
15ce0 59 65 6c 6c 6f 77 20 79 65 6c 6c 6f 77 0a 09 09  Yellow yellow...
15cf0 09 67 6f 6c 64 20 4c 69 67 68 74 47 6f 6c 64 65  .gold LightGolde
15d00 6e 72 6f 64 20 67 6f 6c 64 65 6e 72 6f 64 20 44  nrod goldenrod D
15d10 61 72 6b 47 6f 6c 64 65 6e 72 6f 64 20 52 6f 73  arkGoldenrod Ros
15d20 79 42 72 6f 77 6e 20 49 6e 64 69 61 6e 52 65 64  yBrown IndianRed
15d30 0a 09 09 09 53 61 64 64 6c 65 42 72 6f 77 6e 20  ....SaddleBrown 
15d40 73 69 65 6e 6e 61 20 70 65 72 75 20 62 75 72 6c  sienna peru burl
15d50 79 77 6f 6f 64 20 62 65 69 67 65 20 77 68 65 61  ywood beige whea
15d60 74 20 53 61 6e 64 79 42 72 6f 77 6e 20 74 61 6e  t SandyBrown tan
15d70 0a 09 09 09 63 68 6f 63 6f 6c 61 74 65 20 66 69  ....chocolate fi
15d80 72 65 62 72 69 63 6b 20 62 72 6f 77 6e 20 44 61  rebrick brown Da
15d90 72 6b 53 61 6c 6d 6f 6e 20 73 61 6c 6d 6f 6e 20  rkSalmon salmon 
15da0 4c 69 67 68 74 53 61 6c 6d 6f 6e 20 6f 72 61 6e  LightSalmon oran
15db0 67 65 0a 09 09 09 44 61 72 6b 4f 72 61 6e 67 65  ge....DarkOrange
15dc0 20 63 6f 72 61 6c 20 4c 69 67 68 74 43 6f 72 61   coral LightCora
15dd0 6c 20 74 6f 6d 61 74 6f 20 4f 72 61 6e 67 65 52  l tomato OrangeR
15de0 65 64 20 72 65 64 20 48 6f 74 50 69 6e 6b 20 44  ed red HotPink D
15df0 65 65 70 50 69 6e 6b 0a 09 09 09 70 69 6e 6b 20  eepPink....pink 
15e00 4c 69 67 68 74 50 69 6e 6b 20 50 61 6c 65 56 69  LightPink PaleVi
15e10 6f 6c 65 74 52 65 64 20 6d 61 72 6f 6f 6e 20 4d  oletRed maroon M
15e20 65 64 69 75 6d 56 69 6f 6c 65 74 52 65 64 20 56  ediumVioletRed V
15e30 69 6f 6c 65 74 52 65 64 0a 09 09 09 6d 61 67 65  ioletRed....mage
15e40 6e 74 61 20 76 69 6f 6c 65 74 20 70 6c 75 6d 20  nta violet plum 
15e50 6f 72 63 68 69 64 20 4d 65 64 69 75 6d 4f 72 63  orchid MediumOrc
15e60 68 69 64 20 44 61 72 6b 4f 72 63 68 69 64 20 44  hid DarkOrchid D
15e70 61 72 6b 56 69 6f 6c 65 74 0a 09 09 09 42 6c 75  arkViolet....Blu
15e80 65 56 69 6f 6c 65 74 20 70 75 72 70 6c 65 20 4d  eViolet purple M
15e90 65 64 69 75 6d 50 75 72 70 6c 65 20 74 68 69 73  ediumPurple this
15ea0 74 6c 65 20 73 6e 6f 77 31 20 73 6e 6f 77 32 20  tle snow1 snow2 
15eb0 73 6e 6f 77 33 20 73 6e 6f 77 34 0a 09 09 09 73  snow3 snow4....s
15ec0 65 61 73 68 65 6c 6c 31 20 73 65 61 73 68 65 6c  eashell1 seashel
15ed0 6c 32 20 73 65 61 73 68 65 6c 6c 33 20 73 65 61  l2 seashell3 sea
15ee0 73 68 65 6c 6c 34 20 41 6e 74 69 71 75 65 57 68  shell4 AntiqueWh
15ef0 69 74 65 31 20 41 6e 74 69 71 75 65 57 68 69 74  ite1 AntiqueWhit
15f00 65 32 0a 09 09 09 41 6e 74 69 71 75 65 57 68 69  e2....AntiqueWhi
15f10 74 65 33 20 41 6e 74 69 71 75 65 57 68 69 74 65  te3 AntiqueWhite
15f20 34 20 62 69 73 71 75 65 31 20 62 69 73 71 75 65  4 bisque1 bisque
15f30 32 20 62 69 73 71 75 65 33 20 62 69 73 71 75 65  2 bisque3 bisque
15f40 34 0a 09 09 09 50 65 61 63 68 50 75 66 66 31 20  4....PeachPuff1 
15f50 50 65 61 63 68 50 75 66 66 32 20 50 65 61 63 68  PeachPuff2 Peach
15f60 50 75 66 66 33 20 50 65 61 63 68 50 75 66 66 34  Puff3 PeachPuff4
15f70 20 4e 61 76 61 6a 6f 57 68 69 74 65 31 0a 09 09   NavajoWhite1...
15f80 09 4e 61 76 61 6a 6f 57 68 69 74 65 32 20 4e 61  .NavajoWhite2 Na
15f90 76 61 6a 6f 57 68 69 74 65 33 20 4e 61 76 61 6a  vajoWhite3 Navaj
15fa0 6f 57 68 69 74 65 34 20 4c 65 6d 6f 6e 43 68 69  oWhite4 LemonChi
15fb0 66 66 6f 6e 31 20 4c 65 6d 6f 6e 43 68 69 66 66  ffon1 LemonChiff
15fc0 6f 6e 32 0a 09 09 09 4c 65 6d 6f 6e 43 68 69 66  on2....LemonChif
15fd0 66 6f 6e 33 20 4c 65 6d 6f 6e 43 68 69 66 66 6f  fon3 LemonChiffo
15fe0 6e 34 20 63 6f 72 6e 73 69 6c 6b 31 20 63 6f 72  n4 cornsilk1 cor
15ff0 6e 73 69 6c 6b 32 20 63 6f 72 6e 73 69 6c 6b 33  nsilk2 cornsilk3
16000 20 63 6f 72 6e 73 69 6c 6b 34 0a 09 09 09 69 76   cornsilk4....iv
16010 6f 72 79 31 20 69 76 6f 72 79 32 20 69 76 6f 72  ory1 ivory2 ivor
16020 79 33 20 69 76 6f 72 79 34 20 68 6f 6e 65 79 64  y3 ivory4 honeyd
16030 65 77 31 20 68 6f 6e 65 79 64 65 77 32 20 68 6f  ew1 honeydew2 ho
16040 6e 65 79 64 65 77 33 20 68 6f 6e 65 79 64 65 77  neydew3 honeydew
16050 34 0a 09 09 09 4c 61 76 65 6e 64 65 72 42 6c 75  4....LavenderBlu
16060 73 68 31 20 4c 61 76 65 6e 64 65 72 42 6c 75 73  sh1 LavenderBlus
16070 68 32 20 4c 61 76 65 6e 64 65 72 42 6c 75 73 68  h2 LavenderBlush
16080 33 20 4c 61 76 65 6e 64 65 72 42 6c 75 73 68 34  3 LavenderBlush4
16090 0a 09 09 09 4d 69 73 74 79 52 6f 73 65 31 20 4d  ....MistyRose1 M
160a0 69 73 74 79 52 6f 73 65 32 20 4d 69 73 74 79 52  istyRose2 MistyR
160b0 6f 73 65 33 20 4d 69 73 74 79 52 6f 73 65 34 20  ose3 MistyRose4 
160c0 61 7a 75 72 65 31 20 61 7a 75 72 65 32 20 61 7a  azure1 azure2 az
160d0 75 72 65 33 0a 09 09 09 61 7a 75 72 65 34 20 53  ure3....azure4 S
160e0 6c 61 74 65 42 6c 75 65 31 20 53 6c 61 74 65 42  lateBlue1 SlateB
160f0 6c 75 65 32 20 53 6c 61 74 65 42 6c 75 65 33 20  lue2 SlateBlue3 
16100 53 6c 61 74 65 42 6c 75 65 34 20 52 6f 79 61 6c  SlateBlue4 Royal
16110 42 6c 75 65 31 0a 09 09 09 52 6f 79 61 6c 42 6c  Blue1....RoyalBl
16120 75 65 32 20 52 6f 79 61 6c 42 6c 75 65 33 20 52  ue2 RoyalBlue3 R
16130 6f 79 61 6c 42 6c 75 65 34 20 62 6c 75 65 31 20  oyalBlue4 blue1 
16140 62 6c 75 65 32 20 62 6c 75 65 33 20 62 6c 75 65  blue2 blue3 blue
16150 34 0a 09 09 09 44 6f 64 67 65 72 42 6c 75 65 31  4....DodgerBlue1
16160 20 44 6f 64 67 65 72 42 6c 75 65 32 20 44 6f 64   DodgerBlue2 Dod
16170 67 65 72 42 6c 75 65 33 20 44 6f 64 67 65 72 42  gerBlue3 DodgerB
16180 6c 75 65 34 20 53 74 65 65 6c 42 6c 75 65 31 0a  lue4 SteelBlue1.
16190 09 09 09 53 74 65 65 6c 42 6c 75 65 32 20 53 74  ...SteelBlue2 St
161a0 65 65 6c 42 6c 75 65 33 20 53 74 65 65 6c 42 6c  eelBlue3 SteelBl
161b0 75 65 34 20 44 65 65 70 53 6b 79 42 6c 75 65 31  ue4 DeepSkyBlue1
161c0 20 44 65 65 70 53 6b 79 42 6c 75 65 32 0a 09 09   DeepSkyBlue2...
161d0 09 44 65 65 70 53 6b 79 42 6c 75 65 33 20 44 65  .DeepSkyBlue3 De
161e0 65 70 53 6b 79 42 6c 75 65 34 20 53 6b 79 42 6c  epSkyBlue4 SkyBl
161f0 75 65 31 20 53 6b 79 42 6c 75 65 32 20 53 6b 79  ue1 SkyBlue2 Sky
16200 42 6c 75 65 33 20 53 6b 79 42 6c 75 65 34 0a 09  Blue3 SkyBlue4..
16210 09 09 4c 69 67 68 74 53 6b 79 42 6c 75 65 31 20  ..LightSkyBlue1 
16220 4c 69 67 68 74 53 6b 79 42 6c 75 65 32 20 4c 69  LightSkyBlue2 Li
16230 67 68 74 53 6b 79 42 6c 75 65 33 20 4c 69 67 68  ghtSkyBlue3 Ligh
16240 74 53 6b 79 42 6c 75 65 34 20 53 6c 61 74 65 47  tSkyBlue4 SlateG
16250 72 61 79 31 0a 09 09 09 53 6c 61 74 65 47 72 61  ray1....SlateGra
16260 79 32 20 53 6c 61 74 65 47 72 61 79 33 20 53 6c  y2 SlateGray3 Sl
16270 61 74 65 47 72 61 79 34 20 4c 69 67 68 74 53 74  ateGray4 LightSt
16280 65 65 6c 42 6c 75 65 31 20 4c 69 67 68 74 53 74  eelBlue1 LightSt
16290 65 65 6c 42 6c 75 65 32 0a 09 09 09 4c 69 67 68  eelBlue2....Ligh
162a0 74 53 74 65 65 6c 42 6c 75 65 33 20 4c 69 67 68  tSteelBlue3 Ligh
162b0 74 53 74 65 65 6c 42 6c 75 65 34 20 4c 69 67 68  tSteelBlue4 Ligh
162c0 74 42 6c 75 65 31 20 4c 69 67 68 74 42 6c 75 65  tBlue1 LightBlue
162d0 32 20 4c 69 67 68 74 42 6c 75 65 33 0a 09 09 09  2 LightBlue3....
162e0 4c 69 67 68 74 42 6c 75 65 34 20 4c 69 67 68 74  LightBlue4 Light
162f0 43 79 61 6e 31 20 4c 69 67 68 74 43 79 61 6e 32  Cyan1 LightCyan2
16300 20 4c 69 67 68 74 43 79 61 6e 33 20 4c 69 67 68   LightCyan3 Ligh
16310 74 43 79 61 6e 34 0a 09 09 09 50 61 6c 65 54 75  tCyan4....PaleTu
16320 72 71 75 6f 69 73 65 31 20 50 61 6c 65 54 75 72  rquoise1 PaleTur
16330 71 75 6f 69 73 65 32 20 50 61 6c 65 54 75 72 71  quoise2 PaleTurq
16340 75 6f 69 73 65 33 20 50 61 6c 65 54 75 72 71 75  uoise3 PaleTurqu
16350 6f 69 73 65 34 0a 09 09 09 43 61 64 65 74 42 6c  oise4....CadetBl
16360 75 65 31 20 43 61 64 65 74 42 6c 75 65 32 20 43  ue1 CadetBlue2 C
16370 61 64 65 74 42 6c 75 65 33 20 43 61 64 65 74 42  adetBlue3 CadetB
16380 6c 75 65 34 20 74 75 72 71 75 6f 69 73 65 31 0a  lue4 turquoise1.
16390 09 09 09 74 75 72 71 75 6f 69 73 65 32 20 74 75  ...turquoise2 tu
163a0 72 71 75 6f 69 73 65 33 20 74 75 72 71 75 6f 69  rquoise3 turquoi
163b0 73 65 34 20 63 79 61 6e 31 20 63 79 61 6e 32 20  se4 cyan1 cyan2 
163c0 63 79 61 6e 33 20 63 79 61 6e 34 0a 09 09 09 44  cyan3 cyan4....D
163d0 61 72 6b 53 6c 61 74 65 47 72 61 79 31 20 44 61  arkSlateGray1 Da
163e0 72 6b 53 6c 61 74 65 47 72 61 79 32 20 44 61 72  rkSlateGray2 Dar
163f0 6b 53 6c 61 74 65 47 72 61 79 33 20 44 61 72 6b  kSlateGray3 Dark
16400 53 6c 61 74 65 47 72 61 79 34 0a 09 09 09 61 71  SlateGray4....aq
16410 75 61 6d 61 72 69 6e 65 31 20 61 71 75 61 6d 61  uamarine1 aquama
16420 72 69 6e 65 32 20 61 71 75 61 6d 61 72 69 6e 65  rine2 aquamarine
16430 33 20 61 71 75 61 6d 61 72 69 6e 65 34 20 44 61  3 aquamarine4 Da
16440 72 6b 53 65 61 47 72 65 65 6e 31 0a 09 09 09 44  rkSeaGreen1....D
16450 61 72 6b 53 65 61 47 72 65 65 6e 32 20 44 61 72  arkSeaGreen2 Dar
16460 6b 53 65 61 47 72 65 65 6e 33 20 44 61 72 6b 53  kSeaGreen3 DarkS
16470 65 61 47 72 65 65 6e 34 20 53 65 61 47 72 65 65  eaGreen4 SeaGree
16480 6e 31 20 53 65 61 47 72 65 65 6e 32 0a 09 09 09  n1 SeaGreen2....
16490 53 65 61 47 72 65 65 6e 33 20 53 65 61 47 72 65  SeaGreen3 SeaGre
164a0 65 6e 34 20 50 61 6c 65 47 72 65 65 6e 31 20 50  en4 PaleGreen1 P
164b0 61 6c 65 47 72 65 65 6e 32 20 50 61 6c 65 47 72  aleGreen2 PaleGr
164c0 65 65 6e 33 20 50 61 6c 65 47 72 65 65 6e 34 0a  een3 PaleGreen4.
164d0 09 09 09 53 70 72 69 6e 67 47 72 65 65 6e 31 20  ...SpringGreen1 
164e0 53 70 72 69 6e 67 47 72 65 65 6e 32 20 53 70 72  SpringGreen2 Spr
164f0 69 6e 67 47 72 65 65 6e 33 20 53 70 72 69 6e 67  ingGreen3 Spring
16500 47 72 65 65 6e 34 20 67 72 65 65 6e 31 20 67 72  Green4 green1 gr
16510 65 65 6e 32 0a 09 09 09 67 72 65 65 6e 33 20 67  een2....green3 g
16520 72 65 65 6e 34 20 63 68 61 72 74 72 65 75 73 65  reen4 chartreuse
16530 31 20 63 68 61 72 74 72 65 75 73 65 32 20 63 68  1 chartreuse2 ch
16540 61 72 74 72 65 75 73 65 33 20 63 68 61 72 74 72  artreuse3 chartr
16550 65 75 73 65 34 0a 09 09 09 4f 6c 69 76 65 44 72  euse4....OliveDr
16560 61 62 31 20 4f 6c 69 76 65 44 72 61 62 32 20 4f  ab1 OliveDrab2 O
16570 6c 69 76 65 44 72 61 62 33 20 4f 6c 69 76 65 44  liveDrab3 OliveD
16580 72 61 62 34 20 44 61 72 6b 4f 6c 69 76 65 47 72  rab4 DarkOliveGr
16590 65 65 6e 31 0a 09 09 09 44 61 72 6b 4f 6c 69 76  een1....DarkOliv
165a0 65 47 72 65 65 6e 32 20 44 61 72 6b 4f 6c 69 76  eGreen2 DarkOliv
165b0 65 47 72 65 65 6e 33 20 44 61 72 6b 4f 6c 69 76  eGreen3 DarkOliv
165c0 65 47 72 65 65 6e 34 20 6b 68 61 6b 69 31 20 6b  eGreen4 khaki1 k
165d0 68 61 6b 69 32 0a 09 09 09 6b 68 61 6b 69 33 20  haki2....khaki3 
165e0 6b 68 61 6b 69 34 20 4c 69 67 68 74 47 6f 6c 64  khaki4 LightGold
165f0 65 6e 72 6f 64 31 20 4c 69 67 68 74 47 6f 6c 64  enrod1 LightGold
16600 65 6e 72 6f 64 32 20 4c 69 67 68 74 47 6f 6c 64  enrod2 LightGold
16610 65 6e 72 6f 64 33 0a 09 09 09 4c 69 67 68 74 47  enrod3....LightG
16620 6f 6c 64 65 6e 72 6f 64 34 20 4c 69 67 68 74 59  oldenrod4 LightY
16630 65 6c 6c 6f 77 31 20 4c 69 67 68 74 59 65 6c 6c  ellow1 LightYell
16640 6f 77 32 20 4c 69 67 68 74 59 65 6c 6c 6f 77 33  ow2 LightYellow3
16650 20 4c 69 67 68 74 59 65 6c 6c 6f 77 34 0a 09 09   LightYellow4...
16660 09 79 65 6c 6c 6f 77 31 20 79 65 6c 6c 6f 77 32  .yellow1 yellow2
16670 20 79 65 6c 6c 6f 77 33 20 79 65 6c 6c 6f 77 34   yellow3 yellow4
16680 20 67 6f 6c 64 31 20 67 6f 6c 64 32 20 67 6f 6c   gold1 gold2 gol
16690 64 33 20 67 6f 6c 64 34 20 67 6f 6c 64 65 6e 72  d3 gold4 goldenr
166a0 6f 64 31 0a 09 09 09 67 6f 6c 64 65 6e 72 6f 64  od1....goldenrod
166b0 32 20 67 6f 6c 64 65 6e 72 6f 64 33 20 67 6f 6c  2 goldenrod3 gol
166c0 64 65 6e 72 6f 64 34 20 44 61 72 6b 47 6f 6c 64  denrod4 DarkGold
166d0 65 6e 72 6f 64 31 20 44 61 72 6b 47 6f 6c 64 65  enrod1 DarkGolde
166e0 6e 72 6f 64 32 0a 09 09 09 44 61 72 6b 47 6f 6c  nrod2....DarkGol
166f0 64 65 6e 72 6f 64 33 20 44 61 72 6b 47 6f 6c 64  denrod3 DarkGold
16700 65 6e 72 6f 64 34 20 52 6f 73 79 42 72 6f 77 6e  enrod4 RosyBrown
16710 31 20 52 6f 73 79 42 72 6f 77 6e 32 20 52 6f 73  1 RosyBrown2 Ros
16720 79 42 72 6f 77 6e 33 0a 09 09 09 52 6f 73 79 42  yBrown3....RosyB
16730 72 6f 77 6e 34 20 49 6e 64 69 61 6e 52 65 64 31  rown4 IndianRed1
16740 20 49 6e 64 69 61 6e 52 65 64 32 20 49 6e 64 69   IndianRed2 Indi
16750 61 6e 52 65 64 33 20 49 6e 64 69 61 6e 52 65 64  anRed3 IndianRed
16760 34 20 73 69 65 6e 6e 61 31 0a 09 09 09 73 69 65  4 sienna1....sie
16770 6e 6e 61 32 20 73 69 65 6e 6e 61 33 20 73 69 65  nna2 sienna3 sie
16780 6e 6e 61 34 20 62 75 72 6c 79 77 6f 6f 64 31 20  nna4 burlywood1 
16790 62 75 72 6c 79 77 6f 6f 64 32 20 62 75 72 6c 79  burlywood2 burly
167a0 77 6f 6f 64 33 20 62 75 72 6c 79 77 6f 6f 64 34  wood3 burlywood4
167b0 0a 09 09 09 77 68 65 61 74 31 20 77 68 65 61 74  ....wheat1 wheat
167c0 32 20 77 68 65 61 74 33 20 77 68 65 61 74 34 20  2 wheat3 wheat4 
167d0 74 61 6e 31 20 74 61 6e 32 20 74 61 6e 33 20 74  tan1 tan2 tan3 t
167e0 61 6e 34 20 63 68 6f 63 6f 6c 61 74 65 31 0a 09  an4 chocolate1..
167f0 09 09 63 68 6f 63 6f 6c 61 74 65 32 20 63 68 6f  ..chocolate2 cho
16800 63 6f 6c 61 74 65 33 20 63 68 6f 63 6f 6c 61 74  colate3 chocolat
16810 65 34 20 66 69 72 65 62 72 69 63 6b 31 20 66 69  e4 firebrick1 fi
16820 72 65 62 72 69 63 6b 32 20 66 69 72 65 62 72 69  rebrick2 firebri
16830 63 6b 33 0a 09 09 09 66 69 72 65 62 72 69 63 6b  ck3....firebrick
16840 34 20 62 72 6f 77 6e 31 20 62 72 6f 77 6e 32 20  4 brown1 brown2 
16850 62 72 6f 77 6e 33 20 62 72 6f 77 6e 34 20 73 61  brown3 brown4 sa
16860 6c 6d 6f 6e 31 20 73 61 6c 6d 6f 6e 32 20 73 61  lmon1 salmon2 sa
16870 6c 6d 6f 6e 33 0a 09 09 09 73 61 6c 6d 6f 6e 34  lmon3....salmon4
16880 20 4c 69 67 68 74 53 61 6c 6d 6f 6e 31 20 4c 69   LightSalmon1 Li
16890 67 68 74 53 61 6c 6d 6f 6e 32 20 4c 69 67 68 74  ghtSalmon2 Light
168a0 53 61 6c 6d 6f 6e 33 20 4c 69 67 68 74 53 61 6c  Salmon3 LightSal
168b0 6d 6f 6e 34 20 6f 72 61 6e 67 65 31 0a 09 09 09  mon4 orange1....
168c0 6f 72 61 6e 67 65 32 20 6f 72 61 6e 67 65 33 20  orange2 orange3 
168d0 6f 72 61 6e 67 65 34 20 44 61 72 6b 4f 72 61 6e  orange4 DarkOran
168e0 67 65 31 20 44 61 72 6b 4f 72 61 6e 67 65 32 20  ge1 DarkOrange2 
168f0 44 61 72 6b 4f 72 61 6e 67 65 33 0a 09 09 09 44  DarkOrange3....D
16900 61 72 6b 4f 72 61 6e 67 65 34 20 63 6f 72 61 6c  arkOrange4 coral
16910 31 20 63 6f 72 61 6c 32 20 63 6f 72 61 6c 33 20  1 coral2 coral3 
16920 63 6f 72 61 6c 34 20 74 6f 6d 61 74 6f 31 20 74  coral4 tomato1 t
16930 6f 6d 61 74 6f 32 20 74 6f 6d 61 74 6f 33 0a 09  omato2 tomato3..
16940 09 09 74 6f 6d 61 74 6f 34 20 4f 72 61 6e 67 65  ..tomato4 Orange
16950 52 65 64 31 20 4f 72 61 6e 67 65 52 65 64 32 20  Red1 OrangeRed2 
16960 4f 72 61 6e 67 65 52 65 64 33 20 4f 72 61 6e 67  OrangeRed3 Orang
16970 65 52 65 64 34 20 72 65 64 31 20 72 65 64 32 0a  eRed4 red1 red2.
16980 09 09 09 72 65 64 33 20 72 65 64 34 20 44 65 65  ...red3 red4 Dee
16990 70 50 69 6e 6b 31 20 44 65 65 70 50 69 6e 6b 32  pPink1 DeepPink2
169a0 20 44 65 65 70 50 69 6e 6b 33 20 44 65 65 70 50   DeepPink3 DeepP
169b0 69 6e 6b 34 20 48 6f 74 50 69 6e 6b 31 0a 09 09  ink4 HotPink1...
169c0 09 48 6f 74 50 69 6e 6b 32 20 48 6f 74 50 69 6e  .HotPink2 HotPin
169d0 6b 33 20 48 6f 74 50 69 6e 6b 34 20 70 69 6e 6b  k3 HotPink4 pink
169e0 31 20 70 69 6e 6b 32 20 70 69 6e 6b 33 20 70 69  1 pink2 pink3 pi
169f0 6e 6b 34 20 4c 69 67 68 74 50 69 6e 6b 31 0a 09  nk4 LightPink1..
16a00 09 09 4c 69 67 68 74 50 69 6e 6b 32 20 4c 69 67  ..LightPink2 Lig
16a10 68 74 50 69 6e 6b 33 20 4c 69 67 68 74 50 69 6e  htPink3 LightPin
16a20 6b 34 20 50 61 6c 65 56 69 6f 6c 65 74 52 65 64  k4 PaleVioletRed
16a30 31 20 50 61 6c 65 56 69 6f 6c 65 74 52 65 64 32  1 PaleVioletRed2
16a40 0a 09 09 09 50 61 6c 65 56 69 6f 6c 65 74 52 65  ....PaleVioletRe
16a50 64 33 20 50 61 6c 65 56 69 6f 6c 65 74 52 65 64  d3 PaleVioletRed
16a60 34 20 6d 61 72 6f 6f 6e 31 20 6d 61 72 6f 6f 6e  4 maroon1 maroon
16a70 32 20 6d 61 72 6f 6f 6e 33 20 6d 61 72 6f 6f 6e  2 maroon3 maroon
16a80 34 0a 09 09 09 56 69 6f 6c 65 74 52 65 64 31 20  4....VioletRed1 
16a90 56 69 6f 6c 65 74 52 65 64 32 20 56 69 6f 6c 65  VioletRed2 Viole
16aa0 74 52 65 64 33 20 56 69 6f 6c 65 74 52 65 64 34  tRed3 VioletRed4
16ab0 20 6d 61 67 65 6e 74 61 31 20 6d 61 67 65 6e 74   magenta1 magent
16ac0 61 32 0a 09 09 09 6d 61 67 65 6e 74 61 33 20 6d  a2....magenta3 m
16ad0 61 67 65 6e 74 61 34 20 6f 72 63 68 69 64 31 20  agenta4 orchid1 
16ae0 6f 72 63 68 69 64 32 20 6f 72 63 68 69 64 33 20  orchid2 orchid3 
16af0 6f 72 63 68 69 64 34 20 70 6c 75 6d 31 20 70 6c  orchid4 plum1 pl
16b00 75 6d 32 0a 09 09 09 70 6c 75 6d 33 20 70 6c 75  um2....plum3 plu
16b10 6d 34 20 4d 65 64 69 75 6d 4f 72 63 68 69 64 31  m4 MediumOrchid1
16b20 20 4d 65 64 69 75 6d 4f 72 63 68 69 64 32 20 4d   MediumOrchid2 M
16b30 65 64 69 75 6d 4f 72 63 68 69 64 33 0a 09 09 09  ediumOrchid3....
16b40 4d 65 64 69 75 6d 4f 72 63 68 69 64 34 20 44 61  MediumOrchid4 Da
16b50 72 6b 4f 72 63 68 69 64 31 20 44 61 72 6b 4f 72  rkOrchid1 DarkOr
16b60 63 68 69 64 32 20 44 61 72 6b 4f 72 63 68 69 64  chid2 DarkOrchid
16b70 33 20 44 61 72 6b 4f 72 63 68 69 64 34 0a 09 09  3 DarkOrchid4...
16b80 09 70 75 72 70 6c 65 31 20 70 75 72 70 6c 65 32  .purple1 purple2
16b90 20 70 75 72 70 6c 65 33 20 70 75 72 70 6c 65 34   purple3 purple4
16ba0 20 4d 65 64 69 75 6d 50 75 72 70 6c 65 31 20 4d   MediumPurple1 M
16bb0 65 64 69 75 6d 50 75 72 70 6c 65 32 0a 09 09 09  ediumPurple2....
16bc0 4d 65 64 69 75 6d 50 75 72 70 6c 65 33 20 4d 65  MediumPurple3 Me
16bd0 64 69 75 6d 50 75 72 70 6c 65 34 20 74 68 69 73  diumPurple4 this
16be0 74 6c 65 31 20 74 68 69 73 74 6c 65 32 20 74 68  tle1 thistle2 th
16bf0 69 73 74 6c 65 33 20 74 68 69 73 74 6c 65 34 0a  istle3 thistle4.
16c00 09 09 09 67 72 61 79 30 20 67 72 65 79 30 20 67  ...gray0 grey0 g
16c10 72 61 79 31 20 67 72 65 79 31 20 67 72 61 79 32  ray1 grey1 gray2
16c20 20 67 72 65 79 32 20 67 72 61 79 33 20 67 72 65   grey2 gray3 gre
16c30 79 33 20 67 72 61 79 34 20 67 72 65 79 34 20 67  y3 gray4 grey4 g
16c40 72 61 79 35 0a 09 09 09 67 72 65 79 35 20 67 72  ray5....grey5 gr
16c50 61 79 36 20 67 72 65 79 36 20 67 72 61 79 37 20  ay6 grey6 gray7 
16c60 67 72 65 79 37 20 67 72 61 79 38 20 67 72 65 79  grey7 gray8 grey
16c70 38 20 67 72 61 79 39 20 67 72 65 79 39 20 67 72  8 gray9 grey9 gr
16c80 61 79 31 30 20 67 72 65 79 31 30 0a 09 09 09 67  ay10 grey10....g
16c90 72 61 79 31 31 20 67 72 65 79 31 31 20 67 72 61  ray11 grey11 gra
16ca0 79 31 32 20 67 72 65 79 31 32 20 67 72 61 79 31  y12 grey12 gray1
16cb0 33 20 67 72 65 79 31 33 20 67 72 61 79 31 34 20  3 grey13 gray14 
16cc0 67 72 65 79 31 34 20 67 72 61 79 31 35 0a 09 09  grey14 gray15...
16cd0 09 67 72 65 79 31 35 20 67 72 61 79 31 36 20 67  .grey15 gray16 g
16ce0 72 65 79 31 36 20 67 72 61 79 31 37 20 67 72 65  rey16 gray17 gre
16cf0 79 31 37 20 67 72 61 79 31 38 20 67 72 65 79 31  y17 gray18 grey1
16d00 38 20 67 72 61 79 31 39 20 67 72 65 79 31 39 0a  8 gray19 grey19.
16d10 09 09 09 67 72 61 79 32 30 20 67 72 65 79 32 30  ...gray20 grey20
16d20 20 67 72 61 79 32 31 20 67 72 65 79 32 31 20 67   gray21 grey21 g
16d30 72 61 79 32 32 20 67 72 65 79 32 32 20 67 72 61  ray22 grey22 gra
16d40 79 32 33 20 67 72 65 79 32 33 20 67 72 61 79 32  y23 grey23 gray2
16d50 34 0a 09 09 09 67 72 65 79 32 34 20 67 72 61 79  4....grey24 gray
16d60 32 35 20 67 72 65 79 32 35 20 67 72 61 79 32 36  25 grey25 gray26
16d70 20 67 72 65 79 32 36 20 67 72 61 79 32 37 20 67   grey26 gray27 g
16d80 72 65 79 32 37 20 67 72 61 79 32 38 20 67 72 65  rey27 gray28 gre
16d90 79 32 38 0a 09 09 09 67 72 61 79 32 39 20 67 72  y28....gray29 gr
16da0 65 79 32 39 20 67 72 61 79 33 30 20 67 72 65 79  ey29 gray30 grey
16db0 33 30 20 67 72 61 79 33 31 20 67 72 65 79 33 31  30 gray31 grey31
16dc0 20 67 72 61 79 33 32 20 67 72 65 79 33 32 20 67   gray32 grey32 g
16dd0 72 61 79 33 33 0a 09 09 09 67 72 65 79 33 33 20  ray33....grey33 
16de0 67 72 61 79 33 34 20 67 72 65 79 33 34 20 67 72  gray34 grey34 gr
16df0 61 79 33 35 20 67 72 65 79 33 35 20 67 72 61 79  ay35 grey35 gray
16e00 33 36 20 67 72 65 79 33 36 20 67 72 61 79 33 37  36 grey36 gray37
16e10 20 67 72 65 79 33 37 0a 09 09 09 67 72 61 79 33   grey37....gray3
16e20 38 20 67 72 65 79 33 38 20 67 72 61 79 33 39 20  8 grey38 gray39 
16e30 67 72 65 79 33 39 20 67 72 61 79 34 30 20 67 72  grey39 gray40 gr
16e40 65 79 34 30 20 67 72 61 79 34 31 20 67 72 65 79  ey40 gray41 grey
16e50 34 31 20 67 72 61 79 34 32 0a 09 09 09 67 72 65  41 gray42....gre
16e60 79 34 32 20 67 72 61 79 34 33 20 67 72 65 79 34  y42 gray43 grey4
16e70 33 20 67 72 61 79 34 34 20 67 72 65 79 34 34 20  3 gray44 grey44 
16e80 67 72 61 79 34 35 20 67 72 65 79 34 35 20 67 72  gray45 grey45 gr
16e90 61 79 34 36 20 67 72 65 79 34 36 0a 09 09 09 67  ay46 grey46....g
16ea0 72 61 79 34 37 20 67 72 65 79 34 37 20 67 72 61  ray47 grey47 gra
16eb0 79 34 38 20 67 72 65 79 34 38 20 67 72 61 79 34  y48 grey48 gray4
16ec0 39 20 67 72 65 79 34 39 20 67 72 61 79 35 30 20  9 grey49 gray50 
16ed0 67 72 65 79 35 30 20 67 72 61 79 35 31 0a 09 09  grey50 gray51...
16ee0 09 67 72 65 79 35 31 20 67 72 61 79 35 32 20 67  .grey51 gray52 g
16ef0 72 65 79 35 32 20 67 72 61 79 35 33 20 67 72 65  rey52 gray53 gre
16f00 79 35 33 20 67 72 61 79 35 34 20 67 72 65 79 35  y53 gray54 grey5
16f10 34 20 67 72 61 79 35 35 20 67 72 65 79 35 35 0a  4 gray55 grey55.
16f20 09 09 09 67 72 61 79 35 36 20 67 72 65 79 35 36  ...gray56 grey56
16f30 20 67 72 61 79 35 37 20 67 72 65 79 35 37 20 67   gray57 grey57 g
16f40 72 61 79 35 38 20 67 72 65 79 35 38 20 67 72 61  ray58 grey58 gra
16f50 79 35 39 20 67 72 65 79 35 39 20 67 72 61 79 36  y59 grey59 gray6
16f60 30 0a 09 09 09 67 72 65 79 36 30 20 67 72 61 79  0....grey60 gray
16f70 36 31 20 67 72 65 79 36 31 20 67 72 61 79 36 32  61 grey61 gray62
16f80 20 67 72 65 79 36 32 20 67 72 61 79 36 33 20 67   grey62 gray63 g
16f90 72 65 79 36 33 20 67 72 61 79 36 34 20 67 72 65  rey63 gray64 gre
16fa0 79 36 34 0a 09 09 09 67 72 61 79 36 35 20 67 72  y64....gray65 gr
16fb0 65 79 36 35 20 67 72 61 79 36 36 20 67 72 65 79  ey65 gray66 grey
16fc0 36 36 20 67 72 61 79 36 37 20 67 72 65 79 36 37  66 gray67 grey67
16fd0 20 67 72 61 79 36 38 20 67 72 65 79 36 38 20 67   gray68 grey68 g
16fe0 72 61 79 36 39 0a 09 09 09 67 72 65 79 36 39 20  ray69....grey69 
16ff0 67 72 61 79 37 30 20 67 72 65 79 37 30 20 67 72  gray70 grey70 gr
17000 61 79 37 31 20 67 72 65 79 37 31 20 67 72 61 79  ay71 grey71 gray
17010 37 32 20 67 72 65 79 37 32 20 67 72 61 79 37 33  72 grey72 gray73
17020 20 67 72 65 79 37 33 0a 09 09 09 67 72 61 79 37   grey73....gray7
17030 34 20 67 72 65 79 37 34 20 67 72 61 79 37 35 20  4 grey74 gray75 
17040 67 72 65 79 37 35 20 67 72 61 79 37 36 20 67 72  grey75 gray76 gr
17050 65 79 37 36 20 67 72 61 79 37 37 20 67 72 65 79  ey76 gray77 grey
17060 37 37 20 67 72 61 79 37 38 0a 09 09 09 67 72 65  77 gray78....gre
17070 79 37 38 20 67 72 61 79 37 39 20 67 72 65 79 37  y78 gray79 grey7
17080 39 20 67 72 61 79 38 30 20 67 72 65 79 38 30 20  9 gray80 grey80 
17090 67 72 61 79 38 31 20 67 72 65 79 38 31 20 67 72  gray81 grey81 gr
170a0 61 79 38 32 20 67 72 65 79 38 32 0a 09 09 09 67  ay82 grey82....g
170b0 72 61 79 38 33 20 67 72 65 79 38 33 20 67 72 61  ray83 grey83 gra
170c0 79 38 34 20 67 72 65 79 38 34 20 67 72 61 79 38  y84 grey84 gray8
170d0 35 20 67 72 65 79 38 35 20 67 72 61 79 38 36 20  5 grey85 gray86 
170e0 67 72 65 79 38 36 20 67 72 61 79 38 37 0a 09 09  grey86 gray87...
170f0 09 67 72 65 79 38 37 20 67 72 61 79 38 38 20 67  .grey87 gray88 g
17100 72 65 79 38 38 20 67 72 61 79 38 39 20 67 72 65  rey88 gray89 gre
17110 79 38 39 20 67 72 61 79 39 30 20 67 72 65 79 39  y89 gray90 grey9
17120 30 20 67 72 61 79 39 31 20 67 72 65 79 39 31 0a  0 gray91 grey91.
17130 09 09 09 67 72 61 79 39 32 20 67 72 65 79 39 32  ...gray92 grey92
17140 20 67 72 61 79 39 33 20 67 72 65 79 39 33 20 67   gray93 grey93 g
17150 72 61 79 39 34 20 67 72 65 79 39 34 20 67 72 61  ray94 grey94 gra
17160 79 39 35 20 67 72 65 79 39 35 20 67 72 61 79 39  y95 grey95 gray9
17170 36 0a 09 09 09 67 72 65 79 39 36 20 67 72 61 79  6....grey96 gray
17180 39 37 20 67 72 65 79 39 37 20 67 72 61 79 39 38  97 grey97 gray98
17190 20 67 72 65 79 39 38 20 67 72 61 79 39 39 20 67   grey98 gray99 g
171a0 72 65 79 39 39 20 67 72 61 79 31 30 30 20 67 72  rey99 gray100 gr
171b0 65 79 31 30 30 0a 09 09 09 44 61 72 6b 47 72 65  ey100....DarkGre
171c0 79 20 44 61 72 6b 47 72 61 79 20 44 61 72 6b 42  y DarkGray DarkB
171d0 6c 75 65 20 44 61 72 6b 43 79 61 6e 20 44 61 72  lue DarkCyan Dar
171e0 6b 4d 61 67 65 6e 74 61 20 44 61 72 6b 52 65 64  kMagenta DarkRed
171f0 20 4c 69 67 68 74 47 72 65 65 6e 0a 09 09 7d 0a   LightGreen...}.
17200 09 7d 0a 09 69 66 20 21 5b 69 6e 66 6f 20 65 78  .}..if ![info ex
17210 69 73 74 73 20 6e 75 6d 62 65 72 6c 65 73 73 5f  ists numberless_
17220 63 6f 6c 6f 72 73 5d 20 7b 0a 09 09 73 65 74 20  colors] {...set 
17230 6e 75 6d 62 65 72 6c 65 73 73 5f 63 6f 6c 6f 72  numberless_color
17240 73 20 22 22 0a 09 09 66 6f 72 65 61 63 68 20 63  s ""...foreach c
17250 6f 6c 6f 72 20 24 7b 63 6f 6c 6f 72 73 7d 20 7b  olor ${colors} {
17260 0a 09 09 09 72 65 67 73 75 62 20 2d 61 6c 6c 20  ....regsub -all 
17270 7b 5b 30 2d 39 5d 2a 7d 20 24 7b 63 6f 6c 6f 72  {[0-9]*} ${color
17280 7d 20 22 22 20 63 6f 6c 6f 72 0a 09 09 09 6c 61  } "" color....la
17290 70 70 65 6e 64 20 6e 75 6d 62 65 72 6c 65 73 73  ppend numberless
172a0 5f 63 6f 6c 6f 72 73 20 24 7b 63 6f 6c 6f 72 7d  _colors ${color}
172b0 0a 09 09 7d 0a 09 09 73 65 74 20 6e 75 6d 62 65  ...}...set numbe
172c0 72 6c 65 73 73 5f 63 6f 6c 6f 72 73 20 5b 4c 75  rless_colors [Lu
172d0 6e 69 71 75 65 20 5b 6c 73 6f 72 74 20 24 7b 6e  nique [lsort ${n
172e0 75 6d 62 65 72 6c 65 73 73 5f 63 6f 6c 6f 72 73  umberless_colors
172f0 7d 5d 5d 0a 09 7d 0a 09 73 65 74 20 6d 61 74 63  }]]..}..set matc
17300 68 65 73 20 5b 4d 61 74 63 68 65 73 46 72 6f 6d  hes [MatchesFrom
17310 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 6e  List ${text} ${n
17320 75 6d 62 65 72 6c 65 73 73 5f 63 6f 6c 6f 72 73  umberless_colors
17330 7d 5d 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68  }]..if {[llength
17340 20 24 7b 6d 61 74 63 68 65 73 7d 5d 20 3c 20 35   ${matches}] < 5
17350 7d 20 7b 0a 09 09 73 65 74 20 6d 61 74 63 68 65  } {...set matche
17360 73 20 5b 4d 61 74 63 68 65 73 46 72 6f 6d 4c 69  s [MatchesFromLi
17370 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 63 6f 6c  st ${text} ${col
17380 6f 72 73 7d 5d 0a 09 09 69 66 20 7b 5b 6c 6c 65  ors}]...if {[lle
17390 6e 67 74 68 20 24 7b 6d 61 74 63 68 65 73 7d 5d  ngth ${matches}]
173a0 7d 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43  } {....return [C
173b0 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
173c0 24 7b 74 65 78 74 7d 20 5b 63 6f 6e 63 61 74 20  ${text} [concat 
173d0 24 7b 63 6f 6c 6f 72 73 7d 20 24 7b 61 64 64 7d  ${colors} ${add}
173e0 5d 5d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09  ]]...} else {...
173f0 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
17400 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
17410 7d 20 5c 0a 09 09 09 5b 63 6f 6e 63 61 74 20 24  } \....[concat $
17420 7b 6e 75 6d 62 65 72 6c 65 73 73 5f 63 6f 6c 6f  {numberless_colo
17430 72 73 7d 20 24 7b 61 64 64 7d 5d 5d 0a 09 09 7d  rs} ${add}]]...}
17440 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 72 65 74  ..} else {...ret
17450 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
17460 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 63  mList ${text} [c
17470 6f 6e 63 61 74 20 24 7b 6e 75 6d 62 65 72 6c 65  oncat ${numberle
17480 73 73 5f 63 6f 6c 6f 72 73 7d 20 24 7b 61 64 64  ss_colors} ${add
17490 7d 5d 5d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 43  }]]..}.}..proc C
174a0 6f 6d 70 6c 65 74 65 43 75 72 73 6f 72 20 74 65  ompleteCursor te
174b0 78 74 20 7b 0a 09 23 20 66 72 6f 6d 20 3c 58 31  xt {..# from <X1
174c0 31 2f 63 75 72 73 6f 72 66 6f 6e 74 2e 68 3e 0a  1/cursorfont.h>.
174d0 09 23 20 0a 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .# ..return [Com
174e0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
174f0 74 65 78 74 7d 20 7b 0a 09 09 6e 75 6d 5f 67 6c  text} {...num_gl
17500 79 70 68 73 20 78 5f 63 75 72 73 6f 72 20 61 72  yphs x_cursor ar
17510 72 6f 77 20 62 61 73 65 64 5f 61 72 72 6f 77 5f  row based_arrow_
17520 64 6f 77 6e 20 62 61 73 65 64 5f 61 72 72 6f 77  down based_arrow
17530 5f 75 70 0a 09 09 62 6f 61 74 20 62 6f 67 6f 73  _up...boat bogos
17540 69 74 79 20 62 6f 74 74 6f 6d 5f 6c 65 66 74 5f  ity bottom_left_
17550 63 6f 72 6e 65 72 20 62 6f 74 74 6f 6d 5f 72 69  corner bottom_ri
17560 67 68 74 5f 63 6f 72 6e 65 72 0a 09 09 62 6f 74  ght_corner...bot
17570 74 6f 6d 5f 73 69 64 65 20 62 6f 74 74 6f 6d 5f  tom_side bottom_
17580 74 65 65 20 62 6f 78 5f 73 70 69 72 61 6c 20 63  tee box_spiral c
17590 65 6e 74 65 72 5f 70 74 72 20 63 69 72 63 6c 65  enter_ptr circle
175a0 20 63 6c 6f 63 6b 0a 09 09 63 6f 66 66 65 65 5f   clock...coffee_
175b0 6d 75 67 20 63 72 6f 73 73 20 63 72 6f 73 73 5f  mug cross cross_
175c0 72 65 76 65 72 73 65 20 63 72 6f 73 73 68 61 69  reverse crosshai
175d0 72 20 64 69 61 6d 6f 6e 64 5f 63 72 6f 73 73 20  r diamond_cross 
175e0 64 6f 74 0a 09 09 64 6f 74 62 6f 78 20 64 6f 75  dot...dotbox dou
175f0 62 6c 65 5f 61 72 72 6f 77 20 64 72 61 66 74 5f  ble_arrow draft_
17600 6c 61 72 67 65 20 64 72 61 66 74 5f 73 6d 61 6c  large draft_smal
17610 6c 20 64 72 61 70 65 64 5f 62 6f 78 0a 09 09 65  l draped_box...e
17620 78 63 68 61 6e 67 65 20 66 6c 65 75 72 20 67 6f  xchange fleur go
17630 62 62 6c 65 72 20 67 75 6d 62 79 20 68 61 6e 64  bbler gumby hand
17640 31 20 68 61 6e 64 32 20 68 65 61 72 74 20 69 63  1 hand2 heart ic
17650 6f 6e 20 69 72 6f 6e 5f 63 72 6f 73 73 0a 09 09  on iron_cross...
17660 6c 65 66 74 5f 70 74 72 20 6c 65 66 74 5f 73 69  left_ptr left_si
17670 64 65 20 6c 65 66 74 5f 74 65 65 20 6c 65 66 74  de left_tee left
17680 62 75 74 74 6f 6e 20 6c 6c 5f 61 6e 67 6c 65 20  button ll_angle 
17690 6c 72 5f 61 6e 67 6c 65 0a 09 09 6d 61 6e 20 6d  lr_angle...man m
176a0 69 64 64 6c 65 62 75 74 74 6f 6e 20 6d 6f 75 73  iddlebutton mous
176b0 65 20 70 65 6e 63 69 6c 20 70 69 72 61 74 65 20  e pencil pirate 
176c0 70 6c 75 73 20 71 75 65 73 74 69 6f 6e 5f 61 72  plus question_ar
176d0 72 6f 77 0a 09 09 72 69 67 68 74 5f 70 74 72 20  row...right_ptr 
176e0 72 69 67 68 74 5f 73 69 64 65 20 72 69 67 68 74  right_side right
176f0 5f 74 65 65 20 72 69 67 68 74 62 75 74 74 6f 6e  _tee rightbutton
17700 20 72 74 6c 5f 6c 6f 67 6f 20 73 61 69 6c 62 6f   rtl_logo sailbo
17710 61 74 0a 09 09 73 62 5f 64 6f 77 6e 5f 61 72 72  at...sb_down_arr
17720 6f 77 20 73 62 5f 68 5f 64 6f 75 62 6c 65 5f 61  ow sb_h_double_a
17730 72 72 6f 77 20 73 62 5f 6c 65 66 74 5f 61 72 72  rrow sb_left_arr
17740 6f 77 20 73 62 5f 72 69 67 68 74 5f 61 72 72 6f  ow sb_right_arro
17750 77 0a 09 09 73 62 5f 75 70 5f 61 72 72 6f 77 20  w...sb_up_arrow 
17760 73 62 5f 76 5f 64 6f 75 62 6c 65 5f 61 72 72 6f  sb_v_double_arro
17770 77 20 73 68 75 74 74 6c 65 20 73 69 7a 69 6e 67  w shuttle sizing
17780 20 73 70 69 64 65 72 20 73 70 72 61 79 63 61 6e   spider spraycan
17790 0a 09 09 73 74 61 72 20 74 61 72 67 65 74 20 74  ...star target t
177a0 63 72 6f 73 73 20 74 6f 70 5f 6c 65 66 74 5f 61  cross top_left_a
177b0 72 72 6f 77 20 74 6f 70 5f 6c 65 66 74 5f 63 6f  rrow top_left_co
177c0 72 6e 65 72 0a 09 09 74 6f 70 5f 72 69 67 68 74  rner...top_right
177d0 5f 63 6f 72 6e 65 72 20 74 6f 70 5f 73 69 64 65  _corner top_side
177e0 20 74 6f 70 5f 74 65 65 20 74 72 65 6b 20 75 6c   top_tee trek ul
177f0 5f 61 6e 67 6c 65 20 75 6d 62 72 65 6c 6c 61 0a  _angle umbrella.
17800 09 09 75 72 5f 61 6e 67 6c 65 20 77 61 74 63 68  ..ur_angle watch
17810 20 78 74 65 72 6d 0a 09 7d 5d 0a 7d 0a 0a 23 2a   xterm..}].}..#*
17820 2a 0a 23 20 53 70 65 63 69 66 69 63 53 77 69 74  *.# SpecificSwit
17830 63 68 43 6f 6d 70 6c 65 74 65 72 0a 23 20 2d 2d  chCompleter.# --
17840 2d 0a 23 20 40 70 61 72 61 6d 20 20 20 20 74 65  -.# @param    te
17850 78 74 20 20 20 2d 2d 20 74 68 65 20 77 6f 72 64  xt   -- the word
17860 20 74 6f 20 63 6f 6d 70 6c 65 74 65 2e 0a 23 20   to complete..# 
17870 40 70 61 72 61 6d 20 20 20 20 73 74 61 72 74 20  @param    start 
17880 20 2d 2d 20 74 68 65 20 63 68 61 72 20 69 6e 64   -- the char ind
17890 65 78 20 6f 66 20 74 65 78 74 27 73 20 73 74 61  ex of text's sta
178a0 72 74 20 69 6e 20 6c 69 6e 65 0a 23 20 40 70 61  rt in line.# @pa
178b0 72 61 6d 20 20 20 20 6c 69 6e 65 20 20 20 2d 2d  ram    line   --
178c0 20 74 68 65 20 6c 69 6e 65 20 67 61 74 68 65 72   the line gather
178d0 65 64 20 73 6f 20 66 61 72 2e 0a 23 20 40 70 61  ed so far..# @pa
178e0 72 61 6d 20 20 20 20 73 77 69 74 63 68 20 2d 2d  ram    switch --
178f0 20 74 68 65 20 73 77 69 74 63 68 20 74 6f 20 63   the switch to c
17900 6f 6d 70 6c 65 74 65 20 66 6f 72 2e 0a 23 20 40  omplete for..# @
17910 72 65 74 75 72 6e 20 20 20 61 20 73 74 64 20 74  return   a std t
17920 63 6c 72 65 61 64 6c 69 6e 65 20 66 6f 72 6d 61  clreadline forma
17930 74 74 65 64 20 63 6f 6d 70 6c 65 74 65 72 20 73  tted completer s
17940 74 72 69 6e 67 2e 0a 23 20 40 73 61 20 20 20 20  tring..# @sa    
17950 20 20 20 43 6f 6d 70 6c 65 74 65 57 69 64 67 65     CompleteWidge
17960 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 0a  tConfigurations.
17970 23 20 40 64 61 74 65 20 20 20 20 20 53 65 70 2d  # @date     Sep-
17980 31 37 2d 31 39 39 39 0a 23 0a 70 72 6f 63 20 53  17-1999.#.proc S
17990 70 65 63 69 66 69 63 53 77 69 74 63 68 43 6f 6d  pecificSwitchCom
179a0 70 6c 65 74 65 72 20 7b 74 65 78 74 20 73 74 61  pleter {text sta
179b0 72 74 20 6c 69 6e 65 20 73 77 69 74 63 68 20 7b  rt line switch {
179c0 61 6c 77 61 79 73 20 31 7d 7d 20 7b 0a 0a 09 73  always 1}} {...s
179d0 77 69 74 63 68 20 2d 2d 20 24 7b 73 77 69 74 63  witch -- ${switc
179e0 68 7d 20 7b 0a 0a 09 09 2d 61 63 74 69 76 65 62  h} {....-activeb
179f0 61 63 6b 67 72 6f 75 6e 64 20 2d 0a 09 09 2d 61  ackground -...-a
17a00 63 74 69 76 65 66 6f 72 65 67 72 6f 75 6e 64 20  ctiveforeground 
17a10 2d 0a 09 09 2d 66 67 20 2d 0a 09 09 2d 66 6f 72  -...-fg -...-for
17a20 65 67 72 6f 75 6e 64 20 2d 0a 09 09 2d 62 67 20  eground -...-bg 
17a30 2d 0a 09 09 2d 62 61 63 6b 67 72 6f 75 6e 64 20  -...-background 
17a40 2d 0a 09 09 2d 64 69 73 61 62 6c 65 64 66 6f 72  -...-disabledfor
17a50 65 67 72 6f 75 6e 64 20 2d 0a 09 09 2d 68 69 67  eground -...-hig
17a60 68 6c 69 67 68 74 62 61 63 6b 67 72 6f 75 6e 64  hlightbackground
17a70 20 2d 0a 09 09 2d 68 69 67 68 6c 69 67 68 74 63   -...-highlightc
17a80 6f 6c 6f 72 20 2d 0a 09 09 2d 69 6e 73 65 72 74  olor -...-insert
17a90 62 61 63 6b 67 72 6f 75 6e 64 20 2d 0a 09 09 2d  background -...-
17aa0 74 72 6f 75 67 68 63 6f 6c 6f 72 20 2d 0a 09 09  troughcolor -...
17ab0 2d 73 65 6c 65 63 74 62 61 63 6b 67 72 6f 75 6e  -selectbackgroun
17ac0 64 20 2d 0a 09 09 2d 73 65 6c 65 63 74 66 6f 72  d -...-selectfor
17ad0 65 67 72 6f 75 6e 64 20 7b 20 72 65 74 75 72 6e  eground { return
17ae0 20 5b 43 6f 6d 70 6c 65 74 65 43 6f 6c 6f 72 20   [CompleteColor 
17af0 24 7b 74 65 78 74 7d 5d 20 7d 0a 0a 09 09 2d 61  ${text}] }....-a
17b00 63 74 69 76 65 62 6f 72 64 65 72 77 69 64 74 68  ctiveborderwidth
17b10 20 2d 0a 09 09 2d 62 64 20 2d 0a 09 09 2d 62 6f   -...-bd -...-bo
17b20 72 64 65 72 77 69 64 74 68 20 2d 0a 09 09 2d 69  rderwidth -...-i
17b30 6e 73 65 72 74 62 6f 72 64 65 72 77 69 64 74 68  nsertborderwidth
17b40 20 2d 0a 09 09 2d 69 6e 73 65 72 74 77 69 64 74   -...-insertwidt
17b50 68 20 2d 0a 09 09 2d 73 65 6c 65 63 74 62 6f 72  h -...-selectbor
17b60 64 65 72 77 69 64 74 68 20 2d 0a 09 09 2d 68 69  derwidth -...-hi
17b70 67 68 6c 69 67 68 74 74 68 69 63 6b 6e 65 73 73  ghlightthickness
17b80 20 2d 0a 09 09 2d 70 61 64 78 20 2d 0a 09 09 2d   -...-padx -...-
17b90 70 61 64 79 20 2d 0a 09 09 2d 77 72 61 70 6c 65  pady -...-wraple
17ba0 6e 67 74 68 20 7b 0a 09 09 09 69 66 20 24 7b 61  ngth {....if ${a
17bb0 6c 77 61 79 73 7d 20 7b 0a 09 09 09 09 72 65 74  lways} {.....ret
17bc0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
17bd0 73 20 3c 70 69 78 65 6c 73 3e 5d 0a 09 09 09 7d  s <pixels>]....}
17be0 20 65 6c 73 65 20 7b 0a 09 09 09 09 72 65 74 75   else {.....retu
17bf0 72 6e 20 22 22 0a 09 09 09 7d 0a 09 09 7d 0a 0a  rn ""....}...}..
17c00 09 09 2d 61 6e 63 68 6f 72 20 7b 0a 09 09 09 72  ..-anchor {....r
17c10 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
17c20 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
17c30 7b 0a 09 09 09 09 6e 20 6e 65 20 65 20 73 65 20  {.....n ne e se 
17c40 73 20 73 77 20 77 20 6e 77 20 63 65 6e 74 65 72  s sw w nw center
17c50 0a 09 09 09 7d 5d 0a 09 09 7d 0a 0a 0a 09 09 2d  ....}]...}.....-
17c60 62 69 74 6d 61 70 20 7b 20 72 65 74 75 72 6e 20  bitmap { return 
17c70 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 42 69 74  [CompleteFromBit
17c80 6d 61 70 73 20 24 7b 74 65 78 74 7d 20 24 7b 61  maps ${text} ${a
17c90 6c 77 61 79 73 7d 5d 20 7d 0a 0a 0a 09 09 2d 63  lways}] }.....-c
17ca0 75 72 73 6f 72 20 7b 0a 09 09 09 72 65 74 75 72  ursor {....retur
17cb0 6e 20 5b 43 6f 6d 70 6c 65 74 65 43 75 72 73 6f  n [CompleteCurso
17cc0 72 20 24 7b 74 65 78 74 7d 5d 0a 09 09 09 23 20  r ${text}]....# 
17cd0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
17ce0 69 6e 74 73 20 3c 63 75 72 73 6f 72 3e 5d 0a 09  ints <cursor>]..
17cf0 09 7d 0a 09 09 2d 65 78 70 6f 72 74 73 65 6c 65  .}...-exportsele
17d00 63 74 69 6f 6e 20 2d 0a 09 09 2d 6a 75 6d 70 20  ction -...-jump 
17d10 2d 0a 09 09 2d 73 65 74 67 72 69 64 20 2d 0a 09  -...-setgrid -..
17d20 09 2d 74 61 6b 65 66 6f 63 75 73 20 7b 20 72 65  .-takefocus { re
17d30 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 42 6f  turn [CompleteBo
17d40 6f 6c 65 61 6e 20 24 7b 74 65 78 74 7d 5d 20 7d  olean ${text}] }
17d50 0a 09 09 2d 66 6f 6e 74 20 7b 0a 09 09 09 73 65  ...-font {....se
17d60 74 20 6e 61 6d 65 73 20 5b 66 6f 6e 74 20 6e 61  t names [font na
17d70 6d 65 73 5d 0a 09 09 09 69 66 20 7b 5b 73 74 72  mes]....if {[str
17d80 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b 6e 61 6d  ing length ${nam
17d90 65 73 7d 5d 7d 20 7b 0a 09 09 09 09 72 65 74 75  es}]} {.....retu
17da0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
17db0 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 6e  List ${text} ${n
17dc0 61 6d 65 73 7d 5d 0a 09 09 09 7d 20 65 6c 73 65  ames}]....} else
17dd0 20 7b 0a 09 09 09 09 69 66 20 24 7b 61 6c 77 61   {.....if ${alwa
17de0 79 73 7d 20 7b 0a 09 09 09 09 09 72 65 74 75 72  ys} {......retur
17df0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
17e00 3c 66 6f 6e 74 3e 5d 0a 09 09 09 09 7d 20 65 6c  <font>].....} el
17e10 73 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  se {......return
17e20 20 22 22 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09   "".....}....}..
17e30 09 7d 0a 0a 0a 09 09 2d 69 6d 61 67 65 20 2d 0a  .}.....-image -.
17e40 09 09 2d 73 65 6c 65 63 74 69 6d 61 67 65 20 7b  ..-selectimage {
17e50 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
17e60 65 46 72 6f 6d 49 6d 61 67 65 73 20 24 7b 74 65  eFromImages ${te
17e70 78 74 7d 20 24 7b 61 6c 77 61 79 73 7d 5d 20 7d  xt} ${always}] }
17e80 0a 09 09 2d 73 65 6c 65 63 74 6d 6f 64 65 20 7b  ...-selectmode {
17e90 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
17ea0 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
17eb0 65 78 74 7d 20 7b 0a 09 09 09 09 73 69 6e 67 6c  ext} {.....singl
17ec0 65 20 62 72 6f 77 73 65 20 6d 75 6c 74 69 70 6c  e browse multipl
17ed0 65 20 65 78 74 65 6e 64 65 64 0a 09 09 09 7d 5d  e extended....}]
17ee0 0a 09 09 7d 0a 0a 09 09 2d 69 6e 73 65 72 74 6f  ...}....-inserto
17ef0 66 66 74 69 6d 65 20 2d 0a 09 09 2d 69 6e 73 65  fftime -...-inse
17f00 72 74 6f 6e 74 69 6d 65 20 2d 0a 09 09 2d 72 65  rtontime -...-re
17f10 70 65 61 74 64 65 6c 61 79 20 2d 0a 09 09 2d 72  peatdelay -...-r
17f20 65 70 65 61 74 69 6e 74 65 72 76 61 6c 20 7b 0a  epeatinterval {.
17f30 09 09 09 69 66 20 24 7b 61 6c 77 61 79 73 7d 20  ...if ${always} 
17f40 7b 0a 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  {.....return [Di
17f50 73 70 6c 61 79 48 69 6e 74 73 20 3c 6d 69 6c 6c  splayHints <mill
17f60 69 53 65 63 3e 5d 0a 09 09 09 7d 20 65 6c 73 65  iSec>]....} else
17f70 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 20 22 22   {.....return ""
17f80 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 2d 6a 75 73  ....}...}...-jus
17f90 74 69 66 79 20 7b 0a 09 09 09 72 65 74 75 72 6e  tify {....return
17fa0 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
17fb0 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09  st ${text} {....
17fc0 09 6c 65 66 74 20 63 65 6e 74 65 72 20 72 69 67  .left center rig
17fd0 68 74 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 09 2d  ht....}]...}...-
17fe0 6f 72 69 65 6e 74 20 7b 0a 09 09 09 72 65 74 75  orient {....retu
17ff0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
18000 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09  List ${text} {..
18010 09 09 09 76 65 72 74 69 63 61 6c 20 68 6f 72 69  ...vertical hori
18020 7a 6f 6e 74 61 6c 0a 09 09 09 7d 5d 0a 09 09 7d  zontal....}]...}
18030 0a 09 09 2d 72 65 6c 69 65 66 20 7b 0a 09 09 09  ...-relief {....
18040 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
18050 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
18060 20 7b 0a 09 09 09 09 72 61 69 73 65 64 20 73 75   {.....raised su
18070 6e 6b 65 6e 20 66 6c 61 74 20 72 69 64 67 65 20  nken flat ridge 
18080 73 6f 6c 69 64 20 67 72 6f 6f 76 65 0a 09 09 09  solid groove....
18090 7d 5d 0a 09 09 7d 0a 0a 09 09 2d 74 65 78 74 20  }]...}....-text 
180a0 7b 0a 09 09 09 69 66 20 24 7b 61 6c 77 61 79 73  {....if ${always
180b0 7d 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 20 5b  } {.....return [
180c0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 65  DisplayHints <te
180d0 78 74 3e 5d 0a 09 09 09 7d 20 65 6c 73 65 20 7b  xt>]....} else {
180e0 0a 09 09 09 09 72 65 74 75 72 6e 20 22 22 0a 09  .....return ""..
180f0 09 09 7d 0a 09 09 7d 0a 09 09 2d 74 65 78 74 76  ..}...}...-textv
18100 61 72 69 61 62 6c 65 20 7b 20 72 65 74 75 72 6e  ariable { return
18110 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 20   [VarCompletion 
18120 24 7b 74 65 78 74 7d 20 23 30 5d 20 7d 0a 09 09  ${text} #0] }...
18130 2d 75 6e 64 65 72 6c 69 6e 65 20 7b 0a 09 09 09  -underline {....
18140 69 66 20 24 7b 61 6c 77 61 79 73 7d 20 7b 0a 09  if ${always} {..
18150 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  ...return [Displ
18160 61 79 48 69 6e 74 73 20 3c 69 6e 64 65 78 3e 5d  ayHints <index>]
18170 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09  ....} else {....
18180 09 72 65 74 75 72 6e 20 22 22 0a 09 09 09 7d 0a  .return ""....}.
18190 09 09 7d 0a 0a 2d 78 73 63 72 6f 6c 6c 63 6f 6d  ..}..-xscrollcom
181a0 6d 61 6e 64 20 2d 0a 2d 79 73 63 72 6f 6c 6c 63  mand -.-yscrollc
181b0 6f 6d 6d 61 6e 64 20 7b 0a 7d 0a 20 0a 20 20 20  ommand {.}. .   
181c0 20 20 20 20 20 23 20 57 49 44 47 45 54 20 53 50       # WIDGET SP
181d0 45 43 49 46 49 43 20 4f 50 54 49 4f 4e 53 0a 09  ECIFIC OPTIONS..
181e0 09 23 20 2d 2d 2d 0a 20 0a 09 09 2d 73 74 61 74  .# ---. ...-stat
181f0 65 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43  e {....return [C
18200 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
18210 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 6e 6f  ${text} {.....no
18220 72 6d 61 6c 20 61 63 74 69 76 65 20 64 69 73 61  rmal active disa
18230 62 6c 65 64 0a 09 09 09 7d 5d 0a 09 09 7d 0a 0a  bled....}]...}..
18240 09 09 2d 63 6f 6c 75 6d 6e 62 72 65 61 6b 20 2d  ..-columnbreak -
18250 0a 09 09 2d 68 69 64 65 6d 61 72 67 69 6e 20 2d  ...-hidemargin -
18260 0a 09 09 2d 69 6e 64 69 63 61 74 6f 72 6f 6e 20  ...-indicatoron 
18270 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  {....return [Com
18280 70 6c 65 74 65 42 6f 6f 6c 65 61 6e 20 24 7b 74  pleteBoolean ${t
18290 65 78 74 7d 5d 0a 09 09 7d 0a 0a 09 09 2d 76 61  ext}]...}....-va
182a0 72 69 61 62 6c 65 20 7b 0a 09 09 09 72 65 74 75  riable {....retu
182b0 72 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f  rn [VarCompletio
182c0 6e 20 24 7b 74 65 78 74 7d 20 23 30 5d 0a 09 09  n ${text} #0]...
182d0 7d 0a 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  }....default {..
182e0 09 09 23 20 69 66 20 24 7b 61 6c 77 61 79 73 7d  ..# if ${always}
182f0 20 7b 0a 09 09 09 23 09 73 65 74 20 70 72 65 76   {....#.set prev
18300 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24   [PreviousWord $
18310 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d  {start} ${line}]
18320 0a 09 09 09 23 09 72 65 74 75 72 6e 20 5b 44 69  ....#.return [Di
18330 73 70 6c 61 79 48 69 6e 74 73 20 3c 5b 53 74 72  splayHints <[Str
18340 69 6e 67 20 72 61 6e 67 65 20 24 7b 70 72 65 76  ing range ${prev
18350 7d 20 31 20 65 6e 64 5d 3e 5d 0a 09 09 09 23 7d  } 1 end]>]....#}
18360 20 65 6c 73 65 20 7b 0a 09 09 09 09 72 65 74 75   else {.....retu
18370 72 6e 20 22 22 0a 09 09 09 23 7d 0a 09 09 7d 0a  rn ""....#}...}.
18380 09 7d 0a 7d 0a 09 09 09 23 20 72 65 74 75 72 6e  .}.}....# return
18390 20 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e 64   [BraceOrCommand
183a0 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 23 20   ${text} \....# 
183b0 24 7b 73 74 61 72 74 7d 20 20 24 7b 6c 69 6e 65  ${start}  ${line
183c0 7d 20 24 7b 70 6f 73 7d 20 24 7b 6d 6f 64 7d 5d  } ${pos} ${mod}]
183d0 0a 0a 23 2a 2a 0a 23 20 43 6f 6d 70 6c 65 74 65  ..#**.# Complete
183e0 57 69 64 67 65 74 43 6f 6e 66 69 67 75 72 61 74  WidgetConfigurat
183f0 69 6f 6e 73 0a 23 20 2d 2d 2d 0a 23 20 40 70 61  ions.# ---.# @pa
18400 72 61 6d 20 20 20 20 74 65 78 74 20 20 2d 2d 20  ram    text  -- 
18410 74 68 65 20 77 6f 72 64 20 74 6f 20 63 6f 6d 70  the word to comp
18420 6c 65 74 65 2e 0a 23 20 40 70 61 72 61 6d 20 20  lete..# @param  
18430 20 20 73 74 61 72 74 20 2d 2d 20 74 68 65 20 61    start -- the a
18440 63 74 75 61 6c 20 63 75 72 73 6f 72 20 70 6f 73  ctual cursor pos
18450 69 74 69 6f 6e 2e 0a 23 20 40 70 61 72 61 6d 20  ition..# @param 
18460 20 20 20 6c 69 6e 65 20 20 2d 2d 20 74 68 65 20     line  -- the 
18470 6c 69 6e 65 20 67 61 74 68 65 72 65 64 20 73 6f  line gathered so
18480 20 66 61 72 2e 0a 23 20 40 70 61 72 61 6d 20 20   far..# @param  
18490 20 20 6c 73 74 20 20 20 2d 2d 20 61 20 6c 69 73    lst   -- a lis
184a0 74 20 6f 66 20 70 6f 73 73 69 62 6c 65 20 63 6f  t of possible co
184b0 6d 70 6c 65 74 69 6f 6e 73 2e 0a 23 20 40 72 65  mpletions..# @re
184c0 74 75 72 6e 20 20 20 61 20 73 74 64 20 74 63 6c  turn   a std tcl
184d0 72 65 61 64 6c 69 6e 65 20 66 6f 72 6d 61 74 74  readline formatt
184e0 65 64 20 63 6f 6d 70 6c 65 74 65 72 20 73 74 72  ed completer str
184f0 69 6e 67 2e 0a 23 20 40 73 61 20 20 20 20 20 20  ing..# @sa      
18500 20 53 70 65 63 69 66 69 63 53 77 69 74 63 68 43   SpecificSwitchC
18510 6f 6d 70 6c 65 74 65 72 0a 23 20 40 64 61 74 65  ompleter.# @date
18520 20 20 20 20 20 53 65 70 2d 31 37 2d 31 39 39 39       Sep-17-1999
18530 0a 23 0a 70 72 6f 63 20 43 6f 6d 70 6c 65 74 65  .#.proc Complete
18540 57 69 64 67 65 74 43 6f 6e 66 69 67 75 72 61 74  WidgetConfigurat
18550 69 6f 6e 73 20 7b 74 65 78 74 20 73 74 61 72 74  ions {text start
18560 20 6c 69 6e 65 20 6c 73 74 7d 20 7b 0a 09 73 65   line lst} {..se
18570 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73  t prev [Previous
18580 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b  Word ${start} ${
18590 6c 69 6e 65 7d 5d 0a 09 69 66 20 7b 22 2d 22 20  line}]..if {"-" 
185a0 3d 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78  == [string index
185b0 20 24 7b 70 72 65 76 7d 20 30 5d 7d 20 7b 0a 09   ${prev} 0]} {..
185c0 09 72 65 74 75 72 6e 20 5b 53 70 65 63 69 66 69  .return [Specifi
185d0 63 53 77 69 74 63 68 43 6f 6d 70 6c 65 74 65 72  cSwitchCompleter
185e0 20 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74   ${text} ${start
185f0 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 72 65 76  } ${line} ${prev
18600 7d 5d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 72  }]..} else {...r
18610 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
18620 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
18630 5c 0a 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f  \...[RemoveUsedO
18640 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 24  ptions ${line} $
18650 7b 6c 73 74 7d 5d 5d 0a 09 7d 0a 7d 0a 0a 23 20  {lst}]]..}.}..# 
18660 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18670 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18680 2d 2d 2d 2d 2d 2d 0a 23 20 3d 3d 3d 20 53 50 45  ------.# === SPE
18690 43 49 46 49 43 20 54 4b 20 43 4f 4d 4d 41 4e 44  CIFIC TK COMMAND
186a0 20 43 4f 4d 50 4c 45 54 45 52 53 20 3d 3d 3d 0a   COMPLETERS ===.
186b0 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  # --------------
186c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
186d0 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 72 6f 63 20 63  --------..proc c
186e0 6f 6d 70 6c 65 74 65 28 62 65 6c 6c 29 20 7b 74  omplete(bell) {t
186f0 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
18700 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
18710 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
18720 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b  {...1 { return [
18730 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
18740 20 24 7b 74 65 78 74 7d 20 2d 64 69 73 70 6c 61   ${text} -displa
18750 79 6f 66 5d 20 7d 0a 09 09 32 20 7b 0a 09 09 09  yof] }...2 {....
18760 69 66 20 7b 22 2d 64 69 73 70 6c 61 79 6f 66 22  if {"-displayof"
18770 20 3d 3d 20 5b 50 72 65 76 69 6f 75 73 57 6f 72   == [PreviousWor
18780 64 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e  d ${start} ${lin
18790 65 7d 5d 7d 20 7b 0a 09 09 09 09 72 65 74 75 72  e}]} {.....retur
187a0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
187b0 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 54 6f 70  ist ${text} [Top
187c0 6c 65 76 65 6c 57 69 6e 64 6f 77 73 5d 5d 0a 09  levelWindows]]..
187d0 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72  ..}...}..}.}..pr
187e0 6f 63 20 43 6f 6d 70 6c 65 74 65 53 65 71 75 65  oc CompleteSeque
187f0 6e 63 65 20 7b 74 65 78 74 20 66 75 6c 6c 74 65  nce {text fullte
18800 78 74 7d 20 7b 0a 09 73 65 74 20 6d 6f 64 69 66  xt} {..set modif
18810 69 65 72 73 20 7b 0a 09 09 41 6c 74 20 43 6f 6e  iers {...Alt Con
18820 74 72 6f 6c 20 53 68 69 66 74 20 4c 6f 63 6b 20  trol Shift Lock 
18830 44 6f 75 62 6c 65 20 54 72 69 70 6c 65 0a 09 09  Double Triple...
18840 42 31 20 42 32 20 42 33 20 42 34 20 42 35 20 42  B1 B2 B3 B4 B5 B
18850 75 74 74 6f 6e 31 20 42 75 74 74 6f 6e 32 20 42  utton1 Button2 B
18860 75 74 74 6f 6e 33 20 42 75 74 74 6f 6e 34 20 42  utton3 Button4 B
18870 75 74 74 6f 6e 35 0a 09 09 4d 20 4d 31 20 4d 32  utton5...M M1 M2
18880 20 4d 33 20 4d 34 20 4d 35 20 20 20 20 20 20 20   M3 M4 M5       
18890 20 0a 09 09 4d 65 74 61 20 4d 6f 64 31 20 4d 6f   ...Meta Mod1 Mo
188a0 64 32 20 4d 6f 64 33 20 4d 6f 64 34 20 4d 6f 64  d2 Mod3 Mod4 Mod
188b0 35 0a 09 7d 0a 09 73 65 74 20 65 76 65 6e 74 73  5..}..set events
188c0 20 7b 0a 09 09 41 63 74 69 76 61 74 65 20 42 75   {...Activate Bu
188d0 74 74 6f 6e 20 42 75 74 74 6f 6e 50 72 65 73 73  tton ButtonPress
188e0 20 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 0a 09   ButtonRelease..
188f0 09 43 69 72 63 75 6c 61 74 65 20 43 6f 6c 6f 72  .Circulate Color
18900 6d 61 70 20 43 6f 6e 66 69 67 75 72 65 20 44 65  map Configure De
18910 61 63 74 69 76 61 74 65 20 44 65 73 74 72 6f 79  activate Destroy
18920 0a 09 09 45 6e 74 65 72 20 45 78 70 6f 73 65 20  ...Enter Expose 
18930 46 6f 63 75 73 49 6e 20 46 6f 63 75 73 4f 75 74  FocusIn FocusOut
18940 20 47 72 61 76 69 74 79 0a 09 09 4b 65 79 20 4b   Gravity...Key K
18950 65 79 50 72 65 73 73 20 4b 65 79 52 65 6c 65 61  eyPress KeyRelea
18960 73 65 20 4c 65 61 76 65 20 4d 61 70 20 4d 6f 74  se Leave Map Mot
18970 69 6f 6e 0a 09 09 4d 6f 75 73 65 57 68 65 65 6c  ion...MouseWheel
18980 20 50 72 6f 70 65 72 74 79 20 52 65 70 61 72 65   Property Repare
18990 6e 74 20 55 6e 6d 61 70 20 56 69 73 69 62 69 6c  nt Unmap Visibil
189a0 69 74 79 0a 09 7d 0a 09 73 65 74 20 73 65 71 75  ity..}..set sequ
189b0 65 6e 63 65 20 5b 63 6f 6e 63 61 74 20 24 7b 6d  ence [concat ${m
189c0 6f 64 69 66 69 65 72 73 7d 20 24 7b 65 76 65 6e  odifiers} ${even
189d0 74 73 7d 5d 0a 09 72 65 74 75 72 6e 20 5b 43 6f  ts}]..return [Co
189e0 6d 70 6c 65 74 65 4c 69 73 74 46 72 6f 6d 4c 69  mpleteListFromLi
189f0 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 66 75 6c  st ${text} ${ful
18a00 6c 74 65 78 74 7d 20 24 7b 73 65 71 75 65 6e 63  ltext} ${sequenc
18a10 65 7d 20 3c 20 2d 20 3e 5d 0a 7d 0a 0a 70 72 6f  e} < - >].}..pro
18a20 63 20 63 6f 6d 70 6c 65 74 65 28 62 69 6e 64 29  c complete(bind)
18a30 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
18a40 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
18a50 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
18a60 73 7d 20 7b 0a 09 09 31 20 7b 0a 09 09 09 73 65  s} {...1 {....se
18a70 74 20 77 69 64 67 65 74 73 20 5b 57 69 64 67 65  t widgets [Widge
18a80 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74  tChildren ${text
18a90 7d 5d 0a 09 09 09 73 65 74 20 74 6f 70 6c 65 76  }]....set toplev
18aa0 65 6c 73 20 5b 54 6f 70 6c 65 76 65 6c 57 69 6e  els [ToplevelWin
18ab0 64 6f 77 73 5d 0a 09 09 09 69 66 20 7b 5b 63 61  dows]....if {[ca
18ac0 74 63 68 20 7b 73 65 74 20 74 6f 70 6c 65 76 65  tch {set topleve
18ad0 6c 43 6c 61 73 73 20 5b 77 69 6e 66 6f 20 63 6c  lClass [winfo cl
18ae0 61 73 73 20 2e 5d 7d 5d 7d 20 7b 0a 09 09 09 09  ass .]}]} {.....
18af0 73 65 74 20 74 6f 70 6c 65 76 65 6c 43 6c 61 73  set toplevelClas
18b00 73 20 22 22 0a 09 09 09 7d 0a 09 09 09 73 65 74  s ""....}....set
18b10 20 72 65 73 74 20 7b 0a 09 09 09 09 42 75 74 74   rest {.....Butt
18b20 6f 6e 20 43 61 6e 76 61 73 20 43 68 65 63 6b 62  on Canvas Checkb
18b30 75 74 74 6f 6e 20 45 6e 74 72 79 20 46 72 61 6d  utton Entry Fram
18b40 65 20 4c 61 62 65 6c 0a 09 09 09 09 4c 69 73 74  e Label.....List
18b50 62 6f 78 20 4d 65 6e 75 20 4d 65 6e 75 62 75 74  box Menu Menubut
18b60 74 6f 6e 20 4d 65 73 73 61 67 65 20 52 61 64 69  ton Message Radi
18b70 6f 62 75 74 74 6f 6e 0a 09 09 09 09 53 63 61 6c  obutton.....Scal
18b80 65 20 53 63 72 6f 6c 6c 62 61 72 20 54 65 78 74  e Scrollbar Text
18b90 0a 09 09 09 09 61 6c 6c 0a 09 09 09 7d 0a 09 09  .....all....}...
18ba0 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
18bb0 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
18bc0 7d 20 5c 0a 09 09 09 5b 63 6f 6e 63 61 74 20 24  } \....[concat $
18bd0 7b 74 6f 70 6c 65 76 65 6c 73 7d 20 24 7b 77 69  {toplevels} ${wi
18be0 64 67 65 74 73 7d 20 24 7b 74 6f 70 6c 65 76 65  dgets} ${topleve
18bf0 6c 43 6c 61 73 73 7d 20 24 72 65 73 74 5d 5d 0a  lClass} $rest]].
18c00 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09 72 65 74  ..}...2 {....ret
18c10 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 53 65 71  urn [CompleteSeq
18c20 75 65 6e 63 65 20 24 7b 74 65 78 74 7d 20 5b 4c  uence ${text} [L
18c30 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 32 5d  index ${line} 2]
18c40 5d 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c 74 20  ]...}...default 
18c50 7b 0a 09 09 09 23 20 72 65 74 75 72 6e 20 5b 44  {....# return [D
18c60 69 73 70 6c 61 79 48 69 6e 74 73 20 7b 3c 73 63  isplayHints {<sc
18c70 72 69 70 74 3e 20 3c 2b 73 63 72 69 70 74 3e 7d  ript> <+script>}
18c80 5d 0a 09 09 09 72 65 74 75 72 6e 20 5b 42 72 61  ]....return [Bra
18c90 63 65 4f 72 43 6f 6d 6d 61 6e 64 20 24 7b 74 65  ceOrCommand ${te
18ca0 78 74 7d 20 5c 0a 09 09 09 24 7b 73 74 61 72 74  xt} \....${start
18cb0 7d 20 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d  } ${end} ${line}
18cc0 20 24 7b 70 6f 73 7d 20 24 7b 6d 6f 64 7d 5d 0a   ${pos} ${mod}].
18cd0 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
18ce0 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
18cf0 74 65 28 62 69 6e 64 74 61 67 73 29 20 7b 74 65  te(bindtags) {te
18d00 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
18d10 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77  e pos mod} {..sw
18d20 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
18d30 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 43  ...1 { return [C
18d40 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
18d50 24 7b 74 65 78 74 7d 20 5b 57 69 64 67 65 74 43  ${text} [WidgetC
18d60 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d  hildren ${text}]
18d70 5d 20 7d 0a 09 09 32 20 7b 0a 09 09 09 23 20 73  ] }...2 {....# s
18d80 65 74 20 63 75 72 72 65 6e 74 5f 74 61 67 73 20  et current_tags 
18d90 5c 0a 09 09 09 23 20 5b 52 65 6d 6f 76 65 55 73  \....# [RemoveUs
18da0 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65  edOptions ${line
18db0 7d 20 5b 62 69 6e 64 74 61 67 73 20 5b 4c 69 6e  } [bindtags [Lin
18dc0 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 5d 5d  dex ${line} 1]]]
18dd0 0a 09 09 09 73 65 74 20 63 75 72 72 65 6e 74 5f  ....set current_
18de0 74 61 67 73 20 5b 62 69 6e 64 74 61 67 73 20 5b  tags [bindtags [
18df0 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31  Lindex ${line} 1
18e00 5d 5d 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ]]....return [Co
18e10 6d 70 6c 65 74 65 4c 69 73 74 46 72 6f 6d 4c 69  mpleteListFromLi
18e20 73 74 20 24 7b 74 65 78 74 7d 20 5b 4c 69 6e 64  st ${text} [Lind
18e30 65 78 20 24 7b 6c 69 6e 65 7d 20 32 5d 20 5c 0a  ex ${line} 2] \.
18e40 09 09 09 24 7b 63 75 72 72 65 6e 74 5f 74 61 67  ...${current_tag
18e50 73 7d 20 5c 7b 20 7b 20 7d 20 5c 7d 5d 0a 09 09  s} \{ { } \}]...
18e60 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
18e70 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
18e80 28 62 75 74 74 6f 6e 29 20 7b 74 65 78 74 20 73  (button) {text s
18e90 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
18ea0 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
18eb0 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31   -- ${pos} {...1
18ec0 20 7b 20 72 65 74 75 72 6e 20 5b 45 76 65 6e 74   { return [Event
18ed0 75 61 6c 6c 79 49 6e 73 65 72 74 4c 65 61 64 69  uallyInsertLeadi
18ee0 6e 67 44 6f 74 20 24 7b 74 65 78 74 7d 20 3c 70  ngDot ${text} <p
18ef0 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a 09 09 64 65  athName>] }...de
18f00 66 61 75 6c 74 20 7b 0a 09 09 09 72 65 74 75 72  fault {....retur
18f10 6e 20 5b 43 6f 6d 70 6c 65 74 65 57 69 64 67 65  n [CompleteWidge
18f20 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20  tConfigurations 
18f30 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d  ${text} ${start}
18f40 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 2d   ${line} {.....-
18f50 61 63 74 69 76 65 62 61 63 6b 67 72 6f 75 6e 64  activebackground
18f60 20 2d 61 63 74 69 76 65 66 6f 72 65 67 72 6f 75   -activeforegrou
18f70 6e 64 20 2d 61 6e 63 68 6f 72 0a 09 09 09 09 2d  nd -anchor.....-
18f80 62 61 63 6b 67 72 6f 75 6e 64 20 2d 62 69 74 6d  background -bitm
18f90 61 70 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20  ap -borderwidth 
18fa0 2d 63 75 72 73 6f 72 0a 09 09 09 09 2d 64 69 73  -cursor.....-dis
18fb0 61 62 6c 65 64 66 6f 72 65 67 72 6f 75 6e 64 20  abledforeground 
18fc0 2d 66 6f 6e 74 20 2d 66 6f 72 65 67 72 6f 75 6e  -font -foregroun
18fd0 64 0a 09 09 09 09 2d 68 69 67 68 6c 69 67 68 74  d.....-highlight
18fe0 62 61 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67 68  background -high
18ff0 6c 69 67 68 74 63 6f 6c 6f 72 0a 09 09 09 09 2d  lightcolor.....-
19000 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b 6e 65  highlightthickne
19010 73 73 20 2d 69 6d 61 67 65 20 2d 6a 75 73 74 69  ss -image -justi
19020 66 79 0a 09 09 09 09 2d 70 61 64 78 20 2d 70 61  fy.....-padx -pa
19030 64 79 20 2d 72 65 6c 69 65 66 20 2d 74 61 6b 65  dy -relief -take
19040 66 6f 63 75 73 20 2d 74 65 78 74 0a 09 09 09 09  focus -text.....
19050 2d 74 65 78 74 76 61 72 69 61 62 6c 65 20 2d 75  -textvariable -u
19060 6e 64 65 72 6c 69 6e 65 20 2d 77 72 61 70 6c 65  nderline -wraple
19070 6e 67 74 68 0a 09 09 09 09 2d 63 6f 6d 6d 61 6e  ngth.....-comman
19080 64 20 2d 64 65 66 61 75 6c 74 20 2d 68 65 69 67  d -default -heig
19090 68 74 20 2d 73 74 61 74 65 20 2d 77 69 64 74 68  ht -state -width
190a0 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 7d 0a 09 72  ....}]...}..}..r
190b0 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63  eturn "".}..proc
190c0 20 63 6f 6d 70 6c 65 74 65 28 63 61 6e 76 61 73   complete(canvas
190d0 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
190e0 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
190f0 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  {..switch -- ${p
19100 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74 75  os} {...1 { retu
19110 72 6e 20 5b 45 76 65 6e 74 75 61 6c 6c 79 49 6e  rn [EventuallyIn
19120 73 65 72 74 4c 65 61 64 69 6e 67 44 6f 74 20 24  sertLeadingDot $
19130 7b 74 65 78 74 7d 20 3c 70 61 74 68 4e 61 6d 65  {text} <pathName
19140 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b  >] }...default {
19150 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
19160 6c 65 74 65 57 69 64 67 65 74 43 6f 6e 66 69 67  leteWidgetConfig
19170 75 72 61 74 69 6f 6e 73 20 24 7b 74 65 78 74 7d  urations ${text}
19180 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65   ${start} ${line
19190 7d 20 7b 0a 09 09 09 09 2d 62 61 63 6b 67 72 6f  } {.....-backgro
191a0 75 6e 64 20 2d 62 6f 72 64 65 72 77 69 64 74 68  und -borderwidth
191b0 20 2d 63 75 72 73 6f 72 20 2d 68 69 67 68 6c 69   -cursor -highli
191c0 67 68 74 62 61 63 6b 67 72 6f 75 6e 64 0a 09 09  ghtbackground...
191d0 09 09 2d 68 69 67 68 6c 69 67 68 74 63 6f 6c 6f  ..-highlightcolo
191e0 72 20 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63  r -highlightthic
191f0 6b 6e 65 73 73 20 2d 69 6e 73 65 72 74 62 61 63  kness -insertbac
19200 6b 67 72 6f 75 6e 64 0a 09 09 09 09 2d 69 6e 73  kground.....-ins
19210 65 72 74 62 6f 72 64 65 72 77 69 64 74 68 20 2d  ertborderwidth -
19220 69 6e 73 65 72 74 6f 66 66 74 69 6d 65 20 2d 69  insertofftime -i
19230 6e 73 65 72 74 6f 6e 74 69 6d 65 0a 09 09 09 09  nsertontime.....
19240 2d 69 6e 73 65 72 74 77 69 64 74 68 20 2d 72 65  -insertwidth -re
19250 6c 69 65 66 20 2d 73 65 6c 65 63 74 62 61 63 6b  lief -selectback
19260 67 72 6f 75 6e 64 20 2d 73 65 6c 65 63 74 62 6f  ground -selectbo
19270 72 64 65 72 77 69 64 74 68 0a 09 09 09 09 2d 73  rderwidth.....-s
19280 65 6c 65 63 74 66 6f 72 65 67 72 6f 75 6e 64 20  electforeground 
19290 2d 74 61 6b 65 66 6f 63 75 73 20 2d 78 73 63 72  -takefocus -xscr
192a0 6f 6c 6c 63 6f 6d 6d 61 6e 64 20 2d 79 73 63 72  ollcommand -yscr
192b0 6f 6c 6c 63 6f 6d 6d 61 6e 64 0a 09 09 09 09 2d  ollcommand.....-
192c0 63 6c 6f 73 65 65 6e 6f 75 67 68 20 2d 63 6f 6e  closeenough -con
192d0 66 69 6e 65 20 2d 68 65 69 67 68 74 20 2d 73 63  fine -height -sc
192e0 72 6f 6c 6c 72 65 67 69 6f 6e 20 2d 77 69 64 74  rollregion -widt
192f0 68 0a 09 09 09 09 2d 78 73 63 72 6f 6c 6c 69 6e  h.....-xscrollin
19300 63 72 65 6d 65 6e 74 20 2d 79 73 63 72 6f 6c 6c  crement -yscroll
19310 69 6e 63 72 65 6d 65 6e 74 0a 09 09 09 7d 5d 0a  increment....}].
19320 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
19330 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
19340 74 65 28 63 68 65 63 6b 62 75 74 74 6f 6e 29 20  te(checkbutton) 
19350 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
19360 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
19370 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73  .switch -- ${pos
19380 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e  } {...1 { return
19390 20 5b 45 76 65 6e 74 75 61 6c 6c 79 49 6e 73 65   [EventuallyInse
193a0 72 74 4c 65 61 64 69 6e 67 44 6f 74 20 24 7b 74  rtLeadingDot ${t
193b0 65 78 74 7d 20 3c 70 61 74 68 4e 61 6d 65 3e 5d  ext} <pathName>]
193c0 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09   }...default {..
193d0 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
193e0 74 65 57 69 64 67 65 74 43 6f 6e 66 69 67 75 72  teWidgetConfigur
193f0 61 74 69 6f 6e 73 20 24 7b 74 65 78 74 7d 20 24  ations ${text} $
19400 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 20  {start} ${line} 
19410 7b 0a 09 09 09 09 2d 61 63 74 69 76 65 62 61 63  {.....-activebac
19420 6b 67 72 6f 75 6e 64 20 61 63 74 69 76 65 42 61  kground activeBa
19430 63 6b 67 72 6f 75 6e 64 20 46 6f 72 65 67 72 6f  ckground Foregro
19440 75 6e 64 20 0a 09 09 09 09 2d 61 63 74 69 76 65  und .....-active
19450 66 6f 72 65 67 72 6f 75 6e 64 20 2d 61 6e 63 68  foreground -anch
19460 6f 72 20 2d 62 61 63 6b 67 72 6f 75 6e 64 20 2d  or -background -
19470 62 69 74 6d 61 70 0a 09 09 09 09 2d 62 6f 72 64  bitmap.....-bord
19480 65 72 77 69 64 74 68 20 2d 63 75 72 73 6f 72 20  erwidth -cursor 
19490 2d 64 69 73 61 62 6c 65 64 66 6f 72 65 67 72 6f  -disabledforegro
194a0 75 6e 64 20 2d 66 6f 6e 74 0a 09 09 09 09 2d 66  und -font.....-f
194b0 6f 72 65 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c  oreground -highl
194c0 69 67 68 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d  ightbackground -
194d0 68 69 67 68 6c 69 67 68 74 63 6f 6c 6f 72 0a 09  highlightcolor..
194e0 09 09 09 2d 68 69 67 68 6c 69 67 68 74 74 68 69  ...-highlightthi
194f0 63 6b 6e 65 73 73 20 2d 69 6d 61 67 65 20 2d 6a  ckness -image -j
19500 75 73 74 69 66 79 20 2d 70 61 64 78 20 2d 70 61  ustify -padx -pa
19510 64 79 0a 09 09 09 09 2d 72 65 6c 69 65 66 20 2d  dy.....-relief -
19520 74 61 6b 65 66 6f 63 75 73 20 2d 74 65 78 74 20  takefocus -text 
19530 2d 74 65 78 74 76 61 72 69 61 62 6c 65 20 2d 75  -textvariable -u
19540 6e 64 65 72 6c 69 6e 65 0a 09 09 09 09 2d 77 72  nderline.....-wr
19550 61 70 6c 65 6e 67 74 68 20 2d 63 6f 6d 6d 61 6e  aplength -comman
19560 64 20 2d 68 65 69 67 68 74 20 2d 69 6e 64 69 63  d -height -indic
19570 61 74 6f 72 6f 6e 20 2d 6f 66 66 76 61 6c 75 65  atoron -offvalue
19580 0a 09 09 09 09 2d 6f 6e 76 61 6c 75 65 20 2d 73  .....-onvalue -s
19590 65 6c 65 63 74 63 6f 6c 6f 72 20 2d 73 65 6c 65  electcolor -sele
195a0 63 74 69 6d 61 67 65 20 2d 73 74 61 74 65 20 2d  ctimage -state -
195b0 76 61 72 69 61 62 6c 65 0a 09 09 09 09 2d 77 69  variable.....-wi
195c0 64 74 68 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 7d  dth....}]...}..}
195d0 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70  ..return "".}..p
195e0 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 63 6c 69  roc complete(cli
195f0 70 62 6f 61 72 64 29 20 7b 74 65 78 74 20 73 74  pboard) {text st
19600 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
19610 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
19620 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20  -- ${pos} {...1 
19630 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
19640 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
19650 74 7d 20 7b 61 70 70 65 6e 64 20 63 6c 65 61 72  t} {append clear
19660 7d 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b  }] }...default {
19670 0a 09 09 09 73 65 74 20 73 75 62 20 5b 4c 69 6e  ....set sub [Lin
19680 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09  dex ${line} 1]..
19690 09 09 73 65 74 20 70 72 65 76 20 5b 50 72 65 76  ..set prev [Prev
196a0 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74  iousWord ${start
196b0 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09 09 73 77  } ${line}]....sw
196c0 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b  itch -- ${sub} {
196d0 0a 09 09 09 09 61 70 70 65 6e 64 20 7b 0a 09 09  .....append {...
196e0 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  ...switch -- ${p
196f0 72 65 76 7d 20 7b 0a 09 09 09 09 09 09 2d 64 69  rev} {.......-di
19700 73 70 6c 61 79 6f 66 20 7b 0a 09 09 09 09 09 09  splayof {.......
19710 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
19720 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
19730 7d 20 5b 54 6f 70 6c 65 76 65 6c 57 69 6e 64 6f  } [ToplevelWindo
19740 77 73 5d 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09  ws]].......}....
19750 09 09 09 2d 66 6f 72 6d 61 74 20 7b 20 72 65 74  ...-format { ret
19760 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
19770 73 20 3c 66 6f 72 6d 61 74 3e 5d 20 7d 0a 09 09  s <format>] }...
19780 09 09 09 09 2d 74 79 70 65 20 7b 20 72 65 74 75  ....-type { retu
19790 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
197a0 20 3c 74 79 70 65 3e 5d 20 7d 0a 09 09 09 09 09   <type>] }......
197b0 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09  .default {......
197c0 09 09 73 65 74 20 6f 70 74 73 20 5b 52 65 6d 6f  ..set opts [Remo
197d0 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b  veUsedOptions ${
197e0 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 09 09 09 09  line} {.........
197f0 2d 64 69 73 70 6c 61 79 6f 66 20 2d 66 6f 72 6d  -displayof -form
19800 61 74 20 2d 74 79 70 65 20 2d 2d 0a 09 09 09 09  at -type --.....
19810 09 09 09 7d 20 7b 2d 2d 7d 5d 0a 09 09 09 09 09  ...} {--}]......
19820 09 09 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6c  ..if {![string l
19830 65 6e 67 74 68 20 24 7b 6f 70 74 73 7d 5d 7d 20  ength ${opts}]} 
19840 7b 0a 09 09 09 09 09 09 09 09 72 65 74 75 72 6e  {.........return
19850 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
19860 64 61 74 61 3e 5d 0a 09 09 09 09 09 09 09 7d 20  data>]........} 
19870 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 09 09 72  else {.........r
19880 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
19890 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
198a0 24 7b 6f 70 74 73 7d 5d 0a 09 09 09 09 09 09 09  ${opts}]........
198b0 7d 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 7d  }.......}......}
198c0 0a 09 09 09 09 7d 0a 09 09 09 09 63 6c 65 61 72  .....}.....clear
198d0 20 7b 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d   {......switch -
198e0 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09  - ${prev} {.....
198f0 09 09 2d 64 69 73 70 6c 61 79 6f 66 20 7b 0a 09  ..-displayof {..
19900 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
19910 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
19920 7b 74 65 78 74 7d 20 5b 54 6f 70 6c 65 76 65 6c  {text} [Toplevel
19930 57 69 6e 64 6f 77 73 5d 5d 0a 09 09 09 09 09 09  Windows]].......
19940 7d 0a 09 09 09 09 09 09 64 65 66 61 75 6c 74 20  }.......default 
19950 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e 20  {........return 
19960 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
19970 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09  t ${text} \.....
19980 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70  ...[RemoveUsedOp
19990 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b 0a  tions ${line} {.
199a0 09 09 09 09 09 09 09 09 2d 64 69 73 70 6c 61 79  ........-display
199b0 6f 66 0a 09 09 09 09 09 09 09 7d 5d 5d 0a 09 09  of........}]]...
199c0 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a 09 09 09  ....}......}....
199d0 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d  .}....}...}..}.}
199e0 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
199f0 64 65 73 74 72 6f 79 29 20 7b 74 65 78 74 20 73  destroy) {text s
19a00 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
19a10 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 72 65  s mod} {..set re
19a20 6d 61 69 6e 69 6e 67 20 5b 52 65 6d 6f 76 65 55  maining [RemoveU
19a30 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e  sedOptions ${lin
19a40 65 7d 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72  e} [WidgetChildr
19a50 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 72 65  en ${text}]]..re
19a60 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
19a70 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24  omList ${text} $
19a80 7b 72 65 6d 61 69 6e 69 6e 67 7d 5d 0a 7d 0a 0a  {remaining}].}..
19a90 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 65 6e  proc complete(en
19aa0 74 72 79 29 20 7b 74 65 78 74 20 73 74 61 72 74  try) {text start
19ab0 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
19ac0 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20  d} {..switch -- 
19ad0 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72  ${pos} {...1 { r
19ae0 65 74 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c 6c  eturn [Eventuall
19af0 79 49 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f  yInsertLeadingDo
19b00 74 20 24 7b 74 65 78 74 7d 20 3c 70 61 74 68 4e  t ${text} <pathN
19b10 61 6d 65 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c  ame>] }...defaul
19b20 74 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43  t {....return [C
19b30 6f 6d 70 6c 65 74 65 57 69 64 67 65 74 43 6f 6e  ompleteWidgetCon
19b40 66 69 67 75 72 61 74 69 6f 6e 73 20 24 7b 74 65  figurations ${te
19b50 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c  xt} ${start} ${l
19b60 69 6e 65 7d 20 7b 0a 09 09 09 09 2d 62 61 63 6b  ine} {.....-back
19b70 67 72 6f 75 6e 64 20 2d 62 6f 72 64 65 72 77 69  ground -borderwi
19b80 64 74 68 20 2d 63 75 72 73 6f 72 20 2d 65 78 70  dth -cursor -exp
19b90 6f 72 74 73 65 6c 65 63 74 69 6f 6e 0a 09 09 09  ortselection....
19ba0 09 2d 66 6f 6e 74 20 2d 66 6f 72 65 67 72 6f 75  .-font -foregrou
19bb0 6e 64 20 2d 68 69 67 68 6c 69 67 68 74 62 61 63  nd -highlightbac
19bc0 6b 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69 67  kground -highlig
19bd0 68 74 63 6f 6c 6f 72 0a 09 09 09 09 2d 68 69 67  htcolor.....-hig
19be0 68 6c 69 67 68 74 74 68 69 63 6b 6e 65 73 73 20  hlightthickness 
19bf0 2d 69 6e 73 65 72 74 62 61 63 6b 67 72 6f 75 6e  -insertbackgroun
19c00 64 20 2d 69 6e 73 65 72 74 62 6f 72 64 65 72 77  d -insertborderw
19c10 69 64 74 68 0a 09 09 09 09 2d 69 6e 73 65 72 74  idth.....-insert
19c20 6f 66 66 74 69 6d 65 20 2d 69 6e 73 65 72 74 6f  offtime -inserto
19c30 6e 74 69 6d 65 20 2d 69 6e 73 65 72 74 77 69 64  ntime -insertwid
19c40 74 68 20 2d 6a 75 73 74 69 66 79 20 2d 72 65 6c  th -justify -rel
19c50 69 65 66 0a 09 09 09 09 2d 73 65 6c 65 63 74 62  ief.....-selectb
19c60 61 63 6b 67 72 6f 75 6e 64 20 2d 73 65 6c 65 63  ackground -selec
19c70 74 62 6f 72 64 65 72 77 69 64 74 68 20 2d 73 65  tborderwidth -se
19c80 6c 65 63 74 66 6f 72 65 67 72 6f 75 6e 64 0a 09  lectforeground..
19c90 09 09 09 2d 74 61 6b 65 66 6f 63 75 73 20 2d 74  ...-takefocus -t
19ca0 65 78 74 76 61 72 69 61 62 6c 65 20 2d 78 73 63  extvariable -xsc
19cb0 72 6f 6c 6c 63 6f 6d 6d 61 6e 64 20 2d 73 68 6f  rollcommand -sho
19cc0 77 20 2d 73 74 61 74 65 0a 09 09 09 09 2d 77 69  w -state.....-wi
19cd0 64 74 68 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 7d  dth....}]...}..}
19ce0 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70  ..return "".}..p
19cf0 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 65 76 65  roc complete(eve
19d00 6e 74 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  nt) {text start 
19d10 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
19d20 7d 20 7b 0a 09 73 65 74 20 73 75 62 20 5b 4c 69  } {..set sub [Li
19d30 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a  ndex ${line} 1].
19d40 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73  .switch -- ${pos
19d50 7d 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65 74  } {...1 {....ret
19d60 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
19d70 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 20  mList ${text} { 
19d80 61 64 64 20 64 65 6c 65 74 65 20 67 65 6e 65 72  add delete gener
19d90 61 74 65 20 69 6e 66 6f 20 7d 5d 0a 09 09 7d 0a  ate info }]...}.
19da0 09 09 32 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ..2 {....switch 
19db0 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09  -- ${sub} {.....
19dc0 61 64 64 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  add { return [Di
19dd0 73 70 6c 61 79 48 69 6e 74 73 20 3c 3c 76 69 72  splayHints <<vir
19de0 74 75 61 6c 3e 3e 5d 20 7d 0a 09 09 09 09 69 6e  tual>>] }.....in
19df0 66 6f 20 2d 0a 09 09 09 09 64 65 6c 65 74 65 20  fo -.....delete 
19e00 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  {......return [C
19e10 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
19e20 24 7b 74 65 78 74 7d 20 5b 65 76 65 6e 74 20 69  ${text} [event i
19e30 6e 66 6f 5d 20 22 3c 22 5d 0a 09 09 09 09 7d 0a  nfo] "<"].....}.
19e40 09 09 09 09 67 65 6e 65 72 61 74 65 20 7b 0a 09  ....generate {..
19e50 09 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46  ....return [TryF
19e60 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
19e70 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
19e80 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a  ${text}]].....}.
19e90 09 09 09 7d 0a 09 09 7d 0a 09 09 33 20 7b 0a 09  ...}...}...3 {..
19ea0 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75  ..switch -- ${su
19eb0 62 7d 20 7b 0a 09 09 09 09 61 64 64 20 2d 0a 09  b} {.....add -..
19ec0 09 09 09 64 65 6c 65 74 65 20 2d 0a 09 09 09 09  ...delete -.....
19ed0 67 65 6e 65 72 61 74 65 20 7b 0a 09 09 09 09 09  generate {......
19ee0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
19ef0 53 65 71 75 65 6e 63 65 20 24 7b 74 65 78 74 7d  Sequence ${text}
19f00 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d   [Lindex ${line}
19f10 20 33 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 69   3]].....}.....i
19f20 6e 66 6f 20 7b 7d 0a 09 09 09 7d 0a 09 09 7d 0a  nfo {}....}...}.
19f30 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 73  ..default {....s
19f40 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20  witch -- ${sub} 
19f50 7b 0a 09 09 09 09 61 64 64 20 2d 0a 09 09 09 09  {.....add -.....
19f60 64 65 6c 65 74 65 20 7b 0a 09 09 09 09 09 72 65  delete {......re
19f70 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 53 65  turn [CompleteSe
19f80 71 75 65 6e 63 65 20 24 7b 74 65 78 74 7d 20 5b  quence ${text} [
19f90 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 33  Lindex ${line} 3
19fa0 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 69 6e 66  ]].....}.....inf
19fb0 6f 20 7b 7d 0a 09 09 09 09 67 65 6e 65 72 61 74  o {}.....generat
19fc0 65 20 7b 0a 0a 09 09 09 09 09 73 77 69 74 63 68  e {.......switch
19fd0 20 2d 2d 20 5b 50 72 65 76 69 6f 75 73 57 6f 72   -- [PreviousWor
19fe0 64 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e  d ${start} ${lin
19ff0 65 7d 5d 20 7b 0a 0a 09 09 09 09 09 09 2d 61 62  e}] {........-ab
1a000 6f 76 65 20 2d 0a 09 09 09 09 09 09 2d 72 6f 6f  ove -.......-roo
1a010 74 20 2d 0a 09 09 09 09 09 09 2d 73 75 62 77 69  t -.......-subwi
1a020 6e 64 6f 77 20 7b 0a 09 09 09 09 09 09 09 72 65  ndow {........re
1a030 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73  turn [TryFromLis
1a040 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09  t ${text} \.....
1a050 09 09 09 5b 57 69 64 67 65 74 43 68 69 6c 64 72  ...[WidgetChildr
1a060 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09  en ${text}]]....
1a070 09 09 09 7d 0a 0a 09 09 09 09 09 09 2d 62 6f 72  ...}........-bor
1a080 64 65 72 77 69 64 74 68 20 7b 20 72 65 74 75 72  derwidth { retur
1a090 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
1a0a0 3c 73 69 7a 65 3e 5d 20 7d 0a 0a 09 09 09 09 09  <size>] }.......
1a0b0 09 2d 62 75 74 74 6f 6e 20 2d 0a 09 09 09 09 09  .-button -......
1a0c0 09 2d 64 65 6c 74 61 20 2d 0a 09 09 09 09 09 09  .-delta -.......
1a0d0 2d 6b 65 79 63 6f 64 65 20 2d 0a 09 09 09 09 09  -keycode -......
1a0e0 09 2d 73 65 72 69 61 6c 20 2d 0a 09 09 09 09 09  .-serial -......
1a0f0 09 2d 63 6f 75 6e 74 20 7b 20 72 65 74 75 72 6e  .-count { return
1a100 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
1a110 6e 75 6d 62 65 72 3e 5d 20 7d 0a 0a 09 09 09 09  number>] }......
1a120 09 09 2d 64 65 74 61 69 6c 20 7b 0a 09 09 09 09  ..-detail {.....
1a130 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
1a140 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
1a150 78 74 7d 20 7b 20 0a 09 09 09 09 09 09 09 09 4e  xt} { .........N
1a160 6f 74 69 66 79 41 6e 63 65 73 74 6f 72 20 20 20  otifyAncestor   
1a170 20 4e 6f 74 69 66 79 4e 6f 6e 6c 69 6e 65 61 72   NotifyNonlinear
1a180 56 69 72 74 75 61 6c 0a 09 09 09 09 09 09 09 09  Virtual.........
1a190 4e 6f 74 69 66 79 44 65 74 61 69 6c 4e 6f 6e 65  NotifyDetailNone
1a1a0 20 20 4e 6f 74 69 66 79 50 6f 69 6e 74 65 72 0a    NotifyPointer.
1a1b0 09 09 09 09 09 09 09 09 4e 6f 74 69 66 79 49 6e  ........NotifyIn
1a1c0 66 65 72 69 6f 72 20 20 20 20 4e 6f 74 69 66 79  ferior    Notify
1a1d0 50 6f 69 6e 74 65 72 52 6f 6f 74 0a 09 09 09 09  PointerRoot.....
1a1e0 09 09 09 09 4e 6f 74 69 66 79 4e 6f 6e 6c 69 6e  ....NotifyNonlin
1a1f0 65 61 72 20 20 20 4e 6f 74 69 66 79 56 69 72 74  ear   NotifyVirt
1a200 75 61 6c 0a 09 09 09 09 09 09 09 7d 5d 0a 09 09  ual........}]...
1a210 09 09 09 09 7d 0a 0a 09 09 09 09 09 09 2d 66 6f  ....}........-fo
1a220 63 75 73 20 2d 0a 09 09 09 09 09 09 2d 6f 76 65  cus -.......-ove
1a230 72 72 69 64 65 20 2d 0a 09 09 09 09 09 09 2d 73  rride -.......-s
1a240 65 6e 64 65 76 65 6e 74 20 7b 20 72 65 74 75 72  endevent { retur
1a250 6e 20 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65  n [CompleteBoole
1a260 61 6e 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 0a 09  an ${text}] }...
1a270 09 09 09 09 09 2d 68 65 69 67 68 74 20 2d 0a 09  .....-height -..
1a280 09 09 09 09 09 2d 77 69 64 74 68 20 7b 20 72 65  .....-width { re
1a290 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
1a2a0 74 73 20 3c 73 69 7a 65 3e 5d 20 7d 0a 0a 09 09  ts <size>] }....
1a2b0 09 09 09 09 2d 6b 65 79 73 79 6d 20 7b 20 72 65  ....-keysym { re
1a2c0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
1a2d0 74 73 20 3c 6e 61 6d 65 3e 5d 20 7d 0a 0a 09 09  ts <name>] }....
1a2e0 09 09 09 09 2d 6d 6f 64 65 20 7b 0a 09 09 09 09  ....-mode {.....
1a2f0 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
1a300 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
1a310 78 74 7d 20 7b 20 0a 09 09 09 09 09 09 09 09 4e  xt} { .........N
1a320 6f 74 69 66 79 4e 6f 72 6d 61 6c 20 4e 6f 74 69  otifyNormal Noti
1a330 66 79 47 72 61 62 0a 09 09 09 09 09 09 09 09 4e  fyGrab.........N
1a340 6f 74 69 66 79 55 6e 67 72 61 62 20 4e 6f 74 69  otifyUngrab Noti
1a350 66 79 57 68 69 6c 65 47 72 61 62 62 65 64 0a 09  fyWhileGrabbed..
1a360 09 09 09 09 09 09 7d 5d 0a 09 09 09 09 09 09 7d  ......}].......}
1a370 0a 0a 09 09 09 09 09 09 2d 70 6c 61 63 65 20 7b  ........-place {
1a380 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b  ........return [
1a390 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
1a3a0 20 24 7b 74 65 78 74 7d 20 7b 20 0a 09 09 09 09   ${text} { .....
1a3b0 09 09 09 09 50 6c 61 63 65 4f 6e 54 6f 70 20 50  ....PlaceOnTop P
1a3c0 6c 61 63 65 4f 6e 42 6f 74 74 6f 6d 0a 09 09 09  laceOnBottom....
1a3d0 09 09 09 09 7d 5d 0a 09 09 09 09 09 09 7d 0a 0a  ....}].......}..
1a3e0 09 09 09 09 09 09 2d 72 6f 6f 74 78 20 2d 0a 09  ......-rootx -..
1a3f0 09 09 09 09 09 2d 72 6f 6f 74 79 20 2d 0a 09 09  .....-rooty -...
1a400 09 09 09 09 2d 78 20 2d 0a 09 09 09 09 09 09 2d  ....-x -.......-
1a410 79 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  y { return [Disp
1a420 6c 61 79 48 69 6e 74 73 20 3c 63 6f 6f 72 64 3e  layHints <coord>
1a430 5d 20 7d 0a 0a 09 09 09 09 09 09 2d 73 74 61 74  ] }........-stat
1a440 65 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72  e {........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 7b 74 65 78 74 7d 20 7b 20 0a 09  ist ${text} { ..
1a470 09 09 09 09 09 09 09 56 69 73 69 62 69 6c 69 74  .......Visibilit
1a480 79 55 6e 6f 62 73 63 75 72 65 64 0a 09 09 09 09  yUnobscured.....
1a490 09 09 09 09 56 69 73 69 62 69 6c 69 74 79 50 61  ....VisibilityPa
1a4a0 72 74 69 61 6c 6c 79 4f 62 73 63 75 72 65 64 0a  rtiallyObscured.
1a4b0 09 09 09 09 09 09 09 09 56 69 73 69 62 69 6c 69  ........Visibili
1a4c0 74 79 46 75 6c 6c 79 4f 62 73 63 75 72 65 64 0a  tyFullyObscured.
1a4d0 09 09 09 09 09 09 09 09 3c 69 6e 74 65 67 65 72  ........<integer
1a4e0 3e 0a 09 09 09 09 09 09 09 7d 5d 0a 09 09 09 09  >........}].....
1a4f0 09 09 7d 0a 0a 09 09 09 09 09 09 2d 74 69 6d 65  ..}........-time
1a500 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
1a510 61 79 48 69 6e 74 73 20 3c 69 6e 74 65 67 65 72  ayHints <integer
1a520 3e 5d 20 7d 0a 09 09 09 09 09 09 2d 77 68 65 6e  >] }.......-when
1a530 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e   {........return
1a540 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
1a550 73 74 20 24 7b 74 65 78 74 7d 20 7b 20 0a 09 09  st ${text} { ...
1a560 09 09 09 09 09 09 6e 6f 77 20 74 61 69 6c 20 68  ......now tail h
1a570 65 61 64 20 6d 61 72 6b 0a 09 09 09 09 09 09 09  ead mark........
1a580 7d 5d 0a 09 09 09 09 09 09 7d 0a 0a 09 09 09 09  }].......}......
1a590 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09  ..default {.....
1a5a0 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
1a5b0 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
1a5c0 78 74 7d 20 5c 0a 09 09 09 09 09 09 09 5b 52 65  xt} \........[Re
1a5d0 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20  moveUsedOptions 
1a5e0 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 09 09  ${line} {.......
1a5f0 09 09 2d 61 62 6f 76 65 20 2d 62 6f 72 64 65 72  ..-above -border
1a600 77 69 64 74 68 20 2d 62 75 74 74 6f 6e 20 2d 63  width -button -c
1a610 6f 75 6e 74 20 2d 64 65 6c 74 61 0a 09 09 09 09  ount -delta.....
1a620 09 09 09 09 2d 64 65 74 61 69 6c 20 2d 66 6f 63  ....-detail -foc
1a630 75 73 20 2d 68 65 69 67 68 74 20 2d 6b 65 79 63  us -height -keyc
1a640 6f 64 65 20 2d 6b 65 79 73 79 6d 0a 09 09 09 09  ode -keysym.....
1a650 09 09 09 09 2d 6d 6f 64 65 20 2d 6f 76 65 72 72  ....-mode -overr
1a660 69 64 65 20 2d 70 6c 61 63 65 20 2d 72 6f 6f 74  ide -place -root
1a670 20 2d 72 6f 6f 74 78 20 2d 72 6f 6f 74 79 0a 09   -rootx -rooty..
1a680 09 09 09 09 09 09 09 2d 73 65 6e 64 65 76 65 6e  .......-sendeven
1a690 74 20 2d 73 65 72 69 61 6c 20 2d 73 74 61 74 65  t -serial -state
1a6a0 20 2d 73 75 62 77 69 6e 64 6f 77 20 2d 74 69 6d   -subwindow -tim
1a6b0 65 0a 09 09 09 09 09 09 09 09 2d 77 69 64 74 68  e.........-width
1a6c0 20 2d 77 68 65 6e 20 2d 78 20 2d 79 0a 09 09 09   -when -x -y....
1a6d0 09 09 09 09 7d 5d 5d 0a 0a 09 09 09 09 09 09 7d  ....}]]........}
1a6e0 0a 09 09 09 09 09 7d 0a 09 09 09 09 09 64 65 66  ......}......def
1a6f0 61 75 6c 74 20 7b 20 7d 0a 09 09 09 09 7d 0a 09  ault { }.....}..
1a700 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75  ..}...}..}..retu
1a710 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f  rn "".}..proc co
1a720 6d 70 6c 65 74 65 28 66 6f 63 75 73 29 20 7b 74  mplete(focus) {t
1a730 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
1a740 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
1a750 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
1a760 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65 74 75 72  {...1 {....retur
1a770 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
1a780 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09  ist ${text} \...
1a790 09 5b 63 6f 6e 63 61 74 20 5b 57 69 64 67 65 74  .[concat [Widget
1a7a0 43 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d  Children ${text}
1a7b0 5d 20 2d 64 69 73 70 6c 61 79 6f 66 20 2d 66 6f  ] -displayof -fo
1a7c0 72 63 65 20 2d 6c 61 73 74 66 6f 72 5d 5d 0a 09  rce -lastfor]]..
1a7d0 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  .}...default {..
1a7e0 09 09 73 77 69 74 63 68 20 2d 2d 20 5b 50 72 65  ..switch -- [Pre
1a7f0 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72  viousWord ${star
1a800 74 7d 20 24 7b 6c 69 6e 65 7d 5d 20 7b 0a 09 09  t} ${line}] {...
1a810 09 09 2d 64 69 73 70 6c 61 79 6f 66 20 2d 0a 09  ..-displayof -..
1a820 09 09 09 2d 66 6f 72 63 65 20 2d 0a 09 09 09 09  ...-force -.....
1a830 2d 6c 61 73 74 66 6f 72 20 7b 0a 09 09 09 09 09  -lastfor {......
1a840 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
1a850 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
1a860 20 5c 0a 09 09 09 09 09 5b 57 69 64 67 65 74 43   \......[WidgetC
1a870 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d  hildren ${text}]
1a880 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d  ].....}....}...}
1a890 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
1a8a0 0a 0a 70 72 6f 63 20 46 6f 6e 74 43 6f 6e 66 69  ..proc FontConfi
1a8b0 67 75 72 65 20 7b 74 65 78 74 20 6c 69 6e 65 20  gure {text line 
1a8c0 70 72 65 76 7d 20 7b 0a 09 73 65 74 20 66 6f 6e  prev} {..set fon
1a8d0 74 6f 70 74 73 20 7b 2d 66 61 6d 69 6c 79 20 2d  topts {-family -
1a8e0 6f 76 65 72 73 74 72 69 6b 65 20 2d 73 69 7a 65  overstrike -size
1a8f0 20 2d 73 6c 61 6e 74 20 2d 75 6e 64 65 72 6c 69   -slant -underli
1a900 6e 65 20 2d 77 65 69 67 68 74 7d 0a 09 73 77 69  ne -weight}..swi
1a910 74 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b  tch -- ${prev} {
1a920 0a 09 09 2d 66 61 6d 69 6c 79 20 7b 0a 09 09 09  ...-family {....
1a930 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
1a940 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
1a950 20 5b 66 6f 6e 74 20 66 61 6d 69 6c 69 65 73 5d   [font families]
1a960 5d 0a 09 09 7d 0a 09 09 2d 75 6e 64 65 72 6c 69  ]...}...-underli
1a970 6e 65 20 2d 0a 09 09 2d 6f 76 65 72 73 74 72 69  ne -...-overstri
1a980 6b 65 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d  ke { return [Com
1a990 70 6c 65 74 65 42 6f 6f 6c 65 61 6e 20 24 7b 74  pleteBoolean ${t
1a9a0 65 78 74 7d 5d 20 7d 0a 09 09 2d 73 69 7a 65 20  ext}] }...-size 
1a9b0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
1a9c0 79 48 69 6e 74 73 20 3c 73 69 7a 65 3e 5d 20 7d  yHints <size>] }
1a9d0 0a 09 09 2d 73 6c 61 6e 74 20 7b 0a 09 09 09 72  ...-slant {....r
1a9e0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1a9f0 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1aa00 7b 20 72 6f 6d 61 6e 20 69 74 61 6c 69 63 20 7d  { roman italic }
1aa10 5d 0a 09 09 7d 0a 09 09 2d 77 65 69 67 68 74 20  ]...}...-weight 
1aa20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  {....return [Com
1aa30 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
1aa40 74 65 78 74 7d 20 7b 20 6e 6f 72 6d 61 6c 20 62  text} { normal b
1aa50 6f 6c 64 20 7d 5d 0a 09 09 7d 0a 09 09 64 65 66  old }]...}...def
1aa60 61 75 6c 74 20 7b 0a 09 09 09 72 65 74 75 72 6e  ault {....return
1aa70 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
1aa80 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09  st ${text} \....
1aa90 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f  [RemoveUsedOptio
1aaa0 6e 73 20 24 7b 6c 69 6e 65 7d 20 24 7b 66 6f 6e  ns ${line} ${fon
1aab0 74 6f 70 74 73 7d 5d 5d 0a 09 09 7d 0a 09 7d 0a  topts}]]...}..}.
1aac0 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
1aad0 28 66 6f 6e 74 29 20 7b 74 65 78 74 20 73 74 61  (font) {text sta
1aae0 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
1aaf0 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 66 6f 6e 74  mod} {..set font
1ab00 6f 70 74 73 20 7b 2d 66 61 6d 69 6c 79 20 2d 6f  opts {-family -o
1ab10 76 65 72 73 74 72 69 6b 65 20 2d 73 69 7a 65 20  verstrike -size 
1ab20 2d 73 6c 61 6e 74 20 2d 75 6e 64 65 72 6c 69 6e  -slant -underlin
1ab30 65 20 2d 77 65 69 67 68 74 7d 0a 09 73 65 74 20  e -weight}..set 
1ab40 66 6f 6e 74 6d 65 74 72 69 63 73 20 7b 2d 61 73  fontmetrics {-as
1ab50 63 65 6e 74 20 2d 64 65 73 63 65 6e 74 20 2d 6c  cent -descent -l
1ab60 69 6e 65 73 70 61 63 65 20 2d 66 69 78 65 64 7d  inespace -fixed}
1ab70 0a 09 73 65 74 20 73 75 62 20 5b 4c 69 6e 64 65  ..set sub [Linde
1ab80 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73 65  x ${line} 1]..se
1ab90 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73  t prev [Previous
1aba0 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b  Word ${start} ${
1abb0 6c 69 6e 65 7d 5d 0a 09 73 77 69 74 63 68 20 2d  line}]..switch -
1abc0 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b  - ${pos} {...1 {
1abd0 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
1abe0 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
1abf0 65 78 74 7d 20 7b 0a 09 09 09 09 61 63 74 75 61  ext} {.....actua
1ac00 6c 20 63 6f 6e 66 69 67 75 72 65 20 63 72 65 61  l configure crea
1ac10 74 65 20 64 65 6c 65 74 65 20 66 61 6d 69 6c 69  te delete famili
1ac20 65 73 20 6d 65 61 73 75 72 65 20 6d 65 74 72 69  es measure metri
1ac30 63 73 20 6e 61 6d 65 73 0a 09 09 09 7d 5d 0a 09  cs names....}]..
1ac40 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73 77 69 74  .}...2 {....swit
1ac50 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09  ch -- ${sub} {..
1ac60 09 09 09 61 63 74 75 61 6c 20 2d 0a 09 09 09 09  ...actual -.....
1ac70 6d 65 61 73 75 72 65 20 2d 0a 09 09 09 09 6d 65  measure -.....me
1ac80 74 72 69 63 73 20 7b 0a 09 09 09 09 09 72 65 74  trics {......ret
1ac90 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
1aca0 73 20 3c 66 6f 6e 74 3e 5d 0a 09 09 09 09 7d 0a  s <font>].....}.
1acb0 09 09 09 09 63 6f 6e 66 69 67 75 72 65 20 2d 0a  ....configure -.
1acc0 09 09 09 09 64 65 6c 65 74 65 20 7b 0a 09 09 09  ....delete {....
1acd0 09 09 73 65 74 20 6e 61 6d 65 73 20 5b 66 6f 6e  ..set names [fon
1ace0 74 20 6e 61 6d 65 73 5d 0a 09 09 09 09 09 69 66  t names]......if
1acf0 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
1ad00 20 24 7b 6e 61 6d 65 73 7d 5d 7d 20 7b 0a 09 09   ${names}]} {...
1ad10 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
1ad20 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
1ad30 65 78 74 7d 20 24 7b 6e 61 6d 65 73 7d 5d 0a 09  ext} ${names}]..
1ad40 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09  ....} else {....
1ad50 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  ...return [Displ
1ad60 61 79 48 69 6e 74 73 20 3c 66 6f 6e 74 6e 61 6d  ayHints <fontnam
1ad70 65 3e 5d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d  e>]......}.....}
1ad80 0a 09 09 09 09 63 72 65 61 74 65 20 7b 0a 09 09  .....create {...
1ad90 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
1ada0 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
1adb0 78 74 7d 20 5c 0a 09 09 09 09 09 5b 63 6f 6e 63  xt} \......[conc
1adc0 61 74 20 3f 66 6f 6e 74 6e 61 6d 65 3f 20 24 7b  at ?fontname? ${
1add0 66 6f 6e 74 6f 70 74 73 7d 5d 5d 0a 09 09 09 09  fontopts}]].....
1ade0 7d 0a 09 09 09 09 66 61 6d 69 6c 69 65 73 20 7b  }.....families {
1adf0 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
1ae00 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
1ae10 7b 74 65 78 74 7d 20 2d 64 69 73 70 6c 61 79 6f  {text} -displayo
1ae20 66 5d 0a 09 09 09 09 7d 0a 09 09 09 09 6e 61 6d  f].....}.....nam
1ae30 65 73 20 7b 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  es {}....}...}..
1ae40 09 33 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  .3 {....switch -
1ae50 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 61  - ${sub} {.....a
1ae60 63 74 75 61 6c 20 7b 0a 09 09 09 09 09 72 65 74  ctual {......ret
1ae70 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
1ae80 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a  mList ${text} \.
1ae90 09 09 09 09 09 5b 63 6f 6e 63 61 74 20 2d 64 69  .....[concat -di
1aea0 73 70 6c 61 79 6f 66 20 24 7b 66 6f 6e 74 6f 70  splayof ${fontop
1aeb0 74 73 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09  ts}]].....}.....
1aec0 63 6f 6e 66 69 67 75 72 65 20 2d 0a 09 09 09 09  configure -.....
1aed0 63 72 65 61 74 65 20 7b 0a 09 09 09 09 09 72 65  create {......re
1aee0 74 75 72 6e 20 5b 46 6f 6e 74 43 6f 6e 66 69 67  turn [FontConfig
1aef0 75 72 65 20 24 7b 74 65 78 74 7d 20 24 7b 6c 69  ure ${text} ${li
1af00 6e 65 7d 20 24 7b 70 72 65 76 7d 5d 0a 09 09 09  ne} ${prev}]....
1af10 09 7d 0a 09 09 09 09 64 65 6c 65 74 65 20 7b 0a  .}.....delete {.
1af20 09 09 09 09 09 73 65 74 20 6e 61 6d 65 73 20 5b  .....set names [
1af30 66 6f 6e 74 20 6e 61 6d 65 73 5d 0a 09 09 09 09  font names].....
1af40 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e  .if {[string len
1af50 67 74 68 20 24 7b 6e 61 6d 65 73 7d 5d 7d 20 7b  gth ${names}]} {
1af60 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  .......return [C
1af70 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
1af80 24 7b 74 65 78 74 7d 20 24 7b 6e 61 6d 65 73 7d  ${text} ${names}
1af90 5d 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a  ]......} else {.
1afa0 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  ......return [Di
1afb0 73 70 6c 61 79 48 69 6e 74 73 20 3c 66 6f 6e 74  splayHints <font
1afc0 6e 61 6d 65 3e 5d 0a 09 09 09 09 09 7d 0a 09 09  name>]......}...
1afd0 09 09 7d 0a 09 09 09 09 66 61 6d 69 6c 69 65 73  ..}.....families
1afe0 20 7b 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d   {......switch -
1aff0 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09  - ${prev} {.....
1b000 09 09 2d 64 69 73 70 6c 61 79 6f 66 20 7b 0a 09  ..-displayof {..
1b010 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
1b020 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
1b030 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 09 09  {text} \........
1b040 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
1b050 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 09 09  ${text}]].......
1b060 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09  }......}.....}..
1b070 09 09 09 6d 65 61 73 75 72 65 20 7b 0a 09 09 09  ...measure {....
1b080 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
1b090 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
1b0a0 74 7d 20 7b 2d 64 69 73 70 6c 61 79 6f 66 20 3c  t} {-displayof <
1b0b0 74 65 78 74 3e 7d 5d 0a 09 09 09 09 7d 0a 09 09  text>}].....}...
1b0c0 09 09 6d 65 74 72 69 63 73 20 7b 0a 09 09 09 09  ..metrics {.....
1b0d0 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
1b0e0 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
1b0f0 7d 20 5c 0a 09 09 09 09 09 5b 63 6f 6e 63 61 74  } \......[concat
1b100 20 2d 64 69 73 70 6c 61 79 6f 66 20 24 7b 66 6f   -displayof ${fo
1b110 6e 74 6d 65 74 72 69 63 73 7d 5d 5d 0a 09 09 09  ntmetrics}]]....
1b120 09 7d 0a 09 09 09 09 6e 61 6d 65 73 20 7b 7d 0a  .}.....names {}.
1b130 09 09 09 7d 0a 09 09 7d 0a 09 09 34 20 7b 0a 09  ...}...}...4 {..
1b140 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75  ..switch -- ${su
1b150 62 7d 20 7b 0a 09 09 09 09 61 63 74 75 61 6c 20  b} {.....actual 
1b160 7b 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d  {......switch --
1b170 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09 09   ${prev} {......
1b180 09 2d 64 69 73 70 6c 61 79 6f 66 20 7b 0a 09 09  .-displayof {...
1b190 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
1b1a0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
1b1b0 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 09 09 5b  text} \........[
1b1c0 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
1b1d0 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 09 09 7d  {text}]].......}
1b1e0 0a 09 09 09 09 09 09 64 65 66 61 75 6c 74 20 7b  .......default {
1b1f0 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b  ........return [
1b200 46 6f 6e 74 43 6f 6e 66 69 67 75 72 65 20 24 7b  FontConfigure ${
1b210 74 65 78 74 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b  text} ${line} ${
1b220 70 72 65 76 7d 5d 0a 09 09 09 09 09 09 7d 0a 09  prev}].......}..
1b230 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09  ....}.....}.....
1b240 63 6f 6e 66 69 67 75 72 65 20 2d 0a 09 09 09 09  configure -.....
1b250 63 72 65 61 74 65 20 7b 0a 09 09 09 09 09 72 65  create {......re
1b260 74 75 72 6e 20 5b 46 6f 6e 74 43 6f 6e 66 69 67  turn [FontConfig
1b270 75 72 65 20 24 7b 74 65 78 74 7d 20 24 7b 6c 69  ure ${text} ${li
1b280 6e 65 7d 20 24 7b 70 72 65 76 7d 5d 0a 09 09 09  ne} ${prev}]....
1b290 09 7d 0a 09 09 09 09 64 65 6c 65 74 65 20 7b 0a  .}.....delete {.
1b2a0 09 09 09 09 09 73 65 74 20 6e 61 6d 65 73 20 5b  .....set names [
1b2b0 66 6f 6e 74 20 6e 61 6d 65 73 5d 0a 09 09 09 09  font names].....
1b2c0 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e  .if {[string len
1b2d0 67 74 68 20 24 7b 6e 61 6d 65 73 7d 5d 7d 20 7b  gth ${names}]} {
1b2e0 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  .......return [C
1b2f0 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
1b300 24 7b 74 65 78 74 7d 20 24 7b 6e 61 6d 65 73 7d  ${text} ${names}
1b310 5d 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a  ]......} else {.
1b320 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  ......return [Di
1b330 73 70 6c 61 79 48 69 6e 74 73 20 3c 66 6f 6e 74  splayHints <font
1b340 6e 61 6d 65 3e 5d 0a 09 09 09 09 09 7d 0a 09 09  name>]......}...
1b350 09 09 7d 0a 09 09 09 09 66 61 6d 69 6c 69 65 73  ..}.....families
1b360 20 7b 7d 0a 09 09 09 09 6d 65 61 73 75 72 65 20   {}.....measure 
1b370 7b 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d  {......switch --
1b380 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09 09   ${prev} {......
1b390 09 2d 64 69 73 70 6c 61 79 6f 66 20 7b 0a 09 09  .-displayof {...
1b3a0 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
1b3b0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
1b3c0 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 09 09 5b  text} \........[
1b3d0 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
1b3e0 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 09 09 7d  {text}]].......}
1b3f0 0a 09 09 09 09 09 09 64 65 66 61 75 6c 74 20 7b  .......default {
1b400 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b  ........return [
1b410 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 65  DisplayHints <te
1b420 78 74 3e 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09  xt>].......}....
1b430 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09 6d 65  ..}.....}.....me
1b440 74 72 69 63 73 20 7b 0a 09 09 09 09 09 73 77 69  trics {......swi
1b450 74 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b  tch -- ${prev} {
1b460 0a 09 09 09 09 09 09 2d 64 69 73 70 6c 61 79 6f  .......-displayo
1b470 66 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72  f {........retur
1b480 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
1b490 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09  ist ${text} \...
1b4a0 09 09 09 09 09 5b 57 69 64 67 65 74 43 68 69 6c  .....[WidgetChil
1b4b0 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09  dren ${text}]]..
1b4c0 09 09 09 09 09 7d 0a 09 09 09 09 09 09 64 65 66  .....}.......def
1b4d0 61 75 6c 74 20 7b 0a 09 09 09 09 09 09 09 72 65  ault {........re
1b4e0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
1b4f0 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24  omList ${text} $
1b500 7b 66 6f 6e 74 6d 65 74 72 69 63 73 7d 5d 0a 09  {fontmetrics}]..
1b510 09 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a 09 09  .....}......}...
1b520 09 09 7d 0a 09 09 09 09 6e 61 6d 65 73 20 7b 7d  ..}.....names {}
1b530 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 64 65 66 61  ....}...}...defa
1b540 75 6c 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ult {....switch 
1b550 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09  -- ${sub} {.....
1b560 61 63 74 75 61 6c 20 2d 0a 09 09 09 09 63 6f 6e  actual -.....con
1b570 66 69 67 75 72 65 20 2d 0a 09 09 09 09 63 72 65  figure -.....cre
1b580 61 74 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72  ate {......retur
1b590 6e 20 5b 46 6f 6e 74 43 6f 6e 66 69 67 75 72 65  n [FontConfigure
1b5a0 20 24 7b 74 65 78 74 7d 20 24 7b 6c 69 6e 65 7d   ${text} ${line}
1b5b0 20 24 7b 70 72 65 76 7d 5d 0a 09 09 09 09 7d 0a   ${prev}].....}.
1b5c0 09 09 09 09 64 65 6c 65 74 65 20 7b 0a 09 09 09  ....delete {....
1b5d0 09 09 73 65 74 20 6e 61 6d 65 73 20 5b 66 6f 6e  ..set names [fon
1b5e0 74 20 6e 61 6d 65 73 5d 0a 09 09 09 09 09 69 66  t names]......if
1b5f0 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
1b600 20 24 7b 6e 61 6d 65 73 7d 5d 7d 20 7b 0a 09 09   ${names}]} {...
1b610 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
1b620 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
1b630 65 78 74 7d 20 24 7b 6e 61 6d 65 73 7d 5d 0a 09  ext} ${names}]..
1b640 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09  ....} else {....
1b650 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  ...return [Displ
1b660 61 79 48 69 6e 74 73 20 3c 66 6f 6e 74 6e 61 6d  ayHints <fontnam
1b670 65 3e 5d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d  e>]......}.....}
1b680 0a 09 09 09 09 66 61 6d 69 6c 69 65 73 20 7b 7d  .....families {}
1b690 0a 09 09 09 09 6d 65 61 73 75 72 65 20 7b 0a 09  .....measure {..
1b6a0 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70  ....return [Disp
1b6b0 6c 61 79 48 69 6e 74 73 20 3c 74 65 78 74 3e 5d  layHints <text>]
1b6c0 0a 09 09 09 09 7d 0a 09 09 09 09 6d 65 74 72 69  .....}.....metri
1b6d0 63 73 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  cs {......return
1b6e0 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
1b6f0 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 66 6f 6e  st ${text} ${fon
1b700 74 6d 65 74 72 69 63 73 7d 5d 0a 09 09 09 09 7d  tmetrics}].....}
1b710 0a 09 09 09 09 6e 61 6d 65 73 20 7b 7d 0a 09 09  .....names {}...
1b720 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72  .}...}..}..retur
1b730 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d  n "".}..proc com
1b740 70 6c 65 74 65 28 66 72 61 6d 65 29 20 7b 74 65  plete(frame) {te
1b750 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
1b760 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77  e pos mod} {..sw
1b770 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
1b780 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 45  ...1 { return [E
1b790 76 65 6e 74 75 61 6c 6c 79 49 6e 73 65 72 74 4c  ventuallyInsertL
1b7a0 65 61 64 69 6e 67 44 6f 74 20 24 7b 74 65 78 74  eadingDot ${text
1b7b0 7d 20 3c 70 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a  } <pathName>] }.
1b7c0 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 72  ..default {....r
1b7d0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 57  eturn [CompleteW
1b7e0 69 64 67 65 74 43 6f 6e 66 69 67 75 72 61 74 69  idgetConfigurati
1b7f0 6f 6e 73 20 24 7b 74 65 78 74 7d 20 24 7b 73 74  ons ${text} ${st
1b800 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09  art} ${line} {..
1b810 09 09 09 2d 62 6f 72 64 65 72 77 69 64 74 68 20  ...-borderwidth 
1b820 2d 63 75 72 73 6f 72 20 2d 68 69 67 68 6c 69 67  -cursor -highlig
1b830 68 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d 68 69  htbackground -hi
1b840 67 68 6c 69 67 68 74 63 6f 6c 6f 72 0a 09 09 09  ghlightcolor....
1b850 09 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b  .-highlightthick
1b860 6e 65 73 73 20 2d 72 65 6c 69 65 66 20 2d 74 61  ness -relief -ta
1b870 6b 65 66 6f 63 75 73 20 2d 62 61 63 6b 67 72 6f  kefocus -backgro
1b880 75 6e 64 0a 09 09 09 09 2d 63 6c 61 73 73 20 2d  und.....-class -
1b890 63 6f 6c 6f 72 6d 61 70 20 2d 63 6f 6e 74 61 69  colormap -contai
1b8a0 6e 65 72 20 2d 68 65 69 67 68 74 20 2d 76 69 73  ner -height -vis
1b8b0 75 61 6c 20 2d 77 69 64 74 68 0a 09 09 09 7d 5d  ual -width....}]
1b8c0 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  ...}..}..return 
1b8d0 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  "".}..proc compl
1b8e0 65 74 65 28 67 72 61 62 29 20 7b 74 65 78 74 20  ete(grab) {text 
1b8f0 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
1b900 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63  os mod} {..switc
1b910 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09  h -- ${pos} {...
1b920 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43  1 {....return [C
1b930 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
1b940 24 7b 74 65 78 74 7d 20 5b 63 6f 6e 63 61 74 20  ${text} [concat 
1b950 5c 0a 09 09 09 63 75 72 72 65 6e 74 20 72 65 6c  \....current rel
1b960 65 61 73 65 20 73 65 74 20 73 74 61 74 75 73 20  ease set status 
1b970 2d 67 6c 6f 62 61 6c 20 5b 57 69 64 67 65 74 43  -global [WidgetC
1b980 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d  hildren ${text}]
1b990 5d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09  ]]...}...2 {....
1b9a0 73 77 69 74 63 68 20 2d 2d 20 5b 4c 69 6e 64 65  switch -- [Linde
1b9b0 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 20 7b 0a 09  x ${line} 1] {..
1b9c0 09 09 09 2d 67 6c 6f 62 61 6c 20 2d 0a 09 09 09  ...-global -....
1b9d0 09 63 75 72 72 65 6e 74 20 2d 0a 09 09 09 09 72  .current -.....r
1b9e0 65 6c 65 61 73 65 20 2d 0a 09 09 09 09 73 74 61  elease -.....sta
1b9f0 74 75 73 20 7b 0a 09 09 09 09 09 72 65 74 75 72  tus {......retur
1ba00 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
1ba10 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 57 69 64  ist ${text} [Wid
1ba20 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65  getChildren ${te
1ba30 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09  xt}]].....}.....
1ba40 73 65 74 20 7b 0a 09 09 09 09 09 72 65 74 75 72  set {......retur
1ba50 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
1ba60 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09  ist ${text} \...
1ba70 09 09 09 5b 63 6f 6e 63 61 74 20 2d 67 6c 6f 62  ...[concat -glob
1ba80 61 6c 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72  al [WidgetChildr
1ba90 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 5d 0a 09 09  en ${text}]]]...
1baa0 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 33  ..}....}...}...3
1bab0 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
1bac0 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20  [Lindex ${line} 
1bad0 31 5d 20 7b 0a 09 09 09 09 73 65 74 20 7b 0a 09  1] {.....set {..
1bae0 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20 5b 50  ....switch -- [P
1baf0 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74  reviousWord ${st
1bb00 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 20 7b 0a  art} ${line}] {.
1bb10 09 09 09 09 09 09 2d 67 6c 6f 62 61 6c 20 7b 0a  ......-global {.
1bb20 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  .......return [C
1bb30 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
1bb40 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 09  ${text} \.......
1bb50 09 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e  .[WidgetChildren
1bb60 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 09   ${text}]]......
1bb70 09 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a  .}......}.....}.
1bb80 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74  ...}...}..}..ret
1bb90 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 47  urn "".}..proc G
1bba0 72 69 64 43 6f 6e 66 69 67 20 7b 74 65 78 74 20  ridConfig {text 
1bbb0 73 74 61 72 74 20 6c 69 6e 65 20 70 72 65 76 7d  start line prev}
1bbc0 20 7b 0a 09 73 65 74 20 6f 70 74 73 20 7b 0a 09   {..set opts {..
1bbd0 09 2d 63 6f 6c 75 6d 6e 20 2d 63 6f 6c 75 6d 6e  .-column -column
1bbe0 73 70 61 6e 20 2d 69 6e 20 2d 69 70 61 64 78 20  span -in -ipadx 
1bbf0 2d 69 70 61 64 79 0a 09 09 2d 70 61 64 78 20 2d  -ipady...-padx -
1bc00 70 61 64 79 20 2d 72 6f 77 20 2d 72 6f 77 73 70  pady -row -rowsp
1bc10 61 6e 20 2d 73 74 69 63 6b 79 0a 09 7d 0a 09 69  an -sticky..}..i
1bc20 66 20 7b 2d 31 20 3d 3d 20 5b 73 74 72 69 6e 67  f {-1 == [string
1bc30 20 66 69 72 73 74 20 22 2d 22 20 24 7b 6c 69 6e   first "-" ${lin
1bc40 65 7d 5d 7d 20 7b 0a 09 09 73 65 74 20 73 6c 61  e}]} {...set sla
1bc50 76 65 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72  ve [WidgetChildr
1bc60 65 6e 20 24 7b 74 65 78 74 7d 5d 0a 09 7d 20 65  en ${text}]..} e
1bc70 6c 73 65 20 7b 0a 09 09 73 65 74 20 73 6c 61 76  lse {...set slav
1bc80 65 20 22 22 0a 09 7d 0a 09 73 77 69 74 63 68 20  e ""..}..switch 
1bc90 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09 2d  -- ${prev} {...-
1bca0 63 6f 6c 75 6d 6e 20 2d 0a 09 09 2d 63 6f 6c 75  column -...-colu
1bcb0 6d 6e 73 70 61 6e 20 2d 0a 09 09 2d 72 6f 77 20  mnspan -...-row 
1bcc0 2d 0a 09 09 2d 72 6f 77 73 70 61 6e 20 7b 20 72  -...-rowspan { r
1bcd0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
1bce0 6e 74 73 20 3c 6e 3e 5d 20 7d 0a 0a 09 09 2d 69  nts <n>] }....-i
1bcf0 70 61 64 78 20 2d 0a 09 09 2d 69 70 61 64 79 20  padx -...-ipady 
1bd00 2d 0a 09 09 2d 70 61 64 78 20 2d 0a 09 09 2d 70  -...-padx -...-p
1bd10 61 64 79 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ady { return [Di
1bd20 73 70 6c 61 79 48 69 6e 74 73 20 3c 61 6d 6f 75  splayHints <amou
1bd30 6e 74 3e 5d 20 7d 0a 0a 09 09 2d 69 6e 20 7b 20  nt>] }....-in { 
1bd40 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
1bd50 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
1bd60 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e   [WidgetChildren
1bd70 20 24 7b 74 65 78 74 7d 5d 5d 20 7d 0a 09 09 2d   ${text}]] }...-
1bd80 73 74 69 63 6b 79 20 7b 0a 09 09 09 73 65 74 20  sticky {....set 
1bd90 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73 57 6f  prev [PreviousWo
1bda0 72 64 4f 66 49 6e 63 6f 6d 70 6c 65 74 65 50 6f  rdOfIncompletePo
1bdb0 73 69 74 69 6f 6e 20 24 7b 73 74 61 72 74 7d 20  sition ${start} 
1bdc0 24 7b 6c 69 6e 65 7d 5d 0a 09 09 09 72 65 74 75  ${line}]....retu
1bdd0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 4c 69 73 74  rn [CompleteList
1bde0 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
1bdf0 20 5c 0a 09 09 09 5b 73 74 72 69 6e 67 20 74 72   \....[string tr
1be00 69 6d 6c 65 66 74 20 5b 49 6e 63 6f 6d 70 6c 65  imleft [Incomple
1be10 74 65 4c 69 73 74 52 65 6d 61 69 6e 64 65 72 20  teListRemainder 
1be20 24 7b 6c 69 6e 65 7d 5d 5d 20 5c 0a 09 09 09 7b  ${line}]] \....{
1be30 6e 20 65 20 73 20 77 7d 20 5c 7b 20 7b 20 7d 20  n e s w} \{ { } 
1be40 5c 7d 5d 0a 09 09 7d 0a 0a 0a 09 09 64 65 66 61  \}]...}.....defa
1be50 75 6c 74 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  ult {....return 
1be60 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
1be70 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 5b  t ${text} \....[
1be80 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e  RemoveUsedOption
1be90 73 20 24 7b 6c 69 6e 65 7d 20 5b 63 6f 6e 63 61  s ${line} [conca
1bea0 74 20 24 7b 6f 70 74 73 7d 20 24 7b 73 6c 61 76  t ${opts} ${slav
1beb0 65 7d 5d 5d 5d 0a 09 09 7d 0a 09 7d 0a 7d 0a 20  e}]]]...}..}.}. 
1bec0 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 67  .proc complete(g
1bed0 72 69 64 29 20 7b 74 65 78 74 20 73 74 61 72 74  rid) {text start
1bee0 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
1bef0 64 7d 20 7b 0a 09 73 65 74 20 73 75 62 20 5b 4c  d} {..set sub [L
1bf00 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d  index ${line} 1]
1bf10 0a 09 73 65 74 20 70 72 65 76 20 5b 50 72 65 76  ..set prev [Prev
1bf20 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74  iousWord ${start
1bf30 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 73 77 69 74  } ${line}]..swit
1bf40 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09  ch -- ${pos} {..
1bf50 09 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b  .1 {....return [
1bf60 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
1bf70 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 5b 63   ${text} \....[c
1bf80 6f 6e 63 61 74 20 5b 57 69 64 67 65 74 43 68 69  oncat [WidgetChi
1bf90 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 20 7b  ldren ${text}] {
1bfa0 0a 09 09 09 09 62 62 6f 78 20 63 6f 6c 75 6d 6e  .....bbox column
1bfb0 63 6f 6e 66 69 67 75 72 65 20 63 6f 6e 66 69 67  configure config
1bfc0 75 72 65 20 66 6f 72 67 65 74 0a 09 09 09 09 69  ure forget.....i
1bfd0 6e 66 6f 20 6c 6f 63 61 74 69 6f 6e 20 70 72 6f  nfo location pro
1bfe0 70 61 67 61 74 65 20 72 6f 77 63 6f 6e 66 69 67  pagate rowconfig
1bff0 75 72 65 0a 09 09 09 09 72 65 6d 6f 76 65 20 73  ure.....remove s
1c000 69 7a 65 20 73 6c 61 76 65 73 0a 09 09 09 7d 5d  ize slaves....}]
1c010 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73  ]...}...2 {....s
1c020 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20  witch -- ${sub} 
1c030 7b 0a 09 09 09 09 62 62 6f 78 20 2d 0a 09 09 09  {.....bbox -....
1c040 09 63 6f 6c 75 6d 6e 63 6f 6e 66 69 67 75 72 65  .columnconfigure
1c050 20 2d 0a 09 09 09 09 63 6f 6e 66 69 67 75 72 65   -.....configure
1c060 20 2d 0a 09 09 09 09 66 6f 72 67 65 74 20 2d 0a   -.....forget -.
1c070 09 09 09 09 69 6e 66 6f 20 2d 0a 09 09 09 09 6c  ....info -.....l
1c080 6f 63 61 74 69 6f 6e 20 2d 0a 09 09 09 09 70 72  ocation -.....pr
1c090 6f 70 61 67 61 74 65 20 2d 0a 09 09 09 09 72 6f  opagate -.....ro
1c0a0 77 63 6f 6e 66 69 67 75 72 65 20 2d 0a 09 09 09  wconfigure -....
1c0b0 09 72 65 6d 6f 76 65 20 2d 0a 09 09 09 09 73 69  .remove -.....si
1c0c0 7a 65 20 2d 0a 09 09 09 09 73 6c 61 76 65 73 20  ze -.....slaves 
1c0d0 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  {......return [C
1c0e0 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
1c0f0 24 7b 74 65 78 74 7d 20 5b 57 69 64 67 65 74 43  ${text} [WidgetC
1c100 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d  hildren ${text}]
1c110 5d 0a 09 09 09 09 7d 0a 09 09 09 09 64 65 66 61  ].....}.....defa
1c120 75 6c 74 20 7b 0a 09 09 09 09 09 72 65 74 75 72  ult {......retur
1c130 6e 20 5b 47 72 69 64 43 6f 6e 66 69 67 20 24 7b  n [GridConfig ${
1c140 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24  text} ${start} $
1c150 7b 6c 69 6e 65 7d 20 24 7b 70 72 65 76 7d 5d 0a  {line} ${prev}].
1c160 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  ....}....}...}..
1c170 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 73 77  .default {....sw
1c180 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b  itch -- ${sub} {
1c190 0a 09 09 09 09 62 62 6f 78 20 7b 0a 09 09 09 09  .....bbox {.....
1c1a0 09 73 77 69 74 63 68 20 5b 65 78 70 72 20 24 7b  .switch [expr ${
1c1b0 70 6f 73 7d 20 25 20 32 5d 20 7b 0a 09 09 09 09  pos} % 2] {.....
1c1c0 09 09 30 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..0 { return [Di
1c1d0 73 70 6c 61 79 48 69 6e 74 73 20 3f 72 6f 77 3f  splayHints ?row?
1c1e0 5d 20 7d 0a 09 09 09 09 09 09 31 20 7b 20 72 65  ] }.......1 { re
1c1f0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
1c200 74 73 20 3f 63 6f 6c 75 6d 6e 3f 5d 20 7d 0a 09  ts ?column?] }..
1c210 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09  ....}.....}.....
1c220 72 6f 77 63 6f 6e 66 69 67 75 72 65 20 2d 0a 09  rowconfigure -..
1c230 09 09 09 63 6f 6c 75 6d 6e 63 6f 6e 66 69 67 75  ...columnconfigu
1c240 72 65 20 7b 0a 09 09 09 09 09 73 77 69 74 63 68  re {......switch
1c250 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09   -- ${pos} {....
1c260 09 09 09 33 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...3 { return [D
1c270 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 69 6e 64  isplayHints <ind
1c280 65 78 3e 5d 20 7d 0a 09 09 09 09 09 09 64 65 66  ex>] }.......def
1c290 61 75 6c 74 20 7b 0a 09 09 09 09 09 09 09 73 77  ault {........sw
1c2a0 69 74 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20  itch -- ${prev} 
1c2b0 7b 0a 09 09 09 09 09 09 09 09 2d 6d 69 6e 73 69  {.........-minsi
1c2c0 7a 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  ze { return [Dis
1c2d0 70 6c 61 79 48 69 6e 74 73 20 3c 6d 69 6e 73 69  playHints <minsi
1c2e0 7a 65 3e 5d 20 7d 0a 09 09 09 09 09 09 09 09 2d  ze>] }.........-
1c2f0 77 65 69 67 68 74 20 7b 20 72 65 74 75 72 6e 20  weight { return 
1c300 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 77  [DisplayHints <w
1c310 65 69 67 68 74 3e 5d 20 7d 0a 09 09 09 09 09 09  eight>] }.......
1c320 09 09 2d 70 61 64 20 7b 20 72 65 74 75 72 6e 20  ..-pad { return 
1c330 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 70  [DisplayHints <p
1c340 61 64 3e 5d 20 7d 0a 09 09 09 09 09 09 09 09 64  ad>] }.........d
1c350 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 09 09  efault {........
1c360 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
1c370 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
1c380 74 7d 20 5c 0a 09 09 09 09 09 09 09 09 09 5b 52  t} \..........[R
1c390 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
1c3a0 20 24 7b 6c 69 6e 65 7d 20 20 7b 0a 09 09 09 09   ${line}  {.....
1c3b0 09 09 09 09 09 09 2d 6d 69 6e 73 69 7a 65 20 2d  ......-minsize -
1c3c0 77 65 69 67 68 74 20 2d 70 61 64 0a 09 09 09 09  weight -pad.....
1c3d0 09 09 09 09 09 7d 5d 5d 0a 09 09 09 09 09 09 09  .....}]]........
1c3e0 09 7d 0a 09 09 09 09 09 09 09 7d 0a 09 09 09 09  .}........}.....
1c3f0 09 09 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d  ..}......}.....}
1c400 0a 09 09 09 09 63 6f 6e 66 69 67 75 72 65 20 7b  .....configure {
1c410 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 47 72  ......return [Gr
1c420 69 64 43 6f 6e 66 69 67 20 24 7b 74 65 78 74 7d  idConfig ${text}
1c430 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65   ${start} ${line
1c440 7d 20 24 7b 70 72 65 76 7d 5d 0a 09 09 09 09 7d  } ${prev}].....}
1c450 0a 09 09 09 09 66 6f 72 67 65 74 20 2d 0a 09 09  .....forget -...
1c460 09 09 72 65 6d 6f 76 65 20 7b 0a 09 09 09 09 09  ..remove {......
1c470 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
1c480 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
1c490 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e   [WidgetChildren
1c4a0 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 7d   ${text}]].....}
1c4b0 0a 09 09 09 09 69 6e 66 6f 20 7b 7d 0a 09 09 09  .....info {}....
1c4c0 09 6c 6f 63 61 74 69 6f 6e 20 7b 0a 09 09 09 09  .location {.....
1c4d0 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73  .switch -- ${pos
1c4e0 7d 20 7b 0a 09 09 09 09 09 09 33 20 7b 20 72 65  } {.......3 { re
1c4f0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
1c500 74 73 20 3c 78 3e 5d 20 7d 0a 09 09 09 09 09 09  ts <x>] }.......
1c510 34 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  4 { return [Disp
1c520 6c 61 79 48 69 6e 74 73 20 3c 79 3e 5d 20 7d 0a  layHints <y>] }.
1c530 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09  .....}.....}....
1c540 09 70 72 6f 70 61 67 61 74 65 20 7b 0a 09 09 09  .propagate {....
1c550 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
1c560 73 7d 20 7b 0a 09 09 09 09 09 09 33 20 7b 20 72  s} {.......3 { r
1c570 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 42  eturn [CompleteB
1c580 6f 6f 6c 65 61 6e 20 24 7b 74 65 78 74 7d 5d 20  oolean ${text}] 
1c590 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09  }......}.....}..
1c5a0 09 09 09 73 69 7a 65 20 7b 7d 0a 09 09 09 09 73  ...size {}.....s
1c5b0 6c 61 76 65 73 20 7b 0a 09 09 09 09 09 73 77 69  laves {......swi
1c5c0 74 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b  tch -- ${prev} {
1c5d0 0a 09 09 09 09 09 09 2d 72 6f 77 20 7b 20 72 65  .......-row { re
1c5e0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
1c5f0 74 73 20 3c 72 6f 77 3e 5d 20 7d 0a 09 09 09 09  ts <row>] }.....
1c600 09 09 2d 63 6f 6c 75 6d 6e 20 7b 20 72 65 74 75  ..-column { retu
1c610 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
1c620 20 3c 63 6f 6c 75 6d 6e 3e 5d 20 7d 0a 09 09 09   <column>] }....
1c630 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09  ...default {....
1c640 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
1c650 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
1c660 65 78 74 7d 20 5c 0a 09 09 09 09 09 09 09 5b 52  ext} \........[R
1c670 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
1c680 20 24 7b 6c 69 6e 65 7d 20 20 7b 20 2d 72 6f 77   ${line}  { -row
1c690 20 2d 63 6f 6c 75 6d 6e 20 7d 5d 5d 0a 09 09 09   -column }]]....
1c6a0 09 09 09 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09  ...}......}.....
1c6b0 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a  }.....default {.
1c6c0 09 09 09 09 09 72 65 74 75 72 6e 20 5b 47 72 69  .....return [Gri
1c6d0 64 43 6f 6e 66 69 67 20 24 7b 74 65 78 74 7d 20  dConfig ${text} 
1c6e0 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d  ${start} ${line}
1c6f0 20 24 7b 70 72 65 76 7d 5d 0a 09 09 09 09 7d 0a   ${prev}].....}.
1c700 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74  ...}...}..}..ret
1c710 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63  urn "".}..proc c
1c720 6f 6d 70 6c 65 74 65 28 69 6d 61 67 65 29 20 7b  omplete(image) {
1c730 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
1c740 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 73  ine pos mod} {.s
1c750 65 74 20 73 75 62 20 5b 4c 69 6e 64 65 78 20 24  et sub [Lindex $
1c760 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73 77 69 74 63  {line} 1]..switc
1c770 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09  h -- ${pos} {...
1c780 31 20 7b 20 72 65 74 75 72 6e 20 5b 54 72 79 53  1 { return [TryS
1c790 75 62 43 6d 64 73 20 24 7b 74 65 78 74 7d 20 69  ubCmds ${text} i
1c7a0 6d 61 67 65 5d 20 7d 0a 09 09 32 20 7b 0a 09 09  mage] }...2 {...
1c7b0 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62  .switch -- ${sub
1c7c0 7d 20 7b 0a 09 09 09 09 63 72 65 61 74 65 20 7b  } {.....create {
1c7d0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
1c7e0 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
1c7f0 7d 20 5b 69 6d 61 67 65 20 74 79 70 65 73 5d 5d  } [image types]]
1c800 20 7d 0a 09 09 09 09 64 65 6c 65 74 65 20 2d 0a   }.....delete -.
1c810 09 09 09 09 68 65 69 67 68 74 20 2d 0a 09 09 09  ....height -....
1c820 09 74 79 70 65 20 2d 0a 09 09 09 09 77 69 64 74  .type -.....widt
1c830 68 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  h { return [Comp
1c840 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
1c850 65 78 74 7d 20 5b 69 6d 61 67 65 20 6e 61 6d 65  ext} [image name
1c860 73 5d 5d 20 7d 0a 09 09 09 09 6e 61 6d 65 73 20  s]] }.....names 
1c870 7b 7d 0a 09 09 09 09 74 79 70 65 73 20 7b 7d 0a  {}.....types {}.
1c880 09 09 09 7d 0a 09 09 7d 0a 09 09 33 20 7b 0a 09  ...}...}...3 {..
1c890 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75  ..switch -- ${su
1c8a0 62 7d 20 7b 0a 09 09 09 09 63 72 65 61 74 65 20  b} {.....create 
1c8b0 7b 0a 09 09 09 09 09 73 65 74 20 74 79 70 65 20  {......set type 
1c8c0 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20  [Lindex ${line} 
1c8d0 32 5d 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d  2]......switch -
1c8e0 2d 20 24 7b 74 79 70 65 7d 20 7b 0a 09 09 09 09  - ${type} {.....
1c8f0 09 09 62 69 74 6d 61 70 20 7b 0a 09 09 09 09 09  ..bitmap {......
1c900 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
1c910 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
1c920 74 7d 20 7b 0a 09 09 09 09 09 09 09 09 3f 6e 61  t} {.........?na
1c930 6d 65 3f 20 2d 62 61 63 6b 67 72 6f 75 6e 64 20  me? -background 
1c940 2d 64 61 74 61 20 2d 66 69 6c 65 0a 09 09 09 09  -data -file.....
1c950 09 09 09 09 2d 66 6f 72 65 67 72 6f 75 6e 64 20  ....-foreground 
1c960 2d 6d 61 73 6b 64 61 74 61 20 2d 6d 61 73 6b 66  -maskdata -maskf
1c970 69 6c 65 0a 09 09 09 09 09 09 09 7d 5d 0a 09 09  ile........}]...
1c980 09 09 09 09 7d 0a 09 09 09 09 09 09 70 68 6f 74  ....}.......phot
1c990 6f 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72  o {........retur
1c9a0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
1c9b0 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09  ist ${text} {...
1c9c0 09 09 09 09 09 09 3f 6e 61 6d 65 3f 20 2d 64 61  ......?name? -da
1c9d0 74 61 20 2d 66 6f 72 6d 61 74 20 2d 66 69 6c 65  ta -format -file
1c9e0 20 2d 67 61 6d 6d 61 0a 09 09 09 09 09 09 09 09   -gamma.........
1c9f0 2d 68 65 69 67 68 74 20 2d 70 61 6c 65 74 74 65  -height -palette
1ca00 20 2d 77 69 64 74 68 0a 09 09 09 09 09 09 09 7d   -width........}
1ca10 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 09  ].......}.......
1ca20 64 65 66 61 75 6c 74 20 7b 7d 0a 09 09 09 09 09  default {}......
1ca30 7d 0a 09 09 09 09 7d 0a 09 09 09 09 64 65 6c 65  }.....}.....dele
1ca40 74 65 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d  te { return [Com
1ca50 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
1ca60 74 65 78 74 7d 20 5b 69 6d 61 67 65 20 6e 61 6d  text} [image nam
1ca70 65 73 5d 5d 20 7d 0a 09 09 09 09 64 65 66 61 75  es]] }.....defau
1ca80 6c 74 20 7b 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  lt {}....}...}..
1ca90 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 73 77  .default {....sw
1caa0 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b  itch -- ${sub} {
1cab0 0a 09 09 09 09 63 72 65 61 74 65 20 7b 0a 09 09  .....create {...
1cac0 09 09 09 73 65 74 20 74 79 70 65 20 5b 4c 69 6e  ...set type [Lin
1cad0 64 65 78 20 24 7b 6c 69 6e 65 7d 20 32 5d 0a 09  dex ${line} 2]..
1cae0 09 09 09 09 73 65 74 20 70 72 65 76 20 5b 50 72  ....set prev [Pr
1caf0 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61  eviousWord ${sta
1cb00 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09 09  rt} ${line}]....
1cb10 09 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20  ..# puts stderr 
1cb20 70 72 65 76 3d 24 70 72 65 76 0a 09 09 09 09 09  prev=$prev......
1cb30 73 77 69 74 63 68 20 2d 2d 20 24 7b 74 79 70 65  switch -- ${type
1cb40 7d 20 7b 0a 09 09 09 09 09 09 62 69 74 6d 61 70  } {.......bitmap
1cb50 20 7b 0a 09 09 09 09 09 09 09 73 77 69 74 63 68   {........switch
1cb60 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09   -- ${prev} {...
1cb70 09 09 09 09 09 09 2d 62 61 63 6b 67 72 6f 75 6e  ......-backgroun
1cb80 64 20 2d 0a 09 09 09 09 09 09 09 09 2d 66 6f 72  d -.........-for
1cb90 65 67 72 6f 75 6e 64 20 7b 20 72 65 74 75 72 6e  eground { return
1cba0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
1cbb0 63 6f 6c 6f 72 3e 5d 20 7d 0a 09 09 09 09 09 09  color>] }.......
1cbc0 09 09 2d 64 61 74 61 20 2d 0a 09 09 09 09 09 09  ..-data -.......
1cbd0 09 09 2d 6d 61 73 6b 64 61 74 61 20 7b 20 72 65  ..-maskdata { re
1cbe0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
1cbf0 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 09  ts <string>] }..
1cc00 09 09 09 09 09 09 09 2d 66 69 6c 65 20 2d 0a 09  .......-file -..
1cc10 09 09 09 09 09 09 09 2d 6d 61 73 6b 66 69 6c 65  .......-maskfile
1cc20 20 7b 20 72 65 74 75 72 6e 20 22 22 20 7d 0a 09   { return "" }..
1cc30 09 09 09 09 09 09 09 64 65 66 61 75 6c 74 20 7b  .......default {
1cc40 0a 09 09 09 09 09 09 09 09 09 72 65 74 75 72 6e  ..........return
1cc50 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
1cc60 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09  st ${text} \....
1cc70 09 09 09 09 09 09 5b 52 65 6d 6f 76 65 55 73 65  ......[RemoveUse
1cc80 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d  dOptions ${line}
1cc90 20 7b 0a 09 09 09 09 09 09 09 09 09 09 2d 62 61   {...........-ba
1cca0 63 6b 67 72 6f 75 6e 64 20 2d 64 61 74 61 20 2d  ckground -data -
1ccb0 66 69 6c 65 0a 09 09 09 09 09 09 09 09 09 09 2d  file...........-
1ccc0 66 6f 72 65 67 72 6f 75 6e 64 20 2d 6d 61 73 6b  foreground -mask
1ccd0 64 61 74 61 20 2d 6d 61 73 6b 66 69 6c 65 0a 09  data -maskfile..
1cce0 09 09 09 09 09 09 09 09 7d 5d 5d 0a 09 09 09 09  ........}]].....
1ccf0 09 09 09 09 7d 0a 09 09 09 09 09 09 09 7d 0a 09  ....}........}..
1cd00 09 09 09 09 09 7d 0a 09 09 09 09 09 09 70 68 6f  .....}.......pho
1cd10 74 6f 20 7b 0a 09 09 09 09 09 09 09 73 77 69 74  to {........swit
1cd20 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a  ch -- ${prev} {.
1cd30 09 09 09 09 09 09 09 09 2d 64 61 74 61 20 7b 20  ........-data { 
1cd40 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
1cd50 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d  ints <string>] }
1cd60 0a 09 09 09 09 09 09 09 09 2d 66 69 6c 65 20 7b  .........-file {
1cd70 20 72 65 74 75 72 6e 20 22 22 20 7d 0a 09 09 09   return "" }....
1cd80 09 09 09 09 09 2d 66 6f 72 6d 61 74 20 7b 20 72  .....-format { r
1cd90 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
1cda0 6e 74 73 20 3c 66 6f 72 6d 61 74 2d 6e 61 6d 65  nts <format-name
1cdb0 3e 5d 20 7d 0a 09 09 09 09 09 09 09 09 2d 67 61  >] }.........-ga
1cdc0 6d 6d 61 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  mma { return [Di
1cdd0 73 70 6c 61 79 48 69 6e 74 73 20 3c 76 61 6c 75  splayHints <valu
1cde0 65 3e 5d 20 7d 0a 09 09 09 09 09 09 09 09 2d 68  e>] }.........-h
1cdf0 65 69 67 68 74 20 2d 0a 09 09 09 09 09 09 09 09  eight -.........
1ce00 2d 77 69 64 74 68 20 7b 20 72 65 74 75 72 6e 20  -width { return 
1ce10 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6e  [DisplayHints <n
1ce20 75 6d 62 65 72 3e 5d 20 7d 0a 09 09 09 09 09 09  umber>] }.......
1ce30 09 09 2d 70 61 6c 65 74 74 65 20 7b 0a 09 09 09  ..-palette {....
1ce40 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  ......return [Di
1ce50 73 70 6c 61 79 48 69 6e 74 73 20 3c 70 61 6c 65  splayHints <pale
1ce60 74 74 65 2d 73 70 65 63 3e 5d 0a 09 09 09 09 09  tte-spec>]......
1ce70 09 09 09 7d 0a 09 09 09 09 09 09 09 09 64 65 66  ...}.........def
1ce80 61 75 6c 74 20 7b 0a 09 09 09 09 09 09 09 09 09  ault {..........
1ce90 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
1cea0 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
1ceb0 20 5c 0a 09 09 09 09 09 09 09 09 09 5b 52 65 6d   \..........[Rem
1cec0 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24  oveUsedOptions $
1ced0 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 09 09 09  {line} {........
1cee0 09 09 09 2d 64 61 74 61 20 2d 66 6f 72 6d 61 74  ...-data -format
1cef0 20 2d 66 69 6c 65 20 2d 67 61 6d 6d 61 0a 09 09   -file -gamma...
1cf00 09 09 09 09 09 09 09 09 2d 68 65 69 67 68 74 20  ........-height 
1cf10 2d 70 61 6c 65 74 74 65 20 2d 77 69 64 74 68 0a  -palette -width.
1cf20 09 09 09 09 09 09 09 09 09 7d 5d 5d 0a 09 09 09  .........}]]....
1cf30 09 09 09 09 09 7d 0a 09 09 09 09 09 09 09 7d 0a  .....}........}.
1cf40 09 09 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a 09  ......}......}..
1cf50 09 09 09 7d 0a 09 09 09 09 64 65 6c 65 74 65 20  ...}.....delete 
1cf60 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
1cf70 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
1cf80 74 7d 20 5b 69 6d 61 67 65 20 6e 61 6d 65 73 5d  t} [image names]
1cf90 5d 20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20  ] }.....default 
1cfa0 7b 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d  {}....}...}..}.}
1cfb0 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
1cfc0 6c 61 62 65 6c 29 20 7b 74 65 78 74 20 73 74 61  label) {text sta
1cfd0 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
1cfe0 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d  mod} {..switch -
1cff0 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b  - ${pos} {...1 {
1d000 20 72 65 74 75 72 6e 20 5b 45 76 65 6e 74 75 61   return [Eventua
1d010 6c 6c 79 49 6e 73 65 72 74 4c 65 61 64 69 6e 67  llyInsertLeading
1d020 44 6f 74 20 24 7b 74 65 78 74 7d 20 3c 70 61 74  Dot ${text} <pat
1d030 68 4e 61 6d 65 3e 5d 20 7d 0a 09 09 64 65 66 61  hName>] }...defa
1d040 75 6c 74 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  ult {....return 
1d050 5b 43 6f 6d 70 6c 65 74 65 57 69 64 67 65 74 43  [CompleteWidgetC
1d060 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 24 7b  onfigurations ${
1d070 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24  text} ${start} $
1d080 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 2d 61 6e  {line} {.....-an
1d090 63 68 6f 72 20 2d 62 61 63 6b 67 72 6f 75 6e 64  chor -background
1d0a0 20 2d 62 69 74 6d 61 70 20 2d 62 6f 72 64 65 72   -bitmap -border
1d0b0 77 69 64 74 68 20 2d 63 75 72 73 6f 72 20 2d 66  width -cursor -f
1d0c0 6f 6e 74 0a 09 09 09 09 2d 66 6f 72 65 67 72 6f  ont.....-foregro
1d0d0 75 6e 64 20 2d 68 69 67 68 6c 69 67 68 74 62 61  und -highlightba
1d0e0 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69  ckground -highli
1d0f0 67 68 74 63 6f 6c 6f 72 0a 09 09 09 09 2d 68 69  ghtcolor.....-hi
1d100 67 68 6c 69 67 68 74 74 68 69 63 6b 6e 65 73 73  ghlightthickness
1d110 20 2d 69 6d 61 67 65 20 2d 6a 75 73 74 69 66 79   -image -justify
1d120 20 2d 70 61 64 78 20 2d 70 61 64 79 20 2d 72 65   -padx -pady -re
1d130 6c 69 65 66 0a 09 09 09 09 2d 74 61 6b 65 66 6f  lief.....-takefo
1d140 63 75 73 20 2d 74 65 78 74 20 2d 74 65 78 74 76  cus -text -textv
1d150 61 72 69 61 62 6c 65 20 2d 75 6e 64 65 72 6c 69  ariable -underli
1d160 6e 65 20 2d 77 72 61 70 6c 65 6e 67 74 68 0a 09  ne -wraplength..
1d170 09 09 09 2d 68 65 69 67 68 74 20 2d 77 69 64 74  ...-height -widt
1d180 68 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 7d 0a 09  h....}]...}..}..
1d190 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f  return "".}..pro
1d1a0 63 20 63 6f 6d 70 6c 65 74 65 28 6c 69 73 74 62  c complete(listb
1d1b0 6f 78 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  ox) {text start 
1d1c0 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
1d1d0 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  } {..switch -- $
1d1e0 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65  {pos} {...1 { re
1d1f0 74 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c 6c 79  turn [Eventually
1d200 49 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f 74  InsertLeadingDot
1d210 20 24 7b 74 65 78 74 7d 20 3c 70 61 74 68 4e 61   ${text} <pathNa
1d220 6d 65 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74  me>] }...default
1d230 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f   {....return [Co
1d240 6d 70 6c 65 74 65 57 69 64 67 65 74 43 6f 6e 66  mpleteWidgetConf
1d250 69 67 75 72 61 74 69 6f 6e 73 20 24 7b 74 65 78  igurations ${tex
1d260 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69  t} ${start} ${li
1d270 6e 65 7d 20 7b 0a 09 09 09 09 2d 62 61 63 6b 67  ne} {.....-backg
1d280 72 6f 75 6e 64 20 2d 62 6f 72 64 65 72 77 69 64  round -borderwid
1d290 74 68 20 2d 63 75 72 73 6f 72 20 2d 65 78 70 6f  th -cursor -expo
1d2a0 72 74 73 65 6c 65 63 74 69 6f 6e 20 2d 66 6f 6e  rtselection -fon
1d2b0 74 0a 09 09 09 09 2d 66 6f 72 65 67 72 6f 75 6e  t.....-foregroun
1d2c0 64 20 2d 68 65 69 67 68 74 20 2d 68 69 67 68 6c  d -height -highl
1d2d0 69 67 68 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d  ightbackground -
1d2e0 68 69 67 68 6c 69 67 68 74 63 6f 6c 6f 72 0a 09  highlightcolor..
1d2f0 09 09 09 2d 68 69 67 68 6c 69 67 68 74 74 68 69  ...-highlightthi
1d300 63 6b 6e 65 73 73 20 2d 72 65 6c 69 65 66 20 2d  ckness -relief -
1d310 73 65 6c 65 63 74 62 61 63 6b 67 72 6f 75 6e 64  selectbackground
1d320 0a 09 09 09 09 2d 73 65 6c 65 63 74 62 6f 72 64  .....-selectbord
1d330 65 72 77 69 64 74 68 20 2d 73 65 6c 65 63 74 66  erwidth -selectf
1d340 6f 72 65 67 72 6f 75 6e 64 20 2d 73 65 74 67 72  oreground -setgr
1d350 69 64 20 2d 74 61 6b 65 66 6f 63 75 73 0a 09 09  id -takefocus...
1d360 09 09 2d 77 69 64 74 68 20 2d 78 73 63 72 6f 6c  ..-width -xscrol
1d370 6c 63 6f 6d 6d 61 6e 64 20 2d 79 73 63 72 6f 6c  lcommand -yscrol
1d380 6c 63 6f 6d 6d 61 6e 64 20 2d 68 65 69 67 68 74  lcommand -height
1d390 20 2d 73 65 6c 65 63 74 6d 6f 64 65 0a 09 09 09   -selectmode....
1d3a0 09 2d 77 69 64 74 68 0a 09 09 09 7d 5d 0a 09 09  .-width....}]...
1d3b0 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
1d3c0 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
1d3d0 28 6c 6f 77 65 72 29 20 7b 74 65 78 74 20 73 74  (lower) {text st
1d3e0 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
1d3f0 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
1d400 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20  -- ${pos} {...1 
1d410 2d 0a 09 09 32 20 7b 0a 09 09 09 72 65 74 75 72  -...2 {....retur
1d420 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
1d430 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 57 69 64  ist ${text} [Wid
1d440 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65  getChildren ${te
1d450 78 74 7d 5d 5d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a  xt}]]...}..}.}..
1d460 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6d 65  proc complete(me
1d470 6e 75 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  nu) {text start 
1d480 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
1d490 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  } {..switch -- $
1d4a0 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65  {pos} {...1 { re
1d4b0 74 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c 6c 79  turn [Eventually
1d4c0 49 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f 74  InsertLeadingDot
1d4d0 20 24 7b 74 65 78 74 7d 20 3c 70 61 74 68 4e 61   ${text} <pathNa
1d4e0 6d 65 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74  me>] }...default
1d4f0 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f   {....return [Co
1d500 6d 70 6c 65 74 65 57 69 64 67 65 74 43 6f 6e 66  mpleteWidgetConf
1d510 69 67 75 72 61 74 69 6f 6e 73 20 24 7b 74 65 78  igurations ${tex
1d520 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69  t} ${start} ${li
1d530 6e 65 7d 20 7b 0a 09 09 09 09 2d 61 63 74 69 76  ne} {.....-activ
1d540 65 62 61 63 6b 67 72 6f 75 6e 64 20 2d 61 63 74  ebackground -act
1d550 69 76 65 62 6f 72 64 65 72 77 69 64 74 68 20 2d  iveborderwidth -
1d560 61 63 74 69 76 65 66 6f 72 65 67 72 6f 75 6e 64  activeforeground
1d570 0a 09 09 09 09 2d 62 61 63 6b 67 72 6f 75 6e 64  .....-background
1d580 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20 2d 63   -borderwidth -c
1d590 75 72 73 6f 72 20 2d 64 69 73 61 62 6c 65 64 66  ursor -disabledf
1d5a0 6f 72 65 67 72 6f 75 6e 64 0a 09 09 09 09 2d 66  oreground.....-f
1d5b0 6f 6e 74 20 2d 66 6f 72 65 67 72 6f 75 6e 64 20  ont -foreground 
1d5c0 2d 72 65 6c 69 65 66 20 2d 74 61 6b 65 66 6f 63  -relief -takefoc
1d5d0 75 73 20 2d 70 6f 73 74 63 6f 6d 6d 61 6e 64 0a  us -postcommand.
1d5e0 09 09 09 09 2d 73 65 6c 65 63 74 63 6f 6c 6f 72  ....-selectcolor
1d5f0 20 2d 74 65 61 72 6f 66 66 20 2d 74 65 61 72 6f   -tearoff -tearo
1d600 66 66 63 6f 6d 6d 61 6e 64 20 2d 74 69 74 6c 65  ffcommand -title
1d610 20 2d 74 79 70 65 0a 09 09 09 7d 5d 0a 09 09 7d   -type....}]...}
1d620 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
1d630 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
1d640 6d 65 6e 75 62 75 74 74 6f 6e 29 20 7b 74 65 78  menubutton) {tex
1d650 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
1d660 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69   pos mod} {..swi
1d670 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a  tch -- ${pos} {.
1d680 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 45 76  ..1 { return [Ev
1d690 65 6e 74 75 61 6c 6c 79 49 6e 73 65 72 74 4c 65  entuallyInsertLe
1d6a0 61 64 69 6e 67 44 6f 74 20 24 7b 74 65 78 74 7d  adingDot ${text}
1d6b0 20 3c 70 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a 09   <pathName>] }..
1d6c0 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 72 65  .default {....re
1d6d0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 57 69  turn [CompleteWi
1d6e0 64 67 65 74 43 6f 6e 66 69 67 75 72 61 74 69 6f  dgetConfiguratio
1d6f0 6e 73 20 24 7b 74 65 78 74 7d 20 24 7b 73 74 61  ns ${text} ${sta
1d700 72 74 7d 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09  rt} ${line} {...
1d710 09 09 2d 61 63 74 69 76 65 62 61 63 6b 67 72 6f  ..-activebackgro
1d720 75 6e 64 20 2d 61 63 74 69 76 65 66 6f 72 65 67  und -activeforeg
1d730 72 6f 75 6e 64 20 2d 61 6e 63 68 6f 72 20 2d 62  round -anchor -b
1d740 61 63 6b 67 72 6f 75 6e 64 0a 09 09 09 09 2d 62  ackground.....-b
1d750 69 74 6d 61 70 20 2d 62 6f 72 64 65 72 77 69 64  itmap -borderwid
1d760 74 68 20 2d 63 75 72 73 6f 72 20 2d 64 69 73 61  th -cursor -disa
1d770 62 6c 65 64 66 6f 72 65 67 72 6f 75 6e 64 20 2d  bledforeground -
1d780 66 6f 6e 74 0a 09 09 09 09 2d 66 6f 72 65 67 72  font.....-foregr
1d790 6f 75 6e 64 20 2d 68 69 67 68 6c 69 67 68 74 62  ound -highlightb
1d7a0 61 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c  ackground -highl
1d7b0 69 67 68 74 63 6f 6c 6f 72 0a 09 09 09 09 2d 68  ightcolor.....-h
1d7c0 69 67 68 6c 69 67 68 74 74 68 69 63 6b 6e 65 73  ighlightthicknes
1d7d0 73 20 2d 69 6d 61 67 65 20 2d 6a 75 73 74 69 66  s -image -justif
1d7e0 79 20 2d 70 61 64 78 20 2d 70 61 64 79 20 2d 72  y -padx -pady -r
1d7f0 65 6c 69 65 66 0a 09 09 09 09 2d 74 61 6b 65 66  elief.....-takef
1d800 6f 63 75 73 20 2d 74 65 78 74 20 2d 74 65 78 74  ocus -text -text
1d810 76 61 72 69 61 62 6c 65 20 2d 75 6e 64 65 72 6c  variable -underl
1d820 69 6e 65 20 2d 77 72 61 70 6c 65 6e 67 74 68 0a  ine -wraplength.
1d830 09 09 09 09 2d 64 69 72 65 63 74 69 6f 6e 20 2d  ....-direction -
1d840 68 65 69 67 68 74 20 2d 69 6e 64 69 63 61 74 6f  height -indicato
1d850 72 6f 6e 20 2d 6d 65 6e 75 20 2d 73 74 61 74 65  ron -menu -state
1d860 20 2d 77 69 64 74 68 0a 09 09 09 7d 5d 0a 09 09   -width....}]...
1d870 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
1d880 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
1d890 28 6d 65 73 73 61 67 65 29 20 7b 74 65 78 74 20  (message) {text 
1d8a0 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
1d8b0 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63  os mod} {..switc
1d8c0 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09  h -- ${pos} {...
1d8d0 31 20 7b 20 72 65 74 75 72 6e 20 5b 45 76 65 6e  1 { return [Even
1d8e0 74 75 61 6c 6c 79 49 6e 73 65 72 74 4c 65 61 64  tuallyInsertLead
1d8f0 69 6e 67 44 6f 74 20 24 7b 74 65 78 74 7d 20 3c  ingDot ${text} <
1d900 70 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a 09 09 64  pathName>] }...d
1d910 65 66 61 75 6c 74 20 7b 0a 09 09 09 72 65 74 75  efault {....retu
1d920 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 57 69 64 67  rn [CompleteWidg
1d930 65 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  etConfigurations
1d940 20 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74   ${text} ${start
1d950 7d 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09  } ${line} {.....
1d960 2d 61 6e 63 68 6f 72 20 2d 62 61 63 6b 67 72 6f  -anchor -backgro
1d970 75 6e 64 20 2d 62 6f 72 64 65 72 77 69 64 74 68  und -borderwidth
1d980 20 2d 63 75 72 73 6f 72 20 2d 66 6f 6e 74 20 2d   -cursor -font -
1d990 66 6f 72 65 67 72 6f 75 6e 64 0a 09 09 09 09 2d  foreground.....-
1d9a0 68 69 67 68 6c 69 67 68 74 62 61 63 6b 67 72 6f  highlightbackgro
1d9b0 75 6e 64 20 2d 68 69 67 68 6c 69 67 68 74 63 6f  und -highlightco
1d9c0 6c 6f 72 20 2d 68 69 67 68 6c 69 67 68 74 74 68  lor -highlightth
1d9d0 69 63 6b 6e 65 73 73 0a 09 09 09 09 2d 70 61 64  ickness.....-pad
1d9e0 78 20 2d 70 61 64 79 20 2d 72 65 6c 69 65 66 20  x -pady -relief 
1d9f0 2d 74 61 6b 65 66 6f 63 75 73 20 2d 74 65 78 74  -takefocus -text
1da00 20 2d 74 65 78 74 76 61 72 69 61 62 6c 65 20 2d   -textvariable -
1da10 77 69 64 74 68 20 0a 09 09 09 09 2d 61 73 70 65  width .....-aspe
1da20 63 74 20 2d 6a 75 73 74 69 66 79 20 2d 77 69 64  ct -justify -wid
1da30 74 68 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 7d 0a  th....}]...}..}.
1da40 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
1da50 6f 63 20 4f 70 74 69 6f 6e 50 72 69 6f 72 69 74  oc OptionPriorit
1da60 79 20 74 65 78 74 20 7b 0a 09 72 65 74 75 72 6e  y text {..return
1da70 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
1da80 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 77  st ${text} {...w
1da90 69 64 67 65 74 44 65 66 61 75 6c 74 20 73 74 61  idgetDefault sta
1daa0 72 74 75 70 46 69 6c 65 20 75 73 65 72 44 65 66  rtupFile userDef
1dab0 61 75 6c 74 20 69 6e 74 65 72 61 63 74 69 76 65  ault interactive
1dac0 0a 09 7d 5d 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d  ..}].}..proc com
1dad0 70 6c 65 74 65 28 6f 70 74 69 6f 6e 29 20 7b 74  plete(option) {t
1dae0 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
1daf0 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
1db00 65 74 20 73 75 62 20 5b 4c 69 6e 64 65 78 20 24  et sub [Lindex $
1db10 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73 77 69 74 63  {line} 1]..switc
1db20 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09  h -- ${pos} {...
1db30 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43  1 {....return [C
1db40 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
1db50 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 61 64  ${text} {.....ad
1db60 64 20 63 6c 65 61 72 20 67 65 74 20 72 65 61 64  d clear get read
1db70 66 69 6c 65 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09  file....}]...}..
1db80 09 32 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  .2 {....switch -
1db90 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 61  - ${sub} {.....a
1dba0 64 64 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  dd { return [Dis
1dbb0 70 6c 61 79 48 69 6e 74 73 20 3c 70 61 74 74 65  playHints <patte
1dbc0 72 6e 3e 5d 20 7d 0a 09 09 09 09 67 65 74 20 7b  rn>] }.....get {
1dbd0 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
1dbe0 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
1dbf0 7b 74 65 78 74 7d 20 5b 57 69 64 67 65 74 43 68  {text} [WidgetCh
1dc00 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d  ildren ${text}]]
1dc10 0a 09 09 09 09 7d 0a 09 09 09 09 72 65 61 64 66  .....}.....readf
1dc20 69 6c 65 20 7b 20 72 65 74 75 72 6e 20 22 22 20  ile { return "" 
1dc30 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 33 20 7b  }....}...}...3 {
1dc40 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  ....switch -- ${
1dc50 73 75 62 7d 20 7b 0a 09 09 09 09 61 64 64 20 7b  sub} {.....add {
1dc60 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
1dc70 48 69 6e 74 73 20 3c 76 61 6c 75 65 3e 5d 20 7d  Hints <value>] }
1dc80 0a 09 09 09 09 67 65 74 20 7b 20 72 65 74 75 72  .....get { retur
1dc90 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
1dca0 3c 6e 61 6d 65 3e 5d 20 7d 0a 09 09 09 09 72 65  <name>] }.....re
1dcb0 61 64 66 69 6c 65 20 7b 20 72 65 74 75 72 6e 20  adfile { return 
1dcc0 5b 4f 70 74 69 6f 6e 50 72 69 6f 72 69 74 79 20  [OptionPriority 
1dcd0 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09 7d 0a  ${text}] }....}.
1dce0 09 09 7d 0a 09 09 34 20 7b 0a 09 09 09 73 77 69  ..}...4 {....swi
1dcf0 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a  tch -- ${sub} {.
1dd00 09 09 09 09 61 64 64 20 7b 20 72 65 74 75 72 6e  ....add { return
1dd10 20 5b 4f 70 74 69 6f 6e 50 72 69 6f 72 69 74 79   [OptionPriority
1dd20 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09 09   ${text}] }.....
1dd30 67 65 74 20 7b 0a 09 09 09 09 09 72 65 74 75 72  get {......retur
1dd40 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
1dd50 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09  ist ${text} \...
1dd60 09 09 09 5b 43 6c 61 73 73 54 61 62 6c 65 20 5b  ...[ClassTable [
1dd70 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 32  Lindex ${line} 2
1dd80 5d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 72 65  ]]].....}.....re
1dd90 61 64 66 69 6c 65 20 7b 7d 0a 09 09 09 7d 0a 09  adfile {}....}..
1dda0 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 50 61  .}..}.}..proc Pa
1ddb0 63 6b 43 6f 6e 66 69 67 20 7b 74 65 78 74 20 6c  ckConfig {text l
1ddc0 69 6e 65 20 70 72 65 76 7d 20 7b 0a 09 73 65 74  ine prev} {..set
1ddd0 20 6f 70 74 73 20 7b 0a 09 09 2d 61 66 74 65 72   opts {...-after
1dde0 20 2d 61 6e 63 68 6f 72 20 2d 62 65 66 6f 72 65   -anchor -before
1ddf0 20 2d 65 78 70 61 6e 64 20 2d 66 69 6c 6c 0a 09   -expand -fill..
1de00 09 2d 69 6e 20 2d 69 70 61 64 78 20 2d 69 70 61  .-in -ipadx -ipa
1de10 64 79 20 2d 70 61 64 78 20 2d 70 61 64 79 20 2d  dy -padx -pady -
1de20 73 69 64 65 0a 09 7d 0a 09 69 66 20 7b 2d 31 20  side..}..if {-1 
1de30 3d 3d 20 5b 73 74 72 69 6e 67 20 66 69 72 73 74  == [string first
1de40 20 22 2d 22 20 24 7b 6c 69 6e 65 7d 5d 7d 20 7b   "-" ${line}]} {
1de50 0a 09 09 73 65 74 20 73 6c 61 76 65 20 5b 57 69  ...set slave [Wi
1de60 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74  dgetChildren ${t
1de70 65 78 74 7d 5d 0a 09 7d 20 65 6c 73 65 20 7b 0a  ext}]..} else {.
1de80 09 09 73 65 74 20 73 6c 61 76 65 20 22 22 0a 09  ..set slave ""..
1de90 7d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  }..switch -- ${p
1dea0 72 65 76 7d 20 7b 0a 09 09 2d 61 66 74 65 72 20  rev} {...-after 
1deb0 2d 0a 09 09 2d 62 65 66 6f 72 65 20 20 7b 20 72  -...-before  { r
1dec0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1ded0 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1dee0 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
1def0 24 7b 74 65 78 74 7d 5d 5d 20 7d 0a 09 09 2d 61  ${text}]] }...-a
1df00 6e 63 68 6f 72 20 7b 20 72 65 74 75 72 6e 20 5b  nchor { return [
1df10 43 6f 6d 70 6c 65 74 65 41 6e 63 68 6f 72 20 24  CompleteAnchor $
1df20 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 2d 65 78 70  {text}] }...-exp
1df30 61 6e 64 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  and { return [Co
1df40 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e 20 24 7b  mpleteBoolean ${
1df50 74 65 78 74 7d 5d 20 7d 0a 09 09 2d 66 69 6c 6c  text}] }...-fill
1df60 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c   { return [Compl
1df70 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
1df80 78 74 7d 20 7b 20 6e 6f 6e 65 20 78 20 79 20 62  xt} { none x y b
1df90 6f 74 68 20 7d 5d 20 7d 0a 0a 09 09 2d 69 70 61  oth }] }....-ipa
1dfa0 64 78 20 2d 0a 09 09 2d 69 70 61 64 79 20 2d 0a  dx -...-ipady -.
1dfb0 09 09 2d 70 61 64 78 20 2d 0a 09 09 2d 70 61 64  ..-padx -...-pad
1dfc0 79 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  y { return [Disp
1dfd0 6c 61 79 48 69 6e 74 73 20 3c 61 6d 6f 75 6e 74  layHints <amount
1dfe0 3e 5d 20 7d 0a 0a 09 09 2d 69 6e 20 7b 20 72 65  >] }....-in { re
1dff0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
1e000 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b  omList ${text} [
1e010 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
1e020 7b 74 65 78 74 7d 5d 5d 20 7d 0a 09 09 2d 73 69  {text}]] }...-si
1e030 64 65 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d  de { return [Com
1e040 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
1e050 74 65 78 74 7d 20 7b 20 6c 65 66 74 20 72 69 67  text} { left rig
1e060 68 74 20 74 6f 70 20 62 6f 74 74 6f 6d 20 7d 5d  ht top bottom }]
1e070 20 7d 0a 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a   }....default {.
1e080 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
1e090 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
1e0a0 78 74 7d 20 5c 0a 09 09 09 5b 52 65 6d 6f 76 65  xt} \....[Remove
1e0b0 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69  UsedOptions ${li
1e0c0 6e 65 7d 20 5b 63 6f 6e 63 61 74 20 24 7b 6f 70  ne} [concat ${op
1e0d0 74 73 7d 20 24 7b 73 6c 61 76 65 7d 5d 5d 5d 0a  ts} ${slave}]]].
1e0e0 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 63  ..}..}.}..proc c
1e0f0 6f 6d 70 6c 65 74 65 28 70 61 63 6b 29 20 7b 74  omplete(pack) {t
1e100 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
1e110 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
1e120 65 74 20 73 75 62 20 5b 4c 69 6e 64 65 78 20 24  et sub [Lindex $
1e130 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73 65 74 20 70  {line} 1]..set p
1e140 72 65 76 20 5b 50 72 65 76 69 6f 75 73 57 6f 72  rev [PreviousWor
1e150 64 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e  d ${start} ${lin
1e160 65 7d 5d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  e}]..switch -- $
1e170 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a 09 09  {pos} {...1 {...
1e180 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
1e190 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
1e1a0 7d 20 5c 0a 09 09 09 5b 63 6f 6e 63 61 74 20 5b  } \....[concat [
1e1b0 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
1e1c0 7b 74 65 78 74 7d 5d 20 7b 0a 09 09 09 09 63 6f  {text}] {.....co
1e1d0 6e 66 69 67 75 72 65 20 66 6f 72 67 65 74 20 69  nfigure forget i
1e1e0 6e 66 6f 20 70 72 6f 70 61 67 61 74 65 20 73 6c  nfo propagate sl
1e1f0 61 76 65 73 0a 09 09 09 7d 5d 5d 0a 09 09 7d 0a  aves....}]]...}.
1e200 09 09 32 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ..2 {....switch 
1e210 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09  -- ${sub} {.....
1e220 63 6f 6e 66 69 67 75 72 65 20 2d 0a 09 09 09 09  configure -.....
1e230 66 6f 72 67 65 74 20 2d 0a 09 09 09 09 69 6e 66  forget -.....inf
1e240 6f 20 2d 0a 09 09 09 09 70 72 6f 70 61 67 61 74  o -.....propagat
1e250 65 20 2d 0a 09 09 09 09 73 6c 61 76 65 73 20 7b  e -.....slaves {
1e260 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
1e270 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
1e280 7b 74 65 78 74 7d 20 5b 57 69 64 67 65 74 43 68  {text} [WidgetCh
1e290 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d  ildren ${text}]]
1e2a0 0a 09 09 09 09 7d 0a 09 09 09 09 64 65 66 61 75  .....}.....defau
1e2b0 6c 74 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  lt {......return
1e2c0 20 5b 50 61 63 6b 43 6f 6e 66 69 67 20 24 7b 74   [PackConfig ${t
1e2d0 65 78 74 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70  ext} ${line} ${p
1e2e0 72 65 76 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d  rev}].....}....}
1e2f0 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b  ...}...default {
1e300 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  ....switch -- ${
1e310 73 75 62 7d 20 7b 0a 09 09 09 09 63 6f 6e 66 69  sub} {.....confi
1e320 67 75 72 65 20 7b 0a 09 09 09 09 09 72 65 74 75  gure {......retu
1e330 72 6e 20 5b 50 61 63 6b 43 6f 6e 66 69 67 20 24  rn [PackConfig $
1e340 7b 74 65 78 74 7d 20 24 7b 6c 69 6e 65 7d 20 24  {text} ${line} $
1e350 7b 70 72 65 76 7d 5d 0a 09 09 09 09 7d 0a 09 09  {prev}].....}...
1e360 09 09 66 6f 72 67 65 74 20 7b 0a 09 09 09 09 09  ..forget {......
1e370 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
1e380 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
1e390 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e   [WidgetChildren
1e3a0 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 7d   ${text}]].....}
1e3b0 0a 09 09 09 09 69 6e 66 6f 20 7b 7d 0a 09 09 09  .....info {}....
1e3c0 09 70 72 6f 70 61 67 61 74 65 20 7b 0a 09 09 09  .propagate {....
1e3d0 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
1e3e0 73 7d 20 7b 0a 09 09 09 09 09 09 33 20 7b 20 72  s} {.......3 { r
1e3f0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 42  eturn [CompleteB
1e400 6f 6f 6c 65 61 6e 20 24 7b 74 65 78 74 7d 5d 20  oolean ${text}] 
1e410 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09  }......}.....}..
1e420 09 09 09 73 6c 61 76 65 73 20 7b 7d 0a 09 09 09  ...slaves {}....
1e430 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09  .default {......
1e440 72 65 74 75 72 6e 20 5b 50 61 63 6b 43 6f 6e 66  return [PackConf
1e450 69 67 20 24 7b 74 65 78 74 7d 20 24 7b 6c 69 6e  ig ${text} ${lin
1e460 65 7d 20 24 7b 70 72 65 76 7d 5d 0a 09 09 09 09  e} ${prev}].....
1e470 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72  }....}...}..}..r
1e480 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63  eturn "".}..proc
1e490 20 50 6c 61 63 65 43 6f 6e 66 69 67 20 7b 74 65   PlaceConfig {te
1e4a0 78 74 20 6c 69 6e 65 20 70 72 65 76 7d 20 7b 0a  xt line prev} {.
1e4b0 09 73 65 74 20 6f 70 74 73 20 7b 0a 09 09 2d 69  .set opts {...-i
1e4c0 6e 20 2d 78 20 2d 72 65 6c 78 20 2d 79 20 2d 72  n -x -relx -y -r
1e4d0 65 6c 79 20 2d 61 6e 63 68 6f 72 20 2d 77 69 64  ely -anchor -wid
1e4e0 74 68 0a 09 09 2d 72 65 6c 77 69 64 74 68 20 2d  th...-relwidth -
1e4f0 68 65 69 67 68 74 20 2d 72 65 6c 68 65 69 67 68  height -relheigh
1e500 74 20 2d 62 6f 72 64 65 72 6d 6f 64 65 0a 09 7d  t -bordermode..}
1e510 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72  ..switch -- ${pr
1e520 65 76 7d 20 7b 0a 0a 09 09 2d 69 6e 20 7b 20 72  ev} {....-in { r
1e530 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1e540 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1e550 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
1e560 24 7b 74 65 78 74 7d 5d 5d 20 7d 0a 0a 09 09 2d  ${text}]] }....-
1e570 78 20 2d 0a 09 09 2d 72 65 6c 78 20 2d 0a 09 09  x -...-relx -...
1e580 2d 79 20 2d 0a 09 09 2d 72 65 6c 79 20 7b 20 72  -y -...-rely { r
1e590 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
1e5a0 6e 74 73 20 3c 6c 6f 63 61 74 69 6f 6e 3e 5d 20  nts <location>] 
1e5b0 7d 0a 0a 09 09 2d 61 6e 63 68 6f 72 20 7b 20 72  }....-anchor { r
1e5c0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 41  eturn [CompleteA
1e5d0 6e 63 68 6f 72 20 24 7b 74 65 78 74 7d 5d 20 7d  nchor ${text}] }
1e5e0 0a 0a 09 09 2d 77 69 64 74 68 20 2d 0a 09 09 2d  ....-width -...-
1e5f0 72 65 6c 77 69 64 74 68 20 2d 0a 09 09 2d 68 65  relwidth -...-he
1e600 69 67 68 74 20 2d 0a 09 09 2d 72 65 6c 68 65 69  ight -...-relhei
1e610 67 68 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ght { return [Di
1e620 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 69 7a 65  splayHints <size
1e630 3e 5d 20 7d 0a 0a 09 09 2d 62 6f 72 64 65 72 6d  >] }....-borderm
1e640 6f 64 65 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  ode {....return 
1e650 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
1e660 74 20 24 7b 74 65 78 74 7d 20 7b 69 67 6e 6f 72  t ${text} {ignor
1e670 65 20 69 6e 73 69 64 65 20 6f 75 74 73 69 64 65  e inside outside
1e680 7d 5d 0a 09 09 7d 0a 0a 09 09 64 65 66 61 75 6c  }]...}....defaul
1e690 74 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43  t {....return [C
1e6a0 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
1e6b0 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 5b 52 65  ${text} \....[Re
1e6c0 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20  moveUsedOptions 
1e6d0 24 7b 6c 69 6e 65 7d 20 24 7b 6f 70 74 73 7d 5d  ${line} ${opts}]
1e6e0 5d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63  ]...}..}.}..proc
1e6f0 20 63 6f 6d 70 6c 65 74 65 28 70 6c 61 63 65 29   complete(place)
1e700 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
1e710 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
1e720 0a 09 73 65 74 20 73 75 62 20 5b 4c 69 6e 64 65  ..set sub [Linde
1e730 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73 65  x ${line} 1]..se
1e740 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73  t prev [Previous
1e750 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b  Word ${start} ${
1e760 6c 69 6e 65 7d 5d 0a 09 73 77 69 74 63 68 20 2d  line}]..switch -
1e770 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b  - ${pos} {...1 {
1e780 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
1e790 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
1e7a0 65 78 74 7d 20 5c 0a 09 09 09 5b 63 6f 6e 63 61  ext} \....[conca
1e7b0 74 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65  t [WidgetChildre
1e7c0 6e 20 24 7b 74 65 78 74 7d 5d 20 7b 0a 09 09 09  n ${text}] {....
1e7d0 09 63 6f 6e 66 69 67 75 72 65 20 66 6f 72 67 65  .configure forge
1e7e0 74 20 69 6e 66 6f 20 73 6c 61 76 65 73 0a 09 09  t info slaves...
1e7f0 09 7d 5d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09  .}]]...}...2 {..
1e800 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75  ..switch -- ${su
1e810 62 7d 20 7b 0a 09 09 09 09 63 6f 6e 66 69 67 75  b} {.....configu
1e820 72 65 20 2d 0a 09 09 09 09 66 6f 72 67 65 74 20  re -.....forget 
1e830 2d 0a 09 09 09 09 69 6e 66 6f 20 2d 0a 09 09 09  -.....info -....
1e840 09 73 6c 61 76 65 73 20 7b 0a 09 09 09 09 09 72  .slaves {......r
1e850 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1e860 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1e870 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
1e880 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a  ${text}]].....}.
1e890 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09  ....default {...
1e8a0 09 09 09 72 65 74 75 72 6e 20 5b 50 6c 61 63 65  ...return [Place
1e8b0 43 6f 6e 66 69 67 20 24 7b 74 65 78 74 7d 20 24  Config ${text} $
1e8c0 7b 6c 69 6e 65 7d 20 24 7b 70 72 65 76 7d 5d 0a  {line} ${prev}].
1e8d0 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  ....}....}...}..
1e8e0 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 73 77  .default {....sw
1e8f0 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b  itch -- ${sub} {
1e900 0a 09 09 09 09 63 6f 6e 66 69 67 75 72 65 20 7b  .....configure {
1e910 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 50 6c  ......return [Pl
1e920 61 63 65 43 6f 6e 66 69 67 20 24 7b 74 65 78 74  aceConfig ${text
1e930 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 72 65 76  } ${line} ${prev
1e940 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 66 6f 72  }].....}.....for
1e950 67 65 74 20 7b 7d 0a 09 09 09 09 69 6e 66 6f 20  get {}.....info 
1e960 7b 7d 0a 09 09 09 09 73 6c 61 76 65 73 20 7b 7d  {}.....slaves {}
1e970 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  .....default {..
1e980 09 09 09 09 72 65 74 75 72 6e 20 5b 50 6c 61 63  ....return [Plac
1e990 65 43 6f 6e 66 69 67 20 24 7b 74 65 78 74 7d 20  eConfig ${text} 
1e9a0 24 7b 6c 69 6e 65 7d 20 24 7b 70 72 65 76 7d 5d  ${line} ${prev}]
1e9b0 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a  .....}....}...}.
1e9c0 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
1e9d0 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 72  .proc complete(r
1e9e0 61 64 69 6f 62 75 74 74 6f 6e 29 20 7b 74 65 78  adiobutton) {tex
1e9f0 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
1ea00 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69   pos mod} {..swi
1ea10 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a  tch -- ${pos} {.
1ea20 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 45 76  ..1 { return [Ev
1ea30 65 6e 74 75 61 6c 6c 79 49 6e 73 65 72 74 4c 65  entuallyInsertLe
1ea40 61 64 69 6e 67 44 6f 74 20 24 7b 74 65 78 74 7d  adingDot ${text}
1ea50 20 3c 70 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a 09   <pathName>] }..
1ea60 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 72 65  .default {....re
1ea70 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 57 69  turn [CompleteWi
1ea80 64 67 65 74 43 6f 6e 66 69 67 75 72 61 74 69 6f  dgetConfiguratio
1ea90 6e 73 20 24 7b 74 65 78 74 7d 20 24 7b 73 74 61  ns ${text} ${sta
1eaa0 72 74 7d 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09  rt} ${line} {...
1eab0 09 09 2d 61 63 74 69 76 65 62 61 63 6b 67 72 6f  ..-activebackgro
1eac0 75 6e 64 20 2d 61 63 74 69 76 65 66 6f 72 65 67  und -activeforeg
1ead0 72 6f 75 6e 64 20 2d 61 6e 63 68 6f 72 20 2d 62  round -anchor -b
1eae0 61 63 6b 67 72 6f 75 6e 64 0a 09 09 09 09 2d 62  ackground.....-b
1eaf0 69 74 6d 61 70 20 2d 62 6f 72 64 65 72 77 69 64  itmap -borderwid
1eb00 74 68 20 2d 63 75 72 73 6f 72 20 2d 64 69 73 61  th -cursor -disa
1eb10 62 6c 65 64 66 6f 72 65 67 72 6f 75 6e 64 20 2d  bledforeground -
1eb20 66 6f 6e 74 0a 09 09 09 09 2d 66 6f 72 65 67 72  font.....-foregr
1eb30 6f 75 6e 64 20 2d 68 69 67 68 6c 69 67 68 74 62  ound -highlightb
1eb40 61 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c  ackground -highl
1eb50 69 67 68 74 63 6f 6c 6f 72 0a 09 09 09 09 2d 68  ightcolor.....-h
1eb60 69 67 68 6c 69 67 68 74 74 68 69 63 6b 6e 65 73  ighlightthicknes
1eb70 73 20 2d 69 6d 61 67 65 20 2d 6a 75 73 74 69 66  s -image -justif
1eb80 79 20 2d 70 61 64 78 20 2d 70 61 64 79 20 2d 72  y -padx -pady -r
1eb90 65 6c 69 65 66 0a 09 09 09 09 2d 74 61 6b 65 66  elief.....-takef
1eba0 6f 63 75 73 20 2d 74 65 78 74 20 2d 74 65 78 74  ocus -text -text
1ebb0 76 61 72 69 61 62 6c 65 20 2d 75 6e 64 65 72 6c  variable -underl
1ebc0 69 6e 65 20 2d 77 72 61 70 6c 65 6e 67 74 68 20  ine -wraplength 
1ebd0 2d 63 6f 6d 6d 61 6e 64 0a 09 09 09 09 2d 68 65  -command.....-he
1ebe0 69 67 68 74 20 2d 69 6e 64 69 63 61 74 6f 72 6f  ight -indicatoro
1ebf0 6e 20 2d 73 65 6c 65 63 74 63 6f 6c 6f 72 20 2d  n -selectcolor -
1ec00 73 65 6c 65 63 74 69 6d 61 67 65 20 2d 73 74 61  selectimage -sta
1ec10 74 65 20 2d 76 61 6c 75 65 0a 09 09 09 09 2d 76  te -value.....-v
1ec20 61 72 69 61 62 6c 65 20 2d 77 69 64 74 68 0a 09  ariable -width..
1ec30 09 09 7d 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74  ..}]...}..}..ret
1ec40 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63  urn "".}..proc c
1ec50 6f 6d 70 6c 65 74 65 28 72 61 69 73 65 29 20 7b  omplete(raise) {
1ec60 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
1ec70 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
1ec80 72 65 74 75 72 6e 20 5b 63 6f 6d 70 6c 65 74 65  return [complete
1ec90 28 6c 6f 77 65 72 29 20 24 7b 74 65 78 74 7d 20  (lower) ${text} 
1eca0 24 7b 73 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20  ${start} ${end} 
1ecb0 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 24  ${line} ${pos} $
1ecc0 7b 6d 6f 64 7d 5d 0a 7d 0a 0a 70 72 6f 63 20 63  {mod}].}..proc c
1ecd0 6f 6d 70 6c 65 74 65 28 73 63 61 6c 65 29 20 7b  omplete(scale) {
1ece0 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
1ecf0 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
1ed00 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d  switch -- ${pos}
1ed10 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20   {...1 { return 
1ed20 5b 45 76 65 6e 74 75 61 6c 6c 79 49 6e 73 65 72  [EventuallyInser
1ed30 74 4c 65 61 64 69 6e 67 44 6f 74 20 24 7b 74 65  tLeadingDot ${te
1ed40 78 74 7d 20 3c 70 61 74 68 4e 61 6d 65 3e 5d 20  xt} <pathName>] 
1ed50 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09  }...default {...
1ed60 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
1ed70 65 57 69 64 67 65 74 43 6f 6e 66 69 67 75 72 61  eWidgetConfigura
1ed80 74 69 6f 6e 73 20 24 7b 74 65 78 74 7d 20 24 7b  tions ${text} ${
1ed90 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 20 7b  start} ${line} {
1eda0 0a 09 09 09 09 2d 61 63 74 69 76 65 62 61 63 6b  .....-activeback
1edb0 67 72 6f 75 6e 64 20 2d 62 61 63 6b 67 72 6f 75  ground -backgrou
1edc0 6e 64 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20  nd -borderwidth 
1edd0 2d 63 75 72 73 6f 72 20 2d 66 6f 6e 74 0a 09 09  -cursor -font...
1ede0 09 09 2d 66 6f 72 65 67 72 6f 75 6e 64 20 2d 68  ..-foreground -h
1edf0 69 67 68 6c 69 67 68 74 62 61 63 6b 67 72 6f 75  ighlightbackgrou
1ee00 6e 64 20 2d 68 69 67 68 6c 69 67 68 74 63 6f 6c  nd -highlightcol
1ee10 6f 72 0a 09 09 09 09 2d 68 69 67 68 6c 69 67 68  or.....-highligh
1ee20 74 74 68 69 63 6b 6e 65 73 73 20 2d 6f 72 69 65  tthickness -orie
1ee30 6e 74 20 2d 72 65 6c 69 65 66 20 2d 72 65 70 65  nt -relief -repe
1ee40 61 74 64 65 6c 61 79 0a 09 09 09 09 2d 72 65 70  atdelay.....-rep
1ee50 65 61 74 69 6e 74 65 72 76 61 6c 20 2d 74 61 6b  eatinterval -tak
1ee60 65 66 6f 63 75 73 20 2d 74 72 6f 75 67 68 63 6f  efocus -troughco
1ee70 6c 6f 72 20 2d 62 69 67 69 6e 63 72 65 6d 65 6e  lor -bigincremen
1ee80 74 0a 09 09 09 09 2d 63 6f 6d 6d 61 6e 64 20 2d  t.....-command -
1ee90 64 69 67 69 74 73 20 2d 66 72 6f 6d 20 2d 6c 61  digits -from -la
1eea0 62 65 6c 20 2d 6c 65 6e 67 74 68 20 2d 72 65 73  bel -length -res
1eeb0 6f 6c 75 74 69 6f 6e 0a 09 09 09 09 2d 73 68 6f  olution.....-sho
1eec0 77 76 61 6c 75 65 20 2d 73 6c 69 64 65 72 6c 65  wvalue -sliderle
1eed0 6e 67 74 68 20 2d 73 6c 69 64 65 72 72 65 6c 69  ngth -sliderreli
1eee0 65 66 20 2d 73 74 61 74 65 20 2d 74 69 63 6b 69  ef -state -ticki
1eef0 6e 74 65 72 76 61 6c 0a 09 09 09 09 2d 74 6f 20  nterval.....-to 
1ef00 2d 76 61 72 69 61 62 6c 65 20 2d 77 69 64 74 68  -variable -width
1ef10 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 7d 0a 09 72  ....}]...}..}..r
1ef20 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63  eturn "".}..proc
1ef30 20 63 6f 6d 70 6c 65 74 65 28 73 63 72 6f 6c 6c   complete(scroll
1ef40 62 61 72 29 20 7b 74 65 78 74 20 73 74 61 72 74  bar) {text start
1ef50 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
1ef60 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20  d} {..switch -- 
1ef70 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72  ${pos} {...1 { r
1ef80 65 74 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c 6c  eturn [Eventuall
1ef90 79 49 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f  yInsertLeadingDo
1efa0 74 20 24 7b 74 65 78 74 7d 20 3c 70 61 74 68 4e  t ${text} <pathN
1efb0 61 6d 65 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c  ame>] }...defaul
1efc0 74 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43  t {....return [C
1efd0 6f 6d 70 6c 65 74 65 57 69 64 67 65 74 43 6f 6e  ompleteWidgetCon
1efe0 66 69 67 75 72 61 74 69 6f 6e 73 20 24 7b 74 65  figurations ${te
1eff0 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c  xt} ${start} ${l
1f000 69 6e 65 7d 20 7b 0a 09 09 09 09 2d 61 63 74 69  ine} {.....-acti
1f010 76 65 62 61 63 6b 67 72 6f 75 6e 64 20 2d 62 61  vebackground -ba
1f020 63 6b 67 72 6f 75 6e 64 20 2d 62 6f 72 64 65 72  ckground -border
1f030 77 69 64 74 68 20 2d 63 75 72 73 6f 72 0a 09 09  width -cursor...
1f040 09 09 2d 68 69 67 68 6c 69 67 68 74 62 61 63 6b  ..-highlightback
1f050 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69 67 68  ground -highligh
1f060 74 63 6f 6c 6f 72 20 2d 68 69 67 68 6c 69 67 68  tcolor -highligh
1f070 74 74 68 69 63 6b 6e 65 73 73 0a 09 09 09 09 2d  tthickness.....-
1f080 6a 75 6d 70 20 2d 6f 72 69 65 6e 74 20 2d 72 65  jump -orient -re
1f090 6c 69 65 66 20 2d 72 65 70 65 61 74 64 65 6c 61  lief -repeatdela
1f0a0 79 20 2d 72 65 70 65 61 74 69 6e 74 65 72 76 61  y -repeatinterva
1f0b0 6c 0a 09 09 09 09 2d 74 61 6b 65 66 6f 63 75 73  l.....-takefocus
1f0c0 20 2d 74 72 6f 75 67 68 63 6f 6c 6f 72 20 2d 61   -troughcolor -a
1f0d0 63 74 69 76 65 72 65 6c 69 65 66 20 2d 63 6f 6d  ctiverelief -com
1f0e0 6d 61 6e 64 0a 09 09 09 09 2d 65 6c 65 6d 65 6e  mand.....-elemen
1f0f0 74 62 6f 72 64 65 72 77 69 64 74 68 20 2d 77 69  tborderwidth -wi
1f100 64 74 68 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 7d  dth....}]...}..}
1f110 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70  ..return "".}..p
1f120 72 6f 63 20 53 65 6c 65 63 74 69 6f 6e 4f 70 74  roc SelectionOpt
1f130 73 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  s {text start en
1f140 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 20 6c  d line pos mod l
1f150 73 74 7d 20 7b 0a 09 73 65 74 20 70 72 65 76 20  st} {..set prev 
1f160 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b  [PreviousWord ${
1f170 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a  start} ${line}].
1f180 09 69 66 20 7b 2d 31 20 3d 3d 20 5b 6c 73 65 61  .if {-1 == [lsea
1f190 72 63 68 20 24 7b 6c 73 74 7d 20 24 7b 70 72 65  rch ${lst} ${pre
1f1a0 76 7d 5d 7d 20 7b 0a 09 09 73 65 74 20 70 72 65  v}]} {...set pre
1f1b0 76 20 22 22 20 3b 23 20 66 6f 72 63 65 20 74 68  v "" ;# force th
1f1c0 65 20 64 65 66 61 75 6c 74 20 61 72 6d 0a 09 7d  e default arm..}
1f1d0 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72  ..switch -- ${pr
1f1e0 65 76 7d 20 7b 0a 09 09 2d 64 69 73 70 6c 61 79  ev} {...-display
1f1f0 6f 66 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b  of {....return [
1f200 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
1f210 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 5b 57   ${text} \....[W
1f220 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b  idgetChildren ${
1f230 74 65 78 74 7d 5d 5d 0a 09 09 7d 0a 09 09 2d 73  text}]]...}...-s
1f240 65 6c 65 63 74 69 6f 6e 20 7b 0a 09 09 09 76 61  election {....va
1f250 72 69 61 62 6c 65 20 73 65 6c 65 63 74 69 6f 6e  riable selection
1f260 2d 73 65 6c 65 63 74 69 6f 6e 73 0a 09 09 09 72  -selections....r
1f270 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1f280 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1f290 24 7b 73 65 6c 65 63 74 69 6f 6e 2d 73 65 6c 65  ${selection-sele
1f2a0 63 74 69 6f 6e 73 7d 5d 0a 09 09 7d 0a 09 09 2d  ctions}]...}...-
1f2b0 74 79 70 65 20 7b 0a 09 09 09 76 61 72 69 61 62  type {....variab
1f2c0 6c 65 20 73 65 6c 65 63 74 69 6f 6e 2d 74 79 70  le selection-typ
1f2d0 65 73 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  es....return [Co
1f2e0 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
1f2f0 7b 74 65 78 74 7d 20 24 7b 73 65 6c 65 63 74 69  {text} ${selecti
1f300 6f 6e 2d 74 79 70 65 73 7d 5d 0a 09 09 7d 0a 09  on-types}]...}..
1f310 09 2d 63 6f 6d 6d 61 6e 64 20 7b 0a 09 09 09 72  .-command {....r
1f320 65 74 75 72 6e 20 5b 42 72 61 63 65 4f 72 43 6f  eturn [BraceOrCo
1f330 6d 6d 61 6e 64 20 24 7b 74 65 78 74 7d 20 5c 0a  mmand ${text} \.
1f340 09 09 09 24 7b 73 74 61 72 74 7d 20 24 7b 65 6e  ...${start} ${en
1f350 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73  d} ${line} ${pos
1f360 7d 20 24 7b 6d 6f 64 7d 5d 0a 09 09 7d 0a 09 09  } ${mod}]...}...
1f370 2d 66 6f 72 6d 61 74 20 7b 0a 09 09 09 76 61 72  -format {....var
1f380 69 61 62 6c 65 20 73 65 6c 65 63 74 69 6f 6e 2d  iable selection-
1f390 66 6f 72 6d 61 74 73 0a 09 09 09 72 65 74 75 72  formats....retur
1f3a0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
1f3b0 69 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 73 65  ist ${text} ${se
1f3c0 6c 65 63 74 69 6f 6e 2d 66 6f 72 6d 61 74 73 7d  lection-formats}
1f3d0 5d 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c 74 20  ]...}...default 
1f3e0 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  {....return [Com
1f3f0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
1f400 74 65 78 74 7d 20 5c 0a 09 09 09 5b 52 65 6d 6f  text} \....[Remo
1f410 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b  veUsedOptions ${
1f420 6c 69 6e 65 7d 20 24 7b 6c 73 74 7d 5d 5d 0a 09  line} ${lst}]]..
1f430 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 63 6f  .}..}.}..proc co
1f440 6d 70 6c 65 74 65 28 73 65 6c 65 63 74 69 6f 6e  mplete(selection
1f450 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
1f460 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
1f470 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  {..switch -- ${p
1f480 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72  os} {...1 {....r
1f490 65 74 75 72 6e 20 5b 54 72 79 53 75 62 43 6d 64  eturn [TrySubCmd
1f4a0 73 20 24 7b 74 65 78 74 7d 20 5b 4c 69 6e 64 65  s ${text} [Linde
1f4b0 78 20 24 7b 6c 69 6e 65 7d 20 30 5d 5d 0a 09 09  x ${line} 0]]...
1f4c0 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09  }...default {...
1f4d0 09 73 65 74 20 73 75 62 20 5b 4c 69 6e 64 65 78  .set sub [Lindex
1f4e0 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 09 09 73   ${line} 1]....s
1f4f0 65 74 20 77 69 64 67 65 74 73 20 5b 57 69 64 67  et widgets [Widg
1f500 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65 78  etChildren ${tex
1f510 74 7d 5d 0a 09 09 09 73 77 69 74 63 68 20 2d 2d  t}]....switch --
1f520 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 63 6c   ${sub} {.....cl
1f530 65 61 72 20 7b 0a 09 09 09 09 09 72 65 74 75 72  ear {......retur
1f540 6e 20 5b 53 65 6c 65 63 74 69 6f 6e 4f 70 74 73  n [SelectionOpts
1f550 20 5c 0a 09 09 09 09 09 24 7b 74 65 78 74 7d 20   \......${text} 
1f560 24 7b 73 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20  ${start} ${end} 
1f570 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 24  ${line} ${pos} $
1f580 7b 6d 6f 64 7d 20 7b 0a 09 09 09 09 09 09 2d 64  {mod} {.......-d
1f590 69 73 70 6c 61 79 6f 66 20 2d 73 65 6c 65 63 74  isplayof -select
1f5a0 69 6f 6e 0a 09 09 09 09 09 7d 5d 0a 09 09 09 09  ion......}].....
1f5b0 7d 0a 09 09 09 09 67 65 74 20 7b 0a 09 09 09 09  }.....get {.....
1f5c0 09 72 65 74 75 72 6e 20 5b 53 65 6c 65 63 74 69  .return [Selecti
1f5d0 6f 6e 4f 70 74 73 20 5c 0a 09 09 09 09 09 24 7b  onOpts \......${
1f5e0 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24  text} ${start} $
1f5f0 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b  {end} ${line} ${
1f600 70 6f 73 7d 20 24 7b 6d 6f 64 7d 20 7b 0a 09 09  pos} ${mod} {...
1f610 09 09 09 09 2d 64 69 73 70 6c 61 79 6f 66 20 2d  ....-displayof -
1f620 73 65 6c 65 63 74 69 6f 6e 20 2d 74 79 70 65 0a  selection -type.
1f630 09 09 09 09 09 7d 5d 0a 09 09 09 09 7d 0a 09 09  .....}].....}...
1f640 09 09 68 61 6e 64 6c 65 20 7b 0a 09 09 09 09 09  ..handle {......
1f650 72 65 74 75 72 6e 20 5b 53 65 6c 65 63 74 69 6f  return [Selectio
1f660 6e 4f 70 74 73 20 5c 0a 09 09 09 09 09 24 7b 74  nOpts \......${t
1f670 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b  ext} ${start} ${
1f680 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70  end} ${line} ${p
1f690 6f 73 7d 20 24 7b 6d 6f 64 7d 20 5c 0a 09 09 09  os} ${mod} \....
1f6a0 09 09 5b 63 6f 6e 63 61 74 20 7b 2d 73 65 6c 65  ..[concat {-sele
1f6b0 63 74 69 6f 6e 20 2d 74 79 70 65 20 2d 66 6f 72  ction -type -for
1f6c0 6d 61 74 7d 20 24 7b 77 69 64 67 65 74 73 7d 5d  mat} ${widgets}]
1f6d0 5d 0a 09 09 09 09 7d 0a 09 09 09 09 6f 77 6e 20  ].....}.....own 
1f6e0 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 53  {......return [S
1f6f0 65 6c 65 63 74 69 6f 6e 4f 70 74 73 20 5c 0a 09  electionOpts \..
1f700 09 09 09 09 24 7b 74 65 78 74 7d 20 24 7b 73 74  ....${text} ${st
1f710 61 72 74 7d 20 24 7b 65 6e 64 7d 20 24 7b 6c 69  art} ${end} ${li
1f720 6e 65 7d 20 24 7b 70 6f 73 7d 20 24 7b 6d 6f 64  ne} ${pos} ${mod
1f730 7d 20 5c 0a 09 09 09 09 09 5b 63 6f 6e 63 61 74  } \......[concat
1f740 20 7b 2d 63 6f 6d 6d 61 6e 64 20 2d 73 65 6c 65   {-command -sele
1f750 63 74 69 6f 6e 7d 20 24 7b 77 69 64 67 65 74 73  ction} ${widgets
1f760 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09  }]].....}....}..
1f770 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 63 6f  .}..}.}..proc co
1f780 6d 70 6c 65 74 65 28 73 65 6e 64 29 20 7b 74 65  mplete(send) {te
1f790 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
1f7a0 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65  e pos mod} {..se
1f7b0 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73  t prev [Previous
1f7c0 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b  Word ${start} ${
1f7d0 6c 69 6e 65 7d 5d 0a 09 69 66 20 7b 22 2d 64 69  line}]..if {"-di
1f7e0 73 70 6c 61 79 6f 66 22 20 3d 3d 20 24 7b 70 72  splayof" == ${pr
1f7f0 65 76 7d 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20  ev}} {...return 
1f800 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74  [TryFromList ${t
1f810 65 78 74 7d 20 5b 57 69 64 67 65 74 43 68 69 6c  ext} [WidgetChil
1f820 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09  dren ${text}]]..
1f830 7d 0a 09 73 65 74 20 63 6d 64 73 20 5b 52 65 6d  }..set cmds [Rem
1f840 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24  oveUsedOptions $
1f850 7b 6c 69 6e 65 7d 20 7b 0a 09 09 2d 61 73 79 6e  {line} {...-asyn
1f860 63 20 2d 64 69 73 70 6c 61 79 6f 66 20 2d 2d 0a  c -displayof --.
1f870 09 7d 20 7b 2d 2d 7d 5d 0a 09 69 66 20 7b 5b 6c  .} {--}]..if {[l
1f880 6c 65 6e 67 74 68 20 24 7b 63 6d 64 73 7d 5d 7d  length ${cmds}]}
1f890 20 7b 0a 09 09 72 65 74 75 72 6e 20 5b 73 74 72   {...return [str
1f8a0 69 6e 67 20 74 72 69 6d 20 5b 43 6f 6d 70 6c 65  ing trim [Comple
1f8b0 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
1f8c0 74 7d 20 5c 0a 09 09 5b 63 6f 6e 63 61 74 20 24  t} \...[concat $
1f8d0 7b 63 6d 64 73 7d 20 3c 61 70 70 3e 5d 5d 5d 0a  {cmds} <app>]]].
1f8e0 09 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66 20 7b  .} else {...if {
1f8f0 5b 72 65 67 65 78 70 20 2d 2d 20 2d 2d 24 20 24  [regexp -- --$ $
1f900 7b 6c 69 6e 65 7d 5d 7d 20 7b 0a 09 09 09 72 65  {line}]} {....re
1f910 74 75 72 6e 20 5b 6c 69 73 74 20 7b 2d 2d 7d 5d  turn [list {--}]
1f920 3b 20 23 20 61 70 70 65 6e 64 20 61 20 62 6c 61  ; # append a bla
1f930 6e 6b 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09  nk...} else {...
1f940 09 23 20 54 4f 44 4f 20 6d 61 6b 65 20 74 68 69  .# TODO make thi
1f950 73 20 62 65 74 74 65 72 21 0a 09 09 09 72 65 74  s better!....ret
1f960 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
1f970 73 20 5b 6c 69 73 74 20 7b 3c 61 70 70 20 63 6d  s [list {<app cm
1f980 64 20 3f 61 72 67 20 2e 2e 2e 3f 3e 7d 5d 5d 0a  d ?arg ...?>}]].
1f990 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
1f9a0 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
1f9b0 74 65 28 74 65 78 74 29 20 7b 74 65 78 74 20 73  te(text) {text s
1f9c0 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
1f9d0 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
1f9e0 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31   -- ${pos} {...1
1f9f0 20 7b 20 72 65 74 75 72 6e 20 5b 45 76 65 6e 74   { return [Event
1fa00 75 61 6c 6c 79 49 6e 73 65 72 74 4c 65 61 64 69  uallyInsertLeadi
1fa10 6e 67 44 6f 74 20 24 7b 74 65 78 74 7d 20 3c 70  ngDot ${text} <p
1fa20 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a 09 09 64 65  athName>] }...de
1fa30 66 61 75 6c 74 20 7b 0a 09 09 09 72 65 74 75 72  fault {....retur
1fa40 6e 20 5b 43 6f 6d 70 6c 65 74 65 57 69 64 67 65  n [CompleteWidge
1fa50 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20  tConfigurations 
1fa60 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d  ${text} ${start}
1fa70 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 2d   ${line} {.....-
1fa80 62 61 63 6b 67 72 6f 75 6e 64 20 2d 62 6f 72 64  background -bord
1fa90 65 72 77 69 64 74 68 20 2d 63 75 72 73 6f 72 20  erwidth -cursor 
1faa0 2d 65 78 70 6f 72 74 73 65 6c 65 63 74 69 6f 6e  -exportselection
1fab0 20 2d 66 6f 6e 74 0a 09 09 09 09 2d 66 6f 72 65   -font.....-fore
1fac0 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69 67 68  ground -highligh
1fad0 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67  tbackground -hig
1fae0 68 6c 69 67 68 74 63 6f 6c 6f 72 0a 09 09 09 09  hlightcolor.....
1faf0 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b 6e  -highlightthickn
1fb00 65 73 73 20 2d 69 6e 73 65 72 74 62 61 63 6b 67  ess -insertbackg
1fb10 72 6f 75 6e 64 20 2d 69 6e 73 65 72 74 62 6f 72  round -insertbor
1fb20 64 65 72 77 69 64 74 68 0a 09 09 09 09 2d 69 6e  derwidth.....-in
1fb30 73 65 72 74 6f 66 66 74 69 6d 65 20 2d 69 6e 73  sertofftime -ins
1fb40 65 72 74 6f 6e 74 69 6d 65 20 2d 69 6e 73 65 72  ertontime -inser
1fb50 74 77 69 64 74 68 20 2d 70 61 64 78 20 2d 70 61  twidth -padx -pa
1fb60 64 79 0a 09 09 09 09 2d 72 65 6c 69 65 66 20 2d  dy.....-relief -
1fb70 73 65 6c 65 63 74 62 61 63 6b 67 72 6f 75 6e 64  selectbackground
1fb80 20 2d 73 65 6c 65 63 74 62 6f 72 64 65 72 77 69   -selectborderwi
1fb90 64 74 68 0a 09 09 09 09 2d 73 65 6c 65 63 74 66  dth.....-selectf
1fba0 6f 72 65 67 72 6f 75 6e 64 20 2d 73 65 74 67 72  oreground -setgr
1fbb0 69 64 20 2d 74 61 6b 65 66 6f 63 75 73 20 2d 78  id -takefocus -x
1fbc0 73 63 72 6f 6c 6c 63 6f 6d 6d 61 6e 64 0a 09 09  scrollcommand...
1fbd0 09 09 2d 79 73 63 72 6f 6c 6c 63 6f 6d 6d 61 6e  ..-yscrollcomman
1fbe0 64 20 2d 68 65 69 67 68 74 20 2d 73 70 61 63 69  d -height -spaci
1fbf0 6e 67 31 20 2d 73 70 61 63 69 6e 67 32 20 2d 73  ng1 -spacing2 -s
1fc00 70 61 63 69 6e 67 33 0a 09 09 09 09 2d 73 74 61  pacing3.....-sta
1fc10 74 65 20 2d 74 61 62 73 20 2d 77 69 64 74 68 20  te -tabs -width 
1fc20 2d 77 72 61 70 0a 09 09 09 7d 5d 0a 09 09 7d 0a  -wrap....}]...}.
1fc30 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
1fc40 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74  .proc complete(t
1fc50 6b 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  k) {text start e
1fc60 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
1fc70 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b   {..switch -- ${
1fc80 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a 09 09 09  pos} {...1 {....
1fc90 72 65 74 75 72 6e 20 5b 54 72 79 53 75 62 43 6d  return [TrySubCm
1fca0 64 73 20 24 7b 74 65 78 74 7d 20 5b 4c 69 6e 64  ds ${text} [Lind
1fcb0 65 78 20 24 7b 6c 69 6e 65 7d 20 30 5d 5d 0a 09  ex ${line} 0]]..
1fcc0 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  .}...default {..
1fcd0 09 09 73 77 69 74 63 68 20 2d 2d 20 5b 4c 69 6e  ..switch -- [Lin
1fce0 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 20 7b  dex ${line} 1] {
1fcf0 0a 09 09 09 09 61 70 70 6e 61 6d 65 20 7b 20 72  .....appname { r
1fd00 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
1fd10 6e 74 73 20 3f 6e 65 77 4e 61 6d 65 3f 5d 20 20  nts ?newName?]  
1fd20 7d 0a 09 09 09 09 73 63 61 6c 69 6e 67 20 7b 0a  }.....scaling {.
1fd30 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20 5b  .....switch -- [
1fd40 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73  PreviousWord ${s
1fd50 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 20 7b  tart} ${line}] {
1fd60 0a 09 09 09 09 09 09 2d 64 69 73 70 6c 61 79 6f  .......-displayo
1fd70 66 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72  f {........retur
1fd80 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24  n [TryFromList $
1fd90 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 09 09  {text} \........
1fda0 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
1fdb0 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 09 09  ${text}]].......
1fdc0 7d 0a 09 09 09 09 09 09 64 65 66 61 75 6c 74 20  }.......default 
1fdd0 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e 20  {........return 
1fde0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
1fdf0 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09  t ${text} \.....
1fe00 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70  ...[RemoveUsedOp
1fe10 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b 2d  tions ${line} {-
1fe20 64 69 73 70 6c 61 79 6f 66 20 3f 6e 75 6d 62 65  displayof ?numbe
1fe30 72 3f 7d 5d 5d 0a 09 09 09 09 09 09 7d 0a 09 09  r?}]].......}...
1fe40 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a  ...}.....}....}.
1fe50 09 09 7d 0a 09 7d 0a 7d 0a 0a 23 20 70 72 6f 63  ..}..}.}..# proc
1fe60 20 63 6f 6d 70 6c 65 74 65 28 74 6b 5f 62 69 73   complete(tk_bis
1fe70 71 75 65 29 20 7b 74 65 78 74 20 73 74 61 72 74  que) {text start
1fe80 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
1fe90 64 7d 20 7b 0a 23 20 7d 0a 0a 70 72 6f 63 20 63  d} {.# }..proc c
1fea0 6f 6d 70 6c 65 74 65 28 74 6b 5f 63 68 6f 6f 73  omplete(tk_choos
1feb0 65 43 6f 6c 6f 72 29 20 7b 74 65 78 74 20 73 74  eColor) {text st
1fec0 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
1fed0 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
1fee0 2d 2d 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64  -- [PreviousWord
1fef0 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65   ${start} ${line
1ff00 7d 5d 20 7b 0a 09 09 2d 69 6e 69 74 69 61 6c 63  }] {...-initialc
1ff10 6f 6c 6f 72 20 7b 20 72 65 74 75 72 6e 20 5b 43  olor { return [C
1ff20 6f 6d 70 6c 65 74 65 43 6f 6c 6f 72 20 24 7b 74  ompleteColor ${t
1ff30 65 78 74 7d 5d 20 7d 0a 09 09 2d 70 61 72 65 6e  ext}] }...-paren
1ff40 74 20 7b 20 72 65 74 75 72 6e 20 5b 54 72 79 46  t { return [TryF
1ff50 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1ff60 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
1ff70 24 7b 74 65 78 74 7d 5d 5d 20 7d 0a 09 09 2d 74  ${text}]] }...-t
1ff80 69 74 6c 65 20 7b 20 72 65 74 75 72 6e 20 5b 44  itle { return [D
1ff90 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 72  isplayHints <str
1ffa0 69 6e 67 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c  ing>] }...defaul
1ffb0 74 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 54  t {....return [T
1ffc0 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  ryFromList ${tex
1ffd0 74 7d 20 5c 0a 09 09 09 5b 52 65 6d 6f 76 65 55  t} \....[RemoveU
1ffe0 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e  sedOptions ${lin
1fff0 65 7d 20 7b 2d 69 6e 69 74 69 61 6c 63 6f 6c 6f  e} {-initialcolo
20000 72 20 2d 70 61 72 65 6e 74 20 2d 74 69 74 6c 65  r -parent -title
20010 7d 5d 5d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72  }]]...}..}.}..pr
20020 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74 6b 5f 64  oc complete(tk_d
20030 69 61 6c 6f 67 29 20 7b 74 65 78 74 20 73 74 61  ialog) {text sta
20040 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
20050 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d  mod} {..switch -
20060 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b  - ${pos} {...1 {
20070 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
20080 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
20090 7d 20 5b 54 6f 70 6c 65 76 65 6c 57 69 6e 64 6f  } [ToplevelWindo
200a0 77 73 5d 5d 20 7d 0a 09 09 32 20 7b 20 72 65 74  ws]] }...2 { ret
200b0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
200c0 73 20 3c 74 69 74 6c 65 3e 5d 20 7d 0a 09 09 33  s <title>] }...3
200d0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
200e0 61 79 48 69 6e 74 73 20 3c 74 65 78 74 3e 5d 20  ayHints <text>] 
200f0 7d 0a 09 09 34 20 7b 20 72 65 74 75 72 6e 20 5b  }...4 { return [
20100 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 42 69 74 6d  CompleteFromBitm
20110 61 70 73 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09  aps ${text}] }..
20120 09 35 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .5 { return [Dis
20130 70 6c 61 79 48 69 6e 74 73 20 3c 64 65 66 61 75  playHints <defau
20140 6c 74 49 6e 64 65 78 3e 5d 20 7d 0a 09 09 64 65  ltIndex>] }...de
20150 66 61 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b  fault { return [
20160 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 62 75  DisplayHints ?bu
20170 74 74 6f 6e 4e 61 6d 65 3f 5d 20 7d 0a 09 7d 0a  ttonName?] }..}.
20180 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
20190 28 74 6b 5f 66 6f 63 75 73 4e 65 78 74 29 20 7b  (tk_focusNext) {
201a0 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
201b0 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
201c0 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d  switch -- ${pos}
201d0 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20   {...1 { return 
201e0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
201f0 74 20 24 7b 74 65 78 74 7d 20 5b 57 69 64 67 65  t ${text} [Widge
20200 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74  tChildren ${text
20210 7d 5d 5d 20 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63  }]] }..}.}..proc
20220 20 63 6f 6d 70 6c 65 74 65 28 74 6b 5f 66 6f 63   complete(tk_foc
20230 75 73 50 72 65 76 29 20 7b 74 65 78 74 20 73 74  usPrev) {text st
20240 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
20250 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
20260 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20  -- ${pos} {...1 
20270 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
20280 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
20290 74 7d 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72  t} [WidgetChildr
202a0 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 20 7d 0a 09  en ${text}]] }..
202b0 7d 0a 7d 0a 0a 23 20 70 72 6f 63 20 63 6f 6d 70  }.}..# proc comp
202c0 6c 65 74 65 28 74 6b 5f 66 6f 63 75 73 46 6f 6c  lete(tk_focusFol
202d0 6c 6f 77 73 4d 6f 75 73 65 29 20 7b 74 65 78 74  lowsMouse) {text
202e0 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
202f0 70 6f 73 20 6d 6f 64 7d 20 7b 0a 23 20 7d 0a 0a  pos mod} {.# }..
20300 70 72 6f 63 20 47 65 74 4f 70 65 6e 53 61 76 65  proc GetOpenSave
20310 46 69 6c 65 20 7b 74 65 78 74 20 73 74 61 72 74  File {text start
20320 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
20330 64 20 7b 61 64 64 20 22 22 7d 7d 20 7b 0a 09 23  d {add ""}} {..#
20340 20 65 6e 61 62 6c 65 20 66 69 6c 65 6e 61 6d 65   enable filename
20350 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 66 6f 72 20   completion for 
20360 74 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 73  the first four s
20370 77 69 74 63 68 65 73 2e 0a 09 73 77 69 74 63 68  witches...switch
20380 20 2d 2d 20 5b 50 72 65 76 69 6f 75 73 57 6f 72   -- [PreviousWor
20390 64 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e  d ${start} ${lin
203a0 65 7d 5d 20 7b 0a 09 09 2d 64 65 66 61 75 6c 74  e}] {...-default
203b0 65 78 74 65 6e 73 69 6f 6e 20 7b 7d 0a 09 09 2d  extension {}...-
203c0 66 69 6c 65 74 79 70 65 73 20 7b 7d 0a 09 09 2d  filetypes {}...-
203d0 69 6e 69 74 69 61 6c 64 69 72 20 7b 7d 0a 09 09  initialdir {}...
203e0 2d 69 6e 69 74 69 61 6c 66 69 6c 65 20 7b 7d 0a  -initialfile {}.
203f0 09 09 2d 70 61 72 65 6e 74 20 7b 0a 09 09 09 72  ..-parent {....r
20400 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
20410 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
20420 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
20430 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 7d 0a 09 09  ${text}]]...}...
20440 2d 74 69 74 6c 65 20 7b 20 72 65 74 75 72 6e 20  -title { return 
20450 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74  [DisplayHints <t
20460 69 74 6c 65 53 74 72 69 6e 67 3e 5d 20 7d 0a 09  itleString>] }..
20470 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 72 65  .default {....re
20480 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
20490 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c  omList ${text} \
204a0 0a 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f  ....[RemoveUsedO
204b0 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 5b  ptions ${line} [
204c0 63 6f 6e 63 61 74 20 7b 0a 09 09 09 09 2d 64 65  concat {.....-de
204d0 66 61 75 6c 74 65 78 74 65 6e 73 69 6f 6e 20 2d  faultextension -
204e0 66 69 6c 65 74 79 70 65 73 20 2d 69 6e 69 74 69  filetypes -initi
204f0 61 6c 64 69 72 20 2d 70 61 72 65 6e 74 20 2d 74  aldir -parent -t
20500 69 74 6c 65 0a 09 09 09 7d 20 24 7b 61 64 64 7d  itle....} ${add}
20510 5d 5d 5d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72  ]]]...}..}.}..pr
20520 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74 6b 5f 67  oc complete(tk_g
20530 65 74 4f 70 65 6e 46 69 6c 65 29 20 7b 74 65 78  etOpenFile) {tex
20540 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
20550 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 72 65 74   pos mod} {..ret
20560 75 72 6e 20 5b 47 65 74 4f 70 65 6e 53 61 76 65  urn [GetOpenSave
20570 46 69 6c 65 20 5c 0a 09 24 7b 74 65 78 74 7d 20  File \..${text} 
20580 24 7b 73 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20  ${start} ${end} 
20590 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 24  ${line} ${pos} $
205a0 7b 6d 6f 64 7d 5d 0a 7d 0a 0a 70 72 6f 63 20 63  {mod}].}..proc c
205b0 6f 6d 70 6c 65 74 65 28 74 6b 5f 67 65 74 53 61  omplete(tk_getSa
205c0 76 65 46 69 6c 65 29 20 7b 74 65 78 74 20 73 74  veFile) {text st
205d0 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
205e0 20 6d 6f 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20   mod} {..return 
205f0 5b 47 65 74 4f 70 65 6e 53 61 76 65 46 69 6c 65  [GetOpenSaveFile
20600 20 5c 0a 09 24 7b 74 65 78 74 7d 20 24 7b 73 74   \..${text} ${st
20610 61 72 74 7d 20 24 7b 65 6e 64 7d 20 24 7b 6c 69  art} ${end} ${li
20620 6e 65 7d 20 24 7b 70 6f 73 7d 20 24 7b 6d 6f 64  ne} ${pos} ${mod
20630 7d 20 2d 69 6e 69 74 69 61 6c 66 69 6c 65 5d 0a  } -initialfile].
20640 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
20650 28 74 6b 5f 6d 65 73 73 61 67 65 42 6f 78 29 20  (tk_messageBox) 
20660 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
20670 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
20680 09 73 77 69 74 63 68 20 2d 2d 20 5b 50 72 65 76  .switch -- [Prev
20690 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74  iousWord ${start
206a0 7d 20 24 7b 6c 69 6e 65 7d 5d 20 7b 0a 09 09 2d  } ${line}] {...-
206b0 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 72 65 74  default {....ret
206c0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
206d0 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a  mList ${text} {.
206e0 09 09 09 09 61 62 6f 72 74 20 63 61 6e 63 65 6c  ....abort cancel
206f0 20 69 67 6e 6f 72 65 20 6e 6f 20 6f 6b 20 72 65   ignore no ok re
20700 74 72 79 20 79 65 73 0a 09 09 09 7d 5d 0a 09 09  try yes....}]...
20710 7d 0a 09 09 2d 69 63 6f 6e 20 7b 0a 09 09 09 72  }...-icon {....r
20720 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
20730 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
20740 7b 0a 09 09 09 09 65 72 72 6f 72 20 69 6e 66 6f  {.....error info
20750 20 71 75 65 73 74 69 6f 6e 20 77 61 72 6e 69 6e   question warnin
20760 67 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 09 2d 6d  g....}]...}...-m
20770 65 73 73 61 67 65 20 7b 20 72 65 74 75 72 6e 20  essage { return 
20780 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73  [DisplayHints <s
20790 74 72 69 6e 67 3e 5d 20 7d 0a 09 09 2d 70 61 72  tring>] }...-par
207a0 65 6e 74 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  ent {....return 
207b0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
207c0 74 20 24 7b 74 65 78 74 7d 20 5b 57 69 64 67 65  t ${text} [Widge
207d0 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74  tChildren ${text
207e0 7d 5d 5d 0a 09 09 7d 0a 09 09 2d 74 69 74 6c 65  }]]...}...-title
207f0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
20800 61 79 48 69 6e 74 73 20 3c 74 69 74 6c 65 53 74  ayHints <titleSt
20810 72 69 6e 67 3e 5d 20 7d 0a 09 09 2d 74 79 70 65  ring>] }...-type
20820 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f   {....return [Co
20830 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
20840 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 61 62 6f  {text} {.....abo
20850 72 74 72 65 74 72 79 69 67 6e 6f 72 65 20 6f 6b  rtretryignore ok
20860 20 6f 6b 63 61 6e 63 65 6c 20 72 65 74 72 79 63   okcancel retryc
20870 61 6e 63 65 6c 20 79 65 73 6e 6f 20 79 65 73 6e  ancel yesno yesn
20880 6f 63 61 6e 63 65 6c 0a 09 09 09 7d 5d 0a 09 09  ocancel....}]...
20890 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09  }...default {...
208a0 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
208b0 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
208c0 7d 20 5c 0a 09 09 09 5b 52 65 6d 6f 76 65 55 73  } \....[RemoveUs
208d0 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65  edOptions ${line
208e0 7d 20 7b 0a 09 09 09 09 2d 64 65 66 61 75 6c 74  } {.....-default
208f0 20 2d 69 63 6f 6e 20 2d 6d 65 73 73 61 67 65 20   -icon -message 
20900 2d 70 61 72 65 6e 74 20 2d 74 69 74 6c 65 20 2d  -parent -title -
20910 74 79 70 65 0a 09 09 09 7d 5d 5d 0a 09 09 7d 0a  type....}]]...}.
20920 09 7d 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  .}.}..proc compl
20930 65 74 65 28 74 6b 5f 6f 70 74 69 6f 6e 4d 65 6e  ete(tk_optionMen
20940 75 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  u) {text start e
20950 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
20960 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b   {..switch -- ${
20970 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74  pos} {...1 { ret
20980 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c 6c 79 49  urn [EventuallyI
20990 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f 74 20  nsertLeadingDot 
209a0 24 7b 74 65 78 74 7d 20 3c 70 61 74 68 4e 61 6d  ${text} <pathNam
209b0 65 3e 5d 20 7d 0a 09 09 32 20 7b 20 72 65 74 75  e>] }...2 { retu
209c0 72 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f  rn [VarCompletio
209d0 6e 20 24 7b 74 65 78 74 7d 20 23 30 5d 20 7d 0a  n ${text} #0] }.
209e0 09 09 33 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..3 { return [Di
209f0 73 70 6c 61 79 48 69 6e 74 73 20 3c 76 61 6c 75  splayHints <valu
20a00 65 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74 20  e>] }...default 
20a10 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
20a20 79 48 69 6e 74 73 20 3f 76 61 6c 75 65 3f 5d 20  yHints ?value?] 
20a30 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d  }..}.}..proc com
20a40 70 6c 65 74 65 28 74 6b 5f 70 6f 70 75 70 29 20  plete(tk_popup) 
20a50 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
20a60 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
20a70 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73  .switch -- ${pos
20a80 7d 20 7b 0a 09 09 31 20 7b 0a 09 09 09 23 20 64  } {...1 {....# d
20a90 69 73 70 6c 61 79 20 6f 6e 6c 79 20 6d 65 6e 75  isplay only menu
20aa0 20 77 69 64 67 65 74 73 0a 09 09 09 23 0a 09 09   widgets....#...
20ab0 09 73 65 74 20 77 69 64 67 65 74 73 20 5b 57 69  .set widgets [Wi
20ac0 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74  dgetChildren ${t
20ad0 65 78 74 7d 5d 0a 09 09 09 73 65 74 20 6d 65 6e  ext}]....set men
20ae0 75 5f 77 69 64 67 65 74 73 20 22 22 0a 09 09 09  u_widgets ""....
20af0 66 6f 72 65 61 63 68 20 77 69 64 67 65 74 20 24  foreach widget $
20b00 7b 77 69 64 67 65 74 73 7d 20 7b 0a 09 09 09 09  {widgets} {.....
20b10 69 66 20 7b 22 4d 65 6e 75 22 20 3d 3d 20 5b 77  if {"Menu" == [w
20b20 69 6e 66 6f 20 63 6c 61 73 73 20 24 7b 77 69 64  info class ${wid
20b30 67 65 74 7d 5d 7d 20 7b 0a 09 09 09 09 09 6c 61  get}]} {......la
20b40 70 70 65 6e 64 20 6d 65 6e 75 5f 77 69 64 67 65  ppend menu_widge
20b50 74 73 20 24 7b 77 69 64 67 65 74 7d 0a 09 09 09  ts ${widget}....
20b60 09 7d 0a 09 09 09 7d 0a 09 09 09 69 66 20 7b 5b  .}....}....if {[
20b70 6c 6c 65 6e 67 74 68 20 24 7b 6d 65 6e 75 5f 77  llength ${menu_w
20b80 69 64 67 65 74 73 7d 5d 7d 20 7b 0a 09 09 09 09  idgets}]} {.....
20b90 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c  return [TryFromL
20ba0 69 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 6d 65  ist ${text} ${me
20bb0 6e 75 5f 77 69 64 67 65 74 73 7d 5d 0a 09 09 09  nu_widgets}]....
20bc0 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 72 65 74  } else {.....ret
20bd0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
20be0 73 20 3c 6d 65 6e 75 3e 5d 0a 09 09 09 7d 0a 09  s <menu>]....}..
20bf0 09 7d 0a 09 09 32 20 7b 20 72 65 74 75 72 6e 20  .}...2 { return 
20c00 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 78  [DisplayHints <x
20c10 3e 5d 20 7d 0a 09 09 33 20 7b 20 72 65 74 75 72  >] }...3 { retur
20c20 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
20c30 3c 79 3e 5d 20 7d 0a 09 09 34 20 7b 20 72 65 74  <y>] }...4 { ret
20c40 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
20c50 73 20 3f 65 6e 74 72 79 49 6e 64 65 78 3f 5d 20  s ?entryIndex?] 
20c60 7d 0a 09 7d 0a 7d 0a 0a 23 20 54 4f 44 4f 3a 20  }..}.}..# TODO: 
20c70 74 68 65 20 6e 61 6d 65 20 2d 20 76 61 6c 75 65  the name - value
20c80 20 63 6f 6e 73 74 72 75 63 74 20 64 69 64 6e 27   construct didn'
20c90 74 20 77 6f 72 6b 20 69 6e 20 6d 79 20 77 69 73  t work in my wis
20ca0 68 2e 0a 23 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  h..#.proc comple
20cb0 74 65 28 74 6b 5f 73 65 74 50 61 6c 65 74 74 65  te(tk_setPalette
20cc0 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
20cd0 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
20ce0 7b 0a 09 73 65 74 20 64 61 74 61 62 61 73 65 20  {..set database 
20cf0 7b 0a 09 09 61 63 74 69 76 65 42 61 63 6b 67 72  {...activeBackgr
20d00 6f 75 6e 64 20 20 20 20 20 20 20 20 66 6f 72 65  ound        fore
20d10 67 72 6f 75 6e 64 20 20 20 20 20 20 20 20 20 20  ground          
20d20 20 20 20 20 73 65 6c 65 63 74 43 6f 6c 6f 72 0a      selectColor.
20d30 09 09 61 63 74 69 76 65 46 6f 72 65 67 72 6f 75  ..activeForegrou
20d40 6e 64 20 20 20 20 20 20 20 20 68 69 67 68 6c 69  nd        highli
20d50 67 68 74 42 61 63 6b 67 72 6f 75 6e 64 20 20 20  ghtBackground   
20d60 20 20 73 65 6c 65 63 74 42 61 63 6b 67 72 6f 75    selectBackgrou
20d70 6e 64 0a 09 09 62 61 63 6b 67 72 6f 75 6e 64 20  nd...background 
20d80 20 20 20 20 20 20 20 20 20 20 20 20 20 68 69 67               hig
20d90 68 6c 69 67 68 74 43 6f 6c 6f 72 20 20 20 20 20  hlightColor     
20da0 20 20 20 20 20 73 65 6c 65 63 74 46 6f 72 65 67       selectForeg
20db0 72 6f 75 6e 64 0a 09 09 64 69 73 61 62 6c 65 64  round...disabled
20dc0 46 6f 72 65 67 72 6f 75 6e 64 20 20 20 20 20 20  Foreground      
20dd0 69 6e 73 65 72 74 42 61 63 6b 67 72 6f 75 6e 64  insertBackground
20de0 20 20 20 20 20 20 20 20 74 72 6f 75 67 68 43 6f          troughCo
20df0 6c 6f 72 0a 09 7d 0a 09 73 77 69 74 63 68 20 2d  lor..}..switch -
20e00 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b  - ${pos} {...1 {
20e10 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
20e20 6c 65 74 65 43 6f 6c 6f 72 20 24 7b 74 65 78 74  leteColor ${text
20e30 7d 20 24 7b 64 61 74 61 62 61 73 65 7d 5d 0a 09  } ${database}]..
20e40 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  .}...default {..
20e50 09 09 73 77 69 74 63 68 20 5b 65 78 70 72 20 24  ..switch [expr $
20e60 7b 70 6f 73 7d 20 25 20 32 5d 20 7b 0a 09 09 09  {pos} % 2] {....
20e70 09 31 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  .1 {......return
20e80 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
20e90 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 64 61 74  st ${text} ${dat
20ea0 61 62 61 73 65 7d 5d 0a 09 09 09 09 7d 0a 09 09  abase}].....}...
20eb0 09 09 30 20 7b 0a 09 09 09 09 09 72 65 74 75 72  ..0 {......retur
20ec0 6e 20 5b 43 6f 6d 70 6c 65 74 65 43 6f 6c 6f 72  n [CompleteColor
20ed0 20 24 7b 74 65 78 74 7d 5d 0a 09 09 09 09 7d 0a   ${text}].....}.
20ee0 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70  ...}...}..}.}..p
20ef0 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74 6b 77  roc complete(tkw
20f00 61 69 74 29 20 7b 74 65 78 74 20 73 74 61 72 74  ait) {text start
20f10 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
20f20 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20  d} {..switch -- 
20f30 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a 09  ${pos} {...1 {..
20f40 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
20f50 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
20f60 74 7d 20 7b 0a 09 09 09 09 76 61 72 69 61 62 6c  t} {.....variabl
20f70 65 20 76 69 73 69 62 69 6c 69 74 79 20 77 69 6e  e visibility win
20f80 64 6f 77 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 09  dow....}]...}...
20f90 32 20 7b 0a 09 09 09 73 77 69 74 63 68 20 5b 4c  2 {....switch [L
20fa0 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d  index ${line} 1]
20fb0 20 7b 0a 09 09 09 09 76 61 72 69 61 62 6c 65 20   {.....variable 
20fc0 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 56  {......return [V
20fd0 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 74  arCompletion ${t
20fe0 65 78 74 7d 20 23 30 5d 0a 09 09 09 09 7d 0a 09  ext} #0].....}..
20ff0 09 09 09 76 69 73 69 62 69 6c 69 74 79 20 2d 0a  ...visibility -.
21000 09 09 09 09 77 69 6e 64 6f 77 20 7b 0a 09 09 09  ....window {....
21010 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f  ..return [TryFro
21020 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 57  mList ${text} [W
21030 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b  idgetChildren ${
21040 74 65 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09  text}]].....}...
21050 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f  .}...}..}.}..pro
21060 63 20 63 6f 6d 70 6c 65 74 65 28 74 6f 70 6c 65  c complete(tople
21070 76 65 6c 29 20 7b 74 65 78 74 20 73 74 61 72 74  vel) {text start
21080 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
21090 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20  d} {..switch -- 
210a0 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72  ${pos} {...1 { r
210b0 65 74 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c 6c  eturn [Eventuall
210c0 79 49 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f  yInsertLeadingDo
210d0 74 20 24 7b 74 65 78 74 7d 20 3c 70 61 74 68 4e  t ${text} <pathN
210e0 61 6d 65 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c  ame>] }...defaul
210f0 74 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43  t {....return [C
21100 6f 6d 70 6c 65 74 65 57 69 64 67 65 74 43 6f 6e  ompleteWidgetCon
21110 66 69 67 75 72 61 74 69 6f 6e 73 20 24 7b 74 65  figurations ${te
21120 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c  xt} ${start} ${l
21130 69 6e 65 7d 20 7b 0a 09 09 09 09 2d 62 6f 72 64  ine} {.....-bord
21140 65 72 77 69 64 74 68 20 2d 63 75 72 73 6f 72 20  erwidth -cursor 
21150 2d 68 69 67 68 6c 69 67 68 74 62 61 63 6b 67 72  -highlightbackgr
21160 6f 75 6e 64 20 2d 68 69 67 68 6c 69 67 68 74 63  ound -highlightc
21170 6f 6c 6f 72 0a 09 09 09 09 2d 68 69 67 68 6c 69  olor.....-highli
21180 67 68 74 74 68 69 63 6b 6e 65 73 73 20 2d 72 65  ghtthickness -re
21190 6c 69 65 66 20 2d 74 61 6b 65 66 6f 63 75 73 20  lief -takefocus 
211a0 2d 62 61 63 6b 67 72 6f 75 6e 64 0a 09 09 09 09  -background.....
211b0 2d 63 6c 61 73 73 20 2d 63 6f 6c 6f 72 6d 61 70  -class -colormap
211c0 20 2d 63 6f 6e 74 61 69 6e 65 72 20 2d 68 65 69   -container -hei
211d0 67 68 74 20 2d 6d 65 6e 75 20 2d 73 63 72 65 65  ght -menu -scree
211e0 6e 0a 09 09 09 09 2d 75 73 65 20 2d 76 69 73 75  n.....-use -visu
211f0 61 6c 20 2d 77 69 64 74 68 0a 09 09 09 7d 5d 0a  al -width....}].
21200 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
21210 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
21220 74 65 28 77 69 6e 66 6f 29 20 7b 74 65 78 74 20  te(winfo) {text 
21230 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
21240 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 73  os mod} {..set s
21250 75 62 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e  ub [Lindex ${lin
21260 65 7d 20 31 5d 0a 09 73 77 69 74 63 68 20 2d 2d  e} 1]..switch --
21270 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a   ${pos} {...1 {.
21280 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79 53 75  ...return [TrySu
21290 62 43 6d 64 73 20 24 7b 74 65 78 74 7d 20 77 69  bCmds ${text} wi
212a0 6e 66 6f 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09  nfo]...}...2 {..
212b0 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75  ..switch -- ${su
212c0 62 7d 20 7b 0a 09 09 09 09 61 74 6f 6d 20 7b 0a  b} {.....atom {.
212d0 09 09 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79  .....return [Try
212e0 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
212f0 20 7b 2d 64 69 73 70 6c 61 79 6f 66 20 3c 6e 61   {-displayof <na
21300 6d 65 3e 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 09  me>}].....}.....
21310 63 6f 6e 74 61 69 6e 69 6e 67 20 7b 0a 09 09 09  containing {....
21320 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f  ..return [TryFro
21330 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 2d  mList ${text} {-
21340 64 69 73 70 6c 61 79 6f 66 20 3c 72 6f 6f 74 58  displayof <rootX
21350 3e 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 69 6e  >}].....}.....in
21360 74 65 72 70 73 20 7b 0a 09 09 09 09 09 72 65 74  terps {......ret
21370 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74  urn [TryFromList
21380 20 24 7b 74 65 78 74 7d 20 2d 64 69 73 70 6c 61   ${text} -displa
21390 79 6f 66 5d 0a 09 09 09 09 7d 0a 09 09 09 09 61  yof].....}.....a
213a0 74 6f 6d 6e 61 6d 65 20 2d 0a 09 09 09 09 70 61  tomname -.....pa
213b0 74 68 6e 61 6d 65 20 7b 0a 09 09 09 09 09 72 65  thname {......re
213c0 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73  turn [TryFromLis
213d0 74 20 24 7b 74 65 78 74 7d 20 7b 2d 64 69 73 70  t ${text} {-disp
213e0 6c 61 79 6f 66 20 3c 69 64 3e 7d 5d 0a 09 09 09  layof <id>}]....
213f0 09 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b  .}.....default {
21400 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 54 72  ......return [Tr
21410 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  yFromList ${text
21420 7d 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65  } [WidgetChildre
21430 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09  n ${text}]].....
21440 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 64 65 66  }....}...}...def
21450 61 75 6c 74 20 7b 0a 09 09 09 73 77 69 74 63 68  ault {....switch
21460 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09   -- ${sub} {....
21470 09 61 74 6f 6d 20 7b 0a 09 09 09 09 09 73 77 69  .atom {......swi
21480 74 63 68 20 2d 2d 20 5b 50 72 65 76 69 6f 75 73  tch -- [Previous
21490 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b  Word ${start} ${
214a0 6c 69 6e 65 7d 5d 20 7b 0a 09 09 09 09 09 09 2d  line}] {.......-
214b0 64 69 73 70 6c 61 79 6f 66 20 7b 0a 09 09 09 09  displayof {.....
214c0 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72  ...return [TryFr
214d0 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c  omList ${text} \
214e0 0a 09 09 09 09 09 09 09 5b 57 69 64 67 65 74 43  ........[WidgetC
214f0 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d  hildren ${text}]
21500 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 09  ].......}.......
21510 64 65 66 61 75 6c 74 20 7b 20 72 65 74 75 72 6e  default { return
21520 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
21530 6e 61 6d 65 3e 5d 20 7d 0a 09 09 09 09 09 7d 0a  name>] }......}.
21540 09 09 09 09 7d 0a 09 09 09 09 63 6f 6e 74 61 69  ....}.....contai
21550 6e 69 6e 67 20 7b 0a 09 09 09 09 09 73 77 69 74  ning {......swit
21560 63 68 20 2d 2d 20 5b 4c 69 6e 64 65 78 20 24 7b  ch -- [Lindex ${
21570 6c 69 6e 65 7d 20 32 5d 20 7b 0a 09 09 09 09 09  line} 2] {......
21580 09 2d 64 69 73 70 6c 61 79 6f 66 20 7b 0a 09 09  .-displayof {...
21590 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  .....switch -- $
215a0 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 09 09 09 09  {pos} {.........
215b0 33 20 7b 0a 09 09 09 09 09 09 09 09 09 72 65 74  3 {..........ret
215c0 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74  urn [TryFromList
215d0 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09   ${text} \......
215e0 09 09 09 09 5b 57 69 64 67 65 74 43 68 69 6c 64  ....[WidgetChild
215f0 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09  ren ${text}]]...
21600 09 09 09 09 09 09 7d 0a 09 09 09 09 09 09 09 09  ......}.........
21610 34 20 7b 0a 09 09 09 09 09 09 09 09 09 72 65 74  4 {..........ret
21620 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
21630 73 20 3c 72 6f 6f 74 58 3e 5d 0a 09 09 09 09 09  s <rootX>]......
21640 09 09 09 7d 0a 09 09 09 09 09 09 09 09 35 20 7b  ...}.........5 {
21650 0a 09 09 09 09 09 09 09 09 09 72 65 74 75 72 6e  ..........return
21660 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
21670 72 6f 6f 74 59 3e 5d 0a 09 09 09 09 09 09 09 09  rootY>].........
21680 7d 0a 09 09 09 09 09 09 09 7d 0a 09 09 09 09 09  }........}......
21690 09 7d 0a 09 09 09 09 09 09 64 65 66 61 75 6c 74  .}.......default
216a0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
216b0 61 79 48 69 6e 74 73 20 3c 72 6f 6f 74 59 3e 5d  ayHints <rootY>]
216c0 20 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a   }......}.....}.
216d0 09 09 09 09 69 6e 74 65 72 70 73 20 7b 0a 09 09  ....interps {...
216e0 09 09 09 73 77 69 74 63 68 20 2d 2d 20 5b 50 72  ...switch -- [Pr
216f0 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61  eviousWord ${sta
21700 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 20 7b 0a 09  rt} ${line}] {..
21710 09 09 09 09 09 2d 64 69 73 70 6c 61 79 6f 66 20  .....-displayof 
21720 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e 20  {........return 
21730 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74  [TryFromList ${t
21740 65 78 74 7d 20 5c 0a 09 09 09 09 09 09 09 5b 57  ext} \........[W
21750 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b  idgetChildren ${
21760 74 65 78 74 7d 5d 5d 0a 09 09 09 09 09 09 7d 0a  text}]].......}.
21770 09 09 09 09 09 09 64 65 66 61 75 6c 74 20 7b 7d  ......default {}
21780 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09  ......}.....}...
21790 09 09 61 74 6f 6d 6e 61 6d 65 20 2d 0a 09 09 09  ..atomname -....
217a0 09 70 61 74 68 6e 61 6d 65 20 7b 0a 09 09 09 09  .pathname {.....
217b0 09 73 77 69 74 63 68 20 2d 2d 20 5b 50 72 65 76  .switch -- [Prev
217c0 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74  iousWord ${start
217d0 7d 20 24 7b 6c 69 6e 65 7d 5d 20 7b 0a 09 09 09  } ${line}] {....
217e0 09 09 09 2d 64 69 73 70 6c 61 79 6f 66 20 7b 0a  ...-displayof {.
217f0 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 54  .......return [T
21800 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  ryFromList ${tex
21810 74 7d 20 5c 0a 09 09 09 09 09 09 09 5b 57 69 64  t} \........[Wid
21820 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65  getChildren ${te
21830 78 74 7d 5d 5d 0a 09 09 09 09 09 09 7d 0a 09 09  xt}]].......}...
21840 09 09 09 09 64 65 66 61 75 6c 74 20 7b 20 72 65  ....default { re
21850 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
21860 74 73 20 3c 69 64 3e 5d 20 7d 0a 09 09 09 09 09  ts <id>] }......
21870 7d 0a 09 09 09 09 7d 0a 09 09 09 09 76 69 73 75  }.....}.....visu
21880 61 6c 73 61 76 61 69 6c 61 62 6c 65 20 7b 20 72  alsavailable { r
21890 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
218a0 6e 74 73 20 3f 69 6e 63 6c 75 64 65 69 64 73 3f  nts ?includeids?
218b0 5d 20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20  ] }.....default 
218c0 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 54  {......return [T
218d0 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  ryFromList ${tex
218e0 74 7d 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72  t} [WidgetChildr
218f0 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09  en ${text}]]....
21900 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09  .}....}...}..}..
21910 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f  return "".}..pro
21920 63 20 63 6f 6d 70 6c 65 74 65 28 77 6d 29 20 7b  c complete(wm) {
21930 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
21940 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
21950 73 65 74 20 73 75 62 20 5b 4c 69 6e 64 65 78 20  set sub [Lindex 
21960 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73 77 69 74  ${line} 1]..swit
21970 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09  ch -- ${pos} {..
21980 09 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b  .1 {....return [
21990 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
219a0 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 61   ${text} {.....a
219b0 73 70 65 63 74 20 63 6c 69 65 6e 74 20 63 6f 6c  spect client col
219c0 6f 72 6d 61 70 77 69 6e 64 6f 77 73 20 63 6f 6d  ormapwindows com
219d0 6d 61 6e 64 20 64 65 69 63 6f 6e 69 66 79 20 66  mand deiconify f
219e0 6f 63 75 73 6d 6f 64 65 6c 0a 09 09 09 09 66 72  ocusmodel.....fr
219f0 61 6d 65 20 67 65 6f 6d 65 74 72 79 20 67 72 69  ame geometry gri
21a00 64 20 67 72 6f 75 70 20 69 63 6f 6e 62 69 74 6d  d group iconbitm
21a10 61 70 20 69 63 6f 6e 69 66 79 20 69 63 6f 6e 6d  ap iconify iconm
21a20 61 73 6b 20 69 63 6f 6e 6e 61 6d 65 0a 09 09 09  ask iconname....
21a30 09 69 63 6f 6e 70 6f 73 69 74 69 6f 6e 20 69 63  .iconposition ic
21a40 6f 6e 77 69 6e 64 6f 77 20 6d 61 78 73 69 7a 65  onwindow maxsize
21a50 20 6d 69 6e 73 69 7a 65 20 6f 76 65 72 72 69 64   minsize overrid
21a60 65 72 65 64 69 72 65 63 74 0a 09 09 09 09 70 6f  eredirect.....po
21a70 73 69 74 69 6f 6e 66 72 6f 6d 20 70 72 6f 74 6f  sitionfrom proto
21a80 63 6f 6c 20 72 65 73 69 7a 61 62 6c 65 20 73 69  col resizable si
21a90 7a 65 66 72 6f 6d 20 73 74 61 74 65 20 74 69 74  zefrom state tit
21aa0 6c 65 20 74 72 61 6e 73 69 65 6e 74 0a 09 09 09  le transient....
21ab0 09 77 69 74 68 64 72 61 77 0a 09 09 09 7d 5d 0a  .withdraw....}].
21ac0 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09 72 65 74  ..}...2 {....ret
21ad0 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74  urn [TryFromList
21ae0 20 24 7b 74 65 78 74 7d 20 5b 54 6f 70 6c 65 76   ${text} [Toplev
21af0 65 6c 57 69 6e 64 6f 77 73 5d 5d 0a 09 09 7d 0a  elWindows]]...}.
21b00 09 09 33 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ..3 {....switch 
21b10 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09  -- ${sub} {.....
21b20 61 73 70 65 63 74 20 7b 20 72 65 74 75 72 6e 20  aspect { return 
21b30 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 6d  [DisplayHints ?m
21b40 69 6e 4e 75 6d 65 72 3f 5d 20 7d 0a 09 09 09 09  inNumer?] }.....
21b50 63 6c 69 65 6e 74 20 7b 20 72 65 74 75 72 6e 20  client { return 
21b60 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 6e  [DisplayHints ?n
21b70 61 6d 65 3f 5d 20 7d 0a 09 09 09 09 63 6f 6c 6f  ame?] }.....colo
21b80 72 6d 61 70 77 69 6e 64 6f 77 73 20 7b 0a 09 09  rmapwindows {...
21b90 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
21ba0 65 74 65 4c 69 73 74 46 72 6f 6d 4c 69 73 74 20  eteListFromList 
21bb0 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b  ${text} \......[
21bc0 73 74 72 69 6e 67 20 74 72 69 6d 6c 65 66 74 20  string trimleft 
21bd0 5b 49 6e 63 6f 6d 70 6c 65 74 65 4c 69 73 74 52  [IncompleteListR
21be0 65 6d 61 69 6e 64 65 72 20 24 7b 6c 69 6e 65 7d  emainder ${line}
21bf0 5d 5d 20 5c 0a 09 09 09 09 09 5b 57 69 64 67 65  ]] \......[Widge
21c00 74 43 68 69 6c 64 72 65 6e 20 2e 5d 20 5c 7b 20  tChildren .] \{ 
21c10 7b 20 7d 20 5c 7d 5d 0a 09 09 09 09 7d 0a 09 09  { } \}].....}...
21c20 09 09 63 6f 6d 6d 61 6e 64 20 7b 20 72 65 74 75  ..command { retu
21c30 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
21c40 20 3f 76 61 6c 75 65 3f 5d 20 7d 0a 09 09 09 09   ?value?] }.....
21c50 66 6f 63 75 73 6d 6f 64 65 6c 20 7b 0a 09 09 09  focusmodel {....
21c60 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
21c70 74 65 4c 69 73 74 46 72 6f 6d 4c 69 73 74 20 24  teListFromList $
21c80 7b 74 65 78 74 7d 20 7b 61 63 74 69 76 65 20 70  {text} {active p
21c90 61 73 73 69 76 65 7d 5d 0a 09 09 09 09 7d 0a 09  assive}].....}..
21ca0 09 09 09 67 65 6f 6d 65 74 72 79 20 7b 0a 09 09  ...geometry {...
21cb0 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  ...return [Displ
21cc0 61 79 48 69 6e 74 73 20 3f 3c 77 69 64 74 68 3e  ayHints ?<width>
21cd0 78 3c 68 65 69 67 68 74 3e 2b 2d 3c 78 3e 2b 2d  x<height>+-<x>+-
21ce0 3c 79 3e 3f 5d 0a 09 09 09 09 7d 0a 09 09 09 09  <y>?].....}.....
21cf0 67 72 69 64 20 7b 20 72 65 74 75 72 6e 20 5b 44  grid { return [D
21d00 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 62 61 73  isplayHints ?bas
21d10 65 57 69 64 74 68 3f 5d 20 7d 0a 09 09 09 09 67  eWidth?] }.....g
21d20 72 6f 75 70 20 7b 0a 09 09 09 09 09 72 65 74 75  roup {......retu
21d30 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20  rn [TryFromList 
21d40 24 7b 74 65 78 74 7d 20 5b 57 69 64 67 65 74 43  ${text} [WidgetC
21d50 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d  hildren ${text}]
21d60 5d 0a 09 09 09 09 7d 0a 09 09 09 09 69 63 6f 6e  ].....}.....icon
21d70 62 69 74 6d 61 70 20 2d 0a 09 09 09 09 69 63 6f  bitmap -.....ico
21d80 6e 6d 61 73 6b 20 7b 20 72 65 74 75 72 6e 20 5b  nmask { return [
21d90 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 42 69 74 6d  CompleteFromBitm
21da0 61 70 73 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09  aps ${text}] }..
21db0 09 09 09 69 63 6f 6e 6e 61 6d 65 20 7b 20 72 65  ...iconname { re
21dc0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
21dd0 74 73 20 3f 6e 65 77 4e 61 6d 65 3f 5d 20 7d 0a  ts ?newName?] }.
21de0 09 09 09 09 69 63 6f 6e 70 6f 73 69 74 69 6f 6e  ....iconposition
21df0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
21e00 61 79 48 69 6e 74 73 20 3f 78 3f 5d 20 7d 0a 09  ayHints ?x?] }..
21e10 09 09 09 69 63 6f 6e 77 69 6e 64 6f 77 20 7b 0a  ...iconwindow {.
21e20 09 09 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79  .....return [Try
21e30 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
21e40 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e   [WidgetChildren
21e50 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 7d   ${text}]].....}
21e60 0a 09 09 09 09 6d 61 78 73 69 7a 65 20 2d 0a 09  .....maxsize -..
21e70 09 09 09 6d 69 6e 73 69 7a 65 20 7b 20 72 65 74  ...minsize { ret
21e80 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
21e90 73 20 3f 77 69 64 74 68 3f 5d 20 7d 0a 09 09 09  s ?width?] }....
21ea0 09 6f 76 65 72 72 69 64 65 72 65 64 69 72 65 63  .overrideredirec
21eb0 74 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  t { return [Comp
21ec0 6c 65 74 65 42 6f 6f 6c 65 61 6e 20 24 7b 74 65  leteBoolean ${te
21ed0 78 74 7d 5d 20 7d 0a 09 09 09 09 70 6f 73 69 74  xt}] }.....posit
21ee0 69 6f 6e 66 72 6f 6d 20 2d 0a 09 09 09 09 73 69  ionfrom -.....si
21ef0 7a 65 66 72 6f 6d 20 7b 0a 09 09 09 09 09 72 65  zefrom {......re
21f00 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
21f10 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b  omList ${text} {
21f20 70 6f 73 69 74 69 6f 6e 20 75 73 65 72 7d 5d 0a  position user}].
21f30 09 09 09 09 7d 0a 09 09 09 09 70 72 6f 74 6f 63  ....}.....protoc
21f40 6f 6c 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  ol {......return
21f50 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
21f60 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09  st ${text} {....
21f70 09 09 09 57 4d 5f 54 41 4b 45 5f 46 4f 43 55 53  ...WM_TAKE_FOCUS
21f80 20 57 4d 5f 53 41 56 45 5f 59 4f 55 52 53 45 4c   WM_SAVE_YOURSEL
21f90 46 20 57 4d 5f 44 45 4c 45 54 45 5f 57 49 4e 44  F WM_DELETE_WIND
21fa0 4f 57 0a 09 09 09 09 09 7d 5d 0a 09 09 09 09 7d  OW......}].....}
21fb0 0a 09 09 09 09 72 65 73 69 7a 61 62 6c 65 20 7b  .....resizable {
21fc0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
21fd0 48 69 6e 74 73 20 3f 77 69 64 74 68 3f 5d 20 7d  Hints ?width?] }
21fe0 0a 09 09 09 09 74 69 74 6c 65 20 7b 20 72 65 74  .....title { ret
21ff0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
22000 73 20 3f 73 74 72 69 6e 67 3f 5d 20 7d 0a 09 09  s ?string?] }...
22010 09 09 74 72 61 6e 73 69 65 6e 74 20 7b 0a 09 09  ..transient {...
22020 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72  ...return [TryFr
22030 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b  omList ${text} [
22040 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
22050 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a 09  {text}]].....}..
22060 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09  ...default {....
22070 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f  ..return [TryFro
22080 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 54  mList ${text} [T
22090 6f 70 6c 65 76 65 6c 57 69 6e 64 6f 77 73 5d 5d  oplevelWindows]]
220a0 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a  .....}....}...}.
220b0 09 09 34 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ..4 {....switch 
220c0 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09  -- ${sub} {.....
220d0 61 73 70 65 63 74 20 7b 20 72 65 74 75 72 6e 20  aspect { return 
220e0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 6d  [DisplayHints ?m
220f0 69 6e 44 65 6e 6f 6d 3f 5d 20 7d 0a 09 09 09 09  inDenom?] }.....
22100 67 72 69 64 20 7b 20 72 65 74 75 72 6e 20 5b 44  grid { return [D
22110 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 62 61 73  isplayHints ?bas
22120 65 48 65 69 67 68 74 3f 5d 20 7d 0a 09 09 09 09  eHeight?] }.....
22130 69 63 6f 6e 70 6f 73 69 74 69 6f 6e 20 7b 20 72  iconposition { r
22140 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
22150 6e 74 73 20 3f 79 3f 5d 20 7d 0a 09 09 09 09 6d  nts ?y?] }.....m
22160 61 78 73 69 7a 65 20 2d 0a 09 09 09 09 6d 69 6e  axsize -.....min
22170 73 69 7a 65 20 7b 20 72 65 74 75 72 6e 20 5b 44  size { return [D
22180 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 68 65 69  isplayHints ?hei
22190 67 68 74 3f 5d 20 7d 0a 09 09 09 09 70 72 6f 74  ght?] }.....prot
221a0 6f 63 6f 6c 20 7b 0a 09 09 09 09 09 72 65 74 75  ocol {......retu
221b0 72 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61  rn [BraceOrComma
221c0 6e 64 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09  nd ${text} \....
221d0 09 09 24 7b 73 74 61 72 74 7d 20 24 7b 65 6e 64  ..${start} ${end
221e0 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d  } ${line} ${pos}
221f0 20 24 7b 6d 6f 64 7d 5d 0a 09 09 09 09 7d 0a 09   ${mod}].....}..
22200 09 09 09 72 65 73 69 7a 61 62 6c 65 20 7b 20 72  ...resizable { r
22210 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
22220 6e 74 73 20 3f 68 65 69 67 68 74 3f 5d 20 7d 0a  nts ?height?] }.
22230 09 09 09 7d 0a 09 09 7d 0a 09 09 35 20 7b 0a 09  ...}...}...5 {..
22240 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75  ..switch -- ${su
22250 62 7d 20 7b 0a 09 09 09 09 61 73 70 65 63 74 20  b} {.....aspect 
22260 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
22270 79 48 69 6e 74 73 20 3f 6d 61 78 4e 75 6d 65 72  yHints ?maxNumer
22280 3f 5d 20 7d 0a 09 09 09 09 67 72 69 64 20 7b 20  ?] }.....grid { 
22290 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
222a0 69 6e 74 73 20 3f 77 69 64 74 68 49 6e 63 3f 5d  ints ?widthInc?]
222b0 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 36 20   }....}...}...6 
222c0 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  {....switch -- $
222d0 7b 73 75 62 7d 20 7b 0a 09 09 09 09 61 73 70 65  {sub} {.....aspe
222e0 63 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  ct { return [Dis
222f0 70 6c 61 79 48 69 6e 74 73 20 3f 6d 61 78 44 65  playHints ?maxDe
22300 6e 6f 6d 3f 5d 20 7d 0a 09 09 09 09 67 72 69 64  nom?] }.....grid
22310 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
22320 61 79 48 69 6e 74 73 20 3f 68 65 69 67 68 74 49  ayHints ?heightI
22330 6e 63 3f 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a  nc?] }....}...}.
22340 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
22350 0a 23 20 3d 3d 3d 3d 20 4f 62 6a 43 6d 64 20 63  .# ==== ObjCmd c
22360 6f 6d 70 6c 65 74 65 72 73 20 3d 3d 3d 3d 3d 3d  ompleters ======
22370 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
22380 3d 3d 3d 3d 0a 23 0a 23 20 40 6e 6f 74 65 20 77  ====.#.# @note w
22390 68 65 6e 20 61 20 70 72 6f 63 20 69 73 20 63 6f  hen a proc is co
223a0 6d 6d 65 6e 74 65 64 20 6f 75 74 2c 20 74 68 65  mmented out, the
223b0 20 66 61 6c 6c 62 61 63 6b 0a 23 20 20 20 20 20   fallback.#     
223c0 20 20 63 6f 6d 70 6c 65 74 65 72 73 20 64 6f 20    completers do 
223d0 74 68 65 20 6a 6f 62 20 72 61 74 68 65 72 20 77  the job rather w
223e0 65 6c 6c 2e 0a 23 0a 23 20 3d 3d 3d 3d 3d 3d 3d  ell..#.# =======
223f0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
22400 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
22410 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 0a 23 20 70  ==========...# p
22420 72 6f 63 20 42 75 74 74 6f 6e 4f 62 6a 20 7b 74  roc ButtonObj {t
22430 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
22440 6e 65 20 70 6f 73 7d 20 7b 0a 23 20 09 72 65 74  ne pos} {.# .ret
22450 75 72 6e 20 22 22 0a 23 20 7d 0a 0a 70 72 6f 63  urn "".# }..proc
22460 20 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 42 69 74   CompleteFromBit
22470 6d 61 70 73 20 7b 74 65 78 74 20 7b 61 6c 77 61  maps {text {alwa
22480 79 73 20 31 7d 7d 20 7b 0a 09 73 65 74 20 69 6e  ys 1}} {..set in
22490 61 6d 65 73 20 5b 69 6d 61 67 65 20 6e 61 6d 65  ames [image name
224a0 73 5d 0a 09 73 65 74 20 62 69 74 6d 61 70 73 20  s]..set bitmaps 
224b0 22 22 0a 09 66 6f 72 65 61 63 68 20 6e 61 6d 65  ""..foreach name
224c0 20 24 69 6e 61 6d 65 73 20 7b 0a 09 09 69 66 20   $inames {...if 
224d0 7b 22 62 69 74 6d 61 70 22 20 3d 3d 20 5b 69 6d  {"bitmap" == [im
224e0 61 67 65 20 74 79 70 65 20 24 6e 61 6d 65 5d 7d  age type $name]}
224f0 20 7b 0a 09 09 09 6c 61 70 70 65 6e 64 20 62 69   {....lappend bi
22500 74 6d 61 70 73 20 24 7b 6e 61 6d 65 7d 0a 09 09  tmaps ${name}...
22510 7d 0a 09 7d 0a 09 69 66 20 7b 5b 73 74 72 69 6e  }..}..if {[strin
22520 67 20 6c 65 6e 67 74 68 20 24 7b 62 69 74 6d 61  g length ${bitma
22530 70 73 7d 5d 7d 20 7b 0a 09 09 72 65 74 75 72 6e  ps}]} {...return
22540 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
22550 73 74 20 5c 0a 09 09 24 7b 74 65 78 74 7d 20 24  st \...${text} $
22560 7b 62 69 74 6d 61 70 73 7d 5d 0a 09 7d 20 65 6c  {bitmaps}]..} el
22570 73 65 20 7b 0a 09 09 69 66 20 24 7b 61 6c 77 61  se {...if ${alwa
22580 79 73 7d 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  ys} {....return 
22590 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 62  [DisplayHints <b
225a0 69 74 6d 61 70 73 3e 5d 0a 09 09 7d 20 65 6c 73  itmaps>]...} els
225b0 65 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 22 22  e {....return ""
225c0 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20  ...}..}.}..proc 
225d0 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 49 6d 61 67  CompleteFromImag
225e0 65 73 20 7b 74 65 78 74 20 7b 61 6c 77 61 79 73  es {text {always
225f0 20 31 7d 7d 20 7b 0a 09 73 65 74 20 69 6e 61 6d   1}} {..set inam
22600 65 73 20 5b 69 6d 61 67 65 20 6e 61 6d 65 73 5d  es [image names]
22610 0a 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65  ..if {[string le
22620 6e 67 74 68 20 24 7b 69 6e 61 6d 65 73 7d 5d 7d  ngth ${inames}]}
22630 20 7b 0a 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d   {...return [Com
22640 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
22650 74 65 78 74 7d 20 24 7b 69 6e 61 6d 65 73 7d 5d  text} ${inames}]
22660 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66 20  ..} else {...if 
22670 24 7b 61 6c 77 61 79 73 7d 20 7b 0a 09 09 09 72  ${always} {....r
22680 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
22690 6e 74 73 20 3c 69 6d 61 67 65 3e 5d 0a 09 09 7d  nts <image>]...}
226a0 20 65 6c 73 65 20 7b 0a 09 09 09 72 65 74 75 72   else {....retur
226b0 6e 20 22 22 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70  n ""...}..}.}..p
226c0 72 6f 63 20 43 6f 6d 70 6c 65 74 65 41 6e 63 68  roc CompleteAnch
226d0 6f 72 20 74 65 78 74 20 7b 0a 09 72 65 74 75 72  or text {..retur
226e0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
226f0 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09  ist ${text} {...
22700 6e 20 6e 65 20 65 20 73 65 20 73 20 73 77 20 77  n ne e se s sw w
22710 20 6e 77 20 63 65 6e 74 65 72 0a 09 7d 5d 0a 7d   nw center..}].}
22720 0a 0a 70 72 6f 63 20 43 6f 6d 70 6c 65 74 65 4a  ..proc CompleteJ
22730 75 73 74 69 66 79 20 74 65 78 74 20 7b 0a 09 72  ustify text {..r
22740 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
22750 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
22760 7b 0a 09 09 6c 65 66 74 20 63 65 6e 74 65 72 20  {...left center 
22770 72 69 67 68 74 0a 09 7d 5d 0a 7d 0a 0a 70 72 6f  right..}].}..pro
22780 63 20 43 61 6e 76 61 73 49 74 65 6d 20 7b 74 65  c CanvasItem {te
22790 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
227a0 65 20 70 6f 73 20 70 72 65 76 20 74 79 70 65 7d  e pos prev type}
227b0 20 7b 0a 0a 09 73 77 69 74 63 68 20 2d 2d 20 24   {...switch -- $
227c0 7b 74 79 70 65 7d 20 7b 0a 09 09 61 72 63 20 7b  {type} {...arc {
227d0 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  ....switch -- ${
227e0 70 72 65 76 7d 20 7b 0a 09 09 09 09 2d 65 78 74  prev} {.....-ext
227f0 65 6e 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ent { return [Di
22800 73 70 6c 61 79 48 69 6e 74 73 20 3c 64 65 67 72  splayHints <degr
22810 65 65 73 3e 5d 20 7d 0a 09 09 09 09 2d 66 69 6c  ees>] }.....-fil
22820 6c 20 2d 0a 09 09 09 09 2d 6f 75 74 6c 69 6e 65  l -.....-outline
22830 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
22840 61 79 48 69 6e 74 73 20 3c 63 6f 6c 6f 72 3e 5d  ayHints <color>]
22850 20 7d 0a 09 09 09 09 2d 6f 75 74 6c 69 6e 65 73   }.....-outlines
22860 74 69 70 70 6c 65 20 2d 0a 09 09 09 09 2d 73 74  tipple -.....-st
22870 69 70 70 6c 65 20 7b 0a 09 09 09 09 09 73 65 74  ipple {......set
22880 20 69 6e 61 6d 65 73 20 5b 69 6d 61 67 65 20 6e   inames [image n
22890 61 6d 65 73 5d 0a 09 09 09 09 09 73 65 74 20 62  ames]......set b
228a0 69 74 6d 61 70 73 20 22 22 0a 09 09 09 09 09 66  itmaps ""......f
228b0 6f 72 65 61 63 68 20 6e 61 6d 65 20 24 69 6e 61  oreach name $ina
228c0 6d 65 73 20 7b 0a 09 09 09 09 09 09 69 66 20 7b  mes {.......if {
228d0 22 62 69 74 6d 61 70 22 20 3d 3d 20 5b 69 6d 61  "bitmap" == [ima
228e0 67 65 20 74 79 70 65 20 24 6e 61 6d 65 5d 7d 20  ge type $name]} 
228f0 7b 0a 09 09 09 09 09 09 09 6c 61 70 70 65 6e 64  {........lappend
22900 20 62 69 74 6d 61 70 73 20 24 7b 6e 61 6d 65 7d   bitmaps ${name}
22910 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a  .......}......}.
22920 09 09 09 09 09 69 66 20 7b 5b 73 74 72 69 6e 67  .....if {[string
22930 20 6c 65 6e 67 74 68 20 24 7b 62 69 74 6d 61 70   length ${bitmap
22940 73 7d 5d 7d 20 7b 0a 09 09 09 09 09 09 72 65 74  s}]} {.......ret
22950 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
22960 6d 4c 69 73 74 20 5c 0a 09 09 09 09 09 09 24 7b  mList \.......${
22970 74 65 78 74 7d 20 24 7b 62 69 74 6d 61 70 73 7d  text} ${bitmaps}
22980 5d 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a  ]......} else {.
22990 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  ......return [Di
229a0 73 70 6c 61 79 48 69 6e 74 73 20 3c 62 69 74 6d  splayHints <bitm
229b0 61 70 73 3e 5d 0a 09 09 09 09 09 7d 0a 09 09 09  aps>]......}....
229c0 09 7d 0a 09 09 09 09 2d 73 74 61 72 74 20 7b 20  .}.....-start { 
229d0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
229e0 69 6e 74 73 20 3c 64 65 67 72 65 65 73 3e 5d 20  ints <degrees>] 
229f0 7d 0a 09 09 09 09 2d 73 74 79 6c 65 20 7b 20 72  }.....-style { r
22a00 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
22a10 6e 74 73 20 3c 74 79 70 65 3e 5d 20 7d 0a 09 09  nts <type>] }...
22a20 09 09 2d 74 61 67 73 20 7b 20 72 65 74 75 72 6e  ..-tags { return
22a30 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
22a40 74 61 67 4c 69 73 74 3e 5d 20 7d 0a 09 09 09 09  tagList>] }.....
22a50 2d 77 69 64 74 68 20 7b 20 72 65 74 75 72 6e 20  -width { return 
22a60 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6f  [DisplayHints <o
22a70 75 74 6c 69 6e 65 57 69 64 74 68 3e 5d 20 7d 0a  utlineWidth>] }.
22a80 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09  ....default {...
22a90 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
22aa0 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
22ab0 78 74 7d 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f  xt} \......[Remo
22ac0 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b  veUsedOptions ${
22ad0 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 09 09 2d 65  line} {.......-e
22ae0 78 74 65 6e 74 20 2d 66 69 6c 6c 20 2d 6f 75 74  xtent -fill -out
22af0 6c 69 6e 65 20 2d 6f 75 74 6c 69 6e 65 73 74 69  line -outlinesti
22b00 70 70 6c 65 0a 09 09 09 09 09 09 2d 73 74 61 72  pple.......-star
22b10 74 20 2d 73 74 69 70 70 6c 65 20 2d 73 74 79 6c  t -stipple -styl
22b20 65 20 2d 74 61 67 73 20 2d 77 69 64 74 68 0a 09  e -tags -width..
22b30 09 09 09 09 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09  ....}]].....}...
22b40 09 7d 0a 09 09 7d 0a 09 09 62 69 74 6d 61 70 20  .}...}...bitmap 
22b50 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  {....switch -- $
22b60 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09 2d 61 6e  {prev} {.....-an
22b70 63 68 6f 72 20 7b 20 72 65 74 75 72 6e 20 5b 43  chor { return [C
22b80 6f 6d 70 6c 65 74 65 41 6e 63 68 6f 72 20 24 7b  ompleteAnchor ${
22b90 74 65 78 74 7d 5d 20 7d 0a 09 09 09 09 2d 62 61  text}] }.....-ba
22ba0 63 6b 67 72 6f 75 6e 64 20 2d 0a 09 09 09 09 2d  ckground -.....-
22bb0 66 6f 72 65 67 72 6f 75 6e 64 20 7b 20 72 65 74  foreground { ret
22bc0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
22bd0 73 20 3c 63 6f 6c 6f 72 3e 5d 20 7d 0a 09 09 09  s <color>] }....
22be0 09 2d 62 69 74 6d 61 70 20 7b 20 72 65 74 75 72  .-bitmap { retur
22bf0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 42  n [CompleteFromB
22c00 69 74 6d 61 70 73 20 24 7b 74 65 78 74 7d 5d 20  itmaps ${text}] 
22c10 7d 0a 09 09 09 09 2d 74 61 67 73 20 7b 20 72 65  }.....-tags { re
22c20 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
22c30 74 73 20 3c 74 61 67 4c 69 73 74 3e 5d 20 7d 0a  ts <tagList>] }.
22c40 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09  ....default {...
22c50 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
22c60 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
22c70 78 74 7d 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f  xt} \......[Remo
22c80 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b  veUsedOptions ${
22c90 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 09 09 2d 61  line} {.......-a
22ca0 6e 63 68 6f 72 20 2d 62 61 63 6b 67 72 6f 75 6e  nchor -backgroun
22cb0 64 20 2d 62 69 74 6d 61 70 0a 09 09 09 09 09 09  d -bitmap.......
22cc0 2d 66 6f 72 65 67 72 6f 75 6e 64 20 2d 74 61 67  -foreground -tag
22cd0 73 0a 09 09 09 09 09 7d 5d 5d 0a 09 09 09 09 7d  s......}]].....}
22ce0 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 69 6d 61 67  ....}...}...imag
22cf0 65 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d  e {....switch --
22d00 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09 2d   ${prev} {.....-
22d10 61 6e 63 68 6f 72 20 7b 20 72 65 74 75 72 6e 20  anchor { return 
22d20 5b 43 6f 6d 70 6c 65 74 65 41 6e 63 68 6f 72 20  [CompleteAnchor 
22d30 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09 09 2d  ${text}] }.....-
22d40 69 6d 61 67 65 20 7b 20 72 65 74 75 72 6e 20 5b  image { return [
22d50 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 49 6d 61 67  CompleteFromImag
22d60 65 73 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09  es ${text}] }...
22d70 09 09 2d 74 61 67 73 20 7b 20 72 65 74 75 72 6e  ..-tags { return
22d80 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
22d90 74 61 67 4c 69 73 74 3e 5d 20 7d 0a 09 09 09 09  tagList>] }.....
22da0 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 72  default {......r
22db0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
22dc0 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
22dd0 5c 0a 09 09 09 09 09 5b 52 65 6d 6f 76 65 55 73  \......[RemoveUs
22de0 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65  edOptions ${line
22df0 7d 20 7b 0a 09 09 09 09 09 09 2d 61 6e 63 68 6f  } {.......-ancho
22e00 72 20 2d 69 6d 61 67 65 20 2d 74 61 67 73 0a 09  r -image -tags..
22e10 09 09 09 09 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09  ....}]].....}...
22e20 09 7d 0a 09 09 7d 0a 09 09 6c 69 6e 65 20 7b 0a  .}...}...line {.
22e30 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  ...switch -- ${p
22e40 72 65 76 7d 20 7b 0a 09 09 09 09 2d 61 72 72 6f  rev} {.....-arro
22e50 77 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  w {......return 
22e60 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
22e70 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09  t ${text} {.....
22e80 09 09 6e 6f 6e 65 20 66 69 72 73 74 20 6c 61 73  ..none first las
22e90 74 20 62 6f 74 68 0a 09 09 09 09 09 7d 5d 0a 09  t both......}]..
22ea0 09 09 09 7d 0a 09 09 09 09 2d 61 72 72 6f 77 73  ...}.....-arrows
22eb0 68 61 70 65 20 7b 20 72 65 74 75 72 6e 20 5b 44  hape { return [D
22ec0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 68 61  isplayHints <sha
22ed0 70 65 3e 5d 20 7d 0a 09 09 09 09 2d 63 61 70 73  pe>] }.....-caps
22ee0 74 79 6c 65 20 7b 0a 09 09 09 09 09 72 65 74 75  tyle {......retu
22ef0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
22f00 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09  List ${text} {..
22f10 09 09 09 09 09 62 75 74 74 20 70 72 6f 6a 65 63  .....butt projec
22f20 74 69 6e 67 20 72 6f 75 6e 64 0a 09 09 09 09 09  ting round......
22f30 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 2d 66 69  }].....}.....-fi
22f40 6c 6c 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  ll { return [Dis
22f50 70 6c 61 79 48 69 6e 74 73 20 3c 63 6f 6c 6f 72  playHints <color
22f60 3e 5d 20 7d 0a 09 09 09 09 2d 6a 6f 69 6e 73 74  >] }.....-joinst
22f70 79 6c 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72  yle {......retur
22f80 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
22f90 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09  ist ${text} {...
22fa0 09 09 09 09 62 65 76 65 6c 20 6d 69 74 65 72 20  ....bevel miter 
22fb0 72 6f 75 6e 64 0a 09 09 09 09 09 7d 5d 0a 09 09  round......}]...
22fc0 09 09 7d 0a 09 09 09 09 2d 73 6d 6f 6f 74 68 20  ..}.....-smooth 
22fd0 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
22fe0 74 65 42 6f 6f 6c 65 61 6e 20 24 7b 74 65 78 74  teBoolean ${text
22ff0 7d 5d 20 7d 0a 09 09 09 09 2d 73 70 6c 69 6e 65  }] }.....-spline
23000 73 74 65 70 73 20 7b 20 72 65 74 75 72 6e 20 5b  steps { return [
23010 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6e 75  DisplayHints <nu
23020 6d 62 65 72 3e 5d 20 7d 0a 09 09 09 09 2d 73 74  mber>] }.....-st
23030 69 70 70 6c 65 20 7b 20 72 65 74 75 72 6e 20 5b  ipple { return [
23040 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 42 69 74 6d  CompleteFromBitm
23050 61 70 73 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09  aps ${text}] }..
23060 09 09 09 2d 74 61 67 73 20 7b 20 72 65 74 75 72  ...-tags { retur
23070 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
23080 3c 74 61 67 4c 69 73 74 3e 5d 20 7d 0a 09 09 09  <tagList>] }....
23090 09 2d 77 69 64 74 68 20 7b 20 72 65 74 75 72 6e  .-width { return
230a0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
230b0 6c 69 6e 65 57 69 64 74 68 3e 5d 20 7d 0a 09 09  lineWidth>] }...
230c0 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09  ..default {.....
230d0 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
230e0 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
230f0 7d 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f 76 65  } \......[Remove
23100 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69  UsedOptions ${li
23110 6e 65 7d 20 7b 0a 09 09 09 09 09 09 2d 61 72 72  ne} {.......-arr
23120 6f 77 20 2d 61 72 72 6f 77 73 68 61 70 65 20 2d  ow -arrowshape -
23130 63 61 70 73 74 79 6c 65 20 2d 66 69 6c 6c 20 2d  capstyle -fill -
23140 6a 6f 69 6e 73 74 79 6c 65 0a 09 09 09 09 09 09  joinstyle.......
23150 2d 73 6d 6f 6f 74 68 20 2d 73 70 6c 69 6e 65 73  -smooth -splines
23160 74 65 70 73 20 2d 73 74 69 70 70 6c 65 20 2d 74  teps -stipple -t
23170 61 67 73 20 2d 77 69 64 74 68 0a 09 09 09 09 09  ags -width......
23180 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09  }]].....}....}..
23190 09 7d 0a 09 09 6f 76 61 6c 20 7b 0a 09 09 09 73  .}...oval {....s
231a0 77 69 74 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d  witch -- ${prev}
231b0 20 7b 0a 09 09 09 09 2d 66 69 6c 6c 20 2d 0a 09   {.....-fill -..
231c0 09 09 09 2d 6f 75 74 6c 69 6e 65 20 7b 20 72 65  ...-outline { re
231d0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
231e0 74 73 20 3c 63 6f 6c 6f 72 3e 5d 20 7d 0a 09 09  ts <color>] }...
231f0 09 09 2d 73 74 69 70 70 6c 65 20 7b 20 72 65 74  ..-stipple { ret
23200 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
23210 6d 42 69 74 6d 61 70 73 20 24 7b 74 65 78 74 7d  mBitmaps ${text}
23220 5d 20 7d 0a 09 09 09 09 2d 74 61 67 73 20 7b 20  ] }.....-tags { 
23230 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
23240 69 6e 74 73 20 3c 74 61 67 4c 69 73 74 3e 5d 20  ints <tagList>] 
23250 7d 0a 09 09 09 09 2d 77 69 64 74 68 20 7b 20 72  }.....-width { r
23260 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
23270 6e 74 73 20 3c 6c 69 6e 65 57 69 64 74 68 3e 5d  nts <lineWidth>]
23280 20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b   }.....default {
23290 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
232a0 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
232b0 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b 52  {text} \......[R
232c0 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
232d0 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 09   ${line} {......
232e0 09 2d 66 69 6c 6c 20 2d 6f 75 74 6c 69 6e 65 20  .-fill -outline 
232f0 2d 73 74 69 70 70 6c 65 20 2d 74 61 67 73 20 2d  -stipple -tags -
23300 77 69 64 74 68 0a 09 09 09 09 09 7d 5d 5d 0a 09  width......}]]..
23310 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  ...}....}...}...
23320 70 6f 6c 79 67 6f 6e 20 7b 0a 09 09 09 73 77 69  polygon {....swi
23330 74 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b  tch -- ${prev} {
23340 0a 09 09 09 09 2d 66 69 6c 6c 20 2d 0a 09 09 09  .....-fill -....
23350 09 2d 6f 75 74 6c 69 6e 65 20 7b 20 72 65 74 75  .-outline { retu
23360 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
23370 20 3c 63 6f 6c 6f 72 3e 5d 20 7d 0a 09 09 09 09   <color>] }.....
23380 2d 73 6d 6f 6f 74 68 20 7b 20 72 65 74 75 72 6e  -smooth { return
23390 20 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65 61   [CompleteBoolea
233a0 6e 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09  n ${text}] }....
233b0 09 2d 73 70 6c 69 6e 65 73 74 65 70 73 20 7b 20  .-splinesteps { 
233c0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
233d0 69 6e 74 73 20 3c 6e 75 6d 62 65 72 3e 5d 20 7d  ints <number>] }
233e0 0a 09 09 09 09 2d 73 74 69 70 70 6c 65 20 7b 20  .....-stipple { 
233f0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
23400 46 72 6f 6d 42 69 74 6d 61 70 73 20 24 7b 74 65  FromBitmaps ${te
23410 78 74 7d 5d 20 7d 0a 09 09 09 09 2d 74 61 67 73  xt}] }.....-tags
23420 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
23430 61 79 48 69 6e 74 73 20 3c 74 61 67 4c 69 73 74  ayHints <tagList
23440 3e 5d 20 7d 0a 09 09 09 09 2d 77 69 64 74 68 20  >] }.....-width 
23450 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
23460 79 48 69 6e 74 73 20 3c 6f 75 74 6c 69 6e 65 57  yHints <outlineW
23470 69 64 74 68 3e 5d 20 7d 0a 09 09 09 09 64 65 66  idth>] }.....def
23480 61 75 6c 74 20 7b 0a 09 09 09 09 09 72 65 74 75  ault {......retu
23490 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
234a0 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09  List ${text} \..
234b0 09 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f  ....[RemoveUsedO
234c0 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b  ptions ${line} {
234d0 0a 09 09 09 09 09 09 2d 66 69 6c 6c 20 2d 6f 75  .......-fill -ou
234e0 74 6c 69 6e 65 20 2d 73 6d 6f 6f 74 68 20 2d 73  tline -smooth -s
234f0 70 6c 69 6e 65 73 74 65 70 73 0a 09 09 09 09 09  plinesteps......
23500 09 2d 73 74 69 70 70 6c 65 20 2d 74 61 67 73 20  .-stipple -tags 
23510 2d 77 69 64 74 68 0a 09 09 09 09 09 7d 5d 5d 0a  -width......}]].
23520 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  ....}....}...}..
23530 09 72 65 63 74 61 6e 67 6c 65 20 7b 0a 09 09 09  .rectangle {....
23540 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72 65 76  switch -- ${prev
23550 7d 20 7b 0a 09 09 09 09 2d 66 69 6c 6c 20 2d 0a  } {.....-fill -.
23560 09 09 09 09 2d 6f 75 74 6c 69 6e 65 20 7b 20 72  ....-outline { r
23570 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
23580 6e 74 73 20 3c 63 6f 6c 6f 72 3e 5d 20 7d 0a 09  nts <color>] }..
23590 09 09 09 2d 73 74 69 70 70 6c 65 20 7b 20 72 65  ...-stipple { re
235a0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
235b0 6f 6d 42 69 74 6d 61 70 73 20 24 7b 74 65 78 74  omBitmaps ${text
235c0 7d 5d 20 7d 0a 09 09 09 09 2d 74 61 67 73 20 7b  }] }.....-tags {
235d0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
235e0 48 69 6e 74 73 20 3c 74 61 67 4c 69 73 74 3e 5d  Hints <tagList>]
235f0 20 7d 0a 09 09 09 09 2d 77 69 64 74 68 20 7b 20   }.....-width { 
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 6c 69 6e 65 57 69 64 74 68 3e  ints <lineWidth>
23620 5d 20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20  ] }.....default 
23630 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  {......return [C
23640 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
23650 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b  ${text} \......[
23660 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e  RemoveUsedOption
23670 73 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09  s ${line} {.....
23680 09 09 2d 66 69 6c 6c 20 2d 6f 75 74 6c 69 6e 65  ..-fill -outline
23690 20 2d 73 74 69 70 70 6c 65 20 2d 74 61 67 73 20   -stipple -tags 
236a0 2d 77 69 64 74 68 0a 09 09 09 09 09 7d 5d 5d 0a  -width......}]].
236b0 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  ....}....}...}..
236c0 09 74 65 78 74 20 7b 0a 09 09 09 73 77 69 74 63  .text {....switc
236d0 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09  h -- ${prev} {..
236e0 09 09 09 2d 61 6e 63 68 6f 72 20 7b 20 72 65 74  ...-anchor { ret
236f0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 41 6e 63  urn [CompleteAnc
23700 68 6f 72 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09  hor ${text}] }..
23710 09 09 09 2d 66 69 6c 6c 20 7b 20 72 65 74 75 72  ...-fill { retur
23720 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
23730 3c 63 6f 6c 6f 72 3e 5d 20 7d 0a 09 09 09 09 2d  <color>] }.....-
23740 66 6f 6e 74 20 7b 20 72 65 74 75 72 6e 20 5b 44  font { return [D
23750 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 66 6f 6e  isplayHints <fon
23760 74 3e 5d 20 7d 0a 09 09 09 09 2d 6a 75 73 74 69  t>] }.....-justi
23770 66 79 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d  fy { return [Com
23780 70 6c 65 74 65 4a 75 73 74 69 66 79 20 24 7b 74  pleteJustify ${t
23790 65 78 74 7d 5d 20 7d 0a 09 09 09 09 2d 73 74 69  ext}] }.....-sti
237a0 70 70 6c 65 20 7b 20 72 65 74 75 72 6e 20 5b 43  pple { return [C
237b0 6f 6d 70 6c 65 74 65 46 72 6f 6d 42 69 74 6d 61  ompleteFromBitma
237c0 70 73 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09  ps ${text}] }...
237d0 09 09 2d 74 61 67 73 20 7b 20 72 65 74 75 72 6e  ..-tags { return
237e0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
237f0 74 61 67 4c 69 73 74 3e 5d 20 7d 0a 09 09 09 09  tagList>] }.....
23800 2d 74 65 78 74 20 7b 20 72 65 74 75 72 6e 20 5b  -text { return [
23810 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 74  DisplayHints <st
23820 72 69 6e 67 3e 5d 20 7d 0a 09 09 09 09 2d 77 69  ring>] }.....-wi
23830 64 74 68 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  dth { return [Di
23840 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c 69 6e 65  splayHints <line
23850 4c 65 6e 67 74 68 3e 5d 20 7d 0a 09 09 09 09 64  Length>] }.....d
23860 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 72 65  efault {......re
23870 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
23880 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c  omList ${text} \
23890 0a 09 09 09 09 09 5b 52 65 6d 6f 76 65 55 73 65  ......[RemoveUse
238a0 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d  dOptions ${line}
238b0 20 7b 0a 09 09 09 09 09 09 2d 61 6e 63 68 6f 72   {.......-anchor
238c0 20 2d 66 69 6c 6c 20 2d 66 6f 6e 74 20 2d 6a 75   -fill -font -ju
238d0 73 74 69 66 79 0a 09 09 09 09 09 09 2d 73 74 69  stify.......-sti
238e0 70 70 6c 65 20 2d 74 61 67 73 20 2d 74 65 78 74  pple -tags -text
238f0 20 2d 77 69 64 74 68 0a 09 09 09 09 09 7d 5d 5d   -width......}]]
23900 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a  .....}....}...}.
23910 09 09 77 69 6e 64 6f 77 20 7b 0a 09 09 09 73 77  ..window {....sw
23920 69 74 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20  itch -- ${prev} 
23930 7b 0a 09 09 09 09 2d 61 6e 63 68 6f 72 20 7b 20  {.....-anchor { 
23940 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
23950 41 6e 63 68 6f 72 20 24 7b 74 65 78 74 7d 5d 20  Anchor ${text}] 
23960 7d 0a 09 09 09 09 2d 68 65 69 67 68 74 20 7b 20  }.....-height { 
23970 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
23980 69 6e 74 73 20 3c 70 69 78 65 6c 73 3e 5d 20 7d  ints <pixels>] }
23990 0a 09 09 09 09 2d 74 61 67 73 20 7b 20 72 65 74  .....-tags { ret
239a0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
239b0 73 20 3c 74 61 67 4c 69 73 74 3e 5d 20 7d 0a 09  s <tagList>] }..
239c0 09 09 09 2d 77 69 64 74 68 20 7b 20 72 65 74 75  ...-width { retu
239d0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
239e0 20 3c 6c 69 6e 65 57 69 64 74 68 3e 5d 20 7d 0a   <lineWidth>] }.
239f0 09 09 09 09 2d 77 69 6e 64 6f 77 20 7b 0a 09 09  ....-window {...
23a00 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72  ...return [TryFr
23a10 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b  omList ${text} [
23a20 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
23a30 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a 09  {text}]].....}..
23a40 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09  ...default {....
23a50 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
23a60 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
23a70 74 7d 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f 76  t} \......[Remov
23a80 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c  eUsedOptions ${l
23a90 69 6e 65 7d 20 7b 0a 09 09 09 09 09 09 2d 61 6e  ine} {.......-an
23aa0 63 68 6f 72 20 2d 68 65 69 67 68 74 20 2d 74 61  chor -height -ta
23ab0 67 73 20 2d 77 69 64 74 68 20 2d 77 69 6e 64 6f  gs -width -windo
23ac0 77 0a 09 09 09 09 09 7d 5d 5d 0a 09 09 09 09 7d  w......}]].....}
23ad0 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a  ....}...}..}.}..
23ae0 23 2a 2a 0a 23 20 57 69 64 67 65 74 58 76 69 65  #**.# WidgetXvie
23af0 77 59 76 69 65 77 0a 23 20 0a 23 20 40 70 61 72  wYview.# .# @par
23b00 61 6d 20 20 20 20 74 65 78 74 20 20 2d 2d 20 74  am    text  -- t
23b10 68 65 20 77 6f 72 64 20 74 6f 20 63 6f 6d 70 6c  he word to compl
23b20 65 74 65 2e 0a 23 20 40 70 61 72 61 6d 20 20 20  ete..# @param   
23b30 20 6c 69 6e 65 20 20 2d 2d 20 74 68 65 20 6c 69   line  -- the li
23b40 6e 65 20 67 61 74 68 65 72 65 64 20 73 6f 20 66  ne gathered so f
23b50 61 72 2e 0a 23 20 40 70 61 72 61 6d 20 20 20 20  ar..# @param    
23b60 70 6f 73 20 20 20 2d 2d 20 74 68 65 20 63 75 72  pos   -- the cur
23b70 72 65 6e 74 20 77 6f 72 64 20 70 6f 73 69 74 69  rent word positi
23b80 6f 6e 2e 0a 23 20 40 70 61 72 61 6d 20 20 20 20  on..# @param    
23b90 70 72 65 76 20 20 2d 2d 20 74 68 65 20 70 72 65  prev  -- the pre
23ba0 76 69 6f 75 73 20 77 6f 72 64 2e 0a 23 20 40 72  vious word..# @r
23bb0 65 74 75 72 6e 20 20 20 61 20 73 74 64 20 74 63  eturn   a std tc
23bc0 6c 72 65 61 64 6c 69 6e 65 20 66 6f 72 6d 61 74  lreadline format
23bd0 74 65 64 20 63 6f 6d 70 6c 65 74 65 72 20 73 74  ted completer st
23be0 72 69 6e 67 2e 0a 23 20 40 73 61 20 20 20 20 20  ring..# @sa     
23bf0 20 20 43 61 6e 76 61 73 4f 62 6a 2c 20 45 6e 74    CanvasObj, Ent
23c00 72 79 4f 62 6a 0a 23 20 40 64 61 74 65 20 20 20  ryObj.# @date   
23c10 20 20 53 65 70 2d 31 38 2d 31 39 39 39 0a 23 0a    Sep-18-1999.#.
23c20 70 72 6f 63 20 57 69 64 67 65 74 58 76 69 65 77  proc WidgetXview
23c30 59 76 69 65 77 20 7b 74 65 78 74 20 6c 69 6e 65  Yview {text line
23c40 20 70 6f 73 20 70 72 65 76 7d 20 7b 0a 09 73 77   pos prev} {..sw
23c50 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
23c60 0a 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 43  ...2 { return [C
23c70 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
23c80 24 7b 74 65 78 74 7d 20 7b 3c 69 6e 64 65 78 3e  ${text} {<index>
23c90 20 6d 6f 76 65 74 6f 20 73 63 72 6f 6c 6c 7d 5d   moveto scroll}]
23ca0 20 7d 0a 09 09 33 20 7b 0a 09 09 09 73 77 69 74   }...3 {....swit
23cb0 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a  ch -- ${prev} {.
23cc0 09 09 09 09 6d 6f 76 65 74 6f 20 7b 20 72 65 74  ....moveto { ret
23cd0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
23ce0 73 20 3c 66 72 61 63 74 69 6f 6e 3e 5d 20 7d 0a  s <fraction>] }.
23cf0 09 09 09 09 73 63 72 6f 6c 6c 20 7b 20 72 65 74  ....scroll { ret
23d00 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
23d10 73 20 3c 6e 75 6d 62 65 72 3e 5d 20 7d 0a 09 09  s <number>] }...
23d20 09 7d 0a 09 09 7d 0a 09 09 34 20 7b 0a 09 09 09  .}...}...4 {....
23d30 73 65 74 20 73 75 62 63 6d 64 20 5b 4c 69 6e 64  set subcmd [Lind
23d40 65 78 20 24 7b 6c 69 6e 65 7d 20 32 5d 0a 09 09  ex ${line} 2]...
23d50 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62  .switch -- ${sub
23d60 63 6d 64 7d 20 7b 0a 09 09 09 09 73 63 72 6f 6c  cmd} {.....scrol
23d70 6c 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  l { return [Disp
23d80 6c 61 79 48 69 6e 74 73 20 3c 77 68 61 74 3e 5d  layHints <what>]
23d90 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d   }....}...}..}.}
23da0 0a 0a 23 2a 2a 0a 23 20 57 69 64 67 65 74 53 63  ..#**.# WidgetSc
23db0 61 6e 0a 23 20 0a 23 20 40 70 61 72 61 6d 20 20  an.# .# @param  
23dc0 20 20 74 65 78 74 20 20 2d 2d 20 74 68 65 20 77    text  -- the w
23dd0 6f 72 64 20 74 6f 20 63 6f 6d 70 6c 65 74 65 2e  ord to complete.
23de0 0a 23 20 40 70 61 72 61 6d 20 20 20 20 70 6f 73  .# @param    pos
23df0 20 20 20 2d 2d 20 74 68 65 20 63 75 72 72 65 6e     -- the curren
23e00 74 20 77 6f 72 64 20 70 6f 73 69 74 69 6f 6e 2e  t word position.
23e10 0a 23 20 40 72 65 74 75 72 6e 20 20 20 61 20 73  .# @return   a s
23e20 74 64 20 74 63 6c 72 65 61 64 6c 69 6e 65 20 66  td tclreadline f
23e30 6f 72 6d 61 74 74 65 64 20 63 6f 6d 70 6c 65 74  ormatted complet
23e40 65 72 20 73 74 72 69 6e 67 2e 0a 23 20 40 73 61  er string..# @sa
23e50 20 20 20 20 20 20 20 43 61 6e 76 61 73 4f 62 6a         CanvasObj
23e60 2c 20 45 6e 74 72 79 4f 62 6a 0a 23 20 40 64 61  , EntryObj.# @da
23e70 74 65 20 20 20 20 20 53 65 70 2d 31 38 2d 31 39  te     Sep-18-19
23e80 39 39 0a 23 0a 70 72 6f 63 20 57 69 64 67 65 74  99.#.proc Widget
23e90 53 63 61 6e 20 7b 74 65 78 74 20 70 6f 73 7d 20  Scan {text pos} 
23ea0 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  {..switch -- ${p
23eb0 6f 73 7d 20 7b 0a 09 09 32 20 7b 20 72 65 74 75  os} {...2 { retu
23ec0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
23ed0 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 6d 61  List ${text} {ma
23ee0 72 6b 20 64 72 61 67 74 6f 7d 5d 20 7d 0a 09 09  rk dragto}] }...
23ef0 33 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  3 { return [Disp
23f00 6c 61 79 48 69 6e 74 73 20 3c 78 3e 5d 20 7d 0a  layHints <x>] }.
23f10 09 09 34 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..4 { return [Di
23f20 73 70 6c 61 79 48 69 6e 74 73 20 3c 79 3e 5d 20  splayHints <y>] 
23f30 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 43 61 6e  }..}.}..proc Can
23f40 76 61 73 4f 62 6a 20 7b 74 65 78 74 20 73 74 61  vasObj {text sta
23f50 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 7d  rt end line pos}
23f60 20 7b 0a 09 73 65 74 20 73 75 62 20 5b 4c 69 6e   {..set sub [Lin
23f70 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09  dex ${line} 1]..
23f80 73 65 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f  set prev [Previo
23f90 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20  usWord ${start} 
23fa0 24 7b 6c 69 6e 65 7d 5d 0a 09 69 66 20 7b 31 20  ${line}]..if {1 
23fb0 3d 3d 20 24 70 6f 73 7d 20 7b 0a 09 09 72 65 74  == $pos} {...ret
23fc0 75 72 6e 20 5b 54 72 79 53 75 62 43 6d 64 73 20  urn [TrySubCmds 
23fd0 24 7b 74 65 78 74 7d 20 5b 4c 69 6e 64 65 78 20  ${text} [Lindex 
23fe0 24 7b 6c 69 6e 65 7d 20 30 5d 5d 0a 09 7d 0a 09  ${line} 0]]..}..
23ff0 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d  switch -- ${sub}
24000 20 7b 0a 09 09 61 64 64 74 61 67 20 7b 0a 09 09   {...addtag {...
24010 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73  .switch -- ${pos
24020 7d 20 7b 0a 09 09 09 09 32 20 7b 20 72 65 74 75  } {.....2 { retu
24030 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
24040 20 3c 74 61 67 3e 5d 20 7d 0a 09 09 09 09 33 20   <tag>] }.....3 
24050 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  {......return [C
24060 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
24070 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 09 09  ${text} {.......
24080 61 62 6f 76 65 20 61 6c 6c 20 62 65 6c 6f 77 20  above all below 
24090 63 6c 6f 73 65 73 74 20 65 6e 63 6c 6f 73 65 64  closest enclosed
240a0 0a 09 09 09 09 09 09 6f 76 65 72 6c 61 70 70 69  .......overlappi
240b0 6e 67 20 77 69 74 68 74 61 67 0a 09 09 09 09 09  ng withtag......
240c0 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 64 65 66  }].....}.....def
240d0 61 75 6c 74 20 7b 0a 09 09 09 09 09 73 65 74 20  ault {......set 
240e0 73 65 61 72 63 68 20 5b 4c 69 6e 64 65 78 20 24  search [Lindex $
240f0 7b 6c 69 6e 65 7d 20 33 5d 0a 09 09 09 09 09 73  {line} 3]......s
24100 77 69 74 63 68 20 2d 2d 20 24 7b 73 65 61 72 63  witch -- ${searc
24110 68 7d 20 7b 0a 09 09 09 09 09 09 61 6c 6c 20 7b  h} {.......all {
24120 7d 0a 09 09 09 09 09 09 61 62 6f 76 65 20 2d 0a  }.......above -.
24130 09 09 09 09 09 09 77 69 74 68 74 61 67 20 2d 0a  ......withtag -.
24140 09 09 09 09 09 09 62 65 6c 6f 77 20 7b 20 72 65  ......below { re
24150 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
24160 74 73 20 3c 74 61 67 4f 72 49 64 3e 5d 20 7d 0a  ts <tagOrId>] }.
24170 09 09 09 09 09 09 63 6c 6f 73 65 73 74 20 7b 0a  ......closest {.
24180 09 09 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d  .......switch --
24190 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 09 09   ${pos} {.......
241a0 09 09 34 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..4 { return [Di
241b0 73 70 6c 61 79 48 69 6e 74 73 20 3c 78 3e 5d 20  splayHints <x>] 
241c0 7d 0a 09 09 09 09 09 09 09 09 35 20 7b 20 72 65  }.........5 { re
241d0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
241e0 74 73 20 3c 79 3e 5d 20 7d 0a 09 09 09 09 09 09  ts <y>] }.......
241f0 09 09 36 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..6 { return [Di
24200 73 70 6c 61 79 48 69 6e 74 73 20 3f 68 61 6c 6f  splayHints ?halo
24210 3f 5d 20 7d 0a 09 09 09 09 09 09 09 09 37 20 7b  ?] }.........7 {
24220 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
24230 48 69 6e 74 73 20 3f 73 74 61 72 74 3f 5d 20 7d  Hints ?start?] }
24240 0a 09 09 09 09 09 09 09 7d 0a 09 09 09 09 09 09  ........}.......
24250 7d 0a 09 09 09 09 09 09 65 6e 63 6c 6f 73 65 64  }.......enclosed
24260 20 2d 0a 09 09 09 09 09 09 6f 76 65 72 6c 61 70   -.......overlap
24270 70 69 6e 67 20 7b 0a 09 09 09 09 09 09 09 73 77  ping {........sw
24280 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
24290 0a 09 09 09 09 09 09 09 09 34 20 7b 20 72 65 74  .........4 { ret
242a0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
242b0 73 20 3c 78 31 3e 5d 20 7d 0a 09 09 09 09 09 09  s <x1>] }.......
242c0 09 09 35 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..5 { return [Di
242d0 73 70 6c 61 79 48 69 6e 74 73 20 3c 79 31 3e 5d  splayHints <y1>]
242e0 20 7d 0a 09 09 09 09 09 09 09 09 36 20 7b 20 72   }.........6 { r
242f0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
24300 6e 74 73 20 3c 78 32 3e 5d 20 7d 0a 09 09 09 09  nts <x2>] }.....
24310 09 09 09 09 37 20 7b 20 72 65 74 75 72 6e 20 5b  ....7 { return [
24320 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 79 32  DisplayHints <y2
24330 3e 5d 20 7d 0a 09 09 09 09 09 09 09 7d 0a 09 09  >] }........}...
24340 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a 09 09 09  ....}......}....
24350 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 62 62  .}....}...}...bb
24360 6f 78 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  ox {....switch -
24370 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32  - ${pos} {.....2
24380 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
24390 61 79 48 69 6e 74 73 20 3c 74 61 67 4f 72 49 64  ayHints <tagOrId
243a0 3e 5d 20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74  >] }.....default
243b0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
243c0 61 79 48 69 6e 74 73 20 3f 74 61 67 4f 72 49 64  ayHints ?tagOrId
243d0 3f 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  ?] }....}...}...
243e0 62 69 6e 64 20 7b 0a 09 09 09 73 77 69 74 63 68  bind {....switch
243f0 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09   -- ${pos} {....
24400 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .2 { return [Dis
24410 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 67 4f 72  playHints <tagOr
24420 49 64 3e 5d 20 7d 0a 09 09 09 09 33 20 7b 0a 09  Id>] }.....3 {..
24430 09 09 09 09 73 65 74 20 66 75 6c 6c 74 65 78 74  ....set fulltext
24440 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d   [Lindex ${line}
24450 20 33 5d 0a 09 09 09 09 09 72 65 74 75 72 6e 20   3]......return 
24460 5b 43 6f 6d 70 6c 65 74 65 53 65 71 75 65 6e 63  [CompleteSequenc
24470 65 20 24 7b 74 65 78 74 7d 20 24 7b 66 75 6c 6c  e ${text} ${full
24480 74 65 78 74 7d 5d 0a 09 09 09 09 09 23 20 72 65  text}]......# re
24490 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
244a0 74 73 20 3f 73 65 71 75 65 6e 63 65 3f 5d 0a 09  ts ?sequence?]..
244b0 09 09 09 7d 0a 09 09 09 09 64 65 66 61 75 6c 74  ...}.....default
244c0 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
244d0 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e 64 20 24  BraceOrCommand $
244e0 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 24 7b  {text} \......${
244f0 73 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20 24 7b  start} ${end} ${
24500 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 24 7b 74  line} ${pos} ${t
24510 65 78 74 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d  ext}].....}....}
24520 0a 09 09 7d 0a 09 09 63 61 6e 76 61 73 78 20 7b  ...}...canvasx {
24530 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  ....switch -- ${
24540 70 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b 20 72  pos} {.....2 { r
24550 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
24560 6e 74 73 20 3c 73 63 72 65 65 6e 78 3e 5d 20 7d  nts <screenx>] }
24570 0a 09 09 09 09 33 20 7b 20 72 65 74 75 72 6e 20  .....3 { return 
24580 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 67  [DisplayHints ?g
24590 72 69 64 73 70 61 63 69 6e 67 3f 5d 20 7d 0a 09  ridspacing?] }..
245a0 09 09 7d 0a 09 09 7d 0a 09 09 63 61 6e 76 61 73  ..}...}...canvas
245b0 79 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d  y {....switch --
245c0 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32 20   ${pos} {.....2 
245d0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
245e0 79 48 69 6e 74 73 20 3c 73 63 72 65 65 6e 79 3e  yHints <screeny>
245f0 5d 20 7d 0a 09 09 09 09 33 20 7b 20 72 65 74 75  ] }.....3 { retu
24600 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
24610 20 3f 67 72 69 64 73 70 61 63 69 6e 67 3f 5d 20   ?gridspacing?] 
24620 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 63 6f 6f  }....}...}...coo
24630 72 64 73 20 7b 0a 09 09 09 73 77 69 74 63 68 20  rds {....switch 
24640 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09  -- ${pos} {.....
24650 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  2 { return [Disp
24660 6c 61 79 48 69 6e 74 73 20 3c 74 61 67 4f 72 49  layHints <tagOrI
24670 64 3e 5d 20 7d 0a 09 09 09 09 64 65 66 61 75 6c  d>] }.....defaul
24680 74 20 7b 0a 09 09 09 09 09 73 77 69 74 63 68 20  t {......switch 
24690 5b 65 78 70 72 20 24 7b 70 6f 73 7d 20 25 20 32  [expr ${pos} % 2
246a0 5d 20 7b 0a 09 09 09 09 09 09 31 20 7b 20 72 65  ] {.......1 { re
246b0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
246c0 74 73 20 3f 78 3f 5d 20 7d 0a 09 09 09 09 09 09  ts ?x?] }.......
246d0 30 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  0 { return [Disp
246e0 6c 61 79 48 69 6e 74 73 20 3f 79 3f 5d 20 7d 0a  layHints ?y?] }.
246f0 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09  .....}.....}....
24700 7d 0a 09 09 7d 0a 09 09 64 63 68 61 72 73 20 7b  }...}...dchars {
24710 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  ....switch -- ${
24720 70 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b 20 72  pos} {.....2 { r
24730 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
24740 6e 74 73 20 3c 74 61 67 4f 72 49 64 3e 5d 20 7d  nts <tagOrId>] }
24750 0a 09 09 09 09 33 20 7b 20 72 65 74 75 72 6e 20  .....3 { return 
24760 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 66  [DisplayHints <f
24770 69 72 73 74 3e 5d 20 7d 0a 09 09 09 09 34 20 7b  irst>] }.....4 {
24780 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
24790 48 69 6e 74 73 20 3f 6c 61 73 74 3f 5d 20 7d 0a  Hints ?last?] }.
247a0 09 09 09 7d 0a 09 09 7d 0a 09 09 64 65 6c 65 74  ...}...}...delet
247b0 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  e { return [Disp
247c0 6c 61 79 48 69 6e 74 73 20 3f 74 61 67 4f 72 49  layHints ?tagOrI
247d0 64 3f 5d 20 7d 0a 09 09 64 74 61 67 20 7b 0a 09  d?] }...dtag {..
247e0 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
247f0 73 7d 20 7b 0a 09 09 09 09 32 20 7b 20 72 65 74  s} {.....2 { ret
24800 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
24810 73 20 3c 74 61 67 4f 72 49 64 3e 5d 20 7d 0a 09  s <tagOrId>] }..
24820 09 09 09 33 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...3 { return [D
24830 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 74 61 67  isplayHints ?tag
24840 54 6f 44 65 6c 65 74 65 3f 5d 20 7d 0a 09 09 09  ToDelete?] }....
24850 7d 0a 09 09 7d 0a 09 09 66 69 6e 64 20 7b 0a 09  }...}...find {..
24860 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
24870 73 7d 20 7b 0a 09 09 09 09 32 20 7b 0a 09 09 09  s} {.....2 {....
24880 09 09 72 65 74 75 72 6e 20 5b 54 72 79 53 75 62  ..return [TrySub
24890 43 6d 64 73 20 24 7b 74 65 78 74 7d 20 5b 4c 72  Cmds ${text} [Lr
248a0 61 6e 67 65 20 24 7b 6c 69 6e 65 7d 20 30 20 31  ange ${line} 0 1
248b0 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 64 65 66  ]].....}.....def
248c0 61 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b 44  ault { return [D
248d0 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 61 72 67  isplayHints ?arg
248e0 3f 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  ?] }....}...}...
248f0 66 6f 63 75 73 20 7b 0a 09 09 09 73 77 69 74 63  focus {....switc
24900 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09  h -- ${pos} {...
24910 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..2 { return [Di
24920 73 70 6c 61 79 48 69 6e 74 73 20 3f 74 61 67 4f  splayHints ?tagO
24930 72 49 64 3f 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d  rId?] }....}...}
24940 0a 09 09 67 65 74 74 61 67 73 20 7b 0a 09 09 09  ...gettags {....
24950 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d  switch -- ${pos}
24960 20 7b 0a 09 09 09 09 32 20 7b 20 72 65 74 75 72   {.....2 { retur
24970 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
24980 3c 74 61 67 4f 72 49 64 3e 5d 20 7d 0a 09 09 09  <tagOrId>] }....
24990 7d 0a 09 09 7d 0a 09 09 69 63 75 72 73 6f 72 20  }...}...icursor 
249a0 2d 0a 09 09 69 6e 64 65 78 20 7b 0a 09 09 09 73  -...index {....s
249b0 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
249c0 7b 0a 09 09 09 09 32 20 7b 20 72 65 74 75 72 6e  {.....2 { return
249d0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
249e0 74 61 67 4f 72 49 64 3e 5d 20 7d 0a 09 09 09 09  tagOrId>] }.....
249f0 33 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  3 { return [Disp
24a00 6c 61 79 48 69 6e 74 73 20 3c 69 6e 64 65 78 3e  layHints <index>
24a10 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 69  ] }....}...}...i
24a20 6e 73 65 72 74 20 7b 0a 09 09 09 73 77 69 74 63  nsert {....switc
24a30 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09  h -- ${pos} {...
24a40 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..2 { return [Di
24a50 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 67 4f  splayHints <tagO
24a60 72 49 64 3e 5d 20 7d 0a 09 09 09 09 33 20 7b 20  rId>] }.....3 { 
24a70 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
24a80 69 6e 74 73 20 3c 62 65 66 6f 72 65 54 68 69 73  ints <beforeThis
24a90 3e 5d 20 7d 0a 09 09 09 09 34 20 7b 20 72 65 74  >] }.....4 { ret
24aa0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
24ab0 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 09 09  s <string>] }...
24ac0 09 7d 0a 09 09 7d 0a 09 09 6c 6f 77 65 72 20 7b  .}...}...lower {
24ad0 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  ....switch -- ${
24ae0 70 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b 20 72  pos} {.....2 { r
24af0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
24b00 6e 74 73 20 3c 74 61 67 4f 72 49 64 3e 5d 20 7d  nts <tagOrId>] }
24b10 0a 09 09 09 09 33 20 7b 20 72 65 74 75 72 6e 20  .....3 { return 
24b20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 62  [DisplayHints ?b
24b30 65 6c 6f 77 54 68 69 73 3f 5d 20 7d 0a 09 09 09  elowThis?] }....
24b40 7d 0a 09 09 7d 0a 09 09 6d 6f 76 65 20 7b 0a 09  }...}...move {..
24b50 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
24b60 73 7d 20 7b 0a 09 09 09 09 32 20 7b 20 72 65 74  s} {.....2 { ret
24b70 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
24b80 73 20 3c 74 61 67 4f 72 49 64 3e 5d 20 7d 0a 09  s <tagOrId>] }..
24b90 09 09 09 33 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...3 { return [D
24ba0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 78 41 6d  isplayHints <xAm
24bb0 6f 75 6e 74 3e 5d 20 7d 0a 09 09 09 09 34 20 7b  ount>] }.....4 {
24bc0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
24bd0 48 69 6e 74 73 20 3c 79 41 6d 6f 75 6e 74 3e 5d  Hints <yAmount>]
24be0 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 70 6f   }....}...}...po
24bf0 73 74 73 63 72 69 70 74 20 7b 0a 09 09 09 73 77  stscript {....sw
24c00 69 74 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20  itch -- ${prev} 
24c10 7b 0a 09 09 09 09 2d 66 69 6c 65 20 7b 20 72 65  {.....-file { re
24c20 74 75 72 6e 20 22 22 20 7d 0a 09 09 09 09 2d 63  turn "" }.....-c
24c30 6f 6c 6f 72 6d 61 70 20 2d 0a 09 09 09 09 2d 63  olormap -.....-c
24c40 6f 6c 6f 72 6d 6f 64 65 20 2d 0a 09 09 09 09 2d  olormode -.....-
24c50 66 6f 6e 74 6d 61 70 20 2d 0a 09 09 09 09 2d 68  fontmap -.....-h
24c60 65 69 67 68 74 20 2d 0a 09 09 09 09 2d 70 61 67  eight -.....-pag
24c70 65 61 6e 63 68 6f 72 20 2d 0a 09 09 09 09 2d 70  eanchor -.....-p
24c80 61 67 65 68 65 69 67 68 74 20 2d 0a 09 09 09 09  ageheight -.....
24c90 2d 70 61 67 65 77 69 64 74 68 20 2d 0a 09 09 09  -pagewidth -....
24ca0 09 2d 70 61 67 65 78 20 2d 0a 09 09 09 09 2d 70  .-pagex -.....-p
24cb0 61 67 65 79 20 2d 0a 09 09 09 09 2d 72 6f 74 61  agey -.....-rota
24cc0 74 65 20 2d 0a 09 09 09 09 2d 77 69 64 74 68 20  te -.....-width 
24cd0 2d 0a 09 09 09 09 2d 78 20 2d 0a 09 09 09 09 2d  -.....-x -.....-
24ce0 79 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  y { return [Disp
24cf0 6c 61 79 48 69 6e 74 73 20 3c 5b 53 74 72 69 6e  layHints <[Strin
24d00 67 20 72 61 6e 67 65 20 24 7b 70 72 65 76 7d 20  g range ${prev} 
24d10 31 20 65 6e 64 5d 3e 5d 20 7d 0a 09 09 09 09 64  1 end]>] }.....d
24d20 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 72 65  efault {......re
24d30 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
24d40 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c  omList ${text} \
24d50 0a 09 09 09 09 09 5b 52 65 6d 6f 76 65 55 73 65  ......[RemoveUse
24d60 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d  dOptions ${line}
24d70 20 7b 0a 09 09 09 09 09 09 2d 63 6f 6c 6f 72 6d   {.......-colorm
24d80 61 70 20 2d 63 6f 6c 6f 72 6d 6f 64 65 20 2d 66  ap -colormode -f
24d90 69 6c 65 20 2d 66 6f 6e 74 6d 61 70 20 2d 68 65  ile -fontmap -he
24da0 69 67 68 74 0a 09 09 09 09 09 09 2d 70 61 67 65  ight.......-page
24db0 61 6e 63 68 6f 72 20 2d 70 61 67 65 68 65 69 67  anchor -pageheig
24dc0 68 74 20 2d 70 61 67 65 77 69 64 74 68 20 2d 70  ht -pagewidth -p
24dd0 61 67 65 78 0a 09 09 09 09 09 09 2d 70 61 67 65  agex.......-page
24de0 79 20 2d 72 6f 74 61 74 65 20 2d 77 69 64 74 68  y -rotate -width
24df0 20 2d 78 20 2d 79 0a 09 09 09 09 09 7d 5d 5d 0a   -x -y......}]].
24e00 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  ....}....}...}..
24e10 09 72 61 69 73 65 20 7b 0a 09 09 09 73 77 69 74  .raise {....swit
24e20 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09  ch -- ${pos} {..
24e30 09 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...2 { return [D
24e40 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 67  isplayHints <tag
24e50 4f 72 49 64 3e 5d 20 7d 0a 09 09 09 09 33 20 7b  OrId>] }.....3 {
24e60 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
24e70 48 69 6e 74 73 20 3f 61 62 6f 76 65 54 68 69 73  Hints ?aboveThis
24e80 3f 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  ?] }....}...}...
24e90 73 63 61 6c 65 20 7b 0a 09 09 09 73 77 69 74 63  scale {....switc
24ea0 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09  h -- ${pos} {...
24eb0 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..2 { return [Di
24ec0 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 67 4f  splayHints <tagO
24ed0 72 49 64 3e 5d 20 7d 0a 09 09 09 09 33 20 7b 20  rId>] }.....3 { 
24ee0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
24ef0 69 6e 74 73 20 3c 78 4f 72 69 67 69 6e 3e 5d 20  ints <xOrigin>] 
24f00 7d 0a 09 09 09 09 34 20 7b 20 72 65 74 75 72 6e  }.....4 { return
24f10 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
24f20 79 4f 72 69 67 69 6e 3e 5d 20 7d 0a 09 09 09 09  yOrigin>] }.....
24f30 35 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  5 { return [Disp
24f40 6c 61 79 48 69 6e 74 73 20 3c 78 53 63 61 6c 65  layHints <xScale
24f50 3e 5d 20 7d 0a 09 09 09 09 36 20 7b 20 72 65 74  >] }.....6 { ret
24f60 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
24f70 73 20 3c 79 53 63 61 6c 65 3e 5d 20 7d 0a 09 09  s <yScale>] }...
24f80 09 7d 0a 09 09 7d 0a 09 09 73 63 61 6e 20 7b 20  .}...}...scan { 
24f90 72 65 74 75 72 6e 20 5b 57 69 64 67 65 74 53 63  return [WidgetSc
24fa0 61 6e 20 24 7b 74 65 78 74 7d 20 24 7b 70 6f 73  an ${text} ${pos
24fb0 7d 5d 20 7d 0a 09 09 73 65 6c 65 63 74 20 7b 0a  }] }...select {.
24fc0 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  ...switch -- ${p
24fd0 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b 0a 09 09  os} {.....2 {...
24fe0 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
24ff0 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
25000 78 74 7d 20 7b 0a 09 09 09 09 09 09 61 64 6a 75  xt} {.......adju
25010 73 74 20 63 6c 65 61 72 20 69 74 65 6d 20 66 72  st clear item fr
25020 6f 6d 20 74 6f 0a 09 09 09 09 09 7d 5d 0a 09 09  om to......}]...
25030 09 09 7d 0a 09 09 09 09 33 20 7b 0a 09 09 09 09  ..}.....3 {.....
25040 09 73 65 74 20 73 75 62 20 5b 4c 69 6e 64 65 78  .set sub [Lindex
25050 20 24 7b 6c 69 6e 65 7d 20 32 5d 0a 09 09 09 09   ${line} 2].....
25060 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62  .switch -- ${sub
25070 7d 20 7b 0a 09 09 09 09 09 09 61 64 6a 75 73 74  } {.......adjust
25080 20 2d 0a 09 09 09 09 09 09 66 72 6f 6d 20 2d 0a   -.......from -.
25090 09 09 09 09 09 09 74 6f 20 7b 20 72 65 74 75 72  ......to { retur
250a0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
250b0 3c 74 61 67 4f 72 49 64 3e 5d 20 7d 0a 09 09 09  <tagOrId>] }....
250c0 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09 34 20  ..}.....}.....4 
250d0 7b 0a 09 09 09 09 09 73 65 74 20 73 75 62 20 5b  {......set sub [
250e0 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 32  Lindex ${line} 2
250f0 5d 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d  ]......switch --
25100 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 09 09   ${sub} {.......
25110 61 64 6a 75 73 74 20 2d 0a 09 09 09 09 09 09 66  adjust -.......f
25120 72 6f 6d 20 2d 0a 09 09 09 09 09 09 74 6f 20 7b  rom -.......to {
25130 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
25140 48 69 6e 74 73 20 3c 69 6e 64 65 78 3e 5d 20 7d  Hints <index>] }
25150 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09  ......}.....}...
25160 09 7d 0a 09 09 7d 0a 09 09 78 76 69 65 77 20 2d  .}...}...xview -
25170 0a 09 09 79 76 69 65 77 20 7b 20 72 65 74 75 72  ...yview { retur
25180 6e 20 5b 58 76 69 65 77 59 76 69 65 77 20 24 7b  n [XviewYview ${
25190 74 65 78 74 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b  text} ${line} ${
251a0 70 6f 73 7d 20 24 7b 70 72 65 76 7d 5d 20 7d 0a  pos} ${prev}] }.
251b0 09 09 63 72 65 61 74 65 20 7b 0a 09 09 09 73 77  ..create {....sw
251c0 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
251d0 0a 09 09 09 09 32 20 7b 0a 09 09 09 09 09 72 65  .....2 {......re
251e0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
251f0 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b  omList ${text} {
25200 0a 09 09 09 09 09 09 61 72 63 20 62 69 74 6d 61  .......arc bitma
25210 70 20 69 6d 61 67 65 20 6c 69 6e 65 20 6f 76 61  p image line ova
25220 6c 0a 09 09 09 09 09 09 70 6f 6c 79 67 6f 6e 20  l.......polygon 
25230 72 65 63 74 61 6e 67 6c 65 20 74 65 78 74 20 77  rectangle text w
25240 69 6e 64 6f 77 0a 09 09 09 09 09 7d 5d 0a 09 09  indow......}]...
25250 09 09 7d 0a 09 09 09 09 33 20 7b 20 72 65 74 75  ..}.....3 { retu
25260 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
25270 20 3c 78 31 3e 5d 20 7d 0a 09 09 09 09 34 20 7b   <x1>] }.....4 {
25280 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
25290 48 69 6e 74 73 20 3c 79 31 3e 5d 20 7d 0a 09 09  Hints <y1>] }...
252a0 09 09 35 20 7b 0a 09 09 09 09 09 73 65 74 20 74  ..5 {......set t
252b0 79 70 65 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69  ype [Lindex ${li
252c0 6e 65 7d 20 32 5d 0a 09 09 09 09 09 73 77 69 74  ne} 2]......swit
252d0 63 68 20 2d 2d 20 24 7b 74 79 70 65 7d 20 7b 0a  ch -- ${type} {.
252e0 09 09 09 09 09 09 61 72 63 20 2d 0a 09 09 09 09  ......arc -.....
252f0 09 09 6f 76 61 6c 20 2d 0a 09 09 09 09 09 09 72  ..oval -.......r
25300 65 63 74 61 6e 67 6c 65 20 7b 20 72 65 74 75 72  ectangle { retur
25310 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
25320 3c 78 32 3e 5d 20 7d 0a 09 09 09 09 09 09 23 20  <x2>] }.......# 
25330 54 4f 44 4f 20 69 74 65 6d 73 20 77 69 74 68 20  TODO items with 
25340 6d 6f 72 65 20 74 68 61 6e 20 34 20 63 6f 6f 72  more than 4 coor
25350 64 69 6e 61 74 65 73 0a 09 09 09 09 09 09 64 65  dinates.......de
25360 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 09 09 72  fault {........r
25370 65 74 75 72 6e 20 5b 43 61 6e 76 61 73 49 74 65  eturn [CanvasIte
25380 6d 20 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72  m ${text} ${star
25390 74 7d 20 5c 0a 09 09 09 09 09 09 09 24 7b 65 6e  t} \........${en
253a0 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73  d} ${line} ${pos
253b0 7d 20 24 7b 70 72 65 76 7d 20 24 7b 74 79 70 65  } ${prev} ${type
253c0 7d 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09  }].......}......
253d0 7d 0a 09 09 09 09 7d 0a 09 09 09 09 36 20 7b 0a  }.....}.....6 {.
253e0 09 09 09 09 09 73 65 74 20 74 79 70 65 20 5b 4c  .....set type [L
253f0 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 32 5d  index ${line} 2]
25400 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20  ......switch -- 
25410 24 7b 74 79 70 65 7d 20 7b 0a 09 09 09 09 09 09  ${type} {.......
25420 61 72 63 20 2d 0a 09 09 09 09 09 09 6f 76 61 6c  arc -.......oval
25430 20 2d 0a 09 09 09 09 09 09 72 65 63 74 61 6e 67   -.......rectang
25440 6c 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  le { return [Dis
25450 70 6c 61 79 48 69 6e 74 73 20 3c 79 32 3e 5d 20  playHints <y2>] 
25460 7d 0a 09 09 09 09 09 09 23 20 54 4f 44 4f 20 69  }.......# TODO i
25470 74 65 6d 73 20 77 69 74 68 20 6d 6f 72 65 20 74  tems with more t
25480 68 61 6e 20 34 20 63 6f 6f 72 64 69 6e 61 74 65  han 4 coordinate
25490 73 0a 09 09 09 09 09 09 64 65 66 61 75 6c 74 20  s.......default 
254a0 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e 20  {........return 
254b0 5b 43 61 6e 76 61 73 49 74 65 6d 20 24 7b 74 65  [CanvasItem ${te
254c0 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 5c 0a 09  xt} ${start} \..
254d0 09 09 09 09 09 09 24 7b 65 6e 64 7d 20 24 7b 6c  ......${end} ${l
254e0 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 24 7b 70 72  ine} ${pos} ${pr
254f0 65 76 7d 20 24 7b 74 79 70 65 7d 5d 0a 09 09 09  ev} ${type}]....
25500 09 09 09 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09  ...}......}.....
25510 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a  }.....default {.
25520 09 09 09 09 09 73 65 74 20 74 79 70 65 20 5b 4c  .....set type [L
25530 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 32 5d  index ${line} 2]
25540 0a 09 09 09 09 09 23 20 54 4f 44 4f 20 69 74 65  ......# TODO ite
25550 6d 73 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61  ms with more tha
25560 6e 20 34 20 63 6f 6f 72 64 69 6e 61 74 65 73 0a  n 4 coordinates.
25570 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 61 6e  .....return [Can
25580 76 61 73 49 74 65 6d 20 24 7b 74 65 78 74 7d 20  vasItem ${text} 
25590 24 7b 73 74 61 72 74 7d 20 5c 0a 09 09 09 09 09  ${start} \......
255a0 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24  ${end} ${line} $
255b0 7b 70 6f 73 7d 20 24 7b 70 72 65 76 7d 20 24 7b  {pos} ${prev} ${
255c0 74 79 70 65 7d 5d 0a 09 09 09 09 7d 0a 09 09 09  type}].....}....
255d0 7d 0a 09 09 7d 0a 09 09 69 74 65 6d 63 6f 6e 66  }...}...itemconf
255e0 69 67 75 72 65 20 2d 0a 09 09 69 74 65 6d 63 67  igure -...itemcg
255f0 65 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  et {....switch -
25600 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32  - ${pos} {.....2
25610 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
25620 61 79 48 69 6e 74 73 20 3c 74 61 67 4f 72 49 64  ayHints <tagOrId
25630 3e 5d 20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74  >] }.....default
25640 20 7b 0a 0a 09 09 09 09 09 73 65 74 20 69 64 20   {.......set id 
25650 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20  [Lindex ${line} 
25660 32 5d 0a 09 09 09 09 09 73 65 74 20 74 79 70 65  2]......set type
25670 20 5b 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65   [[Lindex ${line
25680 7d 20 30 5d 20 74 79 70 65 20 24 7b 69 64 7d 5d  } 0] type ${id}]
25690 0a 09 09 09 09 09 69 66 20 7b 21 5b 73 74 72 69  ......if {![stri
256a0 6e 67 20 6c 65 6e 67 74 68 20 24 7b 74 79 70 65  ng length ${type
256b0 7d 5d 7d 20 7b 0a 09 09 09 09 09 09 72 65 74 75  }]} {.......retu
256c0 72 6e 20 22 22 3b 20 23 20 6e 6f 20 73 75 63 68  rn ""; # no such
256d0 20 65 6c 65 6d 65 6e 74 0a 09 09 09 09 09 7d 0a   element......}.
256e0 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 61  ......return [Ca
256f0 6e 76 61 73 49 74 65 6d 20 24 7b 74 65 78 74 7d  nvasItem ${text}
25700 20 24 7b 73 74 61 72 74 7d 20 5c 0a 09 09 09 09   ${start} \.....
25710 09 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20  .${end} ${line} 
25720 24 7b 70 6f 73 7d 20 24 7b 70 72 65 76 7d 20 24  ${pos} ${prev} $
25730 7b 74 79 70 65 7d 5d 0a 09 09 09 09 7d 0a 09 09  {type}].....}...
25740 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72  .}...}..}..retur
25750 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 45 6e 74  n "".}..proc Ent
25760 72 79 49 6e 64 65 78 20 74 65 78 74 20 7b 0a 09  ryIndex text {..
25770 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
25780 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
25790 20 7b 0a 09 09 3c 6e 75 6d 62 65 72 3e 20 3c 40   {...<number> <@
257a0 6e 75 6d 62 65 72 3e 20 61 6e 63 68 6f 72 20 65  number> anchor e
257b0 6e 64 20 73 65 6c 2e 66 69 72 73 74 20 73 65 6c  nd sel.first sel
257c0 2e 6c 61 73 74 0a 09 7d 5d 0a 7d 0a 0a 70 72 6f  .last..}].}..pro
257d0 63 20 45 6e 74 72 79 4f 62 6a 20 7b 74 65 78 74  c EntryObj {text
257e0 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
257f0 70 6f 73 7d 20 7b 0a 09 73 65 74 20 73 75 62 20  pos} {..set sub 
25800 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20  [Lindex ${line} 
25810 31 5d 0a 09 73 65 74 20 70 72 65 76 20 5b 50 72  1]..set prev [Pr
25820 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61  eviousWord ${sta
25830 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 69 66  rt} ${line}]..if
25840 20 7b 31 20 3d 3d 20 24 70 6f 73 7d 20 7b 0a 09   {1 == $pos} {..
25850 09 72 65 74 75 72 6e 20 5b 54 72 79 53 75 62 43  .return [TrySubC
25860 6d 64 73 20 24 7b 74 65 78 74 7d 20 5b 4c 69 6e  mds ${text} [Lin
25870 64 65 78 20 24 7b 6c 69 6e 65 7d 20 30 5d 5d 0a  dex ${line} 0]].
25880 09 7d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  .}..switch -- ${
25890 73 75 62 7d 20 7b 0a 09 09 62 62 6f 78 20 2d 0a  sub} {...bbox -.
258a0 09 09 69 63 75 72 73 6f 72 20 2d 0a 09 09 69 6e  ..icursor -...in
258b0 64 65 78 20 7b 20 72 65 74 75 72 6e 20 5b 45 6e  dex { return [En
258c0 74 72 79 49 6e 64 65 78 20 24 7b 74 65 78 74 7d  tryIndex ${text}
258d0 5d 20 7d 0a 09 09 63 67 65 74 20 7b 7d 0a 09 09  ] }...cget {}...
258e0 63 6f 6e 66 69 67 75 72 65 20 7b 7d 0a 09 09 67  configure {}...g
258f0 65 74 20 7b 7d 0a 09 09 69 6e 73 65 72 74 20 7b  et {}...insert {
25900 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  ....switch -- ${
25910 70 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b 20 72  pos} {.....2 { r
25920 65 74 75 72 6e 20 5b 45 6e 74 72 79 49 6e 64 65  eturn [EntryInde
25930 78 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09  x ${text}] }....
25940 09 33 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .3 { return [Dis
25950 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 72 69 6e  playHints <strin
25960 67 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  g>] }....}...}..
25970 09 73 63 61 6e 20 7b 20 72 65 74 75 72 6e 20 5b  .scan { return [
25980 57 69 64 67 65 74 53 63 61 6e 20 24 7b 74 65 78  WidgetScan ${tex
25990 74 7d 20 24 7b 70 6f 73 7d 5d 20 7d 0a 09 09 73  t} ${pos}] }...s
259a0 65 6c 65 63 74 69 6f 6e 20 7b 0a 09 09 09 73 77  election {....sw
259b0 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
259c0 0a 09 09 09 09 32 20 7b 0a 09 09 09 09 09 72 65  .....2 {......re
259d0 74 75 72 6e 20 5b 54 72 79 53 75 62 43 6d 64 73  turn [TrySubCmds
259e0 20 24 7b 74 65 78 74 7d 20 5b 4c 72 61 6e 67 65   ${text} [Lrange
259f0 20 24 7b 6c 69 6e 65 7d 20 30 20 31 5d 5d 0a 09   ${line} 0 1]]..
25a00 09 09 09 7d 0a 09 09 09 09 33 20 7b 0a 09 09 09  ...}.....3 {....
25a10 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72  ..switch -- ${pr
25a20 65 76 7d 20 7b 0a 09 09 09 09 09 09 61 64 6a 75  ev} {.......adju
25a30 73 74 20 2d 0a 09 09 09 09 09 09 66 72 6f 6d 20  st -.......from 
25a40 2d 0a 09 09 09 09 09 09 74 6f 20 7b 20 72 65 74  -.......to { ret
25a50 75 72 6e 20 5b 45 6e 74 72 79 49 6e 64 65 78 20  urn [EntryIndex 
25a60 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09 09 09  ${text}] }......
25a70 09 63 6c 65 61 72 20 2d 0a 09 09 09 09 09 09 70  .clear -.......p
25a80 72 65 73 65 6e 74 20 7b 7d 0a 09 09 09 09 09 09  resent {}.......
25a90 72 61 6e 67 65 20 7b 20 72 65 74 75 72 6e 20 5b  range { return [
25aa0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 74  DisplayHints <st
25ab0 61 72 74 3e 5d 20 7d 0a 09 09 09 09 09 7d 0a 09  art>] }......}..
25ac0 09 09 09 7d 0a 09 09 09 09 34 20 7b 0a 09 09 09  ...}.....4 {....
25ad0 09 09 73 77 69 74 63 68 20 2d 2d 20 5b 4c 69 6e  ..switch -- [Lin
25ae0 64 65 78 20 24 7b 6c 69 6e 65 7d 20 32 5d 20 7b  dex ${line} 2] {
25af0 0a 09 09 09 09 09 09 72 61 6e 67 65 20 7b 20 72  .......range { r
25b00 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
25b10 6e 74 73 20 3c 65 6e 64 3e 5d 20 7d 0a 09 09 09  nts <end>] }....
25b20 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09  ..}.....}....}..
25b30 09 7d 0a 09 09 78 76 69 65 77 20 2d 0a 09 09 79  .}...xview -...y
25b40 76 69 65 77 20 7b 20 72 65 74 75 72 6e 20 5b 57  view { return [W
25b50 69 64 67 65 74 58 76 69 65 77 59 76 69 65 77 20  idgetXviewYview 
25b60 24 7b 74 65 78 74 7d 20 24 7b 6c 69 6e 65 7d 20  ${text} ${line} 
25b70 24 7b 70 6f 73 7d 20 24 7b 70 72 65 76 7d 5d 20  ${pos} ${prev}] 
25b80 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
25b90 7d 0a 0a 23 20 70 72 6f 63 20 43 68 65 63 6b 62  }..# proc Checkb
25ba0 75 74 74 6f 6e 4f 62 6a 20 7b 74 65 78 74 20 73  uttonObj {text s
25bb0 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
25bc0 73 7d 20 7b 0a 23 20 74 68 65 20 66 61 6c 6c 62  s} {.# the fallb
25bd0 61 63 6b 20 72 6f 75 74 69 6e 65 73 20 64 6f 20  ack routines do 
25be0 74 68 65 20 6a 6f 62 20 70 72 65 74 74 79 20 77  the job pretty w
25bf0 65 6c 6c 2e 0a 23 20 7d 0a 0a 23 20 70 72 6f 63  ell..# }..# proc
25c00 20 46 72 61 6d 65 4f 62 6a 20 7b 74 65 78 74 20   FrameObj {text 
25c10 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
25c20 6f 73 7d 20 7b 0a 23 20 74 68 65 20 66 61 6c 6c  os} {.# the fall
25c30 62 61 63 6b 20 72 6f 75 74 69 6e 65 73 20 64 6f  back routines do
25c40 20 74 68 65 20 6a 6f 62 20 70 72 65 74 74 79 20   the job pretty 
25c50 77 65 6c 6c 2e 0a 23 20 7d 0a 0a 23 20 70 72 6f  well..# }..# pro
25c60 63 20 4c 61 62 65 6c 4f 62 6a 20 7b 74 65 78 74  c LabelObj {text
25c70 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
25c80 70 6f 73 7d 20 7b 0a 23 20 74 68 65 20 66 61 6c  pos} {.# the fal
25c90 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65 73 20 64  lback routines d
25ca0 6f 20 74 68 65 20 6a 6f 62 20 70 72 65 74 74 79  o the job pretty
25cb0 20 77 65 6c 6c 2e 0a 23 20 7d 0a 0a 70 72 6f 63   well..# }..proc
25cc0 20 4c 69 73 74 62 6f 78 4f 62 6a 20 7b 74 65 78   ListboxObj {tex
25cd0 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
25ce0 20 70 6f 73 7d 20 7b 0a 09 73 65 74 20 73 75 62   pos} {..set sub
25cf0 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d   [Lindex ${line}
25d00 20 31 5d 0a 09 73 65 74 20 70 72 65 76 20 5b 50   1]..set prev [P
25d10 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74  reviousWord ${st
25d20 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 69  art} ${line}]..i
25d30 66 20 7b 31 20 3d 3d 20 24 70 6f 73 7d 20 7b 0a  f {1 == $pos} {.
25d40 09 09 72 65 74 75 72 6e 20 5b 54 72 79 53 75 62  ..return [TrySub
25d50 43 6d 64 73 20 24 7b 74 65 78 74 7d 20 5b 4c 69  Cmds ${text} [Li
25d60 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 30 5d 5d  ndex ${line} 0]]
25d70 0a 09 7d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  ..}..switch -- $
25d80 7b 73 75 62 7d 20 7b 0a 09 09 61 63 74 69 76 61  {sub} {...activa
25d90 74 65 20 2d 0a 09 09 62 62 6f 78 20 2d 0a 09 09  te -...bbox -...
25da0 69 6e 64 65 78 20 2d 0a 09 09 73 65 65 20 7b 0a  index -...see {.
25db0 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  ...switch -- ${p
25dc0 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b 0a 09 09  os} {.....2 {...
25dd0 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  ...return [Displ
25de0 61 79 48 69 6e 74 73 20 3c 69 6e 64 65 78 3e 5d  ayHints <index>]
25df0 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a  .....}....}...}.
25e00 09 09 69 6e 73 65 72 74 20 7b 0a 09 09 09 73 77  ..insert {....sw
25e10 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
25e20 0a 09 09 09 09 32 20 7b 0a 09 09 09 09 09 72 65  .....2 {......re
25e30 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
25e40 74 73 20 3c 69 6e 64 65 78 3e 5d 0a 09 09 09 09  ts <index>].....
25e50 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a  }.....default {.
25e60 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73  .....return [Dis
25e70 70 6c 61 79 48 69 6e 74 73 20 3f 65 6c 65 6d 65  playHints ?eleme
25e80 6e 74 3f 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a  nt?].....}....}.
25e90 09 09 7d 0a 09 09 63 67 65 74 20 7b 7d 0a 09 09  ..}...cget {}...
25ea0 63 6f 6e 66 69 67 75 72 65 20 7b 7d 0a 09 09 63  configure {}...c
25eb0 75 72 73 65 6c 65 63 74 69 6f 6e 20 7b 7d 0a 09  urselection {}..
25ec0 09 64 65 6c 65 74 65 20 2d 0a 09 09 67 65 74 20  .delete -...get 
25ed0 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  {....switch -- $
25ee0 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b 0a  {pos} {.....2 {.
25ef0 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73  .....return [Dis
25f00 70 6c 61 79 48 69 6e 74 73 20 3c 66 69 72 73 74  playHints <first
25f10 3e 5d 0a 09 09 09 09 7d 0a 09 09 09 09 33 20 7b  >].....}.....3 {
25f20 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  ......return [Di
25f30 73 70 6c 61 79 48 69 6e 74 73 20 3f 6c 61 73 74  splayHints ?last
25f40 3f 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09  ?].....}....}...
25f50 7d 0a 09 09 6e 65 61 72 65 73 74 20 7b 0a 09 09  }...nearest {...
25f60 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73  .switch -- ${pos
25f70 7d 20 7b 0a 09 09 09 09 32 20 7b 0a 09 09 09 09  } {.....2 {.....
25f80 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79  .return [Display
25f90 48 69 6e 74 73 20 3c 79 3e 5d 0a 09 09 09 09 7d  Hints <y>].....}
25fa0 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 73 69 7a 65  ....}...}...size
25fb0 20 7b 7d 20 20 20 20 20 0a 0a 09 09 73 63 61 6e   {}     ....scan
25fc0 20 7b 20 72 65 74 75 72 6e 20 5b 57 69 64 67 65   { return [Widge
25fd0 74 53 63 61 6e 20 24 7b 74 65 78 74 7d 20 24 7b  tScan ${text} ${
25fe0 70 6f 73 7d 5d 20 7d 0a 0a 09 09 78 76 69 65 77  pos}] }....xview
25ff0 20 2d 0a 09 09 79 76 69 65 77 20 7b 20 72 65 74   -...yview { ret
26000 75 72 6e 20 5b 57 69 64 67 65 74 58 76 69 65 77  urn [WidgetXview
26010 59 76 69 65 77 20 24 7b 74 65 78 74 7d 20 24 7b  Yview ${text} ${
26020 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 24 7b 70  line} ${pos} ${p
26030 72 65 76 7d 5d 20 7d 0a 0a 09 09 73 65 6c 65 63  rev}] }....selec
26040 74 69 6f 6e 20 7b 0a 09 09 09 73 77 69 74 63 68  tion {....switch
26050 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09   -- ${pos} {....
26060 09 32 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  .2 {......return
26070 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
26080 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09  st ${text} {....
26090 09 09 09 61 6e 63 68 6f 72 20 63 6c 65 61 72 20  ...anchor clear 
260a0 69 6e 63 6c 75 64 65 73 20 73 65 74 0a 09 09 09  includes set....
260b0 09 09 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 33  ..}].....}.....3
260c0 20 7b 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d   {......switch -
260d0 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09  - ${prev} {.....
260e0 09 09 61 6e 63 68 6f 72 20 2d 0a 09 09 09 09 09  ..anchor -......
260f0 09 69 6e 63 6c 75 64 65 73 20 7b 0a 09 09 09 09  .includes {.....
26100 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
26110 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
26120 78 74 7d 20 7b 0a 09 09 09 09 09 09 09 09 61 63  xt} {.........ac
26130 74 69 76 65 20 61 6e 63 68 6f 72 20 65 6e 64 20  tive anchor end 
26140 40 78 20 40 79 20 3c 6e 75 6d 62 65 72 3e 0a 09  @x @y <number>..
26150 09 09 09 09 09 09 7d 5d 0a 09 09 09 09 09 09 7d  ......}].......}
26160 0a 09 09 09 09 09 09 63 6c 65 61 72 20 2d 0a 09  .......clear -..
26170 09 09 09 09 09 73 65 74 20 7b 20 72 65 74 75 72  .....set { retur
26180 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
26190 3c 66 69 72 73 74 3e 5d 20 7d 0a 09 09 09 09 09  <first>] }......
261a0 7d 0a 09 09 09 09 7d 0a 09 09 09 09 34 20 7b 0a  }.....}.....4 {.
261b0 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20 5b  .....switch -- [
261c0 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 32  Lindex ${line} 2
261d0 5d 20 7b 0a 09 09 09 09 09 09 63 6c 65 61 72 20  ] {.......clear 
261e0 2d 0a 09 09 09 09 09 09 73 65 74 20 7b 20 72 65  -.......set { re
261f0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
26200 74 73 20 3f 6c 61 73 74 3f 5d 20 7d 0a 09 09 09  ts ?last?] }....
26210 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09  ..}.....}....}..
26220 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 4d 65  .}..}.}..proc Me
26230 6e 75 49 6e 64 65 78 20 74 65 78 74 20 7b 0a 09  nuIndex text {..
26240 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
26250 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
26260 20 7b 0a 09 09 3c 6e 75 6d 62 65 72 3e 20 61 63   {...<number> ac
26270 74 69 76 65 20 65 6e 64 20 6c 61 73 74 20 6e 6f  tive end last no
26280 6e 65 20 3c 40 6e 75 6d 62 65 72 3e 20 3c 6c 61  ne <@number> <la
26290 62 65 6c 50 61 74 74 65 72 6e 3e 0a 09 7d 5d 0a  belPattern>..}].
262a0 7d 0a 0a 70 72 6f 63 20 4d 65 6e 75 49 74 65 6d  }..proc MenuItem
262b0 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
262c0 20 6c 69 6e 65 20 70 6f 73 20 76 69 72 74 75 61   line pos virtua
262d0 6c 70 6f 73 7d 20 7b 0a 09 73 77 69 74 63 68 20  lpos} {..switch 
262e0 2d 2d 20 24 7b 76 69 72 74 75 61 6c 70 6f 73 7d  -- ${virtualpos}
262f0 20 7b 0a 09 09 32 20 7b 0a 09 09 09 72 65 74 75   {...2 {....retu
26300 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
26310 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09  List ${text} {..
26320 09 09 09 63 61 73 63 61 64 65 20 63 68 65 63 6b  ...cascade check
26330 62 75 74 74 6f 6e 20 63 6f 6d 6d 61 6e 64 20 72  button command r
26340 61 64 69 6f 62 75 74 74 6f 6e 20 73 65 70 61 72  adiobutton separ
26350 61 74 6f 72 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09  ator....}]...}..
26360 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 73 77  .default {....sw
26370 69 74 63 68 20 2d 2d 20 5b 50 72 65 76 69 6f 75  itch -- [Previou
26380 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24  sWord ${start} $
26390 7b 6c 69 6e 65 7d 5d 20 7b 0a 09 09 09 09 2d 61  {line}] {.....-a
263a0 63 74 69 76 65 62 61 63 6b 67 72 6f 75 6e 64 20  ctivebackground 
263b0 2d 0a 09 09 09 09 2d 61 63 74 69 76 65 66 6f 72  -.....-activefor
263c0 65 67 72 6f 75 6e 64 20 2d 0a 09 09 09 09 2d 62  eground -.....-b
263d0 61 63 6b 67 72 6f 75 6e 64 20 2d 0a 09 09 09 09  ackground -.....
263e0 2d 66 6f 72 65 67 72 6f 75 6e 64 20 2d 0a 09 09  -foreground -...
263f0 09 09 2d 73 65 6c 65 63 74 63 6f 6c 6f 72 20 7b  ..-selectcolor {
26400 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  ......return [Di
26410 73 70 6c 61 79 48 69 6e 74 73 20 3c 63 6f 6c 6f  splayHints <colo
26420 72 3e 5d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 2d  r>].....}......-
26430 61 63 63 65 6c 65 72 61 74 6f 72 20 7b 20 72 65  accelerator { re
26440 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
26450 74 73 20 3c 61 63 63 65 6c 3e 5d 20 7d 0a 09 09  ts <accel>] }...
26460 09 09 2d 62 69 74 6d 61 70 20 7b 20 72 65 74 75  ..-bitmap { retu
26470 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
26480 42 69 74 6d 61 70 73 20 24 7b 74 65 78 74 7d 5d  Bitmaps ${text}]
26490 20 7d 0a 0a 09 09 09 09 2d 63 6f 6c 75 6d 6e 62   }......-columnb
264a0 72 65 61 6b 20 2d 0a 09 09 09 09 2d 68 69 64 65  reak -.....-hide
264b0 6d 61 72 67 69 6e 20 2d 0a 09 09 09 09 2d 69 6e  margin -.....-in
264c0 64 69 63 61 74 6f 72 6f 6e 20 7b 0a 09 09 09 09  dicatoron {.....
264d0 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
264e0 65 42 6f 6f 6c 65 61 6e 20 24 7b 74 65 78 74 7d  eBoolean ${text}
264f0 5d 0a 09 09 09 09 7d 0a 09 09 09 09 2d 63 6f 6d  ].....}.....-com
26500 6d 61 6e 64 20 7b 0a 09 09 09 09 09 72 65 74 75  mand {......retu
26510 72 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61  rn [BraceOrComma
26520 6e 64 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09  nd ${text} \....
26530 09 09 24 7b 73 74 61 72 74 7d 20 24 7b 65 6e 64  ..${start} ${end
26540 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d  } ${line} ${pos}
26550 20 24 7b 74 65 78 74 7d 5d 0a 09 09 09 09 7d 0a   ${text}].....}.
26560 09 09 09 09 2d 66 6f 6e 74 20 7b 0a 09 09 09 09  ....-font {.....
26570 09 73 65 74 20 6e 61 6d 65 73 20 5b 66 6f 6e 74  .set names [font
26580 20 6e 61 6d 65 73 5d 0a 09 09 09 09 09 69 66 20   names]......if 
26590 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length 
265a0 24 7b 6e 61 6d 65 73 7d 5d 7d 20 7b 0a 09 09 09  ${names}]} {....
265b0 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
265c0 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
265d0 78 74 7d 20 24 7b 6e 61 6d 65 73 7d 5d 0a 09 09  xt} ${names}]...
265e0 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ...} else {.....
265f0 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  ..return [Displa
26600 79 48 69 6e 74 73 20 3c 66 6f 6e 74 6e 61 6d 65  yHints <fontname
26610 3e 5d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a  >]......}.....}.
26620 09 09 09 09 2d 69 6d 61 67 65 20 2d 0a 09 09 09  ....-image -....
26630 09 2d 73 65 6c 65 63 74 69 6d 61 67 65 20 7b 20  .-selectimage { 
26640 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
26650 46 72 6f 6d 49 6d 61 67 65 73 20 24 7b 74 65 78  FromImages ${tex
26660 74 7d 5d 20 7d 0a 0a 09 09 09 09 2d 6c 61 62 65  t}] }......-labe
26670 6c 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  l { return [Disp
26680 6c 61 79 48 69 6e 74 73 20 3c 6c 61 62 65 6c 3e  layHints <label>
26690 5d 20 7d 0a 09 09 09 09 2d 6d 65 6e 75 20 7b 0a  ] }.....-menu {.
266a0 09 09 09 09 09 73 65 74 20 6e 61 6d 65 73 20 5b  .....set names [
266b0 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 5b  WidgetChildren [
266c0 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 30  Lindex ${line} 0
266d0 5d 5d 0a 09 09 09 09 09 69 66 20 7b 5b 73 74 72  ]]......if {[str
266e0 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b 6e 61 6d  ing length ${nam
266f0 65 73 7d 5d 7d 20 7b 0a 09 09 09 09 09 09 72 65  es}]} {.......re
26700 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
26710 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24  omList ${text} $
26720 7b 6e 61 6d 65 73 7d 5d 0a 09 09 09 09 09 7d 20  {names}]......} 
26730 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 72 65 74  else {.......ret
26740 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
26750 73 20 3c 6d 65 6e 75 3e 5d 0a 09 09 09 09 09 7d  s <menu>]......}
26760 0a 09 09 09 09 7d 0a 0a 09 09 09 09 2d 6f 66 66  .....}......-off
26770 76 61 6c 75 65 20 2d 0a 09 09 09 09 2d 6f 6e 76  value -.....-onv
26780 61 6c 75 65 20 7b 20 72 65 74 75 72 6e 20 5b 44  alue { return [D
26790 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 76 61 6c  isplayHints <val
267a0 75 65 3e 5d 20 7d 0a 0a 09 09 09 09 2d 73 74 61  ue>] }......-sta
267b0 74 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  te {......return
267c0 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
267d0 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09  st ${text} {....
267e0 09 09 09 6e 6f 72 6d 61 6c 20 61 63 74 69 76 65  ...normal active
267f0 20 64 69 73 61 62 6c 65 64 0a 09 09 09 09 09 7d   disabled......}
26800 5d 0a 09 09 09 09 7d 0a 09 09 09 09 2d 75 6e 64  ].....}.....-und
26810 65 72 6c 69 6e 65 20 7b 20 72 65 74 75 72 6e 20  erline { return 
26820 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 69  [DisplayHints <i
26830 6e 74 65 67 65 72 3e 5d 20 7d 0a 09 09 09 09 2d  nteger>] }.....-
26840 76 61 6c 75 65 20 7b 20 72 65 74 75 72 6e 20 5b  value { return [
26850 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 76 61  DisplayHints <va
26860 6c 75 65 3e 5d 20 7d 0a 09 09 09 09 2d 76 61 72  lue>] }.....-var
26870 69 61 62 6c 65 20 7b 0a 09 09 09 09 09 72 65 74  iable {......ret
26880 75 72 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69  urn [VarCompleti
26890 6f 6e 20 24 7b 74 65 78 74 7d 20 23 30 5d 0a 09  on ${text} #0]..
268a0 09 09 09 7d 0a 0a 09 09 09 09 64 65 66 61 75 6c  ...}......defaul
268b0 74 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  t {......return 
268c0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
268d0 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09  t ${text} \.....
268e0 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69  .[RemoveUsedOpti
268f0 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09  ons ${line} {...
26900 09 09 09 09 2d 61 63 74 69 76 65 62 61 63 6b 67  ....-activebackg
26910 72 6f 75 6e 64 20 2d 61 63 74 69 76 65 66 6f 72  round -activefor
26920 65 67 72 6f 75 6e 64 0a 09 09 09 09 09 09 2d 61  eground.......-a
26930 63 63 65 6c 65 72 61 74 6f 72 20 2d 62 61 63 6b  ccelerator -back
26940 67 72 6f 75 6e 64 20 2d 62 69 74 6d 61 70 20 2d  ground -bitmap -
26950 63 6f 6c 75 6d 6e 62 72 65 61 6b 0a 09 09 09 09  columnbreak.....
26960 09 09 2d 63 6f 6d 6d 61 6e 64 20 2d 66 6f 6e 74  ..-command -font
26970 20 2d 66 6f 72 65 67 72 6f 75 6e 64 20 2d 68 69   -foreground -hi
26980 64 65 6d 61 72 67 69 6e 20 2d 69 6d 61 67 65 0a  demargin -image.
26990 09 09 09 09 09 09 2d 69 6e 64 69 63 61 74 6f 72  ......-indicator
269a0 6f 6e 20 2d 6c 61 62 65 6c 20 2d 6d 65 6e 75 20  on -label -menu 
269b0 2d 6f 66 66 76 61 6c 75 65 20 2d 6f 6e 76 61 6c  -offvalue -onval
269c0 75 65 0a 09 09 09 09 09 09 2d 73 65 6c 65 63 74  ue.......-select
269d0 63 6f 6c 6f 72 20 2d 73 65 6c 65 63 74 69 6d 61  color -selectima
269e0 67 65 20 2d 73 74 61 74 65 20 2d 75 6e 64 65 72  ge -state -under
269f0 6c 69 6e 65 0a 09 09 09 09 09 09 2d 76 61 6c 75  line.......-valu
26a00 65 20 2d 76 61 72 69 61 62 6c 65 0a 09 09 09 09  e -variable.....
26a10 09 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a  .}]].....}....}.
26a20 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 4d  ..}..}.}..proc M
26a30 65 6e 75 4f 62 6a 20 7b 74 65 78 74 20 73 74 61  enuObj {text sta
26a40 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 7d  rt end line pos}
26a50 20 7b 0a 09 73 65 74 20 73 75 62 20 5b 4c 69 6e   {..set sub [Lin
26a60 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09  dex ${line} 1]..
26a70 73 65 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f  set prev [Previo
26a80 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20  usWord ${start} 
26a90 24 7b 6c 69 6e 65 7d 5d 0a 09 69 66 20 7b 31 20  ${line}]..if {1 
26aa0 3d 3d 20 24 70 6f 73 7d 20 7b 0a 09 09 72 65 74  == $pos} {...ret
26ab0 75 72 6e 20 5b 54 72 79 53 75 62 43 6d 64 73 20  urn [TrySubCmds 
26ac0 24 7b 74 65 78 74 7d 20 5b 4c 69 6e 64 65 78 20  ${text} [Lindex 
26ad0 24 7b 6c 69 6e 65 7d 20 30 5d 5d 0a 09 7d 0a 09  ${line} 0]]..}..
26ae0 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d  switch -- ${sub}
26af0 20 7b 0a 09 09 61 63 74 69 76 61 74 65 20 2d 0a   {...activate -.
26b00 09 09 69 6e 64 65 78 20 2d 0a 09 09 69 6e 76 6f  ..index -...invo
26b10 6b 65 20 2d 0a 09 09 70 6f 73 74 63 61 73 63 61  ke -...postcasca
26b20 64 65 20 2d 0a 09 09 74 79 70 65 20 2d 0a 09 09  de -...type -...
26b30 79 70 6f 73 69 74 69 6f 6e 20 7b 0a 09 09 09 73  yposition {....s
26b40 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
26b50 7b 0a 09 09 09 09 32 20 7b 0a 09 09 09 09 09 72  {.....2 {......r
26b60 65 74 75 72 6e 20 5b 4d 65 6e 75 49 6e 64 65 78  eturn [MenuIndex
26b70 20 24 7b 74 65 78 74 7d 5d 0a 09 09 09 09 7d 0a   ${text}].....}.
26b80 09 09 09 7d 0a 09 09 7d 0a 09 09 63 6f 6e 66 69  ...}...}...confi
26b90 67 75 72 65 20 7b 7d 0a 09 09 63 67 65 74 20 7b  gure {}...cget {
26ba0 7d 0a 0a 09 09 61 64 64 20 7b 0a 09 09 09 72 65  }....add {....re
26bb0 74 75 72 6e 20 5b 4d 65 6e 75 49 74 65 6d 20 24  turn [MenuItem $
26bc0 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20  {text} ${start} 
26bd0 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24  ${end} ${line} $
26be0 7b 70 6f 73 7d 20 24 7b 70 6f 73 7d 5d 0a 09 09  {pos} ${pos}]...
26bf0 7d 0a 09 09 63 6c 6f 6e 65 20 7b 0a 09 09 09 73  }...clone {....s
26c00 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
26c10 7b 0a 09 09 09 09 32 20 7b 20 72 65 74 75 72 6e  {.....2 { return
26c20 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
26c30 6e 65 77 50 61 74 68 6e 61 6d 65 3e 5d 20 7d 0a  newPathname>] }.
26c40 09 09 09 09 33 20 7b 0a 09 09 09 09 09 72 65 74  ....3 {......ret
26c50 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
26c60 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a  mList ${text} {.
26c70 09 09 09 09 09 09 6e 6f 72 6d 61 6c 20 6d 65 6e  ......normal men
26c80 75 62 61 72 20 74 65 61 72 6f 66 66 0a 09 09 09  ubar tearoff....
26c90 09 09 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a  ..}].....}....}.
26ca0 09 09 7d 0a 09 09 64 65 6c 65 74 65 20 7b 0a 09  ..}...delete {..
26cb0 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
26cc0 73 7d 20 7b 0a 09 09 09 09 32 20 2d 0a 09 09 09  s} {.....2 -....
26cd0 09 33 20 7b 20 72 65 74 75 72 6e 20 5b 4d 65 6e  .3 { return [Men
26ce0 75 49 6e 64 65 78 20 24 7b 74 65 78 74 7d 5d 20  uIndex ${text}] 
26cf0 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 69 6e 73  }....}...}...ins
26d00 65 72 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ert {....switch 
26d10 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09  -- ${pos} {.....
26d20 32 20 7b 20 72 65 74 75 72 6e 20 5b 4d 65 6e 75  2 { return [Menu
26d30 49 6e 64 65 78 20 24 7b 74 65 78 74 7d 5d 20 7d  Index ${text}] }
26d40 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  .....default {..
26d50 09 09 09 09 72 65 74 75 72 6e 20 5b 4d 65 6e 75  ....return [Menu
26d60 49 74 65 6d 20 24 7b 74 65 78 74 7d 20 24 7b 73  Item ${text} ${s
26d70 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20 5c 0a 09  tart} ${end} \..
26d80 09 09 09 09 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f  ....${line} ${po
26d90 73 7d 20 5b 65 78 70 72 20 24 7b 70 6f 73 7d 20  s} [expr ${pos} 
26da0 2d 20 31 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d  - 1]].....}....}
26db0 0a 09 09 7d 0a 09 09 65 6e 74 72 79 63 67 65 74  ...}...entrycget
26dc0 20 2d 0a 09 09 65 6e 74 72 79 63 6f 6e 66 69 67   -...entryconfig
26dd0 75 72 65 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ure {....switch 
26de0 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09  -- ${pos} {.....
26df0 32 20 7b 20 72 65 74 75 72 6e 20 5b 4d 65 6e 75  2 { return [Menu
26e00 49 6e 64 65 78 20 24 7b 74 65 78 74 7d 5d 20 7d  Index ${text}] }
26e10 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  .....default {..
26e20 09 09 09 09 72 65 74 75 72 6e 20 5b 4d 65 6e 75  ....return [Menu
26e30 49 74 65 6d 20 24 7b 74 65 78 74 7d 20 24 7b 73  Item ${text} ${s
26e40 74 61 72 74 7d 20 5c 0a 09 09 09 09 09 24 7b 65  tart} \......${e
26e50 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f  nd} ${line} ${po
26e60 73 7d 20 24 7b 70 6f 73 7d 5d 0a 09 09 09 09 7d  s} ${pos}].....}
26e70 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 70 6f 73 74  ....}...}...post
26e80 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
26e90 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b  ${pos} {.....2 {
26ea0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
26eb0 48 69 6e 74 73 20 3c 78 3e 5d 20 7d 0a 09 09 09  Hints <x>] }....
26ec0 09 33 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .3 { return [Dis
26ed0 70 6c 61 79 48 69 6e 74 73 20 3c 79 3e 5d 20 7d  playHints <y>] }
26ee0 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 23 20 3f 3f  ....}...}...# ??
26ef0 3f 20 58 58 58 0a 09 09 75 6e 70 6f 73 74 20 7b  ? XXX...unpost {
26f00 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 50 68 6f  }..}.}..proc Pho
26f10 74 6f 4f 62 6a 20 7b 74 65 78 74 20 73 74 61 72  toObj {text star
26f20 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 7d 20  t end line pos} 
26f30 7b 0a 09 73 65 74 20 73 75 62 20 5b 4c 69 6e 64  {..set sub [Lind
26f40 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73  ex ${line} 1]..s
26f50 65 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75  et prev [Previou
26f60 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24  sWord ${start} $
26f70 7b 6c 69 6e 65 7d 5d 0a 09 73 65 74 20 63 6f 70  {line}]..set cop
26f80 79 5f 6f 70 74 73 20 7b 20 2d 66 72 6f 6d 20 2d  y_opts { -from -
26f90 74 6f 20 2d 73 68 72 69 6e 6b 20 2d 7a 6f 6f 6d  to -shrink -zoom
26fa0 20 2d 73 75 62 73 61 6d 70 6c 65 20 7d 0a 09 73   -subsample }..s
26fb0 65 74 20 72 65 61 64 5f 6f 70 74 73 20 7b 20 2d  et read_opts { -
26fc0 66 72 6f 6d 20 2d 74 6f 20 2d 73 68 72 69 6e 6b  from -to -shrink
26fd0 20 2d 66 6f 72 6d 61 74 20 7d 0a 09 73 65 74 20   -format }..set 
26fe0 77 72 69 74 65 5f 6f 70 74 73 20 7b 20 2d 66 72  write_opts { -fr
26ff0 6f 6d 20 2d 66 6f 72 6d 61 74 20 7d 0a 09 73 77  om -format }..sw
27000 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
27010 0a 09 09 31 20 7b 0a 09 09 09 72 65 74 75 72 6e  ...1 {....return
27020 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
27030 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09  st ${text} {....
27040 09 62 6c 61 6e 6b 20 63 67 65 74 20 63 6f 6e 66  .blank cget conf
27050 69 67 75 72 65 20 63 6f 70 79 20 67 65 74 20 70  igure copy get p
27060 75 74 20 72 65 61 64 20 72 65 64 69 74 68 65 72  ut read redither
27070 20 77 72 69 74 65 20 20 0a 09 09 09 7d 5d 0a 09   write  ....}]..
27080 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73 77 69 74  .}...2 {....swit
27090 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09  ch -- ${sub} {..
270a0 09 09 09 62 6c 61 6e 6b 20 7b 7d 0a 09 09 09 09  ...blank {}.....
270b0 63 67 65 74 20 7b 7d 0a 09 09 09 09 63 6f 6e 66  cget {}.....conf
270c0 69 67 75 72 65 20 7b 7d 0a 09 09 09 09 72 65 64  igure {}.....red
270d0 69 74 68 65 72 20 7b 7d 0a 09 09 09 09 63 6f 70  ither {}.....cop
270e0 79 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  y { return [Comp
270f0 6c 65 74 65 46 72 6f 6d 49 6d 61 67 65 73 20 24  leteFromImages $
27100 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09 09 67 65  {text}] }.....ge
27110 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  t { return [Disp
27120 6c 61 79 48 69 6e 74 73 20 3c 78 3e 5d 20 7d 0a  layHints <x>] }.
27130 09 09 09 09 70 75 74 20 7b 20 72 65 74 75 72 6e  ....put { return
27140 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
27150 64 61 74 61 3e 5d 20 7d 0a 09 09 09 09 72 65 61  data>] }.....rea
27160 64 20 7b 7d 0a 09 09 09 09 77 72 69 74 65 20 7b  d {}.....write {
27170 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 33 20 7b  }....}...}...3 {
27180 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  ....switch -- ${
27190 73 75 62 7d 20 7b 0a 09 09 09 09 62 6c 61 6e 6b  sub} {.....blank
271a0 20 7b 7d 0a 09 09 09 09 63 67 65 74 20 7b 7d 0a   {}.....cget {}.
271b0 09 09 09 09 63 6f 6e 66 69 67 75 72 65 20 7b 7d  ....configure {}
271c0 0a 09 09 09 09 72 65 64 69 74 68 65 72 20 7b 7d  .....redither {}
271d0 0a 09 09 09 09 63 6f 70 79 20 7b 20 72 65 74 75  .....copy { retu
271e0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
271f0 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 63  List ${text} ${c
27200 6f 70 79 5f 6f 70 74 73 7d 5d 20 7d 0a 09 09 09  opy_opts}] }....
27210 09 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5b 44  .get { return [D
27220 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 79 3e 5d  isplayHints <y>]
27230 20 7d 0a 09 09 09 09 70 75 74 20 7b 20 72 65 74   }.....put { ret
27240 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
27250 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 2d 74  mList ${text} -t
27260 6f 5d 20 7d 0a 09 09 09 09 72 65 61 64 20 7b 20  o] }.....read { 
27270 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
27280 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
27290 20 24 7b 72 65 61 64 5f 6f 70 74 73 7d 5d 20 7d   ${read_opts}] }
272a0 0a 09 09 09 09 77 72 69 74 65 20 7b 20 72 65 74  .....write { ret
272b0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
272c0 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24 7b  mList ${text} ${
272d0 77 72 69 74 65 5f 6f 70 74 73 7d 5d 20 7d 0a 09  write_opts}] }..
272e0 09 09 7d 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c  ..}...}...defaul
272f0 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d  t {....switch --
27300 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 62 6c   ${sub} {.....bl
27310 61 6e 6b 20 7b 7d 0a 09 09 09 09 63 67 65 74 20  ank {}.....cget 
27320 7b 7d 0a 09 09 09 09 63 6f 6e 66 69 67 75 72 65  {}.....configure
27330 20 7b 7d 0a 09 09 09 09 72 65 64 69 74 68 65 72   {}.....redither
27340 20 7b 7d 0a 09 09 09 09 67 65 74 20 7b 7d 0a 09   {}.....get {}..
27350 09 09 09 63 6f 70 79 20 7b 0a 09 09 09 09 09 73  ...copy {......s
27360 77 69 74 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d  witch -- ${prev}
27370 20 7b 0a 09 09 09 09 09 09 2d 66 72 6f 6d 20 2d   {.......-from -
27380 0a 09 09 09 09 09 09 2d 74 6f 20 7b 20 72 65 74  .......-to { ret
27390 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
273a0 73 20 5b 6c 69 73 74 20 3c 78 31 20 79 31 20 78  s [list <x1 y1 x
273b0 32 20 79 32 3e 5d 5d 20 7d 0a 09 09 09 09 09 09  2 y2>]] }.......
273c0 2d 7a 6f 6f 6d 20 2d 0a 09 09 09 09 09 09 2d 73  -zoom -.......-s
273d0 75 62 73 61 6d 70 6c 65 20 7b 20 72 65 74 75 72  ubsample { retur
273e0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
273f0 5b 6c 69 73 74 20 3c 78 20 79 3e 5d 5d 20 7d 0a  [list <x y>]] }.
27400 09 09 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a  ......default {.
27410 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  .......return [C
27420 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
27430 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 09  ${text} \.......
27440 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69  .[RemoveUsedOpti
27450 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 24 7b 63 6f  ons ${line} ${co
27460 70 79 5f 6f 70 74 73 7d 5d 5d 0a 09 09 09 09 09  py_opts}]]......
27470 09 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a  .}......}.....}.
27480 09 09 09 09 70 75 74 20 7b 0a 09 09 09 09 09 73  ....put {......s
27490 77 69 74 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d  witch -- ${prev}
274a0 20 7b 0a 09 09 09 09 09 09 2d 74 6f 20 7b 0a 09   {.......-to {..
274b0 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  ......return [Di
274c0 73 70 6c 61 79 48 69 6e 74 73 20 5b 6c 69 73 74  splayHints [list
274d0 20 3c 78 31 20 79 31 20 78 32 20 79 32 3e 5d 5d   <x1 y1 x2 y2>]]
274e0 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a  .......}......}.
274f0 09 09 09 09 7d 0a 09 09 09 09 72 65 61 64 20 7b  ....}.....read {
27500 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20  ......switch -- 
27510 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09 09 09  ${prev} {.......
27520 2d 66 72 6f 6d 20 7b 20 72 65 74 75 72 6e 20 5b  -from { return [
27530 44 69 73 70 6c 61 79 48 69 6e 74 73 20 5b 6c 69  DisplayHints [li
27540 73 74 20 3c 78 31 20 79 31 20 78 32 20 79 32 3e  st <x1 y1 x2 y2>
27550 5d 5d 20 7d 0a 09 09 09 09 09 09 2d 74 6f 20 7b  ]] }.......-to {
27560 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
27570 48 69 6e 74 73 20 5b 6c 69 73 74 20 3c 78 20 79  Hints [list <x y
27580 3e 5d 5d 20 7d 0a 09 09 09 09 09 09 2d 66 6f 72  >]] }.......-for
27590 6d 61 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  mat { return [Di
275a0 73 70 6c 61 79 48 69 6e 74 73 20 3c 66 6f 72 6d  splayHints <form
275b0 61 74 4e 61 6d 65 3e 5d 20 7d 0a 09 09 09 09 09  atName>] }......
275c0 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09  .default {......
275d0 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
275e0 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
275f0 74 7d 20 5c 0a 09 09 09 09 09 09 09 5b 52 65 6d  t} \........[Rem
27600 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24  oveUsedOptions $
27610 7b 6c 69 6e 65 7d 20 24 7b 72 65 61 64 5f 6f 70  {line} ${read_op
27620 74 73 7d 5d 5d 0a 09 09 09 09 09 09 7d 0a 09 09  ts}]].......}...
27630 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09 77  ...}.....}.....w
27640 72 69 74 65 20 7b 0a 09 09 09 09 09 73 77 69 74  rite {......swit
27650 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a  ch -- ${prev} {.
27660 09 09 09 09 09 09 2d 66 72 6f 6d 20 7b 20 72 65  ......-from { re
27670 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
27680 74 73 20 5b 6c 69 73 74 20 3c 78 31 20 79 31 20  ts [list <x1 y1 
27690 78 32 20 79 32 3e 5d 5d 20 7d 0a 09 09 09 09 09  x2 y2>]] }......
276a0 09 2d 66 6f 72 6d 61 74 20 7b 20 72 65 74 75 72  .-format { retur
276b0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
276c0 3c 66 6f 72 6d 61 74 4e 61 6d 65 3e 5d 20 7d 0a  <formatName>] }.
276d0 09 09 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a  ......default {.
276e0 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  .......return [C
276f0 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
27700 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 09  ${text} \.......
27710 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69  .[RemoveUsedOpti
27720 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 24 7b 77 72  ons ${line} ${wr
27730 69 74 65 5f 6f 70 74 73 7d 5d 5d 0a 09 09 09 09  ite_opts}]].....
27740 09 09 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d  ..}......}.....}
27750 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a  ....}...}..}.}..
27760 23 20 70 72 6f 63 20 52 61 64 69 6f 62 75 74 74  # proc Radiobutt
27770 6f 6e 4f 62 6a 20 7b 74 65 78 74 20 73 74 61 72  onObj {text star
27780 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 7d 20  t end line pos} 
27790 7b 0a 23 20 74 68 65 20 66 61 6c 6c 62 61 63 6b  {.# the fallback
277a0 20 72 6f 75 74 69 6e 65 73 20 64 6f 20 74 68 65   routines do the
277b0 20 6a 6f 62 20 70 72 65 74 74 79 20 77 65 6c 6c   job pretty well
277c0 2e 0a 23 20 7d 0a 0a 70 72 6f 63 20 53 63 61 6c  ..# }..proc Scal
277d0 65 4f 62 6a 20 7b 74 65 78 74 20 73 74 61 72 74  eObj {text start
277e0 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 7d 20 7b   end line pos} {
277f0 0a 0a 09 73 65 74 20 73 75 62 20 5b 4c 69 6e 64  ...set sub [Lind
27800 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73  ex ${line} 1]..s
27810 65 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75  et prev [Previou
27820 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24  sWord ${start} $
27830 7b 6c 69 6e 65 7d 5d 0a 0a 09 73 77 69 74 63 68  {line}]...switch
27840 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31   -- ${pos} {...1
27850 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 54 72   {....return [Tr
27860 79 53 75 62 43 6d 64 73 20 24 7b 74 65 78 74 7d  ySubCmds ${text}
27870 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d   [Lindex ${line}
27880 20 30 5d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09   0]]...}...2 {..
27890 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75  ..switch -- ${su
278a0 62 7d 20 7b 0a 09 09 09 09 63 6f 6f 72 64 73 20  b} {.....coords 
278b0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
278c0 79 48 69 6e 74 73 20 3f 76 61 6c 75 65 3f 5d 20  yHints ?value?] 
278d0 7d 0a 09 09 09 09 67 65 74 20 7b 20 72 65 74 75  }.....get { retu
278e0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
278f0 20 3f 78 3f 5d 20 7d 0a 09 09 09 09 69 64 65 6e   ?x?] }.....iden
27900 74 69 66 79 20 7b 20 72 65 74 75 72 6e 20 5b 44  tify { return [D
27910 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 78 3e 5d  isplayHints <x>]
27920 20 7d 0a 09 09 09 09 73 65 74 20 7b 20 72 65 74   }.....set { ret
27930 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
27940 73 20 3c 76 61 6c 75 65 3e 5d 20 7d 0a 09 09 09  s <value>] }....
27950 7d 0a 09 09 7d 0a 09 09 33 20 7b 0a 09 09 09 73  }...}...3 {....s
27960 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20  witch -- ${sub} 
27970 7b 0a 09 09 09 09 67 65 74 20 7b 20 72 65 74 75  {.....get { retu
27980 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
27990 20 3f 79 3f 5d 20 7d 0a 09 09 09 09 69 64 65 6e   ?y?] }.....iden
279a0 74 69 66 79 20 7b 20 72 65 74 75 72 6e 20 5b 44  tify { return [D
279b0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 79 3e 5d  isplayHints <y>]
279c0 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d   }....}...}..}.}
279d0 0a 0a 70 72 6f 63 20 53 63 72 6f 6c 6c 62 61 72  ..proc Scrollbar
279e0 4f 62 6a 20 7b 74 65 78 74 20 73 74 61 72 74 20  Obj {text start 
279f0 65 6e 64 20 6c 69 6e 65 20 70 6f 73 7d 20 7b 0a  end line pos} {.
27a00 0a 09 73 65 74 20 73 75 62 20 5b 4c 69 6e 64 65  ..set sub [Linde
27a10 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73 65  x ${line} 1]..se
27a20 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73  t prev [Previous
27a30 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b  Word ${start} ${
27a40 6c 69 6e 65 7d 5d 0a 0a 09 23 20 6e 6f 74 65 20  line}]...# note 
27a50 74 68 61 74 20 74 68 65 20 60 70 72 65 66 69 78  that the `prefix
27a60 20 6d 6f 76 65 74 6f 7c 73 63 72 6f 6c 6c 27 0a   moveto|scroll'.
27a70 09 23 20 63 6f 6e 73 74 72 75 63 74 20 69 73 20  .# construct is 
27a80 68 61 72 64 20 74 6f 20 63 6f 6d 70 6c 65 74 65  hard to complete
27a90 2e 0a 09 23 0a 09 73 77 69 74 63 68 20 2d 2d 20  ...#..switch -- 
27aa0 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a 09  ${pos} {...1 {..
27ab0 09 09 72 65 74 75 72 6e 20 5b 54 72 79 53 75 62  ..return [TrySub
27ac0 43 6d 64 73 20 24 7b 74 65 78 74 7d 20 5b 4c 69  Cmds ${text} [Li
27ad0 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 30 5d 5d  ndex ${line} 0]]
27ae0 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73 77  ...}...2 {....sw
27af0 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b  itch -- ${sub} {
27b00 0a 09 09 09 09 61 63 74 69 76 61 74 65 20 7b 0a  .....activate {.
27b10 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
27b20 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
27b30 74 65 78 74 7d 20 7b 0a 09 09 09 09 09 09 61 72  text} {.......ar
27b40 72 6f 77 31 20 73 6c 69 64 65 72 20 61 72 72 6f  row1 slider arro
27b50 77 32 0a 09 09 09 09 09 7d 5d 0a 09 09 09 09 7d  w2......}].....}
27b60 0a 0a 09 09 09 09 66 72 61 63 74 69 6f 6e 20 2d  ......fraction -
27b70 0a 09 09 09 09 69 64 65 6e 74 69 66 79 20 7b 20  .....identify { 
27b80 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
27b90 69 6e 74 73 20 3c 78 3e 5d 20 7d 0a 09 09 09 09  ints <x>] }.....
27ba0 64 65 6c 74 61 20 7b 20 72 65 74 75 72 6e 20 5b  delta { return [
27bb0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 64 65  DisplayHints <de
27bc0 6c 74 61 58 3e 5d 20 7d 0a 09 09 09 09 73 65 74  ltaX>] }.....set
27bd0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
27be0 61 79 48 69 6e 74 73 20 3c 66 69 72 73 74 3e 5d  ayHints <first>]
27bf0 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 33 20   }....}...}...3 
27c00 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  {....switch -- $
27c10 7b 73 75 62 7d 20 7b 0a 0a 09 09 09 09 66 72 61  {sub} {......fra
27c20 63 74 69 6f 6e 20 2d 0a 09 09 09 09 69 64 65 6e  ction -.....iden
27c30 74 69 66 79 20 7b 20 72 65 74 75 72 6e 20 5b 44  tify { return [D
27c40 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 79 3e 5d  isplayHints <y>]
27c50 20 7d 0a 09 09 09 09 64 65 6c 74 61 20 7b 20 72   }.....delta { r
27c60 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
27c70 6e 74 73 20 3c 64 65 6c 74 61 59 3e 5d 20 7d 0a  nts <deltaY>] }.
27c80 09 09 09 09 73 65 74 20 7b 20 72 65 74 75 72 6e  ....set { return
27c90 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
27ca0 6c 61 73 74 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09  last>] }....}...
27cb0 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 54 65 78  }..}.}..proc Tex
27cc0 74 4f 62 6a 20 7b 74 65 78 74 20 73 74 61 72 74  tObj {text start
27cd0 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 7d 20 7b   end line pos} {
27ce0 0a 09 23 20 54 4f 44 4f 20 2e 2e 2e 0a 09 72 65  ..# TODO .....re
27cf0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
27d00 6f 6d 4f 70 74 69 6f 6e 73 4f 72 53 75 62 43 6d  omOptionsOrSubCm
27d10 64 73 20 5c 0a 09 24 7b 74 65 78 74 7d 20 24 7b  ds \..${text} ${
27d20 73 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20 24 7b  start} ${end} ${
27d30 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 5d 0a 7d 0a  line} ${pos}].}.
27d40 0a 7d 3b 20 23 20 6e 61 6d 65 73 70 61 63 65 20  .}; # namespace 
27d50 74 63 6c 72 65 61 64 6c 69 6e 65 0a              tclreadline.