Hex Artifact Content
Not logged in

Artifact a0a878b98b2857fb62f812dda04b800c2a0d9a4e:


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 54 75 65 20 53 65 70 20 32 31 20 32  N: "Tue Sep 21 2
0070: 31 3a 31 39 3a 30 37 20 31 39 39 39 20 28 6a 6f  1:19:07 1999 (jo
0080: 7a 65 29 22 0a 23 20 28 43 29 20 31 39 39 38 2c  ze)".# (C) 1998,
0090: 20 31 39 39 39 20 62 79 20 4a 6f 68 61 6e 6e 65   1999 by Johanne
00a0: 73 20 5a 65 6c 6c 6e 65 72 2c 20 3c 6a 6f 68 61  s Zellner, <joha
00b0: 6e 6e 65 73 40 7a 65 6c 6c 6e 65 72 2e 6f 72 67  nnes@zellner.org
00c0: 3e 0a 23 20 24 49 64 24 0a 23 20 2d 2d 2d 0a 23  >.# $Id$.# ---.#
00d0: 0a 23 20 74 63 6c 72 65 61 64 6c 69 6e 65 20 2d  .# tclreadline -
00e0: 2d 20 67 6e 75 20 72 65 61 64 6c 69 6e 65 20 66  - gnu readline f
00f0: 6f 72 20 74 63 6c 0a 23 20 43 6f 70 79 72 69 67  or tcl.# Copyrig
0100: 68 74 20 28 43 29 20 31 39 39 39 20 20 4a 6f 68  ht (C) 1999  Joh
0110: 61 6e 6e 65 73 20 5a 65 6c 6c 6e 65 72 0a 23 0a  annes Zellner.#.
0120: 23 20 54 68 69 73 20 70 72 6f 67 72 61 6d 20 69  # This program i
0130: 73 20 66 72 65 65 20 73 6f 66 74 77 61 72 65 3b  s free software;
0140: 20 79 6f 75 20 63 61 6e 20 72 65 64 69 73 74 72   you can redistr
0150: 69 62 75 74 65 20 69 74 20 61 6e 64 2f 6f 72 0a  ibute it and/or.
0160: 23 20 6d 6f 64 69 66 79 20 69 74 20 75 6e 64 65  # modify it unde
0170: 72 20 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74  r the terms of t
0180: 68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50  he GNU General P
0190: 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 0a 23 20  ublic License.# 
01a0: 61 73 20 70 75 62 6c 69 73 68 65 64 20 62 79 20  as published by 
01b0: 74 68 65 20 46 72 65 65 20 53 6f 66 74 77 61 72  the Free Softwar
01c0: 65 20 46 6f 75 6e 64 61 74 69 6f 6e 3b 20 65 69  e Foundation; ei
01d0: 74 68 65 72 20 76 65 72 73 69 6f 6e 20 32 0a 23  ther version 2.#
01e0: 20 6f 66 20 74 68 65 20 4c 69 63 65 6e 73 65 2c   of the License,
01f0: 20 6f 72 20 28 61 74 20 79 6f 75 72 20 6f 70 74   or (at your opt
0200: 69 6f 6e 29 20 61 6e 79 20 6c 61 74 65 72 20 76  ion) any later v
0210: 65 72 73 69 6f 6e 2e 0a 23 0a 23 20 54 68 69 73  ersion..#.# This
0220: 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 74   program is dist
0230: 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 68  ributed in the h
0240: 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c  ope that it will
0250: 20 62 65 20 75 73 65 66 75 6c 2c 0a 23 20 62 75   be useful,.# bu
0260: 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20 57 41  t WITHOUT ANY WA
0270: 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 74 20  RRANTY; without 
0280: 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65 64  even the implied
0290: 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 23 20 4d   warranty of.# M
02a0: 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59 20 6f  ERCHANTABILITY o
02b0: 72 20 46 49 54 4e 45 53 53 20 46 4f 52 20 41 20  r FITNESS FOR A 
02c0: 50 41 52 54 49 43 55 4c 41 52 20 50 55 52 50 4f  PARTICULAR PURPO
02d0: 53 45 2e 20 20 53 65 65 20 74 68 65 0a 23 20 47  SE.  See the.# G
02e0: 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69  NU General Publi
02f0: 63 20 4c 69 63 65 6e 73 65 20 66 6f 72 20 6d 6f  c License for mo
0300: 72 65 20 64 65 74 61 69 6c 73 2e 0a 23 0a 23 20  re details..#.# 
0310: 59 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 65 20  You should have 
0320: 72 65 63 65 69 76 65 64 20 61 20 63 6f 70 79 20  received a copy 
0330: 6f 66 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72  of the GNU Gener
0340: 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73  al Public Licens
0350: 65 0a 23 20 61 6c 6f 6e 67 20 77 69 74 68 20 74  e.# along with t
0360: 68 69 73 20 70 72 6f 67 72 61 6d 3b 20 69 66 20  his program; if 
0370: 6e 6f 74 2c 20 77 72 69 74 65 20 74 6f 20 74 68  not, write to th
0380: 65 20 46 72 65 65 20 53 6f 66 74 77 61 72 65 0a  e Free Software.
0390: 23 20 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 49 6e  # Foundation, In
03a0: 63 2e 2c 20 35 39 20 54 65 6d 70 6c 65 20 50 6c  c., 59 Temple Pl
03b0: 61 63 65 20 2d 20 53 75 69 74 65 20 33 33 30 2c  ace - Suite 330,
03c0: 20 42 6f 73 74 6f 6e 2c 20 4d 41 20 20 30 32 31   Boston, MA  021
03d0: 31 31 2d 31 33 30 37 2c 20 55 53 41 2e 0a 23 0a  11-1307, USA..#.
03e0: 23 20 6a 6f 68 61 6e 6e 65 73 40 7a 65 6c 6c 6e  # johannes@zelln
03f0: 65 72 2e 6f 72 67 0a 23 20 68 74 74 70 3a 2f 2f  er.org.# http://
0400: 77 77 77 2e 7a 65 6c 6c 6e 65 72 2e 6f 72 67 2f  www.zellner.org/
0410: 74 63 6c 72 65 61 64 6c 69 6e 65 2f 0a 23 0a 23  tclreadline/.#.#
0420: 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d   ===============
0430: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0440: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0450: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0460: 3d 3d 3d 20 0a 0a 0a 23 20 54 4f 44 4f 3a 0a 23  === ...# TODO:.#
0470: 0a 23 09 2d 20 74 63 6c 74 65 73 74 20 69 73 20  .#.- tcltest is 
0480: 6d 69 73 73 69 6e 67 0a 23 09 2d 20 62 65 74 74  missing.#.- bett
0490: 65 72 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 66 6f  er completion fo
04a0: 72 20 43 6f 6d 70 6c 65 74 65 4c 69 73 74 46 72  r CompleteListFr
04b0: 6f 6d 4c 69 73 74 3a 0a 23 09 20 20 52 65 6d 6f  omList:.#.  Remo
04c0: 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 2e 2e  veUsedOptions ..
04d0: 2e 0a 23 09 2d 20 6e 61 6d 65 73 70 61 63 65 20  ..#.- namespace 
04e0: 65 76 61 6c 20 66 72 65 64 20 7b 2e 2e 2e 20 3c  eval fred {... <
04f0: 2d 2d 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68  -- continue with
0500: 20 61 20 0a 23 09 09 09 09 09 09 09 09 20 20 20   a .#........   
0510: 73 75 62 73 74 69 74 75 74 69 6f 6e 20 69 6e 20  substitution in 
0520: 66 72 65 64 2e 0a 23 09 2d 20 73 65 74 20 74 63  fred..#.- set tc
0530: 6c 72 65 61 64 6c 69 6e 65 3a 3a 70 72 6f 3c 74  lreadline::pro<t
0540: 61 62 3e 20 64 6f 65 73 6e 27 74 20 77 6f 72 6b  ab> doesn't work
0550: 0a 23 09 20 20 73 65 74 20 3a 3a 74 63 6c 72 65  .#.  set ::tclre
0560: 61 64 6c 69 6e 65 3a 3a 70 72 6f 3c 74 61 62 3e  adline::pro<tab>
0570: 20 64 6f 65 73 0a 23 0a 23 20 20 20 2d 20 54 65   does.#.#   - Te
0580: 78 74 4f 62 6a 20 2e 2e 2e 0a 23 0a 0a 0a 0a 6e  xtObj ....#....n
0590: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 74 63  amespace eval tc
05a0: 6c 72 65 61 64 6c 69 6e 65 20 7b 0a 0a 09 23 20  lreadline {...# 
05b0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  the following th
05c0: 72 65 65 20 61 72 65 20 66 72 6f 6d 20 74 68 65  ree are from the
05d0: 20 69 63 63 63 6d 0a 09 23 20 61 6e 64 20 75 73   icccm..# and us
05e0: 65 64 20 69 6e 20 63 6f 6d 70 6c 65 74 65 28 73  ed in complete(s
05f0: 65 6c 65 63 74 69 6f 6e 29 20 61 6e 64 0a 09 23  election) and..#
0600: 20 64 65 73 63 65 6e 64 61 6e 74 73 2e 0a 09 23   descendants...#
0610: 0a 09 76 61 72 69 61 62 6c 65 20 73 65 6c 65 63  ..variable selec
0620: 74 69 6f 6e 2d 73 65 6c 65 63 74 69 6f 6e 73 20  tion-selections 
0630: 7b 0a 09 09 50 52 49 4d 41 52 59 20 53 45 43 4f  {...PRIMARY SECO
0640: 4e 44 41 52 59 20 43 4c 49 50 42 4f 41 52 44 0a  NDARY CLIPBOARD.
0650: 09 7d 0a 09 76 61 72 69 61 62 6c 65 20 73 65 6c  .}..variable sel
0660: 65 63 74 69 6f 6e 2d 74 79 70 65 73 20 7b 0a 09  ection-types {..
0670: 09 41 44 4f 42 45 5f 50 4f 52 54 41 42 4c 45 5f  .ADOBE_PORTABLE_
0680: 44 4f 43 55 4d 45 4e 54 5f 46 4f 52 4d 41 54 0a  DOCUMENT_FORMAT.
0690: 09 09 41 50 50 4c 45 5f 50 49 43 54 0a 09 09 42  ..APPLE_PICT...B
06a0: 41 43 4b 47 52 4f 55 4e 44 0a 09 09 42 49 54 4d  ACKGROUND...BITM
06b0: 41 50 0a 09 09 43 48 41 52 41 43 54 45 52 5f 50  AP...CHARACTER_P
06c0: 4f 53 49 54 49 4f 4e 0a 09 09 43 4c 41 53 53 0a  OSITION...CLASS.
06d0: 09 09 43 4c 49 45 4e 54 5f 57 49 4e 44 4f 57 0a  ..CLIENT_WINDOW.
06e0: 09 09 43 4f 4c 4f 52 4d 41 50 0a 09 09 43 4f 4c  ..COLORMAP...COL
06f0: 55 4d 4e 5f 4e 55 4d 42 45 52 0a 09 09 43 4f 4d  UMN_NUMBER...COM
0700: 50 4f 55 4e 44 5f 54 45 58 54 0a 09 09 44 45 4c  POUND_TEXT...DEL
0710: 45 54 45 0a 09 09 44 52 41 57 41 42 4c 45 0a 09  ETE...DRAWABLE..
0720: 09 45 4e 43 41 50 53 55 4c 41 54 45 44 5f 50 4f  .ENCAPSULATED_PO
0730: 53 54 53 43 52 49 50 54 0a 09 09 45 4e 43 41 50  STSCRIPT...ENCAP
0740: 53 55 4c 41 54 45 44 5f 50 4f 53 54 53 43 52 49  SULATED_POSTSCRI
0750: 50 54 5f 49 4e 54 45 52 43 48 41 4e 47 45 0a 09  PT_INTERCHANGE..
0760: 09 46 49 4c 45 5f 4e 41 4d 45 0a 09 09 46 4f 52  .FILE_NAME...FOR
0770: 45 47 52 4f 55 4e 44 0a 09 09 48 4f 53 54 5f 4e  EGROUND...HOST_N
0780: 41 4d 45 0a 09 09 49 4e 53 45 52 54 5f 50 52 4f  AME...INSERT_PRO
0790: 50 45 52 54 59 0a 09 09 49 4e 53 45 52 54 5f 53  PERTY...INSERT_S
07a0: 45 4c 45 43 54 49 4f 4e 0a 09 09 4c 45 4e 47 54  ELECTION...LENGT
07b0: 48 0a 09 09 4c 49 4e 45 5f 4e 55 4d 42 45 52 0a  H...LINE_NUMBER.
07c0: 09 09 4c 49 53 54 5f 4c 45 4e 47 54 48 0a 09 09  ..LIST_LENGTH...
07d0: 4d 4f 44 55 4c 45 0a 09 09 4d 55 4c 54 49 50 4c  MODULE...MULTIPL
07e0: 45 0a 09 09 4e 41 4d 45 0a 09 09 4f 44 49 46 0a  E...NAME...ODIF.
07f0: 09 09 4f 57 4e 45 52 5f 4f 53 0a 09 09 50 49 58  ..OWNER_OS...PIX
0800: 4d 41 50 0a 09 09 50 4f 53 54 53 43 52 49 50 54  MAP...POSTSCRIPT
0810: 0a 09 09 50 52 4f 43 45 44 55 52 45 0a 09 09 50  ...PROCEDURE...P
0820: 52 4f 43 45 53 53 0a 09 09 53 54 52 49 4e 47 0a  ROCESS...STRING.
0830: 09 09 54 41 52 47 45 54 53 0a 09 09 54 41 53 4b  ..TARGETS...TASK
0840: 0a 09 09 54 45 58 54 0a 09 09 54 49 4d 45 53 54  ...TEXT...TIMEST
0850: 41 4d 50 0a 09 09 55 53 45 52 0a 09 7d 0a 09 76  AMP...USER..}..v
0860: 61 72 69 61 62 6c 65 20 73 65 6c 65 63 74 69 6f  ariable selectio
0870: 6e 2d 66 6f 72 6d 61 74 73 20 7b 0a 09 09 41 50  n-formats {...AP
0880: 50 4c 45 5f 50 49 43 54 0a 09 09 41 54 4f 4d 0a  PLE_PICT...ATOM.
0890: 09 09 41 54 4f 4d 5f 50 41 49 52 0a 09 09 42 49  ..ATOM_PAIR...BI
08a0: 54 4d 41 50 0a 09 09 43 4f 4c 4f 52 4d 41 50 0a  TMAP...COLORMAP.
08b0: 09 09 43 4f 4d 50 4f 55 4e 44 5f 54 45 58 54 0a  ..COMPOUND_TEXT.
08c0: 09 09 44 52 41 57 41 42 4c 45 0a 09 09 49 4e 54  ..DRAWABLE...INT
08d0: 45 47 45 52 0a 09 09 4e 55 4c 4c 0a 09 09 50 49  EGER...NULL...PI
08e0: 58 45 4c 0a 09 09 50 49 58 4d 41 50 37 0a 09 09  XEL...PIXMAP7...
08f0: 53 50 41 4e 0a 09 09 53 54 52 49 4e 47 0a 09 09  SPAN...STRING...
0900: 54 45 58 54 0a 09 09 57 49 4e 44 4f 57 0a 09 7d  TEXT...WINDOW..}
0910: 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f  ..namespace expo
0920: 72 74 20 5c 0a 54 72 79 46 72 6f 6d 4c 69 73 74  rt \.TryFromList
0930: 20 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73   CompleteFromLis
0940: 74 20 44 69 73 70 6c 61 79 48 69 6e 74 73 20 52  t DisplayHints R
0950: 65 68 61 73 68 20 5c 0a 50 72 65 76 69 6f 75 73  ehash \.Previous
0960: 57 6f 72 64 20 43 6f 6d 6d 61 6e 64 43 6f 6d 70  Word CommandComp
0970: 6c 65 74 69 6f 6e 20 52 65 6d 6f 76 65 55 73 65  letion RemoveUse
0980: 64 4f 70 74 69 6f 6e 73 20 5c 0a 48 6f 73 74 4c  dOptions \.HostL
0990: 69 73 74 20 43 68 61 6e 6e 65 6c 49 64 20 49 6e  ist ChannelId In
09a0: 43 68 61 6e 6e 65 6c 49 64 20 4f 75 74 43 68 61  ChannelId OutCha
09b0: 6e 6e 65 6c 49 64 20 5c 0a 4c 69 6e 64 65 78 20  nnelId \.Lindex 
09c0: 4c 6c 65 6e 67 74 68 20 43 6f 6d 70 6c 65 74 65  Llength Complete
09d0: 42 6f 6f 6c 65 61 6e 20 57 69 64 67 65 74 43 68  Boolean WidgetCh
09e0: 69 6c 64 72 65 6e 0a 0a 23 20 73 65 74 20 74 63  ildren..# set tc
09f0: 6c 72 65 61 64 6c 69 6e 65 3a 3a 74 72 61 63 65  lreadline::trace
0a00: 20 74 6f 20 31 2c 20 69 66 20 79 6f 75 0a 23 20   to 1, if you.# 
0a10: 77 61 6e 74 20 74 6f 20 65 6e 61 62 6c 65 20 65  want to enable e
0a20: 78 70 6c 69 63 69 74 20 74 72 61 63 65 20 63 61  xplicit trace ca
0a30: 6c 6c 73 2e 0a 23 0a 76 61 72 69 61 62 6c 65 20  lls..#.variable 
0a40: 74 72 61 63 65 0a 0a 23 20 73 65 74 20 74 63 6c  trace..# set tcl
0a50: 72 65 61 64 6c 69 6e 65 3a 3a 74 72 61 63 65 5f  readline::trace_
0a60: 70 72 6f 63 73 20 74 6f 20 31 2c 20 69 66 20 79  procs to 1, if y
0a70: 6f 75 0a 23 20 77 61 6e 74 20 74 6f 20 65 6e 61  ou.# want to ena
0a80: 62 6c 65 20 74 72 61 63 69 6e 67 20 65 76 65 72  ble tracing ever
0a90: 79 20 65 6e 74 72 79 20 74 6f 20 61 20 70 72 6f  y entry to a pro
0aa0: 63 2e 0a 23 0a 76 61 72 69 61 62 6c 65 20 74 72  c..#.variable tr
0ab0: 61 63 65 5f 70 72 6f 63 73 0a 0a 69 66 20 7b 5b  ace_procs..if {[
0ac0: 69 6e 66 6f 20 65 78 69 73 74 73 20 74 72 61 63  info exists trac
0ad0: 65 5f 70 72 6f 63 73 5d 20 26 26 20 24 74 72 61  e_procs] && $tra
0ae0: 63 65 5f 70 72 6f 63 73 7d 20 7b 0a 09 3a 3a 70  ce_procs} {..::p
0af0: 72 6f 63 20 70 72 6f 63 20 7b 6e 61 6d 65 20 61  roc proc {name a
0b00: 72 67 75 6d 65 6e 74 73 20 62 6f 64 79 7d 20 7b  rguments body} {
0b10: 0a 09 09 3a 3a 70 72 6f 63 20 24 6e 61 6d 65 20  ...::proc $name 
0b20: 24 61 72 67 75 6d 65 6e 74 73 20 5b 73 75 62 73  $arguments [subs
0b30: 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 7b 0a  t -nocommands {.
0b40: 09 09 09 54 72 61 63 65 54 65 78 74 20 5b 6c 72  ...TraceText [lr
0b50: 61 6e 67 65 20 5b 69 6e 66 6f 20 6c 65 76 65 6c  ange [info level
0b60: 20 30 5d 20 31 20 65 6e 64 5d 0a 09 09 09 24 62   0] 1 end]....$b
0b70: 6f 64 79 0a 09 09 7d 5d 0a 09 7d 0a 7d 20 65 6c  ody...}]..}.} el
0b80: 73 65 20 7b 20 3b 23 20 21 24 74 72 61 63 65 5f  se { ;# !$trace_
0b90: 70 72 6f 63 73 0a 09 63 61 74 63 68 20 7b 72 65  procs..catch {re
0ba0: 6e 61 6d 65 20 3a 3a 74 63 6c 72 65 61 64 6c 69  name ::tclreadli
0bb0: 6e 65 3a 3a 70 72 6f 63 20 22 22 7d 0a 7d 0a 0a  ne::proc ""}.}..
0bc0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
0bd0: 20 74 72 61 63 65 5d 20 26 26 20 24 74 72 61 63   trace] && $trac
0be0: 65 7d 20 7b 0a 0a 09 3a 3a 70 72 6f 63 20 54 72  e} {...::proc Tr
0bf0: 61 63 65 52 65 63 6f 6e 66 20 7b 61 72 67 73 7d  aceReconf {args}
0c00: 20 7b 0a 09 09 65 76 61 6c 20 2e 74 63 6c 72 65   {...eval .tclre
0c10: 61 64 6c 69 6e 65 5f 74 72 61 63 65 2e 73 63 72  adline_trace.scr
0c20: 6f 6c 6c 20 73 65 74 20 24 61 72 67 73 0a 09 09  oll set $args...
0c30: 2e 74 63 6c 72 65 61 64 6c 69 6e 65 5f 74 72 61  .tclreadline_tra
0c40: 63 65 2e 74 65 78 74 20 73 65 65 20 65 6e 64 0a  ce.text see end.
0c50: 09 7d 0a 0a 09 3a 3a 70 72 6f 63 20 41 73 73 75  .}...::proc Assu
0c60: 72 65 54 72 61 63 65 57 69 6e 64 6f 77 20 7b 7d  reTraceWindow {}
0c70: 20 7b 0a 09 09 76 61 72 69 61 62 6c 65 20 74 72   {...variable tr
0c80: 61 63 65 0a 09 09 69 66 20 7b 21 5b 69 6e 66 6f  ace...if {![info
0c90: 20 65 78 69 73 74 73 20 74 72 61 63 65 5d 7d 20   exists trace]} 
0ca0: 7b 0a 09 09 09 72 65 74 75 72 6e 20 30 0a 09 09  {....return 0...
0cb0: 7d 0a 09 09 69 66 20 7b 21 24 74 72 61 63 65 7d  }...if {!$trace}
0cc0: 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 30 0a 09   {....return 0..
0cd0: 09 7d 0a 09 09 69 66 20 7b 21 5b 77 69 6e 66 6f  .}...if {![winfo
0ce0: 20 65 78 69 73 74 73 20 2e 74 63 6c 72 65 61 64   exists .tclread
0cf0: 6c 69 6e 65 5f 74 72 61 63 65 2e 74 65 78 74 5d  line_trace.text]
0d00: 7d 20 7b 0a 09 09 09 74 6f 70 6c 65 76 65 6c 20  } {....toplevel 
0d10: 2e 74 63 6c 72 65 61 64 6c 69 6e 65 5f 74 72 61  .tclreadline_tra
0d20: 63 65 0a 09 09 09 74 65 78 74 20 2e 74 63 6c 72  ce....text .tclr
0d30: 65 61 64 6c 69 6e 65 5f 74 72 61 63 65 2e 74 65  eadline_trace.te
0d40: 78 74 20 5c 0a 09 09 09 09 2d 79 73 63 72 6f 6c  xt \.....-yscrol
0d50: 6c 63 6f 6d 6d 61 6e 64 20 7b 20 74 63 6c 72 65  lcommand { tclre
0d60: 61 64 6c 69 6e 65 3a 3a 54 72 61 63 65 52 65 63  adline::TraceRec
0d70: 6f 6e 66 20 7d 20 5c 0a 09 09 09 09 2d 77 72 61  onf } \.....-wra
0d80: 70 20 6e 6f 6e 65 0a 09 09 09 73 63 72 6f 6c 6c  p none....scroll
0d90: 62 61 72 20 2e 74 63 6c 72 65 61 64 6c 69 6e 65  bar .tclreadline
0da0: 5f 74 72 61 63 65 2e 73 63 72 6f 6c 6c 20 5c 0a  _trace.scroll \.
0db0: 09 09 09 09 2d 6f 72 69 65 6e 74 20 76 65 72 74  ....-orient vert
0dc0: 69 63 61 6c 20 5c 0a 09 09 09 09 2d 63 6f 6d 6d  ical \.....-comm
0dd0: 61 6e 64 20 7b 20 2e 74 63 6c 72 65 61 64 6c 69  and { .tclreadli
0de0: 6e 65 5f 74 72 61 63 65 2e 74 65 78 74 20 79 76  ne_trace.text yv
0df0: 69 65 77 20 7d 0a 09 09 09 70 61 63 6b 20 2e 74  iew }....pack .t
0e00: 63 6c 72 65 61 64 6c 69 6e 65 5f 74 72 61 63 65  clreadline_trace
0e10: 2e 74 65 78 74 20 2d 73 69 64 65 20 6c 65 66 74  .text -side left
0e20: 20 2d 65 78 70 61 6e 64 20 79 65 73 20 2d 66 69   -expand yes -fi
0e30: 6c 6c 20 62 6f 74 68 0a 09 09 09 70 61 63 6b 20  ll both....pack 
0e40: 2e 74 63 6c 72 65 61 64 6c 69 6e 65 5f 74 72 61  .tclreadline_tra
0e50: 63 65 2e 73 63 72 6f 6c 6c 20 2d 73 69 64 65 20  ce.scroll -side 
0e60: 72 69 67 68 74 20 2d 65 78 70 61 6e 64 20 79 65  right -expand ye
0e70: 73 20 2d 66 69 6c 6c 20 79 0a 09 09 7d 20 65 6c  s -fill y...} el
0e80: 73 65 20 7b 0a 09 09 09 72 61 69 73 65 20 2e 74  se {....raise .t
0e90: 63 6c 72 65 61 64 6c 69 6e 65 5f 74 72 61 63 65  clreadline_trace
0ea0: 0a 09 09 7d 0a 09 09 72 65 74 75 72 6e 20 31 0a  ...}...return 1.
0eb0: 09 7d 0a 0a 09 3a 3a 70 72 6f 63 20 54 72 61 63  .}...::proc Trac
0ec0: 65 56 61 72 20 76 54 20 7b 0a 09 09 69 66 20 7b  eVar vT {...if {
0ed0: 21 5b 41 73 73 75 72 65 54 72 61 63 65 57 69 6e  ![AssureTraceWin
0ee0: 64 6f 77 5d 7d 20 7b 0a 09 09 09 72 65 74 75 72  dow]} {....retur
0ef0: 6e 0a 09 09 7d 0a 09 09 75 70 76 61 72 20 24 76  n...}...upvar $v
0f00: 54 20 76 0a 09 09 69 66 20 7b 5b 69 6e 66 6f 20  T v...if {[info 
0f10: 65 78 69 73 74 73 20 76 5d 7d 20 7b 0a 09 09 09  exists v]} {....
0f20: 2e 74 63 6c 72 65 61 64 6c 69 6e 65 5f 74 72 61  .tclreadline_tra
0f30: 63 65 2e 74 65 78 74 20 69 6e 73 65 72 74 20 65  ce.text insert e
0f40: 6e 64 20 5c 0a 09 09 09 22 28 5b 6c 69 6e 64 65  nd \...."([linde
0f50: 78 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 20 2d 31  x [info level -1
0f60: 5d 20 30 5d 29 20 24 76 54 3d 7c 24 76 7c 5c 6e  ] 0]) $vT=|$v|\n
0f70: 22 0a 09 09 7d 0a 09 09 23 20 73 69 6c 65 6e 74  "...}...# silent
0f80: 6c 79 20 69 67 6e 6f 72 65 20 75 6e 73 65 74 20  ly ignore unset 
0f90: 76 61 72 69 61 62 6c 65 73 2e 0a 09 7d 0a 0a 09  variables...}...
0fa0: 3a 3a 70 72 6f 63 20 54 72 61 63 65 54 65 78 74  ::proc TraceText
0fb0: 20 74 78 74 20 7b 0a 09 09 69 66 20 7b 21 5b 41   txt {...if {![A
0fc0: 73 73 75 72 65 54 72 61 63 65 57 69 6e 64 6f 77  ssureTraceWindow
0fd0: 5d 7d 20 7b 0a 09 09 09 72 65 74 75 72 6e 0a 09  ]} {....return..
0fe0: 09 7d 0a 09 09 2e 74 63 6c 72 65 61 64 6c 69 6e  .}....tclreadlin
0ff0: 65 5f 74 72 61 63 65 2e 74 65 78 74 20 69 6e 73  e_trace.text ins
1000: 65 72 74 20 65 6e 64 20 5c 0a 09 09 5b 66 6f 72  ert end \...[for
1010: 6d 61 74 20 7b 25 33 32 73 20 25 73 7d 20 28 5b  mat {%32s %s} ([
1020: 6c 69 6e 64 65 78 20 5b 69 6e 66 6f 20 6c 65 76  lindex [info lev
1030: 65 6c 20 2d 31 5d 20 30 5d 29 20 24 74 78 74 5c  el -1] 0]) $txt\
1040: 6e 5d 0a 09 7d 0a 0a 7d 20 65 6c 73 65 20 7b 0a  n]..}..} else {.
1050: 09 3a 3a 70 72 6f 63 20 54 72 61 63 65 52 65 63  .::proc TraceRec
1060: 6f 6e 66 20 61 72 67 73 20 7b 7d 0a 09 3a 3a 70  onf args {}..::p
1070: 72 6f 63 20 41 73 73 75 72 65 54 72 61 63 65 57  roc AssureTraceW
1080: 69 6e 64 6f 77 20 61 72 67 73 20 7b 7d 0a 09 3a  indow args {}..:
1090: 3a 70 72 6f 63 20 54 72 61 63 65 56 61 72 20 61  :proc TraceVar a
10a0: 72 67 73 20 7b 7d 0a 09 3a 3a 70 72 6f 63 20 54  rgs {}..::proc T
10b0: 72 61 63 65 54 65 78 74 20 61 72 67 73 20 7b 7d  raceText args {}
10c0: 0a 7d 0a 0a 23 2a 2a 0a 23 20 54 72 79 46 72 6f  .}..#**.# TryFro
10d0: 6d 4c 69 73 74 20 77 69 6c 6c 20 72 65 74 75 72  mList will retur
10e0: 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e  n an empty strin
10f0: 67 2c 20 69 66 0a 23 20 74 68 65 20 74 65 78 74  g, if.# the text
1100: 20 74 79 70 65 64 20 73 6f 20 66 61 72 20 64 6f   typed so far do
1110: 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79  es not match any
1120: 20 6f 66 20 74 68 65 0a 23 20 65 6c 65 6d 65 6e   of the.# elemen
1130: 74 73 20 69 6e 20 6c 69 73 74 2e 20 54 68 69 73  ts in list. This
1140: 20 6d 69 67 68 74 20 62 65 20 75 73 65 64 20 74   might be used t
1150: 6f 20 61 6c 6c 6f 77 0a 23 20 73 75 62 73 65 71  o allow.# subseq
1160: 75 65 6e 74 20 66 69 6c 65 6e 61 6d 65 20 63 6f  uent filename co
1170: 6d 70 6c 65 74 69 6f 6e 20 62 79 20 74 68 65 20  mpletion by the 
1180: 62 75 69 6c 74 69 6e 0a 23 20 63 6f 6d 70 6c 65  builtin.# comple
1190: 74 65 72 2e 0a 23 20 49 66 20 69 6e 68 69 62 69  ter..# If inhibi
11a0: 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  t is non-zero, t
11b0: 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62  he result will b
11c0: 65 0a 23 20 66 6f 72 6d 61 74 74 65 64 20 73 75  e.# formatted su
11d0: 63 68 20 74 68 61 74 20 72 65 61 64 6c 69 6e 65  ch that readline
11e0: 20 77 69 6c 6c 20 6e 6f 74 20 69 6e 73 65 72 74   will not insert
11f0: 0a 23 20 61 20 73 70 61 63 65 20 61 66 74 65 72  .# a space after
1200: 20 61 20 63 6f 6d 70 6c 65 74 65 20 28 73 69 6e   a complete (sin
1210: 67 6c 65 29 20 6d 61 74 63 68 2e 0a 23 0a 70 72  gle) match..#.pr
1220: 6f 63 20 54 72 79 46 72 6f 6d 4c 69 73 74 20 7b  oc TryFromList {
1230: 74 65 78 74 20 6c 73 74 20 7b 61 6c 6c 6f 77 20  text lst {allow 
1240: 22 22 7d 20 7b 69 6e 68 69 62 69 74 20 30 7d 7d  ""} {inhibit 0}}
1250: 20 7b 0a 0a 09 23 20 70 75 74 73 20 73 74 64 65   {...# puts stde
1260: 72 72 20 22 28 43 6f 6d 70 6c 65 74 65 46 72 6f  rr "(CompleteFro
1270: 6d 4c 69 73 74 29 20 5c 6e 74 65 78 74 3d 7c 24  mList) \ntext=|$
1280: 74 65 78 74 7c 22 0a 09 23 20 70 75 74 73 20 73  text|"..# puts s
1290: 74 64 65 72 72 20 22 28 43 6f 6d 70 6c 65 74 65  tderr "(Complete
12a0: 46 72 6f 6d 4c 69 73 74 29 20 6c 73 74 3d 7c 24  FromList) lst=|$
12b0: 6c 73 74 7c 22 0a 09 73 65 74 20 70 72 65 20 5b  lst|"..set pre [
12c0: 47 65 74 51 75 6f 74 65 64 50 72 65 66 69 78 20  GetQuotedPrefix 
12d0: 24 7b 74 65 78 74 7d 5d 0a 09 73 65 74 20 6d 61  ${text}]..set ma
12e0: 74 63 68 65 73 20 5b 4d 61 74 63 68 65 73 46 72  tches [MatchesFr
12f0: 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24  omList ${text} $
1300: 7b 6c 73 74 7d 20 24 7b 61 6c 6c 6f 77 7d 5d 0a  {lst} ${allow}].
1310: 0a 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20  ..# puts stderr 
1320: 22 28 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69  "(CompleteFromLi
1330: 73 74 29 20 6d 61 74 63 68 65 73 3d 7c 24 6d 61  st) matches=|$ma
1340: 74 63 68 65 73 7c 22 0a 09 69 66 20 7b 31 20 3d  tches|"..if {1 =
1350: 3d 20 5b 6c 6c 65 6e 67 74 68 20 24 6d 61 74 63  = [llength $matc
1360: 68 65 73 5d 7d 20 7b 20 3b 20 23 20 75 6e 69 71  hes]} { ; # uniq
1370: 75 65 20 6d 61 74 63 68 0a 09 09 23 20 70 75 74  ue match...# put
1380: 73 20 73 74 64 65 72 72 20 5c 6e 75 6e 69 71 75  s stderr \nuniqu
1390: 65 3d 24 6d 61 74 63 68 65 73 5c 6e 0a 09 09 23  e=$matches\n...#
13a0: 20 70 75 74 73 20 73 74 64 65 72 72 20 22 5c 6e   puts stderr "\n
13b0: 7c 24 7b 70 72 65 7d 24 7b 6d 61 74 63 68 65 73  |${pre}${matches
13c0: 7d 5b 52 69 67 68 74 20 24 7b 70 72 65 7d 5d 7c  }[Right ${pre}]|
13d0: 5c 6e 22 0a 09 09 73 65 74 20 6e 75 6c 6c 20 5b  \n"...set null [
13e0: 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 6d 61  string index $ma
13f0: 74 63 68 65 73 20 30 5d 0a 09 09 69 66 20 7b 28  tches 0]...if {(
1400: 22 3c 22 20 3d 3d 20 24 7b 6e 75 6c 6c 7d 20 7c  "<" == ${null} |
1410: 7c 20 22 3f 22 20 3d 3d 20 24 7b 6e 75 6c 6c 7d  | "?" == ${null}
1420: 29 20 26 26 20 5c 0a 09 09 09 2d 31 20 3d 3d 20  ) && \....-1 == 
1430: 5b 73 74 72 69 6e 67 20 66 69 72 73 74 20 24 7b  [string first ${
1440: 6e 75 6c 6c 7d 20 24 7b 61 6c 6c 6f 77 7d 5d 0a  null} ${allow}].
1450: 09 09 7d 20 7b 0a 09 09 09 73 65 74 20 63 6f 6d  ..} {....set com
1460: 70 6c 65 74 69 6f 6e 20 5b 73 74 72 69 6e 67 20  pletion [string 
1470: 74 72 69 6d 20 22 5b 6c 69 73 74 20 24 74 65 78  trim "[list $tex
1480: 74 5d 20 24 6c 73 74 22 5d 0a 09 09 7d 20 65 6c  t] $lst"]...} el
1490: 73 65 20 7b 0a 09 09 09 73 65 74 20 63 6f 6d 70  se {....set comp
14a0: 6c 65 74 69 6f 6e 20 5b 73 74 72 69 6e 67 20 74  letion [string t
14b0: 72 69 6d 20 24 7b 70 72 65 7d 24 7b 6d 61 74 63  rim ${pre}${matc
14c0: 68 65 73 7d 5b 52 69 67 68 74 20 24 7b 70 72 65  hes}[Right ${pre
14d0: 7d 5d 5d 0a 09 09 7d 0a 09 09 69 66 20 7b 24 69  }]]...}...if {$i
14e0: 6e 68 69 62 69 74 7d 20 7b 0a 09 09 09 72 65 74  nhibit} {....ret
14f0: 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 6d 70 6c  urn [list $compl
1500: 65 74 69 6f 6e 20 7b 7d 5d 0a 09 09 7d 20 65 6c  etion {}]...} el
1510: 73 65 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 24  se {....return $
1520: 63 6f 6d 70 6c 65 74 69 6f 6e 0a 09 09 7d 0a 09  completion...}..
1530: 7d 20 65 6c 73 65 69 66 20 7b 22 22 20 21 3d 20  } elseif {"" != 
1540: 24 7b 6d 61 74 63 68 65 73 7d 7d 20 7b 0a 09 09  ${matches}} {...
1550: 23 20 70 75 74 73 20 73 74 64 65 72 72 20 5c 6e  # puts stderr \n
1560: 6d 6f 72 65 3d 24 6d 61 74 63 68 65 73 5c 6e 0a  more=$matches\n.
1570: 09 09 73 65 74 20 6c 6f 6e 67 65 73 74 20 5b 43  ..set longest [C
1580: 6f 6d 70 6c 65 74 65 4c 6f 6e 67 65 73 74 20 24  ompleteLongest $
1590: 7b 6d 61 74 63 68 65 73 7d 5d 0a 09 09 23 20 70  {matches}]...# p
15a0: 75 74 73 20 73 74 64 65 72 72 20 6c 6f 6e 67 65  uts stderr longe
15b0: 73 74 3d 7c 24 6c 6f 6e 67 65 73 74 7c 0a 09 09  st=|$longest|...
15c0: 69 66 20 7b 22 22 20 3d 3d 20 24 6c 6f 6e 67 65  if {"" == $longe
15d0: 73 74 7d 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  st} {....return 
15e0: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 22 5b 6c  [string trim "[l
15f0: 69 73 74 20 24 74 65 78 74 5d 20 24 7b 6d 61 74  ist $text] ${mat
1600: 63 68 65 73 7d 22 5d 0a 09 09 7d 20 65 6c 73 65  ches}"]...} else
1610: 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 73 74   {....return [st
1620: 72 69 6e 67 20 74 72 69 6d 20 22 24 7b 70 72 65  ring trim "${pre
1630: 7d 24 7b 6c 6f 6e 67 65 73 74 7d 20 24 7b 6d 61  }${longest} ${ma
1640: 74 63 68 65 73 7d 22 5d 0a 09 09 7d 0a 09 7d 20  tches}"]...}..} 
1650: 65 6c 73 65 20 7b 0a 09 09 72 65 74 75 72 6e 20  else {...return 
1660: 22 22 3b 20 23 20 6e 6f 74 68 69 6e 67 20 74 6f  ""; # nothing to
1670: 20 63 6f 6d 70 6c 65 74 65 0a 09 7d 0a 7d 0a 0a   complete..}.}..
1680: 23 2a 2a 0a 23 20 43 6f 6d 70 6c 65 74 65 46 72  #**.# CompleteFr
1690: 6f 6d 4c 69 73 74 20 77 69 6c 6c 20 6e 65 76 65  omList will neve
16a0: 72 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74  r return an empt
16b0: 79 20 73 74 72 69 6e 67 2e 0a 23 20 63 6f 6d 70  y string..# comp
16c0: 6c 65 74 65 73 2c 20 69 66 20 61 20 63 6f 6d 70  letes, if a comp
16d0: 6c 65 74 69 6f 6e 20 63 61 6e 20 62 65 20 64 6f  letion can be do
16e0: 6e 65 2c 20 6f 72 20 72 69 6e 67 0a 23 20 74 68  ne, or ring.# th
16f0: 65 20 62 65 6c 6c 20 69 66 20 6e 6f 74 2e 20 49  e bell if not. I
1700: 66 20 69 6e 68 69 62 69 74 20 69 73 20 6e 6f 6e  f inhibit is non
1710: 2d 7a 65 72 6f 2c 20 74 68 65 20 72 65 73 75 6c  -zero, the resul
1720: 74 0a 23 20 77 69 6c 6c 20 62 65 20 66 6f 72 6d  t.# will be form
1730: 61 74 74 65 64 20 73 75 63 68 20 74 68 61 74 20  atted such that 
1740: 72 65 61 64 6c 69 6e 65 20 77 69 6c 6c 20 6e 6f  readline will no
1750: 74 20 69 6e 73 65 72 74 0a 23 20 61 20 73 70 61  t insert.# a spa
1760: 63 65 20 61 66 74 65 72 20 61 20 63 6f 6d 70 6c  ce after a compl
1770: 65 74 65 20 28 73 69 6e 67 6c 65 29 20 6d 61 74  ete (single) mat
1780: 63 68 2e 0a 23 0a 70 72 6f 63 20 43 6f 6d 70 6c  ch..#.proc Compl
1790: 65 74 65 46 72 6f 6d 4c 69 73 74 20 7b 74 65 78  eteFromList {tex
17a0: 74 20 6c 73 74 20 7b 61 6c 6c 6f 77 20 22 22 7d  t lst {allow ""}
17b0: 20 7b 69 6e 68 69 62 69 74 20 30 7d 7d 20 7b 0a   {inhibit 0}} {.
17c0: 09 73 65 74 20 72 65 73 75 6c 74 20 5b 54 72 79  .set result [Try
17d0: 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
17e0: 20 24 7b 6c 73 74 7d 20 24 7b 61 6c 6c 6f 77 7d   ${lst} ${allow}
17f0: 20 24 69 6e 68 69 62 69 74 5d 0a 09 69 66 20 7b   $inhibit]..if {
1800: 21 5b 6c 6c 65 6e 67 74 68 20 24 7b 72 65 73 75  ![llength ${resu
1810: 6c 74 7d 5d 7d 20 7b 0a 09 09 41 6c 65 72 74 0a  lt}]} {...Alert.
1820: 09 09 23 20 72 65 74 75 72 6e 20 5b 73 74 72 69  ..# return [stri
1830: 6e 67 20 74 72 69 6d 20 5b 6c 69 73 74 20 24 7b  ng trim [list ${
1840: 74 65 78 74 7d 5d 20 24 7b 6c 73 74 7d 22 5d 0a  text}] ${lst}"].
1850: 09 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24  ..if {[llength $
1860: 7b 6c 73 74 7d 5d 7d 20 7b 0a 09 09 09 72 65 74  {lst}]} {....ret
1870: 75 72 6e 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  urn [string trim
1880: 20 22 24 7b 74 65 78 74 7d 20 24 7b 6c 73 74 7d   "${text} ${lst}
1890: 22 5d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09  "]...} else {...
18a0: 09 72 65 74 75 72 6e 20 5b 73 74 72 69 6e 67 20  .return [string 
18b0: 74 72 69 6d 20 5b 6c 69 73 74 20 24 7b 74 65 78  trim [list ${tex
18c0: 74 7d 20 7b 7d 5d 5d 0a 09 09 7d 0a 09 7d 20 65  t} {}]]...}..} e
18d0: 6c 73 65 20 7b 0a 09 09 72 65 74 75 72 6e 20 24  lse {...return $
18e0: 7b 72 65 73 75 6c 74 7d 0a 09 7d 0a 7d 0a 0a 23  {result}..}.}..#
18f0: 2a 2a 0a 23 20 43 6f 6d 70 6c 65 74 65 42 6f 6f  **.# CompleteBoo
1900: 6c 65 61 6e 20 64 6f 65 73 20 61 20 43 6f 6d 70  lean does a Comp
1910: 6c 65 74 65 46 72 6f 6d 4c 69 73 74 0a 23 20 77  leteFromList.# w
1920: 69 74 68 20 61 20 6c 69 73 74 20 6f 66 20 61 6c  ith a list of al
1930: 6c 20 76 61 6c 69 64 20 62 6f 6f 6c 65 61 6e 20  l valid boolean 
1940: 76 61 6c 75 65 73 2e 0a 23 0a 70 72 6f 63 20 43  values..#.proc C
1950: 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e 20 7b  ompleteBoolean {
1960: 74 65 78 74 7d 20 7b 0a 09 72 65 74 75 72 6e 20  text} {..return 
1970: 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
1980: 74 20 24 74 65 78 74 20 7b 79 65 73 20 6e 6f 20  t $text {yes no 
1990: 74 72 75 65 20 66 61 6c 73 65 20 31 20 30 7d 5d  true false 1 0}]
19a0: 0a 7d 0a 0a 23 2a 2a 0a 23 20 62 75 69 6c 64 20  .}..#**.# build 
19b0: 61 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 65 78  a list of all ex
19c0: 65 63 75 74 61 62 6c 65 73 20 77 68 69 63 68 20  ecutables which 
19d0: 63 61 6e 20 62 65 0a 23 20 66 6f 75 6e 64 20 69  can be.# found i
19e0: 6e 20 24 65 6e 76 28 50 41 54 48 29 2e 20 54 68  n $env(PATH). Th
19f0: 69 73 20 69 73 20 28 6e 61 74 75 72 61 6c 6c 79  is is (naturally
1a00: 29 20 61 20 62 69 74 0a 23 20 73 6c 6f 77 2c 20  ) a bit.# slow, 
1a10: 61 6e 64 20 73 68 6f 75 6c 64 20 6e 6f 74 20 63  and should not c
1a20: 61 6c 6c 65 64 20 66 72 65 71 75 65 6e 74 6c 79  alled frequently
1a30: 2e 20 49 6e 73 74 65 61 64 0a 23 20 69 74 20 69  . Instead.# it i
1a40: 73 20 61 20 67 6f 6f 64 20 69 64 65 61 20 74 6f  s a good idea to
1a50: 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 76 61   check if the va
1a60: 72 69 61 62 6c 65 0a 23 20 60 65 78 65 63 75 74  riable.# `execut
1a70: 61 62 6c 65 73 27 20 65 78 69 73 74 73 20 61 6e  ables' exists an
1a80: 64 20 74 68 65 6e 20 6a 75 73 74 20 75 73 65 20  d then just use 
1a90: 69 74 27 73 0a 23 20 63 6f 6e 74 65 6e 74 20 69  it's.# content i
1aa0: 6e 73 74 65 61 64 20 6f 66 20 63 61 6c 6c 69 6e  nstead of callin
1ab0: 67 20 52 65 68 61 73 68 2e 0a 23 20 28 73 65 65  g Rehash..# (see
1ac0: 20 63 6f 6d 70 6c 65 74 65 28 65 78 65 63 29 29   complete(exec))
1ad0: 2e 0a 23 20 0a 70 72 6f 63 20 52 65 68 61 73 68  ..# .proc Rehash
1ae0: 20 7b 7d 20 7b 0a 0a 09 67 6c 6f 62 61 6c 20 65   {} {...global e
1af0: 6e 76 0a 09 76 61 72 69 61 62 6c 65 20 65 78 65  nv..variable exe
1b00: 63 75 74 61 62 6c 65 73 0a 0a 09 69 66 20 7b 21  cutables...if {!
1b10: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 6e 76  [info exists env
1b20: 5d 20 7c 7c 20 21 5b 61 72 72 61 79 20 65 78 69  ] || ![array exi
1b30: 73 74 73 20 65 6e 76 5d 7d 20 7b 0a 09 09 72 65  sts env]} {...re
1b40: 74 75 72 6e 0a 09 7d 0a 09 69 66 20 7b 21 5b 69  turn..}..if {![i
1b50: 6e 66 6f 20 65 78 69 73 74 73 20 65 6e 76 28 50  nfo exists env(P
1b60: 41 54 48 29 5d 7d 20 7b 0a 09 09 72 65 74 75 72  ATH)]} {...retur
1b70: 6e 0a 09 7d 0a 0a 09 73 65 74 20 65 78 65 63 75  n..}...set execu
1b80: 74 61 62 6c 65 73 20 30 0a 09 66 6f 72 65 61 63  tables 0..foreac
1b90: 68 20 64 69 72 20 5b 73 70 6c 69 74 20 24 65 6e  h dir [split $en
1ba0: 76 28 50 41 54 48 29 20 3a 5d 20 7b 0a 09 09 69  v(PATH) :] {...i
1bb0: 66 20 7b 5b 63 61 74 63 68 20 5b 6c 69 73 74 20  f {[catch [list 
1bc0: 73 65 74 20 66 69 6c 65 73 20 5b 67 6c 6f 62 20  set files [glob 
1bd0: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 24 7b 64 69  -nocomplain ${di
1be0: 72 7d 2f 2a 5d 5d 5d 7d 20 7b 20 63 6f 6e 74 69  r}/*]]]} { conti
1bf0: 6e 75 65 20 7d 0a 09 09 66 6f 72 65 61 63 68 20  nue }...foreach 
1c00: 66 69 6c 65 20 24 66 69 6c 65 73 20 7b 0a 09 09  file $files {...
1c10: 09 69 66 20 7b 5b 66 69 6c 65 20 65 78 65 63 75  .if {[file execu
1c20: 74 61 62 6c 65 20 24 66 69 6c 65 5d 7d 20 7b 0a  table $file]} {.
1c30: 09 09 09 09 6c 61 70 70 65 6e 64 20 65 78 65 63  ....lappend exec
1c40: 75 74 61 62 6c 65 73 20 5b 66 69 6c 65 20 74 61  utables [file ta
1c50: 69 6c 20 24 7b 66 69 6c 65 7d 5d 0a 09 09 09 7d  il ${file}]....}
1c60: 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 23 2a 2a 0a 23  ...}..}.}..#**.#
1c70: 20 62 75 69 6c 64 20 61 20 6c 69 73 74 20 68 6f   build a list ho
1c80: 73 74 73 20 66 72 6f 6d 20 74 68 65 20 2f 65 74  sts from the /et
1c90: 63 2f 68 6f 73 74 73 20 66 69 6c 65 2e 0a 23 20  c/hosts file..# 
1ca0: 74 68 69 73 20 69 73 20 6f 6e 6c 79 20 64 6f 6e  this is only don
1cb0: 65 20 6f 6e 63 65 2e 20 54 68 69 73 20 69 73 20  e once. This is 
1cc0: 73 6f 72 74 20 6f 66 20 61 0a 23 20 64 69 72 74  sort of a.# dirt
1cd0: 79 20 68 61 63 6b 2c 20 2f 65 74 63 2f 68 6f 73  y hack, /etc/hos
1ce0: 74 73 20 69 73 20 68 61 72 64 63 6f 64 65 64 20  ts is hardcoded 
1cf0: 2e 2e 2e 0a 23 20 42 75 74 20 6f 6e 20 74 68 65  ....# But on the
1d00: 20 6f 74 68 65 72 20 73 69 64 65 2c 20 69 66 20   other side, if 
1d10: 74 68 65 20 75 73 65 72 20 73 75 70 70 6c 69 65  the user supplie
1d20: 73 0a 23 20 61 20 76 61 6c 69 64 20 68 6f 73 74  s.# a valid host
1d30: 20 74 61 62 6c 65 20 69 6e 20 74 63 6c 72 65 61   table in tclrea
1d40: 64 6c 69 6e 65 3a 3a 68 6f 73 74 73 0a 23 20 62  dline::hosts.# b
1d50: 65 66 6f 72 65 20 65 6e 74 65 72 69 6e 67 20 74  efore entering t
1d60: 68 65 20 65 76 65 6e 74 20 6c 6f 6f 70 2c 20 74  he event loop, t
1d70: 68 69 73 20 70 72 6f 63 0a 23 20 77 69 6c 6c 20  his proc.# will 
1d80: 72 65 74 75 72 6e 20 74 68 69 73 20 6c 69 73 74  return this list
1d90: 2e 0a 23 20 0a 70 72 6f 63 20 48 6f 73 74 4c 69  ..# .proc HostLi
1da0: 73 74 20 7b 7d 20 7b 0a 09 23 20 72 65 61 64 20  st {} {..# read 
1db0: 74 68 65 20 68 6f 73 74 20 74 61 62 6c 65 20 6f  the host table o
1dc0: 6e 6c 79 20 6f 6e 63 65 2e 0a 09 23 0a 09 76 61  nly once...#..va
1dd0: 72 69 61 62 6c 65 20 68 6f 73 74 73 0a 09 69 66  riable hosts..if
1de0: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists 
1df0: 68 6f 73 74 73 5d 7d 20 7b 0a 09 09 63 61 74 63  hosts]} {...catc
1e00: 68 20 7b 0a 09 09 09 73 65 74 20 68 6f 73 74 73  h {....set hosts
1e10: 20 22 22 0a 09 09 09 73 65 74 20 69 64 20 5b 6f   ""....set id [o
1e20: 70 65 6e 20 2f 65 74 63 2f 68 6f 73 74 73 20 72  pen /etc/hosts r
1e30: 5d 0a 09 09 09 69 66 20 7b 30 20 21 3d 20 24 7b  ]....if {0 != ${
1e40: 69 64 7d 7d 20 7b 0a 09 09 09 09 77 68 69 6c 65  id}} {.....while
1e50: 20 7b 2d 31 20 21 3d 20 5b 67 65 74 73 20 24 7b   {-1 != [gets ${
1e60: 69 64 7d 20 6c 69 6e 65 5d 7d 20 7b 0a 09 09 09  id} line]} {....
1e70: 09 09 72 65 67 73 75 62 20 7b 23 2e 2a 7d 20 24  ..regsub {#.*} $
1e80: 7b 6c 69 6e 65 7d 20 7b 7d 20 6c 69 6e 65 0a 09  {line} {} line..
1e90: 09 09 09 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68  ....if {[llength
1ea0: 20 24 7b 6c 69 6e 65 7d 5d 20 3e 3d 20 32 7d 20   ${line}] >= 2} 
1eb0: 7b 0a 09 09 09 09 09 09 6c 61 70 70 65 6e 64 20  {.......lappend 
1ec0: 68 6f 73 74 73 20 5b 6c 69 6e 64 65 78 20 24 7b  hosts [lindex ${
1ed0: 6c 69 6e 65 7d 20 31 5d 0a 09 09 09 09 09 7d 0a  line} 1]......}.
1ee0: 09 09 09 09 7d 0a 09 09 09 09 63 6c 6f 73 65 20  ....}.....close 
1ef0: 24 7b 69 64 7d 20 0a 09 09 09 7d 20 0a 09 09 7d  ${id} ....} ...}
1f00: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 7b 68 6f  ..}..return ${ho
1f10: 73 74 73 7d 20 0a 7d 0a 0a 23 2a 2a 0a 23 20 6e  sts} .}..#**.# n
1f20: 65 76 65 72 20 72 65 74 75 72 6e 20 61 6e 20 65  ever return an e
1f30: 6d 70 74 79 20 73 74 72 69 6e 67 2c 20 6e 65 76  mpty string, nev
1f40: 65 72 20 63 6f 6d 70 6c 65 74 65 2e 0a 23 20 54  er complete..# T
1f50: 68 69 73 20 69 73 20 75 73 65 66 75 6c 20 66 6f  his is useful fo
1f60: 72 20 73 68 6f 77 69 6e 67 20 6f 70 74 69 6f 6e  r showing option
1f70: 73 20 6c 69 73 74 73 20 66 6f 72 20 65 78 61 6d  s lists for exam
1f80: 70 6c 65 2e 0a 23 0a 70 72 6f 63 20 44 69 73 70  ple..#.proc Disp
1f90: 6c 61 79 48 69 6e 74 73 20 7b 6c 73 74 7d 20 7b  layHints {lst} {
1fa0: 0a 09 72 65 74 75 72 6e 20 5b 73 74 72 69 6e 67  ..return [string
1fb0: 20 74 72 69 6d 20 22 7b 7d 20 24 7b 6c 73 74 7d   trim "{} ${lst}
1fc0: 22 5d 0a 7d 0a 0a 23 2a 2a 0a 23 20 66 69 6e 64  "].}..#**.# find
1fd0: 20 28 70 61 72 74 69 61 6c 29 20 6d 61 74 63 68   (partial) match
1fe0: 65 73 20 66 6f 72 20 60 74 65 78 74 27 20 69 6e  es for `text' in
1ff0: 20 60 6c 73 74 27 2e 20 52 69 6e 67 0a 23 20 74   `lst'. Ring.# t
2000: 68 65 20 62 65 6c 6c 20 61 6e 64 20 72 65 74 75  he bell and retu
2010: 72 6e 20 74 68 65 20 77 68 6f 6c 65 20 6c 69 73  rn the whole lis
2020: 74 2c 20 69 66 20 74 68 65 20 75 73 65 72 0a 23  t, if the user.#
2030: 20 74 72 69 65 73 20 74 6f 20 63 6f 6d 70 6c 65   tries to comple
2040: 74 65 20 3f 2e 2e 3f 20 6f 70 74 69 6f 6e 73 20  te ?..? options 
2050: 6f 72 20 3c 2e 2e 3e 20 68 69 6e 74 73 2e 0a 23  or <..> hints..#
2060: 0a 23 20 4d 61 74 63 68 65 73 46 72 6f 6d 4c 69  .# MatchesFromLi
2070: 73 74 20 72 65 74 75 72 6e 73 20 61 20 6c 69 73  st returns a lis
2080: 74 20 77 68 69 63 68 20 69 73 20 6e 6f 74 20 73  t which is not s
2090: 75 69 74 61 62 6c 65 0a 23 20 66 6f 72 20 70 61  uitable.# for pa
20a0: 73 73 69 6e 67 20 74 6f 20 74 68 65 20 72 65 61  ssing to the rea
20b0: 64 6c 69 6e 65 20 63 6f 6d 70 6c 65 74 65 72 2e  dline completer.
20c0: 20 54 68 75 73 2c 0a 23 20 4d 61 74 63 68 65 73   Thus,.# Matches
20d0: 46 72 6f 6d 4c 69 73 74 20 73 68 6f 75 6c 64 20  FromList should 
20e0: 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 64 69  not be called di
20f0: 72 65 63 74 6c 79 20 62 75 74 0a 23 20 66 72 6f  rectly but.# fro
2100: 6d 20 66 6f 72 6d 61 74 74 69 6e 67 20 72 6f 75  m formatting rou
2110: 74 69 6e 65 73 20 61 73 20 54 72 79 46 72 6f 6d  tines as TryFrom
2120: 4c 69 73 74 2e 0a 23 0a 70 72 6f 63 20 4d 61 74  List..#.proc Mat
2130: 63 68 65 73 46 72 6f 6d 4c 69 73 74 20 7b 74 65  chesFromList {te
2140: 78 74 20 6c 73 74 20 7b 61 6c 6c 6f 77 20 22 22  xt lst {allow ""
2150: 7d 7d 20 7b 0a 09 73 65 74 20 72 65 73 75 6c 74  }} {..set result
2160: 20 22 22 0a 09 73 65 74 20 74 65 78 74 20 5b 53   ""..set text [S
2170: 74 72 69 70 50 72 65 66 69 78 20 24 74 65 78 74  tripPrefix $text
2180: 5d 0a 09 73 65 74 20 6e 75 6c 6c 20 5b 73 74 72  ]..set null [str
2190: 69 6e 67 20 69 6e 64 65 78 20 24 74 65 78 74 20  ing index $text 
21a0: 30 5d 0a 09 66 6f 72 65 61 63 68 20 63 68 61 72  0]..foreach char
21b0: 20 7b 3c 20 3f 7d 20 7b 0a 09 09 69 66 20 7b 24   {< ?} {...if {$
21c0: 63 68 61 72 20 3d 3d 20 24 6e 75 6c 6c 20 26 26  char == $null &&
21d0: 20 2d 31 20 3d 3d 20 5b 73 74 72 69 6e 67 20 66   -1 == [string f
21e0: 69 72 73 74 20 24 63 68 61 72 20 24 61 6c 6c 6f  irst $char $allo
21f0: 77 5d 7d 20 7b 0a 09 09 09 41 6c 65 72 74 0a 09  w]} {....Alert..
2200: 09 09 72 65 74 75 72 6e 20 24 6c 73 74 0a 09 09  ..return $lst...
2210: 7d 0a 09 7d 0a 09 23 20 70 75 74 73 20 73 74 64  }..}..# puts std
2220: 65 72 72 20 22 28 4d 61 74 63 68 65 73 46 72 6f  err "(MatchesFro
2230: 6d 4c 69 73 74 29 20 74 65 78 74 3d 24 74 65 78  mList) text=$tex
2240: 74 22 0a 09 23 20 70 75 74 73 20 73 74 64 65 72  t"..# puts stder
2250: 72 20 22 28 4d 61 74 63 68 65 73 46 72 6f 6d 4c  r "(MatchesFromL
2260: 69 73 74 29 20 6c 73 74 3d 24 6c 73 74 22 0a 09  ist) lst=$lst"..
2270: 66 6f 72 65 61 63 68 20 77 6f 72 64 20 24 6c 73  foreach word $ls
2280: 74 20 7b 0a 09 09 69 66 20 7b 5b 73 74 72 69 6e  t {...if {[strin
2290: 67 20 6d 61 74 63 68 20 24 7b 74 65 78 74 7d 2a  g match ${text}*
22a0: 20 24 7b 77 6f 72 64 7d 5d 7d 20 7b 0a 09 09 09   ${word}]} {....
22b0: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24  lappend result $
22c0: 7b 77 6f 72 64 7d 0a 09 09 7d 0a 09 7d 0a 09 72  {word}...}..}..r
22d0: 65 74 75 72 6e 20 5b 73 74 72 69 6e 67 20 74 72  eturn [string tr
22e0: 69 6d 20 24 72 65 73 75 6c 74 5d 0a 7d 0a 0a 23  im $result].}..#
22f0: 2a 2a 0a 23 20 69 6e 76 6f 6b 65 20 63 6d 64 20  **.# invoke cmd 
2300: 77 69 74 68 20 61 20 28 68 6f 70 65 66 75 6c 6c  with a (hopefull
2310: 79 29 20 69 6e 76 61 6c 69 64 20 73 74 72 69 6e  y) invalid strin
2320: 67 20 61 6e 64 0a 23 20 70 61 72 73 65 20 74 68  g and.# parse th
2330: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
2340: 74 6f 20 67 65 74 20 61 6e 20 6f 70 74 69 6f 6e  to get an option
2350: 20 6c 69 73 74 2e 0a 23 20 54 68 65 20 73 74 72   list..# The str
2360: 69 6e 67 73 20 61 72 65 20 63 61 72 65 66 75 6c  ings are careful
2370: 6c 79 20 63 68 6f 73 65 6e 20 74 6f 20 6d 61 74  ly chosen to mat
2380: 63 68 20 74 68 65 0a 23 20 72 65 73 75 6c 74 73  ch the.# results
2390: 20 70 72 6f 64 75 63 65 64 20 62 79 20 6b 6e 6f   produced by kno
23a0: 77 6e 20 74 63 6c 20 72 6f 75 74 69 6e 65 73 2e  wn tcl routines.
23b0: 20 49 74 27 73 20 61 0a 23 20 70 69 74 79 2c 20   It's a.# pity, 
23c0: 74 68 61 74 20 6e 6f 74 20 61 6c 6c 20 6f 62 6a  that not all obj
23d0: 65 63 74 20 63 6f 6d 6d 61 6e 64 73 20 67 65 6e  ect commands gen
23e0: 65 72 61 74 65 0a 23 20 73 74 61 6e 64 61 72 64  erate.# standard
23f0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 21   error messages!
2400: 0a 23 0a 23 20 40 70 61 72 61 6d 20 20 20 63 6d  .#.# @param   cm
2410: 64 0a 23 20 40 72 65 74 75 72 6e 20 20 6c 69 73  d.# @return  lis
2420: 74 20 6f 66 20 6f 70 74 69 6f 6e 73 20 66 6f 72  t of options for
2430: 20 63 6d 64 0a 23 20 40 64 61 74 65 20 20 20 20   cmd.# @date    
2440: 53 65 70 2d 31 34 2d 31 39 39 39 0a 23 0a 70 72  Sep-14-1999.#.pr
2450: 6f 63 20 54 72 79 53 75 62 43 6d 64 73 20 7b 74  oc TrySubCmds {t
2460: 65 78 74 20 63 6d 64 7d 20 7b 0a 0a 09 73 65 74  ext cmd} {...set
2470: 20 74 72 79 73 74 72 69 6e 67 20 2d 2d 2d 2d 0a   trystring ----.
2480: 0a 09 23 20 74 72 79 20 74 68 65 20 63 6f 6d 6d  ..# try the comm
2490: 61 6e 64 20 77 69 74 68 20 61 6e 64 20 77 2f 6f  and with and w/o
24a0: 20 74 72 79 73 74 72 69 6e 67 2e 0a 09 23 20 53   trystring...# S
24b0: 6f 6d 65 20 63 6f 6d 6d 61 6e 64 73 2c 20 65 2e  ome commands, e.
24c0: 67 2e 0a 09 23 20 20 20 20 20 2e 63 61 6e 76 61  g...#     .canva
24d0: 73 20 62 69 6e 64 0a 09 23 20 72 65 74 75 72 6e  s bind..# return
24e0: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 69 6e 76   an error if inv
24f0: 6f 6b 65 64 20 77 2f 6f 20 61 72 67 75 6d 65 6e  oked w/o argumen
2500: 74 73 0a 09 23 20 62 75 74 20 6e 6f 74 2c 20 69  ts..# but not, i
2510: 66 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 61  f invoked with a
2520: 72 67 75 6d 65 6e 74 73 2e 20 42 72 65 61 6b 69  rguments. Breaki
2530: 6e 67 0a 09 23 20 74 68 65 20 6c 6f 6f 70 20 69  ng..# the loop i
2540: 73 20 65 76 65 6e 74 75 61 6c 6c 79 20 64 6f 6e  s eventually don
2550: 65 20 61 74 20 74 68 65 20 65 6e 64 20 2e 2e 2e  e at the end ...
2560: 0a 09 23 0a 09 66 6f 72 20 7b 73 65 74 20 73 74  ..#..for {set st
2570: 72 20 24 7b 74 72 79 73 74 72 69 6e 67 7d 7d 20  r ${trystring}} 
2580: 7b 31 7d 20 7b 73 65 74 20 73 74 72 20 22 22 7d  {1} {set str ""}
2590: 20 7b 0a 0a 09 09 73 65 74 20 63 6f 64 65 20 5b   {....set code [
25a0: 63 61 74 63 68 20 7b 73 65 74 20 72 65 73 75 6c  catch {set resul
25b0: 74 20 5b 65 76 61 6c 20 24 7b 63 6d 64 7d 20 24  t [eval ${cmd} $
25c0: 7b 73 74 72 7d 5d 7d 20 6d 73 67 5d 0a 09 09 73  {str}]} msg]...s
25d0: 65 74 20 72 65 73 75 6c 74 20 22 22 0a 0a 09 09  et result ""....
25e0: 69 66 20 7b 24 63 6f 64 65 7d 20 7b 0a 09 09 09  if {$code} {....
25f0: 73 65 74 20 74 63 6d 64 20 5b 73 74 72 69 6e 67  set tcmd [string
2600: 20 74 72 69 6d 20 24 7b 63 6d 64 7d 5d 0a 09 09   trim ${cmd}]...
2610: 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20 6d  .# puts stderr m
2620: 73 67 3d 24 6d 73 67 0a 09 09 09 23 20 58 58 58  sg=$msg....# XXX
2630: 20 73 65 65 0a 09 09 09 23 20 20 20 20 20 20 20   see....#       
2640: 20 20 74 63 6c 49 6e 64 65 78 4f 62 6a 2e 63 0a    tclIndexObj.c.
2650: 09 09 09 23 20 20 20 20 20 20 20 20 20 74 6b 49  ...#         tkI
2660: 6d 67 50 68 6f 74 6f 2e 63 0a 09 09 09 23 20 58  mgPhoto.c....# X
2670: 58 58 0a 09 09 09 69 66 20 7b 5b 72 65 67 65 78  XX....if {[regex
2680: 70 20 5c 0a 09 09 09 09 7b 28 62 61 64 7c 61 6d  p \.....{(bad|am
2690: 62 69 67 75 6f 75 73 7c 75 6e 72 65 63 6f 67 6e  biguous|unrecogn
26a0: 69 7a 65 64 29 20 2e 2a 22 2d 2d 2d 2d 22 3a 20  ized) .*"----": 
26b0: 2a 6d 75 73 74 20 2a 62 65 28 20 2e 2a 24 29 7d  *must *be( .*$)}
26c0: 20 5c 0a 09 09 09 09 24 7b 6d 73 67 7d 20 61 6c   \.....${msg} al
26d0: 6c 20 6a 75 6e 6b 20 72 61 77 5d 0a 09 09 09 7d  l junk raw]....}
26e0: 20 7b 0a 09 09 09 09 72 65 67 73 75 62 20 2d 61   {.....regsub -a
26f0: 6c 6c 20 2d 2d 20 2c 20 24 7b 72 61 77 7d 20 7b  ll -- , ${raw} {
2700: 20 7d 20 72 61 77 0a 09 09 09 09 73 65 74 20 6c   } raw.....set l
2710: 65 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 7b 72 61  en [llength ${ra
2720: 77 7d 5d 0a 09 09 09 09 73 65 74 20 6c 65 6e 5f  w}].....set len_
2730: 32 20 5b 65 78 70 72 20 24 7b 6c 65 6e 7d 20 2d  2 [expr ${len} -
2740: 20 32 5d 0a 09 09 09 09 66 6f 72 20 7b 73 65 74   2].....for {set
2750: 20 69 20 30 7d 20 7b 24 7b 69 7d 20 3c 20 24 7b   i 0} {${i} < ${
2760: 6c 65 6e 7d 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  len}} {incr i} {
2770: 0a 09 09 09 09 09 73 65 74 20 77 6f 72 64 20 5b  ......set word [
2780: 6c 69 6e 64 65 78 20 24 7b 72 61 77 7d 20 24 7b  lindex ${raw} ${
2790: 69 7d 5d 0a 09 09 09 09 09 69 66 20 7b 22 6f 72  i}]......if {"or
27a0: 22 20 21 3d 20 24 7b 77 6f 72 64 7d 20 26 26 20  " != ${word} && 
27b0: 24 7b 69 7d 20 21 3d 20 24 7b 6c 65 6e 5f 32 7d  ${i} != ${len_2}
27c0: 7d 20 7b 0a 09 09 09 09 09 09 6c 61 70 70 65 6e  } {.......lappen
27d0: 64 20 72 65 73 75 6c 74 20 24 7b 77 6f 72 64 7d  d result ${word}
27e0: 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09  ......}.....}...
27f0: 09 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65  ..if {[string le
2800: 6e 67 74 68 20 24 7b 72 65 73 75 6c 74 7d 5d 20  ngth ${result}] 
2810: 26 26 20 5c 0a 09 09 09 09 09 2d 31 20 3d 3d 20  && \......-1 == 
2820: 5b 73 74 72 69 6e 67 20 66 69 72 73 74 20 24 7b  [string first ${
2830: 74 72 79 73 74 72 69 6e 67 7d 20 24 7b 72 65 73  trystring} ${res
2840: 75 6c 74 7d 5d 0a 09 09 09 09 7d 20 7b 0a 09 09  ult}].....} {...
2850: 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72  ...return [TryFr
2860: 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24  omList ${text} $
2870: 7b 72 65 73 75 6c 74 7d 5d 0a 09 09 09 09 7d 0a  {result}].....}.
2880: 0a 09 09 09 7d 20 65 6c 73 65 69 66 20 7b 5b 72  ....} elseif {[r
2890: 65 67 65 78 70 20 5c 0a 09 09 09 09 22 77 72 6f  egexp \....."wro
28a0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
28b0: 64 20 62 65 20 5c 22 3f 24 7b 74 63 6d 64 7d 5c  d be \"?${tcmd}\
28c0: 5b 5e 20 5c 74 5c 5d 2a 5c 28 2e 2a 5c 5b 5e 5c  [^ \t\]*\(.*\[^\
28d0: 22 5c 5d 5c 29 22 20 5c 0a 09 09 09 09 24 7b 6d  "\]\)" \.....${m
28e0: 73 67 7d 20 61 6c 6c 20 68 69 6e 74 5d 0a 0a 09  sg} all hint]...
28f0: 09 09 7d 20 7b 0a 0a 09 09 09 09 23 20 58 58 58  ..} {......# XXX
2900: 20 73 65 65 20 74 63 6c 49 6e 64 65 78 4f 62 6a   see tclIndexObj
2910: 2e 63 20 58 58 58 0a 09 09 09 09 69 66 20 7b 2d  .c XXX.....if {-
2920: 31 20 3d 3d 20 5b 73 74 72 69 6e 67 20 66 69 72  1 == [string fir
2930: 73 74 20 24 7b 74 72 79 73 74 72 69 6e 67 7d 20  st ${trystring} 
2940: 24 7b 68 69 6e 74 7d 5d 7d 20 7b 0a 09 09 09 09  ${hint}]} {.....
2950: 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79  .return [Display
2960: 48 69 6e 74 73 20 5b 6c 69 73 74 20 3c 5b 73 74  Hints [list <[st
2970: 72 69 6e 67 20 74 72 69 6d 20 24 68 69 6e 74 5d  ring trim $hint]
2980: 3e 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 20 65  >]].....}....} e
2990: 6c 73 65 20 7b 0a 09 09 09 09 23 20 63 68 65 63  lse {.....# chec
29a0: 6b 2c 20 69 66 20 69 74 27 73 20 61 20 62 6c 74  k, if it's a blt
29b0: 20 65 72 72 6f 72 20 6d 73 67 20 2e 2e 2e 0a 09   error msg .....
29c0: 09 09 09 23 0a 09 09 09 09 73 65 74 20 6d 73 67  ...#.....set msg
29d0: 6c 73 74 20 5b 73 70 6c 69 74 20 24 7b 6d 73 67  lst [split ${msg
29e0: 7d 20 5c 6e 5d 0a 09 09 09 09 66 6f 72 65 61 63  } \n].....foreac
29f0: 68 20 6c 69 6e 65 20 24 7b 6d 73 67 6c 73 74 7d  h line ${msglst}
2a00: 20 7b 0a 09 09 09 09 09 69 66 20 7b 5b 72 65 67   {......if {[reg
2a10: 65 78 70 20 22 24 7b 74 63 6d 64 7d 5c 5b 20 5c  exp "${tcmd}\[ \
2a20: 74 5c 5d 5c 2b 5c 28 5c 5b 5e 20 5c 74 5c 5d 2a  t\]\+\(\[^ \t\]*
2a30: 5c 29 5c 5b 5e 3a 5c 5d 2a 24 22 20 5c 0a 09 09  \)\[^:\]*$" \...
2a40: 09 09 09 09 24 7b 6c 69 6e 65 7d 20 61 6c 6c 20  ....${line} all 
2a50: 73 75 62 5d 0a 09 09 09 09 09 7d 20 7b 0a 09 09  sub]......} {...
2a60: 09 09 09 09 6c 61 70 70 65 6e 64 20 72 65 73 75  ....lappend resu
2a70: 6c 74 20 5b 6c 69 73 74 20 24 7b 73 75 62 7d 5d  lt [list ${sub}]
2a80: 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09  ......}.....}...
2a90: 09 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65  ..if {[string le
2aa0: 6e 67 74 68 20 24 7b 72 65 73 75 6c 74 7d 5d 20  ngth ${result}] 
2ab0: 26 26 20 5c 0a 09 09 09 09 09 2d 31 20 3d 3d 20  && \......-1 == 
2ac0: 5b 73 74 72 69 6e 67 20 66 69 72 73 74 20 24 7b  [string first ${
2ad0: 74 72 79 73 74 72 69 6e 67 7d 20 24 7b 72 65 73  trystring} ${res
2ae0: 75 6c 74 7d 5d 0a 09 09 09 09 7d 20 7b 0a 09 09  ult}].....} {...
2af0: 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72  ...return [TryFr
2b00: 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24  omList ${text} $
2b10: 7b 72 65 73 75 6c 74 7d 5d 0a 09 09 09 09 7d 0a  {result}].....}.
2b20: 09 09 09 7d 0a 09 09 7d 0a 09 09 69 66 20 7b 22  ...}...}...if {"
2b30: 22 20 3d 3d 20 24 7b 73 74 72 7d 7d 20 7b 0a 09  " == ${str}} {..
2b40: 09 09 62 72 65 61 6b 0a 09 09 7d 0a 09 7d 0a 09  ..break...}..}..
2b50: 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 23 2a 2a  return "".}..#**
2b60: 0a 23 20 74 72 79 20 74 6f 20 67 65 74 20 63 61  .# try to get ca
2b70: 73 73 65 73 20 66 6f 72 20 63 6f 6d 6d 61 6e 64  sses for command
2b80: 73 20 77 68 69 63 68 0a 23 20 61 6c 6c 6f 77 20  s which.# allow 
2b90: 60 63 6f 6e 66 69 67 75 72 65 27 20 28 63 67 65  `configure' (cge
2ba0: 74 29 2e 0a 23 20 40 70 61 72 61 6d 20 20 63 6f  t)..# @param  co
2bb0: 6d 6d 61 6e 64 2e 0a 23 20 40 70 61 72 61 6d 20  mmand..# @param 
2bc0: 20 6f 70 74 69 6f 6e 73 54 20 77 68 65 72 65 20   optionsT where 
2bd0: 74 68 65 20 74 61 62 6c 65 20 77 69 6c 6c 20 62  the table will b
2be0: 65 20 73 74 6f 72 65 64 2e 0a 23 20 40 72 65 74  e stored..# @ret
2bf0: 75 72 6e 20 6e 75 6d 62 65 72 20 6f 66 20 6f 70  urn number of op
2c00: 74 69 6f 6e 73 0a 23 20 40 64 61 74 65 20 20 20  tions.# @date   
2c10: 53 61 74 2d 53 65 70 2d 31 38 0a 23 0a 70 72 6f  Sat-Sep-18.#.pro
2c20: 63 20 43 6c 61 73 73 54 61 62 6c 65 20 7b 63 6d  c ClassTable {cm
2c30: 64 7d 20 7b 0a 0a 09 23 20 66 69 72 73 74 20 77  d} {...# first w
2c40: 65 20 62 75 69 6c 64 20 61 6e 20 6f 70 74 69 6f  e build an optio
2c50: 6e 20 74 61 62 6c 65 2e 0a 09 23 20 57 65 20 61  n table...# We a
2c60: 6c 77 61 79 73 20 75 73 65 20 60 63 6f 6e 66 69  lways use `confi
2c70: 67 75 72 65 27 20 68 65 72 65 2c 0a 09 23 20 62  gure' here,..# b
2c80: 65 63 61 75 73 65 20 63 67 65 74 20 77 69 6c 6c  ecause cget will
2c90: 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 0a   not return the.
2ca0: 09 23 20 6f 70 74 69 6f 6e 20 74 61 62 6c 65 2e  .# option table.
2cb0: 0a 09 23 0a 09 69 66 20 7b 5b 63 61 74 63 68 20  ..#..if {[catch 
2cc0: 5b 6c 69 73 74 20 73 65 74 20 6f 70 74 69 6f 6e  [list set option
2cd0: 5f 74 61 62 6c 65 20 5b 65 76 61 6c 20 24 7b 63  _table [eval ${c
2ce0: 6d 64 7d 20 63 6f 6e 66 69 67 75 72 65 5d 5d 20  md} configure]] 
2cf0: 6d 73 67 5d 7d 20 7b 0a 09 09 72 65 74 75 72 6e  msg]} {...return
2d00: 20 22 22 0a 09 7d 0a 09 73 65 74 20 63 6c 61 73   ""..}..set clas
2d10: 73 65 73 20 22 22 0a 09 66 6f 72 65 61 63 68 20  ses ""..foreach 
2d20: 6f 70 74 6c 69 6e 65 20 24 7b 6f 70 74 69 6f 6e  optline ${option
2d30: 5f 74 61 62 6c 65 7d 20 7b 0a 09 09 69 66 20 7b  _table} {...if {
2d40: 35 20 21 3d 20 5b 6c 6c 65 6e 67 74 68 20 24 7b  5 != [llength ${
2d50: 6f 70 74 6c 69 6e 65 7d 5d 7d 20 63 6f 6e 74 69  optline}]} conti
2d60: 6e 75 65 20 65 6c 73 65 20 7b 0a 09 09 09 6c 61  nue else {....la
2d70: 70 70 65 6e 64 20 63 6c 61 73 73 65 73 20 5b 6c  ppend classes [l
2d80: 69 6e 64 65 78 20 24 7b 6f 70 74 6c 69 6e 65 7d  index ${optline}
2d90: 20 32 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75   2]...}..}..retu
2da0: 72 6e 20 24 7b 63 6c 61 73 73 65 73 7d 0a 7d 0a  rn ${classes}.}.
2db0: 0a 23 2a 2a 0a 23 20 74 72 79 20 74 6f 20 67 65  .#**.# try to ge
2dc0: 74 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 63 6f  t options for co
2dd0: 6d 6d 61 6e 64 73 20 77 68 69 63 68 0a 23 20 61  mmands which.# a
2de0: 6c 6c 6f 77 20 60 63 6f 6e 66 69 67 75 72 65 27  llow `configure'
2df0: 20 28 63 67 65 74 29 2e 0a 23 20 40 70 61 72 61   (cget)..# @para
2e00: 6d 20 63 6f 6d 6d 61 6e 64 2e 0a 23 20 40 70 61  m command..# @pa
2e10: 72 61 6d 20 6f 70 74 69 6f 6e 73 54 20 77 68 65  ram optionsT whe
2e20: 72 65 20 74 68 65 20 74 61 62 6c 65 20 77 69 6c  re the table wil
2e30: 6c 20 62 65 20 73 74 6f 72 65 64 2e 0a 23 20 40  l be stored..# @
2e40: 72 65 74 75 72 6e 20 6e 75 6d 62 65 72 20 6f 66  return number of
2e50: 20 6f 70 74 69 6f 6e 73 0a 23 20 40 64 61 74 65   options.# @date
2e60: 20 53 65 70 2d 31 34 2d 31 39 39 39 0a 23 0a 70   Sep-14-1999.#.p
2e70: 72 6f 63 20 4f 70 74 69 6f 6e 54 61 62 6c 65 20  roc OptionTable 
2e80: 7b 63 6d 64 20 6f 70 74 69 6f 6e 73 54 7d 20 7b  {cmd optionsT} {
2e90: 0a 09 75 70 76 61 72 20 24 6f 70 74 69 6f 6e 73  ..upvar $options
2ea0: 54 20 6f 70 74 69 6f 6e 73 0a 09 23 20 66 69 72  T options..# fir
2eb0: 73 74 20 77 65 20 62 75 69 6c 64 20 61 6e 20 6f  st we build an o
2ec0: 70 74 69 6f 6e 20 74 61 62 6c 65 2e 0a 09 23 20  ption table...# 
2ed0: 57 65 20 61 6c 77 61 79 73 20 75 73 65 20 60 63  We always use `c
2ee0: 6f 6e 66 69 67 75 72 65 27 20 68 65 72 65 2c 0a  onfigure' here,.
2ef0: 09 23 20 62 65 63 61 75 73 65 20 63 67 65 74 20  .# because cget 
2f00: 77 69 6c 6c 20 6e 6f 74 20 72 65 74 75 72 6e 20  will not return 
2f10: 74 68 65 0a 09 23 20 6f 70 74 69 6f 6e 20 74 61  the..# option ta
2f20: 62 6c 65 2e 0a 09 23 0a 09 69 66 20 7b 5b 63 61  ble...#..if {[ca
2f30: 74 63 68 20 5b 6c 69 73 74 20 73 65 74 20 6f 70  tch [list set op
2f40: 74 69 6f 6e 5f 74 61 62 6c 65 20 5b 65 76 61 6c  tion_table [eval
2f50: 20 24 7b 63 6d 64 7d 20 63 6f 6e 66 69 67 75 72   ${cmd} configur
2f60: 65 5d 5d 20 6d 73 67 5d 7d 20 7b 0a 09 09 72 65  e]] msg]} {...re
2f70: 74 75 72 6e 20 30 0a 09 7d 0a 09 66 6f 72 65 61  turn 0..}..forea
2f80: 63 68 20 6f 70 74 6c 69 6e 65 20 24 7b 6f 70 74  ch optline ${opt
2f90: 69 6f 6e 5f 74 61 62 6c 65 7d 20 7b 0a 09 09 69  ion_table} {...i
2fa0: 66 20 7b 35 20 21 3d 20 5b 6c 6c 65 6e 67 74 68  f {5 != [llength
2fb0: 20 24 7b 6f 70 74 6c 69 6e 65 7d 5d 7d 20 63 6f   ${optline}]} co
2fc0: 6e 74 69 6e 75 65 20 65 6c 73 65 20 7b 0a 09 09  ntinue else {...
2fd0: 09 6c 61 70 70 65 6e 64 20 6f 70 74 69 6f 6e 73  .lappend options
2fe0: 28 73 77 69 74 63 68 65 73 29 20 5b 6c 69 6e 64  (switches) [lind
2ff0: 65 78 20 24 7b 6f 70 74 6c 69 6e 65 7d 20 30 5d  ex ${optline} 0]
3000: 0a 09 09 09 6c 61 70 70 65 6e 64 20 6f 70 74 69  ....lappend opti
3010: 6f 6e 73 28 76 61 6c 75 65 29 20 20 20 20 5b 6c  ons(value)    [l
3020: 69 6e 64 65 78 20 24 7b 6f 70 74 6c 69 6e 65 7d  index ${optline}
3030: 20 34 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75   4]...}..}..retu
3040: 72 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 7b 6f 70  rn [llength ${op
3050: 74 69 6f 6e 5f 74 61 62 6c 65 7d 5d 0a 7d 0a 0a  tion_table}].}..
3060: 23 2a 2a 0a 23 20 74 72 79 20 74 6f 20 63 6f 6d  #**.# try to com
3070: 70 6c 65 74 65 20 61 20 60 63 6d 64 20 63 6f 6e  plete a `cmd con
3080: 66 69 67 75 72 65 7c 63 67 65 74 20 2e 2e 27 20  figure|cget ..' 
3090: 66 72 6f 6d 20 74 68 65 20 63 6f 6d 6d 61 6e 64  from the command
30a0: 27 73 20 6f 70 74 69 6f 6e 73 2e 0a 23 20 40 70  's options..# @p
30b0: 61 72 61 6d 20 20 20 74 65 78 74 20 73 74 61 72  aram   text star
30c0: 74 20 6c 69 6e 65 20 63 6d 64 2c 20 73 74 61 6e  t line cmd, stan
30d0: 64 61 72 64 20 74 63 6c 72 65 61 64 6c 69 6e 65  dard tclreadline
30e0: 43 6f 6d 70 6c 65 74 65 72 20 61 72 67 75 6d 65  Completer argume
30f0: 6e 74 73 2e 0a 23 20 40 72 65 74 75 72 6e 20 20  nts..# @return  
3100: 2d 2d 20 61 20 66 6c 61 67 20 69 6e 64 69 63 61  -- a flag indica
3110: 74 69 6e 67 2c 20 69 66 20 28 63 67 65 74 7c 63  ting, if (cget|c
3120: 6f 6e 66 69 67 75 72 65 29 20 77 61 73 20 66 6f  onfigure) was fo
3130: 75 6e 64 2e 0a 23 20 40 72 65 74 75 72 6e 20 20  und..# @return  
3140: 72 65 73 75 6c 74 54 20 2d 2d 20 61 20 74 63 6c  resultT -- a tcl
3150: 72 65 61 64 6c 69 6e 65 20 63 6f 6d 70 6c 65 74  readline complet
3160: 65 72 20 66 6f 72 6d 61 74 74 65 64 20 73 74 72  er formatted str
3170: 69 6e 67 2e 0a 23 20 40 64 61 74 65 20 20 20 20  ing..# @date    
3180: 53 65 70 2d 31 34 2d 31 39 39 39 0a 23 0a 70 72  Sep-14-1999.#.pr
3190: 6f 63 20 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4f  oc CompleteFromO
31a0: 70 74 69 6f 6e 73 20 7b 74 65 78 74 20 73 74 61  ptions {text sta
31b0: 72 74 20 6c 69 6e 65 20 72 65 73 75 6c 74 54 7d  rt line resultT}
31c0: 20 7b 0a 0a 09 75 70 76 61 72 20 24 7b 72 65 73   {...upvar ${res
31d0: 75 6c 74 54 7d 20 72 65 73 75 6c 74 0a 09 73 65  ultT} result..se
31e0: 74 20 72 65 73 75 6c 74 20 22 22 0a 0a 09 23 20  t result ""...# 
31f0: 63 68 65 63 6b 20 69 66 20 65 69 74 68 65 72 20  check if either 
3200: 60 63 6f 6e 66 69 67 75 72 65 27 20 6f 72 20 60  `configure' or `
3210: 63 67 65 74 27 20 69 73 20 70 72 65 73 65 6e 74  cget' is present
3220: 2e 0a 09 23 0a 09 73 65 74 20 6c 73 74 20 5b 50  ...#..set lst [P
3230: 72 6f 70 65 72 4c 69 73 74 20 24 7b 6c 69 6e 65  roperList ${line
3240: 7d 5d 0a 09 66 6f 72 65 61 63 68 20 6b 65 79 77  }]..foreach keyw
3250: 6f 72 64 20 7b 63 6f 6e 66 69 67 75 72 65 20 63  ord {configure c
3260: 67 65 74 7d 20 7b 0a 09 09 73 65 74 20 69 64 78  get} {...set idx
3270: 20 5b 6c 73 65 61 72 63 68 20 24 7b 6c 73 74 7d   [lsearch ${lst}
3280: 20 24 7b 6b 65 79 77 6f 72 64 7d 5d 0a 09 09 69   ${keyword}]...i
3290: 66 20 7b 2d 31 20 21 3d 20 24 7b 69 64 78 7d 7d  f {-1 != ${idx}}
32a0: 20 7b 0a 09 09 09 62 72 65 61 6b 0a 09 09 7d 0a   {....break...}.
32b0: 09 7d 0a 09 69 66 20 7b 2d 31 20 3d 3d 20 24 7b  .}..if {-1 == ${
32c0: 69 64 78 7d 7d 20 7b 0a 09 09 72 65 74 75 72 6e  idx}} {...return
32d0: 20 30 0a 09 7d 0a 0a 09 69 66 20 7b 5b 72 65 67   0..}...if {[reg
32e0: 65 78 70 20 7b 28 63 67 65 74 7c 63 6f 6e 66 69  exp {(cget|confi
32f0: 67 75 72 65 29 24 7d 20 24 7b 6c 69 6e 65 7d 5d  gure)$} ${line}]
3300: 7d 20 7b 0a 09 09 23 20 77 65 20 61 72 65 20 61  } {...# we are a
3310: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 28 63 6f  t the end of (co
3320: 6e 66 69 67 75 72 65 7c 63 67 65 74 29 0a 09 09  nfigure|cget)...
3330: 23 20 62 75 74 20 74 68 65 72 65 27 73 20 6e 6f  # but there's no
3340: 20 73 70 61 63 65 20 79 65 74 2e 0a 09 09 23 0a   space yet....#.
3350: 09 09 73 65 74 20 72 65 73 75 6c 74 20 24 7b 74  ..set result ${t
3360: 65 78 74 7d 0a 09 09 72 65 74 75 72 6e 20 31 0a  ext}...return 1.
3370: 09 7d 0a 0a 09 23 20 73 65 70 61 72 61 74 65 20  .}...# separate 
3380: 74 68 65 20 63 6f 6d 6d 61 6e 64 2c 20 62 75 74  the command, but
3390: 20 65 78 63 6c 75 64 65 20 28 63 67 65 74 7c 63   exclude (cget|c
33a0: 6f 6e 66 69 67 75 72 65 29 0a 09 23 20 62 65 63  onfigure)..# bec
33b0: 61 75 73 65 20 63 67 65 74 20 77 6f 6e 27 74 20  ause cget won't 
33c0: 72 65 74 75 72 6e 20 74 68 65 20 6f 70 74 69 6f  return the optio
33d0: 6e 20 74 61 62 6c 65 2e 20 49 6e 73 74 65 61 64  n table. Instead
33e0: 0a 09 23 20 4f 70 74 69 6f 6e 54 61 62 6c 65 20  ..# OptionTable 
33f0: 61 6c 77 61 79 73 20 75 73 65 73 20 60 63 6f 6e  always uses `con
3400: 66 69 67 75 72 65 27 20 74 6f 20 67 65 74 20 74  figure' to get t
3410: 68 65 0a 09 23 20 6f 70 74 69 6f 6e 20 74 61 62  he..# option tab
3420: 6c 65 2e 0a 09 23 0a 09 73 65 74 20 63 6d 64 20  le...#..set cmd 
3430: 5b 6c 72 61 6e 67 65 20 24 7b 6c 73 74 7d 20 30  [lrange ${lst} 0
3440: 20 5b 65 78 70 72 20 24 7b 69 64 78 7d 20 2d 20   [expr ${idx} - 
3450: 31 5d 5d 0a 0a 09 54 72 61 63 65 54 65 78 74 20  1]]...TraceText 
3460: 24 7b 63 6d 64 7d 0a 09 69 66 20 7b 30 20 3c 20  ${cmd}..if {0 < 
3470: 5b 4f 70 74 69 6f 6e 54 61 62 6c 65 20 24 7b 63  [OptionTable ${c
3480: 6d 64 7d 20 6f 70 74 69 6f 6e 73 5d 7d 20 7b 0a  md} options]} {.
3490: 0a 09 09 73 65 74 20 70 72 65 76 20 5b 50 72 65  ...set prev [Pre
34a0: 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72  viousWord ${star
34b0: 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09 69 66  t} ${line}]...if
34c0: 20 7b 2d 31 20 21 3d 20 5b 73 65 74 20 66 6f 75   {-1 != [set fou
34d0: 6e 64 20 5b 6c 73 65 61 72 63 68 20 2d 65 78 61  nd [lsearch -exa
34e0: 63 74 20 24 6f 70 74 69 6f 6e 73 28 73 77 69 74  ct $options(swit
34f0: 63 68 65 73 29 20 24 7b 70 72 65 76 7d 5d 5d 7d  ches) ${prev}]]}
3500: 20 7b 0a 0a 09 09 09 23 20 63 6f 6d 70 6c 65 74   {.....# complet
3510: 65 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 75 73  e only if the us
3520: 65 72 20 68 61 73 20 6e 6f 74 0a 09 09 09 23 20  er has not....# 
3530: 61 6c 72 65 61 64 79 20 65 6e 74 65 72 65 64 20  already entered 
3540: 73 6f 6d 65 74 68 69 6e 67 20 68 65 72 65 2e 0a  something here..
3550: 09 09 09 23 0a 09 09 09 69 66 20 7b 21 5b 6c 6c  ...#....if {![ll
3560: 65 6e 67 74 68 20 24 7b 74 65 78 74 7d 5d 7d 20  ength ${text}]} 
3570: 7b 0a 0a 09 09 09 09 23 20 63 68 65 63 6b 20 66  {......# check f
3580: 69 72 73 74 2c 20 69 66 20 74 68 65 20 53 70 65  irst, if the Spe
3590: 63 69 66 69 63 53 77 69 74 63 68 43 6f 6d 70 6c  cificSwitchCompl
35a0: 65 74 65 72 0a 09 09 09 09 23 20 6b 6e 6f 77 73  eter.....# knows
35b0: 20 73 6f 6d 65 74 68 69 6e 67 20 61 62 6f 75 74   something about
35c0: 20 74 68 69 73 20 73 77 69 74 63 68 2e 20 28 6e   this switch. (n
35d0: 6f 74 65 20 74 68 61 74 0a 09 09 09 09 23 20 60  ote that.....# `
35e0: 70 72 65 76 27 20 63 6f 6e 74 61 69 6e 73 20 74  prev' contains t
35f0: 68 65 20 73 77 69 74 63 68 29 2e 20 54 68 65 20  he switch). The 
3600: 60 30 27 20 61 73 20 6c 61 73 74 0a 09 09 09 09  `0' as last.....
3610: 23 20 61 72 67 75 6d 65 6e 74 20 6d 61 6b 65 73  # argument makes
3620: 20 74 68 65 20 53 70 65 63 69 66 69 63 53 77 69   the SpecificSwi
3630: 74 63 68 43 6f 6d 70 6c 65 74 65 72 0a 09 09 09  tchCompleter....
3640: 09 23 20 72 65 74 75 72 6e 69 6e 67 20 22 22 20  .# returning "" 
3650: 69 66 20 69 74 20 6b 6e 6f 77 73 20 6e 6f 74 68  if it knows noth
3660: 69 6e 67 20 73 70 65 63 69 66 69 63 0a 09 09 09  ing specific....
3670: 09 23 20 61 62 6f 75 74 20 74 68 69 73 20 73 77  .# about this sw
3680: 69 74 63 68 2e 0a 09 09 09 09 23 0a 09 09 09 09  itch......#.....
3690: 73 65 74 20 76 61 6c 75 65 73 20 5b 53 70 65 63  set values [Spec
36a0: 69 66 69 63 53 77 69 74 63 68 43 6f 6d 70 6c 65  ificSwitchComple
36b0: 74 65 72 20 5c 0a 09 09 09 09 24 7b 74 65 78 74  ter \.....${text
36c0: 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e  } ${start} ${lin
36d0: 65 7d 20 24 7b 70 72 65 76 7d 20 30 5d 0a 0a 09  e} ${prev} 0]...
36e0: 09 09 09 69 66 20 5b 73 74 72 69 6e 67 20 6c 65  ...if [string le
36f0: 6e 67 74 68 20 24 7b 76 61 6c 75 65 73 7d 5d 20  ngth ${values}] 
3700: 7b 0a 09 09 09 09 09 73 65 74 20 72 65 73 75 6c  {......set resul
3710: 74 20 24 7b 76 61 6c 75 65 73 7d 0a 09 09 09 09  t ${values}.....
3720: 09 72 65 74 75 72 6e 20 31 0a 09 09 09 09 7d 20  .return 1.....} 
3730: 65 6c 73 65 20 7b 0a 09 09 09 09 09 73 65 74 20  else {......set 
3740: 76 61 6c 20 5b 6c 69 6e 64 65 78 20 24 6f 70 74  val [lindex $opt
3750: 69 6f 6e 73 28 76 61 6c 75 65 29 20 24 7b 66 6f  ions(value) ${fo
3760: 75 6e 64 7d 5d 0a 09 09 09 09 09 69 66 20 5b 73  und}]......if [s
3770: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b 76  tring length ${v
3780: 61 6c 7d 5d 20 7b 0a 09 09 09 09 09 09 23 20 72  al}] {.......# r
3790: 65 74 75 72 6e 20 74 68 65 20 6f 6c 64 20 76 61  eturn the old va
37a0: 6c 75 65 20 6f 6e 6c 79 2c 20 69 66 20 69 74 27  lue only, if it'
37b0: 73 20 6e 6f 6e 2d 65 6d 70 74 79 2e 0a 09 09 09  s non-empty.....
37c0: 09 09 09 23 20 55 73 65 20 74 68 69 73 20 64 6f  ...# Use this do
37d0: 75 62 6c 65 20 6c 69 73 74 20 74 6f 20 71 75 6f  uble list to quo
37e0: 74 65 20 6f 70 74 69 6f 6e 0a 09 09 09 09 09 09  te option.......
37f0: 23 20 76 61 6c 75 65 73 20 77 68 69 63 68 20 68  # values which h
3800: 61 76 65 20 74 6f 20 62 65 20 71 75 6f 74 65 64  ave to be quoted
3810: 2e 0a 09 09 09 09 09 09 23 0a 09 09 09 09 09 09  ........#.......
3820: 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74  set result [list
3830: 20 5b 6c 69 73 74 20 24 7b 76 61 6c 7d 5d 5d 0a   [list ${val}]].
3840: 09 09 09 09 09 09 72 65 74 75 72 6e 20 31 0a 09  ......return 1..
3850: 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09  ....} else {....
3860: 09 09 09 73 65 74 20 72 65 73 75 6c 74 20 22 22  ...set result ""
3870: 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 31 0a  .......return 1.
3880: 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09  .....}.....}....
3890: 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 73 65 74  } else {.....set
38a0: 20 72 65 73 75 6c 74 20 5b 53 70 65 63 69 66 69   result [Specifi
38b0: 63 53 77 69 74 63 68 43 6f 6d 70 6c 65 74 65 72  cSwitchCompleter
38c0: 20 5c 0a 09 09 09 09 24 7b 74 65 78 74 7d 20 24   \.....${text} $
38d0: 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 20  {start} ${line} 
38e0: 24 7b 70 72 65 76 7d 20 31 5d 0a 09 09 09 09 72  ${prev} 1].....r
38f0: 65 74 75 72 6e 20 31 0a 09 09 09 7d 0a 0a 09 09  eturn 1....}....
3900: 7d 20 65 6c 73 65 20 7b 0a 09 09 09 73 65 74 20  } else {....set 
3910: 72 65 73 75 6c 74 20 5b 43 6f 6d 70 6c 65 74 65  result [Complete
3920: 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
3930: 20 5c 0a 09 09 09 5b 52 65 6d 6f 76 65 55 73 65   \....[RemoveUse
3940: 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d  dOptions ${line}
3950: 20 24 6f 70 74 69 6f 6e 73 28 73 77 69 74 63 68   $options(switch
3960: 65 73 29 5d 5d 0a 09 09 09 72 65 74 75 72 6e 20  es)]]....return 
3970: 31 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  1...}..}..return
3980: 20 31 0a 7d 0a 0a 70 72 6f 63 20 4f 62 6a 65 63   1.}..proc Objec
3990: 74 43 6c 61 73 73 43 6f 6d 70 6c 65 74 65 72 20  tClassCompleter 
39a0: 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
39b0: 6c 69 6e 65 20 70 6f 73 20 72 65 73 75 6c 74 54  line pos resultT
39c0: 7d 20 7b 0a 09 75 70 76 61 72 20 24 7b 72 65 73  } {..upvar ${res
39d0: 75 6c 74 54 7d 20 72 65 73 75 6c 74 0a 09 73 65  ultT} result..se
39e0: 74 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 7b  t cmd [Lindex ${
39f0: 6c 69 6e 65 7d 20 30 5d 0a 09 69 66 20 7b 22 2e  line} 0]..if {".
3a00: 22 20 3d 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64  " == [string ind
3a10: 65 78 20 24 7b 6c 69 6e 65 7d 20 30 5d 7d 20 7b  ex ${line} 0]} {
3a20: 0a 09 09 23 20 69 74 27 73 20 61 20 77 69 64 67  ...# it's a widg
3a30: 65 74 2e 20 54 72 79 20 74 6f 20 67 65 74 20 69  et. Try to get i
3a40: 74 27 73 20 63 6c 61 73 73 20 6e 61 6d 65 2e 0a  t's class name..
3a50: 09 09 23 0a 09 09 69 66 20 7b 21 5b 63 61 74 63  ..#...if {![catc
3a60: 68 20 5b 6c 69 73 74 20 73 65 74 20 63 6c 61 73  h [list set clas
3a70: 73 20 5b 77 69 6e 66 6f 20 63 6c 61 73 73 20 5b  s [winfo class [
3a80: 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 30  Lindex ${line} 0
3a90: 5d 5d 5d 5d 7d 20 7b 0a 09 09 09 69 66 20 7b 5b  ]]]]} {....if {[
3aa0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b 69  string length [i
3ab0: 6e 66 6f 20 70 72 6f 63 20 24 7b 63 6c 61 73 73  nfo proc ${class
3ac0: 7d 4f 62 6a 5d 5d 7d 20 7b 0a 09 09 09 09 73 65  }Obj]]} {.....se
3ad0: 74 20 72 65 73 75 6c 74 20 5b 24 7b 63 6c 61 73  t result [${clas
3ae0: 73 7d 4f 62 6a 20 24 7b 74 65 78 74 7d 20 24 7b  s}Obj ${text} ${
3af0: 73 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20 24 7b  start} ${end} ${
3b00: 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 5d 0a 09 09  line} ${pos}]...
3b10: 09 09 72 65 74 75 72 6e 20 30 0a 09 09 09 7d 0a  ..return 0....}.
3b20: 09 09 7d 0a 09 7d 0a 09 69 66 20 7b 21 5b 63 61  ..}..}..if {![ca
3b30: 74 63 68 20 5b 6c 69 73 74 20 73 65 74 20 74 79  tch [list set ty
3b40: 70 65 20 5b 69 6d 61 67 65 20 74 79 70 65 20 24  pe [image type $
3b50: 7b 63 6d 64 7d 5d 5d 5d 7d 20 7b 0a 09 09 73 77  {cmd}]]]} {...sw
3b60: 69 74 63 68 20 2d 2d 20 24 7b 74 79 70 65 7d 20  itch -- ${type} 
3b70: 7b 0a 09 09 09 70 68 6f 74 6f 20 7b 0a 09 09 09  {....photo {....
3b80: 09 73 65 74 20 72 65 73 75 6c 74 20 5b 50 68 6f  .set result [Pho
3b90: 74 6f 4f 62 6a 20 24 7b 74 65 78 74 7d 20 24 7b  toObj ${text} ${
3ba0: 73 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20 24 7b  start} ${end} ${
3bb0: 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 5d 0a 09 09  line} ${pos}]...
3bc0: 09 09 72 65 74 75 72 6e 20 31 0a 09 09 09 7d 0a  ..return 1....}.
3bd0: 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09  ...default {....
3be0: 09 23 20 6c 65 74 20 74 68 65 20 66 61 6c 6c 62  .# let the fallb
3bf0: 61 63 6b 20 63 6f 6d 70 6c 65 74 65 72 73 20 64  ack completers d
3c00: 6f 20 74 68 65 20 6a 6f 62 2e 0a 09 09 09 09 72  o the job......r
3c10: 65 74 75 72 6e 20 30 0a 09 09 09 7d 0a 09 09 7d  eturn 0....}...}
3c20: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 30 0a 7d 0a  ..}..return 0.}.
3c30: 0a 70 72 6f 63 20 43 6f 6d 70 6c 65 74 65 46 72  .proc CompleteFr
3c40: 6f 6d 4f 70 74 69 6f 6e 73 4f 72 53 75 62 43 6d  omOptionsOrSubCm
3c50: 64 73 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  ds {text start e
3c60: 6e 64 20 6c 69 6e 65 20 70 6f 73 7d 20 7b 0a 09  nd line pos} {..
3c70: 69 66 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  if [CompleteFrom
3c80: 4f 70 74 69 6f 6e 73 20 24 7b 74 65 78 74 7d 20  Options ${text} 
3c90: 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d  ${start} ${line}
3ca0: 20 66 72 6f 6d 5f 6f 70 74 73 5d 20 7b 0a 09 09   from_opts] {...
3cb0: 23 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 2c  # always return,
3cc0: 20 69 66 20 43 6f 6d 70 6c 65 74 65 46 72 6f 6d   if CompleteFrom
3cd0: 4f 70 74 69 6f 6e 73 20 72 65 74 75 72 6e 73 20  Options returns 
3ce0: 6e 6f 6e 2d 7a 65 72 6f 2c 0a 09 09 23 20 74 68  non-zero,...# th
3cf0: 61 74 20 6d 65 61 6e 73 20 28 63 6f 6e 66 69 67  at means (config
3d00: 75 72 65 7c 63 67 65 74 29 20 77 65 72 65 20 70  ure|cget) were p
3d10: 72 65 73 65 6e 74 2e 20 54 68 69 73 20 65 6e 73  resent. This ens
3d20: 75 72 65 73 0a 09 09 23 20 74 68 61 74 20 54 72  ures...# that Tr
3d30: 79 53 75 62 43 6d 64 73 20 77 69 6c 6c 20 6e 6f  ySubCmds will no
3d40: 74 20 63 6f 6e 66 69 67 75 72 65 20 73 6f 6d 65  t configure some
3d50: 74 68 69 6e 67 20 62 79 20 63 68 61 6e 63 65 2e  thing by chance.
3d60: 0a 09 09 23 0a 09 09 72 65 74 75 72 6e 20 24 7b  ...#...return ${
3d70: 66 72 6f 6d 5f 6f 70 74 73 7d 0a 09 7d 20 65 6c  from_opts}..} el
3d80: 73 65 20 7b 0a 09 09 23 20 70 75 74 73 20 73 74  se {...# puts st
3d90: 64 65 72 72 20 5c 6e 5c 6e 5b 6c 72 61 6e 67 65  derr \n\n[lrange
3da0: 20 5b 50 72 6f 70 65 72 4c 69 73 74 20 24 7b 6c   [ProperList ${l
3db0: 69 6e 65 7d 5d 20 30 20 5b 65 78 70 72 20 24 70  ine}] 0 [expr $p
3dc0: 6f 73 20 2d 20 31 5d 5d 5c 6e 0a 09 09 72 65 74  os - 1]]\n...ret
3dd0: 75 72 6e 20 5b 54 72 79 53 75 62 43 6d 64 73 20  urn [TrySubCmds 
3de0: 24 7b 74 65 78 74 7d 20 5c 0a 09 09 5b 6c 72 61  ${text} \...[lra
3df0: 6e 67 65 20 5b 50 72 6f 70 65 72 4c 69 73 74 20  nge [ProperList 
3e00: 24 7b 6c 69 6e 65 7d 5d 20 30 20 5b 65 78 70 72  ${line}] 0 [expr
3e10: 20 24 70 6f 73 20 2d 20 31 5d 5d 5d 0a 09 7d 0a   $pos - 1]]]..}.
3e20: 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 23 2a  .return "".}..#*
3e30: 2a 0a 23 20 54 4f 44 4f 3a 20 73 68 69 74 2e 20  *.# TODO: shit. 
3e40: 6d 61 6b 65 20 74 68 69 73 20 62 65 74 74 65 72  make this better
3e50: 21 0a 23 20 40 70 61 72 61 6d 20 20 74 65 78 74  !.# @param  text
3e60: 2c 20 61 20 73 74 64 20 63 6f 6d 70 6c 65 74 65  , a std complete
3e70: 72 20 61 72 67 75 6d 65 6e 74 20 28 63 75 72 72  r argument (curr
3e80: 65 6e 74 20 77 6f 72 64 29 2e 0a 23 20 40 70 61  ent word)..# @pa
3e90: 72 61 6d 20 20 66 75 6c 6c 70 61 72 74 2c 20 74  ram  fullpart, t
3ea0: 68 65 20 66 75 6c 6c 20 74 65 78 74 20 6f 66 20  he full text of 
3eb0: 74 68 65 20 63 75 72 72 65 6e 74 20 70 6f 73 69  the current posi
3ec0: 74 69 6f 6e 2e 0a 23 20 40 70 61 72 61 6d 20 20  tion..# @param  
3ed0: 6c 73 74 2c 20 74 68 65 20 6c 69 73 74 20 74 6f  lst, the list to
3ee0: 20 63 6f 6d 70 6c 65 74 65 20 66 72 6f 6d 2e 0a   complete from..
3ef0: 23 20 40 70 61 72 61 6d 20 20 70 72 65 2c 20 6c  # @param  pre, l
3f00: 65 61 64 69 6e 67 20 60 71 75 6f 74 65 27 2e 0a  eading `quote'..
3f10: 23 20 40 70 61 72 61 6d 20 20 73 65 70 2c 20 77  # @param  sep, w
3f20: 6f 72 64 20 73 65 70 61 72 61 74 6f 72 2e 0a 23  ord separator..#
3f30: 20 40 70 61 72 61 6d 20 20 70 6f 73 74 2c 20 74   @param  post, t
3f40: 72 61 69 6c 69 6e 67 20 60 71 75 6f 74 65 27 2e  railing `quote'.
3f50: 0a 23 20 40 72 65 74 75 72 6e 20 61 20 66 6f 72  .# @return a for
3f60: 6d 61 74 74 65 64 20 63 6f 6d 70 6c 65 74 65 72  matted completer
3f70: 20 73 74 72 69 6e 67 2e 0a 23 20 40 64 61 74 65   string..# @date
3f80: 20 20 20 53 65 70 2d 31 35 2d 31 39 39 39 0a 23     Sep-15-1999.#
3f90: 0a 70 72 6f 63 20 43 6f 6d 70 6c 65 74 65 4c 69  .proc CompleteLi
3fa0: 73 74 46 72 6f 6d 4c 69 73 74 20 7b 74 65 78 74  stFromList {text
3fb0: 20 66 75 6c 6c 70 61 72 74 20 6c 73 74 20 70 72   fullpart lst pr
3fc0: 65 20 73 65 70 20 70 6f 73 74 7d 20 7b 0a 0a 09  e sep post} {...
3fd0: 23 20 70 75 74 73 20 73 74 64 65 72 72 20 22 22  # puts stderr ""
3fe0: 0a 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20  ..# puts stderr 
3ff0: 74 65 78 74 3d 7c 24 74 65 78 74 7c 0a 09 23 20  text=|$text|..# 
4000: 70 75 74 73 20 73 74 64 65 72 72 20 6c 73 74 3d  puts stderr lst=
4010: 7c 24 6c 73 74 7c 0a 09 23 20 70 75 74 73 20 73  |$lst|..# puts s
4020: 74 64 65 72 72 20 70 72 65 3d 7c 24 70 72 65 7c  tderr pre=|$pre|
4030: 0a 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20  ..# puts stderr 
4040: 73 65 70 3d 7c 24 73 65 70 7c 0a 09 23 20 70 75  sep=|$sep|..# pu
4050: 74 73 20 73 74 64 65 72 72 20 70 6f 73 74 3d 7c  ts stderr post=|
4060: 24 70 6f 73 74 7c 0a 0a 09 69 66 20 7b 21 5b 73  $post|...if {![s
4070: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b 66  tring length ${f
4080: 75 6c 6c 70 61 72 74 7d 5d 7d 20 7b 0a 0a 09 09  ullpart}]} {....
4090: 23 20 6e 6f 74 68 69 6e 67 20 74 79 70 65 64 20  # nothing typed 
40a0: 73 6f 20 66 61 72 2e 20 49 6e 73 65 72 74 20 61  so far. Insert a
40b0: 20 24 70 72 65 0a 09 09 23 20 61 6e 64 20 69 6e   $pre...# and in
40c0: 68 69 62 69 74 20 66 75 72 74 68 65 72 20 63 6f  hibit further co
40d0: 6d 70 6c 65 74 69 6f 6e 2e 0a 09 09 23 0a 09 09  mpletion....#...
40e0: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 7b 70  return [list ${p
40f0: 72 65 7d 20 7b 7d 5d 0a 0a 09 7d 20 65 6c 73 65  re} {}]...} else
4100: 69 66 20 7b 24 7b 70 6f 73 74 7d 20 3d 3d 20 5b  if {${post} == [
4110: 53 74 72 69 6e 67 20 69 6e 64 65 78 20 24 7b 74  String index ${t
4120: 65 78 74 7d 20 65 6e 64 5d 7d 20 7b 0a 0a 09 09  ext} end]} {....
4130: 23 20 66 69 6e 61 6c 69 7a 65 2c 20 61 70 70 65  # finalize, appe
4140: 6e 64 20 74 68 65 20 70 6f 73 74 20 61 6e 64 20  nd the post and 
4150: 61 20 73 70 61 63 65 2e 0a 09 09 23 0a 09 09 73  a space....#...s
4160: 65 74 20 64 69 66 66 20 5c 0a 09 09 5b 65 78 70  et diff \...[exp
4170: 72 20 5b 43 6f 75 6e 74 43 68 61 72 20 24 7b 66  r [CountChar ${f
4180: 75 6c 6c 70 61 72 74 7d 20 24 7b 70 72 65 7d 5d  ullpart} ${pre}]
4190: 20 2d 20 5b 43 6f 75 6e 74 43 68 61 72 20 24 7b   - [CountChar ${
41a0: 66 75 6c 6c 70 61 72 74 7d 20 24 7b 70 6f 73 74  fullpart} ${post
41b0: 7d 5d 5d 0a 09 09 66 6f 72 20 7b 73 65 74 20 69  }]]...for {set i
41c0: 20 30 7d 20 7b 24 7b 69 7d 20 3c 20 24 7b 64 69   0} {${i} < ${di
41d0: 66 66 7d 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a  ff}} {incr i} {.
41e0: 09 09 09 61 70 70 65 6e 64 20 74 65 78 74 20 24  ...append text $
41f0: 7b 70 6f 73 74 7d 0a 09 09 7d 0a 09 09 61 70 70  {post}...}...app
4200: 65 6e 64 20 74 65 78 74 20 22 20 22 0a 09 09 72  end text " "...r
4210: 65 74 75 72 6e 20 24 7b 74 65 78 74 7d 0a 0a 09  eturn ${text}...
4220: 7d 20 65 6c 73 65 69 66 20 7b 21 5b 72 65 67 65  } elseif {![rege
4230: 78 70 20 2d 2d 20 5e 5c 28 2e 2a 5c 5b 24 7b 70  xp -- ^\(.*\[${p
4240: 72 65 7d 24 7b 73 65 70 7d 5c 5d 5c 29 5c 28 5c  re}${sep}\]\)\(\
4250: 5b 5e 24 7b 70 72 65 7d 24 7b 73 65 70 7d 5c 5d  [^${pre}${sep}\]
4260: 2a 5c 29 24 20 5c 0a 09 09 24 7b 74 65 78 74 7d  *\)$ \...${text}
4270: 20 61 6c 6c 20 6c 65 66 74 20 72 69 67 68 74 5d   all left right]
4280: 0a 09 7d 20 7b 0a 09 09 73 65 74 20 6c 65 66 74  ..} {...set left
4290: 20 7b 7d 0a 09 09 73 65 74 20 72 69 67 68 74 20   {}...set right 
42a0: 24 7b 74 65 78 74 7d 0a 09 7d 0a 0a 09 23 20 54  ${text}..}...# T
42b0: 72 61 63 65 56 61 72 20 6c 65 66 74 0a 09 23 20  raceVar left..# 
42c0: 54 72 61 63 65 56 61 72 20 72 69 67 68 74 0a 0a  TraceVar right..
42d0: 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20 5c  .# puts stderr \
42e0: 6e 6c 65 66 74 3d 7c 24 6c 65 66 74 7c 0a 09 23  nleft=|$left|..#
42f0: 20 70 75 74 73 20 73 74 64 65 72 72 20 5c 6e 72   puts stderr \nr
4300: 69 67 68 74 3d 7c 24 72 69 67 68 74 7c 0a 09 73  ight=|$right|..s
4310: 65 74 20 65 78 61 63 74 5f 6d 61 74 63 68 65 73  et exact_matches
4320: 20 5b 4d 61 74 63 68 65 73 46 72 6f 6d 4c 69 73   [MatchesFromLis
4330: 74 20 24 7b 72 69 67 68 74 7d 20 24 7b 6c 73 74  t ${right} ${lst
4340: 7d 5d 0a 09 23 20 54 4f 44 4f 20 74 68 69 73 20  }]..# TODO this 
4350: 69 73 20 61 77 6b 77 61 72 64 2e 20 54 68 69 6e  is awkward. Thin
4360: 6b 20 6f 66 20 6d 61 6b 69 6e 67 20 69 74 20 62  k of making it b
4370: 65 74 74 65 72 21 0a 09 23 0a 09 69 66 20 7b 31  etter!..#..if {1
4380: 20 3d 3d 20 5b 6c 6c 65 6e 67 74 68 20 24 7b 65   == [llength ${e
4390: 78 61 63 74 5f 6d 61 74 63 68 65 73 7d 5d 20 26  xact_matches}] &
43a0: 26 20 2d 31 20 21 3d 20 5b 6c 73 65 61 72 63 68  & -1 != [lsearch
43b0: 20 24 7b 6c 73 74 7d 20 24 7b 72 69 67 68 74 7d   ${lst} ${right}
43c0: 5d 0a 09 7d 20 7b 0a 09 09 23 73 65 74 20 63 6f  ]..} {...#set co
43d0: 6d 70 6c 65 74 69 6f 6e 20 5b 43 6f 6d 70 6c 65  mpletion [Comple
43e0: 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 72 69 67  teFromList ${rig
43f0: 68 74 7d 20 5b 6c 69 73 74 20 24 7b 73 65 70 7d  ht} [list ${sep}
4400: 20 24 7b 70 6f 73 74 7d 5d 20 31 5d 0a 09 09 72   ${post}] 1]...r
4410: 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 7b 6c 65  eturn [list ${le
4420: 66 74 7d 24 7b 72 69 67 68 74 7d 24 7b 73 65 70  ft}${right}${sep
4430: 7d 20 7b 7d 5d 0a 09 7d 20 65 6c 73 65 20 7b 0a  } {}]..} else {.
4440: 09 09 73 65 74 20 63 6f 6d 70 6c 65 74 69 6f 6e  ..set completion
4450: 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
4460: 73 74 20 24 7b 72 69 67 68 74 7d 20 24 7b 6c 73  st ${right} ${ls
4470: 74 7d 20 22 22 20 31 5d 0a 09 7d 0a 09 23 20 70  t} "" 1]..}..# p
4480: 75 74 73 20 73 74 64 65 72 72 20 5c 6e 63 6f 6d  uts stderr \ncom
4490: 70 6c 65 74 69 6f 6e 3d 7c 24 63 6f 6d 70 6c 65  pletion=|$comple
44a0: 74 69 6f 6e 7c 0a 09 69 66 20 7b 21 5b 73 74 72  tion|..if {![str
44b0: 69 6e 67 20 6c 65 6e 67 74 68 20 5b 6c 69 6e 64  ing length [lind
44c0: 65 78 20 24 63 6f 6d 70 6c 65 74 69 6f 6e 20 30  ex $completion 0
44d0: 5d 5d 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 5b  ]]} {...return [
44e0: 63 6f 6e 63 61 74 20 5b 6c 69 73 74 20 24 7b 6c  concat [list ${l
44f0: 65 66 74 7d 5d 20 5b 6c 72 61 6e 67 65 20 24 63  eft}] [lrange $c
4500: 6f 6d 70 6c 65 74 69 6f 6e 20 31 20 65 6e 64 5d  ompletion 1 end]
4510: 5d 0a 09 7d 20 65 6c 73 65 69 66 20 7b 5b 73 74  ]..} elseif {[st
4520: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b 6c 65  ring length ${le
4530: 66 74 7d 5d 7d 20 7b 0a 09 09 72 65 74 75 72 6e  ft}]} {...return
4540: 20 5b 6c 69 73 74 20 24 7b 6c 65 66 74 7d 5d 24   [list ${left}]$
4550: 7b 63 6f 6d 70 6c 65 74 69 6f 6e 7d 0a 09 7d 20  {completion}..} 
4560: 65 6c 73 65 20 7b 0a 09 09 72 65 74 75 72 6e 20  else {...return 
4570: 24 7b 63 6f 6d 70 6c 65 74 69 6f 6e 7d 0a 09 7d  ${completion}..}
4580: 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70  ..return "".}..p
4590: 72 6f 63 20 46 69 72 73 74 4e 6f 6e 4f 70 74 69  roc FirstNonOpti
45a0: 6f 6e 20 7b 6c 69 6e 65 7d 20 7b 0a 09 73 65 74  on {line} {..set
45b0: 20 65 78 70 72 5f 70 6f 73 20 31 0a 09 66 6f 72   expr_pos 1..for
45c0: 65 61 63 68 20 77 6f 72 64 20 5b 6c 72 61 6e 67  each word [lrang
45d0: 65 20 24 7b 6c 69 6e 65 7d 20 31 20 65 6e 64 5d  e ${line} 1 end]
45e0: 20 7b 3b 20 23 20 30 20 69 73 20 74 68 65 20 63   {; # 0 is the c
45f0: 6f 6d 6d 61 6e 64 20 69 74 73 65 6c 66 0a 09 09  ommand itself...
4600: 69 66 20 7b 22 2d 22 20 21 3d 20 5b 73 74 72 69  if {"-" != [stri
4610: 6e 67 20 69 6e 64 65 78 20 24 7b 77 6f 72 64 7d  ng index ${word}
4620: 20 30 5d 7d 20 7b 0a 09 09 09 62 72 65 61 6b 0a   0]} {....break.
4630: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 69 6e  ..} else {....in
4640: 63 72 20 65 78 70 72 5f 70 6f 73 0a 09 09 7d 0a  cr expr_pos...}.
4650: 09 7d 0a 09 72 65 74 75 72 6e 20 24 7b 65 78 70  .}..return ${exp
4660: 72 5f 70 6f 73 7d 0a 7d 0a 0a 70 72 6f 63 20 52  r_pos}.}..proc R
4670: 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
4680: 20 7b 6c 69 6e 65 20 6f 70 74 73 20 7b 74 65 72   {line opts {ter
4690: 6d 69 6e 61 74 65 20 7b 7d 7d 7d 20 7b 0a 09 69  minate {}}} {..i
46a0: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 7b 74 65  f {[llength ${te
46b0: 72 6d 69 6e 61 74 65 7d 5d 7d 20 7b 0a 09 09 69  rminate}]} {...i
46c0: 66 20 7b 5b 72 65 67 65 78 70 20 2d 2d 20 24 7b  f {[regexp -- ${
46d0: 74 65 72 6d 69 6e 61 74 65 7d 20 24 7b 6c 69 6e  terminate} ${lin
46e0: 65 7d 5d 7d 20 7b 0a 09 09 09 72 65 74 75 72 6e  e}]} {....return
46f0: 20 22 22 0a 09 09 7d 0a 09 7d 0a 09 73 65 74 20   ""...}..}..set 
4700: 6e 65 77 20 22 22 0a 09 66 6f 72 65 61 63 68 20  new ""..foreach 
4710: 77 6f 72 64 20 24 7b 6f 70 74 73 7d 20 7b 0a 09  word ${opts} {..
4720: 09 69 66 20 7b 2d 31 20 3d 3d 20 5b 73 74 72 69  .if {-1 == [stri
4730: 6e 67 20 66 69 72 73 74 20 24 7b 77 6f 72 64 7d  ng first ${word}
4740: 20 24 7b 6c 69 6e 65 7d 5d 7d 20 7b 0a 09 09 09   ${line}]} {....
4750: 6c 61 70 70 65 6e 64 20 6e 65 77 20 24 7b 77 6f  lappend new ${wo
4760: 72 64 7d 0a 09 09 7d 0a 09 7d 0a 0a 09 23 20 63  rd}...}..}...# c
4770: 68 65 63 6b 20 69 66 20 74 68 65 20 6c 61 73 74  heck if the last
4780: 20 77 6f 72 64 20 69 6e 20 74 68 65 20 6c 69 6e   word in the lin
4790: 65 20 69 73 20 61 6e 20 6f 70 74 69 6f 6e 73 0a  e is an options.
47a0: 09 23 20 61 6e 64 20 69 66 20 74 68 69 73 20 77  .# and if this w
47b0: 6f 72 64 20 69 73 20 61 74 20 74 68 65 20 76 65  ord is at the ve
47c0: 72 79 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 69  ry end of the li
47d0: 6e 65 2c 0a 09 23 20 74 68 61 74 20 6d 65 61 6e  ne,..# that mean
47e0: 73 20 6e 6f 20 73 70 61 63 65 20 61 66 74 65 72  s no space after
47f0: 2e 0a 09 23 20 49 66 20 74 68 69 73 20 69 73 20  ...# If this is 
4800: 73 6f 2c 20 74 68 65 20 77 6f 72 64 20 69 73 20  so, the word is 
4810: 73 74 75 66 66 65 64 20 69 6e 74 6f 20 74 68 65  stuffed into the
4820: 20 72 65 73 75 6c 74 2c 0a 09 23 20 73 6f 20 74   result,..# so t
4830: 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 63 6f  hat it can be co
4840: 6d 70 6c 65 74 65 64 20 2d 2d 20 70 72 6f 62 61  mpleted -- proba
4850: 62 6c 79 20 77 69 74 68 20 61 20 73 70 61 63 65  bly with a space
4860: 2e 0a 09 23 0a 09 73 65 74 20 6c 61 73 74 20 5b  ...#..set last [
4870: 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 65  Lindex ${line} e
4880: 6e 64 5d 0a 09 69 66 20 7b 5b 65 78 70 72 20 5b  nd]..if {[expr [
4890: 73 74 72 69 6e 67 20 6c 61 73 74 20 24 7b 6c 61  string last ${la
48a0: 73 74 7d 20 24 7b 6c 69 6e 65 7d 5d 20 2b 20 5b  st} ${line}] + [
48b0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b  string length ${
48c0: 6c 61 73 74 7d 5d 5d 20 3d 3d 20 5c 0a 09 09 5b  last}]] == \...[
48d0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b  string length ${
48e0: 6c 69 6e 65 7d 5d 0a 09 7d 20 7b 0a 09 09 69 66  line}]..} {...if
48f0: 20 7b 2d 31 20 21 3d 20 5b 6c 73 65 61 72 63 68   {-1 != [lsearch
4900: 20 24 7b 6f 70 74 73 7d 20 24 7b 6c 61 73 74 7d   ${opts} ${last}
4910: 5d 7d 20 7b 0a 09 09 09 6c 61 70 70 65 6e 64 20  ]} {....lappend 
4920: 6e 65 77 20 24 7b 6c 61 73 74 7d 0a 09 09 7d 0a  new ${last}...}.
4930: 09 7d 0a 0a 09 72 65 74 75 72 6e 20 5b 73 74 72  .}...return [str
4940: 69 6e 67 20 74 72 69 6d 20 24 7b 6e 65 77 7d 5d  ing trim ${new}]
4950: 0a 7d 0a 0a 70 72 6f 63 20 41 6c 65 72 74 20 7b  .}..proc Alert {
4960: 7d 20 7b 0a 09 3a 3a 74 63 6c 72 65 61 64 6c 69  } {..::tclreadli
4970: 6e 65 3a 3a 72 65 61 64 6c 69 6e 65 20 62 65 6c  ne::readline bel
4980: 6c 0a 7d 0a 0a 23 2a 2a 0a 23 20 67 65 74 20 74  l.}..#**.# get t
4990: 68 65 20 6c 6f 6e 67 65 73 74 20 63 6f 6d 6d 6f  he longest commo
49a0: 6e 20 63 6f 6d 70 6c 65 74 69 6f 6e 0a 23 20 65  n completion.# e
49b0: 2e 67 2e 20 73 74 72 20 3d 3d 20 7b 74 63 6c 5f  .g. str == {tcl_
49c0: 76 65 72 73 69 6f 6e 20 74 63 6c 72 65 61 64 6c  version tclreadl
49d0: 69 6e 65 5f 76 65 72 73 69 6f 6e 20 74 63 6c 72  ine_version tclr
49e0: 65 61 64 6c 69 6e 65 5f 6c 69 62 72 61 72 79 7d  eadline_library}
49f0: 0a 23 20 2d 2d 3e 20 5b 43 6f 6d 70 6c 65 74 65  .# --> [Complete
4a00: 4c 6f 6e 67 65 73 74 20 24 7b 73 74 72 7d 5d 20  Longest ${str}] 
4a10: 3d 3d 20 22 74 63 6c 22 0a 23 0a 70 72 6f 63 20  == "tcl".#.proc 
4a20: 43 6f 6d 70 6c 65 74 65 4c 6f 6e 67 65 73 74 20  CompleteLongest 
4a30: 7b 73 74 72 7d 20 7b 0a 09 23 20 70 75 74 73 20  {str} {..# puts 
4a40: 73 74 64 65 72 72 20 73 74 72 3d 24 73 74 72 0a  stderr str=$str.
4a50: 09 73 65 74 20 6d 61 74 63 68 30 20 5b 6c 69 6e  .set match0 [lin
4a60: 64 65 78 20 24 7b 73 74 72 7d 20 30 5d 0a 09 73  dex ${str} 0]..s
4a70: 65 74 20 6c 65 6e 30 20 5b 73 74 72 69 6e 67 20  et len0 [string 
4a80: 6c 65 6e 67 74 68 20 24 6d 61 74 63 68 30 5d 0a  length $match0].
4a90: 09 73 65 74 20 6e 6f 5f 6d 61 74 63 68 65 73 20  .set no_matches 
4aa0: 5b 6c 6c 65 6e 67 74 68 20 24 7b 73 74 72 7d 5d  [llength ${str}]
4ab0: 0a 09 73 65 74 20 70 61 72 74 20 22 22 0a 09 66  ..set part ""..f
4ac0: 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69  or {set i 0} {$i
4ad0: 20 3c 20 24 6c 65 6e 30 7d 20 7b 69 6e 63 72 20   < $len0} {incr 
4ae0: 69 7d 20 7b 0a 09 09 73 65 74 20 63 68 61 72 20  i} {...set char 
4af0: 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 6d  [string index $m
4b00: 61 74 63 68 30 20 24 69 5d 0a 09 09 66 6f 72 20  atch0 $i]...for 
4b10: 7b 73 65 74 20 6a 20 31 7d 20 7b 24 6a 20 3c 20  {set j 1} {$j < 
4b20: 24 6e 6f 5f 6d 61 74 63 68 65 73 7d 20 7b 69 6e  $no_matches} {in
4b30: 63 72 20 6a 7d 20 7b 0a 09 09 09 69 66 20 7b 24  cr j} {....if {$
4b40: 63 68 61 72 20 21 3d 20 5b 73 74 72 69 6e 67 20  char != [string 
4b50: 69 6e 64 65 78 20 5b 6c 69 6e 64 65 78 20 24 7b  index [lindex ${
4b60: 73 74 72 7d 20 24 6a 5d 20 24 69 5d 7d 20 7b 0a  str} $j] $i]} {.
4b70: 09 09 09 09 62 72 65 61 6b 0a 09 09 09 7d 0a 09  ....break....}..
4b80: 09 7d 0a 09 09 69 66 20 7b 24 6a 20 3c 20 24 6e  .}...if {$j < $n
4b90: 6f 5f 6d 61 74 63 68 65 73 7d 20 7b 0a 09 09 09  o_matches} {....
4ba0: 62 72 65 61 6b 0a 09 09 7d 20 65 6c 73 65 20 7b  break...} else {
4bb0: 0a 09 09 09 61 70 70 65 6e 64 20 70 61 72 74 20  ....append part 
4bc0: 24 63 68 61 72 0a 09 09 7d 0a 09 7d 0a 09 23 20  $char...}..}..# 
4bd0: 70 75 74 73 20 73 74 64 65 72 72 20 70 61 72 74  puts stderr part
4be0: 3d 24 70 61 72 74 0a 09 72 65 74 75 72 6e 20 24  =$part..return $
4bf0: 7b 70 61 72 74 7d 0a 7d 0a 0a 70 72 6f 63 20 53  {part}.}..proc S
4c00: 70 6c 69 74 4c 69 6e 65 20 7b 73 74 61 72 74 20  plitLine {start 
4c10: 6c 69 6e 65 7d 20 7b 0a 09 73 65 74 20 64 65 70  line} {..set dep
4c20: 74 68 20 30 0a 09 23 20 70 75 74 73 20 73 74 64  th 0..# puts std
4c30: 65 72 72 20 53 70 6c 69 74 4c 69 6e 65 0a 09 66  err SplitLine..f
4c40: 6f 72 20 7b 73 65 74 20 69 20 24 73 74 61 72 74  or {set i $start
4c50: 7d 20 7b 24 69 20 3e 3d 20 30 7d 20 7b 69 6e 63  } {$i >= 0} {inc
4c60: 72 20 69 20 2d 31 7d 20 7b 0a 09 09 73 65 74 20  r i -1} {...set 
4c70: 63 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20  c [string index 
4c80: 24 6c 69 6e 65 20 24 69 5d 0a 09 09 69 66 20 7b  $line $i]...if {
4c90: 7b 3b 7d 20 3d 3d 20 24 63 7d 20 7b 0a 09 09 09  {;} == $c} {....
4ca0: 69 6e 63 72 20 69 3b 20 23 20 64 69 73 63 61 72  incr i; # discar
4cb0: 64 20 63 6f 6d 6d 61 6e 64 20 62 72 65 61 6b 20  d command break 
4cc0: 63 68 61 72 61 63 74 65 72 0a 09 09 09 72 65 74  character....ret
4cd0: 75 72 6e 20 5b 6c 69 73 74 20 5b 65 78 70 72 20  urn [list [expr 
4ce0: 24 73 74 61 72 74 20 2d 20 24 69 5d 20 5b 53 74  $start - $i] [St
4cf0: 72 69 6e 67 20 72 61 6e 67 65 20 24 6c 69 6e 65  ring range $line
4d00: 20 24 69 20 65 6e 64 5d 5d 0a 09 09 7d 20 65 6c   $i end]]...} el
4d10: 73 65 69 66 20 7b 7b 5d 7d 20 3d 3d 20 24 63 7d  seif {{]} == $c}
4d20: 20 7b 0a 09 09 09 69 6e 63 72 20 64 65 70 74 68   {....incr depth
4d30: 0a 09 09 7d 20 65 6c 73 65 69 66 20 7b 7b 5b 7d  ...} elseif {{[}
4d40: 20 3d 3d 20 24 63 7d 20 7b 0a 09 09 09 69 6e 63   == $c} {....inc
4d50: 72 20 64 65 70 74 68 20 2d 31 0a 09 09 09 69 66  r depth -1....if
4d60: 20 7b 24 64 65 70 74 68 20 3c 20 30 7d 20 7b 0a   {$depth < 0} {.
4d70: 09 09 09 09 69 6e 63 72 20 69 3b 20 23 20 64 69  ....incr i; # di
4d80: 73 63 61 72 64 20 63 6f 6d 6d 61 6e 64 20 62 72  scard command br
4d90: 65 61 6b 20 63 68 61 72 61 63 74 65 72 0a 09 09  eak character...
4da0: 09 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5b  ..return [list [
4db0: 65 78 70 72 20 24 73 74 61 72 74 20 2d 20 24 69  expr $start - $i
4dc0: 5d 20 5b 53 74 72 69 6e 67 20 72 61 6e 67 65 20  ] [String range 
4dd0: 24 6c 69 6e 65 20 24 69 20 65 6e 64 5d 5d 0a 09  $line $i end]]..
4de0: 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75  ..}...}..}..retu
4df0: 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 49 73  rn "".}..proc Is
4e00: 57 68 69 74 65 20 7b 63 68 61 72 7d 20 7b 0a 09  White {char} {..
4e10: 69 66 20 7b 22 20 22 20 3d 3d 20 24 63 68 61 72  if {" " == $char
4e20: 20 7c 7c 20 22 5c 6e 22 20 3d 3d 20 24 63 68 61   || "\n" == $cha
4e30: 72 20 7c 7c 20 22 5c 74 22 20 3d 3d 20 24 63 68  r || "\t" == $ch
4e40: 61 72 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 31  ar} {...return 1
4e50: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 72 65 74  ..} else {...ret
4e60: 75 72 6e 20 30 0a 09 7d 0a 7d 0a 0a 70 72 6f 63  urn 0..}.}..proc
4e70: 20 50 72 65 76 69 6f 75 73 57 6f 72 64 4f 66 49   PreviousWordOfI
4e80: 6e 63 6f 6d 70 6c 65 74 65 50 6f 73 69 74 69 6f  ncompletePositio
4e90: 6e 20 7b 73 74 61 72 74 20 6c 69 6e 65 7d 20 7b  n {start line} {
4ea0: 0a 09 72 65 74 75 72 6e 20 5b 6c 69 6e 64 65 78  ..return [lindex
4eb0: 20 5b 50 72 6f 70 65 72 4c 69 73 74 20 5b 73 74   [ProperList [st
4ec0: 72 69 6e 67 20 72 61 6e 67 65 20 24 7b 6c 69 6e  ring range ${lin
4ed0: 65 7d 20 30 20 24 7b 73 74 61 72 74 7d 5d 5d 20  e} 0 ${start}]] 
4ee0: 65 6e 64 5d 0a 7d 0a 0a 70 72 6f 63 20 50 72 65  end].}..proc Pre
4ef0: 76 69 6f 75 73 57 6f 72 64 20 7b 73 74 61 72 74  viousWord {start
4f00: 20 6c 69 6e 65 7d 20 7b 0a 09 69 6e 63 72 20 73   line} {..incr s
4f10: 74 61 72 74 20 2d 31 0a 09 73 65 74 20 66 6f 75  tart -1..set fou
4f20: 6e 64 20 30 0a 09 66 6f 72 20 7b 73 65 74 20 69  nd 0..for {set i
4f30: 20 24 73 74 61 72 74 7d 20 7b 24 69 20 3e 20 30   $start} {$i > 0
4f40: 7d 20 7b 69 6e 63 72 20 69 20 2d 31 7d 20 7b 0a  } {incr i -1} {.
4f50: 09 09 73 65 74 20 63 20 5b 73 74 72 69 6e 67 20  ..set c [string 
4f60: 69 6e 64 65 78 20 24 6c 69 6e 65 20 24 69 5d 0a  index $line $i].
4f70: 09 09 69 66 20 7b 24 7b 66 6f 75 6e 64 7d 20 26  ..if {${found} &
4f80: 26 20 5b 49 73 57 68 69 74 65 20 24 63 5d 7d 20  & [IsWhite $c]} 
4f90: 7b 0a 09 09 09 62 72 65 61 6b 0a 09 09 7d 20 65  {....break...} e
4fa0: 6c 73 65 69 66 20 7b 21 24 7b 66 6f 75 6e 64 7d  lseif {!${found}
4fb0: 20 26 26 20 21 5b 49 73 57 68 69 74 65 20 24 63   && ![IsWhite $c
4fc0: 5d 7d 20 7b 0a 09 09 09 73 65 74 20 66 6f 75 6e  ]} {....set foun
4fd0: 64 20 31 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75  d 1...}..}..retu
4fe0: 72 6e 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20  rn [string trim 
4ff0: 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 7b  [string range ${
5000: 6c 69 6e 65 7d 20 24 69 20 24 73 74 61 72 74 5d  line} $i $start]
5010: 5d 0a 7d 0a 0a 70 72 6f 63 20 51 75 6f 74 65 20  ].}..proc Quote 
5020: 7b 76 61 6c 75 65 20 6c 65 66 74 7d 20 7b 0a 09  {value left} {..
5030: 73 65 74 20 72 69 67 68 74 20 5b 52 69 67 68 74  set right [Right
5040: 20 24 7b 6c 65 66 74 7d 5d 0a 09 69 66 20 7b 31   ${left}]..if {1
5050: 20 3c 20 5b 6c 6c 65 6e 67 74 68 20 24 76 61 6c   < [llength $val
5060: 75 65 5d 20 26 26 20 22 22 20 3d 3d 20 24 72 69  ue] && "" == $ri
5070: 67 68 74 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20  ght} {...return 
5080: 5b 6c 69 73 74 20 5c 22 24 7b 76 61 6c 75 65 7d  [list \"${value}
5090: 5c 22 5d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09  \"]..} else {...
50a0: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 7b 6c  return [list ${l
50b0: 65 66 74 7d 24 7b 76 61 6c 75 65 7d 24 7b 72 69  eft}${value}${ri
50c0: 67 68 74 7d 5d 0a 09 7d 0a 7d 0a 0a 23 20 74 68  ght}]..}.}..# th
50d0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 77 6f 20  e following two 
50e0: 63 68 61 6e 6e 65 6c 20 70 72 6f 63 27 73 20 6d  channel proc's m
50f0: 61 6b 65 20 75 73 65 20 6f 66 0a 23 20 74 68 65  ake use of.# the
5100: 20 62 72 61 6e 64 6e 65 77 20 28 53 65 70 20 39   brandnew (Sep 9
5110: 39 29 20 60 66 69 6c 65 20 63 68 61 6e 6e 65 6c  9) `file channel
5120: 73 27 20 63 6f 6d 6d 61 6e 64 0a 23 20 62 75 74  s' command.# but
5130: 20 68 61 76 65 20 73 6f 6d 65 20 66 61 6c 6c 62   have some fallb
5140: 61 63 6b 20 62 65 68 61 76 69 6f 75 72 20 66 6f  ack behaviour fo
5150: 72 20 6f 6c 64 65 72 0a 23 20 74 63 6c 20 76 65  r older.# tcl ve
5160: 72 73 69 6f 6e 2e 0a 23 0a 70 72 6f 63 20 49 6e  rsion..#.proc In
5170: 43 68 61 6e 6e 65 6c 49 64 20 7b 74 65 78 74 20  ChannelId {text 
5180: 7b 73 77 69 74 63 68 65 73 20 22 22 7d 7d 20 7b  {switches ""}} {
5190: 0a 09 69 66 20 5b 63 61 74 63 68 20 7b 73 65 74  ..if [catch {set
51a0: 20 63 68 73 20 5b 66 69 6c 65 20 63 68 61 6e 6e   chs [file chann
51b0: 65 6c 73 5d 7d 5d 20 7b 0a 09 09 73 65 74 20 63  els]}] {...set c
51c0: 68 73 20 7b 73 74 64 69 6e 7d 0a 09 7d 0a 09 73  hs {stdin}..}..s
51d0: 65 74 20 72 65 73 75 6c 74 20 22 22 0a 09 66 6f  et result ""..fo
51e0: 72 65 61 63 68 20 63 68 20 24 63 68 73 20 7b 0a  reach ch $chs {.
51f0: 09 09 69 66 20 7b 21 5b 63 61 74 63 68 20 7b 66  ..if {![catch {f
5200: 69 6c 65 65 76 65 6e 74 20 24 63 68 20 72 65 61  ileevent $ch rea
5210: 64 61 62 6c 65 7d 5d 7d 20 7b 0a 09 09 09 6c 61  dable}]} {....la
5220: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 63 68  ppend result $ch
5230: 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  ...}..}..return 
5240: 5b 43 68 61 6e 6e 65 6c 49 64 20 24 7b 74 65 78  [ChannelId ${tex
5250: 74 7d 20 3c 69 6e 43 68 61 6e 6e 65 6c 3e 20 24  t} <inChannel> $
5260: 72 65 73 75 6c 74 20 24 73 77 69 74 63 68 65 73  result $switches
5270: 5d 0a 7d 0a 0a 70 72 6f 63 20 4f 75 74 43 68 61  ].}..proc OutCha
5280: 6e 6e 65 6c 49 64 20 7b 74 65 78 74 20 7b 73 77  nnelId {text {sw
5290: 69 74 63 68 65 73 20 22 22 7d 7d 20 7b 0a 09 69  itches ""}} {..i
52a0: 66 20 5b 63 61 74 63 68 20 7b 73 65 74 20 63 68  f [catch {set ch
52b0: 73 20 5b 66 69 6c 65 20 63 68 61 6e 6e 65 6c 73  s [file channels
52c0: 5d 7d 5d 20 7b 0a 09 09 73 65 74 20 63 68 73 20  ]}] {...set chs 
52d0: 7b 73 74 64 6f 75 74 20 73 74 64 65 72 72 7d 0a  {stdout stderr}.
52e0: 09 7d 0a 09 73 65 74 20 72 65 73 75 6c 74 20 22  .}..set result "
52f0: 22 0a 09 66 6f 72 65 61 63 68 20 63 68 20 24 63  "..foreach ch $c
5300: 68 73 20 7b 0a 09 09 69 66 20 7b 21 5b 63 61 74  hs {...if {![cat
5310: 63 68 20 7b 66 69 6c 65 65 76 65 6e 74 20 24 63  ch {fileevent $c
5320: 68 20 77 72 69 74 61 62 6c 65 7d 5d 7d 20 7b 0a  h writable}]} {.
5330: 09 09 09 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  ...lappend resul
5340: 74 20 24 63 68 0a 09 09 7d 0a 09 7d 0a 09 72 65  t $ch...}..}..re
5350: 74 75 72 6e 20 5b 43 68 61 6e 6e 65 6c 49 64 20  turn [ChannelId 
5360: 24 7b 74 65 78 74 7d 20 3c 6f 75 74 43 68 61 6e  ${text} <outChan
5370: 6e 65 6c 3e 20 24 72 65 73 75 6c 74 20 24 73 77  nel> $result $sw
5380: 69 74 63 68 65 73 5d 0a 7d 0a 0a 70 72 6f 63 20  itches].}..proc 
5390: 43 68 61 6e 6e 65 6c 49 64 20 7b 74 65 78 74 20  ChannelId {text 
53a0: 7b 64 65 73 63 72 69 70 74 20 3c 63 68 61 6e 6e  {descript <chann
53b0: 65 6c 49 64 3e 7d 20 7b 63 68 73 20 22 22 7d 20  elId>} {chs ""} 
53c0: 7b 73 77 69 74 63 68 65 73 20 22 22 7d 7d 20 7b  {switches ""}} {
53d0: 0a 09 69 66 20 7b 22 22 20 3d 3d 20 24 7b 63 68  ..if {"" == ${ch
53e0: 73 7d 7d 20 7b 0a 09 09 23 20 74 68 65 20 60 66  s}} {...# the `f
53f0: 69 6c 65 20 63 68 61 6e 6e 65 6c 73 27 20 63 6f  ile channels' co
5400: 6d 6d 61 6e 64 20 69 73 20 70 72 65 73 65 6e 74  mmand is present
5410: 0a 09 09 23 20 6f 6e 6c 79 20 69 6e 20 70 72 65  ...# only in pre
5420: 74 74 79 20 6e 65 77 20 76 65 72 73 69 6f 6e 73  tty new versions
5430: 2e 0a 09 09 23 0a 09 09 69 66 20 5b 63 61 74 63  ....#...if [catc
5440: 68 20 7b 73 65 74 20 63 68 73 20 5b 66 69 6c 65  h {set chs [file
5450: 20 63 68 61 6e 6e 65 6c 73 5d 7d 5d 20 7b 0a 09   channels]}] {..
5460: 09 09 73 65 74 20 63 68 73 20 7b 73 74 64 69 6e  ..set chs {stdin
5470: 20 73 74 64 6f 75 74 20 73 74 64 65 72 72 7d 0a   stdout stderr}.
5480: 09 09 7d 0a 09 7d 0a 09 69 66 20 7b 5b 6c 6c 65  ..}..}..if {[lle
5490: 6e 67 74 68 20 5b 73 65 74 20 63 68 61 6e 6e 65  ngth [set channe
54a0: 6c 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24  l [TryFromList $
54b0: 7b 74 65 78 74 7d 20 22 24 7b 63 68 73 7d 20 24  {text} "${chs} $
54c0: 7b 73 77 69 74 63 68 65 73 7d 22 5d 5d 5d 7d 20  {switches}"]]]} 
54d0: 7b 0a 09 09 72 65 74 75 72 6e 20 24 7b 63 68 61  {...return ${cha
54e0: 6e 6e 65 6c 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a  nnel}..} else {.
54f0: 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  ..return [Displa
5500: 79 48 69 6e 74 73 20 5b 73 74 72 69 6e 67 20 74  yHints [string t
5510: 72 69 6d 20 22 24 7b 64 65 73 63 72 69 70 74 7d  rim "${descript}
5520: 20 24 7b 73 77 69 74 63 68 65 73 7d 22 5d 5d 0a   ${switches}"]].
5530: 09 7d 0a 7d 0a 0a 70 72 6f 63 20 51 75 6f 74 65  .}.}..proc Quote
5540: 51 75 6f 74 65 73 20 7b 6c 69 6e 65 7d 20 7b 0a  Quotes {line} {.
5550: 09 72 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20  .regsub -all -- 
5560: 5c 22 20 24 6c 69 6e 65 20 7b 5c 22 7d 20 6c 69  \" $line {\"} li
5570: 6e 65 0a 09 72 65 67 73 75 62 20 2d 61 6c 6c 20  ne..regsub -all 
5580: 2d 2d 20 5c 7b 20 24 6c 69 6e 65 20 7b 5c 7b 7d  -- \{ $line {\{}
5590: 20 6c 69 6e 65 3b 20 23 20 5c 7d 5c 7d 20 28 6b   line; # \}\} (k
55a0: 65 65 70 20 74 68 65 20 65 64 69 74 6f 72 20 68  eep the editor h
55b0: 61 70 70 79 29 0a 09 72 65 74 75 72 6e 20 24 6c  appy)..return $l
55c0: 69 6e 65 0a 7d 0a 0a 23 2a 2a 0a 23 20 67 65 74  ine.}..#**.# get
55d0: 20 74 68 65 20 77 6f 72 64 20 70 6f 73 69 74 69   the word positi
55e0: 6f 6e 2e 0a 23 20 40 72 65 74 75 72 6e 20 74 68  on..# @return th
55f0: 65 20 77 6f 72 64 20 70 6f 73 69 74 69 6f 6e 0a  e word position.
5600: 23 20 40 6e 6f 74 65 20 77 69 6c 6c 20 72 65 74  # @note will ret
5610: 75 72 6e 65 64 20 6d 6f 64 69 66 69 65 64 20 76  urned modified v
5620: 61 6c 75 65 73 2e 0a 23 20 40 73 61 20 45 76 65  alues..# @sa Eve
5630: 6e 74 75 61 6c 6c 79 45 76 61 6c 75 61 74 65 46  ntuallyEvaluateF
5640: 69 72 73 74 0a 23 20 40 64 61 74 65 20 53 65 70  irst.# @date Sep
5650: 2d 30 36 2d 31 39 39 39 0a 23 0a 23 20 25 20 70  -06-1999.#.# % p
5660: 3c 54 41 42 3e 0a 23 20 25 20 62 6c 61 20 70 75  <TAB>.# % bla pu
5670: 74 3c 54 41 42 3e 20 24 62 0a 23 20 25 20 70 75  t<TAB> $b.# % pu
5680: 74 3c 54 41 42 3e 20 24 62 0a 23 20 70 61 72 74  t<TAB> $b.# part
5690: 20 20 3d 3d 20 70 75 74 0a 23 20 73 74 61 72 74    == put.# start
56a0: 20 3d 3d 20 30 0a 23 20 65 6e 64 20 20 20 3d 3d   == 0.# end   ==
56b0: 20 33 0a 23 20 6c 69 6e 65 20 20 3d 3d 20 22 70   3.# line  == "p
56c0: 75 74 20 24 62 22 0a 23 20 5b 50 61 72 74 50 6f  ut $b".# [PartPo
56d0: 73 69 74 69 6f 6e 5d 20 73 68 6f 75 6c 64 20 72  sition] should r
56e0: 65 74 75 72 6e 20 30 0a 23 0a 70 72 6f 63 20 50  eturn 0.#.proc P
56f0: 61 72 74 50 6f 73 69 74 69 6f 6e 20 7b 70 61 72  artPosition {par
5700: 74 54 20 73 74 61 72 74 54 20 65 6e 64 54 20 6c  tT startT endT l
5710: 69 6e 65 54 7d 20 7b 0a 0a 09 75 70 76 61 72 20  ineT} {...upvar 
5720: 24 70 61 72 74 54 20 70 61 72 74 20 24 73 74 61  $partT part $sta
5730: 72 74 54 20 73 74 61 72 74 20 24 65 6e 64 54 20  rtT start $endT 
5740: 65 6e 64 20 24 6c 69 6e 65 54 20 6c 69 6e 65 0a  end $lineT line.
5750: 09 45 76 65 6e 74 75 61 6c 6c 79 45 76 61 6c 75  .EventuallyEvalu
5760: 61 74 65 46 69 72 73 74 20 70 61 72 74 20 73 74  ateFirst part st
5770: 61 72 74 20 65 6e 64 20 6c 69 6e 65 0a 09 72 65  art end line..re
5780: 74 75 72 6e 20 5b 4c 6c 65 6e 67 74 68 20 5b 73  turn [Llength [s
5790: 74 72 69 6e 67 20 72 61 6e 67 65 20 24 6c 69 6e  tring range $lin
57a0: 65 20 30 20 5b 65 78 70 72 20 24 73 74 61 72 74  e 0 [expr $start
57b0: 20 2d 20 31 5d 5d 5d 0a 0a 23 20 0a 23 20 20 20   - 1]]]..# .#   
57c0: 20 20 73 65 74 20 6c 6f 63 61 6c 5f 73 74 61 72    set local_star
57d0: 74 20 5b 65 78 70 72 20 24 73 74 61 72 74 20 2d  t [expr $start -
57e0: 20 31 5d 0a 23 20 20 20 20 20 73 65 74 20 6c 6f   1].#     set lo
57f0: 63 61 6c 5f 73 74 61 72 74 5f 63 68 72 20 5b 73  cal_start_chr [s
5800: 74 72 69 6e 67 20 69 6e 64 65 78 20 24 6c 69 6e  tring index $lin
5810: 65 20 24 6c 6f 63 61 6c 5f 73 74 61 72 74 5d 0a  e $local_start].
5820: 23 20 20 20 20 20 69 66 20 7b 22 5c 22 22 20 3d  #     if {"\"" =
5830: 3d 20 24 6c 6f 63 61 6c 5f 73 74 61 72 74 5f 63  = $local_start_c
5840: 68 72 20 7c 7c 20 22 5c 7b 22 20 3d 3d 20 24 6c  hr || "\{" == $l
5850: 6f 63 61 6c 5f 73 74 61 72 74 5f 63 68 72 7d 20  ocal_start_chr} 
5860: 7b 0a 23 20 20 20 20 20 20 20 20 20 69 6e 63 72  {.#         incr
5870: 20 6c 6f 63 61 6c 5f 73 74 61 72 74 20 2d 31 0a   local_start -1.
5880: 23 20 20 20 20 20 7d 0a 23 20 0a 23 20 20 20 20  #     }.# .#    
5890: 20 73 65 74 20 70 72 65 5f 74 65 78 74 20 5b 51   set pre_text [Q
58a0: 75 6f 74 65 51 75 6f 74 65 73 20 5b 73 74 72 69  uoteQuotes [stri
58b0: 6e 67 20 72 61 6e 67 65 20 24 6c 69 6e 65 20 30  ng range $line 0
58c0: 20 24 6c 6f 63 61 6c 5f 73 74 61 72 74 5d 5d 0a   $local_start]].
58d0: 23 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 6c  #     return [ll
58e0: 65 6e 67 74 68 20 24 70 72 65 5f 74 65 78 74 5d  ength $pre_text]
58f0: 0a 23 20 0a 7d 0a 0a 70 72 6f 63 20 52 69 67 68  .# .}..proc Righ
5900: 74 20 7b 6c 65 66 74 7d 20 7b 0a 09 23 20 70 75  t {left} {..# pu
5910: 74 73 20 6c 65 66 74 3d 24 6c 65 66 74 0a 09 69  ts left=$left..i
5920: 66 20 7b 22 5c 22 22 20 3d 3d 20 24 6c 65 66 74  f {"\"" == $left
5930: 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 22 5c 22  } {...return "\"
5940: 22 0a 09 7d 20 65 6c 73 65 69 66 20 7b 22 5c 5c  "..} elseif {"\\
5950: 5c 22 22 20 3d 3d 20 24 6c 65 66 74 7d 20 7b 0a  \"" == $left} {.
5960: 09 09 72 65 74 75 72 6e 20 22 5c 5c 5c 22 22 0a  ..return "\\\"".
5970: 09 7d 20 65 6c 73 65 69 66 20 7b 22 5c 7b 22 20  .} elseif {"\{" 
5980: 3d 3d 20 24 6c 65 66 74 7d 20 7b 0a 09 09 72 65  == $left} {...re
5990: 74 75 72 6e 20 22 5c 7d 22 0a 09 7d 20 65 6c 73  turn "\}"..} els
59a0: 65 69 66 20 7b 22 5c 5c 5c 7b 22 20 3d 3d 20 24  eif {"\\\{" == $
59b0: 6c 65 66 74 7d 20 7b 0a 09 09 72 65 74 75 72 6e  left} {...return
59c0: 20 22 5c 5c 5c 7d 22 0a 09 7d 0a 09 72 65 74 75   "\\\}"..}..retu
59d0: 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 47 65  rn "".}..proc Ge
59e0: 74 51 75 6f 74 65 64 50 72 65 66 69 78 20 7b 74  tQuotedPrefix {t
59f0: 65 78 74 7d 20 7b 0a 09 73 65 74 20 6e 75 6c 6c  ext} {..set null
5a00: 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24   [string index $
5a10: 74 65 78 74 20 30 5d 0a 09 69 66 20 7b 22 5c 22  text 0]..if {"\"
5a20: 22 20 3d 3d 20 24 6e 75 6c 6c 20 7c 7c 20 22 5c  " == $null || "\
5a30: 7b 22 20 3d 3d 20 24 6e 75 6c 6c 7d 20 7b 0a 09  {" == $null} {..
5a40: 09 72 65 74 75 72 6e 20 5c 5c 24 6e 75 6c 6c 0a  .return \\$null.
5a50: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 72 65 74 75  .} else {...retu
5a60: 72 6e 20 7b 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63  rn {}..}.}..proc
5a70: 20 43 6f 75 6e 74 43 68 61 72 20 7b 6c 69 6e 65   CountChar {line
5a80: 20 63 68 61 72 7d 20 7b 0a 09 23 20 70 75 74 73   char} {..# puts
5a90: 20 73 74 64 65 72 72 20 63 68 61 72 3d 7c 24 63   stderr char=|$c
5aa0: 68 61 72 7c 0a 09 73 65 74 20 66 6f 75 6e 64 20  har|..set found 
5ab0: 30 0a 09 73 65 74 20 70 6f 73 20 30 0a 09 77 68  0..set pos 0..wh
5ac0: 69 6c 65 20 7b 2d 31 20 21 3d 20 5b 73 65 74 20  ile {-1 != [set 
5ad0: 70 6f 73 20 5b 73 74 72 69 6e 67 20 66 69 72 73  pos [string firs
5ae0: 74 20 24 63 68 61 72 20 24 6c 69 6e 65 20 24 70  t $char $line $p
5af0: 6f 73 5d 5d 7d 20 7b 0a 09 09 69 6e 63 72 20 70  os]]} {...incr p
5b00: 6f 73 0a 09 09 69 6e 63 72 20 66 6f 75 6e 64 0a  os...incr found.
5b10: 09 7d 0a 09 72 65 74 75 72 6e 20 24 66 6f 75 6e  .}..return $foun
5b20: 64 0a 7d 0a 0a 23 2a 2a 0a 23 20 6d 61 6b 65 20  d.}..#**.# make 
5b30: 61 20 70 72 6f 70 65 72 20 74 63 6c 20 6c 69 73  a proper tcl lis
5b40: 74 20 66 72 6f 6d 20 61 6e 20 69 63 6f 6d 70 6c  t from an icompl
5b50: 65 74 65 0a 23 20 73 74 72 69 6e 67 2c 20 74 68  ete.# string, th
5b60: 61 74 20 69 73 3a 20 72 65 6d 6f 76 65 20 74 68  at is: remove th
5b70: 65 20 6a 75 6e 6b 2e 20 54 68 69 73 20 69 73 0a  e junk. This is.
5b80: 23 20 63 6f 6d 70 6c 65 6d 65 6e 74 61 72 79 20  # complementary 
5b90: 74 6f 20 60 49 6e 63 6f 6d 70 6c 65 74 65 4c 69  to `IncompleteLi
5ba0: 73 74 52 65 6d 61 69 6e 64 65 72 27 2e 0a 23 20  stRemainder'..# 
5bb0: 65 2e 67 2e 3a 0a 23 20 20 20 20 20 20 20 66 6f  e.g.:.#       fo
5bc0: 72 20 7b 73 65 74 20 69 20 31 7d 20 22 0a 23 20  r {set i 1} ".# 
5bd0: 20 2d 2d 3e 20 20 66 6f 72 20 7b 73 65 74 20 69   -->  for {set i
5be0: 20 31 7d 0a 23 0a 70 72 6f 63 20 50 72 6f 70 65   1}.#.proc Prope
5bf0: 72 4c 69 73 74 20 7b 6c 69 6e 65 7d 20 7b 0a 09  rList {line} {..
5c00: 73 65 74 20 6c 61 73 74 20 5b 65 78 70 72 20 5b  set last [expr [
5c10: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6c  string length $l
5c20: 69 6e 65 5d 20 2d 20 31 5d 0a 09 66 6f 72 20 7b  ine] - 1]..for {
5c30: 73 65 74 20 69 20 24 6c 61 73 74 7d 20 7b 24 69  set i $last} {$i
5c40: 20 3e 3d 20 30 7d 20 7b 69 6e 63 72 20 69 20 2d   >= 0} {incr i -
5c50: 31 7d 20 7b 0a 09 09 69 66 20 7b 21 5b 63 61 74  1} {...if {![cat
5c60: 63 68 20 7b 6c 6c 65 6e 67 74 68 20 5b 73 74 72  ch {llength [str
5c70: 69 6e 67 20 72 61 6e 67 65 20 24 6c 69 6e 65 20  ing range $line 
5c80: 30 20 24 69 5d 7d 5d 7d 20 7b 0a 09 09 09 62 72  0 $i]}]} {....br
5c90: 65 61 6b 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75  eak...}..}..retu
5ca0: 72 6e 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65  rn [string range
5cb0: 20 24 6c 69 6e 65 20 30 20 24 69 5d 0a 7d 0a 0a   $line 0 $i].}..
5cc0: 23 2a 2a 0a 23 20 72 65 74 75 72 6e 20 74 68 65  #**.# return the
5cd0: 20 6c 61 73 74 20 70 61 72 74 20 6f 66 20 61 20   last part of a 
5ce0: 6c 69 6e 65 20 77 68 69 63 68 0a 23 20 70 72 65  line which.# pre
5cf0: 76 65 6e 74 73 20 74 68 65 20 6c 69 6e 65 20 66  vents the line f
5d00: 72 6f 6d 20 62 65 65 69 6e 67 20 61 20 6c 69 73  rom beeing a lis
5d10: 74 2e 0a 23 20 54 68 69 73 20 69 73 20 63 6f 6d  t..# This is com
5d20: 70 6c 65 6d 65 6e 74 61 72 79 20 74 6f 20 60 50  plementary to `P
5d30: 72 6f 70 65 72 4c 69 73 74 27 2e 0a 23 0a 70 72  roperList'..#.pr
5d40: 6f 63 20 49 6e 63 6f 6d 70 6c 65 74 65 4c 69 73  oc IncompleteLis
5d50: 74 52 65 6d 61 69 6e 64 65 72 20 7b 6c 69 6e 65  tRemainder {line
5d60: 7d 20 7b 0a 09 73 65 74 20 6c 61 73 74 20 5b 65  } {..set last [e
5d70: 78 70 72 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67  xpr [string leng
5d80: 74 68 20 24 6c 69 6e 65 5d 20 2d 20 31 5d 0a 09  th $line] - 1]..
5d90: 66 6f 72 20 7b 73 65 74 20 69 20 24 6c 61 73 74  for {set i $last
5da0: 7d 20 7b 24 69 20 3e 3d 20 30 7d 20 7b 69 6e 63  } {$i >= 0} {inc
5db0: 72 20 69 20 2d 31 7d 20 7b 0a 09 09 69 66 20 7b  r i -1} {...if {
5dc0: 21 5b 63 61 74 63 68 20 7b 6c 6c 65 6e 67 74 68  ![catch {llength
5dd0: 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24   [string range $
5de0: 6c 69 6e 65 20 30 20 24 69 5d 7d 5d 7d 20 7b 0a  line 0 $i]}]} {.
5df0: 09 09 09 62 72 65 61 6b 0a 09 09 7d 0a 09 7d 0a  ...break...}..}.
5e00: 09 69 6e 63 72 20 69 0a 09 72 65 74 75 72 6e 20  .incr i..return 
5e10: 5b 53 74 72 69 6e 67 20 72 61 6e 67 65 20 24 6c  [String range $l
5e20: 69 6e 65 20 24 69 20 65 6e 64 5d 0a 7d 0a 0a 23  ine $i end].}..#
5e30: 2a 2a 0a 23 20 73 61 76 65 20 60 6c 69 6e 64 65  **.# save `linde
5e40: 78 27 2e 20 77 6f 72 6b 73 20 61 6c 73 6f 20 66  x'. works also f
5e50: 6f 72 20 6e 6f 6e 2d 63 6f 6d 70 6c 65 74 65 20  or non-complete 
5e60: 6c 69 6e 65 73 0a 23 20 77 69 74 68 20 6f 70 65  lines.# with ope
5e70: 6e 69 6e 67 20 70 61 72 65 6e 74 68 65 73 65 73  ning parentheses
5e80: 20 6f 72 20 71 75 6f 74 65 73 2e 0a 23 20 75 73   or quotes..# us
5e90: 61 67 65 20 61 73 20 60 6c 69 6e 64 65 78 27 2e  age as `lindex'.
5ea0: 0a 23 20 45 76 65 6e 74 75 61 6c 6c 79 20 72 65  .# Eventually re
5eb0: 74 75 72 6e 73 20 74 68 65 20 52 65 73 74 20 6f  turns the Rest o
5ec0: 66 20 61 6e 20 69 6e 63 6f 6d 70 6c 65 74 65 20  f an incomplete 
5ed0: 6c 69 6e 65 2c 0a 23 20 69 66 20 74 68 65 20 69  line,.# if the i
5ee0: 6e 64 65 78 20 69 73 20 60 65 6e 64 27 20 6f 72  ndex is `end' or
5ef0: 20 3d 3d 20 5b 4c 6c 65 6e 67 74 68 20 24 6c 69   == [Llength $li
5f00: 6e 65 5d 2e 0a 23 0a 70 72 6f 63 20 4c 69 6e 64  ne]..#.proc Lind
5f10: 65 78 20 7b 6c 69 6e 65 20 70 6f 73 7d 20 7b 0a  ex {line pos} {.
5f20: 09 69 66 20 7b 5b 63 61 74 63 68 20 5b 6c 69 73  .if {[catch [lis
5f30: 74 20 73 65 74 20 73 75 62 20 5b 6c 69 6e 64 65  t set sub [linde
5f40: 78 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d  x ${line} ${pos}
5f50: 5d 5d 5d 7d 20 7b 0a 09 09 69 66 20 7b 22 65 6e  ]]]} {...if {"en
5f60: 64 22 20 3d 3d 20 24 7b 70 6f 73 7d 20 7c 7c 20  d" == ${pos} || 
5f70: 5b 4c 6c 65 6e 67 74 68 20 24 7b 6c 69 6e 65 7d  [Llength ${line}
5f80: 5d 20 3d 3d 20 24 7b 70 6f 73 7d 7d 20 7b 0a 09  ] == ${pos}} {..
5f90: 09 09 72 65 74 75 72 6e 20 5b 49 6e 63 6f 6d 70  ..return [Incomp
5fa0: 6c 65 74 65 4c 69 73 74 52 65 6d 61 69 6e 64 65  leteListRemainde
5fb0: 72 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09 7d 0a 09  r ${line}]...}..
5fc0: 09 73 65 74 20 6c 69 6e 65 20 5b 50 72 6f 70 65  .set line [Prope
5fd0: 72 4c 69 73 74 20 24 7b 6c 69 6e 65 7d 5d 0a 09  rList ${line}]..
5fe0: 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20 5c  .# puts stderr \
5ff0: 6e 70 72 6f 70 65 72 5f 6c 69 6e 65 3d 7c 24 70  nproper_line=|$p
6000: 72 6f 70 65 72 5f 6c 69 6e 65 7c 0a 09 09 69 66  roper_line|...if
6010: 20 7b 5b 63 61 74 63 68 20 5b 6c 69 73 74 20 73   {[catch [list s
6020: 65 74 20 73 75 62 20 5b 6c 69 6e 64 65 78 20 24  et sub [lindex $
6030: 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 5d 5d 5d  {line} ${pos}]]]
6040: 7d 20 7b 20 72 65 74 75 72 6e 20 7b 7d 20 7d 0a  } { return {} }.
6050: 09 7d 0a 09 72 65 74 75 72 6e 20 24 7b 73 75 62  .}..return ${sub
6060: 7d 0a 7d 0a 0a 23 2a 2a 0a 23 20 73 61 76 65 20  }.}..#**.# save 
6070: 60 6c 6c 65 6e 67 74 68 27 20 28 73 65 65 20 61  `llength' (see a
6080: 62 6f 76 65 29 2e 0a 23 0a 70 72 6f 63 20 4c 6c  bove)..#.proc Ll
6090: 65 6e 67 74 68 20 7b 6c 69 6e 65 7d 20 7b 0a 09  ength {line} {..
60a0: 69 66 20 7b 5b 63 61 74 63 68 20 5b 6c 69 73 74  if {[catch [list
60b0: 20 73 65 74 20 6c 65 6e 20 5b 6c 6c 65 6e 67 74   set len [llengt
60c0: 68 20 24 7b 6c 69 6e 65 7d 5d 5d 5d 7d 20 7b 0a  h ${line}]]]} {.
60d0: 09 09 73 65 74 20 6c 69 6e 65 20 5b 50 72 6f 70  ..set line [Prop
60e0: 65 72 4c 69 73 74 20 24 7b 6c 69 6e 65 7d 5d 0a  erList ${line}].
60f0: 09 09 69 66 20 7b 5b 63 61 74 63 68 20 5b 6c 69  ..if {[catch [li
6100: 73 74 20 73 65 74 20 6c 65 6e 20 5b 6c 6c 65 6e  st set len [llen
6110: 67 74 68 20 24 7b 6c 69 6e 65 7d 5d 5d 5d 7d 20  gth ${line}]]]} 
6120: 7b 20 72 65 74 75 72 6e 20 7b 7d 20 7d 0a 09 7d  { return {} }..}
6130: 0a 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20  ..# puts stderr 
6140: 5c 6e 6c 69 6e 65 3d 24 6c 69 6e 65 0a 09 72 65  \nline=$line..re
6150: 74 75 72 6e 20 24 7b 6c 65 6e 7d 0a 7d 0a 0a 23  turn ${len}.}..#
6160: 2a 2a 0a 23 20 73 61 76 65 20 60 6c 72 61 6e 67  **.# save `lrang
6170: 65 27 20 28 73 65 65 20 61 62 6f 76 65 29 2e 0a  e' (see above)..
6180: 23 0a 70 72 6f 63 20 4c 72 61 6e 67 65 20 7b 6c  #.proc Lrange {l
6190: 69 6e 65 20 66 69 72 73 74 20 6c 61 73 74 7d 20  ine first last} 
61a0: 7b 0a 09 69 66 20 7b 5b 63 61 74 63 68 20 5b 6c  {..if {[catch [l
61b0: 69 73 74 20 73 65 74 20 72 61 6e 67 65 20 5b 6c  ist set range [l
61c0: 72 61 6e 67 65 20 24 7b 6c 69 6e 65 7d 20 24 7b  range ${line} ${
61d0: 66 69 72 73 74 7d 20 24 7b 6c 61 73 74 7d 5d 5d  first} ${last}]]
61e0: 5d 7d 20 7b 0a 09 09 73 65 74 20 72 65 73 74 20  ]} {...set rest 
61f0: 5b 49 6e 63 6f 6d 70 6c 65 74 65 4c 69 73 74 52  [IncompleteListR
6200: 65 6d 61 69 6e 64 65 72 20 24 7b 6c 69 6e 65 7d  emainder ${line}
6210: 5d 0a 09 09 73 65 74 20 70 72 6f 70 65 72 20 5b  ]...set proper [
6220: 50 72 6f 70 65 72 4c 69 73 74 20 24 7b 6c 69 6e  ProperList ${lin
6230: 65 7d 5d 0a 09 09 69 66 20 7b 5b 63 61 74 63 68  e}]...if {[catch
6240: 20 5b 6c 69 73 74 20 73 65 74 20 72 61 6e 67 65   [list set range
6250: 20 5b 6c 69 6e 64 65 78 20 24 7b 70 72 6f 70 65   [lindex ${prope
6260: 72 7d 20 24 7b 66 69 72 73 74 7d 20 24 7b 6c 61  r} ${first} ${la
6270: 73 74 7d 5d 5d 5d 7d 20 7b 0a 09 09 09 72 65 74  st}]]]} {....ret
6280: 75 72 6e 20 7b 7d 0a 09 09 7d 0a 09 09 69 66 20  urn {}...}...if 
6290: 7b 22 65 6e 64 22 20 3d 3d 20 24 7b 6c 61 73 74  {"end" == ${last
62a0: 7d 20 7c 7c 20 5b 4c 6c 65 6e 67 74 68 20 24 7b  } || [Llength ${
62b0: 6c 69 6e 65 7d 5d 20 3d 3d 20 24 7b 6c 61 73 74  line}] == ${last
62c0: 7d 7d 20 7b 0a 09 09 09 61 70 70 65 6e 64 20 73  }} {....append s
62d0: 75 62 20 22 20 24 7b 72 65 73 74 7d 22 0a 09 09  ub " ${rest}"...
62e0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 7b 72  }..}..return ${r
62f0: 61 6e 67 65 7d 0a 7d 0a 0a 23 2a 2a 0a 23 20 4c  ange}.}..#**.# L
6300: 75 6e 69 71 75 65 20 2d 2d 20 72 65 6d 6f 76 65  unique -- remove
6310: 20 64 75 70 6c 69 63 61 74 65 20 65 6e 74 72 69   duplicate entri
6320: 65 73 20 66 72 6f 6d 20 61 20 73 6f 72 74 65 64  es from a sorted
6330: 20 6c 69 73 74 0a 23 20 40 70 61 72 61 6d 20 20   list.# @param  
6340: 20 6c 69 73 74 0a 23 20 40 72 65 74 75 72 6e 20   list.# @return 
6350: 20 75 6e 69 71 75 65 20 6c 69 73 74 0a 23 20 40   unique list.# @
6360: 61 75 74 68 6f 72 20 20 4a 6f 68 61 6e 6e 65 73  author  Johannes
6370: 20 5a 65 6c 6c 6e 65 72 0a 23 20 40 64 61 74 65   Zellner.# @date
6380: 20 20 20 20 53 65 70 2d 31 39 2d 31 39 39 39 0a      Sep-19-1999.
6390: 23 0a 70 72 6f 63 20 4c 75 6e 69 71 75 65 20 6c  #.proc Lunique l
63a0: 73 74 20 7b 0a 09 73 65 74 20 75 6e 69 71 75 65  st {..set unique
63b0: 20 22 22 0a 09 66 6f 72 65 61 63 68 20 65 6c 65   ""..foreach ele
63c0: 6d 65 6e 74 20 24 7b 6c 73 74 7d 20 7b 0a 09 09  ment ${lst} {...
63d0: 69 66 20 7b 24 7b 65 6c 65 6d 65 6e 74 7d 20 21  if {${element} !
63e0: 3d 20 5b 6c 69 6e 64 65 78 20 24 7b 75 6e 69 71  = [lindex ${uniq
63f0: 75 65 7d 20 65 6e 64 5d 7d 20 7b 0a 09 09 09 6c  ue} end]} {....l
6400: 61 70 70 65 6e 64 20 75 6e 69 71 75 65 20 24 7b  append unique ${
6410: 65 6c 65 6d 65 6e 74 7d 0a 09 09 7d 0a 09 7d 0a  element}...}..}.
6420: 09 72 65 74 75 72 6e 20 24 7b 75 6e 69 71 75 65  .return ${unique
6430: 7d 0a 7d 0a 0a 23 2a 2a 0a 23 20 73 74 72 69 6e  }.}..#**.# strin
6440: 67 20 66 75 6e 63 74 69 6f 6e 2c 20 77 68 69 63  g function, whic
6450: 68 20 77 6f 72 6b 73 20 61 6c 73 6f 20 66 6f 72  h works also for
6460: 20 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 0a   older versions.
6470: 23 20 6f 66 20 74 63 6c 2c 20 77 68 69 63 68 20  # of tcl, which 
6480: 64 6f 6e 27 74 20 68 61 76 65 20 74 68 65 20 60  don't have the `
6490: 65 6e 64 27 20 69 6e 64 65 78 2e 0a 23 20 49 20  end' index..# I 
64a0: 74 72 69 65 64 20 61 6c 73 6f 20 64 65 66 69 6e  tried also defin
64b0: 69 6e 67 20 60 73 74 72 69 6e 67 27 20 61 6e 64  ing `string' and
64c0: 20 74 68 75 73 20 6f 76 65 72 72 69 64 69 6e 67   thus overriding
64d0: 0a 23 20 74 68 65 20 62 75 69 6c 74 69 6e 20 60  .# the builtin `
64e0: 73 74 72 69 6e 67 27 20 77 68 69 63 68 20 77 6f  string' which wo
64f0: 72 6b 65 64 2c 20 62 75 74 20 73 6c 6f 77 65 64  rked, but slowed
6500: 20 64 6f 77 6e 0a 23 20 74 68 69 6e 67 73 20 63   down.# things c
6510: 6f 6e 73 69 64 65 72 61 62 6c 79 2e 20 53 6f 20  onsiderably. So 
6520: 49 20 64 65 63 69 64 65 64 20 74 6f 20 63 61 6c  I decided to cal
6530: 6c 20 60 53 74 72 69 6e 67 27 0a 23 20 6f 6e 6c  l `String'.# onl
6540: 79 20 69 66 20 49 20 72 65 61 6c 6c 79 20 6e 65  y if I really ne
6550: 65 64 20 74 68 65 20 60 65 6e 64 27 20 69 6e 64  ed the `end' ind
6560: 65 78 2e 0a 23 0a 70 72 6f 63 20 53 74 72 69 6e  ex..#.proc Strin
6570: 67 20 61 72 67 73 20 7b 0a 09 69 66 20 7b 5b 69  g args {..if {[i
6580: 6e 66 6f 20 74 63 6c 76 65 72 73 69 6f 6e 5d 20  nfo tclversion] 
6590: 3c 20 38 2e 32 7d 20 7b 0a 09 09 73 77 69 74 63  < 8.2} {...switc
65a0: 68 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 20  h [lindex $args 
65b0: 31 5d 20 7b 0a 09 09 09 72 61 6e 67 65 20 2d 0a  1] {....range -.
65c0: 09 09 09 69 6e 64 65 78 20 7b 0a 09 09 09 09 69  ...index {.....i
65d0: 66 20 7b 22 65 6e 64 22 20 3d 3d 20 5b 6c 69 6e  f {"end" == [lin
65e0: 64 65 78 20 24 61 72 67 73 20 65 6e 64 5d 7d 20  dex $args end]} 
65f0: 7b 0a 09 09 09 09 09 73 65 74 20 73 74 72 20 5b  {......set str [
6600: 6c 69 6e 64 65 78 20 24 61 72 67 73 20 32 5d 0a  lindex $args 2].
6610: 09 09 09 09 09 6c 72 65 70 6c 61 63 65 20 61 72  .....lreplace ar
6620: 67 73 20 65 6e 64 20 65 6e 64 20 5b 65 78 70 72  gs end end [expr
6630: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length 
6640: 24 73 74 72 5d 20 2d 20 31 5d 0a 09 09 09 09 7d  $str] - 1].....}
6650: 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65  ....}...}..}..re
6660: 74 75 72 6e 20 5b 65 76 61 6c 20 73 74 72 69 6e  turn [eval strin
6670: 67 20 24 61 72 67 73 5d 0a 7d 0a 0a 70 72 6f 63  g $args].}..proc
6680: 20 53 74 72 69 70 50 72 65 66 69 78 20 7b 74 65   StripPrefix {te
6690: 78 74 7d 20 7b 0a 09 23 20 70 75 74 73 20 22 28  xt} {..# puts "(
66a0: 53 74 72 69 70 50 72 65 66 69 78 29 20 74 65 78  StripPrefix) tex
66b0: 74 3d 7c 24 74 65 78 74 7c 22 0a 09 73 65 74 20  t=|$text|"..set 
66c0: 6e 75 6c 6c 20 5b 73 74 72 69 6e 67 20 69 6e 64  null [string ind
66d0: 65 78 20 24 74 65 78 74 20 30 5d 0a 09 69 66 20  ex $text 0]..if 
66e0: 7b 22 5c 22 22 20 3d 3d 20 24 6e 75 6c 6c 20 7c  {"\"" == $null |
66f0: 7c 20 22 5c 7b 22 20 3d 3d 20 24 6e 75 6c 6c 7d  | "\{" == $null}
6700: 20 7b 0a 09 09 72 65 74 75 72 6e 20 5b 53 74 72   {...return [Str
6710: 69 6e 67 20 72 61 6e 67 65 20 24 74 65 78 74 20  ing range $text 
6720: 31 20 65 6e 64 5d 0a 09 7d 20 65 6c 73 65 20 7b  1 end]..} else {
6730: 0a 09 09 72 65 74 75 72 6e 20 24 74 65 78 74 0a  ...return $text.
6740: 09 7d 0a 7d 0a 0a 70 72 6f 63 20 56 61 72 43 6f  .}.}..proc VarCo
6750: 6d 70 6c 65 74 69 6f 6e 20 7b 74 65 78 74 20 7b  mpletion {text {
6760: 6c 65 76 65 6c 20 2d 31 7d 7d 20 7b 0a 09 69 66  level -1}} {..if
6770: 20 7b 22 23 22 20 21 3d 20 5b 73 74 72 69 6e 67   {"#" != [string
6780: 20 69 6e 64 65 78 20 24 7b 6c 65 76 65 6c 7d 20   index ${level} 
6790: 30 5d 7d 20 7b 0a 09 09 69 66 20 7b 2d 31 20 3d  0]} {...if {-1 =
67a0: 3d 20 24 7b 6c 65 76 65 6c 7d 7d 20 7b 0a 09 09  = ${level}} {...
67b0: 09 73 65 74 20 6c 65 76 65 6c 20 5b 69 6e 66 6f  .set level [info
67c0: 20 6c 65 76 65 6c 5d 0a 09 09 7d 20 65 6c 73 65   level]...} else
67d0: 20 7b 0a 09 09 09 69 6e 63 72 20 6c 65 76 65 6c   {....incr level
67e0: 0a 09 09 7d 0a 09 7d 0a 09 73 65 74 20 70 72 65  ...}..}..set pre
67f0: 20 5b 47 65 74 51 75 6f 74 65 64 50 72 65 66 69   [GetQuotedPrefi
6800: 78 20 24 7b 74 65 78 74 7d 5d 0a 09 73 65 74 20  x ${text}]..set 
6810: 76 61 72 20 5b 53 74 72 69 70 50 72 65 66 69 78  var [StripPrefix
6820: 20 24 7b 74 65 78 74 7d 5d 0a 09 23 20 70 75 74   ${text}]..# put
6830: 73 20 73 74 64 65 72 72 20 22 28 56 61 72 43 6f  s stderr "(VarCo
6840: 6d 70 6c 65 74 69 6f 6e 29 20 70 72 65 3d 7c 24  mpletion) pre=|$
6850: 70 72 65 7c 22 0a 09 23 20 70 75 74 73 20 73 74  pre|"..# puts st
6860: 64 65 72 72 20 22 28 56 61 72 43 6f 6d 70 6c 65  derr "(VarComple
6870: 74 69 6f 6e 29 20 76 61 72 3d 7c 24 76 61 72 7c  tion) var=|$var|
6880: 22 0a 0a 09 23 20 61 72 72 61 79 73 0a 09 23 0a  "...# arrays..#.
6890: 09 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 28 5b  .if {[regexp {([
68a0: 5e 28 5d 2a 29 5c 28 28 2e 2a 29 7d 20 24 7b 76  ^(]*)\((.*)} ${v
68b0: 61 72 7d 20 61 6c 6c 20 61 72 72 61 79 20 6e 61  ar} all array na
68c0: 6d 65 5d 7d 20 7b 0a 09 09 73 65 74 20 6e 61 6d  me]} {...set nam
68d0: 65 73 20 5b 75 70 6c 65 76 65 6c 20 24 7b 6c 65  es [uplevel ${le
68e0: 76 65 6c 7d 20 61 72 72 61 79 20 6e 61 6d 65 73  vel} array names
68f0: 20 24 7b 61 72 72 61 79 7d 20 24 7b 6e 61 6d 65   ${array} ${name
6900: 7d 2a 5d 0a 09 09 69 66 20 7b 31 20 3d 3d 20 5b  }*]...if {1 == [
6910: 6c 6c 65 6e 67 74 68 20 24 6e 61 6d 65 73 5d 7d  llength $names]}
6920: 20 7b 20 3b 20 23 20 75 6e 69 71 75 65 20 6d 61   { ; # unique ma
6930: 74 63 68 0a 09 09 09 72 65 74 75 72 6e 20 22 24  tch....return "$
6940: 7b 61 72 72 61 79 7d 28 24 7b 6e 61 6d 65 73 7d  {array}(${names}
6950: 29 22 0a 09 09 7d 20 65 6c 73 65 69 66 20 7b 22  )"...} elseif {"
6960: 22 20 21 3d 20 24 7b 6e 61 6d 65 73 7d 7d 20 7b  " != ${names}} {
6970: 0a 09 09 09 72 65 74 75 72 6e 20 22 24 7b 61 72  ....return "${ar
6980: 72 61 79 7d 28 5b 43 6f 6d 70 6c 65 74 65 4c 6f  ray}([CompleteLo
6990: 6e 67 65 73 74 20 24 7b 6e 61 6d 65 73 7d 5d 20  ngest ${names}] 
69a0: 24 7b 6e 61 6d 65 73 7d 22 0a 09 09 7d 20 65 6c  ${names}"...} el
69b0: 73 65 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 22  se {....return "
69c0: 22 3b 20 23 20 6e 6f 74 68 69 6e 67 20 74 6f 20  "; # nothing to 
69d0: 63 6f 6d 70 6c 65 74 65 0a 09 09 7d 0a 09 7d 0a  complete...}..}.
69e0: 0a 09 23 20 6e 6f 6e 2d 61 72 72 61 79 73 0a 09  ..# non-arrays..
69f0: 23 0a 09 72 65 67 73 75 62 20 22 3a 24 22 20 24  #..regsub ":$" $
6a00: 7b 76 61 72 7d 20 22 3a 3a 22 20 76 61 72 0a 09  {var} "::" var..
6a10: 73 65 74 20 6e 61 6d 65 73 70 61 63 65 73 20 5b  set namespaces [
6a20: 6e 61 6d 65 73 70 61 63 65 20 63 68 69 6c 64 72  namespace childr
6a30: 65 6e 20 3a 3a 20 24 7b 76 61 72 7d 2a 5d 0a 09  en :: ${var}*]..
6a40: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 7b 6e  if {[llength ${n
6a50: 61 6d 65 73 70 61 63 65 73 7d 5d 20 26 26 20 22  amespaces}] && "
6a60: 3a 3a 22 20 21 3d 20 5b 73 74 72 69 6e 67 20 72  ::" != [string r
6a70: 61 6e 67 65 20 24 7b 76 61 72 7d 20 30 20 31 5d  ange ${var} 0 1]
6a80: 7d 20 7b 0a 09 09 66 6f 72 65 61 63 68 20 6e 61  } {...foreach na
6a90: 6d 65 20 24 7b 6e 61 6d 65 73 70 61 63 65 73 7d  me ${namespaces}
6aa0: 20 7b 0a 09 09 09 72 65 67 73 75 62 20 22 5e 3a   {....regsub "^:
6ab0: 3a 22 20 24 7b 6e 61 6d 65 7d 20 22 22 20 6e 61  :" ${name} "" na
6ac0: 6d 65 0a 09 09 09 69 66 20 7b 5b 73 74 72 69 6e  me....if {[strin
6ad0: 67 20 6c 65 6e 67 74 68 20 24 7b 6e 61 6d 65 7d  g length ${name}
6ae0: 5d 7d 20 7b 0a 09 09 09 09 6c 61 70 70 65 6e 64  ]} {.....lappend
6af0: 20 6e 65 77 20 24 7b 6e 61 6d 65 7d 3a 3a 0a 09   new ${name}::..
6b00: 09 09 7d 0a 09 09 7d 0a 09 09 73 65 74 20 6e 61  ..}...}...set na
6b10: 6d 65 73 70 61 63 65 73 20 24 7b 6e 65 77 7d 0a  mespaces ${new}.
6b20: 09 09 75 6e 73 65 74 20 6e 65 77 0a 09 7d 0a 09  ..unset new..}..
6b30: 73 65 74 20 6d 61 74 63 68 65 73 20 5c 0a 09 5b  set matches \..[
6b40: 73 74 72 69 6e 67 20 74 72 69 6d 20 22 5b 75 70  string trim "[up
6b50: 6c 65 76 65 6c 20 24 7b 6c 65 76 65 6c 7d 20 69  level ${level} i
6b60: 6e 66 6f 20 76 61 72 73 20 24 7b 76 61 72 7d 2a  nfo vars ${var}*
6b70: 5d 20 24 7b 6e 61 6d 65 73 70 61 63 65 73 7d 22  ] ${namespaces}"
6b80: 5d 0a 09 69 66 20 7b 31 20 3d 3d 20 5b 6c 6c 65  ]..if {1 == [lle
6b90: 6e 67 74 68 20 24 6d 61 74 63 68 65 73 5d 7d 20  ngth $matches]} 
6ba0: 7b 20 3b 20 23 20 75 6e 69 71 75 65 20 6d 61 74  { ; # unique mat
6bb0: 63 68 0a 0a 09 09 23 20 63 68 65 63 6b 20 69 66  ch....# check if
6bc0: 20 74 68 69 73 20 75 6e 69 71 75 65 20 6d 61 74   this unique mat
6bd0: 63 68 20 69 73 20 61 6e 0a 09 09 23 20 61 72 72  ch is an...# arr
6be0: 61 79 20 6e 61 6d 65 2c 20 28 77 68 69 74 68 20  ay name, (whith 
6bf0: 6e 6f 20 22 28 22 20 79 65 74 29 2e 0a 09 09 23  no "(" yet)....#
6c00: 0a 09 09 69 66 20 7b 5b 75 70 6c 65 76 65 6c 20  ...if {[uplevel 
6c10: 24 7b 6c 65 76 65 6c 7d 20 61 72 72 61 79 20 65  ${level} array e
6c20: 78 69 73 74 73 20 24 6d 61 74 63 68 65 73 5d 7d  xists $matches]}
6c30: 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 56 61   {....return [Va
6c40: 72 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 6d 61  rCompletion ${ma
6c50: 74 63 68 65 73 7d 28 20 24 7b 6c 65 76 65 6c 7d  tches}( ${level}
6c60: 5d 3b 20 23 20 72 65 63 75 72 73 69 6f 6e 0a 09  ]; # recursion..
6c70: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 72 65 74  .} else {....ret
6c80: 75 72 6e 20 24 7b 70 72 65 7d 24 7b 6d 61 74 63  urn ${pre}${matc
6c90: 68 65 73 7d 5b 52 69 67 68 74 20 24 7b 70 72 65  hes}[Right ${pre
6ca0: 7d 5d 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 69 66  }]...}..} elseif
6cb0: 20 7b 22 22 20 21 3d 20 24 6d 61 74 63 68 65 73   {"" != $matches
6cc0: 7d 20 7b 20 3b 20 23 20 6d 6f 72 65 20 74 68 61  } { ; # more tha
6cd0: 6e 20 6f 6e 65 20 6d 61 74 63 68 0a 09 09 20 20  n one match...  
6ce0: 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
6cf0: 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
6d00: 20 24 7b 6d 61 74 63 68 65 73 7d 5d 0a 09 7d 20   ${matches}]..} 
6d10: 65 6c 73 65 20 7b 0a 09 09 72 65 74 75 72 6e 20  else {...return 
6d20: 22 22 3b 20 23 20 6e 6f 74 68 69 6e 67 20 74 6f  ""; # nothing to
6d30: 20 63 6f 6d 70 6c 65 74 65 0a 09 7d 0a 7d 0a 0a   complete..}.}..
6d40: 70 72 6f 63 20 43 6f 6d 70 6c 65 74 65 43 6f 6e  proc CompleteCon
6d50: 74 72 6f 6c 53 74 61 74 65 6d 65 6e 74 20 7b 74  trolStatement {t
6d60: 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
6d70: 6e 65 20 70 6f 73 20 6d 6f 64 20 70 72 65 20 6e  ne pos mod pre n
6d80: 65 77 5f 6c 69 6e 65 7d 20 7b 0a 09 73 65 74 20  ew_line} {..set 
6d90: 70 72 65 20 5b 47 65 74 51 75 6f 74 65 64 50 72  pre [GetQuotedPr
6da0: 65 66 69 78 20 24 7b 70 72 65 7d 5d 0a 09 73 65  efix ${pre}]..se
6db0: 74 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6e  t cmd [Lindex $n
6dc0: 65 77 5f 6c 69 6e 65 20 30 5d 0a 09 73 65 74 20  ew_line 0]..set 
6dd0: 64 69 66 66 20 5b 65 78 70 72 20 5c 0a 09 5b 73  diff [expr \..[s
6de0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6c 69  tring length $li
6df0: 6e 65 5d 20 2d 20 5b 73 74 72 69 6e 67 20 6c 65  ne] - [string le
6e00: 6e 67 74 68 20 24 6e 65 77 5f 6c 69 6e 65 5d 5d  ngth $new_line]]
6e10: 0a 09 69 66 20 7b 24 64 69 66 66 20 3d 3d 20 5b  ..if {$diff == [
6e20: 65 78 70 72 20 24 73 74 61 72 74 20 2b 20 31 5d  expr $start + 1]
6e30: 7d 20 7b 0a 09 09 73 65 74 20 6d 6f 64 31 20 24  } {...set mod1 $
6e40: 6d 6f 64 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09  mod..} else {...
6e50: 73 65 74 20 6d 6f 64 31 20 24 74 65 78 74 0a 09  set mod1 $text..
6e60: 09 73 65 74 20 70 72 65 20 22 22 0a 09 7d 0a 09  .set pre ""..}..
6e70: 73 65 74 20 6e 65 77 5f 65 6e 64 20 5b 65 78 70  set new_end [exp
6e80: 72 20 24 65 6e 64 20 2d 20 24 64 69 66 66 5d 0a  r $end - $diff].
6e90: 09 73 65 74 20 6e 65 77 5f 73 74 61 72 74 20 5b  .set new_start [
6ea0: 65 78 70 72 20 24 6e 65 77 5f 65 6e 64 20 2d 20  expr $new_end - 
6eb0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $
6ec0: 6d 6f 64 31 5d 5d 0a 09 23 20 70 75 74 73 20 22  mod1]]..# puts "
6ed0: 22 0a 09 23 20 70 75 74 73 20 6e 65 77 5f 73 74  "..# puts new_st
6ee0: 61 72 74 3d 24 6e 65 77 5f 73 74 61 72 74 0a 09  art=$new_start..
6ef0: 23 20 70 75 74 73 20 6e 65 77 5f 65 6e 64 3d 24  # puts new_end=$
6f00: 6e 65 77 5f 65 6e 64 0a 09 23 20 70 75 74 73 20  new_end..# puts 
6f10: 6e 65 77 5f 6c 69 6e 65 3d 24 6e 65 77 5f 6c 69  new_line=$new_li
6f20: 6e 65 0a 09 23 20 70 75 74 73 20 6d 6f 64 31 3d  ne..# puts mod1=
6f30: 24 6d 6f 64 31 0a 09 69 66 20 7b 24 6e 65 77 5f  $mod1..if {$new_
6f40: 73 74 61 72 74 20 3c 20 30 7d 20 7b 0a 09 09 72  start < 0} {...r
6f50: 65 74 75 72 6e 20 22 22 3b 20 23 20 77 68 65 6e  eturn ""; # when
6f60: 20 64 6f 65 73 20 74 68 69 73 20 6f 63 63 75 72   does this occur
6f70: 3f 0a 09 7d 0a 09 23 20 70 75 74 73 20 73 74 64  ?..}..# puts std
6f80: 65 72 72 20 22 22 0a 09 23 20 70 75 74 73 20 73  err ""..# puts s
6f90: 74 64 65 72 72 20 73 74 61 72 74 3d 7c 24 73 74  tderr start=|$st
6fa0: 61 72 74 7c 0a 09 23 20 70 75 74 73 20 73 74 64  art|..# puts std
6fb0: 65 72 72 20 65 6e 64 3d 7c 24 65 6e 64 7c 0a 09  err end=|$end|..
6fc0: 23 20 70 75 74 73 20 73 74 64 65 72 72 20 6d 6f  # puts stderr mo
6fd0: 64 3d 7c 24 6d 6f 64 7c 0a 09 23 20 70 75 74 73  d=|$mod|..# puts
6fe0: 20 73 74 64 65 72 72 20 6e 65 77 5f 73 74 61 72   stderr new_star
6ff0: 74 3d 7c 24 6e 65 77 5f 73 74 61 72 74 7c 0a 09  t=|$new_start|..
7000: 23 20 70 75 74 73 20 73 74 64 65 72 72 20 6e 65  # puts stderr ne
7010: 77 5f 65 6e 64 3d 7c 24 6e 65 77 5f 65 6e 64 7c  w_end=|$new_end|
7020: 0a 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20  ..# puts stderr 
7030: 6e 65 77 5f 6c 69 6e 65 3d 7c 24 6e 65 77 5f 6c  new_line=|$new_l
7040: 69 6e 65 7c 0a 09 23 20 70 75 74 73 20 73 74 64  ine|..# puts std
7050: 65 72 72 20 22 22 0a 09 73 65 74 20 72 65 73 20  err ""..set res 
7060: 5b 53 63 72 69 70 74 43 6f 6d 70 6c 65 74 65 72  [ScriptCompleter
7070: 20 24 6d 6f 64 31 20 24 6e 65 77 5f 73 74 61 72   $mod1 $new_star
7080: 74 20 24 6e 65 77 5f 65 6e 64 20 24 6e 65 77 5f  t $new_end $new_
7090: 6c 69 6e 65 5d 0a 09 23 20 70 75 74 73 20 73 74  line]..# puts st
70a0: 64 65 72 72 20 5c 6e 5c 24 7b 70 72 65 7d 5c 24  derr \n\${pre}\$
70b0: 7b 72 65 73 7d 3d 7c 24 7b 70 72 65 7d 24 7b 72  {res}=|${pre}${r
70c0: 65 73 7d 7c 0a 09 69 66 20 7b 5b 73 74 72 69 6e  es}|..if {[strin
70d0: 67 20 6c 65 6e 67 74 68 20 5b 4c 69 6e 64 65 78  g length [Lindex
70e0: 20 24 7b 72 65 73 7d 20 30 5d 5d 7d 20 7b 0a 09   ${res} 0]]} {..
70f0: 09 72 65 74 75 72 6e 20 24 7b 70 72 65 7d 24 7b  .return ${pre}${
7100: 72 65 73 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09  res}..} else {..
7110: 09 72 65 74 75 72 6e 20 24 7b 72 65 73 7d 0a 09  .return ${res}..
7120: 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
7130: 70 72 6f 63 20 42 72 61 63 65 4f 72 43 6f 6d 6d  proc BraceOrComm
7140: 61 6e 64 20 7b 74 65 78 74 20 73 74 61 72 74 20  and {text start 
7150: 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
7160: 7d 20 7b 0a 09 69 66 20 7b 21 5b 73 74 72 69 6e  } {..if {![strin
7170: 67 20 6c 65 6e 67 74 68 20 5b 4c 69 6e 64 65 78  g length [Lindex
7180: 20 24 6c 69 6e 65 20 24 70 6f 73 5d 5d 7d 20 7b   $line $pos]]} {
7190: 0a 09 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20  ...return [list 
71a0: 5c 7b 20 7b 7d 5d 3b 20 23 20 5c 7d 0a 09 7d 20  \{ {}]; # \}..} 
71b0: 65 6c 73 65 20 7b 0a 09 09 73 65 74 20 6e 65 77  else {...set new
71c0: 5f 6c 69 6e 65 20 5b 73 74 72 69 6e 67 20 74 72  _line [string tr
71d0: 69 6d 20 5b 49 6e 63 6f 6d 70 6c 65 74 65 4c 69  im [IncompleteLi
71e0: 73 74 52 65 6d 61 69 6e 64 65 72 20 24 6c 69 6e  stRemainder $lin
71f0: 65 5d 5d 0a 09 09 69 66 20 7b 21 5b 72 65 67 65  e]]...if {![rege
7200: 78 70 20 7b 5e 28 5b 5c 7b 5c 22 5d 29 28 2e 2a  xp {^([\{\"])(.*
7210: 29 24 7d 20 24 6e 65 77 5f 6c 69 6e 65 20 61 6c  )$} $new_line al
7220: 6c 20 70 72 65 20 6e 65 77 5f 6c 69 6e 65 5d 7d  l pre new_line]}
7230: 20 7b 0a 09 09 09 73 65 74 20 70 72 65 20 22 22   {....set pre ""
7240: 0a 09 09 7d 0a 09 09 72 65 74 75 72 6e 20 5b 43  ...}...return [C
7250: 6f 6d 70 6c 65 74 65 43 6f 6e 74 72 6f 6c 53 74  ompleteControlSt
7260: 61 74 65 6d 65 6e 74 20 24 74 65 78 74 20 5c 0a  atement $text \.
7270: 09 09 24 73 74 61 72 74 20 24 65 6e 64 20 24 6c  ..$start $end $l
7280: 69 6e 65 20 24 70 6f 73 20 24 6d 6f 64 20 24 70  ine $pos $mod $p
7290: 72 65 20 24 6e 65 77 5f 6c 69 6e 65 5d 0a 09 7d  re $new_line]..}
72a0: 0a 7d 0a 0a 70 72 6f 63 20 46 75 6c 6c 51 75 61  .}..proc FullQua
72b0: 6c 69 66 69 65 64 4d 61 74 63 68 65 73 20 7b 71  lifiedMatches {q
72c0: 75 61 6c 69 66 69 65 72 20 6d 61 74 63 68 6c 69  ualifier matchli
72d0: 73 74 7d 20 7b 0a 09 73 65 74 20 6e 65 77 20 22  st} {..set new "
72e0: 22 0a 09 69 66 20 7b 22 22 20 21 3d 20 24 71 75  "..if {"" != $qu
72f0: 61 6c 69 66 69 65 72 20 26 26 20 21 5b 72 65 67  alifier && ![reg
7300: 65 78 70 20 3a 3a 24 20 24 71 75 61 6c 69 66 69  exp ::$ $qualifi
7310: 65 72 5d 7d 20 7b 0a 09 09 61 70 70 65 6e 64 20  er]} {...append 
7320: 71 75 61 6c 69 66 69 65 72 20 3a 3a 0a 09 7d 0a  qualifier ::..}.
7330: 09 66 6f 72 65 61 63 68 20 65 6e 74 72 79 20 24  .foreach entry $
7340: 7b 6d 61 74 63 68 6c 69 73 74 7d 20 7b 0a 09 09  {matchlist} {...
7350: 73 65 74 20 66 75 6c 6c 20 24 7b 71 75 61 6c 69  set full ${quali
7360: 66 69 65 72 7d 24 7b 65 6e 74 72 79 7d 0a 09 09  fier}${entry}...
7370: 69 66 20 7b 22 22 20 21 3d 20 5b 6e 61 6d 65 73  if {"" != [names
7380: 70 61 63 65 20 77 68 69 63 68 20 24 7b 66 75 6c  pace which ${ful
7390: 6c 7d 5d 7d 20 7b 0a 09 09 09 6c 61 70 70 65 6e  l}]} {....lappen
73a0: 64 20 6e 65 77 20 24 7b 66 75 6c 6c 7d 0a 09 09  d new ${full}...
73b0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 7b 6e  }..}..return ${n
73c0: 65 77 7d 0a 7d 0a 0a 70 72 6f 63 20 50 72 6f 63  ew}.}..proc Proc
73d0: 73 4f 6e 6c 79 43 6f 6d 70 6c 65 74 69 6f 6e 20  sOnlyCompletion 
73e0: 7b 63 6d 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20  {cmd} {..return 
73f0: 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69  [CommandCompleti
7400: 6f 6e 20 24 7b 63 6d 64 7d 20 70 72 6f 63 73 5d  on ${cmd} procs]
7410: 0a 7d 0a 0a 70 72 6f 63 20 43 6f 6d 6d 61 6e 64  .}..proc Command
7420: 73 4f 6e 6c 79 43 6f 6d 70 6c 65 74 69 6f 6e 20  sOnlyCompletion 
7430: 7b 63 6d 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20  {cmd} {..return 
7440: 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69  [CommandCompleti
7450: 6f 6e 20 24 7b 63 6d 64 7d 20 63 6f 6d 6d 61 6e  on ${cmd} comman
7460: 64 73 5d 0a 7d 0a 0a 70 72 6f 63 20 43 6f 6d 6d  ds].}..proc Comm
7470: 61 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 20 7b 63  andCompletion {c
7480: 6d 64 20 7b 61 63 74 69 6f 6e 20 62 6f 74 68 7d  md {action both}
7490: 20 7b 73 70 63 20 3a 3a 7d 7d 20 7b 0a 09 23 20   {spc ::}} {..# 
74a0: 67 65 74 20 74 68 65 20 6c 65 61 64 69 6e 67 20  get the leading 
74b0: 63 6f 6c 6f 6e 73 20 69 6e 20 60 63 6d 64 27 2e  colons in `cmd'.
74c0: 0a 09 72 65 67 65 78 70 20 7b 5e 3a 2a 7d 20 24  ..regexp {^:*} $
74d0: 7b 63 6d 64 7d 20 70 72 65 0a 09 72 65 74 75 72  {cmd} pre..retur
74e0: 6e 20 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65  n [CommandComple
74f0: 74 69 6f 6e 57 69 74 68 50 72 65 20 24 63 6d 64  tionWithPre $cmd
7500: 20 24 61 63 74 69 6f 6e 20 24 73 70 63 20 24 70   $action $spc $p
7510: 72 65 5d 0a 7d 0a 0a 70 72 6f 63 20 43 6f 6d 6d  re].}..proc Comm
7520: 61 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 57 69 74  andCompletionWit
7530: 68 50 72 65 20 7b 63 6d 64 20 61 63 74 69 6f 6e  hPre {cmd action
7540: 20 73 70 63 20 70 72 65 7d 20 7b 0a 09 23 20 70   spc pre} {..# p
7550: 75 74 73 20 73 74 64 65 72 72 20 22 28 43 6f 6d  uts stderr "(Com
7560: 6d 61 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 29 20  mandCompletion) 
7570: 63 6d 64 3d 7c 24 63 6d 64 7c 22 0a 09 23 20 70  cmd=|$cmd|"..# p
7580: 75 74 73 20 73 74 64 65 72 72 20 22 28 43 6f 6d  uts stderr "(Com
7590: 6d 61 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 29 20  mandCompletion) 
75a0: 61 63 74 69 6f 6e 3d 7c 24 61 63 74 69 6f 6e 7c  action=|$action|
75b0: 22 0a 09 23 20 70 75 74 73 20 73 74 64 65 72 72  "..# puts stderr
75c0: 20 22 28 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65   "(CommandComple
75d0: 74 69 6f 6e 29 20 73 70 63 3d 7c 24 73 70 63 7c  tion) spc=|$spc|
75e0: 22 0a 0a 09 73 65 74 20 63 6d 64 20 5b 53 74 72  "...set cmd [Str
75f0: 69 70 50 72 65 66 69 78 20 24 7b 63 6d 64 7d 5d  ipPrefix ${cmd}]
7600: 0a 09 73 65 74 20 71 75 61 6c 69 20 5b 6e 61 6d  ..set quali [nam
7610: 65 73 70 61 63 65 20 71 75 61 6c 69 66 69 65 72  espace qualifier
7620: 73 20 24 7b 63 6d 64 7d 5d 0a 09 69 66 20 7b 5b  s ${cmd}]..if {[
7630: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b  string length ${
7640: 71 75 61 6c 69 7d 5d 7d 20 7b 0a 09 09 23 20 70  quali}]} {...# p
7650: 75 74 73 20 73 74 64 65 72 72 20 5c 6e 71 75 61  uts stderr \nqua
7660: 6c 69 3d 7c 24 71 75 61 6c 69 7c 0a 09 09 73 65  li=|$quali|...se
7670: 74 20 6d 61 74 63 68 65 73 20 5b 43 6f 6d 6d 61  t matches [Comma
7680: 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 57 69 74 68  ndCompletionWith
7690: 50 72 65 20 5c 0a 09 09 5b 6e 61 6d 65 73 70 61  Pre \...[namespa
76a0: 63 65 20 74 61 69 6c 20 24 7b 63 6d 64 7d 5d 20  ce tail ${cmd}] 
76b0: 24 7b 61 63 74 69 6f 6e 7d 20 24 7b 73 70 63 7d  ${action} ${spc}
76c0: 24 7b 71 75 61 6c 69 7d 20 24 7b 70 72 65 7d 5d  ${quali} ${pre}]
76d0: 0a 09 09 23 20 70 75 74 73 20 73 74 64 65 72 72  ...# puts stderr
76e0: 20 5c 6e 6d 61 74 63 68 65 73 31 3d 7c 24 6d 61   \nmatches1=|$ma
76f0: 74 63 68 65 73 7c 0a 09 09 72 65 74 75 72 6e 20  tches|...return 
7700: 24 6d 61 74 63 68 65 73 0a 09 7d 0a 09 73 65 74  $matches..}..set
7710: 20 63 6d 64 20 5b 73 74 72 69 6e 67 20 74 72 69   cmd [string tri
7720: 6d 20 24 7b 63 6d 64 7d 5d 2a 0a 09 23 20 70 75  m ${cmd}]*..# pu
7730: 74 73 20 73 74 64 65 72 72 20 5c 6e 63 6d 64 3d  ts stderr \ncmd=
7740: 7c 24 63 6d 64 7c 5c 6e 0a 09 69 66 20 7b 22 70  |$cmd|\n..if {"p
7750: 72 6f 63 73 22 20 21 3d 20 24 7b 61 63 74 69 6f  rocs" != ${actio
7760: 6e 7d 7d 20 7b 0a 09 09 73 65 74 20 61 6c 6c 5f  n}} {...set all_
7770: 63 6f 6d 6d 61 6e 64 73 20 5b 6e 61 6d 65 73 70  commands [namesp
7780: 61 63 65 20 65 76 61 6c 20 24 73 70 63 20 5b 6c  ace eval $spc [l
7790: 69 73 74 20 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64  ist info command
77a0: 73 20 24 7b 63 6d 64 7d 5d 5d 0a 09 09 23 20 70  s ${cmd}]]...# p
77b0: 75 74 73 20 73 74 64 65 72 72 20 61 6c 6c 5f 63  uts stderr all_c
77c0: 6f 6d 6d 61 6e 64 73 3d 7c 24 61 6c 6c 5f 63 6f  ommands=|$all_co
77d0: 6d 6d 61 6e 64 73 7c 0a 09 09 73 65 74 20 63 6f  mmands|...set co
77e0: 6d 6d 61 6e 64 73 20 22 22 0a 09 09 66 6f 72 65  mmands ""...fore
77f0: 61 63 68 20 63 6f 6d 6d 61 6e 64 20 24 61 6c 6c  ach command $all
7800: 5f 63 6f 6d 6d 61 6e 64 73 20 7b 0a 09 09 09 69  _commands {....i
7810: 66 20 7b 5b 6e 61 6d 65 73 70 61 63 65 20 65 76  f {[namespace ev
7820: 61 6c 20 24 73 70 63 20 5b 6c 69 73 74 20 6e 61  al $spc [list na
7830: 6d 65 73 70 61 63 65 20 6f 72 69 67 69 6e 20 24  mespace origin $
7840: 63 6f 6d 6d 61 6e 64 5d 5d 20 3d 3d 20 5c 0a 09  command]] == \..
7850: 09 09 09 5b 6e 61 6d 65 73 70 61 63 65 20 65 76  ...[namespace ev
7860: 61 6c 20 24 73 70 63 20 5b 6c 69 73 74 20 6e 61  al $spc [list na
7870: 6d 65 73 70 61 63 65 20 77 68 69 63 68 20 24 63  mespace which $c
7880: 6f 6d 6d 61 6e 64 5d 5d 7d 20 7b 0a 09 09 09 09  ommand]]} {.....
7890: 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 73  lappend commands
78a0: 20 24 63 6f 6d 6d 61 6e 64 0a 09 09 09 7d 0a 09   $command....}..
78b0: 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 73  .}..} else {...s
78c0: 65 74 20 63 6f 6d 6d 61 6e 64 73 20 22 22 0a 09  et commands ""..
78d0: 7d 0a 09 69 66 20 7b 22 63 6f 6d 6d 61 6e 64 73  }..if {"commands
78e0: 22 20 21 3d 20 24 7b 61 63 74 69 6f 6e 7d 7d 20  " != ${action}} 
78f0: 7b 0a 09 09 73 65 74 20 61 6c 6c 5f 70 72 6f 63  {...set all_proc
7900: 73 20 5b 6e 61 6d 65 73 70 61 63 65 20 65 76 61  s [namespace eva
7910: 6c 20 24 73 70 63 20 5b 6c 69 73 74 20 69 6e 66  l $spc [list inf
7920: 6f 20 70 72 6f 63 73 20 24 7b 63 6d 64 7d 5d 5d  o procs ${cmd}]]
7930: 0a 09 09 23 20 70 75 74 73 20 73 74 64 65 72 72  ...# puts stderr
7940: 20 70 72 6f 63 73 3d 7c 24 70 72 6f 63 73 7c 0a   procs=|$procs|.
7950: 09 09 73 65 74 20 70 72 6f 63 73 20 22 22 0a 09  ..set procs ""..
7960: 09 66 6f 72 65 61 63 68 20 70 72 6f 63 20 24 61  .foreach proc $a
7970: 6c 6c 5f 70 72 6f 63 73 20 7b 0a 09 09 09 69 66  ll_procs {....if
7980: 20 7b 5b 6e 61 6d 65 73 70 61 63 65 20 65 76 61   {[namespace eva
7990: 6c 20 24 73 70 63 20 5b 6c 69 73 74 20 6e 61 6d  l $spc [list nam
79a0: 65 73 70 61 63 65 20 6f 72 69 67 69 6e 20 24 70  espace origin $p
79b0: 72 6f 63 5d 5d 20 3d 3d 20 5c 0a 09 09 09 09 5b  roc]] == \.....[
79c0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 24  namespace eval $
79d0: 73 70 63 20 5b 6c 69 73 74 20 6e 61 6d 65 73 70  spc [list namesp
79e0: 61 63 65 20 77 68 69 63 68 20 24 70 72 6f 63 5d  ace which $proc]
79f0: 5d 7d 20 7b 0a 09 09 09 09 6c 61 70 70 65 6e 64  ]} {.....lappend
7a00: 20 70 72 6f 63 73 20 24 70 72 6f 63 0a 09 09 09   procs $proc....
7a10: 7d 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a  }...}..} else {.
7a20: 09 09 73 65 74 20 70 72 6f 63 73 20 22 22 0a 09  ..set procs ""..
7a30: 7d 0a 09 73 65 74 20 6d 61 74 63 68 65 73 20 5b  }..set matches [
7a40: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 24  namespace eval $
7a50: 73 70 63 20 63 6f 6e 63 61 74 20 24 7b 63 6f 6d  spc concat ${com
7a60: 6d 61 6e 64 73 7d 20 24 7b 70 72 6f 63 73 7d 5d  mands} ${procs}]
7a70: 0a 09 73 65 74 20 6e 61 6d 65 73 70 61 63 65 73  ..set namespaces
7a80: 20 5b 6e 61 6d 65 73 70 61 63 65 20 63 68 69 6c   [namespace chil
7a90: 64 72 65 6e 20 24 73 70 63 20 24 7b 63 6d 64 7d  dren $spc ${cmd}
7aa0: 5d 0a 0a 09 69 66 20 7b 21 5b 6c 6c 65 6e 67 74  ]...if {![llengt
7ab0: 68 20 24 7b 6d 61 74 63 68 65 73 7d 5d 20 26 26  h ${matches}] &&
7ac0: 20 31 20 3d 3d 20 5b 6c 6c 65 6e 67 74 68 20 24   1 == [llength $
7ad0: 7b 6e 61 6d 65 73 70 61 63 65 73 7d 5d 7d 20 7b  {namespaces}]} {
7ae0: 0a 09 09 73 65 74 20 6d 61 74 63 68 65 73 20 5b  ...set matches [
7af0: 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69 6f  CommandCompletio
7b00: 6e 57 69 74 68 50 72 65 20 7b 7d 20 24 7b 61 63  nWithPre {} ${ac
7b10: 74 69 6f 6e 7d 20 24 7b 6e 61 6d 65 73 70 61 63  tion} ${namespac
7b20: 65 73 7d 20 24 7b 70 72 65 7d 5d 0a 09 09 23 20  es} ${pre}]...# 
7b30: 70 75 74 73 20 73 74 64 65 72 72 20 5c 6e 6d 61  puts stderr \nma
7b40: 74 63 68 65 73 3d 7c 24 6d 61 74 63 68 65 73 7c  tches=|$matches|
7b50: 0a 09 09 72 65 74 75 72 6e 20 24 6d 61 74 63 68  ...return $match
7b60: 65 73 0a 09 7d 0a 0a 09 23 20 6d 61 6b 65 20 60  es..}...# make `
7b70: 6e 61 6d 65 73 70 61 63 65 73 27 20 68 61 76 69  namespaces' havi
7b80: 6e 67 20 65 78 61 63 74 6c 79 0a 09 23 20 74 68  ng exactly..# th
7b90: 65 20 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66  e same number of
7ba0: 20 63 6f 6c 6f 6e 73 20 61 73 20 60 63 6d 64 27   colons as `cmd'
7bb0: 2e 0a 09 23 0a 09 72 65 67 73 75 62 20 2d 61 6c  ...#..regsub -al
7bc0: 6c 20 7b 5e 3a 2a 7d 20 24 73 70 63 20 24 70 72  l {^:*} $spc $pr
7bd0: 65 20 73 70 63 0a 0a 09 73 65 74 20 6d 61 74 63  e spc...set matc
7be0: 68 65 73 20 5b 46 75 6c 6c 51 75 61 6c 69 66 69  hes [FullQualifi
7bf0: 65 64 4d 61 74 63 68 65 73 20 24 7b 73 70 63 7d  edMatches ${spc}
7c00: 20 24 7b 6d 61 74 63 68 65 73 7d 5d 0a 09 23 20   ${matches}]..# 
7c10: 70 75 74 73 20 73 74 64 65 72 72 20 5c 6e 6d 61  puts stderr \nma
7c20: 74 63 68 65 73 33 3d 7c 24 6d 61 74 63 68 65 73  tches3=|$matches
7c30: 7c 0a 09 72 65 74 75 72 6e 20 5b 73 74 72 69 6e  |..return [strin
7c40: 67 20 74 72 69 6d 20 22 24 7b 6d 61 74 63 68 65  g trim "${matche
7c50: 73 7d 20 24 7b 6e 61 6d 65 73 70 61 63 65 73 7d  s} ${namespaces}
7c60: 22 5d 0a 7d 0a 0a 23 2a 2a 0a 23 20 63 68 65 63  "].}..#**.# chec
7c70: 6b 2c 20 69 66 20 74 68 65 20 66 69 72 73 74 20  k, if the first 
7c80: 61 72 67 75 6d 65 6e 74 20 73 74 61 72 74 73 20  argument starts 
7c90: 77 69 74 68 20 61 20 27 5b 27 0a 23 20 61 6e 64  with a '['.# and
7ca0: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
7cb0: 65 64 20 62 65 66 6f 72 65 20 63 6f 6e 74 69 6e  ed before contin
7cc0: 75 69 6e 67 2e 0a 23 20 4e 4f 54 45 3a 20 74 72  uing..# NOTE: tr
7cd0: 69 6d 73 20 74 68 65 20 60 6c 69 6e 65 27 2e 0a  ims the `line'..
7ce0: 23 20 20 20 20 20 20 20 65 76 65 6e 74 75 61 6c  #       eventual
7cf0: 6c 79 20 6d 6f 64 69 66 69 65 73 20 61 6c 6c 20  ly modifies all 
7d00: 61 72 67 75 6d 65 6e 74 73 2e 0a 23 20 44 41 54  arguments..# DAT
7d10: 45 3a 20 53 65 70 2d 30 36 2d 31 39 39 39 0a 23  E: Sep-06-1999.#
7d20: 0a 70 72 6f 63 20 45 76 65 6e 74 75 61 6c 6c 79  .proc Eventually
7d30: 45 76 61 6c 75 61 74 65 46 69 72 73 74 20 7b 70  EvaluateFirst {p
7d40: 61 72 74 54 20 73 74 61 72 74 54 20 65 6e 64 54  artT startT endT
7d50: 20 6c 69 6e 65 54 7d 20 7b 0a 09 23 20 72 65 74   lineT} {..# ret
7d60: 75 72 6e 3b 20 23 20 64 69 73 61 62 6c 65 64 0a  urn; # disabled.
7d70: 09 75 70 76 61 72 20 24 70 61 72 74 54 20 70 61  .upvar $partT pa
7d80: 72 74 20 24 73 74 61 72 74 54 20 73 74 61 72 74  rt $startT start
7d90: 20 24 65 6e 64 54 20 65 6e 64 20 24 6c 69 6e 65   $endT end $line
7da0: 54 20 6c 69 6e 65 0a 0a 09 73 65 74 20 6f 6c 64  T line...set old
7db0: 6c 65 6e 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67  len [string leng
7dc0: 74 68 20 24 7b 6c 69 6e 65 7d 5d 0a 09 23 20 73  th ${line}]..# s
7dd0: 65 74 20 6c 69 6e 65 20 5b 73 74 72 69 6e 67 20  et line [string 
7de0: 74 72 69 6d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 73  trim ${line}]..s
7df0: 65 74 20 6c 69 6e 65 20 5b 73 74 72 69 6e 67 20  et line [string 
7e00: 74 72 69 6d 6c 65 66 74 20 24 7b 6c 69 6e 65 7d  trimleft ${line}
7e10: 5d 0a 09 73 65 74 20 64 69 66 66 20 5b 65 78 70  ]..set diff [exp
7e20: 72 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  r [string length
7e30: 20 24 6c 69 6e 65 5d 20 2d 20 24 6f 6c 64 6c 65   $line] - $oldle
7e40: 6e 5d 0a 09 69 6e 63 72 20 73 74 61 72 74 20 24  n]..incr start $
7e50: 64 69 66 66 0a 09 69 6e 63 72 20 65 6e 64 20 24  diff..incr end $
7e60: 64 69 66 66 0a 0a 09 73 65 74 20 63 68 61 72 20  diff...set char 
7e70: 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 7b  [string index ${
7e80: 6c 69 6e 65 7d 20 30 5d 0a 09 69 66 20 7b 7b 5b  line} 0]..if {{[
7e90: 7d 20 21 3d 20 24 7b 63 68 61 72 7d 20 26 26 20  } != ${char} && 
7ea0: 7b 24 7d 20 21 3d 20 24 7b 63 68 61 72 7d 7d 20  {$} != ${char}} 
7eb0: 7b 72 65 74 75 72 6e 7d 0a 0a 09 73 65 74 20 70  {return}...set p
7ec0: 6f 73 20 30 0a 09 77 68 69 6c 65 20 7b 2d 31 20  os 0..while {-1 
7ed0: 21 3d 20 5b 73 65 74 20 69 64 78 20 5b 73 74 72  != [set idx [str
7ee0: 69 6e 67 20 66 69 72 73 74 20 7b 5d 7d 20 24 7b  ing first {]} ${
7ef0: 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 5d 5d 7d 20  line} ${pos}]]} 
7f00: 7b 0a 09 09 73 65 74 20 63 6d 64 20 5b 73 74 72  {...set cmd [str
7f10: 69 6e 67 20 72 61 6e 67 65 20 24 7b 6c 69 6e 65  ing range ${line
7f20: 7d 20 30 20 24 7b 69 64 78 7d 5d 0a 09 09 69 66  } 0 ${idx}]...if
7f30: 20 7b 5b 69 6e 66 6f 20 63 6f 6d 70 6c 65 74 65   {[info complete
7f40: 20 24 7b 63 6d 64 7d 5d 7d 20 7b 0a 09 09 09 62   ${cmd}]} {....b
7f50: 72 65 61 6b 3b 0a 09 09 7d 0a 09 09 73 65 74 20  reak;...}...set 
7f60: 70 6f 73 20 5b 65 78 70 72 20 24 7b 69 64 78 7d  pos [expr ${idx}
7f70: 20 2b 20 31 5d 0a 09 7d 0a 0a 09 69 66 20 7b 21   + 1]..}...if {!
7f80: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6d 64  [info exists cmd
7f90: 5d 7d 20 7b 72 65 74 75 72 6e 7d 0a 09 69 66 20  ]} {return}..if 
7fa0: 7b 21 5b 69 6e 66 6f 20 63 6f 6d 70 6c 65 74 65  {![info complete
7fb0: 20 24 7b 63 6d 64 7d 5d 7d 20 7b 72 65 74 75 72   ${cmd}]} {retur
7fc0: 6e 7d 0a 09 73 65 74 20 63 6d 64 20 5b 73 74 72  n}..set cmd [str
7fd0: 69 6e 67 20 72 61 6e 67 65 20 24 7b 63 6d 64 7d  ing range ${cmd}
7fe0: 20 31 20 5b 65 78 70 72 20 5b 73 74 72 69 6e 67   1 [expr [string
7ff0: 20 6c 65 6e 67 74 68 20 24 7b 63 6d 64 7d 5d 20   length ${cmd}] 
8000: 2d 20 32 5d 5d 0a 09 73 65 74 20 72 65 73 74 20  - 2]]..set rest 
8010: 5b 53 74 72 69 6e 67 20 72 61 6e 67 65 20 24 7b  [String range ${
8020: 6c 69 6e 65 7d 20 5b 65 78 70 72 20 24 7b 69 64  line} [expr ${id
8030: 78 7d 20 2b 20 31 5d 20 65 6e 64 5d 0a 0a 09 69  x} + 1] end]...i
8040: 66 20 7b 5b 63 61 74 63 68 20 5b 6c 69 73 74 20  f {[catch [list 
8050: 73 65 74 20 72 65 73 75 6c 74 20 5b 73 74 72 69  set result [stri
8060: 6e 67 20 74 72 69 6d 20 5b 65 76 61 6c 20 24 7b  ng trim [eval ${
8070: 63 6d 64 7d 5d 5d 5d 5d 7d 20 7b 72 65 74 75 72  cmd}]]]]} {retur
8080: 6e 7d 0a 0a 09 73 65 74 20 6c 69 6e 65 20 24 7b  n}...set line ${
8090: 72 65 73 75 6c 74 7d 24 7b 72 65 73 74 7d 0a 09  result}${rest}..
80a0: 73 65 74 20 64 69 66 66 20 5b 65 78 70 72 20 5b  set diff [expr [
80b0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b  string length ${
80c0: 72 65 73 75 6c 74 7d 5d 20 2d 20 28 5b 73 74 72  result}] - ([str
80d0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b 63 6d 64  ing length ${cmd
80e0: 7d 5d 20 2b 20 32 29 5d 0a 09 69 6e 63 72 20 73  }] + 2)]..incr s
80f0: 74 61 72 74 20 24 7b 64 69 66 66 7d 0a 09 69 6e  tart ${diff}..in
8100: 63 72 20 65 6e 64 20 24 7b 64 69 66 66 7d 0a 7d  cr end ${diff}.}
8110: 0a 0a 23 20 69 66 20 74 68 65 20 6c 69 6e 65 20  ..# if the line 
8120: 65 6e 74 65 72 65 64 20 73 6f 20 66 61 72 20 69  entered so far i
8130: 73 0a 23 20 25 20 70 75 74 73 20 24 62 3c 54 41  s.# % puts $b<TA
8140: 42 3e 0a 23 20 70 61 72 74 20 20 3d 3d 20 24 62  B>.# part  == $b
8150: 0a 23 20 73 74 61 72 74 20 3d 3d 20 35 0a 23 20  .# start == 5.# 
8160: 65 6e 64 20 20 20 3d 3d 20 37 0a 23 20 6c 69 6e  end   == 7.# lin
8170: 65 20 20 3d 3d 20 22 24 70 75 74 73 20 24 62 22  e  == "$puts $b"
8180: 0a 23 0a 70 72 6f 63 20 53 63 72 69 70 74 43 6f  .#.proc ScriptCo
8190: 6d 70 6c 65 74 65 72 20 7b 70 61 72 74 20 73 74  mpleter {part st
81a0: 61 72 74 20 65 6e 64 20 6c 69 6e 65 7d 20 7b 0a  art end line} {.
81b0: 0a 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20  ..# puts stderr 
81c0: 22 28 53 63 72 69 70 74 43 6f 6d 70 6c 65 74 65  "(ScriptComplete
81d0: 72 29 20 7c 24 70 61 72 74 7c 20 24 73 74 61 72  r) |$part| $star
81e0: 74 20 24 65 6e 64 20 7c 24 6c 69 6e 65 7c 22 0a  t $end |$line|".
81f0: 0a 09 23 20 69 66 20 74 68 65 20 63 68 61 72 61  ..# if the chara
8200: 63 74 65 72 20 62 65 66 6f 72 65 20 74 68 65 20  cter before the 
8210: 63 75 72 73 6f 72 20 69 73 20 61 20 74 65 72 6d  cursor is a term
8220: 69 6e 61 74 69 6e 67 0a 09 23 20 71 75 6f 74 65  inating..# quote
8230: 20 61 6e 64 20 74 68 65 20 75 73 65 72 20 77 61   and the user wa
8240: 6e 74 73 20 63 6f 6d 70 6c 65 74 69 6f 6e 2c 20  nts completion, 
8250: 77 65 20 69 6e 73 65 72 74 20 61 20 77 68 69 74  we insert a whit
8260: 65 0a 09 23 20 73 70 61 63 65 20 68 65 72 65 2e  e..# space here.
8270: 0a 09 23 0a 09 73 65 74 20 63 68 61 72 20 5b 73  ..#..set char [s
8280: 74 72 69 6e 67 20 69 6e 64 65 78 20 24 6c 69 6e  tring index $lin
8290: 65 20 5b 65 78 70 72 20 24 65 6e 64 20 2d 20 31  e [expr $end - 1
82a0: 5d 5d 0a 09 69 66 20 7b 22 5c 7d 22 20 3d 3d 20  ]]..if {"\}" == 
82b0: 24 63 68 61 72 7d 20 7b 0a 09 09 61 70 70 65 6e  $char} {...appen
82c0: 64 20 24 70 61 72 74 20 22 20 22 0a 09 09 72 65  d $part " "...re
82d0: 74 75 72 6e 20 5b 6c 69 73 74 20 24 70 61 72 74  turn [list $part
82e0: 5d 0a 09 7d 0a 0a 09 69 66 20 7b 7b 24 7d 20 3d  ]..}...if {{$} =
82f0: 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20  = [string index 
8300: 24 70 61 72 74 20 30 5d 7d 20 7b 0a 0a 09 09 23  $part 0]} {....#
8310: 20 63 68 65 63 6b 20 66 6f 72 20 61 20 21 24 20   check for a !$ 
8320: 68 69 73 74 6f 72 79 20 65 76 65 6e 74 0a 09 09  history event...
8330: 23 0a 09 09 69 66 20 7b 24 73 74 61 72 74 20 3e  #...if {$start >
8340: 20 30 7d 20 7b 0a 09 09 09 69 66 20 7b 7b 21 7d   0} {....if {{!}
8350: 20 3d 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65   == [string inde
8360: 78 20 24 6c 69 6e 65 20 5b 65 78 70 72 20 24 73  x $line [expr $s
8370: 74 61 72 74 20 2d 20 31 5d 5d 7d 20 7b 0a 09 09  tart - 1]]} {...
8380: 09 09 72 65 74 75 72 6e 20 22 22 0a 09 09 09 7d  ..return ""....}
8390: 0a 09 09 7d 0a 09 09 23 20 76 61 72 69 61 62 6c  ...}...# variabl
83a0: 65 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 43 68  e completion. Ch
83b0: 65 63 6b 20 66 69 72 73 74 2c 20 69 66 20 74 68  eck first, if th
83c0: 65 0a 09 09 23 20 76 61 72 69 61 62 6c 65 20 73  e...# variable s
83d0: 74 61 72 74 73 20 77 69 74 68 20 61 20 70 6c 61  tarts with a pla
83e0: 69 6e 20 60 24 27 20 6f 72 20 73 68 6f 75 6c 64  in `$' or should
83f0: 0a 09 09 23 20 62 65 20 65 6e 63 6c 6f 73 65 64  ...# be enclosed
8400: 20 69 6e 20 62 72 61 63 65 73 2e 0a 09 09 23 0a   in braces....#.
8410: 09 09 73 65 74 20 76 61 72 20 5b 53 74 72 69 6e  ..set var [Strin
8420: 67 20 72 61 6e 67 65 20 24 70 61 72 74 20 31 20  g range $part 1 
8430: 65 6e 64 5d 0a 0a 09 09 23 20 63 68 65 63 6b 20  end]....# check 
8440: 69 66 20 24 76 61 72 20 69 73 20 61 6e 20 61 72  if $var is an ar
8450: 72 61 79 20 6e 61 6d 65 2c 20 77 68 69 63 68 0a  ray name, which.
8460: 09 09 23 20 61 6c 72 65 61 64 79 20 68 61 73 20  ..# already has 
8470: 61 6c 72 65 61 64 79 20 61 20 22 28 22 20 73 6f  already a "(" so
8480: 6d 65 77 68 65 72 65 20 69 6e 73 69 64 65 2e 0a  mewhere inside..
8490: 09 09 23 0a 09 09 69 66 20 7b 22 22 20 21 3d 20  ..#...if {"" != 
84a0: 5b 73 65 74 20 76 63 20 5b 56 61 72 43 6f 6d 70  [set vc [VarComp
84b0: 6c 65 74 69 6f 6e 20 24 76 61 72 5d 5d 7d 20 7b  letion $var]]} {
84c0: 0a 09 09 09 69 66 20 7b 22 22 20 3d 3d 20 5b 6c  ....if {"" == [l
84d0: 69 6e 64 65 78 20 24 76 63 20 30 5d 7d 20 7b 0a  index $vc 0]} {.
84e0: 09 09 09 09 72 65 74 75 72 6e 20 22 5c 24 20 5b  ....return "\$ [
84f0: 6c 72 61 6e 67 65 20 24 7b 76 63 7d 20 31 20 65  lrange ${vc} 1 e
8500: 6e 64 5d 22 0a 09 09 09 7d 20 65 6c 73 65 20 7b  nd]"....} else {
8510: 0a 09 09 09 09 72 65 74 75 72 6e 20 5c 24 24 7b  .....return \$${
8520: 76 63 7d 0a 09 09 09 7d 0a 09 09 09 23 20 70 75  vc}....}....# pu
8530: 74 73 20 73 74 64 65 72 72 20 76 63 3d 7c 24 76  ts stderr vc=|$v
8540: 63 7c 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09  c|...} else {...
8550: 09 72 65 74 75 72 6e 20 22 22 0a 09 09 7d 0a 0a  .return ""...}..
8560: 09 23 20 53 43 45 4e 41 52 49 4f 3a 0a 09 23 0a  .# SCENARIO:..#.
8570: 09 23 20 25 20 70 75 74 73 20 62 6c 61 3b 20 70  .# % puts bla; p
8580: 75 74 3c 54 41 42 3e 20 24 62 0a 09 23 20 70 61  ut<TAB> $b..# pa
8590: 72 74 20 20 3d 3d 20 70 75 74 0a 09 23 20 73 74  rt  == put..# st
85a0: 61 72 74 20 3d 3d 20 31 30 0a 09 23 20 65 6e 64  art == 10..# end
85b0: 20 20 20 3d 3d 20 31 33 0a 09 23 20 6c 69 6e 65     == 13..# line
85c0: 20 20 3d 3d 20 22 70 75 74 73 20 62 6c 61 3b 20    == "puts bla; 
85d0: 70 75 74 20 24 62 22 0a 09 23 20 5b 53 70 6c 69  put $b"..# [Spli
85e0: 74 4c 69 6e 65 5d 20 2d 2d 3e 20 7b 31 20 22 20  tLine] --> {1 " 
85f0: 70 75 74 20 24 62 22 7d 20 3d 3d 20 73 75 62 0a  put $b"} == sub.
8600: 09 23 20 6e 65 77 5f 73 74 61 72 74 20 3d 20 5b  .# new_start = [
8610: 6c 69 6e 64 65 78 20 24 73 75 62 20 30 5d 20 3d  lindex $sub 0] =
8620: 3d 20 31 0a 09 23 20 6e 65 77 5f 65 6e 64 20 20  = 1..# new_end  
8630: 20 3d 20 5b 65 78 70 72 20 24 65 6e 64 20 2d 20   = [expr $end - 
8640: 28 24 73 74 61 72 74 20 2d 20 24 6e 65 77 5f 73  ($start - $new_s
8650: 74 61 72 74 29 5d 20 3d 3d 20 34 0a 09 23 20 6e  tart)] == 4..# n
8660: 65 77 5f 70 61 72 74 20 20 3d 3d 20 24 70 61 72  ew_part  == $par
8670: 74 20 3d 3d 20 70 75 74 0a 09 23 20 6e 65 77 5f  t == put..# new_
8680: 6c 69 6e 65 20 20 3d 20 5b 6c 69 6e 64 65 78 20  line  = [lindex 
8690: 24 73 75 62 20 31 5d 20 3d 3d 20 22 20 70 75 74  $sub 1] == " put
86a0: 20 24 62 22 0a 09 23 20 0a 09 7d 20 65 6c 73 65   $b"..# ..} else
86b0: 69 66 20 7b 22 22 20 21 3d 20 5b 73 65 74 20 73  if {"" != [set s
86c0: 75 62 20 5b 53 70 6c 69 74 4c 69 6e 65 20 24 73  ub [SplitLine $s
86d0: 74 61 72 74 20 24 6c 69 6e 65 5d 5d 7d 20 7b 0a  tart $line]]} {.
86e0: 0a 09 09 73 65 74 20 6e 65 77 5f 73 74 61 72 74  ...set new_start
86f0: 20 5b 6c 69 6e 64 65 78 20 24 73 75 62 20 30 5d   [lindex $sub 0]
8700: 0a 09 09 73 65 74 20 6e 65 77 5f 65 6e 64 20 5b  ...set new_end [
8710: 65 78 70 72 20 24 65 6e 64 20 2d 20 28 24 73 74  expr $end - ($st
8720: 61 72 74 20 2d 20 24 6e 65 77 5f 73 74 61 72 74  art - $new_start
8730: 29 5d 0a 09 09 73 65 74 20 6e 65 77 5f 6c 69 6e  )]...set new_lin
8740: 65 20 5b 6c 69 6e 64 65 78 20 24 73 75 62 20 31  e [lindex $sub 1
8750: 5d 0a 09 09 23 20 70 75 74 73 20 73 74 64 65 72  ]...# puts stder
8760: 72 20 22 28 53 70 6c 69 74 4c 69 6e 65 29 20 24  r "(SplitLine) $
8770: 6e 65 77 5f 73 74 61 72 74 20 24 6e 65 77 5f 65  new_start $new_e
8780: 6e 64 20 24 6e 65 77 5f 6c 69 6e 65 22 0a 09 09  nd $new_line"...
8790: 72 65 74 75 72 6e 20 5b 53 63 72 69 70 74 43 6f  return [ScriptCo
87a0: 6d 70 6c 65 74 65 72 20 24 70 61 72 74 20 24 6e  mpleter $part $n
87b0: 65 77 5f 73 74 61 72 74 20 24 6e 65 77 5f 65 6e  ew_start $new_en
87c0: 64 20 24 6e 65 77 5f 6c 69 6e 65 5d 0a 0a 09 7d  d $new_line]...}
87d0: 20 65 6c 73 65 69 66 20 7b 30 20 3d 3d 20 5b 73   elseif {0 == [s
87e0: 65 74 20 70 6f 73 20 5b 50 61 72 74 50 6f 73 69  et pos [PartPosi
87f0: 74 69 6f 6e 20 70 61 72 74 20 73 74 61 72 74 20  tion part start 
8800: 65 6e 64 20 6c 69 6e 65 5d 5d 7d 20 7b 0a 0a 09  end line]]} {...
8810: 09 23 20 58 58 58 0a 09 09 23 20 20 20 20 20 6e  .# XXX...#     n
8820: 6f 74 65 20 74 68 61 74 20 6c 69 6e 65 20 77 69  ote that line wi
8830: 6c 6c 20 62 65 20 5b 73 74 72 69 6e 67 20 74 72  ll be [string tr
8840: 69 6d 6c 65 66 74 27 65 64 5d 0a 09 09 23 20 20  imleft'ed]...#  
8850: 20 20 20 61 66 74 65 72 20 50 61 72 74 50 6f 73     after PartPos
8860: 69 74 69 6f 6e 2e 0a 09 09 23 20 58 58 58 0a 0a  ition....# XXX..
8870: 09 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20  ..# puts stderr 
8880: 22 28 50 61 72 74 50 6f 73 69 74 69 6f 6e 29 20  "(PartPosition) 
8890: 24 70 61 72 74 20 24 73 74 61 72 74 20 24 65 6e  $part $start $en
88a0: 64 20 24 6c 69 6e 65 22 0a 09 09 73 65 74 20 61  d $line"...set a
88b0: 6c 6c 20 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c  ll [CommandCompl
88c0: 65 74 69 6f 6e 20 24 7b 70 61 72 74 7d 5d 0a 09  etion ${part}]..
88d0: 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20 22  .# puts stderr "
88e0: 28 53 63 72 69 70 74 43 6f 6d 70 6c 65 74 65 72  (ScriptCompleter
88f0: 29 20 61 6c 6c 3d 24 61 6c 6c 22 0a 09 09 23 70  ) all=$all"...#p
8900: 75 74 73 20 5c 6e 6d 61 74 63 68 65 73 3d 24 6d  uts \nmatches=$m
8910: 61 74 63 68 65 73 5c 6e 0a 09 09 23 20 72 65 74  atches\n...# ret
8920: 75 72 6e 20 5b 46 6f 72 6d 61 74 20 24 61 6c 6c  urn [Format $all
8930: 20 24 70 61 72 74 5d 0a 09 09 72 65 74 75 72 6e   $part]...return
8940: 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 70   [TryFromList $p
8950: 61 72 74 20 24 61 6c 6c 5d 0a 0a 09 7d 20 65 6c  art $all]...} el
8960: 73 65 20 7b 0a 0a 09 09 23 20 74 72 79 20 74 6f  se {....# try to
8970: 20 75 73 65 20 24 70 6f 73 20 66 75 72 74 68 65   use $pos furthe
8980: 72 20 2e 2e 2e 0a 09 09 23 20 70 75 74 73 20 73  r ......# puts s
8990: 74 64 65 72 72 20 7c 24 6c 69 6e 65 7c 0a 09 09  tderr |$line|...
89a0: 23 0a 09 09 23 20 69 66 20 7b 22 2e 22 20 3d 3d  #...# if {"." ==
89b0: 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 5b   [string index [
89c0: 73 74 72 69 6e 67 20 74 72 69 6d 20 24 7b 6c 69  string trim ${li
89d0: 6e 65 7d 5d 20 30 5d 7d 20 7b 0a 09 09 23 20 09  ne}] 0]} {...# .
89e0: 73 65 74 20 61 6c 69 61 73 20 57 49 44 47 45 54  set alias WIDGET
89f0: 0a 09 09 23 20 09 73 65 74 20 6e 61 6d 65 73 70  ...# .set namesp
8a00: 63 20 22 22 3b 20 23 20 77 69 64 67 65 74 73 20  c ""; # widgets 
8a10: 61 72 65 20 61 6c 77 61 79 73 20 69 6e 20 74 68  are always in th
8a20: 65 20 67 6c 6f 62 61 6c 0a 09 09 23 20 7d 20 65  e global...# } e
8a30: 6c 73 65 20 7b 0a 0a 09 09 09 23 20 74 68 65 20  lse {.....# the 
8a40: 64 6f 75 62 6c 65 20 60 6c 69 6e 64 65 78 27 20  double `lindex' 
8a50: 73 74 72 69 70 73 20 7b 7d 20 6f 72 20 71 75 6f  strips {} or quo
8a60: 74 65 73 2e 0a 09 09 09 23 20 74 68 65 20 73 75  tes.....# the su
8a70: 62 73 74 20 65 6e 61 62 6c 65 73 20 76 61 72 69  bst enables vari
8a80: 61 62 6c 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67  ables containing
8a90: 0a 09 09 09 23 20 63 6f 6d 6d 61 6e 64 20 6e 61  ....# command na
8aa0: 6d 65 73 2e 0a 09 09 09 23 0a 09 09 09 73 65 74  mes.....#....set
8ab0: 20 61 6c 69 61 73 20 5b 75 70 6c 65 76 65 6c 20   alias [uplevel 
8ac0: 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 5c 0a 09  [info level] \..
8ad0: 09 09 73 75 62 73 74 20 5b 6c 69 6e 64 65 78 20  ..subst [lindex 
8ae0: 5b 6c 69 6e 64 65 78 20 5b 51 75 6f 74 65 51 75  [lindex [QuoteQu
8af0: 6f 74 65 73 20 24 7b 6c 69 6e 65 7d 5d 20 30 5d  otes ${line}] 0]
8b00: 20 30 5d 5d 0a 0a 09 09 09 23 20 6d 61 6b 65 20   0]].....# make 
8b10: 60 61 6c 69 61 73 27 20 61 20 66 75 6c 6c 79 20  `alias' a fully 
8b20: 71 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 2e 0a  qualified name..
8b30: 09 09 09 23 20 74 68 69 73 20 63 61 6e 20 72 61  ...# this can ra
8b40: 69 73 65 20 61 6e 20 65 72 72 6f 72 2c 20 69 66  ise an error, if
8b50: 20 61 6c 69 61 73 20 69 73 0a 09 09 09 23 20 6e   alias is....# n
8b60: 6f 20 76 61 6c 69 64 20 63 6f 6d 6d 61 6e 64 2e  o valid command.
8b70: 0a 09 09 09 23 0a 09 09 09 69 66 20 7b 5b 63 61  ....#....if {[ca
8b80: 74 63 68 20 5b 6c 69 73 74 20 73 65 74 20 61 6c  tch [list set al
8b90: 69 61 73 20 5b 6e 61 6d 65 73 70 61 63 65 20 6f  ias [namespace o
8ba0: 72 69 67 69 6e 20 24 61 6c 69 61 73 5d 5d 5d 7d  rigin $alias]]]}
8bb0: 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 20 22 22   {.....return ""
8bc0: 0a 09 09 09 7d 0a 0a 09 09 09 23 20 73 74 72 69  ....}.....# stri
8bd0: 70 20 6c 65 61 64 69 6e 67 20 3a 3a 27 73 2e 0a  p leading ::'s..
8be0: 09 09 09 23 0a 09 09 09 72 65 67 73 75 62 20 2d  ...#....regsub -
8bf0: 61 6c 6c 20 7b 5e 3a 3a 7d 20 24 61 6c 69 61 73  all {^::} $alias
8c00: 20 7b 7d 20 61 6c 69 61 73 0a 09 09 09 73 65 74   {} alias....set
8c10: 20 6e 61 6d 65 73 70 63 20 5b 6e 61 6d 65 73 70   namespc [namesp
8c20: 61 63 65 20 71 75 61 6c 69 66 69 65 72 73 20 24  ace qualifiers $
8c30: 61 6c 69 61 73 5d 0a 09 09 09 73 65 74 20 61 6c  alias]....set al
8c40: 69 61 73 20 5b 6e 61 6d 65 73 70 61 63 65 20 74  ias [namespace t
8c50: 61 69 6c 20 24 61 6c 69 61 73 5d 0a 09 09 23 20  ail $alias]...# 
8c60: 7d 0a 0a 09 09 23 20 74 72 79 20 66 69 72 73 74  }....# try first
8c70: 20 61 20 73 70 65 63 69 66 69 63 20 63 6f 6d 70   a specific comp
8c80: 6c 65 74 65 72 2c 20 74 68 65 6e 2c 20 61 6e 64  leter, then, and
8c90: 20 6f 6e 6c 79 20 74 68 65 6e 0a 09 09 23 20 74   only then...# t
8ca0: 68 65 20 74 63 6c 72 65 61 64 6c 69 6e 65 5f 63  he tclreadline_c
8cb0: 6f 6d 70 6c 65 74 65 5f 75 6e 6b 6e 6f 77 6e 2e  omplete_unknown.
8cc0: 0a 09 09 23 0a 09 09 66 6f 72 65 61 63 68 20 63  ...#...foreach c
8cd0: 6d 64 20 5b 6c 69 73 74 20 24 7b 61 6c 69 61 73  md [list ${alias
8ce0: 7d 20 74 63 6c 72 65 61 64 6c 69 6e 65 5f 63 6f  } tclreadline_co
8cf0: 6d 70 6c 65 74 65 5f 75 6e 6b 6e 6f 77 6e 5d 20  mplete_unknown] 
8d00: 7b 0a 09 09 09 23 20 70 75 74 73 20 73 74 64 65  {....# puts stde
8d10: 72 72 20 24 7b 6e 61 6d 65 73 70 63 7d 63 6f 6d  rr ${namespc}com
8d20: 70 6c 65 74 65 28 24 7b 63 6d 64 7d 29 0a 09 09  plete(${cmd})...
8d30: 09 69 66 20 7b 22 22 20 21 3d 20 5b 6e 61 6d 65  .if {"" != [name
8d40: 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 74 63 6c  space eval ::tcl
8d50: 72 65 61 64 6c 69 6e 65 3a 3a 24 7b 6e 61 6d 65  readline::${name
8d60: 73 70 63 7d 20 5c 0a 09 09 09 09 5b 6c 69 73 74  spc} \.....[list
8d70: 20 69 6e 66 6f 20 70 72 6f 63 73 20 63 6f 6d 70   info procs comp
8d80: 6c 65 74 65 28 24 7b 63 6d 64 7d 29 5d 5d 0a 09  lete(${cmd})]]..
8d90: 09 09 7d 20 7b 0a 09 09 09 09 23 20 70 75 74 73  ..} {.....# puts
8da0: 20 66 6f 75 6e 64 3d 7c 63 6f 6d 70 6c 65 74 65   found=|complete
8db0: 28 24 63 6d 64 29 7c 0a 09 09 09 09 23 20 74 6f  ($cmd)|.....# to
8dc0: 20 62 65 20 6d 6f 72 65 20 65 72 72 6f 72 2d 70   be more error-p
8dd0: 72 6f 6f 66 2c 20 77 65 20 63 68 65 63 6b 20 68  roof, we check h
8de0: 65 72 65 2c 0a 09 09 09 09 23 20 69 66 20 63 6f  ere,.....# if co
8df0: 6d 70 6c 65 74 65 28 24 63 6d 64 29 20 74 61 6b  mplete($cmd) tak
8e00: 65 73 20 65 78 61 63 74 6c 79 20 35 20 61 72 67  es exactly 5 arg
8e10: 75 6d 65 6e 74 73 2e 0a 09 09 09 09 23 0a 09 09  uments......#...
8e20: 09 09 69 66 20 7b 36 20 21 3d 20 5b 73 65 74 20  ..if {6 != [set 
8e30: 61 72 67 75 6d 65 6e 74 73 20 5b 6c 6c 65 6e 67  arguments [lleng
8e40: 74 68 20 5c 0a 09 09 09 09 09 5b 6e 61 6d 65 73  th \......[names
8e50: 70 61 63 65 20 65 76 61 6c 20 3a 3a 74 63 6c 72  pace eval ::tclr
8e60: 65 61 64 6c 69 6e 65 3a 3a 24 7b 6e 61 6d 65 73  eadline::${names
8e70: 70 63 7d 20 5c 0a 09 09 09 09 09 5b 6c 69 73 74  pc} \......[list
8e80: 20 69 6e 66 6f 20 61 72 67 73 20 63 6f 6d 70 6c   info args compl
8e90: 65 74 65 28 24 63 6d 64 29 5d 5d 5d 5d 0a 09 09  ete($cmd)]]]]...
8ea0: 09 09 7d 20 7b 0a 09 09 09 09 09 65 72 72 6f 72  ..} {......error
8eb0: 20 5b 6c 69 73 74 20 63 6f 6d 70 6c 65 74 65 28   [list complete(
8ec0: 24 7b 63 6d 64 7d 29 20 74 61 6b 65 73 20 24 7b  ${cmd}) takes ${
8ed0: 61 72 67 75 6d 65 6e 74 73 7d 20 5c 0a 09 09 09  arguments} \....
8ee0: 09 09 61 72 67 75 6d 65 6e 74 73 2c 20 62 75 74  ..arguments, but
8ef0: 20 73 68 6f 75 6c 64 20 74 61 6b 65 20 65 78 61   should take exa
8f00: 63 74 6c 79 20 36 2e 5d 0a 09 09 09 09 7d 0a 0a  ctly 6.].....}..
8f10: 09 09 09 09 23 20 72 65 6d 6f 76 65 20 6c 65 61  ....# remove lea
8f20: 64 69 6e 67 20 71 75 6f 74 65 73 0a 09 09 09 09  ding quotes.....
8f30: 23 0a 09 09 09 09 73 65 74 20 6d 6f 64 20 5b 53  #.....set mod [S
8f40: 74 72 69 70 50 72 65 66 69 78 20 24 70 61 72 74  tripPrefix $part
8f50: 5d 0a 09 09 09 09 23 20 70 75 74 73 20 73 74 64  ].....# puts std
8f60: 65 72 72 20 6d 6f 64 3d 24 6d 6f 64 0a 0a 09 09  err mod=$mod....
8f70: 09 09 69 66 20 7b 5b 63 61 74 63 68 20 5b 6c 69  ..if {[catch [li
8f80: 73 74 20 73 65 74 20 73 63 72 69 70 74 5f 72 65  st set script_re
8f90: 73 75 6c 74 20 5c 0a 09 09 09 09 09 5b 6e 61 6d  sult \......[nam
8fa0: 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 74 63  espace eval ::tc
8fb0: 6c 72 65 61 64 6c 69 6e 65 3a 3a 24 7b 6e 61 6d  lreadline::${nam
8fc0: 65 73 70 63 7d 20 5c 0a 09 09 09 09 09 5b 6c 69  espc} \......[li
8fd0: 73 74 20 63 6f 6d 70 6c 65 74 65 28 24 7b 63 6d  st complete(${cm
8fe0: 64 7d 29 20 24 70 61 72 74 20 24 73 74 61 72 74  d}) $part $start
8ff0: 20 24 65 6e 64 20 24 6c 69 6e 65 20 24 70 6f 73   $end $line $pos
9000: 20 24 6d 6f 64 5d 5d 5d 5c 0a 09 09 09 09 09 3a   $mod]]]\......:
9010: 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 65 72  :tclreadline::er
9020: 72 6f 72 4d 73 67 5d 0a 09 09 09 09 7d 20 7b 0a  rorMsg].....} {.
9030: 09 09 09 09 09 65 72 72 6f 72 20 5b 6c 69 73 74  .....error [list
9040: 20 65 72 72 6f 72 20 64 75 72 69 6e 67 20 65 76   error during ev
9050: 61 6c 75 61 74 69 6f 6e 20 6f 66 20 60 63 6f 6d  aluation of `com
9060: 70 6c 65 74 65 28 24 7b 63 6d 64 7d 29 27 5d 0a  plete(${cmd})'].
9070: 09 09 09 09 7d 0a 09 09 09 09 23 20 70 75 74 73  ....}.....# puts
9080: 20 73 74 64 65 72 72 20 5c 6e 73 63 72 69 70 74   stderr \nscript
9090: 5f 72 65 73 75 6c 74 3d 7c 24 7b 73 63 72 69 70  _result=|${scrip
90a0: 74 5f 72 65 73 75 6c 74 7d 7c 0a 09 09 09 09 69  t_result}|.....i
90b0: 66 20 7b 21 5b 73 74 72 69 6e 67 20 6c 65 6e 67  f {![string leng
90c0: 74 68 20 24 7b 73 63 72 69 70 74 5f 72 65 73 75  th ${script_resu
90d0: 6c 74 7d 5d 20 26 26 20 5c 0a 09 09 09 09 09 22  lt}] && \......"
90e0: 74 63 6c 72 65 61 64 6c 69 6e 65 5f 63 6f 6d 70  tclreadline_comp
90f0: 6c 65 74 65 5f 75 6e 6b 6e 6f 77 6e 22 20 3d 3d  lete_unknown" ==
9100: 20 24 7b 63 6d 64 7d 0a 09 09 09 09 7d 20 7b 0a   ${cmd}.....} {.
9110: 09 09 09 09 09 23 20 61 73 20 77 65 27 72 65 20  .....# as we're 
9120: 68 65 72 65 2c 20 74 68 65 20 74 63 6c 72 65 61  here, the tclrea
9130: 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65 74 65 5f 75  dline_complete_u
9140: 6e 6b 6e 6f 77 6e 0a 09 09 09 09 09 23 20 72 65  nknown......# re
9150: 74 75 72 6e 65 64 20 61 6e 20 65 6d 70 74 79 20  turned an empty 
9160: 73 74 72 69 6e 67 2e 20 46 61 6c 6c 20 74 68 72  string. Fall thr
9170: 75 20 61 6e 64 20 74 72 79 0a 09 09 09 09 09 23  u and try......#
9180: 20 66 75 72 74 68 65 72 20 66 61 6c 6c 62 61 63   further fallbac
9190: 6b 20 63 6f 6d 70 6c 65 74 65 72 73 2e 0a 09 09  k completers....
91a0: 09 09 09 23 0a 09 09 09 09 7d 20 65 6c 73 65 20  ...#.....} else 
91b0: 7b 0a 09 09 09 09 09 23 20 72 65 74 75 72 6e 20  {......# return 
91c0: 61 6c 73 6f 20 65 6d 70 74 79 20 73 74 72 69 6e  also empty strin
91d0: 67 73 2c 20 69 66 0a 09 09 09 09 09 23 20 74 68  gs, if......# th
91e0: 65 79 27 72 65 20 66 72 6f 6d 20 61 20 73 70 65  ey're from a spe
91f0: 63 69 66 69 63 20 63 6f 6d 70 6c 65 74 65 72 2e  cific completer.
9200: 0a 09 09 09 09 09 23 0a 09 09 09 09 09 54 72 61  ......#......Tra
9210: 63 65 54 65 78 74 20 73 63 72 69 70 74 5f 72 65  ceText script_re
9220: 73 75 6c 74 3d 7c 24 7b 73 63 72 69 70 74 5f 72  sult=|${script_r
9230: 65 73 75 6c 74 7d 7c 0a 09 09 09 09 09 72 65 74  esult}|......ret
9240: 75 72 6e 20 24 7b 73 63 72 69 70 74 5f 72 65 73  urn ${script_res
9250: 75 6c 74 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a  ult}.....}....}.
9260: 09 09 09 23 20 73 65 74 20 6e 61 6d 65 73 70 63  ...# set namespc
9270: 20 22 22 3b 20 23 20 6e 6f 20 71 75 61 6c 69 66   ""; # no qualif
9280: 69 65 72 73 20 66 6f 72 20 74 63 6c 72 65 61 64  iers for tclread
9290: 6c 69 6e 65 5f 63 6f 6d 70 6c 65 74 65 5f 75 6e  line_complete_un
92a0: 6b 6e 6f 77 6e 0a 09 09 7d 0a 0a 09 09 23 20 61  known...}....# a
92b0: 73 20 77 65 27 76 65 20 72 65 61 63 68 65 64 20  s we've reached 
92c0: 68 65 72 65 20 6e 6f 20 76 61 6c 69 64 20 73 70  here no valid sp
92d0: 65 63 69 66 69 63 20 63 6f 6d 70 6c 65 74 65 72  ecific completer
92e0: 0a 09 09 23 20 77 61 73 20 66 6f 75 6e 64 2e 20  ...# was found. 
92f0: 43 68 65 63 6b 2c 20 69 66 20 69 74 27 73 20 61  Check, if it's a
9300: 20 70 72 6f 63 20 61 6e 64 20 72 65 74 75 72 6e   proc and return
9310: 20 74 68 65 0a 09 09 23 20 61 72 67 75 6d 65 6e   the...# argumen
9320: 74 73 2e 0a 09 09 23 0a 09 09 69 66 20 7b 21 5b  ts....#...if {![
9330: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b  string length ${
9340: 6e 61 6d 65 73 70 63 7d 5d 7d 20 7b 0a 09 09 09  namespc}]} {....
9350: 73 65 74 20 6e 61 6d 65 73 70 63 20 3a 3a 0a 09  set namespc ::..
9360: 09 7d 0a 09 09 69 66 20 7b 5b 73 74 72 69 6e 67  .}...if {[string
9370: 20 6c 65 6e 67 74 68 20 5b 75 70 6c 65 76 65 6c   length [uplevel
9380: 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 5c 0a   [info level] \.
9390: 09 09 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61  ...namespace eva
93a0: 6c 20 24 7b 6e 61 6d 65 73 70 63 7d 20 5b 6c 69  l ${namespc} [li
93b0: 73 74 20 3a 3a 69 6e 66 6f 20 70 72 6f 63 20 24  st ::info proc $
93c0: 61 6c 69 61 73 5d 5d 5d 7d 20 7b 0a 09 09 09 73  alias]]]} {....s
93d0: 65 74 20 61 72 67 73 20 5b 75 70 6c 65 76 65 6c  et args [uplevel
93e0: 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 5c 0a   [info level] \.
93f0: 09 09 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61  ...namespace eva
9400: 6c 20 24 7b 6e 61 6d 65 73 70 63 7d 20 5b 6c 69  l ${namespc} [li
9410: 73 74 20 69 6e 66 6f 20 61 72 67 73 20 24 61 6c  st info args $al
9420: 69 61 73 5d 5d 0a 09 09 09 73 65 74 20 61 72 67  ias]]....set arg
9430: 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 20 5b   [lindex $args [
9440: 65 78 70 72 20 24 70 6f 73 20 2d 20 31 5d 5d 0a  expr $pos - 1]].
9450: 09 09 09 69 66 20 7b 22 22 20 21 3d 20 24 61 72  ...if {"" != $ar
9460: 67 20 26 26 20 22 61 72 67 73 22 20 21 3d 20 24  g && "args" != $
9470: 61 72 67 7d 20 7b 0a 09 09 09 09 69 66 20 7b 5b  arg} {.....if {[
9480: 75 70 6c 65 76 65 6c 20 5b 69 6e 66 6f 20 6c 65  uplevel [info le
9490: 76 65 6c 5d 20 6e 61 6d 65 73 70 61 63 65 20 65  vel] namespace e
94a0: 76 61 6c 20 5c 0a 09 09 09 09 09 24 7b 6e 61 6d  val \......${nam
94b0: 65 73 70 63 7d 20 5b 6c 69 73 74 20 69 6e 66 6f  espc} [list info
94c0: 20 64 65 66 61 75 6c 74 20 24 61 6c 69 61 73 20   default $alias 
94d0: 24 61 72 67 20 6a 75 6e 6b 5d 5d 7d 20 7b 0a 09  $arg junk]]} {..
94e0: 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70  ....return [Disp
94f0: 6c 61 79 48 69 6e 74 73 20 3f 24 61 72 67 3f 5d  layHints ?$arg?]
9500: 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09  .....} else {...
9510: 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  ...return [Displ
9520: 61 79 48 69 6e 74 73 20 3c 24 61 72 67 3e 5d 0a  ayHints <$arg>].
9530: 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 0a  ....}....}...}..
9540: 09 09 23 20 63 68 65 63 6b 20 69 66 20 74 68 65  ..# check if the
9550: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20 6f   command is an o
9560: 62 6a 65 63 74 20 6f 66 20 6b 6e 6f 77 6e 20 63  bject of known c
9570: 6c 61 73 73 2e 0a 09 09 23 20 0a 09 09 69 66 20  lass....# ...if 
9580: 5b 4f 62 6a 65 63 74 43 6c 61 73 73 43 6f 6d 70  [ObjectClassComp
9590: 6c 65 74 65 72 20 24 7b 70 61 72 74 7d 20 24 7b  leter ${part} ${
95a0: 73 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20 24 7b  start} ${end} ${
95b0: 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 72 65 73  line} ${pos} res
95c0: 5d 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 24 7b  ] {....return ${
95d0: 72 65 73 7d 0a 09 09 7d 0a 0a 09 09 23 20 4f 6b  res}...}....# Ok
95e0: 2c 20 61 6c 73 6f 20 6e 6f 20 70 72 6f 63 2e 20  , also no proc. 
95f0: 54 72 79 20 74 6f 20 64 6f 20 74 68 65 20 73 61  Try to do the sa
9600: 6d 65 20 61 73 20 66 6f 72 20 77 69 64 67 65 74  me as for widget
9610: 73 20 6e 6f 77 3a 0a 09 09 23 20 74 72 79 20 74  s now:...# try t
9620: 6f 20 63 6f 6d 70 6c 65 74 65 20 66 72 6f 6d 20  o complete from 
9630: 74 68 65 20 6f 70 74 69 6f 6e 20 74 61 62 6c 65  the option table
9640: 20 69 66 20 74 68 65 20 73 75 62 63 6f 6d 6d 61   if the subcomma
9650: 6e 64 0a 09 09 23 20 69 73 20 60 63 6f 6e 66 69  nd...# is `confi
9660: 67 75 72 65 27 20 6f 72 20 60 63 67 65 74 27 20  gure' or `cget' 
9670: 6f 74 68 65 72 77 69 73 65 20 74 72 79 20 74 6f  otherwise try to
9680: 20 67 65 74 20 66 75 72 74 68 65 72 0a 09 09 23   get further...#
9690: 20 73 75 62 63 6f 6d 6d 61 6e 64 73 2e 0a 09 09   subcommands....
96a0: 23 0a 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  #...return [Comp
96b0: 6c 65 74 65 46 72 6f 6d 4f 70 74 69 6f 6e 73 4f  leteFromOptionsO
96c0: 72 53 75 62 43 6d 64 73 20 5c 0a 09 09 24 7b 70  rSubCmds \...${p
96d0: 61 72 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b  art} ${start} ${
96e0: 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70  end} ${line} ${p
96f0: 6f 73 7d 5d 0a 09 7d 0a 09 65 72 72 6f 72 20 22  os}]..}..error "
9700: 7b 4e 4f 54 52 45 41 43 48 45 44 20 28 74 68 69  {NOTREACHED (thi
9710: 73 20 69 73 20 70 72 6f 62 61 62 6c 79 20 61 6e  s is probably an
9720: 20 65 72 72 6f 72 29 7d 22 0a 7d 0a 0a 0a 23 20   error)}".}...# 
9730: 65 78 70 6c 69 63 69 74 20 63 6f 6d 6d 61 6e 64  explicit command
9740: 20 63 6f 6d 70 6c 65 74 65 72 73 0a 23 0a 0a 23   completers.#..#
9750: 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
9760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9770: 2d 2d 2d 2d 2d 2d 0a 23 20 20 20 20 20 20 20 20  ------.#        
9780: 20 20 20 20 20 20 20 20 20 54 43 4c 0a 23 20 2d           TCL.# -
9790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
97a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
97b0: 2d 2d 2d 2d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  ----..proc compl
97c0: 65 74 65 28 61 66 74 65 72 29 20 7b 74 65 78 74  ete(after) {text
97d0: 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
97e0: 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20  pos mod} {..set 
97f0: 73 75 62 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e  sub [Lindex $lin
9800: 65 20 31 5d 0a 09 23 20 70 75 74 73 20 5c 6e 70  e 1]..# puts \np
9810: 6f 73 3d 24 70 6f 73 0a 09 73 77 69 74 63 68 20  os=$pos..switch 
9820: 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a  -- $pos {...1 {.
9830: 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
9840: 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
9850: 78 74 7d 20 7b 3c 6d 73 3e 20 63 61 6e 63 65 6c  xt} {<ms> cancel
9860: 20 69 64 6c 65 20 69 6e 66 6f 7d 5d 0a 09 09 7d   idle info}]...}
9870: 0a 09 09 32 20 7b 0a 09 09 09 73 77 69 74 63 68  ...2 {....switch
9880: 20 2d 2d 20 24 73 75 62 20 7b 0a 09 09 09 09 63   -- $sub {.....c
9890: 61 6e 63 65 6c 20 7b 0a 09 09 09 09 09 72 65 74  ancel {......ret
98a0: 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
98b0: 6d 4c 69 73 74 20 24 74 65 78 74 20 22 3c 73 63  mList $text "<sc
98c0: 72 69 70 74 3e 20 5b 61 66 74 65 72 20 69 6e 66  ript> [after inf
98d0: 6f 5d 22 5d 0a 09 09 09 09 7d 0a 09 09 09 09 69  o]"].....}.....i
98e0: 64 6c 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72  dle {......retur
98f0: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
9900: 3c 73 63 72 69 70 74 3e 5d 0a 09 09 09 09 7d 0a  <script>].....}.
9910: 09 09 09 09 69 6e 66 6f 20 7b 0a 09 09 09 09 09  ....info {......
9920: 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
9930: 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b  FromList $text [
9940: 61 66 74 65 72 20 69 6e 66 6f 5d 5d 0a 09 09 09  after info]]....
9950: 09 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b  .}.....default {
9960: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
9970: 48 69 6e 74 73 20 3f 73 63 72 69 70 74 3f 5d 20  Hints ?script?] 
9980: 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 64 65 66  }....}...}...def
9990: 61 75 6c 74 20 7b 0a 09 09 09 73 77 69 74 63 68  ault {....switch
99a0: 20 2d 2d 20 24 73 75 62 20 7b 0a 09 09 09 09 69   -- $sub {.....i
99b0: 6e 66 6f 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  nfo { return [Di
99c0: 73 70 6c 61 79 48 69 6e 74 73 20 7b 7d 5d 20 7d  splayHints {}] }
99d0: 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b 20 72  .....default { r
99e0: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
99f0: 6e 74 73 20 3f 73 63 72 69 70 74 3f 5d 20 7d 0a  nts ?script?] }.
9a00: 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74  ...}...}..}..ret
9a10: 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63  urn "".}..proc c
9a20: 6f 6d 70 6c 65 74 65 28 61 70 70 65 6e 64 29 20  omplete(append) 
9a30: 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
9a40: 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
9a50: 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20  .switch -- $pos 
9a60: 7b 0a 09 09 31 20 20 20 20 20 20 20 7b 20 72 65  {...1       { re
9a70: 74 75 72 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74  turn [VarComplet
9a80: 69 6f 6e 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09  ion ${text}] }..
9a90: 09 64 65 66 61 75 6c 74 20 7b 20 72 65 74 75 72  .default { retur
9aa0: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
9ab0: 3f 76 61 6c 75 65 3f 5d 20 7d 0a 09 7d 0a 09 72  ?value?] }..}..r
9ac0: 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63  eturn "".}..proc
9ad0: 20 63 6f 6d 70 6c 65 74 65 28 61 72 72 61 79 29   complete(array)
9ae0: 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
9af0: 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
9b00: 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73  ..switch -- $pos
9b10: 20 7b 0a 09 09 31 20 7b 0a 09 09 09 73 65 74 20   {...1 {....set 
9b20: 63 6d 64 73 20 7b 0a 09 09 09 09 61 6e 79 6d 6f  cmds {.....anymo
9b30: 72 65 20 64 6f 6e 65 73 65 61 72 63 68 20 65 78  re donesearch ex
9b40: 69 73 74 73 20 67 65 74 20 6e 61 6d 65 73 0a 09  ists get names..
9b50: 09 09 09 6e 65 78 74 65 6c 65 6d 65 6e 74 20 73  ...nextelement s
9b60: 65 74 20 73 69 7a 65 20 73 74 61 72 74 73 65 61  et size startsea
9b70: 72 63 68 0a 09 09 09 7d 0a 09 09 09 72 65 74 75  rch....}....retu
9b80: 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
9b90: 4c 69 73 74 20 24 74 65 78 74 20 24 63 6d 64 73  List $text $cmds
9ba0: 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73  ]...}...2 {....s
9bb0: 65 74 20 6d 61 74 63 68 65 73 20 22 22 0a 09 09  et matches ""...
9bc0: 09 23 20 73 65 74 20 76 61 72 73 20 5b 75 70 6c  .# set vars [upl
9bd0: 65 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c  evel [info level
9be0: 5d 20 69 6e 66 6f 20 76 61 72 73 20 24 7b 6d 6f  ] info vars ${mo
9bf0: 64 7d 2a 5d 0a 09 09 09 23 0a 09 09 09 23 20 62  d}*]....#....# b
9c00: 65 74 74 65 72 3a 20 74 68 69 73 20 64 69 73 70  etter: this disp
9c10: 6c 61 79 73 20 61 20 6c 69 73 74 20 6f 66 20 61  lays a list of a
9c20: 72 72 61 79 20 6e 61 6d 65 73 20 69 66 20 74 68  rray names if th
9c30: 65 0a 09 09 09 23 20 75 73 65 72 20 69 6e 74 65  e....# user inte
9c40: 72 73 20 77 69 74 68 20 73 6f 6d 65 74 68 69 6e  rs with somethin
9c50: 67 20 77 68 69 63 68 20 63 61 6e 6e 6f 74 20 62  g which cannot b
9c60: 65 20 6d 61 74 63 68 65 64 2e 0a 09 09 09 23 20  e matched.....# 
9c70: 54 68 65 20 6d 61 74 63 68 69 6e 67 20 61 67 61  The matching aga
9c80: 69 6e 73 74 20 60 74 65 78 74 27 20 69 73 20 64  inst `text' is d
9c90: 6f 6e 65 20 62 79 20 43 6f 6d 70 6c 65 74 65 46  one by CompleteF
9ca0: 72 6f 6d 4c 69 73 74 2e 0a 09 09 09 23 0a 09 09  romList.....#...
9cb0: 09 73 65 74 20 76 61 72 73 20 5b 75 70 6c 65 76  .set vars [uplev
9cc0: 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20  el [info level] 
9cd0: 69 6e 66 6f 20 76 61 72 73 5d 0a 09 09 09 66 6f  info vars]....fo
9ce0: 72 65 61 63 68 20 76 61 72 20 24 7b 76 61 72 73  reach var ${vars
9cf0: 7d 20 7b 0a 09 09 09 09 69 66 20 7b 5b 75 70 6c  } {.....if {[upl
9d00: 65 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c  evel [info level
9d10: 5d 20 61 72 72 61 79 20 65 78 69 73 74 73 20 24  ] array exists $
9d20: 7b 76 61 72 7d 5d 7d 20 7b 0a 09 09 09 09 09 6c  {var}]} {......l
9d30: 61 70 70 65 6e 64 20 6d 61 74 63 68 65 73 20 24  append matches $
9d40: 7b 76 61 72 7d 0a 09 09 09 09 7d 0a 09 09 09 7d  {var}.....}....}
9d50: 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
9d60: 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
9d70: 65 78 74 7d 20 24 7b 6d 61 74 63 68 65 73 7d 5d  ext} ${matches}]
9d80: 0a 09 09 7d 0a 09 09 33 20 7b 0a 09 09 09 73 65  ...}...3 {....se
9d90: 74 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6c  t cmd [Lindex $l
9da0: 69 6e 65 20 31 5d 0a 09 09 09 73 65 74 20 61 72  ine 1]....set ar
9db0: 72 61 79 5f 6e 61 6d 65 20 5b 4c 69 6e 64 65 78  ray_name [Lindex
9dc0: 20 24 6c 69 6e 65 20 32 5d 0a 09 09 09 73 77 69   $line 2]....swi
9dd0: 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09  tch -- $cmd {...
9de0: 09 09 67 65 74 20 2d 0a 09 09 09 09 6e 61 6d 65  ..get -.....name
9df0: 73 20 7b 0a 09 09 09 09 09 73 65 74 20 70 61 74  s {......set pat
9e00: 74 65 72 6e 20 5b 4c 69 6e 64 65 78 20 24 6c 69  tern [Lindex $li
9e10: 6e 65 20 33 5d 0a 09 09 09 09 09 73 65 74 20 6d  ne 3]......set m
9e20: 61 74 63 68 65 73 20 5b 75 70 6c 65 76 65 6c 20  atches [uplevel 
9e30: 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 5c 0a 09  [info level] \..
9e40: 09 09 09 09 61 72 72 61 79 20 6e 61 6d 65 73 20  ....array names 
9e50: 24 7b 61 72 72 61 79 5f 6e 61 6d 65 7d 20 24 7b  ${array_name} ${
9e60: 70 61 74 74 65 72 6e 7d 2a 5d 0a 09 09 09 09 09  pattern}*]......
9e70: 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 6d  if {![llength $m
9e80: 61 74 63 68 65 73 5d 7d 20 7b 0a 09 09 09 09 09  atches]} {......
9e90: 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79  .return [Display
9ea0: 48 69 6e 74 73 20 3f 70 61 74 74 65 72 6e 3f 5d  Hints ?pattern?]
9eb0: 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09  ......} else {..
9ec0: 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
9ed0: 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
9ee0: 74 65 78 74 7d 20 24 7b 6d 61 74 63 68 65 73 7d  text} ${matches}
9ef0: 5d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09  ]......}.....}..
9f00: 09 09 09 61 6e 79 6d 6f 72 65 20 2d 0a 09 09 09  ...anymore -....
9f10: 09 64 6f 6e 65 73 65 61 72 63 68 20 2d 0a 09 09  .donesearch -...
9f20: 09 09 6e 65 78 74 65 6c 65 6d 65 6e 74 20 7b 20  ..nextelement { 
9f30: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
9f40: 69 6e 74 73 20 3c 73 65 61 72 63 68 49 64 3e 5d  ints <searchId>]
9f50: 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09   }....}...}..}..
9f60: 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 23 20 70  return "".}..# p
9f70: 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 62 67 65  roc complete(bge
9f80: 72 72 6f 72 29 20 7b 74 65 78 74 20 73 74 61 72  rror) {text star
9f90: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
9fa0: 6f 64 7d 20 7b 0a 23 20 7d 0a 0a 70 72 6f 63 20  od} {.# }..proc 
9fb0: 63 6f 6d 70 6c 65 74 65 28 62 69 6e 61 72 79 29  complete(binary)
9fc0: 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
9fd0: 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
9fe0: 0a 09 73 65 74 20 63 6d 64 20 5b 4c 69 6e 64 65  ..set cmd [Linde
9ff0: 78 20 24 6c 69 6e 65 20 31 5d 0a 09 73 77 69 74  x $line 1]..swit
a000: 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31  ch -- $pos {...1
a010: 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f   {....return [Co
a020: 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
a030: 74 65 78 74 20 7b 66 6f 72 6d 61 74 20 73 63 61  text {format sca
a040: 6e 7d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09  n}]...}...2 {...
a050: 09 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64 20  .switch -- $cmd 
a060: 7b 0a 09 09 09 09 66 6f 72 6d 61 74 20 7b 20 72  {.....format { r
a070: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
a080: 6e 74 73 20 3c 66 6f 72 6d 61 74 53 74 72 69 6e  nts <formatStrin
a090: 67 3e 5d 20 7d 0a 09 09 09 09 73 63 61 6e 20 20  g>] }.....scan  
a0a0: 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
a0b0: 61 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e  ayHints <string>
a0c0: 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 33  ] }....}...}...3
a0d0: 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
a0e0: 24 63 6d 64 20 7b 0a 09 09 09 09 66 6f 72 6d 61  $cmd {.....forma
a0f0: 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  t { return [Disp
a100: 6c 61 79 48 69 6e 74 73 20 3f 61 72 67 3f 5d 20  layHints ?arg?] 
a110: 7d 0a 09 09 09 09 73 63 61 6e 20 20 20 7b 20 72  }.....scan   { r
a120: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
a130: 6e 74 73 20 3c 66 6f 72 6d 61 74 53 74 72 69 6e  nts <formatStrin
a140: 67 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  g>] }....}...}..
a150: 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 73 77  .default {....sw
a160: 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 09  itch -- $cmd {..
a170: 09 09 09 66 6f 72 6d 61 74 20 7b 20 72 65 74 75  ...format { retu
a180: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
a190: 20 3f 61 72 67 3f 5d 20 7d 0a 09 09 09 09 73 63   ?arg?] }.....sc
a1a0: 61 6e 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44  an   { return [D
a1b0: 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 76 61 72  isplayHints ?var
a1c0: 4e 61 6d 65 3f 5d 20 7d 0a 09 09 09 7d 0a 09 09  Name?] }....}...
a1d0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
a1e0: 7d 0a 0a 23 20 70 72 6f 63 20 63 6f 6d 70 6c 65  }..# proc comple
a1f0: 74 65 28 62 72 65 61 6b 29 20 7b 74 65 78 74 20  te(break) {text 
a200: 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
a210: 6f 73 20 6d 6f 64 7d 20 7b 0a 23 20 7d 0a 0a 70  os mod} {.# }..p
a220: 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 63 61 74  roc complete(cat
a230: 63 68 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  ch) {text start 
a240: 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
a250: 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  } {..switch -- $
a260: 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75  pos {...1 { retu
a270: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
a280: 20 3c 73 63 72 69 70 74 3e 5d 20 7d 0a 09 09 32   <script>] }...2
a290: 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
a2a0: 61 79 48 69 6e 74 73 20 3f 76 61 72 4e 61 6d 65  ayHints ?varName
a2b0: 3f 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  ?] }..}..return 
a2c0: 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  "".}..proc compl
a2d0: 65 74 65 28 63 64 29 20 7b 74 65 78 74 20 73 74  ete(cd) {text st
a2e0: 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
a2f0: 20 6d 6f 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20   mod} {..return 
a300: 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  "".}..proc compl
a310: 65 74 65 28 63 6c 6f 63 6b 29 20 7b 74 65 78 74  ete(clock) {text
a320: 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
a330: 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20  pos mod} {..set 
a340: 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e  cmd [Lindex $lin
a350: 65 20 31 5d 0a 09 73 77 69 74 63 68 20 2d 2d 20  e 1]..switch -- 
a360: 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09  $pos {...1 {....
a370: 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
a380: 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 7b  FromList $text {
a390: 63 6c 69 63 6b 73 20 66 6f 72 6d 61 74 20 73 63  clicks format sc
a3a0: 61 6e 20 73 65 63 6f 6e 64 73 7d 5d 0a 09 09 7d  an seconds}]...}
a3b0: 0a 09 09 32 20 7b 0a 09 09 09 73 77 69 74 63 68  ...2 {....switch
a3c0: 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 09 09 66   -- $cmd {.....f
a3d0: 6f 72 6d 61 74 20 20 7b 20 72 65 74 75 72 6e 20  ormat  { return 
a3e0: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 63  [DisplayHints <c
a3f0: 6c 6f 63 6b 56 61 6c 75 65 3e 5d 20 7d 0a 09 09  lockValue>] }...
a400: 09 09 73 63 61 6e 20 20 20 20 7b 20 72 65 74 75  ..scan    { retu
a410: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
a420: 20 3c 64 61 74 65 53 74 72 69 6e 67 3e 5d 20 7d   <dateString>] }
a430: 0a 09 09 09 09 63 6c 69 63 6b 73 20 20 2d 0a 09  .....clicks  -..
a440: 09 09 09 73 65 63 6f 6e 64 73 20 7b 7d 0a 09 09  ...seconds {}...
a450: 09 7d 0a 09 09 7d 0a 09 09 33 20 2d 0a 09 09 35  .}...}...3 -...5
a460: 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
a470: 24 63 6d 64 20 7b 0a 09 09 09 09 66 6f 72 6d 61  $cmd {.....forma
a480: 74 20 7b 0a 09 09 09 09 09 73 65 74 20 73 75 62  t {......set sub
a490: 63 6d 64 73 20 5b 52 65 6d 6f 76 65 55 73 65 64  cmds [RemoveUsed
a4a0: 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20 7b 2d  Options $line {-
a4b0: 66 6f 72 6d 61 74 20 2d 67 6d 74 7d 5d 0a 09 09  format -gmt}]...
a4c0: 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72  ...return [TryFr
a4d0: 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 24 73 75  omList $text $su
a4e0: 62 63 6d 64 73 5d 0a 09 09 09 09 7d 0a 09 09 09  bcmds].....}....
a4f0: 09 73 63 61 6e 20 7b 0a 09 09 09 09 09 73 65 74  .scan {......set
a500: 20 73 75 62 63 6d 64 73 20 5b 52 65 6d 6f 76 65   subcmds [Remove
a510: 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e  UsedOptions $lin
a520: 65 20 7b 2d 62 61 73 65 20 2d 67 6d 74 7d 5d 0a  e {-base -gmt}].
a530: 09 09 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79  .....return [Try
a540: 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 24  FromList $text $
a550: 73 75 62 63 6d 64 73 5d 0a 09 09 09 09 7d 0a 09  subcmds].....}..
a560: 09 09 09 63 6c 69 63 6b 73 20 20 2d 0a 09 09 09  ...clicks  -....
a570: 09 73 65 63 6f 6e 64 73 20 7b 7d 0a 09 09 09 7d  .seconds {}....}
a580: 0a 09 09 7d 0a 09 09 34 20 2d 0a 09 09 36 20 7b  ...}...4 -...6 {
a590: 0a 09 09 09 73 65 74 20 73 75 62 20 5b 4c 69 6e  ....set sub [Lin
a5a0: 64 65 78 20 24 6c 69 6e 65 20 5b 65 78 70 72 20  dex $line [expr 
a5b0: 24 70 6f 73 20 2d 20 31 5d 5d 0a 09 09 09 73 77  $pos - 1]]....sw
a5c0: 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 09  itch -- $cmd {..
a5d0: 09 09 09 66 6f 72 6d 61 74 20 7b 0a 09 09 09 09  ...format {.....
a5e0: 09 73 77 69 74 63 68 20 2d 2d 20 24 73 75 62 20  .switch -- $sub 
a5f0: 7b 0a 09 09 09 09 09 09 2d 66 6f 72 6d 61 74 20  {.......-format 
a600: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
a610: 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d  yHints <string>]
a620: 20 7d 0a 09 09 09 09 09 09 2d 67 6d 74 20 20 20   }.......-gmt   
a630: 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
a640: 61 79 48 69 6e 74 73 20 3c 62 6f 6f 6c 65 61 6e  ayHints <boolean
a650: 3e 5d 20 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09  >] }......}.....
a660: 7d 0a 09 09 09 09 73 63 61 6e 20 7b 0a 09 09 09  }.....scan {....
a670: 09 09 73 77 69 74 63 68 20 2d 2d 20 24 73 75 62  ..switch -- $sub
a680: 20 7b 0a 09 09 09 09 09 09 2d 62 61 73 65 20 7b   {.......-base {
a690: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
a6a0: 48 69 6e 74 73 20 3c 63 6c 6f 63 6b 56 61 6c 3e  Hints <clockVal>
a6b0: 5d 20 7d 0a 09 09 09 09 09 09 2d 67 6d 74 20 20  ] }.......-gmt  
a6c0: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
a6d0: 79 48 69 6e 74 73 20 3c 62 6f 6f 6c 65 61 6e 3e  yHints <boolean>
a6e0: 5d 20 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d  ] }......}.....}
a6f0: 0a 09 09 09 09 63 6c 69 63 6b 73 20 20 2d 0a 09  .....clicks  -..
a700: 09 09 09 73 65 63 6f 6e 64 73 20 7b 7d 0a 09 09  ...seconds {}...
a710: 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72  .}...}..}..retur
a720: 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d  n "".}..proc com
a730: 70 6c 65 74 65 28 63 6c 6f 73 65 29 20 7b 74 65  plete(close) {te
a740: 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
a750: 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77  e pos mod} {..sw
a760: 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09  itch -- $pos {..
a770: 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 43 68 61  .1 { return [Cha
a780: 6e 6e 65 6c 49 64 20 24 74 65 78 74 5d 20 7d 0a  nnelId $text] }.
a790: 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
a7a0: 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 63  .proc complete(c
a7b0: 6f 6e 63 61 74 29 20 7b 74 65 78 74 20 73 74 61  oncat) {text sta
a7c0: 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
a7d0: 6d 6f 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b  mod} {..return [
a7e0: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 61 72  DisplayHints ?ar
a7f0: 67 3f 5d 0a 7d 0a 0a 23 20 70 72 6f 63 20 63 6f  g?].}..# proc co
a800: 6d 70 6c 65 74 65 28 63 6f 6e 74 69 6e 75 65 29  mplete(continue)
a810: 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
a820: 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
a830: 0a 23 20 7d 0a 0a 23 20 70 72 6f 63 20 63 6f 6d  .# }..# proc com
a840: 70 6c 65 74 65 28 64 64 65 29 20 7b 74 65 78 74  plete(dde) {text
a850: 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
a860: 70 6f 73 20 6d 6f 64 7d 20 7b 0a 23 20 20 20 20  pos mod} {.#    
a870: 20 57 65 27 72 65 20 6e 6f 74 20 6f 6e 20 77 69   We're not on wi
a880: 6e 64 6f 7a 65 20 68 65 72 65 20 2e 2e 2e 0a 23  ndoze here ....#
a890: 20 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74   }..proc complet
a8a0: 65 28 65 6e 63 6f 64 69 6e 67 29 20 7b 74 65 78  e(encoding) {tex
a8b0: 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
a8c0: 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74   pos mod} {..set
a8d0: 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6c 69   cmd [Lindex $li
a8e0: 6e 65 20 31 5d 0a 09 73 77 69 74 63 68 20 2d 2d  ne 1]..switch --
a8f0: 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09   $pos {...1 {...
a900: 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
a910: 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
a920: 7b 63 6f 6e 76 65 72 74 66 72 6f 6d 20 63 6f 6e  {convertfrom con
a930: 76 65 72 74 74 6f 20 6e 61 6d 65 73 20 73 79 73  vertto names sys
a940: 74 65 6d 7d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a  tem}]...}...2 {.
a950: 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 63 6d  ...switch -- $cm
a960: 64 20 7b 0a 09 09 09 09 63 6f 6e 76 65 72 74 66  d {.....convertf
a970: 72 6f 6d 20 2d 0a 09 09 09 09 63 6f 6e 76 65 72  rom -.....conver
a980: 74 74 6f 20 2d 0a 09 09 09 09 73 79 73 74 65 6d  tto -.....system
a990: 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
a9a0: 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
a9b0: 20 24 7b 74 65 78 74 7d 20 5b 65 6e 63 6f 64 69   ${text} [encodi
a9c0: 6e 67 20 6e 61 6d 65 73 5d 5d 0a 09 09 09 09 7d  ng names]].....}
a9d0: 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 33 20 7b 0a  ....}...}...3 {.
a9e0: 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 63 6d  ...switch -- $cm
a9f0: 64 20 7b 0a 09 09 09 09 63 6f 6e 76 65 72 74 66  d {.....convertf
aa00: 72 6f 6d 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  rom { return [Di
aa10: 73 70 6c 61 79 48 69 6e 74 73 20 3c 64 61 74 61  splayHints <data
aa20: 3e 5d 20 7d 0a 09 09 09 09 63 6f 6e 76 65 72 74  >] }.....convert
aa30: 74 6f 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  to { return [Dis
aa40: 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 72 69 6e  playHints <strin
aa50: 67 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  g>] }....}...}..
aa60: 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
aa70: 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 65 6f  proc complete(eo
aa80: 66 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  f) {text start e
aa90: 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
aaa0: 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70   {..switch -- $p
aab0: 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72  os {...1 { retur
aac0: 6e 20 5b 49 6e 43 68 61 6e 6e 65 6c 49 64 20 24  n [InChannelId $
aad0: 74 65 78 74 5d 20 7d 0a 09 7d 0a 09 72 65 74 75  text] }..}..retu
aae0: 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f  rn "".}..proc co
aaf0: 6d 70 6c 65 74 65 28 65 72 72 6f 72 29 20 7b 74  mplete(error) {t
ab00: 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
ab10: 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
ab20: 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
ab30: 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..1 { return [Di
ab40: 73 70 6c 61 79 48 69 6e 74 73 20 3c 6d 65 73 73  splayHints <mess
ab50: 61 67 65 3e 5d 20 7d 0a 09 09 32 20 7b 20 72 65  age>] }...2 { re
ab60: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
ab70: 74 73 20 3f 69 6e 66 6f 3f 5d 20 7d 0a 09 09 33  ts ?info?] }...3
ab80: 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
ab90: 61 79 48 69 6e 74 73 20 3f 63 6f 64 65 3f 5d 20  ayHints ?code?] 
aba0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
abb0: 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
abc0: 28 65 76 61 6c 29 20 7b 74 65 78 74 20 73 74 61  (eval) {text sta
abd0: 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
abe0: 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d  mod} {..switch -
abf0: 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72  - $pos {...1 { r
ac00: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
ac10: 6e 74 73 20 3c 61 72 67 3e 5d 20 7d 0a 09 09 64  nts <arg>] }...d
ac20: 65 66 61 75 6c 74 20 7b 20 72 65 74 75 72 6e 20  efault { return 
ac30: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 61  [DisplayHints ?a
ac40: 72 67 3f 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72  rg?] }..}..retur
ac50: 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d  n "".}..proc com
ac60: 70 6c 65 74 65 28 65 78 65 63 29 20 7b 74 65 78  plete(exec) {tex
ac70: 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
ac80: 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74   pos mod} {..set
ac90: 20 72 65 64 69 72 20 5b 6c 69 73 74 20 7c 20 7c   redir [list | |
aca0: 26 20 3c 20 3c 40 20 3c 3c 20 3e 20 32 3e 20 3e  & < <@ << > 2> >
acb0: 26 20 3e 3e 20 32 3e 3e 20 3e 3e 26 20 3e 40 20  & >> 2>> >>& >@ 
acc0: 32 3e 40 20 3e 26 40 5d 0a 09 76 61 72 69 61 62  2>@ >&@]..variab
acd0: 6c 65 20 65 78 65 63 75 74 61 62 6c 65 73 0a 09  le executables..
ace0: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
acf0: 73 20 65 78 65 63 75 74 61 62 6c 65 73 5d 7d 20  s executables]} 
ad00: 7b 0a 09 09 52 65 68 61 73 68 0a 09 7d 0a 09 73  {...Rehash..}..s
ad10: 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
ad20: 09 09 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  ..1 {....return 
ad30: 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 74 65  [TryFromList $te
ad40: 78 74 20 22 2d 6b 65 65 70 6e 65 77 6c 69 6e 65  xt "-keepnewline
ad50: 20 2d 2d 20 24 65 78 65 63 75 74 61 62 6c 65 73   -- $executables
ad60: 22 5d 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c 74  "]...}...default
ad70: 20 7b 0a 09 09 09 73 65 74 20 70 72 65 76 20 5b   {....set prev [
ad80: 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73  PreviousWord ${s
ad90: 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09  tart} ${line}]..
ada0: 09 09 69 66 20 7b 22 2d 6b 65 65 70 6e 65 77 6c  ..if {"-keepnewl
adb0: 69 6e 65 22 20 3d 3d 20 24 70 72 65 76 20 26 26  ine" == $prev &&
adc0: 20 32 20 3d 3d 20 24 70 6f 73 7d 20 7b 0a 09 09   2 == $pos} {...
add0: 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f  ..return [TryFro
ade0: 6d 4c 69 73 74 20 24 74 65 78 74 20 22 2d 2d 20  mList $text "-- 
adf0: 24 65 78 65 63 75 74 61 62 6c 65 73 22 5d 0a 09  $executables"]..
ae00: 09 09 7d 0a 09 09 09 73 77 69 74 63 68 20 2d 65  ..}....switch -e
ae10: 78 61 63 74 20 2d 2d 20 24 70 72 65 76 20 7b 0a  xact -- $prev {.
ae20: 09 09 09 09 7c 20 2d 0a 09 09 09 09 7c 26 20 7b  ....| -.....|& {
ae30: 20 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d   return [TryFrom
ae40: 4c 69 73 74 20 24 74 65 78 74 20 24 65 78 65 63  List $text $exec
ae50: 75 74 61 62 6c 65 73 5d 20 7d 0a 09 09 09 09 3c  utables] }.....<
ae60: 20 2d 0a 09 09 09 09 3e 20 2d 0a 09 09 09 09 32   -.....> -.....2
ae70: 3e 20 2d 0a 09 09 09 09 3e 26 20 2d 0a 09 09 09  > -.....>& -....
ae80: 09 3e 3e 20 2d 0a 09 09 09 09 32 3e 3e 20 2d 0a  .>> -.....2>> -.
ae90: 09 09 09 09 3e 3e 26 20 7b 20 72 65 74 75 72 6e  ....>>& { return
aea0: 20 22 22 20 7d 0a 09 09 09 09 3c 40 20 2d 0a 09   "" }.....<@ -..
aeb0: 09 09 09 3e 40 20 2d 0a 09 09 09 09 32 3e 40 20  ...>@ -.....2>@ 
aec0: 2d 0a 09 09 09 09 3e 26 40 20 7b 20 72 65 74 75  -.....>&@ { retu
aed0: 72 6e 20 5b 43 68 61 6e 6e 65 6c 49 64 20 24 74  rn [ChannelId $t
aee0: 65 78 74 5d 20 7d 0a 09 09 09 09 3c 3c 20 7b 20  ext] }.....<< { 
aef0: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
af00: 69 6e 74 73 20 3c 76 61 6c 75 65 3e 5d 20 7d 0a  ints <value>] }.
af10: 09 09 09 09 64 65 66 61 75 6c 74 20 7b 20 72 65  ....default { re
af20: 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73  turn [TryFromLis
af30: 74 20 24 74 65 78 74 20 24 72 65 64 69 72 20 22  t $text $redir "
af40: 3c 3e 22 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a  <>"] }....}...}.
af50: 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
af60: 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 65  .proc complete(e
af70: 78 69 74 29 20 7b 74 65 78 74 20 73 74 61 72 74  xit) {text start
af80: 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
af90: 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20  d} {..switch -- 
afa0: 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74  $pos {...1 { ret
afb0: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
afc0: 73 20 3f 72 65 74 75 72 6e 43 6f 64 65 3f 5d 20  s ?returnCode?] 
afd0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
afe0: 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
aff0: 28 65 78 70 72 29 20 7b 74 65 78 74 20 73 74 61  (expr) {text sta
b000: 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
b010: 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 6c 65 66 74  mod} {..set left
b020: 20 24 74 65 78 74 0a 09 73 65 74 20 72 69 67 68   $text..set righ
b030: 74 20 22 22 0a 09 73 65 74 20 73 75 62 73 74 69  t ""..set substi
b040: 74 75 74 69 6f 6e 20 5b 72 65 67 65 78 70 20 2d  tution [regexp -
b050: 2d 20 7b 28 2e 2a 29 28 5c 28 2e 2a 29 7d 20 24  - {(.*)(\(.*)} $
b060: 74 65 78 74 20 61 6c 6c 20 6c 65 66 74 20 72 69  text all left ri
b070: 67 68 74 5d 3b 20 23 2d 29 0a 0a 09 73 65 74 20  ght]; #-)...set 
b080: 63 6d 64 73 20 7b 0a 09 09 2d 20 2b 20 7e 20 21  cmds {...- + ~ !
b090: 20 20 2a 20 2f 20 25 20 2b 20 2d 20 3c 3c 20 3e    * / % + - << >
b0a0: 3e 20 3c 20 3e 20 3c 3d 20 3e 3d 20 3d 3d 20 21  > < > <= >= == !
b0b0: 3d 20 26 20 5e 20 7c 20 26 26 20 7c 7c 20 3c 78  = & ^ | && || <x
b0c0: 3f 79 3a 7a 3e 0a 09 09 61 63 6f 73 20 20 20 20  ?y:z>...acos    
b0d0: 63 6f 73 20 20 20 20 20 68 79 70 6f 74 20 20 20  cos     hypot   
b0e0: 73 69 6e 68 20 0a 09 09 61 73 69 6e 20 20 20 20  sinh ...asin    
b0f0: 63 6f 73 68 20 20 20 20 6c 6f 67 20 20 20 20 20  cosh    log     
b100: 73 71 72 74 20 0a 09 09 61 74 61 6e 20 20 20 20  sqrt ...atan    
b110: 65 78 70 20 20 20 20 20 6c 6f 67 31 30 20 20 20  exp     log10   
b120: 74 61 6e 20 0a 09 09 61 74 61 6e 32 20 20 20 66  tan ...atan2   f
b130: 6c 6f 6f 72 20 20 20 70 6f 77 20 20 20 20 20 74  loor   pow     t
b140: 61 6e 68 20 0a 09 09 63 65 69 6c 20 20 20 20 66  anh ...ceil    f
b150: 6d 6f 64 20 20 20 20 73 69 6e 20 20 20 20 20 61  mod    sin     a
b160: 62 73 20 0a 09 09 64 6f 75 62 6c 65 20 20 69 6e  bs ...double  in
b170: 74 20 20 20 20 20 72 61 6e 64 20 20 20 20 72 6f  t     rand    ro
b180: 75 6e 64 20 0a 09 09 73 72 61 6e 64 20 0a 09 7d  und ...srand ..}
b190: 0a 0a 09 69 66 20 7b 22 29 22 20 3d 3d 20 5b 53  ...if {")" == [S
b1a0: 74 72 69 6e 67 20 69 6e 64 65 78 20 24 74 65 78  tring index $tex
b1b0: 74 20 65 6e 64 5d 20 26 26 20 2d 31 20 21 3d 20  t end] && -1 != 
b1c0: 5b 6c 73 65 61 72 63 68 20 24 63 6d 64 73 20 24  [lsearch $cmds $
b1d0: 6c 65 66 74 5d 7d 20 7b 0a 09 09 72 65 74 75 72  left]} {...retur
b1e0: 6e 20 22 24 74 65 78 74 20 22 3b 20 23 20 61 70  n "$text "; # ap
b1f0: 70 65 6e 64 20 61 20 73 70 61 63 65 20 61 66 74  pend a space aft
b200: 65 72 20 61 20 63 6c 6f 73 69 6e 67 20 27 29 27  er a closing ')'
b210: 0a 09 7d 0a 0a 09 73 77 69 74 63 68 20 2d 2d 20  ..}...switch -- 
b220: 24 6c 65 66 74 20 7b 0a 09 09 72 61 6e 64 20 7b  $left {...rand {
b230: 20 72 65 74 75 72 6e 20 22 72 61 6e 64 28 29 20   return "rand() 
b240: 22 20 7d 0a 0a 09 09 61 62 73 20 20 2d 0a 09 09  " }....abs  -...
b250: 61 63 6f 73 20 2d 0a 09 09 61 73 69 6e 20 2d 0a  acos -...asin -.
b260: 09 09 61 74 61 6e 20 2d 0a 09 09 63 65 69 6c 20  ..atan -...ceil 
b270: 20 2d 0a 09 09 63 6f 73 20 2d 0a 09 09 63 6f 73   -...cos -...cos
b280: 68 20 2d 0a 09 09 64 6f 75 62 6c 65 20 2d 0a 09  h -...double -..
b290: 09 65 78 70 20 2d 0a 09 09 66 6c 6f 6f 72 20 2d  .exp -...floor -
b2a0: 0a 09 09 69 6e 74 20 2d 0a 09 09 6c 6f 67 20 2d  ...int -...log -
b2b0: 0a 09 09 6c 6f 67 31 30 20 2d 0a 09 09 72 6f 75  ...log10 -...rou
b2c0: 6e 64 20 20 2d 0a 09 09 73 69 6e 20 20 2d 0a 09  nd  -...sin  -..
b2d0: 09 73 69 6e 68 20 20 2d 0a 09 09 73 71 72 74 20  .sinh  -...sqrt 
b2e0: 20 2d 0a 09 09 73 72 61 6e 64 20 20 2d 0a 09 09   -...srand  -...
b2f0: 74 61 6e 20 20 2d 0a 09 09 74 61 6e 68 20 7b 20  tan  -...tanh { 
b300: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
b310: 69 6e 74 73 20 3c 76 61 6c 75 65 3e 5d 20 7d 0a  ints <value>] }.
b320: 0a 0a 09 09 61 74 61 6e 32 20 2d 0a 09 09 66 6d  ....atan2 -...fm
b330: 6f 64 20 2d 0a 09 09 68 79 70 6f 74 20 2d 0a 09  od -...hypot -..
b340: 09 70 6f 77 20 7b 20 72 65 74 75 72 6e 20 5b 44  .pow { return [D
b350: 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 76 61 6c  isplayHints <val
b360: 75 65 3e 2c 3c 76 61 6c 75 65 3e 5d 20 7d 0a 09  ue>,<value>] }..
b370: 7d 0a 0a 09 73 65 74 20 63 6f 6d 70 6c 65 74 69  }...set completi
b380: 6f 6e 73 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74  ons [TryFromList
b390: 20 24 6c 65 66 74 20 24 63 6d 64 73 20 3c 3e 5d   $left $cmds <>]
b3a0: 0a 09 69 66 20 7b 31 20 3d 3d 20 5b 6c 6c 65 6e  ..if {1 == [llen
b3b0: 67 74 68 20 24 63 6f 6d 70 6c 65 74 69 6f 6e 73  gth $completions
b3c0: 5d 7d 20 7b 0a 09 09 69 66 20 7b 21 24 73 75 62  ]} {...if {!$sub
b3d0: 73 74 69 74 75 74 69 6f 6e 7d 20 7b 0a 09 09 09  stitution} {....
b3e0: 69 66 20 7b 22 72 61 6e 64 22 20 3d 3d 20 24 63  if {"rand" == $c
b3f0: 6f 6d 70 6c 65 74 69 6f 6e 73 7d 20 7b 0a 09 09  ompletions} {...
b400: 09 09 72 65 74 75 72 6e 20 22 72 61 6e 64 28 29  ..return "rand()
b410: 20 22 3b 20 23 20 72 61 6e 64 28 29 20 74 61 6b   "; # rand() tak
b420: 65 73 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 0a  es no arguments.
b430: 09 09 09 7d 0a 09 09 09 61 70 70 65 6e 64 20 63  ...}....append c
b440: 6f 6d 70 6c 65 74 69 6f 6e 73 20 28 3b 20 23 2d  ompletions (; #-
b450: 29 0a 09 09 09 72 65 74 75 72 6e 20 5b 6c 69 73  )....return [lis
b460: 74 20 24 63 6f 6d 70 6c 65 74 69 6f 6e 73 20 7b  t $completions {
b470: 7d 5d 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b  }]...}..} else {
b480: 0a 09 09 72 65 74 75 72 6e 20 24 63 6f 6d 70 6c  ...return $compl
b490: 65 74 69 6f 6e 73 0a 09 7d 0a 09 72 65 74 75 72  etions..}..retur
b4a0: 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d  n "".}..proc com
b4b0: 70 6c 65 74 65 28 66 62 6c 6f 63 6b 65 64 29 20  plete(fblocked) 
b4c0: 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
b4d0: 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
b4e0: 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20  .switch -- $pos 
b4f0: 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b  {...1 { return [
b500: 49 6e 43 68 61 6e 6e 65 6c 49 64 20 24 74 65 78  InChannelId $tex
b510: 74 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  t] }..}..return 
b520: 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  "".}..proc compl
b530: 65 74 65 28 66 63 6f 6e 66 69 67 75 72 65 29 20  ete(fconfigure) 
b540: 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
b550: 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
b560: 09 73 65 74 20 63 6d 64 20 5b 4c 69 6e 64 65 78  .set cmd [Lindex
b570: 20 24 6c 69 6e 65 20 31 5d 0a 09 73 77 69 74 63   $line 1]..switc
b580: 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20  h -- $pos {...1 
b590: 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 68 61  {....return [Cha
b5a0: 6e 6e 65 6c 49 64 20 24 7b 74 65 78 74 7d 5d 0a  nnelId ${text}].
b5b0: 09 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a  ..}...default {.
b5c0: 09 09 09 73 65 74 20 6f 70 74 69 6f 6e 20 5b 50  ...set option [P
b5d0: 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74  reviousWord ${st
b5e0: 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09  art} ${line}]...
b5f0: 09 73 77 69 74 63 68 20 2d 2d 20 24 6f 70 74 69  .switch -- $opti
b600: 6f 6e 20 7b 0a 09 09 09 09 2d 62 6c 6f 63 6b 69  on {.....-blocki
b610: 6e 67 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  ng {......return
b620: 20 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65 61   [CompleteBoolea
b630: 6e 20 24 7b 74 65 78 74 7d 5d 0a 09 09 09 09 7d  n ${text}].....}
b640: 0a 09 09 09 09 2d 62 75 66 66 65 72 69 6e 67 20  .....-buffering 
b650: 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  {......return [C
b660: 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
b670: 24 7b 74 65 78 74 7d 20 7b 66 75 6c 6c 20 6c 69  ${text} {full li
b680: 6e 65 20 6e 6f 6e 65 7d 5d 0a 09 09 09 09 7d 0a  ne none}].....}.
b690: 09 09 09 09 2d 62 75 66 66 65 72 73 69 7a 65 20  ....-buffersize 
b6a0: 7b 0a 09 09 09 09 09 69 66 20 7b 21 5b 6c 6c 65  {......if {![lle
b6b0: 6e 67 74 68 20 24 7b 74 65 78 74 7d 5d 7d 20 7b  ngth ${text}]} {
b6c0: 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44  .......return [D
b6d0: 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6e 65 77  isplayHints <new
b6e0: 53 69 7a 65 3e 5d 0a 09 09 09 09 09 7d 0a 09 09  Size>]......}...
b6f0: 09 09 7d 0a 09 09 09 09 2d 65 6e 63 6f 64 69 6e  ..}.....-encodin
b700: 67 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  g {......return 
b710: 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
b720: 74 20 24 7b 74 65 78 74 7d 20 5b 65 6e 63 6f 64  t ${text} [encod
b730: 69 6e 67 20 6e 61 6d 65 73 5d 5d 0a 09 09 09 09  ing names]].....
b740: 7d 0a 09 09 09 09 2d 65 6f 66 63 68 61 72 20 7b  }.....-eofchar {
b750: 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  ......return [Di
b760: 73 70 6c 61 79 48 69 6e 74 73 20 7b 5c 7b 3c 69  splayHints {\{<i
b770: 6e 43 68 61 72 3e 5c 20 3c 6f 75 74 43 68 61 72  nChar>\ <outChar
b780: 3e 5c 7d 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 09  >\}}].....}.....
b790: 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20 7b 0a 09  -translation {..
b7a0: 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
b7b0: 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
b7c0: 65 78 74 7d 20 7b 61 75 74 6f 20 62 69 6e 61 72  ext} {auto binar
b7d0: 79 20 63 72 20 63 72 6c 66 20 6c 66 7d 5d 0a 09  y cr crlf lf}]..
b7e0: 09 09 09 7d 0a 09 09 09 09 64 65 66 61 75 6c 74  ...}.....default
b7f0: 20 7b 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65   {return [Comple
b800: 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  teFromList $text
b810: 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f 76 65 55   \......[RemoveU
b820: 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65  sedOptions $line
b830: 20 7b 0a 09 09 09 09 09 2d 62 6c 6f 63 6b 69 6e   {......-blockin
b840: 67 20 2d 62 75 66 66 65 72 69 6e 67 20 2d 62 75  g -buffering -bu
b850: 66 66 65 72 73 69 7a 65 0a 09 09 09 09 09 2d 65  ffersize......-e
b860: 6e 63 6f 64 69 6e 67 20 2d 65 6f 66 63 68 61 72  ncoding -eofchar
b870: 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 7d 5d 5d   -translation}]]
b880: 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a  .....}....}...}.
b890: 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
b8a0: 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 66  .proc complete(f
b8b0: 63 6f 70 79 29 20 7b 74 65 78 74 20 73 74 61 72  copy) {text star
b8c0: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
b8d0: 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d  od} {..switch --
b8e0: 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09   $pos {...1 {...
b8f0: 09 72 65 74 75 72 6e 20 5b 49 6e 43 68 61 6e 6e  .return [InChann
b900: 65 6c 49 64 20 24 7b 74 65 78 74 7d 5d 0a 09 09  elId ${text}]...
b910: 7d 0a 09 09 32 20 7b 0a 09 09 09 72 65 74 75 72  }...2 {....retur
b920: 6e 20 5b 4f 75 74 43 68 61 6e 6e 65 6c 49 64 20  n [OutChannelId 
b930: 24 7b 74 65 78 74 7d 5d 0a 09 09 7d 0a 09 09 64  ${text}]...}...d
b940: 65 66 61 75 6c 74 20 7b 0a 09 09 09 73 65 74 20  efault {....set 
b950: 6f 70 74 69 6f 6e 20 5b 50 72 65 76 69 6f 75 73  option [Previous
b960: 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b  Word ${start} ${
b970: 6c 69 6e 65 7d 5d 0a 09 09 09 73 77 69 74 63 68  line}]....switch
b980: 20 2d 2d 20 24 6f 70 74 69 6f 6e 20 7b 0a 09 09   -- $option {...
b990: 09 09 2d 73 69 7a 65 20 20 20 20 7b 20 72 65 74  ..-size    { ret
b9a0: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
b9b0: 73 20 3c 73 69 7a 65 3e 5d 20 7d 0a 09 09 09 09  s <size>] }.....
b9c0: 2d 63 6f 6d 6d 61 6e 64 20 7b 20 72 65 74 75 72  -command { retur
b9d0: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
b9e0: 3c 63 61 6c 6c 62 61 63 6b 3e 5d 20 7d 0a 09 09  <callback>] }...
b9f0: 09 09 64 65 66 61 75 6c 74 20 20 7b 20 72 65 74  ..default  { ret
ba00: 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
ba10: 6d 4c 69 73 74 20 24 74 65 78 74 20 5c 0a 09 09  mList $text \...
ba20: 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70  ...[RemoveUsedOp
ba30: 74 69 6f 6e 73 20 24 6c 69 6e 65 20 7b 2d 73 69  tions $line {-si
ba40: 7a 65 20 2d 63 6f 6d 6d 61 6e 64 7d 5d 5d 0a 09  ze -command}]]..
ba50: 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d  ...}....}...}..}
ba60: 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70  ..return "".}..p
ba70: 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 66 69 6c  roc complete(fil
ba80: 65 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  e) {text start e
ba90: 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
baa0: 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70   {..switch -- $p
bab0: 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09 73 65  os {...1 {....se
bac0: 74 20 63 6d 64 73 20 7b 0a 09 09 09 09 61 74 69  t cmds {.....ati
bad0: 6d 65 20 61 74 74 72 69 62 75 74 65 73 20 63 6f  me attributes co
bae0: 70 79 20 64 65 6c 65 74 65 20 64 69 72 6e 61 6d  py delete dirnam
baf0: 65 20 65 78 65 63 75 74 61 62 6c 65 20 65 78 69  e executable exi
bb00: 73 74 73 0a 09 09 09 09 65 78 74 65 6e 73 69 6f  sts.....extensio
bb10: 6e 20 69 73 64 69 72 65 63 74 6f 72 79 20 69 73  n isdirectory is
bb20: 66 69 6c 65 20 6a 6f 69 6e 20 6c 73 74 61 74 20  file join lstat 
bb30: 6d 6b 64 69 72 20 6d 74 69 6d 65 0a 09 09 09 09  mkdir mtime.....
bb40: 6e 61 74 69 76 65 6e 61 6d 65 20 6f 77 6e 65 64  nativename owned
bb50: 20 70 61 74 68 74 79 70 65 20 72 65 61 64 61 62   pathtype readab
bb60: 6c 65 20 72 65 61 64 6c 69 6e 6b 20 72 65 6e 61  le readlink rena
bb70: 6d 65 0a 09 09 09 09 72 6f 6f 74 6e 61 6d 65 20  me.....rootname 
bb80: 73 69 7a 65 20 73 70 6c 69 74 20 73 74 61 74 20  size split stat 
bb90: 74 61 69 6c 20 74 79 70 65 20 76 6f 6c 75 6d 65  tail type volume
bba0: 73 20 77 72 69 74 61 62 6c 65 0a 09 09 09 7d 0a  s writable....}.
bbb0: 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72  ...return [TryFr
bbc0: 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 24 63 6d  omList $text $cm
bbd0: 64 73 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09  ds]...}...2 {...
bbe0: 09 73 65 74 20 63 6d 64 20 5b 4c 69 6e 64 65 78  .set cmd [Lindex
bbf0: 20 24 6c 69 6e 65 20 31 5d 0a 09 09 09 73 77 69   $line 1]....swi
bc00: 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09  tch -- $cmd {...
bc10: 09 09 61 74 69 6d 65 20 2d 0a 09 09 09 09 61 74  ..atime -.....at
bc20: 74 72 69 62 75 74 65 73 20 2d 0a 09 09 09 09 64  tributes -.....d
bc30: 69 72 6e 61 6d 65 20 2d 0a 09 09 09 09 65 78 65  irname -.....exe
bc40: 63 75 74 61 62 6c 65 20 2d 0a 09 09 09 09 65 78  cutable -.....ex
bc50: 69 73 74 73 20 2d 0a 09 09 09 09 65 78 74 65 6e  ists -.....exten
bc60: 73 69 6f 6e 20 2d 0a 09 09 09 09 69 73 64 69 72  sion -.....isdir
bc70: 65 63 74 6f 72 79 20 2d 0a 09 09 09 09 69 73 66  ectory -.....isf
bc80: 69 6c 65 20 2d 0a 09 09 09 09 6a 6f 69 6e 20 2d  ile -.....join -
bc90: 0a 09 09 09 09 6c 73 74 61 74 20 2d 0a 09 09 09  .....lstat -....
bca0: 09 6d 74 69 6d 65 20 2d 0a 09 09 09 09 6d 6b 64  .mtime -.....mkd
bcb0: 69 72 20 2d 0a 09 09 09 09 6e 61 74 69 76 65 6e  ir -.....nativen
bcc0: 61 6d 65 20 2d 0a 09 09 09 09 6f 77 6e 65 64 20  ame -.....owned 
bcd0: 2d 0a 09 09 09 09 70 61 74 68 74 79 70 65 20 2d  -.....pathtype -
bce0: 0a 09 09 09 09 72 65 61 64 61 62 6c 65 20 2d 0a  .....readable -.
bcf0: 09 09 09 09 72 65 61 64 6c 69 6e 6b 20 2d 0a 09  ....readlink -..
bd00: 09 09 09 72 6f 6f 74 6e 61 6d 65 20 2d 0a 09 09  ...rootname -...
bd10: 09 09 73 69 7a 65 20 2d 0a 09 09 09 09 73 70 6c  ..size -.....spl
bd20: 69 74 20 2d 0a 09 09 09 09 73 74 61 74 20 2d 0a  it -.....stat -.
bd30: 09 09 09 09 74 61 69 6c 20 2d 0a 09 09 09 09 74  ....tail -.....t
bd40: 79 70 65 20 2d 0a 09 09 09 09 76 6f 6c 75 6d 65  ype -.....volume
bd50: 73 20 2d 0a 09 09 09 09 77 72 69 74 61 62 6c 65  s -.....writable
bd60: 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 22   {......return "
bd70: 22 0a 09 09 09 09 7d 0a 0a 09 09 09 09 63 6f 70  ".....}......cop
bd80: 79 20 2d 0a 09 09 09 09 64 65 6c 65 74 65 20 2d  y -.....delete -
bd90: 0a 09 09 09 09 72 65 6e 61 6d 65 20 7b 0a 09 09  .....rename {...
bda0: 09 09 09 23 20 72 65 74 75 72 6e 20 5b 54 72 79  ...# return [Try
bdb0: 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 22  FromList $text "
bdc0: 2d 66 6f 72 63 65 20 5b 67 6c 6f 62 20 2a 5d 22  -force [glob *]"
bdd0: 5d 0a 09 09 09 09 09 23 20 74 68 69 73 20 69 73  ]......# this is
bde0: 20 6e 6f 74 20 70 65 72 66 65 63 74 2e 20 54 68   not perfect. Th
bdf0: 65 20 20 60 2d 66 6f 72 63 65 27 20 61 6e 64 20  e  `-force' and 
be00: 60 2d 2d 27 0a 09 09 09 09 09 23 20 6f 70 74 69  `--'......# opti
be10: 6f 6e 73 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20  ons will not be 
be20: 64 69 73 70 6c 61 79 65 64 2e 0a 09 09 09 09 09  displayed.......
be30: 72 65 74 75 72 6e 20 22 22 0a 09 09 09 09 7d 0a  return "".....}.
be40: 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74  ...}...}..}..ret
be50: 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63  urn "".}..proc c
be60: 6f 6d 70 6c 65 74 65 28 66 69 6c 65 65 76 65 6e  omplete(fileeven
be70: 74 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  t) {text start e
be80: 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
be90: 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70   {..switch -- $p
bea0: 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65  os {...1 {....re
beb0: 74 75 72 6e 20 5b 43 68 61 6e 6e 65 6c 49 64 20  turn [ChannelId 
bec0: 24 7b 74 65 78 74 7d 5d 0a 09 09 7d 0a 09 09 32  ${text}]...}...2
bed0: 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f   {....return [Co
bee0: 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
bef0: 7b 74 65 78 74 7d 20 7b 72 65 61 64 61 62 6c 65  {text} {readable
bf00: 20 77 72 69 74 61 62 6c 65 7d 5d 0a 09 09 7d 0a   writable}]...}.
bf10: 09 09 33 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  ..3 {....return 
bf20: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 73  [DisplayHints ?s
bf30: 63 72 69 70 74 3f 5d 0a 09 09 7d 0a 09 7d 0a 09  cript?]...}..}..
bf40: 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f  return "".}..pro
bf50: 63 20 63 6f 6d 70 6c 65 74 65 28 66 6c 75 73 68  c complete(flush
bf60: 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
bf70: 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
bf80: 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f  {..switch -- $po
bf90: 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e  s {...1 { return
bfa0: 20 5b 4f 75 74 43 68 61 6e 6e 65 6c 49 64 20 24   [OutChannelId $
bfb0: 7b 74 65 78 74 7d 5d 20 7d 0a 09 7d 0a 09 72 65  {text}] }..}..re
bfc0: 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20  turn "".}..proc 
bfd0: 63 6f 6d 70 6c 65 74 65 28 66 6f 72 29 20 7b 74  complete(for) {t
bfe0: 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
bff0: 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
c000: 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
c010: 09 09 31 20 2d 0a 09 09 32 20 2d 0a 09 09 33 20  ..1 -...2 -...3 
c020: 2d 0a 09 09 34 20 7b 0a 09 09 09 72 65 74 75 72  -...4 {....retur
c030: 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e  n [BraceOrComman
c040: 64 20 24 74 65 78 74 20 24 73 74 61 72 74 20 24  d $text $start $
c050: 65 6e 64 20 24 6c 69 6e 65 20 24 70 6f 73 20 24  end $line $pos $
c060: 6d 6f 64 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74  mod]...}..}..ret
c070: 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63  urn "".}..proc c
c080: 6f 6d 70 6c 65 74 65 28 66 6f 72 65 61 63 68 29  omplete(foreach)
c090: 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
c0a0: 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
c0b0: 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73  ..switch -- $pos
c0c0: 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20   {...1 { return 
c0d0: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 76  [DisplayHints <v
c0e0: 61 72 6e 61 6d 65 3e 5d 20 7d 0a 09 09 32 20 7b  arname>] }...2 {
c0f0: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
c100: 48 69 6e 74 73 20 3c 6c 69 73 74 3e 5d 20 7d 0a  Hints <list>] }.
c110: 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 69  ..default {....i
c120: 66 20 7b 5b 65 78 70 72 20 24 70 6f 73 20 25 20  f {[expr $pos % 
c130: 32 5d 7d 20 7b 0a 09 09 09 09 72 65 74 75 72 6e  2]} {.....return
c140: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 5b   [DisplayHints [
c150: 6c 69 73 74 20 3f 76 61 72 6e 61 6d 65 3f 20 3c  list ?varname? <
c160: 62 6f 64 79 3e 5d 5d 0a 09 09 09 7d 20 65 6c 73  body>]]....} els
c170: 65 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 20 5b  e {.....return [
c180: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 6c 69  DisplayHints ?li
c190: 73 74 3f 5d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d  st?]....}...}..}
c1a0: 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70  ..return "".}..p
c1b0: 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 66 6f 72  roc complete(for
c1c0: 6d 61 74 29 20 7b 74 65 78 74 20 73 74 61 72 74  mat) {text start
c1d0: 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
c1e0: 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20  d} {..switch -- 
c1f0: 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74  $pos {...1 { ret
c200: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
c210: 73 20 3c 66 6f 72 6d 61 74 53 74 72 69 6e 67 3e  s <formatString>
c220: 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 20  ] }...default { 
c230: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
c240: 69 6e 74 73 20 3f 61 72 67 3f 5d 20 7d 0a 09 7d  ints ?arg?] }..}
c250: 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70  ..return "".}..p
c260: 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 67 65 74  roc complete(get
c270: 73 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  s) {text start e
c280: 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
c290: 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70   {..switch -- $p
c2a0: 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72  os {...1 { retur
c2b0: 6e 20 5b 49 6e 43 68 61 6e 6e 65 6c 49 64 20 24  n [InChannelId $
c2c0: 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 32 20 7b 20  {text}] }...2 { 
c2d0: 72 65 74 75 72 6e 20 5b 56 61 72 43 6f 6d 70 6c  return [VarCompl
c2e0: 65 74 69 6f 6e 20 24 7b 74 65 78 74 7d 5d 7d 0a  etion ${text}]}.
c2f0: 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
c300: 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 67  .proc complete(g
c310: 6c 6f 62 29 20 7b 74 65 78 74 20 73 74 61 72 74  lob) {text start
c320: 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
c330: 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20  d} {..switch -- 
c340: 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09  $pos {...1 {....
c350: 23 20 54 68 69 73 20 61 6c 73 6f 20 69 73 20 6e  # This also is n
c360: 6f 74 20 70 65 72 66 65 63 74 2e 0a 09 09 09 23  ot perfect.....#
c370: 20 54 68 69 73 20 77 69 6c 6c 20 6e 6f 74 20 64   This will not d
c380: 69 73 70 6c 61 79 20 74 68 65 20 6f 70 74 69 6f  isplay the optio
c390: 6e 73 20 61 73 20 68 69 6e 74 73 21 0a 09 09 09  ns as hints!....
c3a0: 73 65 74 20 6d 61 74 63 68 65 73 20 5b 54 72 79  set matches [Try
c3b0: 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
c3c0: 20 7b 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 2d 2d   {-nocomplain --
c3d0: 7d 5d 0a 09 09 09 69 66 20 7b 5b 6c 6c 65 6e 67  }]....if {[lleng
c3e0: 74 68 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20  th [string trim 
c3f0: 24 7b 74 65 78 74 7d 5d 5d 20 26 26 20 5b 6c 6c  ${text}]] && [ll
c400: 65 6e 67 74 68 20 24 7b 6d 61 74 63 68 65 73 7d  ength ${matches}
c410: 5d 7d 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 20  ]} {.....return 
c420: 24 7b 6d 61 74 63 68 65 73 7d 0a 09 09 09 7d 0a  ${matches}....}.
c430: 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
c440: 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
c450: 74 65 28 67 6c 6f 62 61 6c 29 20 7b 74 65 78 74  te(global) {text
c460: 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
c470: 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 72 65 74 75  pos mod} {..retu
c480: 72 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f  rn [VarCompletio
c490: 6e 20 24 7b 74 65 78 74 7d 5d 0a 7d 0a 0a 70 72  n ${text}].}..pr
c4a0: 6f 63 20 63 6f 6d 70 6c 65 74 65 28 68 69 73 74  oc complete(hist
c4b0: 6f 72 79 29 20 7b 74 65 78 74 20 73 74 61 72 74  ory) {text start
c4c0: 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
c4d0: 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20  d} {..switch -- 
c4e0: 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09  $pos {...1 {....
c4f0: 73 65 74 20 63 6d 64 73 20 7b 61 64 64 20 63 68  set cmds {add ch
c500: 61 6e 67 65 20 63 6c 65 61 72 20 65 76 65 6e 74  ange clear event
c510: 20 69 6e 66 6f 20 6b 65 65 70 20 6e 65 78 74 69   info keep nexti
c520: 64 20 72 65 64 6f 7d 0a 09 09 09 72 65 74 75 72  d redo}....retur
c530: 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24  n [TryFromList $
c540: 74 65 78 74 20 24 63 6d 64 73 5d 0a 09 09 7d 0a  text $cmds]...}.
c550: 09 09 32 20 7b 0a 09 09 09 73 65 74 20 63 6d 64  ..2 {....set cmd
c560: 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31   [Lindex $line 1
c570: 5d 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  ]....switch -- $
c580: 63 6d 64 20 7b 0a 09 09 09 09 61 64 64 20 7b 20  cmd {.....add { 
c590: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
c5a0: 69 6e 74 73 20 3c 63 6f 6d 6d 61 6e 64 3e 5d 20  ints <command>] 
c5b0: 7d 0a 09 09 09 09 63 68 61 6e 67 65 20 7b 20 72  }.....change { r
c5c0: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
c5d0: 6e 74 73 20 3c 6e 65 77 56 61 6c 75 65 3e 5d 20  nts <newValue>] 
c5e0: 7d 0a 0a 09 09 09 09 69 6e 66 6f 20 2d 0a 09 09  }......info -...
c5f0: 09 09 6b 65 65 70 20 7b 20 72 65 74 75 72 6e 20  ..keep { return 
c600: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 63  [DisplayHints ?c
c610: 6f 75 6e 74 3f 5d 20 7d 0a 0a 09 09 09 09 65 76  ount?] }......ev
c620: 65 6e 74 20 2d 0a 09 09 09 09 72 65 64 6f 20 7b  ent -.....redo {
c630: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
c640: 48 69 6e 74 73 20 3f 65 76 65 6e 74 3f 5d 20 7d  Hints ?event?] }
c650: 0a 0a 09 09 09 09 63 6c 65 61 72 20 2d 0a 09 09  ......clear -...
c660: 09 09 6e 65 78 74 69 64 20 7b 20 72 65 74 75 72  ..nextid { retur
c670: 6e 20 22 22 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a  n "" }....}...}.
c680: 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
c690: 0a 23 20 2d 2d 2d 20 48 54 54 50 20 50 41 43 4b  .# --- HTTP PACK
c6a0: 41 47 45 20 2d 2d 2d 0a 0a 23 20 63 72 65 61 74  AGE ---..# creat
c6b0: 65 20 61 20 68 74 74 70 20 6e 61 6d 65 73 70 61  e a http namespa
c6c0: 63 65 20 69 6e 73 69 64 65 0a 23 20 74 63 6c 72  ce inside.# tclr
c6d0: 65 61 64 6c 69 6e 65 20 61 6e 64 20 69 6d 70 6f  eadline and impo
c6e0: 72 74 20 73 6f 6d 65 20 63 6f 6d 6d 61 6e 64 73  rt some commands
c6f0: 2e 0a 23 0a 6e 61 6d 65 73 70 61 63 65 20 65 76  ..#.namespace ev
c700: 61 6c 20 68 74 74 70 20 7b 0a 09 63 61 74 63 68  al http {..catch
c710: 20 7b 0a 09 09 6e 61 6d 65 73 70 61 63 65 20 69   {...namespace i
c720: 6d 70 6f 72 74 20 5c 0a 09 09 3a 3a 74 63 6c 72  mport \...::tclr
c730: 65 61 64 6c 69 6e 65 3a 3a 44 69 73 70 6c 61 79  eadline::Display
c740: 48 69 6e 74 73 20 3a 3a 74 63 6c 72 65 61 64 6c  Hints ::tclreadl
c750: 69 6e 65 3a 3a 50 72 65 76 69 6f 75 73 57 6f 72  ine::PreviousWor
c760: 64 20 5c 0a 09 09 3a 3a 74 63 6c 72 65 61 64 6c  d \...::tclreadl
c770: 69 6e 65 3a 3a 43 6f 6d 70 6c 65 74 65 46 72 6f  ine::CompleteFro
c780: 6d 4c 69 73 74 20 3a 3a 74 63 6c 72 65 61 64 6c  mList ::tclreadl
c790: 69 6e 65 3a 3a 43 6f 6d 6d 61 6e 64 43 6f 6d 70  ine::CommandComp
c7a0: 6c 65 74 69 6f 6e 20 5c 0a 09 09 3a 3a 74 63 6c  letion \...::tcl
c7b0: 72 65 61 64 6c 69 6e 65 3a 3a 52 65 6d 6f 76 65  readline::Remove
c7c0: 55 73 65 64 4f 70 74 69 6f 6e 73 20 3a 3a 74 63  UsedOptions ::tc
c7d0: 6c 72 65 61 64 6c 69 6e 65 3a 3a 48 6f 73 74 4c  lreadline::HostL
c7e0: 69 73 74 20 5c 0a 09 09 3a 3a 74 63 6c 72 65 61  ist \...::tclrea
c7f0: 64 6c 69 6e 65 3a 3a 43 68 61 6e 6e 65 6c 49 64  dline::ChannelId
c800: 20 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a   ::tclreadline::
c810: 4c 69 6e 64 65 78 20 5c 0a 09 09 3a 3a 74 63 6c  Lindex \...::tcl
c820: 72 65 61 64 6c 69 6e 65 3a 3a 43 6f 6d 70 6c 65  readline::Comple
c830: 74 65 42 6f 6f 6c 65 61 6e 0a 09 7d 0a 7d 0a 0a  teBoolean..}.}..
c840: 70 72 6f 63 20 68 74 74 70 3a 3a 63 6f 6d 70 6c  proc http::compl
c850: 65 74 65 28 63 6f 6e 66 69 67 29 20 7b 74 65 78  ete(config) {tex
c860: 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
c870: 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74   pos mod} {..set
c880: 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73 57   prev [PreviousW
c890: 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c  ord ${start} ${l
c8a0: 69 6e 65 7d 5d 0a 09 73 77 69 74 63 68 20 2d 2d  ine}]..switch --
c8b0: 20 24 70 72 65 76 20 7b 0a 09 09 2d 61 63 63 65   $prev {...-acce
c8c0: 70 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  pt { return [Dis
c8d0: 70 6c 61 79 48 69 6e 74 73 20 3c 6d 69 6d 65 74  playHints <mimet
c8e0: 79 70 65 73 3e 5d 20 7d 0a 09 09 2d 70 72 6f 78  ypes>] }...-prox
c8f0: 79 68 6f 73 74 20 7b 0a 09 09 09 72 65 74 75 72  yhost {....retur
c900: 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
c910: 69 73 74 20 24 74 65 78 74 20 5b 48 6f 73 74 4c  ist $text [HostL
c920: 69 73 74 5d 5d 0a 09 09 7d 0a 09 09 2d 70 72 6f  ist]]...}...-pro
c930: 78 79 70 6f 72 74 20 7b 20 72 65 74 75 72 6e 20  xyport { return 
c940: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6e  [DisplayHints <n
c950: 75 6d 62 65 72 3e 5d 20 7d 0a 09 09 2d 70 72 6f  umber>] }...-pro
c960: 78 79 66 69 6c 74 65 72 20 7b 0a 09 09 09 72 65  xyfilter {....re
c970: 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
c980: 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b 43 6f  omList $text [Co
c990: 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 20  mmandCompletion 
c9a0: 24 74 65 78 74 5d 5d 0a 09 09 7d 0a 09 09 2d 75  $text]]...}...-u
c9b0: 73 65 72 61 67 65 6e 74 20 7b 20 72 65 74 75 72  seragent { retur
c9c0: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
c9d0: 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 09 09 64 65  <string>] }...de
c9e0: 66 61 75 6c 74 20 7b 0a 09 09 09 72 65 74 75 72  fault {....retur
c9f0: 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
ca00: 69 73 74 20 24 74 65 78 74 20 5b 52 65 6d 6f 76  ist $text [Remov
ca10: 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69  eUsedOptions $li
ca20: 6e 65 20 7b 0a 09 09 09 09 2d 61 63 63 65 70 74  ne {.....-accept
ca30: 20 2d 70 72 6f 78 79 68 6f 73 74 20 2d 70 72 6f   -proxyhost -pro
ca40: 78 79 70 6f 72 74 20 2d 70 72 6f 78 79 66 69 6c  xyport -proxyfil
ca50: 74 65 72 20 2d 75 73 65 72 61 67 65 6e 74 0a 09  ter -useragent..
ca60: 09 09 7d 5d 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65  ..}]]...}..}..re
ca70: 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20  turn "".}..proc 
ca80: 68 74 74 70 3a 3a 63 6f 6d 70 6c 65 74 65 28 67  http::complete(g
ca90: 65 74 75 72 6c 29 20 7b 74 65 78 74 20 73 74 61  eturl) {text sta
caa0: 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
cab0: 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d  mod} {..switch -
cac0: 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72  - $pos {...1 { r
cad0: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
cae0: 6e 74 73 20 3c 75 72 6c 3e 5d 20 7d 0a 09 09 64  nts <url>] }...d
caf0: 65 66 61 75 6c 74 20 7b 0a 09 09 09 73 65 74 20  efault {....set 
cb00: 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73 57 6f  prev [PreviousWo
cb10: 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69  rd ${start} ${li
cb20: 6e 65 7d 5d 0a 09 09 09 73 77 69 74 63 68 20 2d  ne}]....switch -
cb30: 2d 20 24 70 72 65 76 20 7b 0a 09 09 09 09 2d 62  - $prev {.....-b
cb40: 6c 6f 63 6b 73 69 7a 65 20 7b 20 72 65 74 75 72  locksize { retur
cb50: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
cb60: 3c 73 69 7a 65 3e 5d 20 7d 0a 09 09 09 09 2d 63  <size>] }.....-c
cb70: 68 61 6e 6e 65 6c 20 7b 20 72 65 74 75 72 6e 20  hannel { return 
cb80: 5b 43 68 61 6e 6e 65 6c 49 64 20 24 7b 74 65 78  [ChannelId ${tex
cb90: 74 7d 5d 20 7d 0a 09 09 09 09 2d 63 6f 6d 6d 61  t}] }.....-comma
cba0: 6e 64 20 2d 0a 09 09 09 09 2d 68 61 6e 64 6c 65  nd -.....-handle
cbb0: 72 20 2d 0a 09 09 09 09 2d 70 72 6f 67 72 65 73  r -.....-progres
cbc0: 73 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  s {......return 
cbd0: 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
cbe0: 74 20 24 74 65 78 74 20 5b 43 6f 6d 6d 61 6e 64  t $text [Command
cbf0: 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 74 65 78 74  Completion $text
cc00: 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 2d 68 65  ]].....}.....-he
cc10: 61 64 65 72 73 20 7b 20 72 65 74 75 72 6e 20 5b  aders { return [
cc20: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6b 65  DisplayHints <ke
cc30: 79 76 61 6c 75 65 6c 69 73 74 3e 5d 20 7d 0a 09  yvaluelist>] }..
cc40: 09 09 09 2d 71 75 65 72 79 20 7b 20 72 65 74 75  ...-query { retu
cc50: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
cc60: 20 3c 71 75 65 72 79 3e 5d 20 7d 0a 09 09 09 09   <query>] }.....
cc70: 2d 74 69 6d 65 6f 75 74 20 7b 20 72 65 74 75 72  -timeout { retur
cc80: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
cc90: 3c 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 3e 5d 20  <milliseconds>] 
cca0: 7d 0a 09 09 09 09 2d 76 61 6c 69 64 61 74 65 20  }.....-validate 
ccb0: 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
ccc0: 74 65 42 6f 6f 6c 65 61 6e 20 24 74 65 78 74 5d  teBoolean $text]
ccd0: 20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b   }.....default {
cce0: 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
ccf0: 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
cd00: 74 65 78 74 20 5b 52 65 6d 6f 76 65 55 73 65 64  text [RemoveUsed
cd10: 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20 7b 0a  Options $line {.
cd20: 09 09 09 09 09 09 2d 62 6c 6f 63 6b 73 69 7a 65  ......-blocksize
cd30: 20 2d 63 68 61 6e 6e 65 6c 20 2d 63 6f 6d 6d 61   -channel -comma
cd40: 6e 64 20 2d 68 61 6e 64 6c 65 72 20 2d 68 65 61  nd -handler -hea
cd50: 64 65 72 73 0a 09 09 09 09 09 09 2d 70 72 6f 67  ders.......-prog
cd60: 72 65 73 73 20 2d 71 75 65 72 79 20 2d 74 69 6d  ress -query -tim
cd70: 65 6f 75 74 20 2d 76 61 6c 69 64 61 74 65 0a 09  eout -validate..
cd80: 09 09 09 09 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09  ....}]].....}...
cd90: 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72  .}...}..}..retur
cda0: 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 68 74 74  n "".}..proc htt
cdb0: 70 3a 3a 63 6f 6d 70 6c 65 74 65 28 66 6f 72 6d  p::complete(form
cdc0: 61 74 51 75 65 72 79 29 20 7b 74 65 78 74 20 73  atQuery) {text s
cdd0: 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
cde0: 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
cdf0: 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b   -- $pos {...1 {
ce00: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
ce10: 48 69 6e 74 73 20 3c 6b 65 79 3e 5d 20 7d 0a 09  Hints <key>] }..
ce20: 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .2 { return [Dis
ce30: 70 6c 61 79 48 69 6e 74 73 20 3c 76 61 6c 75 65  playHints <value
ce40: 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b  >] }...default {
ce50: 0a 09 09 09 73 77 69 74 63 68 20 5b 65 78 70 72  ....switch [expr
ce60: 20 24 70 6f 73 20 25 20 32 5d 20 7b 0a 09 09 09   $pos % 2] {....
ce70: 09 30 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .0 { return [Dis
ce80: 70 6c 61 79 48 69 6e 74 73 20 3f 76 61 6c 75 65  playHints ?value
ce90: 3f 5d 20 7d 0a 09 09 09 09 31 20 7b 20 72 65 74  ?] }.....1 { ret
cea0: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
ceb0: 73 20 3f 6b 65 79 3f 5d 20 7d 0a 09 09 09 7d 0a  s ?key?] }....}.
cec0: 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
ced0: 22 0a 7d 0a 0a 70 72 6f 63 20 68 74 74 70 3a 3a  ".}..proc http::
cee0: 63 6f 6d 70 6c 65 74 65 28 72 65 73 65 74 29 20  complete(reset) 
cef0: 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
cf00: 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
cf10: 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20  .switch -- $pos 
cf20: 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b  {...1 { return [
cf30: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 6f  DisplayHints <to
cf40: 6b 65 6e 3e 5d 20 7d 0a 09 09 32 20 7b 20 72 65  ken>] }...2 { re
cf50: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
cf60: 74 73 20 3f 77 68 79 3f 5d 20 7d 0a 09 7d 0a 09  ts ?why?] }..}..
cf70: 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 23 20 74  return "".}..# t
cf80: 68 65 20 75 6e 6b 6e 6f 77 6e 20 70 72 6f 63 20  he unknown proc 
cf90: 68 61 6e 64 6c 65 73 20 74 68 65 20 72 65 73 74  handles the rest
cfa0: 0a 23 0a 70 72 6f 63 20 5c 0a 68 74 74 70 3a 3a  .#.proc \.http::
cfb0: 63 6f 6d 70 6c 65 74 65 28 74 63 6c 72 65 61 64  complete(tclread
cfc0: 6c 69 6e 65 5f 63 6f 6d 70 6c 65 74 65 5f 75 6e  line_complete_un
cfd0: 6b 6e 6f 77 6e 29 20 7b 74 65 78 74 20 73 74 61  known) {text sta
cfe0: 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
cff0: 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 63 6d 64 20  mod} {..set cmd 
d000: 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 30 5d  [Lindex $line 0]
d010: 0a 09 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5e  ..regsub -all {^
d020: 2e 2a 3a 3a 7d 20 24 63 6d 64 20 22 22 20 63 6d  .*::} $cmd "" cm
d030: 64 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f  d..switch -- $po
d040: 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09 73 77 69  s {...1 {....swi
d050: 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09  tch -- $cmd {...
d060: 09 09 72 65 73 65 74 20 2d 0a 09 09 09 09 77 61  ..reset -.....wa
d070: 69 74 20 2d 0a 09 09 09 09 64 61 74 61 20 2d 0a  it -.....data -.
d080: 09 09 09 09 73 74 61 74 75 73 20 2d 0a 09 09 09  ....status -....
d090: 09 63 6f 64 65 20 2d 0a 09 09 09 09 73 69 7a 65  .code -.....size
d0a0: 20 2d 0a 09 09 09 09 63 6c 65 61 6e 75 70 20 7b   -.....cleanup {
d0b0: 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  ......return [Di
d0c0: 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 6f 6b 65  splayHints <toke
d0d0: 6e 3e 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09  n>].....}....}..
d0e0: 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22  .}..}..return ""
d0f0: 0a 7d 0a 0a 23 20 2d 2d 2d 20 45 4e 44 20 4f 46  .}..# --- END OF
d100: 20 48 54 54 50 20 50 41 43 4b 41 47 45 20 2d 2d   HTTP PACKAGE --
d110: 2d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  -..proc complete
d120: 28 69 66 29 20 7b 74 65 78 74 20 73 74 61 72 74  (if) {text start
d130: 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
d140: 64 7d 20 7b 0a 09 23 20 77 65 20 64 6f 6e 27 74  d} {..# we don't
d150: 20 6f 66 66 65 72 20 74 68 65 20 63 6f 6d 70 6c   offer the compl
d160: 65 74 69 6f 6e 20 60 74 68 65 6e 27 3a 0a 09 23  etion `then':..#
d170: 20 69 74 27 73 20 6f 70 74 69 6f 6e 61 6c 2c 20   it's optional, 
d180: 6d 6f 72 65 20 64 69 66 66 69 63 75 6c 74 20 74  more difficult t
d190: 6f 20 70 61 72 73 65 0a 09 23 20 61 6e 64 20 77  o parse..# and w
d1a0: 68 6f 20 75 73 65 73 20 69 74 20 61 6e 79 77 61  ho uses it anywa
d1b0: 79 3f 0a 09 23 0a 09 73 77 69 74 63 68 20 2d 2d  y?..#..switch --
d1c0: 20 24 70 6f 73 20 7b 0a 09 09 31 20 2d 0a 09 09   $pos {...1 -...
d1d0: 32 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 42  2 {....return [B
d1e0: 72 61 63 65 4f 72 43 6f 6d 6d 61 6e 64 20 24 74  raceOrCommand $t
d1f0: 65 78 74 20 24 73 74 61 72 74 20 24 65 6e 64 20  ext $start $end 
d200: 24 6c 69 6e 65 20 24 70 6f 73 20 24 6d 6f 64 5d  $line $pos $mod]
d210: 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b  ...}...default {
d220: 0a 09 09 09 73 65 74 20 70 72 65 76 20 5b 50 72  ....set prev [Pr
d230: 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61  eviousWord ${sta
d240: 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09 09  rt} ${line}]....
d250: 73 77 69 74 63 68 20 2d 2d 20 24 70 72 65 76 20  switch -- $prev 
d260: 7b 0a 09 09 09 09 74 68 65 6e 20 2d 0a 09 09 09  {.....then -....
d270: 09 65 6c 73 65 20 2d 0a 09 09 09 09 65 6c 73 65  .else -.....else
d280: 69 66 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  if {......return
d290: 20 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e 64   [BraceOrCommand
d2a0: 20 5c 0a 09 09 09 09 09 24 74 65 78 74 20 24 73   \......$text $s
d2b0: 74 61 72 74 20 24 65 6e 64 20 24 6c 69 6e 65 20  tart $end $line 
d2c0: 24 70 6f 73 20 24 6d 6f 64 5d 0a 09 09 09 09 7d  $pos $mod].....}
d2d0: 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  .....default {..
d2e0: 09 09 09 09 69 66 20 7b 2d 31 20 3d 3d 20 5b 6c  ....if {-1 == [l
d2f0: 73 65 61 72 63 68 20 5b 50 72 6f 70 65 72 4c 69  search [ProperLi
d300: 73 74 20 24 6c 69 6e 65 5d 20 65 6c 73 65 5d 7d  st $line] else]}
d310: 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20   {.......return 
d320: 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
d330: 74 20 24 74 65 78 74 20 7b 65 6c 73 65 20 65 6c  t $text {else el
d340: 73 65 69 66 7d 5d 0a 09 09 09 09 09 7d 0a 09 09  seif}]......}...
d350: 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a  ..}....}...}..}.
d360: 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
d370: 6f 63 20 63 6f 6d 70 6c 65 74 65 28 69 6e 63 72  oc complete(incr
d380: 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
d390: 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
d3a0: 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f  {..switch -- $po
d3b0: 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09 73 65 74  s {...1 {....set
d3c0: 20 6d 61 74 63 68 65 73 20 5b 75 70 6c 65 76 65   matches [upleve
d3d0: 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 69  l [info level] i
d3e0: 6e 66 6f 20 76 61 72 73 20 24 7b 6d 6f 64 7d 2a  nfo vars ${mod}*
d3f0: 5d 0a 09 09 09 73 65 74 20 69 6e 74 65 67 65 72  ]....set integer
d400: 73 20 22 22 0a 09 09 09 23 20 63 68 65 63 6b 20  s ""....# check 
d410: 66 6f 72 20 69 6e 74 65 67 65 72 73 0a 09 09 09  for integers....
d420: 23 0a 09 09 09 66 6f 72 65 61 63 68 20 6d 61 74  #....foreach mat
d430: 63 68 20 24 6d 61 74 63 68 65 73 20 7b 0a 09 09  ch $matches {...
d440: 09 09 69 66 20 7b 5b 75 70 6c 65 76 65 6c 20 5b  ..if {[uplevel [
d450: 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 61 72 72 61  info level] arra
d460: 79 20 65 78 69 73 74 73 20 24 6d 61 74 63 68 5d  y exists $match]
d470: 7d 20 7b 0a 09 09 09 09 09 63 6f 6e 74 69 6e 75  } {......continu
d480: 65 0a 09 09 09 09 7d 0a 09 09 09 09 69 66 20 7b  e.....}.....if {
d490: 5b 72 65 67 65 78 70 20 7b 5e 5b 30 2d 39 5d 2b  [regexp {^[0-9]+
d4a0: 24 7d 20 5b 75 70 6c 65 76 65 6c 20 5b 69 6e 66  $} [uplevel [inf
d4b0: 6f 20 6c 65 76 65 6c 5d 20 73 65 74 20 24 6d 61  o level] set $ma
d4c0: 74 63 68 5d 5d 7d 20 7b 0a 09 09 09 09 09 6c 61  tch]]} {......la
d4d0: 70 70 65 6e 64 20 69 6e 74 65 67 65 72 73 20 24  ppend integers $
d4e0: 6d 61 74 63 68 0a 09 09 09 09 7d 0a 09 09 09 7d  match.....}....}
d4f0: 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
d500: 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
d510: 65 78 74 7d 20 24 7b 69 6e 74 65 67 65 72 73 7d  ext} ${integers}
d520: 5d 0a 09 09 7d 0a 09 09 32 20 7b 20 72 65 74 75  ]...}...2 { retu
d530: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
d540: 20 3f 69 6e 63 72 65 6d 65 6e 74 3f 5d 20 7d 0a   ?increment?] }.
d550: 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
d560: 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 69  .proc complete(i
d570: 6e 66 6f 29 20 7b 74 65 78 74 20 73 74 61 72 74  nfo) {text start
d580: 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
d590: 64 7d 20 7b 0a 09 73 65 74 20 63 6d 64 20 5b 4c  d} {..set cmd [L
d5a0: 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a 09  index $line 1]..
d5b0: 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
d5c0: 0a 09 09 31 20 7b 0a 09 09 09 73 65 74 20 63 6d  ...1 {....set cm
d5d0: 64 73 20 7b 0a 09 09 09 09 61 72 67 73 20 62 6f  ds {.....args bo
d5e0: 64 79 20 63 6d 64 63 6f 75 6e 74 20 63 6f 6d 6d  dy cmdcount comm
d5f0: 61 6e 64 73 20 63 6f 6d 70 6c 65 74 65 20 64 65  ands complete de
d600: 66 61 75 6c 74 20 65 78 69 73 74 73 0a 09 09 09  fault exists....
d610: 09 67 6c 6f 62 61 6c 73 20 68 6f 73 74 6e 61 6d  .globals hostnam
d620: 65 20 6c 65 76 65 6c 20 6c 69 62 72 61 72 79 20  e level library 
d630: 6c 6f 61 64 65 64 20 6c 6f 63 61 6c 73 20 6e 61  loaded locals na
d640: 6d 65 6f 66 65 78 65 63 75 74 61 62 6c 65 0a 09  meofexecutable..
d650: 09 09 09 70 61 74 63 68 6c 65 76 65 6c 20 70 72  ...patchlevel pr
d660: 6f 63 73 20 73 63 72 69 70 74 20 73 68 61 72 65  ocs script share
d670: 64 6c 69 62 65 78 74 65 6e 73 69 6f 6e 20 74 63  dlibextension tc
d680: 6c 76 65 72 73 69 6f 6e 20 76 61 72 73 7d 0a 09  lversion vars}..
d690: 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
d6a0: 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  teFromList $text
d6b0: 20 24 63 6d 64 73 5d 0a 09 09 7d 0a 09 09 32 20   $cmds]...}...2 
d6c0: 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  {....switch -- $
d6d0: 63 6d 64 20 7b 0a 09 09 09 09 61 72 67 73 20 2d  cmd {.....args -
d6e0: 0a 09 09 09 09 62 6f 64 79 20 2d 0a 09 09 09 09  .....body -.....
d6f0: 64 65 66 61 75 6c 74 20 2d 0a 09 09 09 09 70 72  default -.....pr
d700: 6f 63 73 20 7b 20 72 65 74 75 72 6e 20 5b 63 6f  ocs { return [co
d710: 6d 70 6c 65 74 65 28 70 72 6f 63 29 20 24 7b 74  mplete(proc) ${t
d720: 65 78 74 7d 20 30 20 30 20 24 7b 6c 69 6e 65 7d  ext} 0 0 ${line}
d730: 20 31 20 24 7b 6d 6f 64 7d 5d 20 7d 0a 09 09 09   1 ${mod}] }....
d740: 09 63 6f 6d 70 6c 65 74 65 20 7b 20 72 65 74 75  .complete { retu
d750: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
d760: 20 3c 63 6f 6d 6d 61 6e 64 3e 5d 20 7d 0a 09 09   <command>] }...
d770: 09 09 6c 65 76 65 6c 20 7b 20 72 65 74 75 72 6e  ..level { return
d780: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
d790: 6e 75 6d 62 65 72 3f 5d 20 7d 0a 09 09 09 09 6c  number?] }.....l
d7a0: 6f 61 64 65 64 20 7b 20 72 65 74 75 72 6e 20 5b  oaded { return [
d7b0: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 69 6e  DisplayHints ?in
d7c0: 74 65 72 70 3f 5d 20 7d 0a 09 09 09 09 63 6f 6d  terp?] }.....com
d7d0: 6d 61 6e 64 73 20 2d 0a 09 09 09 09 65 78 69 73  mands -.....exis
d7e0: 74 73 20 2d 0a 09 09 09 09 67 6c 6f 62 61 6c 73  ts -.....globals
d7f0: 20 2d 0a 09 09 09 09 6c 6f 63 61 6c 73 20 2d 0a   -.....locals -.
d800: 09 09 09 09 76 61 72 73 20 7b 0a 09 09 09 09 09  ....vars {......
d810: 69 66 20 7b 22 65 78 69 73 74 73 22 20 3d 3d 20  if {"exists" == 
d820: 24 63 6d 64 7d 20 7b 0a 09 09 09 09 09 09 73 65  $cmd} {.......se
d830: 74 20 64 6f 20 76 61 72 73 0a 09 09 09 09 09 7d  t do vars......}
d840: 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 73 65   else {.......se
d850: 74 20 64 6f 20 24 63 6d 64 0a 09 09 09 09 09 7d  t do $cmd......}
d860: 0a 09 09 09 09 09 23 20 70 75 74 73 20 73 74 64  ......# puts std
d870: 65 72 72 20 5b 6c 69 73 74 20 63 6f 6d 70 6c 65  err [list comple
d880: 74 65 28 69 6e 66 6f 29 20 6c 65 76 65 6c 20 3d  te(info) level =
d890: 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 5d 0a 09   [info level]]..
d8a0: 09 09 09 09 72 65 74 75 72 6e 20 5c 0a 09 09 09  ....return \....
d8b0: 09 09 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  ..[CompleteFromL
d8c0: 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 75 70 6c  ist ${text} [upl
d8d0: 65 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c  evel [info level
d8e0: 5d 20 69 6e 66 6f 20 24 7b 64 6f 7d 5d 5d 0a 09  ] info ${do}]]..
d8f0: 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  ...}....}...}...
d900: 33 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d  3 {....switch --
d910: 20 24 63 6d 64 20 7b 0a 09 09 09 09 64 65 66 61   $cmd {.....defa
d920: 75 6c 74 20 7b 0a 09 09 09 09 09 73 65 74 20 70  ult {......set p
d930: 72 6f 63 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e  roc [Lindex $lin
d940: 65 20 32 5d 0a 09 09 09 09 09 72 65 74 75 72 6e  e 2]......return
d950: 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
d960: 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09  st ${text} \....
d970: 09 09 5b 75 70 6c 65 76 65 6c 20 5b 69 6e 66 6f  ..[uplevel [info
d980: 20 6c 65 76 65 6c 5d 20 69 6e 66 6f 20 61 72 67   level] info arg
d990: 73 20 24 70 72 6f 63 5d 5d 0a 09 09 09 09 7d 0a  s $proc]].....}.
d9a0: 09 09 09 09 64 65 66 61 75 6c 74 20 7b 7d 0a 09  ....default {}..
d9b0: 09 09 7d 0a 09 09 7d 0a 09 09 34 20 7b 0a 09 09  ..}...}...4 {...
d9c0: 09 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64 20  .switch -- $cmd 
d9d0: 7b 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a  {.....default {.
d9e0: 09 09 09 09 09 72 65 74 75 72 6e 20 5b 56 61 72  .....return [Var
d9f0: 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 74 65 78  Completion ${tex
da00: 74 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 64 65  t}].....}.....de
da10: 66 61 75 6c 74 20 7b 7d 0a 09 09 09 7d 0a 09 09  fault {}....}...
da20: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
da30: 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
da40: 28 69 6e 74 65 72 70 29 20 7b 74 65 78 74 20 73  (interp) {text s
da50: 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
da60: 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 63 6d  s mod} {..set cm
da70: 64 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20  d [Lindex $line 
da80: 31 5d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70  1]..switch -- $p
da90: 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09 73 65  os {...1 {....se
daa0: 74 20 63 6d 64 73 20 7b 0a 09 09 09 09 61 6c 69  t cmds {.....ali
dab0: 61 73 20 61 6c 69 61 73 65 73 20 63 72 65 61 74  as aliases creat
dac0: 65 20 64 65 6c 65 74 65 20 65 76 61 6c 20 65 78  e delete eval ex
dad0: 69 73 74 73 20 65 78 70 6f 73 65 20 68 69 64 65  ists expose hide
dae0: 20 68 69 64 64 65 6e 0a 09 09 09 09 69 6e 76 6f   hidden.....invo
daf0: 6b 65 68 69 64 64 65 6e 20 69 73 73 61 66 65 20  kehidden issafe 
db00: 6d 61 72 6b 74 72 75 73 74 65 64 20 73 68 61 72  marktrusted shar
db10: 65 20 73 6c 61 76 65 73 20 74 61 72 67 65 74 20  e slaves target 
db20: 74 72 61 6e 73 66 65 72 7d 0a 09 09 09 72 65 74  transfer}....ret
db30: 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74  urn [TryFromList
db40: 20 24 74 65 78 74 20 24 63 6d 64 73 5d 0a 09 09   $text $cmds]...
db50: 7d 0a 09 09 32 20 7b 0a 09 09 09 73 77 69 74 63  }...2 {....switc
db60: 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 0a 09 09 09  h -- $cmd {.....
db70: 09 63 72 65 61 74 65 20 7b 0a 09 09 09 09 09 73  .create {......s
db80: 65 74 20 63 6d 64 73 20 5b 52 65 6d 6f 76 65 55  et cmds [RemoveU
db90: 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e  sedOptions ${lin
dba0: 65 7d 20 7b 2d 73 61 76 65 20 2d 2d 7d 20 7b 2d  e} {-save --} {-
dbb0: 2d 7d 5d 0a 09 09 09 09 09 69 66 20 7b 5b 6c 6c  -}]......if {[ll
dbc0: 65 6e 67 74 68 20 24 63 6d 64 73 5d 7d 20 7b 0a  ength $cmds]} {.
dbd0: 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
dbe0: 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
dbf0: 74 65 78 74 20 22 24 63 6d 64 73 20 3f 70 61 74  text "$cmds ?pat
dc00: 68 3f 22 5d 0a 09 09 09 09 09 7d 20 65 6c 73 65  h?"]......} else
dc10: 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20   {.......return 
dc20: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 70  [DisplayHints ?p
dc30: 61 74 68 3f 5d 0a 09 09 09 09 09 7d 0a 09 09 09  ath?]......}....
dc40: 09 7d 0a 0a 09 09 09 09 65 76 61 6c 20 2d 0a 09  .}......eval -..
dc50: 09 09 09 65 78 69 73 74 73 20 2d 0a 09 09 09 09  ...exists -.....
dc60: 65 78 70 6f 73 65 20 2d 0a 09 09 09 09 68 69 64  expose -.....hid
dc70: 65 20 2d 0a 09 09 09 09 68 69 64 64 65 6e 20 2d  e -.....hidden -
dc80: 0a 09 09 09 09 69 6e 76 6f 6b 65 68 69 64 64 65  .....invokehidde
dc90: 6e 20 2d 0a 09 09 09 09 6d 61 72 6b 74 72 75 73  n -.....marktrus
dca0: 74 65 64 20 2d 0a 09 09 09 09 74 61 72 67 65 74  ted -.....target
dcb0: 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c   { return [Compl
dcc0: 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
dcd0: 78 74 7d 20 5b 69 6e 74 65 72 70 20 73 6c 61 76  xt} [interp slav
dce0: 65 73 5d 5d 20 7d 0a 0a 09 09 09 09 61 6c 69 61  es]] }......alia
dcf0: 73 65 73 20 2d 0a 09 09 09 09 64 65 6c 65 74 65  ses -.....delete
dd00: 20 2d 0a 09 09 09 09 69 73 73 61 66 65 20 2d 0a   -.....issafe -.
dd10: 09 09 09 09 73 6c 61 76 65 73 20 7b 20 72 65 74  ....slaves { ret
dd20: 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
dd30: 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 69  mList ${text} [i
dd40: 6e 74 65 72 70 20 73 6c 61 76 65 73 5d 5d 20 7d  nterp slaves]] }
dd50: 0a 0a 09 09 09 09 61 6c 69 61 73 20 2d 0a 09 09  ......alias -...
dd60: 09 09 73 68 61 72 65 20 2d 0a 09 09 09 09 74 72  ..share -.....tr
dd70: 61 6e 73 66 65 72 20 7b 20 72 65 74 75 72 6e 20  ansfer { return 
dd80: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73  [DisplayHints <s
dd90: 72 63 50 61 74 68 3e 5d 20 7d 0a 09 09 09 7d 0a  rcPath>] }....}.
dda0: 09 09 7d 0a 09 09 33 20 7b 0a 09 09 09 73 77 69  ..}...3 {....swi
ddb0: 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 0a 09  tch -- $cmd {...
ddc0: 09 09 09 61 6c 69 61 73 20 7b 20 72 65 74 75 72  ...alias { retur
ddd0: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
dde0: 3c 73 72 63 43 6d 64 3e 5d 20 7d 0a 0a 09 09 09  <srcCmd>] }.....
ddf0: 09 63 72 65 61 74 65 20 7b 0a 09 09 09 09 09 73  .create {......s
de00: 65 74 20 63 6d 64 73 20 5b 52 65 6d 6f 76 65 55  et cmds [RemoveU
de10: 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e  sedOptions ${lin
de20: 65 7d 20 7b 2d 73 61 76 65 20 2d 2d 7d 20 7b 2d  e} {-save --} {-
de30: 2d 7d 5d 0a 09 09 09 09 09 69 66 20 7b 5b 6c 6c  -}]......if {[ll
de40: 65 6e 67 74 68 20 24 63 6d 64 73 5d 7d 20 7b 0a  ength $cmds]} {.
de50: 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
de60: 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
de70: 74 65 78 74 20 22 24 63 6d 64 73 20 3f 70 61 74  text "$cmds ?pat
de80: 68 3f 22 5d 0a 09 09 09 09 09 7d 20 65 6c 73 65  h?"]......} else
de90: 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20   {.......return 
dea0: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 70  [DisplayHints ?p
deb0: 61 74 68 3f 5d 0a 09 09 09 09 09 7d 0a 09 09 09  ath?]......}....
dec0: 09 7d 0a 0a 09 09 09 09 65 76 61 6c 20 7b 20 72  .}......eval { r
ded0: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
dee0: 6e 74 73 20 3c 61 72 67 3e 5d 20 7d 0a 09 09 09  nts <arg>] }....
def0: 09 64 65 6c 65 74 65 20 7b 20 72 65 74 75 72 6e  .delete { return
df00: 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
df10: 73 74 20 24 7b 74 65 78 74 7d 20 5b 69 6e 74 65  st ${text} [inte
df20: 72 70 20 73 6c 61 76 65 73 5d 5d 20 7d 0a 0a 09  rp slaves]] }...
df30: 09 09 09 65 78 70 6f 73 65 20 7b 20 72 65 74 75  ...expose { retu
df40: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
df50: 20 3c 68 69 64 64 65 6e 4e 61 6d 65 3e 5d 20 7d   <hiddenName>] }
df60: 0a 09 09 09 09 68 69 64 65 20 7b 20 72 65 74 75  .....hide { retu
df70: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
df80: 20 3c 65 78 70 6f 73 65 64 43 6d 64 4e 61 6d 65   <exposedCmdName
df90: 3e 5d 20 7d 0a 0a 09 09 09 09 69 6e 76 6f 6b 65  >] }......invoke
dfa0: 68 69 64 64 65 6e 20 7b 0a 09 09 09 09 09 72 65  hidden {......re
dfb0: 74 75 72 6e 20 5c 0a 09 09 09 09 09 5b 43 6f 6d  turn \......[Com
dfc0: 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74  pleteFromList $t
dfd0: 65 78 74 20 7b 3f 2d 67 6c 6f 62 61 6c 3f 20 3c  ext {?-global? <
dfe0: 68 69 64 64 65 6e 43 6d 64 4e 61 6d 65 3e 7d 5d  hiddenCmdName>}]
dff0: 0a 09 09 09 09 7d 0a 0a 09 09 09 09 74 61 72 67  .....}......targ
e000: 65 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  et { return [Dis
e010: 70 6c 61 79 48 69 6e 74 73 20 3c 61 6c 69 61 73  playHints <alias
e020: 3e 5d 20 7d 0a 0a 09 09 09 09 65 78 69 73 74 73  >] }......exists
e030: 20 7b 7d 0a 09 09 09 09 68 69 64 64 65 6e 20 7b   {}.....hidden {
e040: 7d 0a 09 09 09 09 6d 61 72 6b 74 72 75 73 74 65  }.....marktruste
e050: 64 20 7b 7d 0a 09 09 09 09 61 6c 69 61 73 65 73  d {}.....aliases
e060: 20 7b 7d 0a 09 09 09 09 69 73 73 61 66 65 20 7b   {}.....issafe {
e070: 7d 0a 09 09 09 09 73 6c 61 76 65 73 20 7b 7d 0a  }.....slaves {}.
e080: 0a 09 09 09 09 73 68 61 72 65 20 2d 0a 09 09 09  .....share -....
e090: 09 74 72 61 6e 73 66 65 72 20 7b 72 65 74 75 72  .transfer {retur
e0a0: 6e 20 5b 43 68 61 6e 6e 65 6c 49 64 20 24 7b 74  n [ChannelId ${t
e0b0: 65 78 74 7d 5d 7d 0a 09 09 09 7d 0a 09 09 7d 0a  ext}]}....}...}.
e0c0: 09 09 34 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ..4 {....switch 
e0d0: 2d 2d 20 24 63 6d 64 20 7b 0a 0a 09 09 09 09 61  -- $cmd {......a
e0e0: 6c 69 61 73 20 7b 20 72 65 74 75 72 6e 20 5b 44  lias { return [D
e0f0: 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 72  isplayHints <tar
e100: 67 65 74 50 61 74 68 3e 5d 20 7d 0a 09 09 09 09  getPath>] }.....
e110: 65 76 61 6c 20 7b 20 72 65 74 75 72 6e 20 5b 44  eval { return [D
e120: 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 61 72 67  isplayHints ?arg
e130: 3f 5d 20 7d 0a 0a 09 09 09 09 69 6e 76 6f 6b 65  ?] }......invoke
e140: 68 69 64 64 65 6e 20 7b 0a 09 09 09 09 09 72 65  hidden {......re
e150: 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
e160: 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 3c 68  omList $text {<h
e170: 69 64 64 65 6e 43 6d 64 4e 61 6d 65 3e 20 3f 61  iddenCmdName> ?a
e180: 72 67 3f 7d 5d 0a 09 09 09 09 7d 0a 0a 09 09 09  rg?}].....}.....
e190: 09 63 72 65 61 74 65 20 7b 0a 09 09 09 09 09 73  .create {......s
e1a0: 65 74 20 63 6d 64 73 20 5b 52 65 6d 6f 76 65 55  et cmds [RemoveU
e1b0: 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e  sedOptions ${lin
e1c0: 65 7d 20 7b 2d 73 61 76 65 20 2d 2d 7d 20 7b 2d  e} {-save --} {-
e1d0: 2d 7d 5d 0a 09 09 09 09 09 69 66 20 7b 5b 6c 6c  -}]......if {[ll
e1e0: 65 6e 67 74 68 20 24 63 6d 64 73 5d 7d 20 7b 0a  ength $cmds]} {.
e1f0: 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
e200: 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
e210: 74 65 78 74 20 22 24 63 6d 64 73 20 3f 70 61 74  text "$cmds ?pat
e220: 68 3f 22 5d 0a 09 09 09 09 09 7d 20 65 6c 73 65  h?"]......} else
e230: 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20   {.......return 
e240: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 70  [DisplayHints ?p
e250: 61 74 68 3f 5d 0a 09 09 09 09 09 7d 0a 09 09 09  ath?]......}....
e260: 09 7d 0a 0a 09 09 09 09 65 78 70 6f 73 65 20 7b  .}......expose {
e270: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
e280: 48 69 6e 74 73 20 3f 65 78 70 6f 73 65 64 43 6d  Hints ?exposedCm
e290: 64 4e 61 6d 65 3f 5d 20 7d 0a 09 09 09 09 68 69  dName?] }.....hi
e2a0: 64 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  de { return [Dis
e2b0: 70 6c 61 79 48 69 6e 74 73 20 3f 68 69 64 64 65  playHints ?hidde
e2c0: 6e 43 6d 64 4e 61 6d 65 3f 5d 20 7d 0a 0a 09 09  nCmdName?] }....
e2d0: 09 09 73 68 61 72 65 20 2d 0a 09 09 09 09 74 72  ..share -.....tr
e2e0: 61 6e 73 66 65 72 20 7b 20 72 65 74 75 72 6e 20  ansfer { return 
e2f0: 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
e300: 74 20 24 7b 74 65 78 74 7d 20 5b 69 6e 74 65 72  t ${text} [inter
e310: 70 20 73 6c 61 76 65 73 5d 5d 20 7d 0a 09 09 09  p slaves]] }....
e320: 7d 0a 09 09 7d 0a 09 09 35 20 7b 0a 09 09 09 73  }...}...5 {....s
e330: 77 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a  witch -- $cmd {.
e340: 0a 09 09 09 09 61 6c 69 61 73 20 7b 20 72 65 74  .....alias { ret
e350: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
e360: 73 20 3c 74 61 72 67 65 74 43 6d 64 3e 5d 20 7d  s <targetCmd>] }
e370: 0a 09 09 09 09 69 6e 76 6f 6b 65 68 69 64 64 65  .....invokehidde
e380: 6e 20 2d 0a 09 09 09 09 65 76 61 6c 20 7b 20 72  n -.....eval { r
e390: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
e3a0: 6e 74 73 20 3f 61 72 67 3f 5d 20 7d 0a 0a 09 09  nts ?arg?] }....
e3b0: 09 09 65 78 70 6f 73 65 20 7b 20 72 65 74 75 72  ..expose { retur
e3c0: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
e3d0: 3f 65 78 70 6f 73 65 64 43 6d 64 4e 61 6d 65 3f  ?exposedCmdName?
e3e0: 5d 20 7d 0a 09 09 09 09 68 69 64 65 20 7b 20 72  ] }.....hide { r
e3f0: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
e400: 6e 74 73 20 3f 68 69 64 64 65 6e 43 6d 64 4e 61  nts ?hiddenCmdNa
e410: 6d 65 3f 5d 20 7d 0a 0a 09 09 09 09 73 68 61 72  me?] }......shar
e420: 65 20 2d 0a 09 09 09 09 74 72 61 6e 73 66 65 72  e -.....transfer
e430: 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c   { return [Compl
e440: 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
e450: 78 74 7d 20 5b 69 6e 74 65 72 70 20 73 6c 61 76  xt} [interp slav
e460: 65 73 5d 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a  es]] }....}...}.
e470: 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
e480: 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6a  .proc complete(j
e490: 6f 69 6e 29 20 7b 74 65 78 74 20 73 74 61 72 74  oin) {text start
e4a0: 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
e4b0: 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20  d} {..switch -- 
e4c0: 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74  $pos {...1 { ret
e4d0: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
e4e0: 73 20 3c 6c 69 73 74 3e 5d 20 7d 0a 09 09 32 20  s <list>] }...2 
e4f0: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
e500: 79 48 69 6e 74 73 20 3f 6a 6f 69 6e 53 74 72 69  yHints ?joinStri
e510: 6e 67 3f 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72  ng?] }..}..retur
e520: 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d  n "".}..proc com
e530: 70 6c 65 74 65 28 6c 61 70 70 65 6e 64 29 20 7b  plete(lappend) {
e540: 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
e550: 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
e560: 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
e570: 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 56  ...1 { return [V
e580: 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 74  arCompletion ${t
e590: 65 78 74 7d 5d 20 7d 0a 09 09 64 65 66 61 75 6c  ext}] }...defaul
e5a0: 74 20 7b 20 72 65 74 75 72 6e 20 5b 54 72 79 46  t { return [TryF
e5b0: 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
e5c0: 3f 76 61 6c 75 65 3f 5d 20 7d 0a 09 7d 0a 09 72  ?value?] }..}..r
e5d0: 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 23 20 74 68  eturn "".}..# th
e5e0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74  e following rout
e5f0: 69 6e 65 73 20 61 72 65 20 64 65 73 63 72 69 62  ines are describ
e600: 65 64 20 69 6e 20 74 68 65 0a 23 20 60 6c 69 62  ed in the.# `lib
e610: 72 61 72 79 27 20 6d 61 6e 20 70 61 67 65 2e 0a  rary' man page..
e620: 23 20 2d 2d 2d 20 4c 49 42 52 41 52 59 20 2d 2d  # --- LIBRARY --
e630: 2d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  -..proc complete
e640: 28 61 75 74 6f 5f 65 78 65 63 6f 6b 29 20 7b 74  (auto_execok) {t
e650: 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
e660: 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
e670: 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
e680: 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..1 { return [Di
e690: 73 70 6c 61 79 48 69 6e 74 73 20 3c 63 6d 64 3e  splayHints <cmd>
e6a0: 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ] }..}..return "
e6b0: 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
e6c0: 74 65 28 61 75 74 6f 5f 6c 6f 61 64 29 20 7b 74  te(auto_load) {t
e6d0: 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
e6e0: 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
e6f0: 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
e700: 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..1 { return [Di
e710: 73 70 6c 61 79 48 69 6e 74 73 20 3c 63 6d 64 3e  splayHints <cmd>
e720: 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ] }..}..return "
e730: 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
e740: 74 65 28 61 75 74 6f 5f 6d 6b 69 6e 64 65 78 29  te(auto_mkindex)
e750: 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
e760: 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
e770: 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73  ..switch -- $pos
e780: 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20   {...1 { return 
e790: 22 22 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b  "" }...default {
e7a0: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
e7b0: 48 69 6e 74 73 20 3f 70 61 74 74 65 72 6e 3f 5d  Hints ?pattern?]
e7c0: 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22   }..}..return ""
e7d0: 0a 7d 0a 0a 23 20 70 72 6f 63 20 63 6f 6d 70 6c  .}..# proc compl
e7e0: 65 74 65 28 61 75 74 6f 5f 72 65 73 65 74 29 20  ete(auto_reset) 
e7f0: 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
e800: 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
e810: 23 20 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  # }..proc comple
e820: 74 65 28 74 63 6c 5f 66 69 6e 64 4c 69 62 72 61  te(tcl_findLibra
e830: 72 79 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  ry) {text start 
e840: 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
e850: 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  } {..switch -- $
e860: 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75  pos {...1 { retu
e870: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
e880: 20 3c 62 61 73 65 6e 61 6d 65 3e 5d 20 7d 0a 09   <basename>] }..
e890: 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .2 { return [Dis
e8a0: 70 6c 61 79 48 69 6e 74 73 20 3c 76 65 72 73 69  playHints <versi
e8b0: 6f 6e 3e 5d 20 7d 0a 09 09 33 20 7b 20 72 65 74  on>] }...3 { ret
e8c0: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
e8d0: 73 20 3c 70 61 74 63 68 3e 5d 20 7d 0a 09 09 34  s <patch>] }...4
e8e0: 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
e8f0: 61 79 48 69 6e 74 73 20 3c 69 6e 69 74 53 63 72  ayHints <initScr
e900: 69 70 74 3e 5d 20 7d 0a 09 09 35 20 7b 20 72 65  ipt>] }...5 { re
e910: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
e920: 74 73 20 3c 65 6e 56 61 72 4e 61 6d 65 3e 5d 20  ts <enVarName>] 
e930: 7d 0a 09 09 36 20 7b 20 72 65 74 75 72 6e 20 5b  }...6 { return [
e940: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 76 61  DisplayHints <va
e950: 72 4e 61 6d 65 3e 5d 20 7d 0a 09 7d 0a 09 72 65  rName>] }..}..re
e960: 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20  turn "".}..proc 
e970: 63 6f 6d 70 6c 65 74 65 28 70 61 72 72 61 79 29  complete(parray)
e980: 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
e990: 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
e9a0: 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73  ..switch -- $pos
e9b0: 20 7b 0a 09 09 31 20 7b 0a 09 09 09 73 65 74 20   {...1 {....set 
e9c0: 76 61 72 73 20 5b 75 70 6c 65 76 65 6c 20 5b 69  vars [uplevel [i
e9d0: 6e 66 6f 20 6c 65 76 65 6c 5d 20 69 6e 66 6f 20  nfo level] info 
e9e0: 76 61 72 73 5d 0a 09 09 09 66 6f 72 65 61 63 68  vars]....foreach
e9f0: 20 76 61 72 20 24 7b 76 61 72 73 7d 20 7b 0a 09   var ${vars} {..
ea00: 09 09 09 69 66 20 7b 5b 75 70 6c 65 76 65 6c 20  ...if {[uplevel 
ea10: 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 61 72 72  [info level] arr
ea20: 61 79 20 65 78 69 73 74 73 20 24 7b 76 61 72 7d  ay exists ${var}
ea30: 5d 7d 20 7b 0a 09 09 09 09 09 6c 61 70 70 65 6e  ]} {......lappen
ea40: 64 20 6d 61 74 63 68 65 73 20 24 7b 76 61 72 7d  d matches ${var}
ea50: 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 09 72  .....}....}....r
ea60: 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
ea70: 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 24 6d  romList $text $m
ea80: 61 74 63 68 65 73 5d 0a 09 09 7d 0a 09 7d 0a 09  atches]...}..}..
ea90: 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f  return "".}..pro
eaa0: 63 20 63 6f 6d 70 6c 65 74 65 28 74 63 6c 5f 65  c complete(tcl_e
eab0: 6e 64 4f 66 57 6f 72 64 29 20 7b 74 65 78 74 20  ndOfWord) {text 
eac0: 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
ead0: 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63  os mod} {..switc
eae0: 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20  h -- $pos {...1 
eaf0: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
eb00: 79 48 69 6e 74 73 20 3c 73 74 72 3e 5d 20 7d 0a  yHints <str>] }.
eb10: 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..2 { return [Di
eb20: 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 61 72  splayHints <star
eb30: 74 3e 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  t>] }..}..return
eb40: 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70   "".}..proc comp
eb50: 6c 65 74 65 28 74 63 6c 5f 73 74 61 72 74 4f 66  lete(tcl_startOf
eb60: 4e 65 78 74 57 6f 72 64 29 20 7b 74 65 78 74 20  NextWord) {text 
eb70: 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
eb80: 6f 73 20 6d 6f 64 7d 20 7b 0a 09 72 65 74 75 72  os mod} {..retur
eb90: 6e 20 5b 63 6f 6d 70 6c 65 74 65 28 74 63 6c 5f  n [complete(tcl_
eba0: 65 6e 64 4f 66 57 6f 72 64 29 20 24 74 65 78 74  endOfWord) $text
ebb0: 20 24 73 74 61 72 74 20 24 65 6e 64 20 24 6c 69   $start $end $li
ebc0: 6e 65 20 24 70 6f 73 20 24 6d 6f 64 5d 0a 7d 0a  ne $pos $mod].}.
ebd0: 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74  .proc complete(t
ebe0: 63 6c 5f 73 74 61 72 74 4f 66 50 72 65 76 69 6f  cl_startOfPrevio
ebf0: 75 73 57 6f 72 64 29 20 7b 74 65 78 74 20 73 74  usWord) {text st
ec00: 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
ec10: 20 6d 6f 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20   mod} {..return 
ec20: 5b 63 6f 6d 70 6c 65 74 65 28 74 63 6c 5f 65 6e  [complete(tcl_en
ec30: 64 4f 66 57 6f 72 64 29 20 24 74 65 78 74 20 24  dOfWord) $text $
ec40: 73 74 61 72 74 20 24 65 6e 64 20 24 6c 69 6e 65  start $end $line
ec50: 20 24 70 6f 73 20 24 6d 6f 64 5d 0a 7d 0a 0a 70   $pos $mod].}..p
ec60: 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74 63 6c  roc complete(tcl
ec70: 5f 77 6f 72 64 42 72 65 61 6b 41 66 74 65 72 29  _wordBreakAfter)
ec80: 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
ec90: 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
eca0: 0a 09 72 65 74 75 72 6e 20 5b 63 6f 6d 70 6c 65  ..return [comple
ecb0: 74 65 28 74 63 6c 5f 65 6e 64 4f 66 57 6f 72 64  te(tcl_endOfWord
ecc0: 29 20 24 74 65 78 74 20 24 73 74 61 72 74 20 24  ) $text $start $
ecd0: 65 6e 64 20 24 6c 69 6e 65 20 24 70 6f 73 20 24  end $line $pos $
ece0: 6d 6f 64 5d 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d  mod].}..proc com
ecf0: 70 6c 65 74 65 28 74 63 6c 5f 77 6f 72 64 42 72  plete(tcl_wordBr
ed00: 65 61 6b 42 65 66 6f 72 65 29 20 7b 74 65 78 74  eakBefore) {text
ed10: 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
ed20: 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 72 65 74 75  pos mod} {..retu
ed30: 72 6e 20 5b 63 6f 6d 70 6c 65 74 65 28 74 63 6c  rn [complete(tcl
ed40: 5f 65 6e 64 4f 66 57 6f 72 64 29 20 24 74 65 78  _endOfWord) $tex
ed50: 74 20 24 73 74 61 72 74 20 24 65 6e 64 20 24 6c  t $start $end $l
ed60: 69 6e 65 20 24 70 6f 73 20 24 6d 6f 64 5d 0a 7d  ine $pos $mod].}
ed70: 0a 0a 23 20 2d 2d 2d 20 45 4e 44 20 4f 46 20 60  ..# --- END OF `
ed80: 4c 49 42 52 41 52 59 27 20 2d 2d 2d 0a 0a 70 72  LIBRARY' ---..pr
ed90: 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6c 69 6e 64  oc complete(lind
eda0: 65 78 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  ex) {text start 
edb0: 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
edc0: 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  } {..switch -- $
edd0: 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75  pos {...1 { retu
ede0: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
edf0: 20 3c 6c 69 73 74 3e 5d 20 7d 0a 09 09 32 20 7b   <list>] }...2 {
ee00: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
ee10: 48 69 6e 74 73 20 3c 69 6e 64 65 78 3e 5d 20 7d  Hints <index>] }
ee20: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
ee30: 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
ee40: 6c 69 6e 73 65 72 74 29 20 7b 74 65 78 74 20 73  linsert) {text s
ee50: 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
ee60: 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
ee70: 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b   -- $pos {...1 {
ee80: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
ee90: 48 69 6e 74 73 20 3c 6c 69 73 74 3e 5d 20 7d 0a  Hints <list>] }.
eea0: 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..2 { return [Di
eeb0: 73 70 6c 61 79 48 69 6e 74 73 20 3c 69 6e 64 65  splayHints <inde
eec0: 78 3e 5d 20 7d 0a 09 09 33 20 7b 20 72 65 74 75  x>] }...3 { retu
eed0: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
eee0: 20 3c 65 6c 65 6d 65 6e 74 3e 5d 20 7d 0a 09 09   <element>] }...
eef0: 64 65 66 61 75 6c 74 20 7b 20 72 65 74 75 72 6e  default { return
ef00: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
ef10: 65 6c 65 6d 65 6e 74 3f 5d 20 7d 0a 09 7d 0a 09  element?] }..}..
ef20: 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f  return "".}..pro
ef30: 63 20 63 6f 6d 70 6c 65 74 65 28 6c 69 73 74 29  c complete(list)
ef40: 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
ef50: 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
ef60: 0a 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  ..return [Displa
ef70: 79 48 69 6e 74 73 20 3f 61 72 67 3f 5d 0a 7d 0a  yHints ?arg?].}.
ef80: 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6c  .proc complete(l
ef90: 6c 65 6e 67 74 68 29 20 7b 74 65 78 74 20 73 74  length) {text st
efa0: 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
efb0: 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
efc0: 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a  -- $pos {...1 {.
efd0: 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  ...return [Displ
efe0: 61 79 48 69 6e 74 73 20 3c 6c 69 73 74 3e 5d 0a  ayHints <list>].
eff0: 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
f000: 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
f010: 74 65 28 6c 6f 61 64 29 20 7b 74 65 78 74 20 73  te(load) {text s
f020: 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
f030: 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
f040: 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b   -- $pos {...1 {
f050: 0a 09 09 09 72 65 74 75 72 6e 20 22 22 3b 20 23  ....return ""; #
f060: 20 66 69 6c 65 6e 61 6d 65 0a 09 09 7d 0a 09 09   filename...}...
f070: 32 20 7b 0a 09 09 09 69 66 20 7b 21 5b 6c 6c 65  2 {....if {![lle
f080: 6e 67 74 68 20 24 7b 6d 6f 64 7d 5d 7d 20 7b 0a  ngth ${mod}]} {.
f090: 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70  ....return [Disp
f0a0: 6c 61 79 48 69 6e 74 73 20 3f 70 61 63 6b 61 67  layHints ?packag
f0b0: 65 4e 61 6d 65 3f 5d 0a 09 09 09 7d 0a 09 09 7d  eName?]....}...}
f0c0: 0a 09 09 33 20 7b 0a 09 09 09 69 66 20 7b 21 5b  ...3 {....if {![
f0d0: 6c 6c 65 6e 67 74 68 20 24 7b 6d 6f 64 7d 5d 7d  llength ${mod}]}
f0e0: 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 20 5b 44   {.....return [D
f0f0: 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 69 6e 74  isplayHints ?int
f100: 65 72 70 3f 5d 0a 09 09 09 7d 0a 09 09 7d 0a 09  erp?]....}...}..
f110: 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
f120: 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6c 72  proc complete(lr
f130: 61 6e 67 65 29 20 7b 74 65 78 74 20 73 74 61 72  ange) {text star
f140: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
f150: 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d  od} {..switch --
f160: 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65   $pos {...1 { re
f170: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
f180: 74 73 20 3c 6c 69 73 74 3e 5d 20 7d 0a 09 09 32  ts <list>] }...2
f190: 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
f1a0: 61 79 48 69 6e 74 73 20 3c 66 69 72 73 74 3e 5d  ayHints <first>]
f1b0: 20 7d 0a 09 09 33 20 7b 20 72 65 74 75 72 6e 20   }...3 { return 
f1c0: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c  [DisplayHints <l
f1d0: 61 73 74 3e 5d 20 7d 0a 09 7d 0a 09 72 65 74 75  ast>] }..}..retu
f1e0: 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f  rn "".}..proc co
f1f0: 6d 70 6c 65 74 65 28 6c 72 65 70 6c 61 63 65 29  mplete(lreplace)
f200: 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
f210: 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
f220: 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73  ..switch -- $pos
f230: 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20   {...1 { return 
f240: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c  [DisplayHints <l
f250: 69 73 74 3e 5d 20 7d 0a 09 09 32 20 7b 20 72 65  ist>] }...2 { re
f260: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
f270: 74 73 20 3c 66 69 72 73 74 3e 5d 20 7d 0a 09 09  ts <first>] }...
f280: 33 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  3 { return [Disp
f290: 6c 61 79 48 69 6e 74 73 20 3c 6c 61 73 74 3e 5d  layHints <last>]
f2a0: 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 20 72   }...default { r
f2b0: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
f2c0: 6e 74 73 20 3f 65 6c 65 6d 65 6e 74 3f 5d 20 7d  nts ?element?] }
f2d0: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
f2e0: 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
f2f0: 6c 73 65 61 72 63 68 29 20 7b 74 65 78 74 20 73  lsearch) {text s
f300: 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
f310: 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 6f 70  s mod} {..set op
f320: 74 69 6f 6e 73 20 7b 2d 65 78 61 63 74 20 2d 67  tions {-exact -g
f330: 6c 6f 62 20 2d 72 65 67 65 78 70 7d 0a 09 73 77  lob -regexp}..sw
f340: 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09  itch -- $pos {..
f350: 09 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b  .1 {....return [
f360: 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
f370: 20 24 7b 74 65 78 74 7d 20 22 24 6f 70 74 69 6f   ${text} "$optio
f380: 6e 73 20 3c 6c 69 73 74 3e 22 5d 0a 09 09 7d 0a  ns <list>"]...}.
f390: 09 09 32 20 2d 0a 09 09 33 20 2d 0a 09 09 34 20  ..2 -...3 -...4 
f3a0: 7b 0a 09 09 09 73 65 74 20 73 75 62 20 5b 4c 69  {....set sub [Li
f3b0: 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 0a 09 09  ndex $line 1]...
f3c0: 09 69 66 20 7b 2d 31 20 21 3d 20 5b 6c 73 65 61  .if {-1 != [lsea
f3d0: 72 63 68 20 24 6f 70 74 69 6f 6e 73 20 24 73 75  rch $options $su
f3e0: 62 5d 7d 20 7b 0a 09 09 09 09 69 6e 63 72 20 70  b]} {.....incr p
f3f0: 6f 73 20 2d 31 0a 09 09 09 7d 0a 09 09 09 73 77  os -1....}....sw
f400: 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09  itch -- $pos {..
f410: 09 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...1 { return [D
f420: 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c 69 73  isplayHints <lis
f430: 74 3e 5d 20 7d 0a 09 09 09 09 32 20 7b 20 72 65  t>] }.....2 { re
f440: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
f450: 74 73 20 3c 70 61 74 74 65 72 6e 3e 5d 20 7d 0a  ts <pattern>] }.
f460: 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74  ...}...}..}..ret
f470: 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63  urn "".}..proc c
f480: 6f 6d 70 6c 65 74 65 28 6c 73 6f 72 74 29 20 7b  omplete(lsort) {
f490: 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
f4a0: 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
f4b0: 73 65 74 20 6f 70 74 69 6f 6e 73 20 5b 52 65 6d  set options [Rem
f4c0: 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24  oveUsedOptions $
f4d0: 7b 6c 69 6e 65 7d 20 7b 0a 09 09 2d 61 73 63 69  {line} {...-asci
f4e0: 69 20 2d 64 69 63 74 69 6f 6e 61 72 79 20 2d 69  i -dictionary -i
f4f0: 6e 74 65 67 65 72 20 2d 72 65 61 6c 20 2d 63 6f  nteger -real -co
f500: 6d 6d 61 6e 64 0a 09 09 2d 69 6e 63 72 65 61 73  mmand...-increas
f510: 69 6e 67 20 2d 64 65 63 72 65 61 73 69 6e 67 20  ing -decreasing 
f520: 2d 69 6e 64 65 78 20 3c 6c 69 73 74 3e 0a 09 7d  -index <list>..}
f530: 5d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f  ]..switch -- $po
f540: 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e  s {...1 { return
f550: 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
f560: 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 6f 70 74  st ${text} ${opt
f570: 69 6f 6e 73 7d 5d 20 7d 0a 09 09 64 65 66 61 75  ions}] }...defau
f580: 6c 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  lt {....switch -
f590: 2d 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20  - [PreviousWord 
f5a0: 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d  ${start} ${line}
f5b0: 5d 20 7b 0a 09 09 09 09 2d 63 6f 6d 6d 61 6e 64  ] {.....-command
f5c0: 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
f5d0: 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
f5e0: 20 24 74 65 78 74 20 5b 43 6f 6d 6d 61 6e 64 43   $text [CommandC
f5f0: 6f 6d 70 6c 65 74 69 6f 6e 20 24 74 65 78 74 5d  ompletion $text]
f600: 5d 0a 09 09 09 09 7d 0a 09 09 09 09 2d 69 6e 64  ].....}.....-ind
f610: 65 78 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  ex { return [Dis
f620: 70 6c 61 79 48 69 6e 74 73 20 3c 69 6e 64 65 78  playHints <index
f630: 3e 5d 20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74  >] }.....default
f640: 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c   { return [Compl
f650: 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
f660: 78 74 7d 20 24 7b 6f 70 74 69 6f 6e 73 7d 5d 20  xt} ${options}] 
f670: 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72  }....}...}..}..r
f680: 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 23 20 2d 2d  eturn "".}..# --
f690: 2d 20 4d 53 47 43 41 54 20 50 41 43 4b 41 47 45  - MSGCAT PACKAGE
f6a0: 20 2d 2d 2d 0a 0a 23 20 63 72 65 61 74 65 20 61   ---..# create a
f6b0: 20 6d 73 67 63 61 74 20 6e 61 6d 65 73 70 61 63   msgcat namespac
f6c0: 65 20 69 6e 73 69 64 65 0a 23 20 74 63 6c 72 65  e inside.# tclre
f6d0: 61 64 6c 69 6e 65 20 61 6e 64 20 69 6d 70 6f 72  adline and impor
f6e0: 74 20 73 6f 6d 65 20 63 6f 6d 6d 61 6e 64 73 2e  t some commands.
f6f0: 0a 23 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61  .#.namespace eva
f700: 6c 20 6d 73 67 63 61 74 20 7b 0a 09 63 61 74 63  l msgcat {..catc
f710: 68 20 7b 6e 61 6d 65 73 70 61 63 65 20 69 6d 70  h {namespace imp
f720: 6f 72 74 20 3a 3a 74 63 6c 72 65 61 64 6c 69 6e  ort ::tclreadlin
f730: 65 3a 3a 44 69 73 70 6c 61 79 48 69 6e 74 73 7d  e::DisplayHints}
f740: 0a 7d 0a 0a 70 72 6f 63 20 6d 73 67 63 61 74 3a  .}..proc msgcat:
f750: 3a 63 6f 6d 70 6c 65 74 65 28 6d 63 29 20 7b 74  :complete(mc) {t
f760: 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
f770: 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
f780: 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
f790: 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..1 { return [Di
f7a0: 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 72 63 2d  splayHints <src-
f7b0: 73 74 72 69 6e 67 3e 5d 20 7d 0a 09 7d 0a 09 72  string>] }..}..r
f7c0: 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63  eturn "".}..proc
f7d0: 20 6d 73 67 63 61 74 3a 3a 63 6f 6d 70 6c 65 74   msgcat::complet
f7e0: 65 28 6d 63 6c 6f 63 61 6c 65 29 20 7b 74 65 78  e(mclocale) {tex
f7f0: 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
f800: 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69   pos mod} {..swi
f810: 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09  tch -- $pos {...
f820: 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  1 { return [Disp
f830: 6c 61 79 48 69 6e 74 73 20 3f 6e 65 77 4c 6f 63  layHints ?newLoc
f840: 61 6c 65 3f 5d 20 7d 0a 09 7d 0a 09 72 65 74 75  ale?] }..}..retu
f850: 72 6e 20 22 22 0a 7d 0a 0a 23 20 70 72 6f 63 20  rn "".}..# proc 
f860: 6d 73 67 63 61 74 3a 3a 63 6f 6d 70 6c 65 74 65  msgcat::complete
f870: 28 6d 63 70 72 65 66 65 72 65 6e 63 65 73 29 20  (mcpreferences) 
f880: 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
f890: 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
f8a0: 23 20 7d 0a 0a 70 72 6f 63 20 6d 73 67 63 61 74  # }..proc msgcat
f8b0: 3a 3a 63 6f 6d 70 6c 65 74 65 28 6d 63 6c 6f 61  ::complete(mcloa
f8c0: 64 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  d) {text start e
f8d0: 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
f8e0: 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70   {..switch -- $p
f8f0: 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72  os {...1 { retur
f900: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
f910: 3c 64 69 72 6e 61 6d 65 3e 5d 20 7d 0a 09 7d 0a  <dirname>] }..}.
f920: 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
f930: 6f 63 20 6d 73 67 63 61 74 3a 3a 63 6f 6d 70 6c  oc msgcat::compl
f940: 65 74 65 28 6d 63 73 65 74 29 20 7b 74 65 78 74  ete(mcset) {text
f950: 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
f960: 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74  pos mod} {..swit
f970: 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31  ch -- $pos {...1
f980: 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
f990: 61 79 48 69 6e 74 73 20 3c 6c 6f 63 61 6c 65 3e  ayHints <locale>
f9a0: 5d 20 7d 0a 09 09 32 20 7b 20 72 65 74 75 72 6e  ] }...2 { return
f9b0: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
f9c0: 73 72 63 2d 73 74 72 69 6e 67 3e 5d 20 7d 0a 09  src-string>] }..
f9d0: 09 33 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .3 { return [Dis
f9e0: 70 6c 61 79 48 69 6e 74 73 20 3f 74 72 61 6e 73  playHints ?trans
f9f0: 6c 61 74 65 2d 73 74 72 69 6e 67 3f 5d 20 7d 0a  late-string?] }.
fa00: 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
fa10: 0a 70 72 6f 63 20 6d 73 67 63 61 74 3a 3a 63 6f  .proc msgcat::co
fa20: 6d 70 6c 65 74 65 28 6d 63 75 6e 6b 6e 6f 77 6e  mplete(mcunknown
fa30: 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
fa40: 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
fa50: 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f  {..switch -- $po
fa60: 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e  s {...1 { return
fa70: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
fa80: 6c 6f 63 61 6c 65 3e 5d 20 7d 0a 09 09 32 20 7b  locale>] }...2 {
fa90: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
faa0: 48 69 6e 74 73 20 3c 73 72 63 2d 73 74 72 69 6e  Hints <src-strin
fab0: 67 3e 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  g>] }..}..return
fac0: 20 22 22 0a 7d 0a 0a 23 20 2d 2d 2d 20 45 4e 44   "".}..# --- END
fad0: 20 4f 46 20 4d 53 47 43 41 54 20 50 41 43 4b 41   OF MSGCAT PACKA
fae0: 47 45 20 2d 2d 2d 0a 0a 23 20 54 4f 44 4f 20 69  GE ---..# TODO i
faf0: 6d 70 6f 72 74 20 21 20 2d 66 6f 72 63 65 0a 70  mport ! -force.p
fb00: 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6e 61 6d  roc complete(nam
fb10: 65 73 70 61 63 65 29 20 7b 74 65 78 74 20 73 74  espace) {text st
fb20: 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
fb30: 20 6d 6f 64 7d 20 7b 0a 09 23 20 54 4f 44 4f 20   mod} {..# TODO 
fb40: 64 6f 73 6e 27 74 20 77 6f 72 6b 20 3f 3f 3f 0a  dosn't work ???.
fb50: 09 73 65 74 20 73 70 61 63 65 5f 6d 61 74 63 68  .set space_match
fb60: 65 73 20 5b 6e 61 6d 65 73 70 61 63 65 20 63 68  es [namespace ch
fb70: 69 6c 64 72 65 6e 20 3a 3a 20 5b 73 74 72 69 6e  ildren :: [strin
fb80: 67 20 74 72 69 6d 20 24 7b 6d 6f 64 7d 2a 5d 5d  g trim ${mod}*]]
fb90: 0a 09 23 20 70 75 74 73 20 5c 6e 73 70 61 63 65  ..# puts \nspace
fba0: 5f 6d 61 74 63 68 65 73 3d 7c 24 7b 73 70 61 63  _matches=|${spac
fbb0: 65 5f 6d 61 74 63 68 65 73 7d 7c 0a 09 73 65 74  e_matches}|..set
fbc0: 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6c 69   cmd [Lindex $li
fbd0: 6e 65 20 31 5d 0a 09 73 77 69 74 63 68 20 2d 2d  ne 1]..switch --
fbe0: 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09   $pos {...1 {...
fbf0: 09 73 65 74 20 63 6d 64 73 20 7b 0a 09 09 09 09  .set cmds {.....
fc00: 63 68 69 6c 64 72 65 6e 20 63 6f 64 65 20 63 75  children code cu
fc10: 72 72 65 6e 74 20 64 65 6c 65 74 65 20 65 76 61  rrent delete eva
fc20: 6c 20 65 78 70 6f 72 74 20 66 6f 72 67 65 74 0a  l export forget.
fc30: 09 09 09 09 69 6d 70 6f 72 74 20 69 6e 73 63 6f  ....import insco
fc40: 70 65 20 6f 72 69 67 69 6e 20 70 61 72 65 6e 74  pe origin parent
fc50: 20 71 75 61 6c 69 66 69 65 72 73 20 74 61 69 6c   qualifiers tail
fc60: 20 77 68 69 63 68 7d 0a 09 09 09 72 65 74 75 72   which}....retur
fc70: 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24  n [TryFromList $
fc80: 74 65 78 74 20 24 63 6d 64 73 5d 0a 09 09 7d 0a  text $cmds]...}.
fc90: 09 09 32 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ..2 {....switch 
fca0: 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 09 09 63 68  -- $cmd {.....ch
fcb0: 69 6c 64 72 65 6e 20 2d 0a 09 09 09 09 64 65 6c  ildren -.....del
fcc0: 65 74 65 20 2d 0a 09 09 09 09 65 76 61 6c 20 2d  ete -.....eval -
fcd0: 0a 09 09 09 09 69 6e 73 63 6f 70 65 20 2d 0a 09  .....inscope -..
fce0: 09 09 09 66 6f 72 67 65 74 20 2d 0a 09 09 09 09  ...forget -.....
fcf0: 70 61 72 65 6e 74 20 2d 0a 09 09 09 09 71 75 61  parent -.....qua
fd00: 6c 69 66 69 65 72 73 20 2d 0a 09 09 09 09 74 61  lifiers -.....ta
fd10: 69 6c 20 7b 0a 09 09 09 09 09 72 65 67 73 75 62  il {......regsub
fd20: 20 7b 5e 28 5b 5e 3a 5d 29 7d 20 24 7b 6d 6f 64   {^([^:])} ${mod
fd30: 7d 20 7b 3a 3a 5c 31 7d 20 6d 6f 64 3b 20 23 20  } {::\1} mod; # 
fd40: 66 75 6c 6c 20 71 75 61 6c 2e 20 6e 61 6d 65 0a  full qual. name.
fd50: 09 09 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79  .....return [Try
fd60: 46 72 6f 6d 4c 69 73 74 20 24 7b 6d 6f 64 7d 20  FromList ${mod} 
fd70: 24 73 70 61 63 65 5f 6d 61 74 63 68 65 73 5d 0a  $space_matches].
fd80: 09 09 09 09 7d 0a 09 09 09 09 63 6f 64 65 20 7b  ....}.....code {
fd90: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
fda0: 48 69 6e 74 73 20 3c 73 63 72 69 70 74 3e 20 5d  Hints <script> ]
fdb0: 20 7d 0a 09 09 09 09 63 75 72 72 65 6e 74 20 7b   }.....current {
fdc0: 7d 0a 09 09 09 09 65 78 70 6f 72 74 20 7b 20 72  }.....export { r
fdd0: 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
fde0: 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
fdf0: 7b 2d 63 6c 65 61 72 20 3f 70 61 74 74 65 72 6e  {-clear ?pattern
fe00: 3f 7d 5d 20 7d 0a 09 09 09 09 69 6d 70 6f 72 74  ?}] }.....import
fe10: 20 7b 0a 09 09 09 09 09 69 66 20 7b 22 2d 22 20   {......if {"-" 
fe20: 21 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78  != [string index
fe30: 20 24 7b 6d 6f 64 7d 20 30 5d 7d 20 7b 0a 09 09   ${mod} 0]} {...
fe40: 09 09 09 09 72 65 67 73 75 62 20 7b 5e 28 5b 5e  ....regsub {^([^
fe50: 3a 5d 29 7d 20 24 7b 6d 6f 64 7d 20 7b 3a 3a 5c  :])} ${mod} {::\
fe60: 31 7d 20 6d 6f 64 3b 20 23 20 66 75 6c 6c 20 71  1} mod; # full q
fe70: 75 61 6c 2e 20 6e 61 6d 65 0a 09 09 09 09 09 7d  ual. name......}
fe80: 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
fe90: 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
fea0: 7b 6d 6f 64 7d 20 22 2d 66 6f 72 63 65 20 24 73  {mod} "-force $s
feb0: 70 61 63 65 5f 6d 61 74 63 68 65 73 22 5d 0a 09  pace_matches"]..
fec0: 09 09 09 7d 0a 09 09 09 09 6f 72 69 67 69 6e 20  ...}.....origin 
fed0: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
fee0: 79 48 69 6e 74 73 20 3c 63 6f 6d 6d 61 6e 64 3e  yHints <command>
fef0: 5d 20 7d 0a 09 09 09 09 23 20 71 75 61 6c 69 66  ] }.....# qualif
ff00: 69 65 72 73 20 2d 0a 09 09 09 09 23 20 74 61 69  iers -.....# tai
ff10: 6c 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  l { return [Disp
ff20: 6c 61 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67  layHints <string
ff30: 3e 5d 20 7d 0a 09 09 09 09 77 68 69 63 68 20 7b  >] }.....which {
ff40: 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
ff50: 65 46 72 6f 6d 4c 69 73 74 20 24 7b 6d 6f 64 7d  eFromList ${mod}
ff60: 20 7b 0a 09 09 09 09 09 2d 63 6f 6d 6d 61 6e 64   {......-command
ff70: 20 2d 76 61 72 69 61 62 6c 65 20 3c 6e 61 6d 65   -variable <name
ff80: 3e 7d 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  >}] }....}...}..
ff90: 09 33 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  .3 {....switch -
ffa0: 2d 20 24 63 6d 64 20 7b 0a 09 09 09 09 63 68 69  - $cmd {.....chi
ffb0: 6c 64 72 65 6e 20 2d 0a 09 09 09 09 65 78 70 6f  ldren -.....expo
ffc0: 72 74 20 2d 0a 09 09 09 09 66 6f 72 67 65 74 20  rt -.....forget 
ffd0: 2d 0a 09 09 09 09 69 6d 70 6f 72 74 20 7b 20 72  -.....import { r
ffe0: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
fff0: 6e 74 73 20 3f 70 61 74 74 65 72 6e 3f 5d 20 7d  nts ?pattern?] }
10000 0a 09 09 09 09 64 65 6c 65 74 65 20 7b 20 72 65  .....delete { re
10010 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73  turn [TryFromLis
10020 74 20 24 7b 6d 6f 64 7d 20 24 73 70 61 63 65 5f  t ${mod} $space_
10030 6d 61 74 63 68 65 73 5d 20 7d 0a 09 09 09 09 65  matches] }.....e
10040 76 61 6c 20 2d 0a 09 09 09 09 69 6e 73 63 6f 70  val -.....inscop
10050 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  e {......return 
10060 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e 64 20  [BraceOrCommand 
10070 5c 0a 09 09 09 09 09 24 74 65 78 74 20 24 73 74  \......$text $st
10080 61 72 74 20 24 65 6e 64 20 24 6c 69 6e 65 20 24  art $end $line $
10090 70 6f 73 20 24 6d 6f 64 5d 0a 09 09 09 09 7d 0a  pos $mod].....}.
100a0 09 09 09 09 77 68 69 63 68 20 7b 20 72 65 74 75  ....which { retu
100b0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
100c0 4c 69 73 74 20 24 7b 6d 6f 64 7d 20 7b 2d 76 61  List ${mod} {-va
100d0 72 69 61 62 6c 65 20 3c 6e 61 6d 65 3e 7d 5d 20  riable <name>}] 
100e0 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 34 20 7b  }....}...}...4 {
100f0 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 63  ....switch -- $c
10100 6d 64 20 7b 0a 09 09 09 09 65 78 70 6f 72 74 20  md {.....export 
10110 2d 0a 09 09 09 09 66 6f 72 67 65 74 20 2d 0a 09  -.....forget -..
10120 09 09 09 69 6d 70 6f 72 74 20 7b 20 72 65 74 75  ...import { retu
10130 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
10140 20 3f 70 61 74 74 65 72 6e 3f 5d 20 7d 0a 09 09   ?pattern?] }...
10150 09 09 64 65 6c 65 74 65 20 7b 20 72 65 74 75 72  ..delete { retur
10160 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24  n [TryFromList $
10170 7b 6d 6f 64 7d 20 24 73 70 61 63 65 5f 6d 61 74  {mod} $space_mat
10180 63 68 65 73 5d 20 7d 0a 09 09 09 09 65 76 61 6c  ches] }.....eval
10190 20 2d 0a 09 09 09 09 69 6e 73 63 6f 70 65 20 7b   -.....inscope {
101a0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
101b0 48 69 6e 74 73 20 3f 61 72 67 3f 5d 20 7d 0a 09  Hints ?arg?] }..
101c0 09 09 09 77 68 69 63 68 20 7b 20 72 65 74 75 72  ...which { retur
101d0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
101e0 69 73 74 20 24 7b 6d 6f 64 7d 20 7b 3c 6e 61 6d  ist ${mod} {<nam
101f0 65 3e 7d 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a  e>}] }....}...}.
10200 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
10210 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6f  .proc complete(o
10220 70 65 6e 29 20 7b 74 65 78 74 20 73 74 61 72 74  pen) {text start
10230 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
10240 64 7d 20 7b 0a 09 09 23 20 32 20 7b 20 72 65 74  d} {...# 2 { ret
10250 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
10260 73 20 3f 61 63 63 65 73 73 3f 5d 20 7d 0a 09 73  s ?access?] }..s
10270 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
10280 09 09 32 20 7b 0a 09 09 09 73 65 74 20 61 63 63  ..2 {....set acc
10290 65 73 73 20 7b 72 20 72 2b 20 77 20 77 2b 20 61  ess {r r+ w w+ a
102a0 20 61 2b 20 0a 09 09 09 09 52 44 4f 4e 4c 59 20   a+ .....RDONLY 
102b0 57 52 4f 4e 4c 59 20 52 44 57 52 20 41 50 50 45  WRONLY RDWR APPE
102c0 4e 44 20 43 52 45 41 54 20 45 58 43 4c 20 4e 4f  ND CREAT EXCL NO
102d0 43 54 54 59 20 4e 4f 4e 42 4c 4f 43 4b 20 54 52  CTTY NONBLOCK TR
102e0 55 4e 43 7d 0a 09 09 09 72 65 74 75 72 6e 20 5b  UNC}....return [
102f0 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
10300 20 24 7b 74 65 78 74 7d 20 24 7b 61 63 63 65 73   ${text} ${acces
10310 73 7d 5d 0a 09 09 7d 0a 09 09 33 20 7b 20 72 65  s}]...}...3 { re
10320 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
10330 74 73 20 3f 70 65 72 6d 69 73 73 69 6f 6e 73 3f  ts ?permissions?
10340 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ] }..}..return "
10350 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
10360 74 65 28 70 61 63 6b 61 67 65 29 20 7b 74 65 78  te(package) {tex
10370 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
10380 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74   pos mod} {..set
10390 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6c 69   cmd [Lindex $li
103a0 6e 65 20 31 5d 0a 09 73 77 69 74 63 68 20 2d 2d  ne 1]..switch --
103b0 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09   $pos {...1 {...
103c0 09 73 65 74 20 63 6d 64 73 20 7b 0a 09 09 09 09  .set cmds {.....
103d0 66 6f 72 67 65 74 20 69 66 6e 65 65 64 65 64 20  forget ifneeded 
103e0 6e 61 6d 65 73 20 70 72 65 73 65 6e 74 20 70 72  names present pr
103f0 6f 76 69 64 65 20 72 65 71 75 69 72 65 0a 09 09  ovide require...
10400 09 09 75 6e 6b 6e 6f 77 6e 20 76 63 6f 6d 70 61  ..unknown vcompa
10410 72 65 20 76 65 72 73 69 6f 6e 73 20 76 73 61 74  re versions vsat
10420 69 73 66 69 65 73 7d 0a 09 09 09 72 65 74 75 72  isfies}....retur
10430 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24  n [TryFromList $
10440 74 65 78 74 20 24 63 6d 64 73 5d 0a 09 09 7d 0a  text $cmds]...}.
10450 09 09 32 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ..2 {....switch 
10460 2d 2d 20 24 7b 63 6d 64 7d 20 7b 0a 09 09 09 09  -- ${cmd} {.....
10470 66 6f 72 67 65 74 20 2d 0a 09 09 09 09 69 66 6e  forget -.....ifn
10480 65 65 64 65 64 20 2d 0a 09 09 09 09 70 72 6f 76  eeded -.....prov
10490 69 64 65 20 2d 0a 09 09 09 09 76 65 72 73 69 6f  ide -.....versio
104a0 6e 73 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d  ns { return [Com
104b0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
104c0 6d 6f 64 7d 20 5b 70 61 63 6b 61 67 65 20 6e 61  mod} [package na
104d0 6d 65 73 5d 5d 20 7d 0a 09 09 09 09 70 72 65 73  mes]] }.....pres
104e0 65 6e 74 20 2d 0a 09 09 09 09 72 65 71 75 69 72  ent -.....requir
104f0 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  e {......return 
10500 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
10510 74 20 24 7b 6d 6f 64 7d 20 22 2d 65 78 61 63 74  t ${mod} "-exact
10520 20 5b 70 61 63 6b 61 67 65 20 6e 61 6d 65 73 5d   [package names]
10530 22 5d 20 7d 0a 09 09 09 09 6e 61 6d 65 73 20 7b  "] }.....names {
10540 7d 0a 09 09 09 09 75 6e 6b 6e 6f 77 6e 20 7b 20  }.....unknown { 
10550 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
10560 69 6e 74 73 20 3f 63 6f 6d 6d 61 6e 64 3f 5d 20  ints ?command?] 
10570 7d 0a 09 09 09 09 76 63 6f 6d 70 61 72 65 20 2d  }.....vcompare -
10580 0a 09 09 09 09 76 73 61 74 69 73 66 69 65 73 20  .....vsatisfies 
10590 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
105a0 79 48 69 6e 74 73 20 3c 76 65 72 73 69 6f 6e 31  yHints <version1
105b0 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  >] }....}...}...
105c0 33 20 7b 0a 09 09 09 73 65 74 20 76 65 72 73 69  3 {....set versi
105d0 6f 6e 73 20 22 22 0a 09 09 09 63 61 74 63 68 20  ons ""....catch 
105e0 5b 6c 69 73 74 20 73 65 74 20 76 65 72 73 69 6f  [list set versio
105f0 6e 73 20 5b 70 61 63 6b 61 67 65 20 76 65 72 73  ns [package vers
10600 69 6f 6e 73 20 5b 4c 69 6e 64 65 78 20 24 7b 6c  ions [Lindex ${l
10610 69 6e 65 7d 20 32 5d 5d 5d 0a 09 09 09 73 77 69  ine} 2]]]....swi
10620 74 63 68 20 2d 2d 20 24 7b 63 6d 64 7d 20 7b 0a  tch -- ${cmd} {.
10630 09 09 09 09 66 6f 72 67 65 74 20 7b 7d 0a 09 09  ....forget {}...
10640 09 09 69 66 6e 65 65 64 65 64 20 7b 0a 09 09 09  ..ifneeded {....
10650 09 09 69 66 20 7b 22 22 20 21 3d 20 24 76 65 72  ..if {"" != $ver
10660 73 69 6f 6e 73 7d 20 7b 0a 09 09 09 09 09 09 72  sions} {.......r
10670 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
10680 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
10690 24 7b 76 65 72 73 69 6f 6e 73 7d 5d 0a 09 09 09  ${versions}]....
106a0 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09  ..} else {......
106b0 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79  .return [Display
106c0 48 69 6e 74 73 20 3c 76 65 72 73 69 6f 6e 3e 5d  Hints <version>]
106d0 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09  ......}.....}...
106e0 09 09 70 72 6f 76 69 64 65 20 7b 0a 09 09 09 09  ..provide {.....
106f0 09 69 66 20 7b 22 22 20 21 3d 20 24 7b 76 65 72  .if {"" != ${ver
10700 73 69 6f 6e 73 7d 7d 20 7b 0a 09 09 09 09 09 09  sions}} {.......
10710 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
10720 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
10730 20 24 7b 76 65 72 73 69 6f 6e 73 7d 5d 0a 09 09   ${versions}]...
10740 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ...} else {.....
10750 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  ..return [Displa
10760 79 48 69 6e 74 73 20 3f 76 65 72 73 69 6f 6e 3f  yHints ?version?
10770 5d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09  ]......}.....}..
10780 09 09 09 76 65 72 73 69 6f 6e 73 20 7b 7d 0a 09  ...versions {}..
10790 09 09 09 70 72 65 73 65 6e 74 20 2d 0a 09 09 09  ...present -....
107a0 09 72 65 71 75 69 72 65 20 7b 0a 09 09 09 09 09  .require {......
107b0 69 66 20 7b 22 2d 65 78 61 63 74 22 20 3d 3d 20  if {"-exact" == 
107c0 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b  [PreviousWord ${
107d0 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 7d  start} ${line}]}
107e0 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20   {.......return 
107f0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
10800 74 20 24 7b 6d 6f 64 7d 20 5b 70 61 63 6b 61 67  t ${mod} [packag
10810 65 20 6e 61 6d 65 73 5d 5d 0a 09 09 09 09 09 7d  e names]]......}
10820 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 69 66   else {.......if
10830 20 7b 22 22 20 21 3d 20 24 7b 76 65 72 73 69 6f   {"" != ${versio
10840 6e 73 7d 7d 20 7b 0a 09 09 09 09 09 09 09 72 65  ns}} {........re
10850 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
10860 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24  omList ${text} $
10870 7b 76 65 72 73 69 6f 6e 73 7d 5d 0a 09 09 09 09  {versions}].....
10880 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09  ..} else {......
10890 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  ..return [Displa
108a0 79 48 69 6e 74 73 20 3f 76 65 72 73 69 6f 6e 3f  yHints ?version?
108b0 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 7d  ].......}......}
108c0 0a 09 09 09 09 7d 0a 09 09 09 09 6e 61 6d 65 73  .....}.....names
108d0 20 7b 7d 0a 09 09 09 09 75 6e 6b 6e 6f 77 6e 20   {}.....unknown 
108e0 7b 7d 0a 09 09 09 09 76 63 6f 6d 70 61 72 65 20  {}.....vcompare 
108f0 2d 0a 09 09 09 09 76 73 61 74 69 73 66 69 65 73  -.....vsatisfies
10900 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
10910 61 79 48 69 6e 74 73 20 3c 76 65 72 73 69 6f 6e  ayHints <version
10920 32 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  2>] }....}...}..
10930 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
10940 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 70 69  proc complete(pi
10950 64 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  d) {text start e
10960 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
10970 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b   {..switch -- ${
10980 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74  pos} {...1 { ret
10990 75 72 6e 20 5b 43 68 61 6e 6e 65 6c 49 64 20 24  urn [ChannelId $
109a0 7b 74 65 78 74 7d 5d 20 7d 0a 09 7d 0a 7d 0a 0a  {text}] }..}.}..
109b0 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 70 6b  proc complete(pk
109c0 67 5f 6d 6b 49 6e 64 65 78 29 20 7b 74 65 78 74  g_mkIndex) {text
109d0 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
109e0 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20  pos mod} {..set 
109f0 63 6d 64 73 20 5b 52 65 6d 6f 76 65 55 73 65 64  cmds [RemoveUsed
10a00 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20  Options ${line} 
10a10 7b 2d 64 69 72 65 63 74 20 2d 6c 6f 61 64 20 2d  {-direct -load -
10a20 76 65 72 62 6f 73 65 20 2d 2d 20 3c 64 69 72 3e  verbose -- <dir>
10a30 7d 20 7b 2d 2d 7d 5d 0a 09 73 65 74 20 72 65 73  } {--}]..set res
10a40 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 54   [string trim [T
10a50 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  ryFromList ${tex
10a60 74 7d 20 24 7b 63 6d 64 73 7d 5d 5d 0a 09 73 65  t} ${cmds}]]..se
10a70 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73  t prev [Previous
10a80 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b  Word ${start} ${
10a90 6c 69 6e 65 7d 5d 0a 09 69 66 20 7b 22 2d 6c 6f  line}]..if {"-lo
10aa0 61 64 22 20 3d 3d 20 24 7b 70 72 65 76 7d 7d 20  ad" == ${prev}} 
10ab0 7b 0a 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70  {...return [Disp
10ac0 6c 61 79 48 69 6e 74 73 20 3c 70 6b 67 50 61 74  layHints <pkgPat
10ad0 3e 5d 0a 09 7d 20 65 6c 73 65 69 66 20 7b 22 2d  >]..} elseif {"-
10ae0 2d 22 20 3d 3d 20 24 7b 70 72 65 76 7d 7d 20 7b  -" == ${prev}} {
10af0 0a 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72  ...return [TryFr
10b00 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 3c  omList ${text} <
10b10 64 69 72 3e 5d 0a 09 7d 0a 09 72 65 74 75 72 6e  dir>]..}..return
10b20 20 24 7b 72 65 73 7d 0a 7d 0a 0a 70 72 6f 63 20   ${res}.}..proc 
10b30 63 6f 6d 70 6c 65 74 65 28 70 72 6f 63 29 20 7b  complete(proc) {
10b40 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
10b50 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
10b60 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d  switch -- ${pos}
10b70 20 7b 0a 09 09 31 20 7b 0a 09 09 09 73 65 74 20   {...1 {....set 
10b80 6b 6e 6f 77 6e 5f 70 72 6f 63 73 20 5b 50 72 6f  known_procs [Pro
10b90 63 73 4f 6e 6c 79 43 6f 6d 70 6c 65 74 69 6f 6e  csOnlyCompletion
10ba0 20 24 7b 74 65 78 74 7d 5d 0a 09 09 09 72 65 74   ${text}]....ret
10bb0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
10bc0 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24 7b  mList ${text} ${
10bd0 6b 6e 6f 77 6e 5f 70 72 6f 63 73 7d 5d 0a 09 09  known_procs}]...
10be0 7d 0a 09 09 32 20 7b 0a 09 09 09 73 65 74 20 70  }...2 {....set p
10bf0 72 6f 63 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69  roc [Lindex ${li
10c00 6e 65 7d 20 31 5d 0a 09 09 09 69 66 20 7b 5b 63  ne} 1]....if {[c
10c10 61 74 63 68 20 7b 73 65 74 20 61 72 67 73 20 5b  atch {set args [
10c20 75 70 6c 65 76 65 6c 20 5b 69 6e 66 6f 20 6c 65  uplevel [info le
10c30 76 65 6c 5d 20 69 6e 66 6f 20 61 72 67 73 20 24  vel] info args $
10c40 7b 70 72 6f 63 7d 5d 7d 5d 7d 20 7b 0a 09 09 09  {proc}]}]} {....
10c50 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79  .return [Display
10c60 48 69 6e 74 73 20 3c 61 72 67 73 3e 5d 0a 09 09  Hints <args>]...
10c70 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 72 65  .} else {.....re
10c80 74 75 72 6e 20 5b 6c 69 73 74 20 22 5c 7b 24 7b  turn [list "\{${
10c90 61 72 67 73 7d 5c 7d 22 5d 0a 09 09 09 7d 0a 09  args}\}"]....}..
10ca0 09 7d 0a 09 09 33 20 7b 0a 09 09 09 69 66 20 7b  .}...3 {....if {
10cb0 21 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  ![string length 
10cc0 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20  [Lindex ${line} 
10cd0 24 7b 70 6f 73 7d 5d 5d 7d 20 7b 0a 09 09 09 09  ${pos}]]} {.....
10ce0 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5c 7b 20  return [list \{ 
10cf0 7b 7d 5d 3b 20 23 20 5c 7d 0a 09 09 09 7d 20 65  {}]; # \}....} e
10d00 6c 73 65 20 7b 0a 09 09 09 09 23 20 72 65 74 75  lse {.....# retu
10d10 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
10d20 20 3c 62 6f 64 79 3e 5d 0a 09 09 09 09 72 65 74   <body>].....ret
10d30 75 72 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d 6d  urn [BraceOrComm
10d40 61 6e 64 20 5c 0a 09 09 09 09 24 7b 74 65 78 74  and \.....${text
10d50 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 65 6e 64  } ${start} ${end
10d60 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d  } ${line} ${pos}
10d70 20 24 7b 6d 6f 64 7d 5d 0a 09 09 09 7d 0a 09 09   ${mod}]....}...
10d80 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
10d90 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
10da0 28 70 75 74 73 29 20 7b 74 65 78 74 20 73 74 61  (puts) {text sta
10db0 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
10dc0 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 63 6d 64 20  mod} {..set cmd 
10dd0 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d  [Lindex $line 1]
10de0 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73  ..switch -- $pos
10df0 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65 74 75   {...1 {....retu
10e00 72 6e 20 5b 4f 75 74 43 68 61 6e 6e 65 6c 49 64  rn [OutChannelId
10e10 20 24 7b 74 65 78 74 7d 20 22 2d 6e 6f 6e 65 77   ${text} "-nonew
10e20 6c 69 6e 65 22 5d 0a 09 09 7d 0a 09 09 32 20 7b  line"]...}...2 {
10e30 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 63  ....switch -- $c
10e40 6d 64 20 7b 0a 09 09 09 09 2d 6e 6f 6e 65 77 6c  md {.....-nonewl
10e50 69 6e 65 20 7b 20 72 65 74 75 72 6e 20 5b 4f 75  ine { return [Ou
10e60 74 43 68 61 6e 6e 65 6c 49 64 20 24 7b 74 65 78  tChannelId ${tex
10e70 74 7d 5d 20 7d 0a 09 09 09 09 64 65 66 61 75 6c  t}] }.....defaul
10e80 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  t { return [Disp
10e90 6c 61 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67  layHints <string
10ea0 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  >] }....}...}...
10eb0 33 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d  3 {....switch --
10ec0 20 24 63 6d 64 20 7b 0a 09 09 09 09 2d 6e 6f 6e   $cmd {.....-non
10ed0 65 77 6c 69 6e 65 20 7b 20 72 65 74 75 72 6e 20  ewline { return 
10ee0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73  [DisplayHints <s
10ef0 74 72 69 6e 67 3e 5d 20 7d 0a 09 09 09 7d 0a 09  tring>] }....}..
10f00 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22  .}..}..return ""
10f10 0a 7d 0a 0a 23 20 70 72 6f 63 20 63 6f 6d 70 6c  .}..# proc compl
10f20 65 74 65 28 70 77 64 29 20 7b 74 65 78 74 20 73  ete(pwd) {text s
10f30 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
10f40 73 20 6d 6f 64 7d 20 7b 0a 23 20 7d 0a 0a 70 72  s mod} {.# }..pr
10f50 6f 63 20 63 6f 6d 70 6c 65 74 65 28 72 65 61 64  oc complete(read
10f60 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
10f70 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
10f80 7b 0a 09 73 65 74 20 63 6d 64 20 5b 4c 69 6e 64  {..set cmd [Lind
10f90 65 78 20 24 6c 69 6e 65 20 31 5d 0a 09 73 77 69  ex $line 1]..swi
10fa0 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09  tch -- $pos {...
10fb0 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 49  1 {....return [I
10fc0 6e 43 68 61 6e 6e 65 6c 49 64 20 24 7b 74 65 78  nChannelId ${tex
10fd0 74 7d 20 22 2d 6e 6f 6e 65 77 6c 69 6e 65 22 5d  t} "-nonewline"]
10fe0 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73 77  ...}...2 {....sw
10ff0 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 09  itch -- $cmd {..
11000 09 09 09 2d 6e 6f 6e 65 77 6c 69 6e 65 20 7b 20  ...-nonewline { 
11010 72 65 74 75 72 6e 20 5b 49 6e 43 68 61 6e 6e 65  return [InChanne
11020 6c 49 64 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09  lId ${text}] }..
11030 09 09 09 64 65 66 61 75 6c 74 20 7b 20 72 65 74  ...default { ret
11040 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
11050 73 20 3c 6e 75 6d 43 68 61 72 73 3e 5d 20 7d 0a  s <numChars>] }.
11060 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74  ...}...}..}..ret
11070 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63  urn "".}..proc c
11080 6f 6d 70 6c 65 74 65 28 72 65 67 65 78 70 29 20  omplete(regexp) 
11090 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
110a0 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
110b0 09 73 65 74 20 70 72 65 76 20 5b 50 72 65 76 69  .set prev [Previ
110c0 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d  ousWord ${start}
110d0 20 24 7b 6c 69 6e 65 7d 5d 0a 09 69 66 20 7b 5b   ${line}]..if {[
110e0 6c 6c 65 6e 67 74 68 20 24 7b 70 72 65 76 7d 5d  llength ${prev}]
110f0 20 26 26 20 22 2d 2d 22 20 21 3d 20 24 70 72 65   && "--" != $pre
11100 76 20 26 26 20 5c 0a 09 09 28 22 2d 22 20 3d 3d  v && \...("-" ==
11110 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24   [string index $
11120 7b 70 72 65 76 7d 20 30 5d 20 7c 7c 20 31 20 3d  {prev} 0] || 1 =
11130 3d 20 24 70 6f 73 29 7d 20 7b 0a 09 09 73 65 74  = $pos)} {...set
11140 20 63 6d 64 73 20 5b 52 65 6d 6f 76 65 55 73 65   cmds [RemoveUse
11150 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d  dOptions ${line}
11160 20 7b 0a 09 09 09 2d 6e 6f 63 61 73 65 20 2d 69   {....-nocase -i
11170 6e 64 69 63 65 73 20 2d 65 78 70 61 6e 64 65 64  ndices -expanded
11180 20 2d 6c 69 6e 65 20 0a 09 09 09 2d 6c 69 6e 65   -line ....-line
11190 73 74 6f 70 20 2d 6c 69 6e 65 61 6e 63 68 6f 72  stop -lineanchor
111a0 20 2d 61 62 6f 75 74 20 3c 65 78 70 72 65 73 73   -about <express
111b0 69 6f 6e 3e 20 2d 2d 7d 20 7b 2d 2d 7d 5d 0a 09  ion> --} {--}]..
111c0 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 7b  .if {[llength ${
111d0 63 6d 64 73 7d 5d 7d 20 7b 0a 09 09 09 72 65 74  cmds}]} {....ret
111e0 75 72 6e 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  urn [string trim
111f0 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
11200 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 63 6d 64  st ${text} ${cmd
11210 73 7d 5d 5d 0a 09 09 7d 0a 09 7d 20 65 6c 73 65  s}]]...}..} else
11220 20 7b 0a 09 09 73 65 74 20 76 69 72 74 75 61 6c   {...set virtual
11230 5f 70 6f 73 20 5b 65 78 70 72 20 24 7b 70 6f 73  _pos [expr ${pos
11240 7d 20 2d 20 5b 46 69 72 73 74 4e 6f 6e 4f 70 74  } - [FirstNonOpt
11250 69 6f 6e 20 24 7b 6c 69 6e 65 7d 5d 5d 0a 09 09  ion ${line}]]...
11260 73 77 69 74 63 68 20 2d 2d 20 24 7b 76 69 72 74  switch -- ${virt
11270 75 61 6c 5f 70 6f 73 7d 20 7b 0a 09 09 09 30 20  ual_pos} {....0 
11280 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
11290 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d  yHints <string>]
112a0 20 7d 0a 09 09 09 31 20 7b 20 72 65 74 75 72 6e   }....1 { return
112b0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
112c0 6d 61 74 63 68 56 61 72 3f 5d 20 7d 0a 09 09 09  matchVar?] }....
112d0 64 65 66 61 75 6c 74 20 7b 20 72 65 74 75 72 6e  default { return
112e0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
112f0 73 75 62 4d 61 74 63 68 56 61 72 3f 5d 20 7d 0a  subMatchVar?] }.
11300 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
11310 22 0a 7d 0a 0a 23 20 70 72 6f 63 20 63 6f 6d 70  ".}..# proc comp
11320 6c 65 74 65 28 72 65 67 65 78 70 29 20 7b 74 65  lete(regexp) {te
11330 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
11340 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 23 20 20  e pos mod} {.#  
11350 20 20 20 57 65 27 72 65 20 6e 6f 74 20 6f 6e 20     We're not on 
11360 77 69 6e 64 6f 7a 65 20 68 65 72 65 20 2e 2e 2e  windoze here ...
11370 0a 23 20 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  .# }..proc compl
11380 65 74 65 28 72 65 67 73 75 62 29 20 7b 74 65 78  ete(regsub) {tex
11390 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
113a0 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74   pos mod} {..set
113b0 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73 57   prev [PreviousW
113c0 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c  ord ${start} ${l
113d0 69 6e 65 7d 5d 0a 09 69 66 20 7b 5b 6c 6c 65 6e  ine}]..if {[llen
113e0 67 74 68 20 24 7b 70 72 65 76 7d 5d 20 26 26 20  gth ${prev}] && 
113f0 22 2d 2d 22 20 21 3d 20 24 70 72 65 76 20 26 26  "--" != $prev &&
11400 20 5c 0a 09 09 28 22 2d 22 20 3d 3d 20 5b 73 74   \...("-" == [st
11410 72 69 6e 67 20 69 6e 64 65 78 20 24 7b 70 72 65  ring index ${pre
11420 76 7d 20 30 5d 20 7c 7c 20 31 20 3d 3d 20 24 7b  v} 0] || 1 == ${
11430 70 6f 73 29 7d 7d 20 7b 0a 09 09 73 65 74 20 63  pos)}} {...set c
11440 6d 64 73 20 5b 52 65 6d 6f 76 65 55 73 65 64 4f  mds [RemoveUsedO
11450 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b  ptions ${line} {
11460 0a 09 09 09 2d 61 6c 6c 20 2d 6e 6f 63 61 73 65  ....-all -nocase
11470 20 2d 2d 7d 20 7b 2d 2d 7d 5d 0a 09 09 69 66 20   --} {--}]...if 
11480 7b 5b 6c 6c 65 6e 67 74 68 20 24 7b 63 6d 64 73  {[llength ${cmds
11490 7d 5d 7d 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  }]} {....return 
114a0 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 43 6f  [string trim [Co
114b0 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
114c0 7b 74 65 78 74 7d 20 24 7b 63 6d 64 73 7d 5d 5d  {text} ${cmds}]]
114d0 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09  ...}..} else {..
114e0 09 73 65 74 20 76 69 72 74 75 61 6c 5f 70 6f 73  .set virtual_pos
114f0 20 5b 65 78 70 72 20 24 7b 70 6f 73 7d 20 2d 20   [expr ${pos} - 
11500 5b 46 69 72 73 74 4e 6f 6e 4f 70 74 69 6f 6e 20  [FirstNonOption 
11510 24 7b 6c 69 6e 65 7d 5d 5d 0a 09 09 73 77 69 74  ${line}]]...swit
11520 63 68 20 2d 2d 20 24 7b 76 69 72 74 75 61 6c 5f  ch -- ${virtual_
11530 70 6f 73 7d 20 7b 0a 09 09 09 30 20 7b 20 72 65  pos} {....0 { re
11540 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
11550 74 73 20 3c 65 78 70 72 65 73 73 69 6f 6e 3e 5d  ts <expression>]
11560 20 7d 0a 09 09 09 31 20 7b 20 72 65 74 75 72 6e   }....1 { return
11570 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
11580 73 74 72 69 6e 67 3e 5d 20 7d 0a 09 09 09 32 20  string>] }....2 
11590 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
115a0 79 48 69 6e 74 73 20 3c 73 75 62 53 70 65 63 3e  yHints <subSpec>
115b0 5d 20 7d 0a 09 09 09 33 20 7b 20 72 65 74 75 72  ] }....3 { retur
115c0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
115d0 3c 76 61 72 4e 61 6d 65 3e 5d 20 7d 0a 09 09 7d  <varName>] }...}
115e0 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
115f0 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
11600 72 65 6e 61 6d 65 29 20 7b 74 65 78 74 20 73 74  rename) {text st
11610 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
11620 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
11630 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a  -- $pos {...1 {.
11640 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
11650 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
11660 78 74 7d 20 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70  xt} [CommandComp
11670 6c 65 74 69 6f 6e 20 24 7b 74 65 78 74 7d 5d 5d  letion ${text}]]
11680 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09 72 65  ...}...2 {....re
11690 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
116a0 74 73 20 3c 6e 65 77 4e 61 6d 65 3e 5d 0a 09 09  ts <newName>]...
116b0 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
116c0 7d 0a 0a 23 20 70 72 6f 63 20 63 6f 6d 70 6c 65  }..# proc comple
116d0 74 65 28 72 65 73 6f 75 72 63 65 29 20 7b 74 65  te(resource) {te
116e0 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
116f0 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 23 20 20  e pos mod} {.#  
11700 20 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 61     This is not a
11710 20 6d 61 63 20 2e 2e 2e 0a 23 20 7d 0a 0a 70 72   mac ....# }..pr
11720 6f 63 20 63 6f 6d 70 6c 65 74 65 28 72 65 74 75  oc complete(retu
11730 72 6e 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  rn) {text start 
11740 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
11750 7d 20 7b 0a 09 23 20 54 4f 44 4f 20 74 68 69 73  } {..# TODO this
11760 20 69 73 20 6e 6f 74 20 70 65 72 66 65 63 74 20   is not perfect 
11770 79 65 74 0a 09 73 65 74 20 63 6d 64 73 20 7b 2d  yet..set cmds {-
11780 63 6f 64 65 20 2d 65 72 72 6f 72 69 6e 66 6f 20  code -errorinfo 
11790 2d 65 72 72 6f 72 63 6f 64 65 20 3f 73 74 72 69  -errorcode ?stri
117a0 6e 67 3f 7d 0a 09 73 65 74 20 72 65 73 20 5b 50  ng?}..set res [P
117b0 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74  reviousWord ${st
117c0 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 73  art} ${line}]..s
117d0 77 69 74 63 68 20 2d 2d 20 24 7b 72 65 73 7d 20  witch -- ${res} 
117e0 7b 0a 09 09 2d 65 72 72 6f 72 69 6e 66 6f 20 7b  {...-errorinfo {
117f0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
11800 48 69 6e 74 73 20 3c 69 6e 66 6f 3e 5d 20 7d 0a  Hints <info>] }.
11810 09 09 2d 63 6f 64 65 20 2d 0a 09 09 2d 65 72 72  ..-code -...-err
11820 6f 72 63 6f 64 65 20 7b 0a 09 09 09 73 65 74 20  orcode {....set 
11830 63 6f 64 65 73 20 7b 6f 6b 20 65 72 72 6f 72 20  codes {ok error 
11840 72 65 74 75 72 6e 20 62 72 65 61 6b 20 63 6f 6e  return break con
11850 74 69 6e 75 65 7d 0a 09 09 09 72 65 74 75 72 6e  tinue}....return
11860 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b   [TryFromList ${
11870 6d 6f 64 7d 20 24 7b 63 6f 64 65 73 7d 5d 0a 09  mod} ${codes}]..
11880 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 5b 43  .}..}..return [C
11890 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
118a0 24 7b 74 65 78 74 7d 20 5b 52 65 6d 6f 76 65 55  ${text} [RemoveU
118b0 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e  sedOptions ${lin
118c0 65 7d 20 24 7b 63 6d 64 73 7d 5d 5d 0a 7d 0a 0a  e} ${cmds}]].}..
118d0 23 20 2d 2d 2d 20 53 41 46 45 20 50 41 43 4b 41  # --- SAFE PACKA
118e0 47 45 20 2d 2d 2d 0a 0a 23 20 63 72 65 61 74 65  GE ---..# create
118f0 20 61 20 73 61 66 65 20 6e 61 6d 65 73 70 61 63   a safe namespac
11900 65 20 69 6e 73 69 64 65 0a 23 20 74 63 6c 72 65  e inside.# tclre
11910 61 64 6c 69 6e 65 20 61 6e 64 20 69 6d 70 6f 72  adline and impor
11920 74 20 73 6f 6d 65 20 63 6f 6d 6d 61 6e 64 73 2e  t some commands.
11930 0a 23 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61  .#.namespace eva
11940 6c 20 73 61 66 65 20 7b 0a 09 63 61 74 63 68 20  l safe {..catch 
11950 7b 0a 09 09 6e 61 6d 65 73 70 61 63 65 20 69 6d  {...namespace im
11960 70 6f 72 74 20 5c 0a 09 09 3a 3a 74 63 6c 72 65  port \...::tclre
11970 61 64 6c 69 6e 65 3a 3a 44 69 73 70 6c 61 79 48  adline::DisplayH
11980 69 6e 74 73 20 3a 3a 74 63 6c 72 65 61 64 6c 69  ints ::tclreadli
11990 6e 65 3a 3a 50 72 65 76 69 6f 75 73 57 6f 72 64  ne::PreviousWord
119a0 20 5c 0a 09 09 3a 3a 74 63 6c 72 65 61 64 6c 69   \...::tclreadli
119b0 6e 65 3a 3a 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  ne::CompleteFrom
119c0 4c 69 73 74 20 3a 3a 74 63 6c 72 65 61 64 6c 69  List ::tclreadli
119d0 6e 65 3a 3a 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c  ne::CommandCompl
119e0 65 74 69 6f 6e 20 5c 0a 09 09 3a 3a 74 63 6c 72  etion \...::tclr
119f0 65 61 64 6c 69 6e 65 3a 3a 52 65 6d 6f 76 65 55  eadline::RemoveU
11a00 73 65 64 4f 70 74 69 6f 6e 73 20 3a 3a 74 63 6c  sedOptions ::tcl
11a10 72 65 61 64 6c 69 6e 65 3a 3a 48 6f 73 74 4c 69  readline::HostLi
11a20 73 74 20 5c 0a 09 09 3a 3a 74 63 6c 72 65 61 64  st \...::tclread
11a30 6c 69 6e 65 3a 3a 43 68 61 6e 6e 65 6c 49 64 20  line::ChannelId 
11a40 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 4c  ::tclreadline::L
11a50 69 6e 64 65 78 20 5c 0a 09 09 3a 3a 74 63 6c 72  index \...::tclr
11a60 65 61 64 6c 69 6e 65 3a 3a 43 6f 6d 70 6c 65 74  eadline::Complet
11a70 65 42 6f 6f 6c 65 61 6e 20 5c 0a 09 09 3a 3a 74  eBoolean \...::t
11a80 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 57 69 64 67  clreadline::Widg
11a90 65 74 43 68 69 6c 64 72 65 6e 0a 09 7d 0a 09 76  etChildren..}..v
11aa0 61 72 69 61 62 6c 65 20 6f 70 74 73 0a 09 73 65  ariable opts..se
11ab0 74 20 6f 70 74 73 20 7b 0a 09 09 2d 61 63 63 65  t opts {...-acce
11ac0 73 73 50 61 74 68 20 2d 73 74 61 74 69 63 73 20  ssPath -statics 
11ad0 2d 6e 6f 53 74 61 74 69 63 73 20 2d 6e 65 73 74  -noStatics -nest
11ae0 65 64 20 2d 6e 65 73 74 65 64 4c 6f 61 64 4f 6b  ed -nestedLoadOk
11af0 20 2d 64 65 6c 65 74 65 48 6f 6f 6b 0a 09 7d 0a   -deleteHook..}.
11b00 09 70 72 6f 63 20 53 6c 61 76 65 4f 72 4f 70 74  .proc SlaveOrOpt
11b10 73 20 7b 74 65 78 74 20 73 74 61 72 74 20 6c 69  s {text start li
11b20 6e 65 20 70 6f 73 20 73 6c 61 76 65 7d 20 7b 0a  ne pos slave} {.
11b30 09 09 73 65 74 20 70 72 65 76 20 5b 50 72 65 76  ..set prev [Prev
11b40 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74  iousWord ${start
11b50 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09 76 61 72  } ${line}]...var
11b60 69 61 62 6c 65 20 6f 70 74 73 0a 09 09 69 66 20  iable opts...if 
11b70 7b 24 70 6f 73 20 3e 20 31 7d 20 7b 0a 09 09 09  {$pos > 1} {....
11b80 73 65 74 20 73 6c 61 76 65 20 22 22 0a 09 09 7d  set slave ""...}
11b90 0a 09 09 73 77 69 74 63 68 20 2d 2d 20 24 70 72  ...switch -- $pr
11ba0 65 76 20 7b 0a 09 09 09 2d 61 63 63 65 73 73 50  ev {....-accessP
11bb0 61 74 68 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ath { return [Di
11bc0 73 70 6c 61 79 48 69 6e 74 73 20 3c 64 69 72 65  splayHints <dire
11bd0 63 74 6f 72 79 4c 69 73 74 3e 5d 20 7d 0a 09 09  ctoryList>] }...
11be0 09 2d 73 74 61 74 69 63 73 20 7b 20 72 65 74 75  .-statics { retu
11bf0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c  rn [CompleteBool
11c00 65 61 6e 20 24 74 65 78 74 5d 20 7d 0a 09 09 09  ean $text] }....
11c10 2d 6e 65 73 74 65 64 20 7b 20 72 65 74 75 72 6e  -nested { return
11c20 20 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65 61   [CompleteBoolea
11c30 6e 20 24 74 65 78 74 5d 20 7d 0a 09 09 09 2d 64  n $text] }....-d
11c40 65 6c 65 74 65 48 6f 6f 6b 20 7b 20 72 65 74 75  eleteHook { retu
11c50 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
11c60 20 3c 73 63 72 69 70 74 3e 5d 20 7d 0a 09 09 09   <script>] }....
11c70 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 72 65  default {.....re
11c80 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
11c90 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c  omList ${text} \
11ca0 0a 09 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64  .....[RemoveUsed
11cb0 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20  Options ${line} 
11cc0 22 24 7b 6f 70 74 73 7d 20 24 73 6c 61 76 65 22  "${opts} $slave"
11cd0 5d 5d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d  ]]....}...}..}.}
11ce0 0a 0a 70 72 6f 63 20 73 61 66 65 3a 3a 63 6f 6d  ..proc safe::com
11cf0 70 6c 65 74 65 28 69 6e 74 65 72 70 43 72 65 61  plete(interpCrea
11d00 74 65 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  te) {text start 
11d10 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
11d20 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 53 6c 61  } {..return [Sla
11d30 76 65 4f 72 4f 70 74 73 20 24 7b 74 65 78 74 7d  veOrOpts ${text}
11d40 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65   ${start} ${line
11d50 7d 20 24 7b 70 6f 73 7d 20 3f 73 6c 61 76 65 3f  } ${pos} ?slave?
11d60 5d 0a 7d 0a 0a 70 72 6f 63 20 73 61 66 65 3a 3a  ].}..proc safe::
11d70 63 6f 6d 70 6c 65 74 65 28 69 6e 74 65 72 70 49  complete(interpI
11d80 6e 69 74 29 20 7b 74 65 78 74 20 73 74 61 72 74  nit) {text start
11d90 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
11da0 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 53 6c  d} {..return [Sl
11db0 61 76 65 4f 72 4f 70 74 73 20 24 7b 74 65 78 74  aveOrOpts ${text
11dc0 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e  } ${start} ${lin
11dd0 65 7d 20 24 7b 70 6f 73 7d 20 5b 69 6e 74 65 72  e} ${pos} [inter
11de0 70 20 73 6c 61 76 65 73 5d 5d 0a 7d 0a 0a 70 72  p slaves]].}..pr
11df0 6f 63 20 73 61 66 65 3a 3a 63 6f 6d 70 6c 65 74  oc safe::complet
11e00 65 28 69 6e 74 65 72 70 43 6f 6e 66 69 67 75 72  e(interpConfigur
11e10 65 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  e) {text start e
11e20 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
11e30 20 7b 0a 09 72 65 74 75 72 6e 20 5b 53 6c 61 76   {..return [Slav
11e40 65 4f 72 4f 70 74 73 20 24 74 65 78 74 20 24 73  eOrOpts $text $s
11e50 74 61 72 74 20 24 6c 69 6e 65 20 24 70 6f 73 20  tart $line $pos 
11e60 5b 69 6e 74 65 72 70 20 73 6c 61 76 65 73 5d 5d  [interp slaves]]
11e70 0a 7d 0a 0a 70 72 6f 63 20 73 61 66 65 3a 3a 63  .}..proc safe::c
11e80 6f 6d 70 6c 65 74 65 28 69 6e 74 65 72 70 44 65  omplete(interpDe
11e90 6c 65 74 65 29 20 7b 74 65 78 74 20 73 74 61 72  lete) {text star
11ea0 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
11eb0 6f 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 43  od} {..return [C
11ec0 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
11ed0 24 7b 74 65 78 74 7d 20 5b 69 6e 74 65 72 70 20  ${text} [interp 
11ee0 73 6c 61 76 65 73 5d 5d 0a 7d 0a 0a 70 72 6f 63  slaves]].}..proc
11ef0 20 73 61 66 65 3a 3a 63 6f 6d 70 6c 65 74 65 28   safe::complete(
11f00 69 6e 74 65 72 70 41 64 64 54 6f 41 63 63 65 73  interpAddToAcces
11f10 73 50 61 74 68 29 20 7b 74 65 78 74 20 73 74 61  sPath) {text sta
11f20 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
11f30 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d  mod} {..switch -
11f40 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b  - ${pos} {...1 {
11f50 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
11f60 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
11f70 7d 20 5b 69 6e 74 65 72 70 20 73 6c 61 76 65 73  } [interp slaves
11f80 5d 5d 20 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20  ]] }..}.}..proc 
11f90 73 61 66 65 3a 3a 63 6f 6d 70 6c 65 74 65 28 69  safe::complete(i
11fa0 6e 74 65 72 70 46 69 6e 64 49 6e 41 63 63 65 73  nterpFindInAcces
11fb0 73 50 61 74 68 29 20 7b 74 65 78 74 20 73 74 61  sPath) {text sta
11fc0 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
11fd0 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d  mod} {..switch -
11fe0 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b  - ${pos} {...1 {
11ff0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
12000 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
12010 7d 20 5b 69 6e 74 65 72 70 20 73 6c 61 76 65 73  } [interp slaves
12020 5d 5d 20 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20  ]] }..}.}..proc 
12030 73 61 66 65 3a 3a 63 6f 6d 70 6c 65 74 65 28 73  safe::complete(s
12040 65 74 4c 6f 67 43 6d 64 29 20 7b 74 65 78 74 20  etLogCmd) {text 
12050 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
12060 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63  os mod} {..switc
12070 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09  h -- ${pos} {...
12080 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  1 { return [Disp
12090 6c 61 79 48 69 6e 74 73 20 3f 63 6d 64 3f 5d 20  layHints ?cmd?] 
120a0 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 20 72 65  }...default { re
120b0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
120c0 74 73 20 3f 61 72 67 3f 5d 20 7d 0a 09 7d 0a 7d  ts ?arg?] }..}.}
120d0 0a 0a 70 72 6f 63 20 73 61 66 65 3a 3a 63 6f 6d  ..proc safe::com
120e0 70 6c 65 74 65 28 6c 6f 61 64 54 6b 29 20 7b 74  plete(loadTk) {t
120f0 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
12100 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
12110 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
12120 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b  {...1 { return [
12130 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 6c  DisplayHints <sl
12140 61 76 65 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c  ave>] }...defaul
12150 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d  t {....switch --
12160 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24   [PreviousWord $
12170 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d  {start} ${line}]
12180 20 7b 0a 09 09 09 09 2d 75 73 65 20 7b 0a 09 09   {.....-use {...
12190 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
121a0 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
121b0 78 74 7d 20 5c 0a 09 09 09 09 09 5b 3a 3a 74 63  xt} \......[::tc
121c0 6c 72 65 61 64 6c 69 6e 65 3a 3a 57 69 64 67 65  lreadline::Widge
121d0 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74  tChildren ${text
121e0 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 2d 64  }]].....}.....-d
121f0 69 73 70 6c 61 79 20 7b 0a 09 09 09 09 09 72 65  isplay {......re
12200 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
12210 74 73 20 3c 64 69 73 70 6c 61 79 3e 5d 0a 09 09  ts <display>]...
12220 09 09 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20  ..}.....default 
12230 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  {......return [C
12240 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
12250 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b  ${text} \......[
12260 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e  RemoveUsedOption
12270 73 20 24 7b 6c 69 6e 65 7d 20 7b 2d 75 73 65 20  s ${line} {-use 
12280 2d 64 69 73 70 6c 61 79 7d 5d 5d 0a 09 09 09 09  -display}]].....
12290 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a  }....}...}..}.}.
122a0 0a 23 20 2d 2d 2d 20 45 4e 44 20 4f 46 20 53 41  .# --- END OF SA
122b0 46 45 20 50 41 43 4b 41 47 45 20 2d 2d 2d 0a 0a  FE PACKAGE ---..
122c0 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 73 63  proc complete(sc
122d0 61 6e 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  an) {text start 
122e0 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
122f0 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  } {..switch -- $
12300 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65  {pos} {...1 { re
12310 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
12320 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 09  ts <string>] }..
12330 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .2 { return [Dis
12340 70 6c 61 79 48 69 6e 74 73 20 3c 66 6f 72 6d 61  playHints <forma
12350 74 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74 20  t>] }...default 
12360 7b 20 72 65 74 75 72 6e 20 5b 56 61 72 43 6f 6d  { return [VarCom
12370 70 6c 65 74 69 6f 6e 20 24 7b 74 65 78 74 7d 5d  pletion ${text}]
12380 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22   }..}..return ""
12390 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74  .}..proc complet
123a0 65 28 73 65 65 6b 29 20 7b 74 65 78 74 20 73 74  e(seek) {text st
123b0 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
123c0 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
123d0 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20  -- ${pos} {...1 
123e0 7b 20 72 65 74 75 72 6e 20 5b 43 68 61 6e 6e 65  { return [Channe
123f0 6c 49 64 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09  lId ${text}] }..
12400 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .2 { return [Dis
12410 70 6c 61 79 48 69 6e 74 73 20 3c 6f 66 66 73 65  playHints <offse
12420 74 3e 5d 20 7d 0a 09 09 33 20 7b 20 72 65 74 75  t>] }...3 { retu
12430 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20  rn [TryFromList 
12440 24 7b 74 65 78 74 7d 20 7b 73 74 61 72 74 20 63  ${text} {start c
12450 75 72 72 65 6e 74 20 65 6e 64 7d 5d 20 7d 0a 09  urrent end}] }..
12460 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
12470 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 73 65  proc complete(se
12480 74 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  t) {text start e
12490 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
124a0 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b   {..switch -- ${
124b0 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74  pos} {...1 { ret
124c0 75 72 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69  urn [VarCompleti
124d0 6f 6e 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09  on ${text}] }...
124e0 32 20 7b 0a 09 09 09 69 66 20 7b 24 7b 74 65 78  2 {....if {${tex
124f0 74 7d 20 3d 3d 20 22 22 20 7c 7c 20 24 7b 74 65  t} == "" || ${te
12500 78 74 7d 20 3d 3d 20 22 5c 22 22 20 7c 7c 20 24  xt} == "\"" || $
12510 7b 74 65 78 74 7d 20 3d 3d 20 22 5c 7b 22 7d 20  {text} == "\{"} 
12520 7b 0a 09 09 09 09 23 20 73 65 74 20 6c 69 6e 65  {.....# set line
12530 20 5b 51 75 6f 74 65 51 75 6f 74 65 73 20 24 6c   [QuoteQuotes $l
12540 69 6e 65 5d 0a 09 09 09 09 69 66 20 7b 5b 63 61  ine].....if {[ca
12550 74 63 68 20 5b 6c 69 73 74 20 73 65 74 20 76 61  tch [list set va
12560 6c 75 65 20 5b 6c 69 73 74 20 5b 75 70 6c 65 76  lue [list [uplev
12570 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20  el [info level] 
12580 5c 0a 09 09 09 09 09 73 65 74 20 5b 4c 69 6e 64  \......set [Lind
12590 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 5d 5d 5d  ex ${line} 1]]]]
125a0 20 6d 73 67 5d 0a 09 09 09 09 7d 20 7b 0a 09 09   msg].....} {...
125b0 09 09 09 72 65 74 75 72 6e 20 22 22 0a 09 09 09  ...return ""....
125c0 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 72  .} else {......r
125d0 65 74 75 72 6e 20 5b 51 75 6f 74 65 20 24 7b 76  eturn [Quote ${v
125e0 61 6c 75 65 7d 20 24 7b 74 65 78 74 7d 5d 0a 09  alue} ${text}]..
125f0 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d  ...}....}...}..}
12600 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70  ..return "".}..p
12610 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 73 6f 63  roc complete(soc
12620 6b 65 74 29 20 7b 74 65 78 74 20 73 74 61 72 74  ket) {text start
12630 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
12640 64 7d 20 7b 0a 09 73 65 74 20 63 6d 64 20 5b 4c  d} {..set cmd [L
12650 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d  index ${line} 1]
12660 0a 09 73 65 74 20 70 72 65 76 20 5b 50 72 65 76  ..set prev [Prev
12670 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74  iousWord ${start
12680 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 69 66 20 7b  } ${line}]..if {
12690 22 2d 73 65 72 76 65 72 22 20 3d 3d 20 24 7b 63  "-server" == ${c
126a0 6d 64 7d 7d 20 7b 0a 09 09 23 20 73 65 72 76 65  md}} {...# serve
126b0 72 20 73 6f 63 6b 65 74 73 0a 09 09 23 0a 09 09  r sockets...#...
126c0 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d  switch -- ${pos}
126d0 20 7b 0a 09 09 09 32 20 7b 20 72 65 74 75 72 6e   {....2 { return
126e0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
126f0 63 6f 6d 6d 61 6e 64 3e 5d 20 7d 0a 09 09 09 64  command>] }....d
12700 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 69 66 20  efault {.....if 
12710 7b 22 2d 6d 79 61 64 64 72 22 20 3d 3d 20 24 7b  {"-myaddr" == ${
12720 70 72 65 76 7d 7d 20 7b 0a 09 09 09 09 09 72 65  prev}} {......re
12730 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
12740 74 73 20 3c 61 64 64 72 3e 5d 0a 09 09 09 09 7d  ts <addr>].....}
12750 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 72 65 74   else {......ret
12760 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
12770 6d 4c 69 73 74 20 24 7b 6d 6f 64 7d 20 5c 0a 09  mList ${mod} \..
12780 09 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f  ....[RemoveUsedO
12790 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20 7b 2d 6d  ptions $line {-m
127a0 79 61 64 64 72 20 2d 65 72 72 6f 72 20 2d 73 6f  yaddr -error -so
127b0 63 6b 6e 61 6d 65 20 3c 70 6f 72 74 3e 7d 5d 5d  ckname <port>}]]
127c0 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a  .....}....}...}.
127d0 09 7d 20 65 6c 73 65 20 7b 0a 09 09 23 20 63 6c  .} else {...# cl
127e0 69 65 6e 74 20 73 6f 63 6b 65 74 73 0a 09 09 23  ient sockets...#
127f0 0a 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  ...switch -- ${p
12800 72 65 76 7d 20 7b 0a 09 09 09 2d 6d 79 61 64 64  rev} {....-myadd
12810 72 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  r { return [Disp
12820 6c 61 79 48 69 6e 74 73 20 3c 61 64 64 72 3e 5d  layHints <addr>]
12830 20 7d 0a 09 09 09 2d 6d 79 70 6f 72 74 20 7b 20   }....-myport { 
12840 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
12850 69 6e 74 73 20 3c 70 6f 72 74 3e 5d 20 7d 0a 09  ints <port>] }..
12860 09 7d 0a 0a 09 09 73 65 74 20 68 6f 73 74 73 20  .}....set hosts 
12870 5b 48 6f 73 74 4c 69 73 74 5d 0a 09 09 73 65 74  [HostList]...set
12880 20 63 6d 64 73 20 7b 2d 6d 79 61 64 64 72 20 2d   cmds {-myaddr -
12890 6d 79 70 6f 72 74 20 2d 61 73 79 6e 63 20 2d 6d  myport -async -m
128a0 79 61 64 64 72 20 2d 65 72 72 6f 72 20 2d 73 6f  yaddr -error -so
128b0 63 6b 6e 61 6d 65 20 2d 70 65 65 72 6e 61 6d 65  ckname -peername
128c0 7d 0a 09 09 69 66 20 7b 24 7b 70 6f 73 7d 20 3c  }...if {${pos} <
128d0 3d 20 31 7d 20 7b 0a 09 09 09 6c 61 70 70 65 6e  = 1} {....lappen
128e0 64 20 63 6d 64 73 20 2d 73 65 72 76 65 72 0a 09  d cmds -server..
128f0 09 7d 0a 09 09 73 65 74 20 63 6d 64 73 20 5b 52  .}...set cmds [R
12900 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
12910 20 24 7b 6c 69 6e 65 7d 20 24 7b 63 6d 64 73 7d   ${line} ${cmds}
12920 5d 0a 09 09 69 66 20 7b 2d 31 20 21 3d 20 5b 6c  ]...if {-1 != [l
12930 73 65 61 72 63 68 20 24 7b 68 6f 73 74 73 7d 20  search ${hosts} 
12940 24 7b 70 72 65 76 7d 5d 7d 20 7b 0a 09 09 09 72  ${prev}]} {....r
12950 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
12960 6e 74 73 20 3c 70 6f 72 74 3e 5d 0a 09 09 7d 20  nts <port>]...} 
12970 65 6c 73 65 20 7b 0a 09 09 09 72 65 74 75 72 6e  else {....return
12980 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
12990 73 74 20 24 7b 6d 6f 64 7d 20 5b 63 6f 6e 63 61  st ${mod} [conca
129a0 74 20 24 7b 63 6d 64 73 7d 20 24 7b 68 6f 73 74  t ${cmds} ${host
129b0 73 7d 5d 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74  s}]]...}..}..ret
129c0 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63  urn "".}..proc c
129d0 6f 6d 70 6c 65 74 65 28 73 6f 75 72 63 65 29 20  omplete(source) 
129e0 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
129f0 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
12a00 09 23 20 61 6c 6c 6f 77 20 66 69 6c 65 20 6e 61  .# allow file na
12a10 6d 65 20 63 6f 6d 70 6c 65 74 69 6f 6e 0a 09 72  me completion..r
12a20 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63  eturn "".}..proc
12a30 20 63 6f 6d 70 6c 65 74 65 28 73 70 6c 69 74 29   complete(split)
12a40 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
12a50 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
12a60 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
12a70 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72  s} {...1 { retur
12a80 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
12a90 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 09 09 32 20  <string>] }...2 
12aa0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
12ab0 79 48 69 6e 74 73 20 3f 73 70 6c 69 74 43 68 61  yHints ?splitCha
12ac0 72 73 3f 5d 20 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f  rs?] }..}.}..pro
12ad0 63 20 63 6f 6d 70 6c 65 74 65 28 73 74 72 69 6e  c complete(strin
12ae0 67 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  g) {text start e
12af0 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
12b00 20 7b 0a 09 73 65 74 20 63 6d 64 20 5b 4c 69 6e   {..set cmd [Lin
12b10 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09  dex ${line} 1]..
12b20 73 65 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f  set prev [Previo
12b30 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20  usWord ${start} 
12b40 24 7b 6c 69 6e 65 7d 5d 0a 09 73 65 74 20 63 6d  ${line}]..set cm
12b50 64 73 20 7b 0a 09 09 62 79 74 65 6c 65 6e 67 74  ds {...bytelengt
12b60 68 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20  h compare equal 
12b70 66 69 72 73 74 20 69 6e 64 65 78 20 69 73 20 6c  first index is l
12b80 61 73 74 20 6c 65 6e 67 74 68 20 6d 61 70 20 6d  ast length map m
12b90 61 74 63 68 0a 09 09 72 61 6e 67 65 20 72 65 70  atch...range rep
12ba0 65 61 74 20 72 65 70 6c 61 63 65 20 74 6f 6c 6f  eat replace tolo
12bb0 77 65 72 20 74 6f 75 70 70 65 72 20 74 6f 74 69  wer toupper toti
12bc0 74 6c 65 20 74 72 69 6d 20 74 72 69 6d 6c 65 66  tle trim trimlef
12bd0 74 0a 09 09 74 72 69 6d 72 69 67 68 74 20 77 6f  t...trimright wo
12be0 72 64 65 6e 64 20 77 6f 72 64 73 74 61 72 74 7d  rdend wordstart}
12bf0 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
12c00 73 7d 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65  s} {...1 {....re
12c10 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
12c20 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24  omList ${text} $
12c30 7b 63 6d 64 73 7d 5d 0a 09 09 7d 0a 09 09 32 20  {cmds}]...}...2 
12c40 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  {....switch -- $
12c50 7b 63 6d 64 7d 20 7b 0a 09 09 09 09 63 6f 6d 70  {cmd} {.....comp
12c60 61 72 65 20 2d 0a 09 09 09 09 65 71 75 61 6c 20  are -.....equal 
12c70 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  {......return [C
12c80 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
12c90 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 09 09  ${text} {.......
12ca0 2d 6e 6f 63 61 73 65 20 2d 6c 65 6e 67 74 68 20  -nocase -length 
12cb0 3c 73 74 72 69 6e 67 3e 20 7d 5d 0a 09 09 09 09  <string> }].....
12cc0 7d 0a 0a 09 09 09 09 66 69 72 73 74 20 2d 0a 09  }......first -..
12cd0 09 09 09 6c 61 73 74 20 7b 20 72 65 74 75 72 6e  ...last { return
12ce0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
12cf0 73 74 72 69 6e 67 31 3e 5d 20 7d 0a 0a 09 09 09  string1>] }.....
12d00 09 6d 61 70 20 7b 20 72 65 74 75 72 6e 20 5b 43  .map { return [C
12d10 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
12d20 24 7b 74 65 78 74 7d 20 7b 2d 6e 6f 63 61 73 65  ${text} {-nocase
12d30 20 3c 63 68 61 72 4d 61 70 3e 5d 7d 20 7d 0a 09   <charMap>]} }..
12d40 09 09 09 6d 61 74 63 68 20 7b 20 72 65 74 75 72  ...match { retur
12d50 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
12d60 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 2d 6e 6f  ist ${text} {-no
12d70 63 61 73 65 20 3c 70 61 74 74 65 72 6e 3e 5d 7d  case <pattern>]}
12d80 20 7d 0a 0a 09 09 09 09 69 73 20 7b 0a 09 09 09   }......is {....
12d90 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
12da0 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
12db0 74 7d 20 7b 0a 09 09 09 09 09 09 61 6c 6e 75 6d  t} {.......alnum
12dc0 20 61 6c 70 68 61 20 61 73 63 69 69 20 62 6f 6f   alpha ascii boo
12dd0 6c 65 61 6e 20 63 6f 6e 74 72 6f 6c 20 64 69 67  lean control dig
12de0 69 74 20 64 6f 75 62 6c 65 20 0a 09 09 09 09 09  it double ......
12df0 09 66 61 6c 73 65 20 67 72 61 70 68 20 69 6e 74  .false graph int
12e00 65 67 65 72 20 6c 6f 77 65 72 20 70 72 69 6e 74  eger lower print
12e10 20 70 75 6e 63 74 20 73 70 61 63 65 20 0a 09 09   punct space ...
12e20 09 09 09 09 74 72 75 65 20 75 70 70 65 72 20 77  ....true upper w
12e30 6f 72 64 63 68 61 72 20 78 64 69 67 69 74 20 0a  ordchar xdigit .
12e40 09 09 09 09 09 7d 5d 0a 09 09 09 09 7d 0a 0a 09  .....}].....}...
12e50 09 09 09 62 79 74 65 6c 65 6e 67 74 68 20 2d 0a  ...bytelength -.
12e60 09 09 09 09 69 6e 64 65 78 20 2d 0a 09 09 09 09  ....index -.....
12e70 6c 65 6e 67 74 68 20 2d 0a 09 09 09 09 72 61 6e  length -.....ran
12e80 67 65 20 2d 0a 09 09 09 09 72 65 70 65 61 74 20  ge -.....repeat 
12e90 2d 0a 09 09 09 09 72 65 70 6c 61 63 65 20 2d 0a  -.....replace -.
12ea0 09 09 09 09 74 6f 6c 6f 77 65 72 20 2d 0a 09 09  ....tolower -...
12eb0 09 09 74 6f 74 69 74 6c 65 20 2d 0a 09 09 09 09  ..totitle -.....
12ec0 74 6f 75 70 70 65 72 20 2d 0a 09 09 09 09 74 72  toupper -.....tr
12ed0 69 6d 20 2d 0a 09 09 09 09 74 72 69 6d 6c 65 66  im -.....trimlef
12ee0 74 20 2d 0a 09 09 09 09 74 72 69 6d 72 69 67 68  t -.....trimrigh
12ef0 74 20 2d 0a 09 09 09 09 77 6f 72 64 65 6e 64 20  t -.....wordend 
12f00 2d 0a 09 09 09 09 77 6f 72 64 73 74 61 72 74 20  -.....wordstart 
12f10 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
12f20 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d  yHints <string>]
12f30 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 33 20   }....}...}...3 
12f40 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  {....switch -- $
12f50 7b 63 6d 64 7d 20 7b 0a 09 09 09 09 63 6f 6d 70  {cmd} {.....comp
12f60 61 72 65 20 2d 0a 09 09 09 09 65 71 75 61 6c 20  are -.....equal 
12f70 7b 0a 09 09 09 09 09 69 66 20 7b 22 2d 6c 65 6e  {......if {"-len
12f80 67 74 68 22 20 3d 3d 20 24 7b 70 72 65 76 7d 7d  gth" == ${prev}}
12f90 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20   {.......return 
12fa0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 69  [DisplayHints <i
12fb0 6e 74 3e 5d 0a 09 09 09 09 09 7d 0a 09 09 09 09  nt>]......}.....
12fc0 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
12fd0 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
12fe0 7d 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f 76 65  } \......[Remove
12ff0 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69  UsedOptions ${li
13000 6e 65 7d 20 7b 2d 6e 6f 63 61 73 65 20 2d 6c 65  ne} {-nocase -le
13010 6e 67 74 68 20 3c 73 74 72 69 6e 67 3e 7d 5d 5d  ngth <string>}]]
13020 0a 09 09 09 09 7d 0a 0a 09 09 09 09 66 69 72 73  .....}......firs
13030 74 20 2d 0a 09 09 09 09 6c 61 73 74 20 7b 20 72  t -.....last { r
13040 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
13050 6e 74 73 20 3c 73 74 72 69 6e 67 32 3e 5d 20 7d  nts <string2>] }
13060 0a 0a 09 09 09 09 6d 61 70 20 7b 0a 09 09 09 09  ......map {.....
13070 09 69 66 20 7b 22 2d 6e 6f 63 61 73 65 22 20 3d  .if {"-nocase" =
13080 3d 20 24 7b 70 72 65 76 7d 7d 20 7b 0a 09 09 09  = ${prev}} {....
13090 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  ...return [Displ
130a0 61 79 48 69 6e 74 73 20 3c 63 68 61 72 4d 61 70  ayHints <charMap
130b0 3e 5d 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b  >]......} else {
130c0 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44  .......return [D
130d0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 72  isplayHints <str
130e0 69 6e 67 3e 5d 0a 09 09 09 09 09 7d 0a 09 09 09  ing>]......}....
130f0 09 7d 0a 09 09 09 09 6d 61 74 63 68 20 7b 0a 09  .}.....match {..
13100 09 09 09 09 69 66 20 7b 22 2d 6e 6f 63 61 73 65  ....if {"-nocase
13110 22 20 3d 3d 20 24 7b 70 72 65 76 7d 7d 20 7b 0a  " == ${prev}} {.
13120 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  ......return [Di
13130 73 70 6c 61 79 48 69 6e 74 73 20 3c 70 61 74 74  splayHints <patt
13140 65 72 6e 3e 5d 0a 09 09 09 09 09 7d 20 65 6c 73  ern>]......} els
13150 65 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e  e {.......return
13160 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
13170 73 74 72 69 6e 67 3e 5d 0a 09 09 09 09 09 7d 0a  string>]......}.
13180 09 09 09 09 7d 0a 0a 09 09 09 09 69 73 20 7b 0a  ....}......is {.
13190 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
131a0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
131b0 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b 52 65  text} \......[Re
131c0 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20  moveUsedOptions 
131d0 24 7b 6c 69 6e 65 7d 20 7b 2d 73 74 72 69 63 74  ${line} {-strict
131e0 20 2d 66 61 69 6c 69 6e 64 65 78 20 3c 73 74 72   -failindex <str
131f0 69 6e 67 3e 7d 5d 5d 0a 09 09 09 09 7d 0a 0a 09  ing>}]].....}...
13200 09 09 09 62 79 74 65 6c 65 6e 67 74 68 20 7b 7d  ...bytelength {}
13210 0a 09 09 09 09 69 6e 64 65 78 20 2d 0a 09 09 09  .....index -....
13220 09 77 6f 72 64 65 6e 64 20 2d 0a 09 09 09 09 77  .wordend -.....w
13230 6f 72 64 73 74 61 72 74 20 7b 20 72 65 74 75 72  ordstart { retur
13240 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
13250 3c 63 68 61 72 49 6e 64 65 78 3e 5d 20 7d 0a 09  <charIndex>] }..
13260 09 09 09 72 61 6e 67 65 20 2d 0a 09 09 09 09 72  ...range -.....r
13270 65 70 6c 61 63 65 20 7b 20 72 65 74 75 72 6e 20  eplace { return 
13280 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 66  [DisplayHints <f
13290 69 72 73 74 3e 5d 20 7d 0a 09 09 09 09 72 65 70  irst>] }.....rep
132a0 65 61 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  eat { return [Di
132b0 73 70 6c 61 79 48 69 6e 74 73 20 3c 63 6f 75 6e  splayHints <coun
132c0 74 3e 5d 20 7d 0a 09 09 09 09 74 6f 6c 6f 77 65  t>] }.....tolowe
132d0 72 20 2d 0a 09 09 09 09 74 6f 74 69 74 6c 65 20  r -.....totitle 
132e0 2d 0a 09 09 09 09 74 6f 75 70 70 65 72 20 7b 20  -.....toupper { 
132f0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
13300 69 6e 74 73 20 3f 66 69 72 73 74 3f 5d 20 7d 0a  ints ?first?] }.
13310 09 09 09 09 74 72 69 6d 20 2d 0a 09 09 09 09 74  ....trim -.....t
13320 72 69 6d 6c 65 66 74 20 2d 0a 09 09 09 09 74 72  rimleft -.....tr
13330 69 6d 72 69 67 68 74 20 7b 20 72 65 74 75 72 6e  imright { return
13340 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
13350 63 68 61 72 73 3f 5d 20 7d 0a 09 09 09 7d 0a 09  chars?] }....}..
13360 09 7d 0a 09 09 34 20 7b 0a 09 09 09 73 77 69 74  .}...4 {....swit
13370 63 68 20 2d 2d 20 24 7b 63 6d 64 7d 20 7b 0a 09  ch -- ${cmd} {..
13380 09 09 09 63 6f 6d 70 61 72 65 20 2d 0a 09 09 09  ...compare -....
13390 09 65 71 75 61 6c 20 7b 0a 09 09 09 09 09 69 66  .equal {......if
133a0 20 7b 22 2d 6c 65 6e 67 74 68 22 20 3d 3d 20 24   {"-length" == $
133b0 7b 70 72 65 76 7d 7d 20 7b 0a 09 09 09 09 09 09  {prev}} {.......
133c0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
133d0 69 6e 74 73 20 3c 69 6e 74 3e 5d 0a 09 09 09 09  ints <int>].....
133e0 09 7d 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b  .}......return [
133f0 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
13400 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09   ${text} \......
13410 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f  [RemoveUsedOptio
13420 6e 73 20 24 6c 69 6e 65 20 7b 2d 6e 6f 63 61 73  ns $line {-nocas
13430 65 20 2d 6c 65 6e 67 74 68 20 3c 73 74 72 69 6e  e -length <strin
13440 67 3e 7d 5d 5d 0a 09 09 09 09 7d 0a 0a 09 09 09  g>}]].....}.....
13450 09 66 69 72 73 74 20 2d 0a 09 09 09 09 6c 61 73  .first -.....las
13460 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  t { return [Disp
13470 6c 61 79 48 69 6e 74 73 20 3f 73 74 61 72 74 49  layHints ?startI
13480 6e 64 65 78 3f 5d 20 7d 0a 0a 09 09 09 09 6d 61  ndex?] }......ma
13490 70 20 2d 0a 09 09 09 09 6d 61 74 63 68 20 7b 20  p -.....match { 
134a0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
134b0 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d  ints <string>] }
134c0 0a 0a 09 09 09 09 69 73 20 7b 0a 09 09 09 09 09  ......is {......
134d0 69 66 20 7b 22 2d 66 61 69 6c 69 6e 64 65 78 22  if {"-failindex"
134e0 20 3d 3d 20 24 7b 70 72 65 76 7d 7d 20 7b 0a 09   == ${prev}} {..
134f0 09 09 09 09 09 72 65 74 75 72 6e 20 5b 56 61 72  .....return [Var
13500 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 74 65 78  Completion ${tex
13510 74 7d 5d 0a 09 09 09 09 09 7d 0a 09 09 09 09 09  t}]......}......
13520 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
13530 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
13540 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f 76 65 55   \......[RemoveU
13550 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65  sedOptions $line
13560 20 7b 2d 73 74 72 69 63 74 20 2d 66 61 69 6c 69   {-strict -faili
13570 6e 64 65 78 20 3c 73 74 72 69 6e 67 3e 7d 5d 5d  ndex <string>}]]
13580 0a 09 09 09 09 7d 0a 0a 09 09 09 09 62 79 74 65  .....}......byte
13590 6c 65 6e 67 74 68 20 7b 7d 0a 09 09 09 09 69 6e  length {}.....in
135a0 64 65 78 20 7b 7d 0a 09 09 09 09 6c 65 6e 67 74  dex {}.....lengt
135b0 68 20 7b 7d 0a 09 09 09 09 72 61 6e 67 65 20 2d  h {}.....range -
135c0 0a 09 09 09 09 72 65 70 6c 61 63 65 20 7b 20 72  .....replace { r
135d0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
135e0 6e 74 73 20 3c 6c 61 73 74 3e 5d 20 7d 0a 09 09  nts <last>] }...
135f0 09 09 72 65 70 65 61 74 20 7b 7d 0a 09 09 09 09  ..repeat {}.....
13600 74 6f 6c 6f 77 65 72 20 2d 0a 09 09 09 09 74 6f  tolower -.....to
13610 74 69 74 6c 65 20 2d 0a 09 09 09 09 74 6f 75 70  title -.....toup
13620 70 65 72 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  per { return [Di
13630 73 70 6c 61 79 48 69 6e 74 73 20 3f 6c 61 73 74  splayHints ?last
13640 3f 5d 20 7d 0a 09 09 09 09 74 72 69 6d 20 2d 0a  ?] }.....trim -.
13650 09 09 09 09 74 72 69 6d 6c 65 66 74 20 2d 0a 09  ....trimleft -..
13660 09 09 09 74 72 69 6d 72 69 67 68 74 20 7b 7d 0a  ...trimright {}.
13670 09 09 09 09 77 6f 72 64 65 6e 64 20 2d 0a 09 09  ....wordend -...
13680 09 09 77 6f 72 64 73 74 61 72 74 20 7b 7d 0a 09  ..wordstart {}..
13690 09 09 7d 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c  ..}...}...defaul
136a0 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d  t {....switch --
136b0 20 24 7b 63 6d 64 7d 20 7b 0a 09 09 09 09 63 6f   ${cmd} {.....co
136c0 6d 70 61 72 65 20 2d 0a 09 09 09 09 65 71 75 61  mpare -.....equa
136d0 6c 20 7b 0a 09 09 09 09 09 69 66 20 7b 22 2d 6c  l {......if {"-l
136e0 65 6e 67 74 68 22 20 3d 3d 20 24 7b 70 72 65 76  ength" == ${prev
136f0 7d 7d 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72  }} {.......retur
13700 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
13710 3c 69 6e 74 3e 5d 0a 09 09 09 09 09 7d 0a 09 09  <int>]......}...
13720 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
13730 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
13740 78 74 7d 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f  xt} \......[Remo
13750 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c  veUsedOptions $l
13760 69 6e 65 20 7b 2d 6e 6f 63 61 73 65 20 2d 6c 65  ine {-nocase -le
13770 6e 67 74 68 20 3c 73 74 72 69 6e 67 3e 7d 5d 5d  ngth <string>}]]
13780 0a 09 09 09 09 7d 0a 0a 09 09 09 09 69 73 20 7b  .....}......is {
13790 0a 09 09 09 09 09 69 66 20 7b 22 2d 66 61 69 6c  ......if {"-fail
137a0 69 6e 64 65 78 22 20 3d 3d 20 24 7b 70 72 65 76  index" == ${prev
137b0 7d 7d 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72  }} {.......retur
137c0 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e  n [VarCompletion
137d0 20 24 7b 74 65 78 74 7d 5d 0a 09 09 09 09 09 7d   ${text}]......}
137e0 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
137f0 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
13800 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b 52  {text} \......[R
13810 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
13820 20 24 7b 6c 69 6e 65 7d 20 7b 2d 73 74 72 69 63   ${line} {-stric
13830 74 20 2d 66 61 69 6c 69 6e 64 65 78 20 3c 73 74  t -failindex <st
13840 72 69 6e 67 3e 7d 5d 5d 0a 09 09 09 09 7d 0a 0a  ring>}]].....}..
13850 09 09 09 09 72 65 70 6c 61 63 65 20 7b 20 72 65  ....replace { re
13860 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
13870 74 73 20 3f 6e 65 77 53 74 72 69 6e 67 3f 5d 20  ts ?newString?] 
13880 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72  }....}...}..}..r
13890 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63  eturn "".}..proc
138a0 20 63 6f 6d 70 6c 65 74 65 28 73 75 62 73 74 29   complete(subst)
138b0 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
138c0 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
138d0 0a 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
138e0 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
138f0 74 7d 20 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70  t} [RemoveUsedOp
13900 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b 0a  tions ${line} {.
13910 09 09 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73  ..-nobackslashes
13920 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f   -nocommands -no
13930 76 61 72 69 61 62 6c 65 73 20 3c 73 74 72 69 6e  variables <strin
13940 67 3e 7d 5d 5d 0a 7d 0a 0a 70 72 6f 63 20 63 6f  g>}]].}..proc co
13950 6d 70 6c 65 74 65 28 73 77 69 74 63 68 29 20 7b  mplete(switch) {
13960 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
13970 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
13980 73 65 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f  set prev [Previo
13990 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20  usWord ${start} 
139a0 24 7b 6c 69 6e 65 7d 5d 0a 09 69 66 20 7b 5b 6c  ${line}]..if {[l
139b0 6c 65 6e 67 74 68 20 24 7b 70 72 65 76 7d 5d 20  length ${prev}] 
139c0 26 26 20 22 2d 2d 22 20 21 3d 20 24 7b 70 72 65  && "--" != ${pre
139d0 76 7d 20 26 26 20 5c 0a 09 09 28 22 2d 22 20 3d  v} && \...("-" =
139e0 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20  = [string index 
139f0 24 7b 70 72 65 76 7d 20 30 5d 20 7c 7c 20 31 20  ${prev} 0] || 1 
13a00 3d 3d 20 24 7b 70 6f 73 29 7d 7d 20 7b 0a 09 09  == ${pos)}} {...
13a10 73 65 74 20 63 6d 64 73 20 5b 52 65 6d 6f 76 65  set cmds [Remove
13a20 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69  UsedOptions ${li
13a30 6e 65 7d 20 7b 0a 09 09 09 2d 65 78 61 63 74 20  ne} {....-exact 
13a40 2d 67 6c 6f 62 20 2d 72 65 67 65 78 70 20 2d 2d  -glob -regexp --
13a50 7d 20 7b 2d 2d 7d 5d 0a 09 09 69 66 20 7b 5b 6c  } {--}]...if {[l
13a60 6c 65 6e 67 74 68 20 24 7b 63 6d 64 73 7d 5d 7d  length ${cmds}]}
13a70 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 73 74   {....return [st
13a80 72 69 6e 67 20 74 72 69 6d 20 5b 43 6f 6d 70 6c  ring trim [Compl
13a90 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
13aa0 78 74 7d 20 24 7b 63 6d 64 73 7d 5d 5d 0a 09 09  xt} ${cmds}]]...
13ab0 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 73 65  }..} else {...se
13ac0 74 20 76 69 72 74 75 61 6c 5f 70 6f 73 20 5b 65  t virtual_pos [e
13ad0 78 70 72 20 24 7b 70 6f 73 7d 20 2d 20 5b 46 69  xpr ${pos} - [Fi
13ae0 72 73 74 4e 6f 6e 4f 70 74 69 6f 6e 20 24 7b 6c  rstNonOption ${l
13af0 69 6e 65 7d 5d 5d 0a 09 09 73 77 69 74 63 68 20  ine}]]...switch 
13b00 2d 2d 20 24 7b 76 69 72 74 75 61 6c 5f 70 6f 73  -- ${virtual_pos
13b10 7d 20 7b 0a 09 09 09 30 20 7b 20 72 65 74 75 72  } {....0 { retur
13b20 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
13b30 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 09 09 09 31  <string>] }....1
13b40 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
13b50 61 79 48 69 6e 74 73 20 3c 70 61 74 74 65 72 6e  ayHints <pattern
13b60 3e 5d 20 7d 0a 09 09 09 32 20 7b 20 72 65 74 75  >] }....2 { retu
13b70 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
13b80 20 3c 62 6f 64 79 3e 5d 20 7d 0a 09 09 09 64 65   <body>] }....de
13b90 66 61 75 6c 74 20 7b 20 0a 09 09 09 09 73 77 69  fault { .....swi
13ba0 74 63 68 20 5b 65 78 70 72 20 24 7b 76 69 72 74  tch [expr ${virt
13bb0 75 61 6c 5f 70 6f 73 7d 20 25 20 32 5d 20 7b 0a  ual_pos} % 2] {.
13bc0 09 09 09 09 09 30 20 7b 20 72 65 74 75 72 6e 20  .....0 { return 
13bd0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 62  [DisplayHints ?b
13be0 6f 64 79 3f 5d 20 7d 0a 09 09 09 09 09 31 20 7b  ody?] }......1 {
13bf0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
13c00 48 69 6e 74 73 20 3f 70 61 74 74 65 72 6e 3f 5d  Hints ?pattern?]
13c10 20 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09   }.....}....}...
13c20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
13c30 7d 0a 0a 23 20 2d 2d 2d 20 54 43 4c 52 45 41 44  }..# --- TCLREAD
13c40 4c 49 4e 45 20 50 41 43 4b 41 47 45 20 2d 2d 2d  LINE PACKAGE ---
13c50 0a 0a 23 20 63 72 65 61 74 65 20 61 20 74 63 6c  ..# create a tcl
13c60 72 65 61 64 6c 69 6e 65 20 6e 61 6d 65 73 70 61  readline namespa
13c70 63 65 20 69 6e 73 69 64 65 0a 23 20 74 63 6c 72  ce inside.# tclr
13c80 65 61 64 6c 69 6e 65 20 61 6e 64 20 69 6d 70 6f  eadline and impo
13c90 72 74 20 73 6f 6d 65 20 63 6f 6d 6d 61 6e 64 73  rt some commands
13ca0 2e 0a 23 0a 6e 61 6d 65 73 70 61 63 65 20 65 76  ..#.namespace ev
13cb0 61 6c 20 74 63 6c 72 65 61 64 6c 69 6e 65 20 7b  al tclreadline {
13cc0 0a 09 63 61 74 63 68 20 7b 0a 09 09 6e 61 6d 65  ..catch {...name
13cd0 73 70 61 63 65 20 69 6d 70 6f 72 74 20 5c 0a 09  space import \..
13ce0 09 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a  .::tclreadline::
13cf0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 5c 0a 09  DisplayHints \..
13d00 09 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a  .::tclreadline::
13d10 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
13d20 20 5c 0a 09 09 3a 3a 74 63 6c 72 65 61 64 6c 69   \...::tclreadli
13d30 6e 65 3a 3a 4c 69 6e 64 65 78 20 5c 0a 09 09 3a  ne::Lindex \...:
13d40 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 43 6f  :tclreadline::Co
13d50 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e 0a 09 7d  mpleteBoolean..}
13d60 0a 7d 0a 0a 70 72 6f 63 20 74 63 6c 72 65 61 64  .}..proc tclread
13d70 6c 69 6e 65 3a 3a 63 6f 6d 70 6c 65 74 65 28 72  line::complete(r
13d80 65 61 64 6c 69 6e 65 29 20 7b 74 65 78 74 20 73  eadline) {text s
13d90 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
13da0 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 63 6d  s mod} {..set cm
13db0 64 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65  d [Lindex ${line
13dc0 7d 20 31 5d 0a 09 73 77 69 74 63 68 20 2d 2d 20  } 1]..switch -- 
13dd0 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72  ${pos} {...1 { r
13de0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
13df0 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
13e00 7b 0a 09 09 09 72 65 61 64 20 69 6e 69 74 69 61  {....read initia
13e10 6c 69 7a 65 20 77 72 69 74 65 20 61 64 64 20 63  lize write add c
13e20 6f 6d 70 6c 65 74 65 20 63 75 73 74 6f 6d 63 6f  omplete customco
13e30 6d 70 6c 65 74 65 72 0a 09 09 09 62 75 69 6c 74  mpleter....built
13e40 69 6e 63 6f 6d 70 6c 65 74 65 72 20 65 6f 66 63  incompleter eofc
13e50 68 61 72 20 72 65 73 65 74 2d 74 65 72 6d 69 6e  har reset-termin
13e60 61 6c 20 62 65 6c 6c 7d 5d 0a 09 09 7d 0a 09 09  al bell}]...}...
13e70 32 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d  2 {....switch --
13e80 20 24 7b 63 6d 64 7d 20 7b 0a 09 09 09 09 72 65   ${cmd} {.....re
13e90 61 64 20 7b 7d 0a 09 09 09 09 69 6e 69 74 69 61  ad {}.....initia
13ea0 6c 69 7a 65 20 7b 7d 0a 09 09 09 09 77 72 69 74  lize {}.....writ
13eb0 65 20 7b 7d 0a 09 09 09 09 61 64 64 20 7b 20 72  e {}.....add { r
13ec0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
13ed0 6e 74 73 20 3c 63 6f 6d 70 6c 65 74 65 72 4c 69  nts <completerLi
13ee0 6e 65 3e 5d 20 7d 0a 09 09 09 09 63 6f 6d 70 6c  ne>] }.....compl
13ef0 65 74 65 72 20 7b 20 72 65 74 75 72 6e 20 5b 44  eter { return [D
13f00 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c 69 6e  isplayHints <lin
13f10 65 3e 5d 20 7d 0a 09 09 09 09 63 75 73 74 6f 6d  e>] }.....custom
13f20 63 6f 6d 70 6c 65 74 65 72 20 7b 20 72 65 74 75  completer { retu
13f30 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
13f40 20 3f 73 63 72 69 70 74 43 6f 6d 70 6c 65 74 65   ?scriptComplete
13f50 72 3f 5d 20 7d 0a 09 09 09 09 62 75 69 6c 74 69  r?] }.....builti
13f60 6e 63 6f 6d 70 6c 65 74 65 72 20 7b 20 72 65 74  ncompleter { ret
13f70 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f  urn [CompleteBoo
13f80 6c 65 61 6e 20 24 7b 74 65 78 74 7d 5d 20 7d 0a  lean ${text}] }.
13f90 09 09 09 09 65 6f 66 63 68 61 72 20 7b 20 72 65  ....eofchar { re
13fa0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
13fb0 74 73 20 3f 73 63 72 69 70 74 3f 5d 20 7d 0a 09  ts ?script?] }..
13fc0 09 09 09 72 65 73 65 74 2d 74 65 72 6d 69 6e 61  ...reset-termina
13fd0 6c 20 7b 0a 09 09 09 09 09 69 66 20 7b 5b 69 6e  l {......if {[in
13fe0 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 28  fo exists ::env(
13ff0 54 45 52 4d 29 5d 7d 20 7b 0a 09 09 09 09 09 09  TERM)]} {.......
14000 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
14010 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
14020 20 24 3a 3a 65 6e 76 28 54 45 52 4d 29 5d 0a 09   $::env(TERM)]..
14030 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09  ....} else {....
14040 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  ...return [Displ
14050 61 79 48 69 6e 74 73 20 3f 74 65 72 6d 69 6e 61  ayHints ?termina
14060 6c 4e 61 6d 65 3f 5d 0a 09 09 09 09 09 7d 0a 09  lName?]......}..
14070 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d  ...}....}...}..}
14080 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 23  ..return "".}..#
14090 20 2d 2d 2d 20 45 4e 44 20 4f 46 20 54 43 4c 52   --- END OF TCLR
140a0 45 41 44 4c 49 4e 45 20 50 41 43 4b 41 47 45 20  EADLINE PACKAGE 
140b0 2d 2d 2d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ---..proc comple
140c0 74 65 28 74 65 6c 6c 29 20 7b 74 65 78 74 20 73  te(tell) {text s
140d0 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
140e0 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
140f0 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31   -- ${pos} {...1
14100 20 7b 20 72 65 74 75 72 6e 20 5b 43 68 61 6e 6e   { return [Chann
14110 65 6c 49 64 20 24 7b 74 65 78 74 7d 5d 20 7d 0a  elId ${text}] }.
14120 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
14130 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74  .proc complete(t
14140 69 6d 65 29 20 7b 74 65 78 74 20 73 74 61 72 74  ime) {text start
14150 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
14160 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20  d} {..switch -- 
14170 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72  ${pos} {...1 { r
14180 65 74 75 72 6e 20 5b 42 72 61 63 65 4f 72 43 6f  eturn [BraceOrCo
14190 6d 6d 61 6e 64 20 5c 0a 09 09 09 24 7b 74 65 78  mmand \....${tex
141a0 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 65 6e  t} ${start} ${en
141b0 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73  d} ${line} ${pos
141c0 7d 20 24 7b 6d 6f 64 7d 5d 0a 09 09 7d 0a 09 09  } ${mod}]...}...
141d0 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  2 { return [Disp
141e0 6c 61 79 48 69 6e 74 73 20 3f 63 6f 75 6e 74 3f  layHints ?count?
141f0 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ] }..}..return "
14200 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
14210 74 65 28 74 72 61 63 65 29 20 7b 74 65 78 74 20  te(trace) {text 
14220 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
14230 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 63  os mod} {..set c
14240 6d 64 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e  md [Lindex ${lin
14250 65 7d 20 31 5d 0a 09 73 77 69 74 63 68 20 2d 2d  e} 1]..switch --
14260 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a   ${pos} {...1 {.
14270 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
14280 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 6d 6f  eteFromList ${mo
14290 64 7d 20 7b 76 61 72 69 61 62 6c 65 20 76 64 65  d} {variable vde
142a0 6c 65 74 65 20 76 69 6e 66 6f 7d 5d 0a 09 09 7d  lete vinfo}]...}
142b0 0a 09 09 32 20 7b 0a 09 09 09 72 65 74 75 72 6e  ...2 {....return
142c0 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
142d0 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09  st ${text} \....
142e0 5b 75 70 6c 65 76 65 6c 20 5b 69 6e 66 6f 20 6c  [uplevel [info l
142f0 65 76 65 6c 5d 20 69 6e 66 6f 20 76 61 72 73 20  evel] info vars 
14300 22 24 7b 6d 6f 64 7d 2a 22 5d 5d 0a 09 09 7d 0a  "${mod}*"]]...}.
14310 09 09 33 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ..3 {....switch 
14320 2d 2d 20 24 7b 63 6d 64 7d 20 7b 0a 09 09 09 09  -- ${cmd} {.....
14330 76 61 72 69 61 62 6c 65 20 2d 0a 09 09 09 09 76  variable -.....v
14340 64 65 6c 65 74 65 20 7b 20 72 65 74 75 72 6e 20  delete { return 
14350 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
14360 74 20 24 7b 74 65 78 74 7d 20 7b 72 20 77 20 75  t ${text} {r w u
14370 7d 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  }] }....}...}...
14380 34 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d  4 {....switch --
14390 20 24 7b 63 6d 64 7d 20 7b 0a 09 09 09 09 76 61   ${cmd} {.....va
143a0 72 69 61 62 6c 65 20 2d 0a 09 09 09 09 76 64 65  riable -.....vde
143b0 6c 65 74 65 20 7b 0a 09 09 09 09 09 72 65 74 75  lete {......retu
143c0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
143d0 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09  List ${text} \..
143e0 09 09 09 09 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70  ....[CommandComp
143f0 6c 65 74 69 6f 6e 20 24 7b 74 65 78 74 7d 5d 5d  letion ${text}]]
14400 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a  .....}....}...}.
14410 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
14420 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 75  .proc complete(u
14430 6e 6b 6e 6f 77 6e 29 20 7b 74 65 78 74 20 73 74  nknown) {text st
14440 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
14450 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
14460 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20  -- ${pos} {...1 
14470 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  {....return [Com
14480 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
14490 74 65 78 74 7d 20 5b 43 6f 6d 6d 61 6e 64 43 6f  text} [CommandCo
144a0 6d 70 6c 65 74 69 6f 6e 20 24 7b 74 65 78 74 7d  mpletion ${text}
144b0 5d 5d 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c 74  ]]...}...default
144c0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
144d0 61 79 48 69 6e 74 73 20 3f 61 72 67 3f 5d 20 7d  ayHints ?arg?] }
144e0 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
144f0 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
14500 75 6e 73 65 74 29 20 7b 74 65 78 74 20 73 74 61  unset) {text sta
14510 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
14520 6d 6f 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b  mod} {..return [
14530 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b  VarCompletion ${
14540 74 65 78 74 7d 5d 0a 7d 0a 0a 70 72 6f 63 20 63  text}].}..proc c
14550 6f 6d 70 6c 65 74 65 28 75 70 64 61 74 65 29 20  omplete(update) 
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 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73  .switch -- ${pos
14590 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e  } {...1 { return
145a0 20 69 64 6c 65 74 61 73 6b 73 20 7d 0a 09 7d 0a   idletasks }..}.
145b0 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
145c0 6f 63 20 63 6f 6d 70 6c 65 74 65 28 75 70 6c 65  oc complete(uple
145d0 76 65 6c 29 20 7b 74 65 78 74 20 73 74 61 72 74  vel) {text start
145e0 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
145f0 64 7d 20 7b 0a 09 73 65 74 20 6f 6e 65 20 5b 4c  d} {..set one [L
14600 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d  index ${line} 1]
14610 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
14620 73 7d 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65  s} {...1 {....re
14630 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
14640 6f 6d 4c 69 73 74 20 5c 0a 09 09 09 24 7b 74 65  omList \....${te
14650 78 74 7d 20 22 3f 6c 65 76 65 6c 3f 20 5b 43 6f  xt} "?level? [Co
14660 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 20  mmandCompletion 
14670 24 7b 74 65 78 74 7d 5d 22 5d 0a 09 09 7d 0a 09  ${text}]"]...}..
14680 09 32 20 7b 0a 09 09 09 69 66 20 7b 22 23 22 20  .2 {....if {"#" 
14690 3d 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78  == [string index
146a0 20 24 7b 6f 6e 65 7d 20 30 5d 20 7c 7c 20 5b 72   ${one} 0] || [r
146b0 65 67 65 78 70 20 7b 5e 5b 30 2d 39 5d 2a 24 7d  egexp {^[0-9]*$}
146c0 20 24 7b 6f 6e 65 7d 5d 7d 20 7b 0a 09 09 09 09   ${one}]} {.....
146d0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
146e0 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
146f0 20 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74   [CommandComplet
14700 69 6f 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09  ion ${text}]]...
14710 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 72 65  .} else {.....re
14720 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
14730 74 73 20 3f 61 72 67 3f 5d 0a 09 09 09 7d 0a 09  ts ?arg?]....}..
14740 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 20 72  .}...default { r
14750 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
14760 6e 74 73 20 3f 61 72 67 3f 5d 20 7d 0a 09 7d 0a  nts ?arg?] }..}.
14770 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
14780 6f 63 20 63 6f 6d 70 6c 65 74 65 28 75 70 76 61  oc complete(upva
14790 72 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  r) {text start e
147a0 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
147b0 20 7b 0a 09 73 65 74 20 6f 6e 65 20 5b 4c 69 6e   {..set one [Lin
147c0 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09  dex ${line} 1]..
147d0 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
147e0 0a 09 09 31 20 7b 0a 09 09 09 72 65 74 75 72 6e  ...1 {....return
147f0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 7b   [DisplayHints {
14800 3f 6c 65 76 65 6c 3f 20 3c 6f 74 68 65 72 56 61  ?level? <otherVa
14810 72 3e 7d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09  r>}]...}...2 {..
14820 09 09 69 66 20 7b 22 23 22 20 3d 3d 20 5b 73 74  ..if {"#" == [st
14830 72 69 6e 67 20 69 6e 64 65 78 20 24 6f 6e 65 20  ring index $one 
14840 30 5d 20 7c 7c 20 5b 72 65 67 65 78 70 20 7b 5e  0] || [regexp {^
14850 5b 30 2d 39 5d 2a 24 7d 20 24 6f 6e 65 5d 7d 20  [0-9]*$} $one]} 
14860 7b 0a 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  {.....return [Di
14870 73 70 6c 61 79 48 69 6e 74 73 20 3c 6f 74 68 65  splayHints <othe
14880 72 56 61 72 3e 5d 0a 09 09 09 7d 20 65 6c 73 65  rVar>]....} else
14890 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 20 5b 44   {.....return [D
148a0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6d 79 56  isplayHints <myV
148b0 61 72 3e 5d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  ar>]....}...}...
148c0 33 20 7b 0a 09 09 09 69 66 20 7b 22 23 22 20 3d  3 {....if {"#" =
148d0 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20  = [string index 
148e0 24 6f 6e 65 20 30 5d 20 7c 7c 20 5b 72 65 67 65  $one 0] || [rege
148f0 78 70 20 7b 5e 5b 30 2d 39 5d 2a 24 7d 20 24 6f  xp {^[0-9]*$} $o
14900 6e 65 5d 7d 20 7b 0a 09 09 09 09 72 65 74 75 72  ne]} {.....retur
14910 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
14920 3c 6d 79 56 61 72 3e 5d 0a 09 09 09 7d 20 65 6c  <myVar>]....} el
14930 73 65 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 20  se {.....return 
14940 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 6f  [DisplayHints ?o
14950 74 68 65 72 56 61 72 3f 5d 0a 09 09 09 7d 0a 09  therVar?]....}..
14960 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  .}...default {..
14970 09 09 73 65 74 20 76 69 72 74 75 61 6c 5f 70 6f  ..set virtual_po
14980 73 20 24 70 6f 73 0a 09 09 09 69 66 20 7b 22 23  s $pos....if {"#
14990 22 20 3d 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64  " == [string ind
149a0 65 78 20 24 6f 6e 65 20 30 5d 20 7c 7c 20 5b 72  ex $one 0] || [r
149b0 65 67 65 78 70 20 7b 5e 5b 30 2d 39 5d 2a 24 7d  egexp {^[0-9]*$}
149c0 20 24 6f 6e 65 5d 7d 20 7b 0a 09 09 09 09 69 6e   $one]} {.....in
149d0 63 72 20 76 69 72 74 75 61 6c 5f 70 6f 73 0a 09  cr virtual_pos..
149e0 09 09 7d 0a 09 09 09 73 77 69 74 63 68 20 5b 65  ..}....switch [e
149f0 78 70 72 20 24 76 69 72 74 75 61 6c 5f 70 6f 73  xpr $virtual_pos
14a00 20 25 20 32 5d 20 7b 0a 09 09 09 09 30 20 7b 20   % 2] {.....0 { 
14a10 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
14a20 69 6e 74 73 20 3f 6d 79 56 61 72 3f 5d 20 7d 0a  ints ?myVar?] }.
14a30 09 09 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b  ....1 { return [
14a40 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 6f 74  DisplayHints ?ot
14a50 68 65 72 56 61 72 3f 5d 20 7d 0a 09 09 09 7d 0a  herVar?] }....}.
14a60 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
14a70 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
14a80 74 65 28 76 61 72 69 61 62 6c 65 29 20 7b 74 65  te(variable) {te
14a90 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
14aa0 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65  e pos mod} {..se
14ab0 74 20 6d 6f 64 75 6c 6f 20 5b 65 78 70 72 20 24  t modulo [expr $
14ac0 70 6f 73 20 25 20 32 5d 0a 09 73 77 69 74 63 68  pos % 2]..switch
14ad0 20 2d 2d 20 24 6d 6f 64 75 6c 6f 20 7b 0a 09 09   -- $modulo {...
14ae0 31 20 7b 20 72 65 74 75 72 6e 20 5b 56 61 72 43  1 { return [VarC
14af0 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 74 65 78 74  ompletion ${text
14b00 7d 5d 20 7d 0a 09 09 30 20 7b 0a 09 09 09 69 66  }] }...0 {....if
14b10 20 7b 24 74 65 78 74 20 3d 3d 20 22 22 20 7c 7c   {$text == "" ||
14b20 20 24 74 65 78 74 20 3d 3d 20 22 5c 22 22 20 7c   $text == "\"" |
14b30 7c 20 24 74 65 78 74 20 3d 3d 20 22 5c 7b 22 7d  | $text == "\{"}
14b40 20 7b 0a 09 09 09 09 73 65 74 20 6c 69 6e 65 20   {.....set line 
14b50 5b 51 75 6f 74 65 51 75 6f 74 65 73 20 24 6c 69  [QuoteQuotes $li
14b60 6e 65 5d 0a 09 09 09 09 69 66 20 7b 5b 63 61 74  ne].....if {[cat
14b70 63 68 20 5b 6c 69 73 74 20 73 65 74 20 76 61 6c  ch [list set val
14b80 75 65 20 5b 6c 69 73 74 20 5b 75 70 6c 65 76 65  ue [list [upleve
14b90 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 5c  l [info level] \
14ba0 0a 09 09 09 09 09 73 65 74 20 5b 50 72 65 76 69  ......set [Previ
14bb0 6f 75 73 57 6f 72 64 20 24 73 74 61 72 74 20 24  ousWord $start $
14bc0 6c 69 6e 65 5d 5d 5d 5d 20 6d 73 67 5d 0a 09 09  line]]]] msg]...
14bd0 09 09 7d 20 7b 0a 09 09 09 09 09 72 65 74 75 72  ..} {......retur
14be0 6e 20 22 22 0a 09 09 09 09 7d 20 65 6c 73 65 20  n "".....} else 
14bf0 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 51  {......return [Q
14c00 75 6f 74 65 20 24 76 61 6c 75 65 20 24 7b 74 65  uote $value ${te
14c10 78 74 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a  xt}].....}....}.
14c20 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
14c30 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
14c40 74 65 28 76 77 61 69 74 29 20 7b 74 65 78 74 20  te(vwait) {text 
14c50 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
14c60 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63  os mod} {..switc
14c70 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20  h -- $pos {...1 
14c80 7b 20 72 65 74 75 72 6e 20 5b 56 61 72 43 6f 6d  { return [VarCom
14c90 70 6c 65 74 69 6f 6e 20 24 7b 6d 6f 64 7d 5d 20  pletion ${mod}] 
14ca0 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
14cb0 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
14cc0 28 77 68 69 6c 65 29 20 7b 74 65 78 74 20 73 74  (while) {text st
14cd0 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
14ce0 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
14cf0 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 2d 0a  -- $pos {...1 -.
14d00 09 09 32 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  ..2 {....return 
14d10 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e 64 20  [BraceOrCommand 
14d20 24 74 65 78 74 20 24 73 74 61 72 74 20 24 65 6e  $text $start $en
14d30 64 20 24 6c 69 6e 65 20 24 70 6f 73 20 24 6d 6f  d $line $pos $mo
14d40 64 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72  d]...}..}..retur
14d50 6e 20 22 22 0a 7d 0a 0a 23 20 2d 2d 2d 2d 2d 2d  n "".}..# ------
14d60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14d70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
14d80 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #               
14d90 20 20 20 54 4b 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d     TK.# --------
14da0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14db0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23  -------------..#
14dc0 20 47 45 4e 45 52 49 43 20 57 49 44 47 45 54 20   GENERIC WIDGET 
14dd0 43 4f 4e 46 49 47 55 52 41 54 49 4f 4e 0a 0a 70  CONFIGURATION..p
14de0 72 6f 63 20 57 69 64 67 65 74 43 68 69 6c 64 72  roc WidgetChildr
14df0 65 6e 20 7b 7b 70 61 74 74 65 72 6e 20 2e 7d 7d  en {{pattern .}}
14e00 20 7b 0a 09 72 65 67 73 75 62 20 7b 5e 28 5b 5e   {..regsub {^([^
14e10 5c 2e 5d 29 7d 20 24 7b 70 61 74 74 65 72 6e 7d  \.])} ${pattern}
14e20 20 7b 5c 2e 5c 31 7d 20 70 61 74 74 65 72 6e 0a   {\.\1} pattern.
14e30 09 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6c 65  .if {![string le
14e40 6e 67 74 68 20 24 7b 70 61 74 74 65 72 6e 7d 5d  ngth ${pattern}]
14e50 7d 20 7b 0a 09 09 73 65 74 20 70 61 74 74 65 72  } {...set patter
14e60 6e 20 2e 0a 09 7d 0a 09 69 66 20 7b 5b 77 69 6e  n ...}..if {[win
14e70 66 6f 20 65 78 69 73 74 73 20 24 7b 70 61 74 74  fo exists ${patt
14e80 65 72 6e 7d 5d 7d 20 7b 0a 09 09 72 65 74 75 72  ern}]} {...retur
14e90 6e 20 5b 63 6f 6e 63 61 74 20 24 7b 70 61 74 74  n [concat ${patt
14ea0 65 72 6e 7d 20 5b 77 69 6e 66 6f 20 63 68 69 6c  ern} [winfo chil
14eb0 64 72 65 6e 20 24 7b 70 61 74 74 65 72 6e 7d 5d  dren ${pattern}]
14ec0 5d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 72 65  ]..} else {...re
14ed0 67 73 75 62 20 7b 2e 5b 5e 2e 5d 2a 24 7d 20 24  gsub {.[^.]*$} $
14ee0 70 61 74 74 65 72 6e 20 7b 2e 7d 20 70 61 74 74  pattern {.} patt
14ef0 65 72 6e 0a 09 09 69 66 20 7b 5b 77 69 6e 66 6f  ern...if {[winfo
14f00 20 65 78 69 73 74 73 20 24 7b 70 61 74 74 65 72   exists ${patter
14f10 6e 7d 5d 7d 20 7b 0a 09 09 09 72 65 74 75 72 6e  n}]} {....return
14f20 20 5b 63 6f 6e 63 61 74 20 24 7b 70 61 74 74 65   [concat ${patte
14f30 72 6e 7d 20 5b 77 69 6e 66 6f 20 63 68 69 6c 64  rn} [winfo child
14f40 72 65 6e 20 24 7b 70 61 74 74 65 72 6e 7d 5d 5d  ren ${pattern}]]
14f50 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 72  ...} else {....r
14f60 65 74 75 72 6e 20 22 22 0a 09 09 7d 0a 09 7d 0a  eturn ""...}..}.
14f70 7d 0a 0a 70 72 6f 63 20 57 69 64 67 65 74 44 65  }..proc WidgetDe
14f80 73 63 65 6e 64 61 6e 74 73 20 7b 7b 70 61 74 74  scendants {{patt
14f90 65 72 6e 20 2e 7d 7d 20 7b 0a 09 73 65 74 20 74  ern .}} {..set t
14fa0 72 65 65 20 5b 57 69 64 67 65 74 43 68 69 6c 64  ree [WidgetChild
14fb0 72 65 6e 20 24 7b 70 61 74 74 65 72 6e 7d 5d 0a  ren ${pattern}].
14fc0 09 66 6f 72 65 61 63 68 20 77 69 64 67 65 74 20  .foreach widget 
14fd0 24 74 72 65 65 20 7b 0a 09 09 61 70 70 65 6e 64  $tree {...append
14fe0 20 74 72 65 65 20 22 20 5b 57 69 64 67 65 74 44   tree " [WidgetD
14ff0 65 73 63 65 6e 64 61 6e 74 73 20 24 77 69 64 67  escendants $widg
15000 65 74 5d 22 0a 09 7d 0a 09 72 65 74 75 72 6e 20  et]"..}..return 
15010 24 74 72 65 65 0a 7d 0a 0a 70 72 6f 63 20 54 6f  $tree.}..proc To
15020 70 6c 65 76 65 6c 57 69 6e 64 6f 77 73 20 7b 7d  plevelWindows {}
15030 20 7b 0a 09 73 65 74 20 63 68 69 6c 64 72 65 6e   {..set children
15040 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e   [WidgetChildren
15050 20 22 22 5d 0a 09 73 65 74 20 74 6f 70 6c 65 76   ""]..set toplev
15060 65 6c 73 20 22 22 0a 09 66 6f 72 65 61 63 68 20  els ""..foreach 
15070 77 69 64 67 65 74 20 24 63 68 69 6c 64 72 65 6e  widget $children
15080 20 7b 0a 09 09 73 65 74 20 74 6f 70 6c 65 76 65   {...set topleve
15090 6c 20 5b 77 69 6e 66 6f 20 74 6f 70 6c 65 76 65  l [winfo topleve
150a0 6c 20 24 77 69 64 67 65 74 5d 0a 09 09 69 66 20  l $widget]...if 
150b0 7b 2d 31 20 3d 3d 20 5b 6c 73 65 61 72 63 68 20  {-1 == [lsearch 
150c0 24 74 6f 70 6c 65 76 65 6c 73 20 24 74 6f 70 6c  $toplevels $topl
150d0 65 76 65 6c 5d 7d 20 7b 0a 09 09 09 6c 61 70 70  evel]} {....lapp
150e0 65 6e 64 20 74 6f 70 6c 65 76 65 6c 73 20 24 74  end toplevels $t
150f0 6f 70 6c 65 76 65 6c 0a 09 09 7d 0a 09 7d 0a 09  oplevel...}..}..
15100 72 65 74 75 72 6e 20 24 74 6f 70 6c 65 76 65 6c  return $toplevel
15110 73 0a 7d 0a 0a 23 20 54 4f 44 4f 0a 23 20 77 72  s.}..# TODO.# wr
15120 69 74 65 20 61 20 64 69 73 70 61 74 63 68 65 72  ite a dispatcher
15130 20 68 65 72 65 2c 20 77 68 69 63 68 20 67 65 74   here, which get
15140 73 20 74 68 65 20 77 69 64 67 65 74 20 63 6c 61  s the widget cla
15150 73 73 20 6e 61 6d 65 0a 23 20 61 6e 64 20 63 61  ss name.# and ca
15160 6c 6c 73 20 73 70 65 63 69 66 69 63 20 63 6f 6d  lls specific com
15170 70 6c 65 74 65 72 73 2e 0a 23 0a 23 20 70 72 6f  pleters..#.# pro
15180 63 20 63 6f 6d 70 6c 65 74 65 28 57 49 44 47 45  c complete(WIDGE
15190 54 5f 43 4f 4d 4d 41 4e 44 29 20 7b 74 65 78 74  T_COMMAND) {text
151a0 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
151b0 70 6f 73 20 6d 6f 64 7d 20 7b 0a 23 20 09 72 65  pos mod} {.# .re
151c0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
151d0 6f 6d 4f 70 74 69 6f 6e 73 4f 72 53 75 62 43 6d  omOptionsOrSubCm
151e0 64 73 20 24 7b 74 65 78 74 7d 20 24 7b 73 74 61  ds ${text} ${sta
151f0 72 74 7d 20 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e  rt} ${end} ${lin
15200 65 7d 20 24 7b 70 6f 73 7d 5d 0a 23 20 7d 0a 0a  e} ${pos}].# }..
15210 70 72 6f 63 20 45 76 65 6e 74 75 61 6c 6c 79 49  proc EventuallyI
15220 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f 74 20  nsertLeadingDot 
15230 7b 74 65 78 74 20 66 61 6c 6c 62 61 63 6b 7d 20  {text fallback} 
15240 7b 0a 09 69 66 20 7b 21 5b 73 74 72 69 6e 67 20  {..if {![string 
15250 6c 65 6e 67 74 68 20 24 7b 74 65 78 74 7d 5d 7d  length ${text}]}
15260 20 7b 0a 09 09 72 65 74 75 72 6e 20 5b 6c 69 73   {...return [lis
15270 74 20 2e 20 7b 7d 5d 0a 09 7d 20 65 6c 73 65 20  t . {}]..} else 
15280 7b 0a 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70  {...return [Disp
15290 6c 61 79 48 69 6e 74 73 20 24 7b 66 61 6c 6c 62  layHints ${fallb
152a0 61 63 6b 7d 5d 0a 09 7d 0a 7d 0a 0a 23 20 54 4f  ack}]..}.}..# TO
152b0 44 4f 0a 70 72 6f 63 20 43 6f 6d 70 6c 65 74 65  DO.proc Complete
152c0 43 6f 6c 6f 72 20 7b 74 65 78 74 20 7b 61 64 64  Color {text {add
152d0 20 22 22 7d 7d 20 7b 0a 0a 09 23 20 77 65 20 73   ""}} {...# we s
152e0 65 74 20 74 68 65 20 76 61 72 69 61 62 6c 65 20  et the variable 
152f0 6f 6e 6c 79 20 6f 6e 63 65 20 74 6f 20 73 70 65  only once to spe
15300 65 64 20 75 70 2e 0a 09 23 0a 09 76 61 72 69 61  ed up...#..varia
15310 62 6c 65 20 63 6f 6c 6f 72 73 0a 09 76 61 72 69  ble colors..vari
15320 61 62 6c 65 20 6e 75 6d 62 65 72 6c 65 73 73 5f  able numberless_
15330 63 6f 6c 6f 72 73 0a 0a 09 69 66 20 21 5b 69 6e  colors...if ![in
15340 66 6f 20 65 78 69 73 74 73 20 63 6f 6c 6f 72 73  fo exists colors
15350 5d 20 7b 0a 09 09 23 20 66 72 6f 6d 20 2e 2e 20  ] {...# from .. 
15360 58 31 31 52 36 2f 6c 69 62 2f 58 31 31 2f 72 67  X11R6/lib/X11/rg
15370 62 2e 74 78 74 0a 09 09 23 20 0a 09 09 73 65 74  b.txt...# ...set
15380 20 63 6f 6c 6f 72 73 20 7b 0a 09 09 09 73 6e 6f   colors {....sno
15390 77 20 47 68 6f 73 74 57 68 69 74 65 20 57 68 69  w GhostWhite Whi
153a0 74 65 53 6d 6f 6b 65 20 67 61 69 6e 73 62 6f 72  teSmoke gainsbor
153b0 6f 20 46 6c 6f 72 61 6c 57 68 69 74 65 20 4f 6c  o FloralWhite Ol
153c0 64 4c 61 63 65 20 6c 69 6e 65 6e 0a 09 09 09 41  dLace linen....A
153d0 6e 74 69 71 75 65 57 68 69 74 65 20 50 61 70 61  ntiqueWhite Papa
153e0 79 61 57 68 69 70 20 42 6c 61 6e 63 68 65 64 41  yaWhip BlanchedA
153f0 6c 6d 6f 6e 64 20 62 69 73 71 75 65 20 50 65 61  lmond bisque Pea
15400 63 68 50 75 66 66 20 4e 61 76 61 6a 6f 57 68 69  chPuff NavajoWhi
15410 74 65 0a 09 09 09 6d 6f 63 63 61 73 69 6e 20 63  te....moccasin c
15420 6f 72 6e 73 69 6c 6b 20 69 76 6f 72 79 20 4c 65  ornsilk ivory Le
15430 6d 6f 6e 43 68 69 66 66 6f 6e 20 73 65 61 73 68  monChiffon seash
15440 65 6c 6c 20 68 6f 6e 65 79 64 65 77 20 4d 69 6e  ell honeydew Min
15450 74 43 72 65 61 6d 0a 09 09 09 61 7a 75 72 65 20  tCream....azure 
15460 41 6c 69 63 65 42 6c 75 65 20 6c 61 76 65 6e 64  AliceBlue lavend
15470 65 72 20 4c 61 76 65 6e 64 65 72 42 6c 75 73 68  er LavenderBlush
15480 20 4d 69 73 74 79 52 6f 73 65 20 77 68 69 74 65   MistyRose white
15490 20 62 6c 61 63 6b 0a 09 09 09 44 61 72 6b 53 6c   black....DarkSl
154a0 61 74 65 47 72 61 79 20 44 61 72 6b 53 6c 61 74  ateGray DarkSlat
154b0 65 47 72 65 79 20 44 69 6d 47 72 61 79 20 44 69  eGrey DimGray Di
154c0 6d 47 72 65 79 20 53 6c 61 74 65 47 72 61 79 20  mGrey SlateGray 
154d0 53 6c 61 74 65 47 72 65 79 0a 09 09 09 4c 69 67  SlateGrey....Lig
154e0 68 74 53 6c 61 74 65 47 72 61 79 20 4c 69 67 68  htSlateGray Ligh
154f0 74 53 6c 61 74 65 47 72 65 79 20 67 72 61 79 20  tSlateGrey gray 
15500 67 72 65 79 20 4c 69 67 68 74 47 72 65 79 20 4c  grey LightGrey L
15510 69 67 68 74 47 72 61 79 0a 09 09 09 4d 69 64 6e  ightGray....Midn
15520 69 67 68 74 42 6c 75 65 20 6e 61 76 79 20 4e 61  ightBlue navy Na
15530 76 79 42 6c 75 65 20 43 6f 72 6e 66 6c 6f 77 65  vyBlue Cornflowe
15540 72 42 6c 75 65 20 44 61 72 6b 53 6c 61 74 65 42  rBlue DarkSlateB
15550 6c 75 65 20 53 6c 61 74 65 42 6c 75 65 0a 09 09  lue SlateBlue...
15560 09 4d 65 64 69 75 6d 53 6c 61 74 65 42 6c 75 65  .MediumSlateBlue
15570 20 4c 69 67 68 74 53 6c 61 74 65 42 6c 75 65 20   LightSlateBlue 
15580 4d 65 64 69 75 6d 42 6c 75 65 20 52 6f 79 61 6c  MediumBlue Royal
15590 42 6c 75 65 20 62 6c 75 65 20 44 6f 64 67 65 72  Blue blue Dodger
155a0 42 6c 75 65 0a 09 09 09 44 65 65 70 53 6b 79 42  Blue....DeepSkyB
155b0 6c 75 65 20 53 6b 79 42 6c 75 65 20 4c 69 67 68  lue SkyBlue Ligh
155c0 74 53 6b 79 42 6c 75 65 20 53 74 65 65 6c 42 6c  tSkyBlue SteelBl
155d0 75 65 20 4c 69 67 68 74 53 74 65 65 6c 42 6c 75  ue LightSteelBlu
155e0 65 20 4c 69 67 68 74 42 6c 75 65 0a 09 09 09 50  e LightBlue....P
155f0 6f 77 64 65 72 42 6c 75 65 20 50 61 6c 65 54 75  owderBlue PaleTu
15600 72 71 75 6f 69 73 65 20 44 61 72 6b 54 75 72 71  rquoise DarkTurq
15610 75 6f 69 73 65 20 4d 65 64 69 75 6d 54 75 72 71  uoise MediumTurq
15620 75 6f 69 73 65 20 74 75 72 71 75 6f 69 73 65 0a  uoise turquoise.
15630 09 09 09 63 79 61 6e 20 4c 69 67 68 74 43 79 61  ...cyan LightCya
15640 6e 20 43 61 64 65 74 42 6c 75 65 20 4d 65 64 69  n CadetBlue Medi
15650 75 6d 41 71 75 61 6d 61 72 69 6e 65 20 61 71 75  umAquamarine aqu
15660 61 6d 61 72 69 6e 65 20 44 61 72 6b 47 72 65 65  amarine DarkGree
15670 6e 0a 09 09 09 44 61 72 6b 4f 6c 69 76 65 47 72  n....DarkOliveGr
15680 65 65 6e 20 44 61 72 6b 53 65 61 47 72 65 65 6e  een DarkSeaGreen
15690 20 53 65 61 47 72 65 65 6e 20 4d 65 64 69 75 6d   SeaGreen Medium
156a0 53 65 61 47 72 65 65 6e 20 4c 69 67 68 74 53 65  SeaGreen LightSe
156b0 61 47 72 65 65 6e 0a 09 09 09 50 61 6c 65 47 72  aGreen....PaleGr
156c0 65 65 6e 20 53 70 72 69 6e 67 47 72 65 65 6e 20  een SpringGreen 
156d0 4c 61 77 6e 47 72 65 65 6e 20 67 72 65 65 6e 20  LawnGreen green 
156e0 63 68 61 72 74 72 65 75 73 65 20 4d 65 64 69 75  chartreuse Mediu
156f0 6d 53 70 72 69 6e 67 47 72 65 65 6e 0a 09 09 09  mSpringGreen....
15700 47 72 65 65 6e 59 65 6c 6c 6f 77 20 4c 69 6d 65  GreenYellow Lime
15710 47 72 65 65 6e 20 59 65 6c 6c 6f 77 47 72 65 65  Green YellowGree
15720 6e 20 46 6f 72 65 73 74 47 72 65 65 6e 20 4f 6c  n ForestGreen Ol
15730 69 76 65 44 72 61 62 20 44 61 72 6b 4b 68 61 6b  iveDrab DarkKhak
15740 69 0a 09 09 09 6b 68 61 6b 69 20 50 61 6c 65 47  i....khaki PaleG
15750 6f 6c 64 65 6e 72 6f 64 20 4c 69 67 68 74 47 6f  oldenrod LightGo
15760 6c 64 65 6e 72 6f 64 59 65 6c 6c 6f 77 20 4c 69  ldenrodYellow Li
15770 67 68 74 59 65 6c 6c 6f 77 20 79 65 6c 6c 6f 77  ghtYellow yellow
15780 0a 09 09 09 67 6f 6c 64 20 4c 69 67 68 74 47 6f  ....gold LightGo
15790 6c 64 65 6e 72 6f 64 20 67 6f 6c 64 65 6e 72 6f  ldenrod goldenro
157a0 64 20 44 61 72 6b 47 6f 6c 64 65 6e 72 6f 64 20  d DarkGoldenrod 
157b0 52 6f 73 79 42 72 6f 77 6e 20 49 6e 64 69 61 6e  RosyBrown Indian
157c0 52 65 64 0a 09 09 09 53 61 64 64 6c 65 42 72 6f  Red....SaddleBro
157d0 77 6e 20 73 69 65 6e 6e 61 20 70 65 72 75 20 62  wn sienna peru b
157e0 75 72 6c 79 77 6f 6f 64 20 62 65 69 67 65 20 77  urlywood beige w
157f0 68 65 61 74 20 53 61 6e 64 79 42 72 6f 77 6e 20  heat SandyBrown 
15800 74 61 6e 0a 09 09 09 63 68 6f 63 6f 6c 61 74 65  tan....chocolate
15810 20 66 69 72 65 62 72 69 63 6b 20 62 72 6f 77 6e   firebrick brown
15820 20 44 61 72 6b 53 61 6c 6d 6f 6e 20 73 61 6c 6d   DarkSalmon salm
15830 6f 6e 20 4c 69 67 68 74 53 61 6c 6d 6f 6e 20 6f  on LightSalmon o
15840 72 61 6e 67 65 0a 09 09 09 44 61 72 6b 4f 72 61  range....DarkOra
15850 6e 67 65 20 63 6f 72 61 6c 20 4c 69 67 68 74 43  nge coral LightC
15860 6f 72 61 6c 20 74 6f 6d 61 74 6f 20 4f 72 61 6e  oral tomato Oran
15870 67 65 52 65 64 20 72 65 64 20 48 6f 74 50 69 6e  geRed red HotPin
15880 6b 20 44 65 65 70 50 69 6e 6b 0a 09 09 09 70 69  k DeepPink....pi
15890 6e 6b 20 4c 69 67 68 74 50 69 6e 6b 20 50 61 6c  nk LightPink Pal
158a0 65 56 69 6f 6c 65 74 52 65 64 20 6d 61 72 6f 6f  eVioletRed maroo
158b0 6e 20 4d 65 64 69 75 6d 56 69 6f 6c 65 74 52 65  n MediumVioletRe
158c0 64 20 56 69 6f 6c 65 74 52 65 64 0a 09 09 09 6d  d VioletRed....m
158d0 61 67 65 6e 74 61 20 76 69 6f 6c 65 74 20 70 6c  agenta violet pl
158e0 75 6d 20 6f 72 63 68 69 64 20 4d 65 64 69 75 6d  um orchid Medium
158f0 4f 72 63 68 69 64 20 44 61 72 6b 4f 72 63 68 69  Orchid DarkOrchi
15900 64 20 44 61 72 6b 56 69 6f 6c 65 74 0a 09 09 09  d DarkViolet....
15910 42 6c 75 65 56 69 6f 6c 65 74 20 70 75 72 70 6c  BlueViolet purpl
15920 65 20 4d 65 64 69 75 6d 50 75 72 70 6c 65 20 74  e MediumPurple t
15930 68 69 73 74 6c 65 20 73 6e 6f 77 31 20 73 6e 6f  histle snow1 sno
15940 77 32 20 73 6e 6f 77 33 20 73 6e 6f 77 34 0a 09  w2 snow3 snow4..
15950 09 09 73 65 61 73 68 65 6c 6c 31 20 73 65 61 73  ..seashell1 seas
15960 68 65 6c 6c 32 20 73 65 61 73 68 65 6c 6c 33 20  hell2 seashell3 
15970 73 65 61 73 68 65 6c 6c 34 20 41 6e 74 69 71 75  seashell4 Antiqu
15980 65 57 68 69 74 65 31 20 41 6e 74 69 71 75 65 57  eWhite1 AntiqueW
15990 68 69 74 65 32 0a 09 09 09 41 6e 74 69 71 75 65  hite2....Antique
159a0 57 68 69 74 65 33 20 41 6e 74 69 71 75 65 57 68  White3 AntiqueWh
159b0 69 74 65 34 20 62 69 73 71 75 65 31 20 62 69 73  ite4 bisque1 bis
159c0 71 75 65 32 20 62 69 73 71 75 65 33 20 62 69 73  que2 bisque3 bis
159d0 71 75 65 34 0a 09 09 09 50 65 61 63 68 50 75 66  que4....PeachPuf
159e0 66 31 20 50 65 61 63 68 50 75 66 66 32 20 50 65  f1 PeachPuff2 Pe
159f0 61 63 68 50 75 66 66 33 20 50 65 61 63 68 50 75  achPuff3 PeachPu
15a00 66 66 34 20 4e 61 76 61 6a 6f 57 68 69 74 65 31  ff4 NavajoWhite1
15a10 0a 09 09 09 4e 61 76 61 6a 6f 57 68 69 74 65 32  ....NavajoWhite2
15a20 20 4e 61 76 61 6a 6f 57 68 69 74 65 33 20 4e 61   NavajoWhite3 Na
15a30 76 61 6a 6f 57 68 69 74 65 34 20 4c 65 6d 6f 6e  vajoWhite4 Lemon
15a40 43 68 69 66 66 6f 6e 31 20 4c 65 6d 6f 6e 43 68  Chiffon1 LemonCh
15a50 69 66 66 6f 6e 32 0a 09 09 09 4c 65 6d 6f 6e 43  iffon2....LemonC
15a60 68 69 66 66 6f 6e 33 20 4c 65 6d 6f 6e 43 68 69  hiffon3 LemonChi
15a70 66 66 6f 6e 34 20 63 6f 72 6e 73 69 6c 6b 31 20  ffon4 cornsilk1 
15a80 63 6f 72 6e 73 69 6c 6b 32 20 63 6f 72 6e 73 69  cornsilk2 cornsi
15a90 6c 6b 33 20 63 6f 72 6e 73 69 6c 6b 34 0a 09 09  lk3 cornsilk4...
15aa0 09 69 76 6f 72 79 31 20 69 76 6f 72 79 32 20 69  .ivory1 ivory2 i
15ab0 76 6f 72 79 33 20 69 76 6f 72 79 34 20 68 6f 6e  vory3 ivory4 hon
15ac0 65 79 64 65 77 31 20 68 6f 6e 65 79 64 65 77 32  eydew1 honeydew2
15ad0 20 68 6f 6e 65 79 64 65 77 33 20 68 6f 6e 65 79   honeydew3 honey
15ae0 64 65 77 34 0a 09 09 09 4c 61 76 65 6e 64 65 72  dew4....Lavender
15af0 42 6c 75 73 68 31 20 4c 61 76 65 6e 64 65 72 42  Blush1 LavenderB
15b00 6c 75 73 68 32 20 4c 61 76 65 6e 64 65 72 42 6c  lush2 LavenderBl
15b10 75 73 68 33 20 4c 61 76 65 6e 64 65 72 42 6c 75  ush3 LavenderBlu
15b20 73 68 34 0a 09 09 09 4d 69 73 74 79 52 6f 73 65  sh4....MistyRose
15b30 31 20 4d 69 73 74 79 52 6f 73 65 32 20 4d 69 73  1 MistyRose2 Mis
15b40 74 79 52 6f 73 65 33 20 4d 69 73 74 79 52 6f 73  tyRose3 MistyRos
15b50 65 34 20 61 7a 75 72 65 31 20 61 7a 75 72 65 32  e4 azure1 azure2
15b60 20 61 7a 75 72 65 33 0a 09 09 09 61 7a 75 72 65   azure3....azure
15b70 34 20 53 6c 61 74 65 42 6c 75 65 31 20 53 6c 61  4 SlateBlue1 Sla
15b80 74 65 42 6c 75 65 32 20 53 6c 61 74 65 42 6c 75  teBlue2 SlateBlu
15b90 65 33 20 53 6c 61 74 65 42 6c 75 65 34 20 52 6f  e3 SlateBlue4 Ro
15ba0 79 61 6c 42 6c 75 65 31 0a 09 09 09 52 6f 79 61  yalBlue1....Roya
15bb0 6c 42 6c 75 65 32 20 52 6f 79 61 6c 42 6c 75 65  lBlue2 RoyalBlue
15bc0 33 20 52 6f 79 61 6c 42 6c 75 65 34 20 62 6c 75  3 RoyalBlue4 blu
15bd0 65 31 20 62 6c 75 65 32 20 62 6c 75 65 33 20 62  e1 blue2 blue3 b
15be0 6c 75 65 34 0a 09 09 09 44 6f 64 67 65 72 42 6c  lue4....DodgerBl
15bf0 75 65 31 20 44 6f 64 67 65 72 42 6c 75 65 32 20  ue1 DodgerBlue2 
15c00 44 6f 64 67 65 72 42 6c 75 65 33 20 44 6f 64 67  DodgerBlue3 Dodg
15c10 65 72 42 6c 75 65 34 20 53 74 65 65 6c 42 6c 75  erBlue4 SteelBlu
15c20 65 31 0a 09 09 09 53 74 65 65 6c 42 6c 75 65 32  e1....SteelBlue2
15c30 20 53 74 65 65 6c 42 6c 75 65 33 20 53 74 65 65   SteelBlue3 Stee
15c40 6c 42 6c 75 65 34 20 44 65 65 70 53 6b 79 42 6c  lBlue4 DeepSkyBl
15c50 75 65 31 20 44 65 65 70 53 6b 79 42 6c 75 65 32  ue1 DeepSkyBlue2
15c60 0a 09 09 09 44 65 65 70 53 6b 79 42 6c 75 65 33  ....DeepSkyBlue3
15c70 20 44 65 65 70 53 6b 79 42 6c 75 65 34 20 53 6b   DeepSkyBlue4 Sk
15c80 79 42 6c 75 65 31 20 53 6b 79 42 6c 75 65 32 20  yBlue1 SkyBlue2 
15c90 53 6b 79 42 6c 75 65 33 20 53 6b 79 42 6c 75 65  SkyBlue3 SkyBlue
15ca0 34 0a 09 09 09 4c 69 67 68 74 53 6b 79 42 6c 75  4....LightSkyBlu
15cb0 65 31 20 4c 69 67 68 74 53 6b 79 42 6c 75 65 32  e1 LightSkyBlue2
15cc0 20 4c 69 67 68 74 53 6b 79 42 6c 75 65 33 20 4c   LightSkyBlue3 L
15cd0 69 67 68 74 53 6b 79 42 6c 75 65 34 20 53 6c 61  ightSkyBlue4 Sla
15ce0 74 65 47 72 61 79 31 0a 09 09 09 53 6c 61 74 65  teGray1....Slate
15cf0 47 72 61 79 32 20 53 6c 61 74 65 47 72 61 79 33  Gray2 SlateGray3
15d00 20 53 6c 61 74 65 47 72 61 79 34 20 4c 69 67 68   SlateGray4 Ligh
15d10 74 53 74 65 65 6c 42 6c 75 65 31 20 4c 69 67 68  tSteelBlue1 Ligh
15d20 74 53 74 65 65 6c 42 6c 75 65 32 0a 09 09 09 4c  tSteelBlue2....L
15d30 69 67 68 74 53 74 65 65 6c 42 6c 75 65 33 20 4c  ightSteelBlue3 L
15d40 69 67 68 74 53 74 65 65 6c 42 6c 75 65 34 20 4c  ightSteelBlue4 L
15d50 69 67 68 74 42 6c 75 65 31 20 4c 69 67 68 74 42  ightBlue1 LightB
15d60 6c 75 65 32 20 4c 69 67 68 74 42 6c 75 65 33 0a  lue2 LightBlue3.
15d70 09 09 09 4c 69 67 68 74 42 6c 75 65 34 20 4c 69  ...LightBlue4 Li
15d80 67 68 74 43 79 61 6e 31 20 4c 69 67 68 74 43 79  ghtCyan1 LightCy
15d90 61 6e 32 20 4c 69 67 68 74 43 79 61 6e 33 20 4c  an2 LightCyan3 L
15da0 69 67 68 74 43 79 61 6e 34 0a 09 09 09 50 61 6c  ightCyan4....Pal
15db0 65 54 75 72 71 75 6f 69 73 65 31 20 50 61 6c 65  eTurquoise1 Pale
15dc0 54 75 72 71 75 6f 69 73 65 32 20 50 61 6c 65 54  Turquoise2 PaleT
15dd0 75 72 71 75 6f 69 73 65 33 20 50 61 6c 65 54 75  urquoise3 PaleTu
15de0 72 71 75 6f 69 73 65 34 0a 09 09 09 43 61 64 65  rquoise4....Cade
15df0 74 42 6c 75 65 31 20 43 61 64 65 74 42 6c 75 65  tBlue1 CadetBlue
15e00 32 20 43 61 64 65 74 42 6c 75 65 33 20 43 61 64  2 CadetBlue3 Cad
15e10 65 74 42 6c 75 65 34 20 74 75 72 71 75 6f 69 73  etBlue4 turquois
15e20 65 31 0a 09 09 09 74 75 72 71 75 6f 69 73 65 32  e1....turquoise2
15e30 20 74 75 72 71 75 6f 69 73 65 33 20 74 75 72 71   turquoise3 turq
15e40 75 6f 69 73 65 34 20 63 79 61 6e 31 20 63 79 61  uoise4 cyan1 cya
15e50 6e 32 20 63 79 61 6e 33 20 63 79 61 6e 34 0a 09  n2 cyan3 cyan4..
15e60 09 09 44 61 72 6b 53 6c 61 74 65 47 72 61 79 31  ..DarkSlateGray1
15e70 20 44 61 72 6b 53 6c 61 74 65 47 72 61 79 32 20   DarkSlateGray2 
15e80 44 61 72 6b 53 6c 61 74 65 47 72 61 79 33 20 44  DarkSlateGray3 D
15e90 61 72 6b 53 6c 61 74 65 47 72 61 79 34 0a 09 09  arkSlateGray4...
15ea0 09 61 71 75 61 6d 61 72 69 6e 65 31 20 61 71 75  .aquamarine1 aqu
15eb0 61 6d 61 72 69 6e 65 32 20 61 71 75 61 6d 61 72  amarine2 aquamar
15ec0 69 6e 65 33 20 61 71 75 61 6d 61 72 69 6e 65 34  ine3 aquamarine4
15ed0 20 44 61 72 6b 53 65 61 47 72 65 65 6e 31 0a 09   DarkSeaGreen1..
15ee0 09 09 44 61 72 6b 53 65 61 47 72 65 65 6e 32 20  ..DarkSeaGreen2 
15ef0 44 61 72 6b 53 65 61 47 72 65 65 6e 33 20 44 61  DarkSeaGreen3 Da
15f00 72 6b 53 65 61 47 72 65 65 6e 34 20 53 65 61 47  rkSeaGreen4 SeaG
15f10 72 65 65 6e 31 20 53 65 61 47 72 65 65 6e 32 0a  reen1 SeaGreen2.
15f20 09 09 09 53 65 61 47 72 65 65 6e 33 20 53 65 61  ...SeaGreen3 Sea
15f30 47 72 65 65 6e 34 20 50 61 6c 65 47 72 65 65 6e  Green4 PaleGreen
15f40 31 20 50 61 6c 65 47 72 65 65 6e 32 20 50 61 6c  1 PaleGreen2 Pal
15f50 65 47 72 65 65 6e 33 20 50 61 6c 65 47 72 65 65  eGreen3 PaleGree
15f60 6e 34 0a 09 09 09 53 70 72 69 6e 67 47 72 65 65  n4....SpringGree
15f70 6e 31 20 53 70 72 69 6e 67 47 72 65 65 6e 32 20  n1 SpringGreen2 
15f80 53 70 72 69 6e 67 47 72 65 65 6e 33 20 53 70 72  SpringGreen3 Spr
15f90 69 6e 67 47 72 65 65 6e 34 20 67 72 65 65 6e 31  ingGreen4 green1
15fa0 20 67 72 65 65 6e 32 0a 09 09 09 67 72 65 65 6e   green2....green
15fb0 33 20 67 72 65 65 6e 34 20 63 68 61 72 74 72 65  3 green4 chartre
15fc0 75 73 65 31 20 63 68 61 72 74 72 65 75 73 65 32  use1 chartreuse2
15fd0 20 63 68 61 72 74 72 65 75 73 65 33 20 63 68 61   chartreuse3 cha
15fe0 72 74 72 65 75 73 65 34 0a 09 09 09 4f 6c 69 76  rtreuse4....Oliv
15ff0 65 44 72 61 62 31 20 4f 6c 69 76 65 44 72 61 62  eDrab1 OliveDrab
16000 32 20 4f 6c 69 76 65 44 72 61 62 33 20 4f 6c 69  2 OliveDrab3 Oli
16010 76 65 44 72 61 62 34 20 44 61 72 6b 4f 6c 69 76  veDrab4 DarkOliv
16020 65 47 72 65 65 6e 31 0a 09 09 09 44 61 72 6b 4f  eGreen1....DarkO
16030 6c 69 76 65 47 72 65 65 6e 32 20 44 61 72 6b 4f  liveGreen2 DarkO
16040 6c 69 76 65 47 72 65 65 6e 33 20 44 61 72 6b 4f  liveGreen3 DarkO
16050 6c 69 76 65 47 72 65 65 6e 34 20 6b 68 61 6b 69  liveGreen4 khaki
16060 31 20 6b 68 61 6b 69 32 0a 09 09 09 6b 68 61 6b  1 khaki2....khak
16070 69 33 20 6b 68 61 6b 69 34 20 4c 69 67 68 74 47  i3 khaki4 LightG
16080 6f 6c 64 65 6e 72 6f 64 31 20 4c 69 67 68 74 47  oldenrod1 LightG
16090 6f 6c 64 65 6e 72 6f 64 32 20 4c 69 67 68 74 47  oldenrod2 LightG
160a0 6f 6c 64 65 6e 72 6f 64 33 0a 09 09 09 4c 69 67  oldenrod3....Lig
160b0 68 74 47 6f 6c 64 65 6e 72 6f 64 34 20 4c 69 67  htGoldenrod4 Lig
160c0 68 74 59 65 6c 6c 6f 77 31 20 4c 69 67 68 74 59  htYellow1 LightY
160d0 65 6c 6c 6f 77 32 20 4c 69 67 68 74 59 65 6c 6c  ellow2 LightYell
160e0 6f 77 33 20 4c 69 67 68 74 59 65 6c 6c 6f 77 34  ow3 LightYellow4
160f0 0a 09 09 09 79 65 6c 6c 6f 77 31 20 79 65 6c 6c  ....yellow1 yell
16100 6f 77 32 20 79 65 6c 6c 6f 77 33 20 79 65 6c 6c  ow2 yellow3 yell
16110 6f 77 34 20 67 6f 6c 64 31 20 67 6f 6c 64 32 20  ow4 gold1 gold2 
16120 67 6f 6c 64 33 20 67 6f 6c 64 34 20 67 6f 6c 64  gold3 gold4 gold
16130 65 6e 72 6f 64 31 0a 09 09 09 67 6f 6c 64 65 6e  enrod1....golden
16140 72 6f 64 32 20 67 6f 6c 64 65 6e 72 6f 64 33 20  rod2 goldenrod3 
16150 67 6f 6c 64 65 6e 72 6f 64 34 20 44 61 72 6b 47  goldenrod4 DarkG
16160 6f 6c 64 65 6e 72 6f 64 31 20 44 61 72 6b 47 6f  oldenrod1 DarkGo
16170 6c 64 65 6e 72 6f 64 32 0a 09 09 09 44 61 72 6b  ldenrod2....Dark
16180 47 6f 6c 64 65 6e 72 6f 64 33 20 44 61 72 6b 47  Goldenrod3 DarkG
16190 6f 6c 64 65 6e 72 6f 64 34 20 52 6f 73 79 42 72  oldenrod4 RosyBr
161a0 6f 77 6e 31 20 52 6f 73 79 42 72 6f 77 6e 32 20  own1 RosyBrown2 
161b0 52 6f 73 79 42 72 6f 77 6e 33 0a 09 09 09 52 6f  RosyBrown3....Ro
161c0 73 79 42 72 6f 77 6e 34 20 49 6e 64 69 61 6e 52  syBrown4 IndianR
161d0 65 64 31 20 49 6e 64 69 61 6e 52 65 64 32 20 49  ed1 IndianRed2 I
161e0 6e 64 69 61 6e 52 65 64 33 20 49 6e 64 69 61 6e  ndianRed3 Indian
161f0 52 65 64 34 20 73 69 65 6e 6e 61 31 0a 09 09 09  Red4 sienna1....
16200 73 69 65 6e 6e 61 32 20 73 69 65 6e 6e 61 33 20  sienna2 sienna3 
16210 73 69 65 6e 6e 61 34 20 62 75 72 6c 79 77 6f 6f  sienna4 burlywoo
16220 64 31 20 62 75 72 6c 79 77 6f 6f 64 32 20 62 75  d1 burlywood2 bu
16230 72 6c 79 77 6f 6f 64 33 20 62 75 72 6c 79 77 6f  rlywood3 burlywo
16240 6f 64 34 0a 09 09 09 77 68 65 61 74 31 20 77 68  od4....wheat1 wh
16250 65 61 74 32 20 77 68 65 61 74 33 20 77 68 65 61  eat2 wheat3 whea
16260 74 34 20 74 61 6e 31 20 74 61 6e 32 20 74 61 6e  t4 tan1 tan2 tan
16270 33 20 74 61 6e 34 20 63 68 6f 63 6f 6c 61 74 65  3 tan4 chocolate
16280 31 0a 09 09 09 63 68 6f 63 6f 6c 61 74 65 32 20  1....chocolate2 
16290 63 68 6f 63 6f 6c 61 74 65 33 20 63 68 6f 63 6f  chocolate3 choco
162a0 6c 61 74 65 34 20 66 69 72 65 62 72 69 63 6b 31  late4 firebrick1
162b0 20 66 69 72 65 62 72 69 63 6b 32 20 66 69 72 65   firebrick2 fire
162c0 62 72 69 63 6b 33 0a 09 09 09 66 69 72 65 62 72  brick3....firebr
162d0 69 63 6b 34 20 62 72 6f 77 6e 31 20 62 72 6f 77  ick4 brown1 brow
162e0 6e 32 20 62 72 6f 77 6e 33 20 62 72 6f 77 6e 34  n2 brown3 brown4
162f0 20 73 61 6c 6d 6f 6e 31 20 73 61 6c 6d 6f 6e 32   salmon1 salmon2
16300 20 73 61 6c 6d 6f 6e 33 0a 09 09 09 73 61 6c 6d   salmon3....salm
16310 6f 6e 34 20 4c 69 67 68 74 53 61 6c 6d 6f 6e 31  on4 LightSalmon1
16320 20 4c 69 67 68 74 53 61 6c 6d 6f 6e 32 20 4c 69   LightSalmon2 Li
16330 67 68 74 53 61 6c 6d 6f 6e 33 20 4c 69 67 68 74  ghtSalmon3 Light
16340 53 61 6c 6d 6f 6e 34 20 6f 72 61 6e 67 65 31 0a  Salmon4 orange1.
16350 09 09 09 6f 72 61 6e 67 65 32 20 6f 72 61 6e 67  ...orange2 orang
16360 65 33 20 6f 72 61 6e 67 65 34 20 44 61 72 6b 4f  e3 orange4 DarkO
16370 72 61 6e 67 65 31 20 44 61 72 6b 4f 72 61 6e 67  range1 DarkOrang
16380 65 32 20 44 61 72 6b 4f 72 61 6e 67 65 33 0a 09  e2 DarkOrange3..
16390 09 09 44 61 72 6b 4f 72 61 6e 67 65 34 20 63 6f  ..DarkOrange4 co
163a0 72 61 6c 31 20 63 6f 72 61 6c 32 20 63 6f 72 61  ral1 coral2 cora
163b0 6c 33 20 63 6f 72 61 6c 34 20 74 6f 6d 61 74 6f  l3 coral4 tomato
163c0 31 20 74 6f 6d 61 74 6f 32 20 74 6f 6d 61 74 6f  1 tomato2 tomato
163d0 33 0a 09 09 09 74 6f 6d 61 74 6f 34 20 4f 72 61  3....tomato4 Ora
163e0 6e 67 65 52 65 64 31 20 4f 72 61 6e 67 65 52 65  ngeRed1 OrangeRe
163f0 64 32 20 4f 72 61 6e 67 65 52 65 64 33 20 4f 72  d2 OrangeRed3 Or
16400 61 6e 67 65 52 65 64 34 20 72 65 64 31 20 72 65  angeRed4 red1 re
16410 64 32 0a 09 09 09 72 65 64 33 20 72 65 64 34 20  d2....red3 red4 
16420 44 65 65 70 50 69 6e 6b 31 20 44 65 65 70 50 69  DeepPink1 DeepPi
16430 6e 6b 32 20 44 65 65 70 50 69 6e 6b 33 20 44 65  nk2 DeepPink3 De
16440 65 70 50 69 6e 6b 34 20 48 6f 74 50 69 6e 6b 31  epPink4 HotPink1
16450 0a 09 09 09 48 6f 74 50 69 6e 6b 32 20 48 6f 74  ....HotPink2 Hot
16460 50 69 6e 6b 33 20 48 6f 74 50 69 6e 6b 34 20 70  Pink3 HotPink4 p
16470 69 6e 6b 31 20 70 69 6e 6b 32 20 70 69 6e 6b 33  ink1 pink2 pink3
16480 20 70 69 6e 6b 34 20 4c 69 67 68 74 50 69 6e 6b   pink4 LightPink
16490 31 0a 09 09 09 4c 69 67 68 74 50 69 6e 6b 32 20  1....LightPink2 
164a0 4c 69 67 68 74 50 69 6e 6b 33 20 4c 69 67 68 74  LightPink3 Light
164b0 50 69 6e 6b 34 20 50 61 6c 65 56 69 6f 6c 65 74  Pink4 PaleViolet
164c0 52 65 64 31 20 50 61 6c 65 56 69 6f 6c 65 74 52  Red1 PaleVioletR
164d0 65 64 32 0a 09 09 09 50 61 6c 65 56 69 6f 6c 65  ed2....PaleViole
164e0 74 52 65 64 33 20 50 61 6c 65 56 69 6f 6c 65 74  tRed3 PaleViolet
164f0 52 65 64 34 20 6d 61 72 6f 6f 6e 31 20 6d 61 72  Red4 maroon1 mar
16500 6f 6f 6e 32 20 6d 61 72 6f 6f 6e 33 20 6d 61 72  oon2 maroon3 mar
16510 6f 6f 6e 34 0a 09 09 09 56 69 6f 6c 65 74 52 65  oon4....VioletRe
16520 64 31 20 56 69 6f 6c 65 74 52 65 64 32 20 56 69  d1 VioletRed2 Vi
16530 6f 6c 65 74 52 65 64 33 20 56 69 6f 6c 65 74 52  oletRed3 VioletR
16540 65 64 34 20 6d 61 67 65 6e 74 61 31 20 6d 61 67  ed4 magenta1 mag
16550 65 6e 74 61 32 0a 09 09 09 6d 61 67 65 6e 74 61  enta2....magenta
16560 33 20 6d 61 67 65 6e 74 61 34 20 6f 72 63 68 69  3 magenta4 orchi
16570 64 31 20 6f 72 63 68 69 64 32 20 6f 72 63 68 69  d1 orchid2 orchi
16580 64 33 20 6f 72 63 68 69 64 34 20 70 6c 75 6d 31  d3 orchid4 plum1
16590 20 70 6c 75 6d 32 0a 09 09 09 70 6c 75 6d 33 20   plum2....plum3 
165a0 70 6c 75 6d 34 20 4d 65 64 69 75 6d 4f 72 63 68  plum4 MediumOrch
165b0 69 64 31 20 4d 65 64 69 75 6d 4f 72 63 68 69 64  id1 MediumOrchid
165c0 32 20 4d 65 64 69 75 6d 4f 72 63 68 69 64 33 0a  2 MediumOrchid3.
165d0 09 09 09 4d 65 64 69 75 6d 4f 72 63 68 69 64 34  ...MediumOrchid4
165e0 20 44 61 72 6b 4f 72 63 68 69 64 31 20 44 61 72   DarkOrchid1 Dar
165f0 6b 4f 72 63 68 69 64 32 20 44 61 72 6b 4f 72 63  kOrchid2 DarkOrc
16600 68 69 64 33 20 44 61 72 6b 4f 72 63 68 69 64 34  hid3 DarkOrchid4
16610 0a 09 09 09 70 75 72 70 6c 65 31 20 70 75 72 70  ....purple1 purp
16620 6c 65 32 20 70 75 72 70 6c 65 33 20 70 75 72 70  le2 purple3 purp
16630 6c 65 34 20 4d 65 64 69 75 6d 50 75 72 70 6c 65  le4 MediumPurple
16640 31 20 4d 65 64 69 75 6d 50 75 72 70 6c 65 32 0a  1 MediumPurple2.
16650 09 09 09 4d 65 64 69 75 6d 50 75 72 70 6c 65 33  ...MediumPurple3
16660 20 4d 65 64 69 75 6d 50 75 72 70 6c 65 34 20 74   MediumPurple4 t
16670 68 69 73 74 6c 65 31 20 74 68 69 73 74 6c 65 32  histle1 thistle2
16680 20 74 68 69 73 74 6c 65 33 20 74 68 69 73 74 6c   thistle3 thistl
16690 65 34 0a 09 09 09 67 72 61 79 30 20 67 72 65 79  e4....gray0 grey
166a0 30 20 67 72 61 79 31 20 67 72 65 79 31 20 67 72  0 gray1 grey1 gr
166b0 61 79 32 20 67 72 65 79 32 20 67 72 61 79 33 20  ay2 grey2 gray3 
166c0 67 72 65 79 33 20 67 72 61 79 34 20 67 72 65 79  grey3 gray4 grey
166d0 34 20 67 72 61 79 35 0a 09 09 09 67 72 65 79 35  4 gray5....grey5
166e0 20 67 72 61 79 36 20 67 72 65 79 36 20 67 72 61   gray6 grey6 gra
166f0 79 37 20 67 72 65 79 37 20 67 72 61 79 38 20 67  y7 grey7 gray8 g
16700 72 65 79 38 20 67 72 61 79 39 20 67 72 65 79 39  rey8 gray9 grey9
16710 20 67 72 61 79 31 30 20 67 72 65 79 31 30 0a 09   gray10 grey10..
16720 09 09 67 72 61 79 31 31 20 67 72 65 79 31 31 20  ..gray11 grey11 
16730 67 72 61 79 31 32 20 67 72 65 79 31 32 20 67 72  gray12 grey12 gr
16740 61 79 31 33 20 67 72 65 79 31 33 20 67 72 61 79  ay13 grey13 gray
16750 31 34 20 67 72 65 79 31 34 20 67 72 61 79 31 35  14 grey14 gray15
16760 0a 09 09 09 67 72 65 79 31 35 20 67 72 61 79 31  ....grey15 gray1
16770 36 20 67 72 65 79 31 36 20 67 72 61 79 31 37 20  6 grey16 gray17 
16780 67 72 65 79 31 37 20 67 72 61 79 31 38 20 67 72  grey17 gray18 gr
16790 65 79 31 38 20 67 72 61 79 31 39 20 67 72 65 79  ey18 gray19 grey
167a0 31 39 0a 09 09 09 67 72 61 79 32 30 20 67 72 65  19....gray20 gre
167b0 79 32 30 20 67 72 61 79 32 31 20 67 72 65 79 32  y20 gray21 grey2
167c0 31 20 67 72 61 79 32 32 20 67 72 65 79 32 32 20  1 gray22 grey22 
167d0 67 72 61 79 32 33 20 67 72 65 79 32 33 20 67 72  gray23 grey23 gr
167e0 61 79 32 34 0a 09 09 09 67 72 65 79 32 34 20 67  ay24....grey24 g
167f0 72 61 79 32 35 20 67 72 65 79 32 35 20 67 72 61  ray25 grey25 gra
16800 79 32 36 20 67 72 65 79 32 36 20 67 72 61 79 32  y26 grey26 gray2
16810 37 20 67 72 65 79 32 37 20 67 72 61 79 32 38 20  7 grey27 gray28 
16820 67 72 65 79 32 38 0a 09 09 09 67 72 61 79 32 39  grey28....gray29
16830 20 67 72 65 79 32 39 20 67 72 61 79 33 30 20 67   grey29 gray30 g
16840 72 65 79 33 30 20 67 72 61 79 33 31 20 67 72 65  rey30 gray31 gre
16850 79 33 31 20 67 72 61 79 33 32 20 67 72 65 79 33  y31 gray32 grey3
16860 32 20 67 72 61 79 33 33 0a 09 09 09 67 72 65 79  2 gray33....grey
16870 33 33 20 67 72 61 79 33 34 20 67 72 65 79 33 34  33 gray34 grey34
16880 20 67 72 61 79 33 35 20 67 72 65 79 33 35 20 67   gray35 grey35 g
16890 72 61 79 33 36 20 67 72 65 79 33 36 20 67 72 61  ray36 grey36 gra
168a0 79 33 37 20 67 72 65 79 33 37 0a 09 09 09 67 72  y37 grey37....gr
168b0 61 79 33 38 20 67 72 65 79 33 38 20 67 72 61 79  ay38 grey38 gray
168c0 33 39 20 67 72 65 79 33 39 20 67 72 61 79 34 30  39 grey39 gray40
168d0 20 67 72 65 79 34 30 20 67 72 61 79 34 31 20 67   grey40 gray41 g
168e0 72 65 79 34 31 20 67 72 61 79 34 32 0a 09 09 09  rey41 gray42....
168f0 67 72 65 79 34 32 20 67 72 61 79 34 33 20 67 72  grey42 gray43 gr
16900 65 79 34 33 20 67 72 61 79 34 34 20 67 72 65 79  ey43 gray44 grey
16910 34 34 20 67 72 61 79 34 35 20 67 72 65 79 34 35  44 gray45 grey45
16920 20 67 72 61 79 34 36 20 67 72 65 79 34 36 0a 09   gray46 grey46..
16930 09 09 67 72 61 79 34 37 20 67 72 65 79 34 37 20  ..gray47 grey47 
16940 67 72 61 79 34 38 20 67 72 65 79 34 38 20 67 72  gray48 grey48 gr
16950 61 79 34 39 20 67 72 65 79 34 39 20 67 72 61 79  ay49 grey49 gray
16960 35 30 20 67 72 65 79 35 30 20 67 72 61 79 35 31  50 grey50 gray51
16970 0a 09 09 09 67 72 65 79 35 31 20 67 72 61 79 35  ....grey51 gray5
16980 32 20 67 72 65 79 35 32 20 67 72 61 79 35 33 20  2 grey52 gray53 
16990 67 72 65 79 35 33 20 67 72 61 79 35 34 20 67 72  grey53 gray54 gr
169a0 65 79 35 34 20 67 72 61 79 35 35 20 67 72 65 79  ey54 gray55 grey
169b0 35 35 0a 09 09 09 67 72 61 79 35 36 20 67 72 65  55....gray56 gre
169c0 79 35 36 20 67 72 61 79 35 37 20 67 72 65 79 35  y56 gray57 grey5
169d0 37 20 67 72 61 79 35 38 20 67 72 65 79 35 38 20  7 gray58 grey58 
169e0 67 72 61 79 35 39 20 67 72 65 79 35 39 20 67 72  gray59 grey59 gr
169f0 61 79 36 30 0a 09 09 09 67 72 65 79 36 30 20 67  ay60....grey60 g
16a00 72 61 79 36 31 20 67 72 65 79 36 31 20 67 72 61  ray61 grey61 gra
16a10 79 36 32 20 67 72 65 79 36 32 20 67 72 61 79 36  y62 grey62 gray6
16a20 33 20 67 72 65 79 36 33 20 67 72 61 79 36 34 20  3 grey63 gray64 
16a30 67 72 65 79 36 34 0a 09 09 09 67 72 61 79 36 35  grey64....gray65
16a40 20 67 72 65 79 36 35 20 67 72 61 79 36 36 20 67   grey65 gray66 g
16a50 72 65 79 36 36 20 67 72 61 79 36 37 20 67 72 65  rey66 gray67 gre
16a60 79 36 37 20 67 72 61 79 36 38 20 67 72 65 79 36  y67 gray68 grey6
16a70 38 20 67 72 61 79 36 39 0a 09 09 09 67 72 65 79  8 gray69....grey
16a80 36 39 20 67 72 61 79 37 30 20 67 72 65 79 37 30  69 gray70 grey70
16a90 20 67 72 61 79 37 31 20 67 72 65 79 37 31 20 67   gray71 grey71 g
16aa0 72 61 79 37 32 20 67 72 65 79 37 32 20 67 72 61  ray72 grey72 gra
16ab0 79 37 33 20 67 72 65 79 37 33 0a 09 09 09 67 72  y73 grey73....gr
16ac0 61 79 37 34 20 67 72 65 79 37 34 20 67 72 61 79  ay74 grey74 gray
16ad0 37 35 20 67 72 65 79 37 35 20 67 72 61 79 37 36  75 grey75 gray76
16ae0 20 67 72 65 79 37 36 20 67 72 61 79 37 37 20 67   grey76 gray77 g
16af0 72 65 79 37 37 20 67 72 61 79 37 38 0a 09 09 09  rey77 gray78....
16b00 67 72 65 79 37 38 20 67 72 61 79 37 39 20 67 72  grey78 gray79 gr
16b10 65 79 37 39 20 67 72 61 79 38 30 20 67 72 65 79  ey79 gray80 grey
16b20 38 30 20 67 72 61 79 38 31 20 67 72 65 79 38 31  80 gray81 grey81
16b30 20 67 72 61 79 38 32 20 67 72 65 79 38 32 0a 09   gray82 grey82..
16b40 09 09 67 72 61 79 38 33 20 67 72 65 79 38 33 20  ..gray83 grey83 
16b50 67 72 61 79 38 34 20 67 72 65 79 38 34 20 67 72  gray84 grey84 gr
16b60 61 79 38 35 20 67 72 65 79 38 35 20 67 72 61 79  ay85 grey85 gray
16b70 38 36 20 67 72 65 79 38 36 20 67 72 61 79 38 37  86 grey86 gray87
16b80 0a 09 09 09 67 72 65 79 38 37 20 67 72 61 79 38  ....grey87 gray8
16b90 38 20 67 72 65 79 38 38 20 67 72 61 79 38 39 20  8 grey88 gray89 
16ba0 67 72 65 79 38 39 20 67 72 61 79 39 30 20 67 72  grey89 gray90 gr
16bb0 65 79 39 30 20 67 72 61 79 39 31 20 67 72 65 79  ey90 gray91 grey
16bc0 39 31 0a 09 09 09 67 72 61 79 39 32 20 67 72 65  91....gray92 gre
16bd0 79 39 32 20 67 72 61 79 39 33 20 67 72 65 79 39  y92 gray93 grey9
16be0 33 20 67 72 61 79 39 34 20 67 72 65 79 39 34 20  3 gray94 grey94 
16bf0 67 72 61 79 39 35 20 67 72 65 79 39 35 20 67 72  gray95 grey95 gr
16c00 61 79 39 36 0a 09 09 09 67 72 65 79 39 36 20 67  ay96....grey96 g
16c10 72 61 79 39 37 20 67 72 65 79 39 37 20 67 72 61  ray97 grey97 gra
16c20 79 39 38 20 67 72 65 79 39 38 20 67 72 61 79 39  y98 grey98 gray9
16c30 39 20 67 72 65 79 39 39 20 67 72 61 79 31 30 30  9 grey99 gray100
16c40 20 67 72 65 79 31 30 30 0a 09 09 09 44 61 72 6b   grey100....Dark
16c50 47 72 65 79 20 44 61 72 6b 47 72 61 79 20 44 61  Grey DarkGray Da
16c60 72 6b 42 6c 75 65 20 44 61 72 6b 43 79 61 6e 20  rkBlue DarkCyan 
16c70 44 61 72 6b 4d 61 67 65 6e 74 61 20 44 61 72 6b  DarkMagenta Dark
16c80 52 65 64 20 4c 69 67 68 74 47 72 65 65 6e 0a 09  Red LightGreen..
16c90 09 7d 0a 09 7d 0a 09 69 66 20 21 5b 69 6e 66 6f  .}..}..if ![info
16ca0 20 65 78 69 73 74 73 20 6e 75 6d 62 65 72 6c 65   exists numberle
16cb0 73 73 5f 63 6f 6c 6f 72 73 5d 20 7b 0a 09 09 73  ss_colors] {...s
16cc0 65 74 20 6e 75 6d 62 65 72 6c 65 73 73 5f 63 6f  et numberless_co
16cd0 6c 6f 72 73 20 22 22 0a 09 09 66 6f 72 65 61 63  lors ""...foreac
16ce0 68 20 63 6f 6c 6f 72 20 24 7b 63 6f 6c 6f 72 73  h color ${colors
16cf0 7d 20 7b 0a 09 09 09 72 65 67 73 75 62 20 2d 61  } {....regsub -a
16d00 6c 6c 20 7b 5b 30 2d 39 5d 2a 7d 20 24 7b 63 6f  ll {[0-9]*} ${co
16d10 6c 6f 72 7d 20 22 22 20 63 6f 6c 6f 72 0a 09 09  lor} "" color...
16d20 09 6c 61 70 70 65 6e 64 20 6e 75 6d 62 65 72 6c  .lappend numberl
16d30 65 73 73 5f 63 6f 6c 6f 72 73 20 24 7b 63 6f 6c  ess_colors ${col
16d40 6f 72 7d 0a 09 09 7d 0a 09 09 73 65 74 20 6e 75  or}...}...set nu
16d50 6d 62 65 72 6c 65 73 73 5f 63 6f 6c 6f 72 73 20  mberless_colors 
16d60 5b 4c 75 6e 69 71 75 65 20 5b 6c 73 6f 72 74 20  [Lunique [lsort 
16d70 24 7b 6e 75 6d 62 65 72 6c 65 73 73 5f 63 6f 6c  ${numberless_col
16d80 6f 72 73 7d 5d 5d 0a 09 7d 0a 09 73 65 74 20 6d  ors}]]..}..set m
16d90 61 74 63 68 65 73 20 5b 4d 61 74 63 68 65 73 46  atches [MatchesF
16da0 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
16db0 24 7b 6e 75 6d 62 65 72 6c 65 73 73 5f 63 6f 6c  ${numberless_col
16dc0 6f 72 73 7d 5d 0a 09 69 66 20 7b 5b 6c 6c 65 6e  ors}]..if {[llen
16dd0 67 74 68 20 24 7b 6d 61 74 63 68 65 73 7d 5d 20  gth ${matches}] 
16de0 3c 20 35 7d 20 7b 0a 09 09 73 65 74 20 6d 61 74  < 5} {...set mat
16df0 63 68 65 73 20 5b 4d 61 74 63 68 65 73 46 72 6f  ches [MatchesFro
16e00 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24 7b  mList ${text} ${
16e10 63 6f 6c 6f 72 73 7d 5d 0a 09 09 69 66 20 7b 5b  colors}]...if {[
16e20 6c 6c 65 6e 67 74 68 20 24 7b 6d 61 74 63 68 65  llength ${matche
16e30 73 7d 5d 7d 20 7b 0a 09 09 09 72 65 74 75 72 6e  s}]} {....return
16e40 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
16e50 73 74 20 24 7b 74 65 78 74 7d 20 5b 63 6f 6e 63  st ${text} [conc
16e60 61 74 20 24 7b 63 6f 6c 6f 72 73 7d 20 24 7b 61  at ${colors} ${a
16e70 64 64 7d 5d 5d 0a 09 09 7d 20 65 6c 73 65 20 7b  dd}]]...} else {
16e80 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
16e90 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
16ea0 65 78 74 7d 20 5c 0a 09 09 09 5b 63 6f 6e 63 61  ext} \....[conca
16eb0 74 20 24 7b 6e 75 6d 62 65 72 6c 65 73 73 5f 63  t ${numberless_c
16ec0 6f 6c 6f 72 73 7d 20 24 7b 61 64 64 7d 5d 5d 0a  olors} ${add}]].
16ed0 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09  ..}..} else {...
16ee0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
16ef0 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
16f00 20 5b 63 6f 6e 63 61 74 20 24 7b 6e 75 6d 62 65   [concat ${numbe
16f10 72 6c 65 73 73 5f 63 6f 6c 6f 72 73 7d 20 24 7b  rless_colors} ${
16f20 61 64 64 7d 5d 5d 0a 09 7d 0a 7d 0a 0a 70 72 6f  add}]]..}.}..pro
16f30 63 20 43 6f 6d 70 6c 65 74 65 43 75 72 73 6f 72  c CompleteCursor
16f40 20 74 65 78 74 20 7b 0a 09 23 20 66 72 6f 6d 20   text {..# from 
16f50 3c 58 31 31 2f 63 75 72 73 6f 72 66 6f 6e 74 2e  <X11/cursorfont.
16f60 68 3e 0a 09 23 20 0a 09 72 65 74 75 72 6e 20 5b  h>..# ..return [
16f70 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
16f80 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 6e 75 6d   ${text} {...num
16f90 5f 67 6c 79 70 68 73 20 78 5f 63 75 72 73 6f 72  _glyphs x_cursor
16fa0 20 61 72 72 6f 77 20 62 61 73 65 64 5f 61 72 72   arrow based_arr
16fb0 6f 77 5f 64 6f 77 6e 20 62 61 73 65 64 5f 61 72  ow_down based_ar
16fc0 72 6f 77 5f 75 70 0a 09 09 62 6f 61 74 20 62 6f  row_up...boat bo
16fd0 67 6f 73 69 74 79 20 62 6f 74 74 6f 6d 5f 6c 65  gosity bottom_le
16fe0 66 74 5f 63 6f 72 6e 65 72 20 62 6f 74 74 6f 6d  ft_corner bottom
16ff0 5f 72 69 67 68 74 5f 63 6f 72 6e 65 72 0a 09 09  _right_corner...
17000 62 6f 74 74 6f 6d 5f 73 69 64 65 20 62 6f 74 74  bottom_side bott
17010 6f 6d 5f 74 65 65 20 62 6f 78 5f 73 70 69 72 61  om_tee box_spira
17020 6c 20 63 65 6e 74 65 72 5f 70 74 72 20 63 69 72  l center_ptr cir
17030 63 6c 65 20 63 6c 6f 63 6b 0a 09 09 63 6f 66 66  cle clock...coff
17040 65 65 5f 6d 75 67 20 63 72 6f 73 73 20 63 72 6f  ee_mug cross cro
17050 73 73 5f 72 65 76 65 72 73 65 20 63 72 6f 73 73  ss_reverse cross
17060 68 61 69 72 20 64 69 61 6d 6f 6e 64 5f 63 72 6f  hair diamond_cro
17070 73 73 20 64 6f 74 0a 09 09 64 6f 74 62 6f 78 20  ss dot...dotbox 
17080 64 6f 75 62 6c 65 5f 61 72 72 6f 77 20 64 72 61  double_arrow dra
17090 66 74 5f 6c 61 72 67 65 20 64 72 61 66 74 5f 73  ft_large draft_s
170a0 6d 61 6c 6c 20 64 72 61 70 65 64 5f 62 6f 78 0a  mall draped_box.
170b0 09 09 65 78 63 68 61 6e 67 65 20 66 6c 65 75 72  ..exchange fleur
170c0 20 67 6f 62 62 6c 65 72 20 67 75 6d 62 79 20 68   gobbler gumby h
170d0 61 6e 64 31 20 68 61 6e 64 32 20 68 65 61 72 74  and1 hand2 heart
170e0 20 69 63 6f 6e 20 69 72 6f 6e 5f 63 72 6f 73 73   icon iron_cross
170f0 0a 09 09 6c 65 66 74 5f 70 74 72 20 6c 65 66 74  ...left_ptr left
17100 5f 73 69 64 65 20 6c 65 66 74 5f 74 65 65 20 6c  _side left_tee l
17110 65 66 74 62 75 74 74 6f 6e 20 6c 6c 5f 61 6e 67  eftbutton ll_ang
17120 6c 65 20 6c 72 5f 61 6e 67 6c 65 0a 09 09 6d 61  le lr_angle...ma
17130 6e 20 6d 69 64 64 6c 65 62 75 74 74 6f 6e 20 6d  n middlebutton m
17140 6f 75 73 65 20 70 65 6e 63 69 6c 20 70 69 72 61  ouse pencil pira
17150 74 65 20 70 6c 75 73 20 71 75 65 73 74 69 6f 6e  te plus question
17160 5f 61 72 72 6f 77 0a 09 09 72 69 67 68 74 5f 70  _arrow...right_p
17170 74 72 20 72 69 67 68 74 5f 73 69 64 65 20 72 69  tr right_side ri
17180 67 68 74 5f 74 65 65 20 72 69 67 68 74 62 75 74  ght_tee rightbut
17190 74 6f 6e 20 72 74 6c 5f 6c 6f 67 6f 20 73 61 69  ton rtl_logo sai
171a0 6c 62 6f 61 74 0a 09 09 73 62 5f 64 6f 77 6e 5f  lboat...sb_down_
171b0 61 72 72 6f 77 20 73 62 5f 68 5f 64 6f 75 62 6c  arrow sb_h_doubl
171c0 65 5f 61 72 72 6f 77 20 73 62 5f 6c 65 66 74 5f  e_arrow sb_left_
171d0 61 72 72 6f 77 20 73 62 5f 72 69 67 68 74 5f 61  arrow sb_right_a
171e0 72 72 6f 77 0a 09 09 73 62 5f 75 70 5f 61 72 72  rrow...sb_up_arr
171f0 6f 77 20 73 62 5f 76 5f 64 6f 75 62 6c 65 5f 61  ow sb_v_double_a
17200 72 72 6f 77 20 73 68 75 74 74 6c 65 20 73 69 7a  rrow shuttle siz
17210 69 6e 67 20 73 70 69 64 65 72 20 73 70 72 61 79  ing spider spray
17220 63 61 6e 0a 09 09 73 74 61 72 20 74 61 72 67 65  can...star targe
17230 74 20 74 63 72 6f 73 73 20 74 6f 70 5f 6c 65 66  t tcross top_lef
17240 74 5f 61 72 72 6f 77 20 74 6f 70 5f 6c 65 66 74  t_arrow top_left
17250 5f 63 6f 72 6e 65 72 0a 09 09 74 6f 70 5f 72 69  _corner...top_ri
17260 67 68 74 5f 63 6f 72 6e 65 72 20 74 6f 70 5f 73  ght_corner top_s
17270 69 64 65 20 74 6f 70 5f 74 65 65 20 74 72 65 6b  ide top_tee trek
17280 20 75 6c 5f 61 6e 67 6c 65 20 75 6d 62 72 65 6c   ul_angle umbrel
17290 6c 61 0a 09 09 75 72 5f 61 6e 67 6c 65 20 77 61  la...ur_angle wa
172a0 74 63 68 20 78 74 65 72 6d 0a 09 7d 5d 0a 7d 0a  tch xterm..}].}.
172b0 0a 23 2a 2a 0a 23 20 53 70 65 63 69 66 69 63 53  .#**.# SpecificS
172c0 77 69 74 63 68 43 6f 6d 70 6c 65 74 65 72 0a 23  witchCompleter.#
172d0 20 2d 2d 2d 0a 23 20 40 70 61 72 61 6d 20 20 20   ---.# @param   
172e0 20 74 65 78 74 20 20 20 2d 2d 20 74 68 65 20 77   text   -- the w
172f0 6f 72 64 20 74 6f 20 63 6f 6d 70 6c 65 74 65 2e  ord to complete.
17300 0a 23 20 40 70 61 72 61 6d 20 20 20 20 73 74 61  .# @param    sta
17310 72 74 20 20 2d 2d 20 74 68 65 20 63 68 61 72 20  rt  -- the char 
17320 69 6e 64 65 78 20 6f 66 20 74 65 78 74 27 73 20  index of text's 
17330 73 74 61 72 74 20 69 6e 20 6c 69 6e 65 0a 23 20  start in line.# 
17340 40 70 61 72 61 6d 20 20 20 20 6c 69 6e 65 20 20  @param    line  
17350 20 2d 2d 20 74 68 65 20 6c 69 6e 65 20 67 61 74   -- the line gat
17360 68 65 72 65 64 20 73 6f 20 66 61 72 2e 0a 23 20  hered so far..# 
17370 40 70 61 72 61 6d 20 20 20 20 73 77 69 74 63 68  @param    switch
17380 20 2d 2d 20 74 68 65 20 73 77 69 74 63 68 20 74   -- the switch t
17390 6f 20 63 6f 6d 70 6c 65 74 65 20 66 6f 72 2e 0a  o complete for..
173a0 23 20 40 72 65 74 75 72 6e 20 20 20 61 20 73 74  # @return   a st
173b0 64 20 74 63 6c 72 65 61 64 6c 69 6e 65 20 66 6f  d tclreadline fo
173c0 72 6d 61 74 74 65 64 20 63 6f 6d 70 6c 65 74 65  rmatted complete
173d0 72 20 73 74 72 69 6e 67 2e 0a 23 20 40 73 61 20  r string..# @sa 
173e0 20 20 20 20 20 20 43 6f 6d 70 6c 65 74 65 57 69        CompleteWi
173f0 64 67 65 74 43 6f 6e 66 69 67 75 72 61 74 69 6f  dgetConfiguratio
17400 6e 73 0a 23 20 40 64 61 74 65 20 20 20 20 20 53  ns.# @date     S
17410 65 70 2d 31 37 2d 31 39 39 39 0a 23 0a 70 72 6f  ep-17-1999.#.pro
17420 63 20 53 70 65 63 69 66 69 63 53 77 69 74 63 68  c SpecificSwitch
17430 43 6f 6d 70 6c 65 74 65 72 20 7b 74 65 78 74 20  Completer {text 
17440 73 74 61 72 74 20 6c 69 6e 65 20 73 77 69 74 63  start line switc
17450 68 20 7b 61 6c 77 61 79 73 20 31 7d 7d 20 7b 0a  h {always 1}} {.
17460 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 77  ..switch -- ${sw
17470 69 74 63 68 7d 20 7b 0a 0a 09 09 2d 61 63 74 69  itch} {....-acti
17480 76 65 62 61 63 6b 67 72 6f 75 6e 64 20 2d 0a 09  vebackground -..
17490 09 2d 61 63 74 69 76 65 66 6f 72 65 67 72 6f 75  .-activeforegrou
174a0 6e 64 20 2d 0a 09 09 2d 66 67 20 2d 0a 09 09 2d  nd -...-fg -...-
174b0 66 6f 72 65 67 72 6f 75 6e 64 20 2d 0a 09 09 2d  foreground -...-
174c0 62 67 20 2d 0a 09 09 2d 62 61 63 6b 67 72 6f 75  bg -...-backgrou
174d0 6e 64 20 2d 0a 09 09 2d 64 69 73 61 62 6c 65 64  nd -...-disabled
174e0 66 6f 72 65 67 72 6f 75 6e 64 20 2d 0a 09 09 2d  foreground -...-
174f0 68 69 67 68 6c 69 67 68 74 62 61 63 6b 67 72 6f  highlightbackgro
17500 75 6e 64 20 2d 0a 09 09 2d 68 69 67 68 6c 69 67  und -...-highlig
17510 68 74 63 6f 6c 6f 72 20 2d 0a 09 09 2d 69 6e 73  htcolor -...-ins
17520 65 72 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d 0a  ertbackground -.
17530 09 09 2d 74 72 6f 75 67 68 63 6f 6c 6f 72 20 2d  ..-troughcolor -
17540 0a 09 09 2d 73 65 6c 65 63 74 62 61 63 6b 67 72  ...-selectbackgr
17550 6f 75 6e 64 20 2d 0a 09 09 2d 73 65 6c 65 63 74  ound -...-select
17560 66 6f 72 65 67 72 6f 75 6e 64 20 7b 20 72 65 74  foreground { ret
17570 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 43 6f 6c  urn [CompleteCol
17580 6f 72 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 0a 09  or ${text}] }...
17590 09 2d 61 63 74 69 76 65 62 6f 72 64 65 72 77 69  .-activeborderwi
175a0 64 74 68 20 2d 0a 09 09 2d 62 64 20 2d 0a 09 09  dth -...-bd -...
175b0 2d 62 6f 72 64 65 72 77 69 64 74 68 20 2d 0a 09  -borderwidth -..
175c0 09 2d 69 6e 73 65 72 74 62 6f 72 64 65 72 77 69  .-insertborderwi
175d0 64 74 68 20 2d 0a 09 09 2d 69 6e 73 65 72 74 77  dth -...-insertw
175e0 69 64 74 68 20 2d 0a 09 09 2d 73 65 6c 65 63 74  idth -...-select
175f0 62 6f 72 64 65 72 77 69 64 74 68 20 2d 0a 09 09  borderwidth -...
17600 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b 6e  -highlightthickn
17610 65 73 73 20 2d 0a 09 09 2d 70 61 64 78 20 2d 0a  ess -...-padx -.
17620 09 09 2d 70 61 64 79 20 2d 0a 09 09 2d 77 72 61  ..-pady -...-wra
17630 70 6c 65 6e 67 74 68 20 7b 0a 09 09 09 69 66 20  plength {....if 
17640 24 7b 61 6c 77 61 79 73 7d 20 7b 0a 09 09 09 09  ${always} {.....
17650 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
17660 69 6e 74 73 20 3c 70 69 78 65 6c 73 3e 5d 0a 09  ints <pixels>]..
17670 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 72  ..} else {.....r
17680 65 74 75 72 6e 20 22 22 0a 09 09 09 7d 0a 09 09  eturn ""....}...
17690 7d 0a 0a 09 09 2d 61 6e 63 68 6f 72 20 7b 0a 09  }....-anchor {..
176a0 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
176b0 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
176c0 74 7d 20 7b 0a 09 09 09 09 6e 20 6e 65 20 65 20  t} {.....n ne e 
176d0 73 65 20 73 20 73 77 20 77 20 6e 77 20 63 65 6e  se s sw w nw cen
176e0 74 65 72 0a 09 09 09 7d 5d 0a 09 09 7d 0a 0a 0a  ter....}]...}...
176f0 09 09 2d 62 69 74 6d 61 70 20 7b 20 72 65 74 75  ..-bitmap { retu
17700 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
17710 42 69 74 6d 61 70 73 20 24 7b 74 65 78 74 7d 20  Bitmaps ${text} 
17720 24 7b 61 6c 77 61 79 73 7d 5d 20 7d 0a 0a 0a 09  ${always}] }....
17730 09 2d 63 75 72 73 6f 72 20 7b 0a 09 09 09 72 65  .-cursor {....re
17740 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 43 75  turn [CompleteCu
17750 72 73 6f 72 20 24 7b 74 65 78 74 7d 5d 0a 09 09  rsor ${text}]...
17760 09 23 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  .# return [Displ
17770 61 79 48 69 6e 74 73 20 3c 63 75 72 73 6f 72 3e  ayHints <cursor>
17780 5d 0a 09 09 7d 0a 09 09 2d 65 78 70 6f 72 74 73  ]...}...-exports
17790 65 6c 65 63 74 69 6f 6e 20 2d 0a 09 09 2d 6a 75  election -...-ju
177a0 6d 70 20 2d 0a 09 09 2d 73 65 74 67 72 69 64 20  mp -...-setgrid 
177b0 2d 0a 09 09 2d 74 61 6b 65 66 6f 63 75 73 20 7b  -...-takefocus {
177c0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
177d0 65 42 6f 6f 6c 65 61 6e 20 24 7b 74 65 78 74 7d  eBoolean ${text}
177e0 5d 20 7d 0a 09 09 2d 66 6f 6e 74 20 7b 0a 09 09  ] }...-font {...
177f0 09 73 65 74 20 6e 61 6d 65 73 20 5b 66 6f 6e 74  .set names [font
17800 20 6e 61 6d 65 73 5d 0a 09 09 09 69 66 20 7b 5b   names]....if {[
17810 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b  string length ${
17820 6e 61 6d 65 73 7d 5d 7d 20 7b 0a 09 09 09 09 72  names}]} {.....r
17830 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
17840 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
17850 24 7b 6e 61 6d 65 73 7d 5d 0a 09 09 09 7d 20 65  ${names}]....} e
17860 6c 73 65 20 7b 0a 09 09 09 09 69 66 20 24 7b 61  lse {.....if ${a
17870 6c 77 61 79 73 7d 20 7b 0a 09 09 09 09 09 72 65  lways} {......re
17880 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
17890 74 73 20 3c 66 6f 6e 74 3e 5d 0a 09 09 09 09 7d  ts <font>].....}
178a0 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 72 65 74   else {......ret
178b0 75 72 6e 20 22 22 0a 09 09 09 09 7d 0a 09 09 09  urn "".....}....
178c0 7d 0a 09 09 7d 0a 0a 0a 09 09 2d 69 6d 61 67 65  }...}.....-image
178d0 20 2d 0a 09 09 2d 73 65 6c 65 63 74 69 6d 61 67   -...-selectimag
178e0 65 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  e { return [Comp
178f0 6c 65 74 65 46 72 6f 6d 49 6d 61 67 65 73 20 24  leteFromImages $
17900 7b 74 65 78 74 7d 20 24 7b 61 6c 77 61 79 73 7d  {text} ${always}
17910 5d 20 7d 0a 0a 09 09 2d 69 6e 73 65 72 74 6f 66  ] }....-insertof
17920 66 74 69 6d 65 20 2d 0a 09 09 2d 69 6e 73 65 72  ftime -...-inser
17930 74 6f 6e 74 69 6d 65 20 2d 0a 09 09 2d 72 65 70  tontime -...-rep
17940 65 61 74 64 65 6c 61 79 20 2d 0a 09 09 2d 72 65  eatdelay -...-re
17950 70 65 61 74 69 6e 74 65 72 76 61 6c 20 7b 0a 09  peatinterval {..
17960 09 09 69 66 20 24 7b 61 6c 77 61 79 73 7d 20 7b  ..if ${always} {
17970 0a 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73  .....return [Dis
17980 70 6c 61 79 48 69 6e 74 73 20 3c 6d 69 6c 6c 69  playHints <milli
17990 53 65 63 3e 5d 0a 09 09 09 7d 20 65 6c 73 65 20  Sec>]....} else 
179a0 7b 0a 09 09 09 09 72 65 74 75 72 6e 20 22 22 0a  {.....return "".
179b0 09 09 09 7d 0a 09 09 7d 0a 09 09 2d 6a 75 73 74  ...}...}...-just
179c0 69 66 79 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  ify {....return 
179d0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
179e0 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09  t ${text} {.....
179f0 6c 65 66 74 20 63 65 6e 74 65 72 20 72 69 67 68  left center righ
17a00 74 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 09 2d 6f  t....}]...}...-o
17a10 72 69 65 6e 74 20 7b 0a 09 09 09 72 65 74 75 72  rient {....retur
17a20 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
17a30 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09  ist ${text} {...
17a40 09 09 76 65 72 74 69 63 61 6c 20 68 6f 72 69 7a  ..vertical horiz
17a50 6f 6e 74 61 6c 0a 09 09 09 7d 5d 0a 09 09 7d 0a  ontal....}]...}.
17a60 09 09 2d 72 65 6c 69 65 66 20 7b 0a 09 09 09 72  ..-relief {....r
17a70 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
17a80 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
17a90 7b 0a 09 09 09 09 72 61 69 73 65 64 20 73 75 6e  {.....raised sun
17aa0 6b 65 6e 20 66 6c 61 74 20 72 69 64 67 65 20 73  ken flat ridge s
17ab0 6f 6c 69 64 20 67 72 6f 6f 76 65 0a 09 09 09 7d  olid groove....}
17ac0 5d 0a 09 09 7d 0a 0a 09 09 2d 74 65 78 74 20 7b  ]...}....-text {
17ad0 0a 09 09 09 69 66 20 24 7b 61 6c 77 61 79 73 7d  ....if ${always}
17ae0 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 20 5b 44   {.....return [D
17af0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 65 78  isplayHints <tex
17b00 74 3e 5d 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a  t>]....} else {.
17b10 09 09 09 09 72 65 74 75 72 6e 20 22 22 0a 09 09  ....return ""...
17b20 09 7d 0a 09 09 7d 0a 09 09 2d 74 65 78 74 76 61  .}...}...-textva
17b30 72 69 61 62 6c 65 20 7b 20 72 65 74 75 72 6e 20  riable { return 
17b40 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 20 24  [VarCompletion $
17b50 7b 74 65 78 74 7d 20 23 30 5d 20 7d 0a 09 09 2d  {text} #0] }...-
17b60 75 6e 64 65 72 6c 69 6e 65 20 7b 0a 09 09 09 69  underline {....i
17b70 66 20 24 7b 61 6c 77 61 79 73 7d 20 7b 0a 09 09  f ${always} {...
17b80 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  ..return [Displa
17b90 79 48 69 6e 74 73 20 3c 69 6e 64 65 78 3e 5d 0a  yHints <index>].
17ba0 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ...} else {.....
17bb0 72 65 74 75 72 6e 20 22 22 0a 09 09 09 7d 0a 09  return ""....}..
17bc0 09 7d 0a 0a 2d 78 73 63 72 6f 6c 6c 63 6f 6d 6d  .}..-xscrollcomm
17bd0 61 6e 64 20 2d 0a 2d 79 73 63 72 6f 6c 6c 63 6f  and -.-yscrollco
17be0 6d 6d 61 6e 64 20 7b 0a 7d 0a 20 0a 20 20 20 20  mmand {.}. .    
17bf0 20 20 20 20 23 20 57 49 44 47 45 54 20 53 50 45      # WIDGET SPE
17c00 43 49 46 49 43 20 4f 50 54 49 4f 4e 53 0a 09 09  CIFIC OPTIONS...
17c10 23 20 2d 2d 2d 0a 20 0a 09 09 2d 73 74 61 74 65  # ---. ...-state
17c20 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f   {....return [Co
17c30 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
17c40 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 6e 6f 72  {text} {.....nor
17c50 6d 61 6c 20 61 63 74 69 76 65 20 64 69 73 61 62  mal active disab
17c60 6c 65 64 0a 09 09 09 7d 5d 0a 09 09 7d 0a 0a 09  led....}]...}...
17c70 09 2d 63 6f 6c 75 6d 6e 62 72 65 61 6b 20 2d 0a  .-columnbreak -.
17c80 09 09 2d 68 69 64 65 6d 61 72 67 69 6e 20 2d 0a  ..-hidemargin -.
17c90 09 09 2d 69 6e 64 69 63 61 74 6f 72 6f 6e 20 7b  ..-indicatoron {
17ca0 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
17cb0 6c 65 74 65 42 6f 6f 6c 65 61 6e 20 24 7b 74 65  leteBoolean ${te
17cc0 78 74 7d 5d 0a 09 09 7d 0a 0a 09 09 2d 76 61 72  xt}]...}....-var
17cd0 69 61 62 6c 65 20 7b 0a 09 09 09 72 65 74 75 72  iable {....retur
17ce0 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e  n [VarCompletion
17cf0 20 24 7b 74 65 78 74 7d 20 23 30 5d 0a 09 09 7d   ${text} #0]...}
17d00 0a 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09  ....default {...
17d10 09 23 20 69 66 20 24 7b 61 6c 77 61 79 73 7d 20  .# if ${always} 
17d20 7b 0a 09 09 09 23 09 73 65 74 20 70 72 65 76 20  {....#.set prev 
17d30 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b  [PreviousWord ${
17d40 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a  start} ${line}].
17d50 09 09 09 23 09 72 65 74 75 72 6e 20 5b 44 69 73  ...#.return [Dis
17d60 70 6c 61 79 48 69 6e 74 73 20 3c 5b 53 74 72 69  playHints <[Stri
17d70 6e 67 20 72 61 6e 67 65 20 24 7b 70 72 65 76 7d  ng range ${prev}
17d80 20 31 20 65 6e 64 5d 3e 5d 0a 09 09 09 23 7d 20   1 end]>]....#} 
17d90 65 6c 73 65 20 7b 0a 09 09 09 09 72 65 74 75 72  else {.....retur
17da0 6e 20 22 22 0a 09 09 09 23 7d 0a 09 09 7d 0a 09  n ""....#}...}..
17db0 7d 0a 7d 0a 09 09 09 23 20 72 65 74 75 72 6e 20  }.}....# return 
17dc0 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e 64 20  [BraceOrCommand 
17dd0 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 23 20 24  ${text} \....# $
17de0 7b 73 74 61 72 74 7d 20 20 24 7b 6c 69 6e 65 7d  {start}  ${line}
17df0 20 24 7b 70 6f 73 7d 20 24 7b 6d 6f 64 7d 5d 0a   ${pos} ${mod}].
17e00 0a 23 2a 2a 0a 23 20 43 6f 6d 70 6c 65 74 65 57  .#**.# CompleteW
17e10 69 64 67 65 74 43 6f 6e 66 69 67 75 72 61 74 69  idgetConfigurati
17e20 6f 6e 73 0a 23 20 2d 2d 2d 0a 23 20 40 70 61 72  ons.# ---.# @par
17e30 61 6d 20 20 20 20 74 65 78 74 20 20 2d 2d 20 74  am    text  -- t
17e40 68 65 20 77 6f 72 64 20 74 6f 20 63 6f 6d 70 6c  he word to compl
17e50 65 74 65 2e 0a 23 20 40 70 61 72 61 6d 20 20 20  ete..# @param   
17e60 20 73 74 61 72 74 20 2d 2d 20 74 68 65 20 61 63   start -- the ac
17e70 74 75 61 6c 20 63 75 72 73 6f 72 20 70 6f 73 69  tual cursor posi
17e80 74 69 6f 6e 2e 0a 23 20 40 70 61 72 61 6d 20 20  tion..# @param  
17e90 20 20 6c 69 6e 65 20 20 2d 2d 20 74 68 65 20 6c    line  -- the l
17ea0 69 6e 65 20 67 61 74 68 65 72 65 64 20 73 6f 20  ine gathered so 
17eb0 66 61 72 2e 0a 23 20 40 70 61 72 61 6d 20 20 20  far..# @param   
17ec0 20 6c 73 74 20 20 20 2d 2d 20 61 20 6c 69 73 74   lst   -- a list
17ed0 20 6f 66 20 70 6f 73 73 69 62 6c 65 20 63 6f 6d   of possible com
17ee0 70 6c 65 74 69 6f 6e 73 2e 0a 23 20 40 72 65 74  pletions..# @ret
17ef0 75 72 6e 20 20 20 61 20 73 74 64 20 74 63 6c 72  urn   a std tclr
17f00 65 61 64 6c 69 6e 65 20 66 6f 72 6d 61 74 74 65  eadline formatte
17f10 64 20 63 6f 6d 70 6c 65 74 65 72 20 73 74 72 69  d completer stri
17f20 6e 67 2e 0a 23 20 40 73 61 20 20 20 20 20 20 20  ng..# @sa       
17f30 53 70 65 63 69 66 69 63 53 77 69 74 63 68 43 6f  SpecificSwitchCo
17f40 6d 70 6c 65 74 65 72 0a 23 20 40 64 61 74 65 20  mpleter.# @date 
17f50 20 20 20 20 53 65 70 2d 31 37 2d 31 39 39 39 0a      Sep-17-1999.
17f60 23 0a 70 72 6f 63 20 43 6f 6d 70 6c 65 74 65 57  #.proc CompleteW
17f70 69 64 67 65 74 43 6f 6e 66 69 67 75 72 61 74 69  idgetConfigurati
17f80 6f 6e 73 20 7b 74 65 78 74 20 73 74 61 72 74 20  ons {text start 
17f90 6c 69 6e 65 20 6c 73 74 7d 20 7b 0a 09 73 65 74  line lst} {..set
17fa0 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73 57   prev [PreviousW
17fb0 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c  ord ${start} ${l
17fc0 69 6e 65 7d 5d 0a 09 69 66 20 7b 22 2d 22 20 3d  ine}]..if {"-" =
17fd0 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20  = [string index 
17fe0 24 7b 70 72 65 76 7d 20 30 5d 7d 20 7b 0a 09 09  ${prev} 0]} {...
17ff0 72 65 74 75 72 6e 20 5b 53 70 65 63 69 66 69 63  return [Specific
18000 53 77 69 74 63 68 43 6f 6d 70 6c 65 74 65 72 20  SwitchCompleter 
18010 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d  ${text} ${start}
18020 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 72 65 76 7d   ${line} ${prev}
18030 5d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 72 65  ]..} else {...re
18040 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
18050 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c  omList ${text} \
18060 0a 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70  ...[RemoveUsedOp
18070 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 24 7b  tions ${line} ${
18080 6c 73 74 7d 5d 5d 0a 09 7d 0a 7d 0a 0a 23 20 2d  lst}]]..}.}..# -
18090 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
180a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
180b0 2d 2d 2d 2d 2d 0a 23 20 3d 3d 3d 20 53 50 45 43  -----.# === SPEC
180c0 49 46 49 43 20 54 4b 20 43 4f 4d 4d 41 4e 44 20  IFIC TK COMMAND 
180d0 43 4f 4d 50 4c 45 54 45 52 53 20 3d 3d 3d 0a 23  COMPLETERS ===.#
180e0 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
180f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18100 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 72 6f 63 20 63 6f  -------..proc co
18110 6d 70 6c 65 74 65 28 62 65 6c 6c 29 20 7b 74 65  mplete(bell) {te
18120 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
18130 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77  e pos mod} {..sw
18140 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
18150 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 43  ...1 { return [C
18160 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
18170 24 7b 74 65 78 74 7d 20 2d 64 69 73 70 6c 61 79  ${text} -display
18180 6f 66 5d 20 7d 0a 09 09 32 20 7b 0a 09 09 09 69  of] }...2 {....i
18190 66 20 7b 22 2d 64 69 73 70 6c 61 79 6f 66 22 20  f {"-displayof" 
181a0 3d 3d 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64  == [PreviousWord
181b0 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65   ${start} ${line
181c0 7d 5d 7d 20 7b 0a 09 09 09 09 72 65 74 75 72 6e  }]} {.....return
181d0 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
181e0 73 74 20 24 7b 74 65 78 74 7d 20 5b 54 6f 70 6c  st ${text} [Topl
181f0 65 76 65 6c 57 69 6e 64 6f 77 73 5d 5d 0a 09 09  evelWindows]]...
18200 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f  .}...}..}.}..pro
18210 63 20 43 6f 6d 70 6c 65 74 65 53 65 71 75 65 6e  c CompleteSequen
18220 63 65 20 7b 74 65 78 74 20 66 75 6c 6c 74 65 78  ce {text fulltex
18230 74 7d 20 7b 0a 09 73 65 74 20 6d 6f 64 69 66 69  t} {..set modifi
18240 65 72 73 20 7b 0a 09 09 41 6c 74 20 43 6f 6e 74  ers {...Alt Cont
18250 72 6f 6c 20 53 68 69 66 74 20 4c 6f 63 6b 20 44  rol Shift Lock D
18260 6f 75 62 6c 65 20 54 72 69 70 6c 65 0a 09 09 42  ouble Triple...B
18270 31 20 42 32 20 42 33 20 42 34 20 42 35 20 42 75  1 B2 B3 B4 B5 Bu
18280 74 74 6f 6e 31 20 42 75 74 74 6f 6e 32 20 42 75  tton1 Button2 Bu
18290 74 74 6f 6e 33 20 42 75 74 74 6f 6e 34 20 42 75  tton3 Button4 Bu
182a0 74 74 6f 6e 35 0a 09 09 4d 20 4d 31 20 4d 32 20  tton5...M M1 M2 
182b0 4d 33 20 4d 34 20 4d 35 20 20 20 20 20 20 20 20  M3 M4 M5        
182c0 0a 09 09 4d 65 74 61 20 4d 6f 64 31 20 4d 6f 64  ...Meta Mod1 Mod
182d0 32 20 4d 6f 64 33 20 4d 6f 64 34 20 4d 6f 64 35  2 Mod3 Mod4 Mod5
182e0 0a 09 7d 0a 09 73 65 74 20 65 76 65 6e 74 73 20  ..}..set events 
182f0 7b 0a 09 09 41 63 74 69 76 61 74 65 20 42 75 74  {...Activate But
18300 74 6f 6e 20 42 75 74 74 6f 6e 50 72 65 73 73 20  ton ButtonPress 
18310 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 0a 09 09  ButtonRelease...
18320 43 69 72 63 75 6c 61 74 65 20 43 6f 6c 6f 72 6d  Circulate Colorm
18330 61 70 20 43 6f 6e 66 69 67 75 72 65 20 44 65 61  ap Configure Dea
18340 63 74 69 76 61 74 65 20 44 65 73 74 72 6f 79 0a  ctivate Destroy.
18350 09 09 45 6e 74 65 72 20 45 78 70 6f 73 65 20 46  ..Enter Expose F
18360 6f 63 75 73 49 6e 20 46 6f 63 75 73 4f 75 74 20  ocusIn FocusOut 
18370 47 72 61 76 69 74 79 0a 09 09 4b 65 79 20 4b 65  Gravity...Key Ke
18380 79 50 72 65 73 73 20 4b 65 79 52 65 6c 65 61 73  yPress KeyReleas
18390 65 20 4c 65 61 76 65 20 4d 61 70 20 4d 6f 74 69  e Leave Map Moti
183a0 6f 6e 0a 09 09 4d 6f 75 73 65 57 68 65 65 6c 20  on...MouseWheel 
183b0 50 72 6f 70 65 72 74 79 20 52 65 70 61 72 65 6e  Property Reparen
183c0 74 20 55 6e 6d 61 70 20 56 69 73 69 62 69 6c 69  t Unmap Visibili
183d0 74 79 0a 09 7d 0a 09 73 65 74 20 73 65 71 75 65  ty..}..set seque
183e0 6e 63 65 20 5b 63 6f 6e 63 61 74 20 24 7b 6d 6f  nce [concat ${mo
183f0 64 69 66 69 65 72 73 7d 20 24 7b 65 76 65 6e 74  difiers} ${event
18400 73 7d 5d 0a 09 72 65 74 75 72 6e 20 5b 43 6f 6d  s}]..return [Com
18410 70 6c 65 74 65 4c 69 73 74 46 72 6f 6d 4c 69 73  pleteListFromLis
18420 74 20 24 7b 74 65 78 74 7d 20 24 7b 66 75 6c 6c  t ${text} ${full
18430 74 65 78 74 7d 20 24 7b 73 65 71 75 65 6e 63 65  text} ${sequence
18440 7d 20 3c 20 2d 20 3e 5d 0a 7d 0a 0a 70 72 6f 63  } < - >].}..proc
18450 20 63 6f 6d 70 6c 65 74 65 28 62 69 6e 64 29 20   complete(bind) 
18460 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
18470 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
18480 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73  .switch -- ${pos
18490 7d 20 7b 0a 09 09 31 20 7b 0a 09 09 09 73 65 74  } {...1 {....set
184a0 20 77 69 64 67 65 74 73 20 5b 57 69 64 67 65 74   widgets [Widget
184b0 43 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d  Children ${text}
184c0 5d 0a 09 09 09 73 65 74 20 74 6f 70 6c 65 76 65  ]....set topleve
184d0 6c 73 20 5b 54 6f 70 6c 65 76 65 6c 57 69 6e 64  ls [ToplevelWind
184e0 6f 77 73 5d 0a 09 09 09 69 66 20 7b 5b 63 61 74  ows]....if {[cat
184f0 63 68 20 7b 73 65 74 20 74 6f 70 6c 65 76 65 6c  ch {set toplevel
18500 43 6c 61 73 73 20 5b 77 69 6e 66 6f 20 63 6c 61  Class [winfo cla
18510 73 73 20 2e 5d 7d 5d 7d 20 7b 0a 09 09 09 09 73  ss .]}]} {.....s
18520 65 74 20 74 6f 70 6c 65 76 65 6c 43 6c 61 73 73  et toplevelClass
18530 20 22 22 0a 09 09 09 7d 0a 09 09 09 73 65 74 20   ""....}....set 
18540 72 65 73 74 20 7b 0a 09 09 09 09 42 75 74 74 6f  rest {.....Butto
18550 6e 20 43 61 6e 76 61 73 20 43 68 65 63 6b 62 75  n Canvas Checkbu
18560 74 74 6f 6e 20 45 6e 74 72 79 20 46 72 61 6d 65  tton Entry Frame
18570 20 4c 61 62 65 6c 0a 09 09 09 09 4c 69 73 74 62   Label.....Listb
18580 6f 78 20 4d 65 6e 75 20 4d 65 6e 75 62 75 74 74  ox Menu Menubutt
18590 6f 6e 20 4d 65 73 73 61 67 65 20 52 61 64 69 6f  on Message Radio
185a0 62 75 74 74 6f 6e 0a 09 09 09 09 53 63 61 6c 65  button.....Scale
185b0 20 53 63 72 6f 6c 6c 62 61 72 20 54 65 78 74 0a   Scrollbar Text.
185c0 09 09 09 09 61 6c 6c 0a 09 09 09 7d 0a 09 09 09  ....all....}....
185d0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
185e0 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
185f0 20 5c 0a 09 09 09 5b 63 6f 6e 63 61 74 20 24 7b   \....[concat ${
18600 74 6f 70 6c 65 76 65 6c 73 7d 20 24 7b 77 69 64  toplevels} ${wid
18610 67 65 74 73 7d 20 24 7b 74 6f 70 6c 65 76 65 6c  gets} ${toplevel
18620 43 6c 61 73 73 7d 20 24 72 65 73 74 5d 5d 0a 09  Class} $rest]]..
18630 09 7d 0a 09 09 32 20 7b 0a 09 09 09 72 65 74 75  .}...2 {....retu
18640 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 53 65 71 75  rn [CompleteSequ
18650 65 6e 63 65 20 24 7b 74 65 78 74 7d 20 5b 4c 69  ence ${text} [Li
18660 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 32 5d 5d  ndex ${line} 2]]
18670 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b  ...}...default {
18680 0a 09 09 09 23 20 72 65 74 75 72 6e 20 5b 44 69  ....# return [Di
18690 73 70 6c 61 79 48 69 6e 74 73 20 7b 3c 73 63 72  splayHints {<scr
186a0 69 70 74 3e 20 3c 2b 73 63 72 69 70 74 3e 7d 5d  ipt> <+script>}]
186b0 0a 09 09 09 72 65 74 75 72 6e 20 5b 42 72 61 63  ....return [Brac
186c0 65 4f 72 43 6f 6d 6d 61 6e 64 20 24 7b 74 65 78  eOrCommand ${tex
186d0 74 7d 20 5c 0a 09 09 09 24 7b 73 74 61 72 74 7d  t} \....${start}
186e0 20 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20   ${end} ${line} 
186f0 24 7b 70 6f 73 7d 20 24 7b 6d 6f 64 7d 5d 0a 09  ${pos} ${mod}]..
18700 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22  .}..}..return ""
18710 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74  .}..proc complet
18720 65 28 62 69 6e 64 74 61 67 73 29 20 7b 74 65 78  e(bindtags) {tex
18730 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
18740 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69   pos mod} {..swi
18750 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a  tch -- ${pos} {.
18760 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  ..1 { return [Co
18770 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
18780 7b 74 65 78 74 7d 20 5b 57 69 64 67 65 74 43 68  {text} [WidgetCh
18790 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d  ildren ${text}]]
187a0 20 7d 0a 09 09 32 20 7b 0a 09 09 09 23 20 73 65   }...2 {....# se
187b0 74 20 63 75 72 72 65 6e 74 5f 74 61 67 73 20 5c  t current_tags \
187c0 0a 09 09 09 23 20 5b 52 65 6d 6f 76 65 55 73 65  ....# [RemoveUse
187d0 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d  dOptions ${line}
187e0 20 5b 62 69 6e 64 74 61 67 73 20 5b 4c 69 6e 64   [bindtags [Lind
187f0 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 5d 5d 0a  ex ${line} 1]]].
18800 09 09 09 73 65 74 20 63 75 72 72 65 6e 74 5f 74  ...set current_t
18810 61 67 73 20 5b 62 69 6e 64 74 61 67 73 20 5b 4c  ags [bindtags [L
18820 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d  index ${line} 1]
18830 5d 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  ]....return [Com
18840 70 6c 65 74 65 4c 69 73 74 46 72 6f 6d 4c 69 73  pleteListFromLis
18850 74 20 24 7b 74 65 78 74 7d 20 5b 4c 69 6e 64 65  t ${text} [Linde
18860 78 20 24 7b 6c 69 6e 65 7d 20 32 5d 20 5c 0a 09  x ${line} 2] \..
18870 09 09 24 7b 63 75 72 72 65 6e 74 5f 74 61 67 73  ..${current_tags
18880 7d 20 5c 7b 20 7b 20 7d 20 5c 7d 5d 0a 09 09 7d  } \{ { } \}]...}
18890 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
188a0 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
188b0 62 75 74 74 6f 6e 29 20 7b 74 65 78 74 20 73 74  button) {text st
188c0 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
188d0 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
188e0 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20  -- ${pos} {...1 
188f0 7b 20 72 65 74 75 72 6e 20 5b 45 76 65 6e 74 75  { return [Eventu
18900 61 6c 6c 79 49 6e 73 65 72 74 4c 65 61 64 69 6e  allyInsertLeadin
18910 67 44 6f 74 20 24 7b 74 65 78 74 7d 20 3c 70 61  gDot ${text} <pa
18920 74 68 4e 61 6d 65 3e 5d 20 7d 0a 09 09 64 65 66  thName>] }...def
18930 61 75 6c 74 20 7b 0a 09 09 09 72 65 74 75 72 6e  ault {....return
18940 20 5b 43 6f 6d 70 6c 65 74 65 57 69 64 67 65 74   [CompleteWidget
18950 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 24  Configurations $
18960 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20  {text} ${start} 
18970 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 2d 61  ${line} {.....-a
18980 63 74 69 76 65 62 61 63 6b 67 72 6f 75 6e 64 20  ctivebackground 
18990 2d 61 63 74 69 76 65 66 6f 72 65 67 72 6f 75 6e  -activeforegroun
189a0 64 20 2d 61 6e 63 68 6f 72 0a 09 09 09 09 2d 62  d -anchor.....-b
189b0 61 63 6b 67 72 6f 75 6e 64 20 2d 62 69 74 6d 61  ackground -bitma
189c0 70 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20 2d  p -borderwidth -
189d0 63 75 72 73 6f 72 0a 09 09 09 09 2d 64 69 73 61  cursor.....-disa
189e0 62 6c 65 64 66 6f 72 65 67 72 6f 75 6e 64 20 2d  bledforeground -
189f0 66 6f 6e 74 20 2d 66 6f 72 65 67 72 6f 75 6e 64  font -foreground
18a00 0a 09 09 09 09 2d 68 69 67 68 6c 69 67 68 74 62  .....-highlightb
18a10 61 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c  ackground -highl
18a20 69 67 68 74 63 6f 6c 6f 72 0a 09 09 09 09 2d 68  ightcolor.....-h
18a30 69 67 68 6c 69 67 68 74 74 68 69 63 6b 6e 65 73  ighlightthicknes
18a40 73 20 2d 69 6d 61 67 65 20 2d 6a 75 73 74 69 66  s -image -justif
18a50 79 0a 09 09 09 09 2d 70 61 64 78 20 2d 70 61 64  y.....-padx -pad
18a60 79 20 2d 72 65 6c 69 65 66 20 2d 74 61 6b 65 66  y -relief -takef
18a70 6f 63 75 73 20 2d 74 65 78 74 0a 09 09 09 09 2d  ocus -text.....-
18a80 74 65 78 74 76 61 72 69 61 62 6c 65 20 2d 75 6e  textvariable -un
18a90 64 65 72 6c 69 6e 65 20 2d 77 72 61 70 6c 65 6e  derline -wraplen
18aa0 67 74 68 0a 09 09 09 09 2d 63 6f 6d 6d 61 6e 64  gth.....-command
18ab0 20 2d 64 65 66 61 75 6c 74 20 2d 68 65 69 67 68   -default -heigh
18ac0 74 20 2d 73 74 61 74 65 20 2d 77 69 64 74 68 0a  t -state -width.
18ad0 09 09 09 7d 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65  ...}]...}..}..re
18ae0 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20  turn "".}..proc 
18af0 63 6f 6d 70 6c 65 74 65 28 63 61 6e 76 61 73 29  complete(canvas)
18b00 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
18b10 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
18b20 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
18b30 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72  s} {...1 { retur
18b40 6e 20 5b 45 76 65 6e 74 75 61 6c 6c 79 49 6e 73  n [EventuallyIns
18b50 65 72 74 4c 65 61 64 69 6e 67 44 6f 74 20 24 7b  ertLeadingDot ${
18b60 74 65 78 74 7d 20 3c 70 61 74 68 4e 61 6d 65 3e  text} <pathName>
18b70 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a  ] }...default {.
18b80 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
18b90 65 74 65 57 69 64 67 65 74 43 6f 6e 66 69 67 75  eteWidgetConfigu
18ba0 72 61 74 69 6f 6e 73 20 24 7b 74 65 78 74 7d 20  rations ${text} 
18bb0 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d  ${start} ${line}
18bc0 20 7b 0a 09 09 09 09 2d 62 61 63 6b 67 72 6f 75   {.....-backgrou
18bd0 6e 64 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20  nd -borderwidth 
18be0 2d 63 75 72 73 6f 72 20 2d 68 69 67 68 6c 69 67  -cursor -highlig
18bf0 68 74 62 61 63 6b 67 72 6f 75 6e 64 0a 09 09 09  htbackground....
18c00 09 2d 68 69 67 68 6c 69 67 68 74 63 6f 6c 6f 72  .-highlightcolor
18c10 20 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b   -highlightthick
18c20 6e 65 73 73 20 2d 69 6e 73 65 72 74 62 61 63 6b  ness -insertback
18c30 67 72 6f 75 6e 64 0a 09 09 09 09 2d 69 6e 73 65  ground.....-inse
18c40 72 74 62 6f 72 64 65 72 77 69 64 74 68 20 2d 69  rtborderwidth -i
18c50 6e 73 65 72 74 6f 66 66 74 69 6d 65 20 2d 69 6e  nsertofftime -in
18c60 73 65 72 74 6f 6e 74 69 6d 65 0a 09 09 09 09 2d  sertontime.....-
18c70 69 6e 73 65 72 74 77 69 64 74 68 20 2d 72 65 6c  insertwidth -rel
18c80 69 65 66 20 2d 73 65 6c 65 63 74 62 61 63 6b 67  ief -selectbackg
18c90 72 6f 75 6e 64 20 2d 73 65 6c 65 63 74 62 6f 72  round -selectbor
18ca0 64 65 72 77 69 64 74 68 0a 09 09 09 09 2d 73 65  derwidth.....-se
18cb0 6c 65 63 74 66 6f 72 65 67 72 6f 75 6e 64 20 2d  lectforeground -
18cc0 74 61 6b 65 66 6f 63 75 73 20 2d 78 73 63 72 6f  takefocus -xscro
18cd0 6c 6c 63 6f 6d 6d 61 6e 64 20 2d 79 73 63 72 6f  llcommand -yscro
18ce0 6c 6c 63 6f 6d 6d 61 6e 64 0a 09 09 09 09 2d 63  llcommand.....-c
18cf0 6c 6f 73 65 65 6e 6f 75 67 68 20 2d 63 6f 6e 66  loseenough -conf
18d00 69 6e 65 20 2d 68 65 69 67 68 74 20 2d 73 63 72  ine -height -scr
18d10 6f 6c 6c 72 65 67 69 6f 6e 20 2d 77 69 64 74 68  ollregion -width
18d20 0a 09 09 09 09 2d 78 73 63 72 6f 6c 6c 69 6e 63  .....-xscrollinc
18d30 72 65 6d 65 6e 74 20 2d 79 73 63 72 6f 6c 6c 69  rement -yscrolli
18d40 6e 63 72 65 6d 65 6e 74 0a 09 09 09 7d 5d 0a 09  ncrement....}]..
18d50 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22  .}..}..return ""
18d60 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74  .}..proc complet
18d70 65 28 63 68 65 63 6b 62 75 74 74 6f 6e 29 20 7b  e(checkbutton) {
18d80 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
18d90 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
18da0 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d  switch -- ${pos}
18db0 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20   {...1 { return 
18dc0 5b 45 76 65 6e 74 75 61 6c 6c 79 49 6e 73 65 72  [EventuallyInser
18dd0 74 4c 65 61 64 69 6e 67 44 6f 74 20 24 7b 74 65  tLeadingDot ${te
18de0 78 74 7d 20 3c 70 61 74 68 4e 61 6d 65 3e 5d 20  xt} <pathName>] 
18df0 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09  }...default {...
18e00 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
18e10 65 57 69 64 67 65 74 43 6f 6e 66 69 67 75 72 61  eWidgetConfigura
18e20 74 69 6f 6e 73 20 24 7b 74 65 78 74 7d 20 24 7b  tions ${text} ${
18e30 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 20 7b  start} ${line} {
18e40 0a 09 09 09 09 2d 61 63 74 69 76 65 62 61 63 6b  .....-activeback
18e50 67 72 6f 75 6e 64 20 61 63 74 69 76 65 42 61 63  ground activeBac
18e60 6b 67 72 6f 75 6e 64 20 46 6f 72 65 67 72 6f 75  kground Foregrou
18e70 6e 64 20 0a 09 09 09 09 2d 61 63 74 69 76 65 66  nd .....-activef
18e80 6f 72 65 67 72 6f 75 6e 64 20 2d 61 6e 63 68 6f  oreground -ancho
18e90 72 20 2d 62 61 63 6b 67 72 6f 75 6e 64 20 2d 62  r -background -b
18ea0 69 74 6d 61 70 0a 09 09 09 09 2d 62 6f 72 64 65  itmap.....-borde
18eb0 72 77 69 64 74 68 20 2d 63 75 72 73 6f 72 20 2d  rwidth -cursor -
18ec0 64 69 73 61 62 6c 65 64 66 6f 72 65 67 72 6f 75  disabledforegrou
18ed0 6e 64 20 2d 66 6f 6e 74 0a 09 09 09 09 2d 66 6f  nd -font.....-fo
18ee0 72 65 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69  reground -highli
18ef0 67 68 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d 68  ghtbackground -h
18f00 69 67 68 6c 69 67 68 74 63 6f 6c 6f 72 0a 09 09  ighlightcolor...
18f10 09 09 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63  ..-highlightthic
18f20 6b 6e 65 73 73 20 2d 69 6d 61 67 65 20 2d 6a 75  kness -image -ju
18f30 73 74 69 66 79 20 2d 70 61 64 78 20 2d 70 61 64  stify -padx -pad
18f40 79 0a 09 09 09 09 2d 72 65 6c 69 65 66 20 2d 74  y.....-relief -t
18f50 61 6b 65 66 6f 63 75 73 20 2d 74 65 78 74 20 2d  akefocus -text -
18f60 74 65 78 74 76 61 72 69 61 62 6c 65 20 2d 75 6e  textvariable -un
18f70 64 65 72 6c 69 6e 65 0a 09 09 09 09 2d 77 72 61  derline.....-wra
18f80 70 6c 65 6e 67 74 68 20 2d 63 6f 6d 6d 61 6e 64  plength -command
18f90 20 2d 68 65 69 67 68 74 20 2d 69 6e 64 69 63 61   -height -indica
18fa0 74 6f 72 6f 6e 20 2d 6f 66 66 76 61 6c 75 65 0a  toron -offvalue.
18fb0 09 09 09 09 2d 6f 6e 76 61 6c 75 65 20 2d 73 65  ....-onvalue -se
18fc0 6c 65 63 74 63 6f 6c 6f 72 20 2d 73 65 6c 65 63  lectcolor -selec
18fd0 74 69 6d 61 67 65 20 2d 73 74 61 74 65 20 2d 76  timage -state -v
18fe0 61 72 69 61 62 6c 65 0a 09 09 09 09 2d 77 69 64  ariable.....-wid
18ff0 74 68 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 7d 0a  th....}]...}..}.
19000 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
19010 6f 63 20 63 6f 6d 70 6c 65 74 65 28 63 6c 69 70  oc complete(clip
19020 62 6f 61 72 64 29 20 7b 74 65 78 74 20 73 74 61  board) {text sta
19030 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
19040 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d  mod} {..switch -
19050 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b  - ${pos} {...1 {
19060 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
19070 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
19080 7d 20 7b 61 70 70 65 6e 64 20 63 6c 65 61 72 7d  } {append clear}
19090 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a  ] }...default {.
190a0 09 09 09 73 65 74 20 73 75 62 20 5b 4c 69 6e 64  ...set sub [Lind
190b0 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 09  ex ${line} 1]...
190c0 09 73 65 74 20 70 72 65 76 20 5b 50 72 65 76 69  .set prev [Previ
190d0 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d  ousWord ${start}
190e0 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09 09 73 77 69   ${line}]....swi
190f0 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a  tch -- ${sub} {.
19100 09 09 09 09 61 70 70 65 6e 64 20 7b 0a 09 09 09  ....append {....
19110 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72  ..switch -- ${pr
19120 65 76 7d 20 7b 0a 09 09 09 09 09 09 2d 64 69 73  ev} {.......-dis
19130 70 6c 61 79 6f 66 20 7b 0a 09 09 09 09 09 09 09  playof {........
19140 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
19150 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
19160 20 5b 54 6f 70 6c 65 76 65 6c 57 69 6e 64 6f 77   [ToplevelWindow
19170 73 5d 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09 09  s]].......}.....
19180 09 09 2d 66 6f 72 6d 61 74 20 7b 20 72 65 74 75  ..-format { retu
19190 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
191a0 20 3c 66 6f 72 6d 61 74 3e 5d 20 7d 0a 09 09 09   <format>] }....
191b0 09 09 09 2d 74 79 70 65 20 7b 20 72 65 74 75 72  ...-type { retur
191c0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
191d0 3c 74 79 70 65 3e 5d 20 7d 0a 09 09 09 09 09 09  <type>] }.......
191e0 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 09  default {.......
191f0 09 73 65 74 20 6f 70 74 73 20 5b 52 65 6d 6f 76  .set opts [Remov
19200 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c  eUsedOptions ${l
19210 69 6e 65 7d 20 7b 0a 09 09 09 09 09 09 09 09 2d  ine} {.........-
19220 64 69 73 70 6c 61 79 6f 66 20 2d 66 6f 72 6d 61  displayof -forma
19230 74 20 2d 74 79 70 65 20 2d 2d 0a 09 09 09 09 09  t -type --......
19240 09 09 7d 20 7b 2d 2d 7d 5d 0a 09 09 09 09 09 09  ..} {--}].......
19250 09 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6c 65  .if {![string le
19260 6e 67 74 68 20 24 7b 6f 70 74 73 7d 5d 7d 20 7b  ngth ${opts}]} {
19270 0a 09 09 09 09 09 09 09 09 72 65 74 75 72 6e 20  .........return 
19280 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 64  [DisplayHints <d
19290 61 74 61 3e 5d 0a 09 09 09 09 09 09 09 7d 20 65  ata>]........} e
192a0 6c 73 65 20 7b 0a 09 09 09 09 09 09 09 09 72 65  lse {.........re
192b0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
192c0 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24  omList ${text} $
192d0 7b 6f 70 74 73 7d 5d 0a 09 09 09 09 09 09 09 7d  {opts}]........}
192e0 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a  .......}......}.
192f0 09 09 09 09 7d 0a 09 09 09 09 63 6c 65 61 72 20  ....}.....clear 
19300 7b 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d  {......switch --
19310 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09 09   ${prev} {......
19320 09 2d 64 69 73 70 6c 61 79 6f 66 20 7b 0a 09 09  .-displayof {...
19330 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
19340 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
19350 74 65 78 74 7d 20 5b 54 6f 70 6c 65 76 65 6c 57  text} [ToplevelW
19360 69 6e 64 6f 77 73 5d 5d 0a 09 09 09 09 09 09 7d  indows]].......}
19370 0a 09 09 09 09 09 09 64 65 66 61 75 6c 74 20 7b  .......default {
19380 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b  ........return [
19390 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
193a0 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09   ${text} \......
193b0 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74  ..[RemoveUsedOpt
193c0 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09  ions ${line} {..
193d0 09 09 09 09 09 09 09 2d 64 69 73 70 6c 61 79 6f  .......-displayo
193e0 66 0a 09 09 09 09 09 09 09 7d 5d 5d 0a 09 09 09  f........}]]....
193f0 09 09 09 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09  ...}......}.....
19400 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a  }....}...}..}.}.
19410 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 64  .proc complete(d
19420 65 73 74 72 6f 79 29 20 7b 74 65 78 74 20 73 74  estroy) {text st
19430 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
19440 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 72 65 6d   mod} {..set rem
19450 61 69 6e 69 6e 67 20 5b 52 65 6d 6f 76 65 55 73  aining [RemoveUs
19460 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65  edOptions ${line
19470 7d 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65  } [WidgetChildre
19480 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 72 65 74  n ${text}]]..ret
19490 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
194a0 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24 7b  mList ${text} ${
194b0 72 65 6d 61 69 6e 69 6e 67 7d 5d 0a 7d 0a 0a 70  remaining}].}..p
194c0 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 65 6e 74  roc complete(ent
194d0 72 79 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  ry) {text start 
194e0 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
194f0 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  } {..switch -- $
19500 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65  {pos} {...1 { re
19510 74 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c 6c 79  turn [Eventually
19520 49 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f 74  InsertLeadingDot
19530 20 24 7b 74 65 78 74 7d 20 3c 70 61 74 68 4e 61   ${text} <pathNa
19540 6d 65 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74  me>] }...default
19550 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f   {....return [Co
19560 6d 70 6c 65 74 65 57 69 64 67 65 74 43 6f 6e 66  mpleteWidgetConf
19570 69 67 75 72 61 74 69 6f 6e 73 20 24 7b 74 65 78  igurations ${tex
19580 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69  t} ${start} ${li
19590 6e 65 7d 20 7b 0a 09 09 09 09 2d 62 61 63 6b 67  ne} {.....-backg
195a0 72 6f 75 6e 64 20 2d 62 6f 72 64 65 72 77 69 64  round -borderwid
195b0 74 68 20 2d 63 75 72 73 6f 72 20 2d 65 78 70 6f  th -cursor -expo
195c0 72 74 73 65 6c 65 63 74 69 6f 6e 0a 09 09 09 09  rtselection.....
195d0 2d 66 6f 6e 74 20 2d 66 6f 72 65 67 72 6f 75 6e  -font -foregroun
195e0 64 20 2d 68 69 67 68 6c 69 67 68 74 62 61 63 6b  d -highlightback
195f0 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69 67 68  ground -highligh
19600 74 63 6f 6c 6f 72 0a 09 09 09 09 2d 68 69 67 68  tcolor.....-high
19610 6c 69 67 68 74 74 68 69 63 6b 6e 65 73 73 20 2d  lightthickness -
19620 69 6e 73 65 72 74 62 61 63 6b 67 72 6f 75 6e 64  insertbackground
19630 20 2d 69 6e 73 65 72 74 62 6f 72 64 65 72 77 69   -insertborderwi
19640 64 74 68 0a 09 09 09 09 2d 69 6e 73 65 72 74 6f  dth.....-inserto
19650 66 66 74 69 6d 65 20 2d 69 6e 73 65 72 74 6f 6e  fftime -inserton
19660 74 69 6d 65 20 2d 69 6e 73 65 72 74 77 69 64 74  time -insertwidt
19670 68 20 2d 6a 75 73 74 69 66 79 20 2d 72 65 6c 69  h -justify -reli
19680 65 66 0a 09 09 09 09 2d 73 65 6c 65 63 74 62 61  ef.....-selectba
19690 63 6b 67 72 6f 75 6e 64 20 2d 73 65 6c 65 63 74  ckground -select
196a0 62 6f 72 64 65 72 77 69 64 74 68 20 2d 73 65 6c  borderwidth -sel
196b0 65 63 74 66 6f 72 65 67 72 6f 75 6e 64 0a 09 09  ectforeground...
196c0 09 09 2d 74 61 6b 65 66 6f 63 75 73 20 2d 74 65  ..-takefocus -te
196d0 78 74 76 61 72 69 61 62 6c 65 20 2d 78 73 63 72  xtvariable -xscr
196e0 6f 6c 6c 63 6f 6d 6d 61 6e 64 20 2d 73 68 6f 77  ollcommand -show
196f0 20 2d 73 74 61 74 65 0a 09 09 09 09 2d 77 69 64   -state.....-wid
19700 74 68 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 7d 0a  th....}]...}..}.
19710 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
19720 6f 63 20 63 6f 6d 70 6c 65 74 65 28 65 76 65 6e  oc complete(even
19730 74 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  t) {text start e
19740 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
19750 20 7b 0a 09 73 65 74 20 73 75 62 20 5b 4c 69 6e   {..set sub [Lin
19760 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09  dex ${line} 1]..
19770 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d  switch -- ${pos}
19780 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65 74 75   {...1 {....retu
19790 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
197a0 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 20 61  List ${text} { a
197b0 64 64 20 64 65 6c 65 74 65 20 67 65 6e 65 72 61  dd delete genera
197c0 74 65 20 69 6e 66 6f 20 7d 5d 0a 09 09 7d 0a 09  te info }]...}..
197d0 09 32 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  .2 {....switch -
197e0 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 61  - ${sub} {.....a
197f0 64 64 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  dd { return [Dis
19800 70 6c 61 79 48 69 6e 74 73 20 3c 3c 76 69 72 74  playHints <<virt
19810 75 61 6c 3e 3e 5d 20 7d 0a 09 09 09 09 69 6e 66  ual>>] }.....inf
19820 6f 20 2d 0a 09 09 09 09 64 65 6c 65 74 65 20 7b  o -.....delete {
19830 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
19840 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
19850 7b 74 65 78 74 7d 20 5b 65 76 65 6e 74 20 69 6e  {text} [event in
19860 66 6f 5d 20 22 3c 22 5d 0a 09 09 09 09 7d 0a 09  fo] "<"].....}..
19870 09 09 09 67 65 6e 65 72 61 74 65 20 7b 0a 09 09  ...generate {...
19880 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72  ...return [TryFr
19890 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b  omList ${text} [
198a0 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
198b0 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a 09  {text}]].....}..
198c0 09 09 7d 0a 09 09 7d 0a 09 09 33 20 7b 0a 09 09  ..}...}...3 {...
198d0 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62  .switch -- ${sub
198e0 7d 20 7b 0a 09 09 09 09 61 64 64 20 2d 0a 09 09  } {.....add -...
198f0 09 09 64 65 6c 65 74 65 20 2d 0a 09 09 09 09 67  ..delete -.....g
19900 65 6e 65 72 61 74 65 20 7b 0a 09 09 09 09 09 72  enerate {......r
19910 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 53  eturn [CompleteS
19920 65 71 75 65 6e 63 65 20 24 7b 74 65 78 74 7d 20  equence ${text} 
19930 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20  [Lindex ${line} 
19940 33 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 69 6e  3]].....}.....in
19950 66 6f 20 7b 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  fo {}....}...}..
19960 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 73 77  .default {....sw
19970 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b  itch -- ${sub} {
19980 0a 09 09 09 09 61 64 64 20 2d 0a 09 09 09 09 64  .....add -.....d
19990 65 6c 65 74 65 20 7b 0a 09 09 09 09 09 72 65 74  elete {......ret
199a0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 53 65 71  urn [CompleteSeq
199b0 75 65 6e 63 65 20 24 7b 74 65 78 74 7d 20 5b 4c  uence ${text} [L
199c0 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 33 5d  index ${line} 3]
199d0 5d 0a 09 09 09 09 7d 0a 09 09 09 09 69 6e 66 6f  ].....}.....info
199e0 20 7b 7d 0a 09 09 09 09 67 65 6e 65 72 61 74 65   {}.....generate
199f0 20 7b 0a 0a 09 09 09 09 09 73 77 69 74 63 68 20   {.......switch 
19a00 2d 2d 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64  -- [PreviousWord
19a10 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65   ${start} ${line
19a20 7d 5d 20 7b 0a 0a 09 09 09 09 09 09 2d 61 62 6f  }] {........-abo
19a30 76 65 20 2d 0a 09 09 09 09 09 09 2d 72 6f 6f 74  ve -.......-root
19a40 20 2d 0a 09 09 09 09 09 09 2d 73 75 62 77 69 6e   -.......-subwin
19a50 64 6f 77 20 7b 0a 09 09 09 09 09 09 09 72 65 74  dow {........ret
19a60 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74  urn [TryFromList
19a70 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09   ${text} \......
19a80 09 09 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65  ..[WidgetChildre
19a90 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09  n ${text}]].....
19aa0 09 09 7d 0a 0a 09 09 09 09 09 09 2d 62 6f 72 64  ..}........-bord
19ab0 65 72 77 69 64 74 68 20 7b 20 72 65 74 75 72 6e  erwidth { return
19ac0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
19ad0 73 69 7a 65 3e 5d 20 7d 0a 0a 09 09 09 09 09 09  size>] }........
19ae0 2d 62 75 74 74 6f 6e 20 2d 0a 09 09 09 09 09 09  -button -.......
19af0 2d 64 65 6c 74 61 20 2d 0a 09 09 09 09 09 09 2d  -delta -.......-
19b00 6b 65 79 63 6f 64 65 20 2d 0a 09 09 09 09 09 09  keycode -.......
19b10 2d 73 65 72 69 61 6c 20 2d 0a 09 09 09 09 09 09  -serial -.......
19b20 2d 63 6f 75 6e 74 20 7b 20 72 65 74 75 72 6e 20  -count { return 
19b30 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6e  [DisplayHints <n
19b40 75 6d 62 65 72 3e 5d 20 7d 0a 0a 09 09 09 09 09  umber>] }.......
19b50 09 2d 64 65 74 61 69 6c 20 7b 0a 09 09 09 09 09  .-detail {......
19b60 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
19b70 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
19b80 74 7d 20 7b 20 0a 09 09 09 09 09 09 09 09 4e 6f  t} { .........No
19b90 74 69 66 79 41 6e 63 65 73 74 6f 72 20 20 20 20  tifyAncestor    
19ba0 4e 6f 74 69 66 79 4e 6f 6e 6c 69 6e 65 61 72 56  NotifyNonlinearV
19bb0 69 72 74 75 61 6c 0a 09 09 09 09 09 09 09 09 4e  irtual.........N
19bc0 6f 74 69 66 79 44 65 74 61 69 6c 4e 6f 6e 65 20  otifyDetailNone 
19bd0 20 4e 6f 74 69 66 79 50 6f 69 6e 74 65 72 0a 09   NotifyPointer..
19be0 09 09 09 09 09 09 09 4e 6f 74 69 66 79 49 6e 66  .......NotifyInf
19bf0 65 72 69 6f 72 20 20 20 20 4e 6f 74 69 66 79 50  erior    NotifyP
19c00 6f 69 6e 74 65 72 52 6f 6f 74 0a 09 09 09 09 09  ointerRoot......
19c10 09 09 09 4e 6f 74 69 66 79 4e 6f 6e 6c 69 6e 65  ...NotifyNonline
19c20 61 72 20 20 20 4e 6f 74 69 66 79 56 69 72 74 75  ar   NotifyVirtu
19c30 61 6c 0a 09 09 09 09 09 09 09 7d 5d 0a 09 09 09  al........}]....
19c40 09 09 09 7d 0a 0a 09 09 09 09 09 09 2d 66 6f 63  ...}........-foc
19c50 75 73 20 2d 0a 09 09 09 09 09 09 2d 6f 76 65 72  us -.......-over
19c60 72 69 64 65 20 2d 0a 09 09 09 09 09 09 2d 73 65  ride -.......-se
19c70 6e 64 65 76 65 6e 74 20 7b 20 72 65 74 75 72 6e  ndevent { return
19c80 20 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65 61   [CompleteBoolea
19c90 6e 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 0a 09 09  n ${text}] }....
19ca0 09 09 09 09 2d 68 65 69 67 68 74 20 2d 0a 09 09  ....-height -...
19cb0 09 09 09 09 2d 77 69 64 74 68 20 7b 20 72 65 74  ....-width { ret
19cc0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
19cd0 73 20 3c 73 69 7a 65 3e 5d 20 7d 0a 0a 09 09 09  s <size>] }.....
19ce0 09 09 09 2d 6b 65 79 73 79 6d 20 7b 20 72 65 74  ...-keysym { ret
19cf0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
19d00 73 20 3c 6e 61 6d 65 3e 5d 20 7d 0a 0a 09 09 09  s <name>] }.....
19d10 09 09 09 2d 6d 6f 64 65 20 7b 0a 09 09 09 09 09  ...-mode {......
19d20 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
19d30 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
19d40 74 7d 20 7b 20 0a 09 09 09 09 09 09 09 09 4e 6f  t} { .........No
19d50 74 69 66 79 4e 6f 72 6d 61 6c 20 4e 6f 74 69 66  tifyNormal Notif
19d60 79 47 72 61 62 0a 09 09 09 09 09 09 09 09 4e 6f  yGrab.........No
19d70 74 69 66 79 55 6e 67 72 61 62 20 4e 6f 74 69 66  tifyUngrab Notif
19d80 79 57 68 69 6c 65 47 72 61 62 62 65 64 0a 09 09  yWhileGrabbed...
19d90 09 09 09 09 09 7d 5d 0a 09 09 09 09 09 09 7d 0a  .....}].......}.
19da0 0a 09 09 09 09 09 09 2d 70 6c 61 63 65 20 7b 0a  .......-place {.
19db0 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  .......return [C
19dc0 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
19dd0 24 7b 74 65 78 74 7d 20 7b 20 0a 09 09 09 09 09  ${text} { ......
19de0 09 09 09 50 6c 61 63 65 4f 6e 54 6f 70 20 50 6c  ...PlaceOnTop Pl
19df0 61 63 65 4f 6e 42 6f 74 74 6f 6d 0a 09 09 09 09  aceOnBottom.....
19e00 09 09 09 7d 5d 0a 09 09 09 09 09 09 7d 0a 0a 09  ...}].......}...
19e10 09 09 09 09 09 2d 72 6f 6f 74 78 20 2d 0a 09 09  .....-rootx -...
19e20 09 09 09 09 2d 72 6f 6f 74 79 20 2d 0a 09 09 09  ....-rooty -....
19e30 09 09 09 2d 78 20 2d 0a 09 09 09 09 09 09 2d 79  ...-x -.......-y
19e40 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
19e50 61 79 48 69 6e 74 73 20 3c 63 6f 6f 72 64 3e 5d  ayHints <coord>]
19e60 20 7d 0a 0a 09 09 09 09 09 09 2d 73 74 61 74 65   }........-state
19e70 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e   {........return
19e80 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
19e90 73 74 20 24 7b 74 65 78 74 7d 20 7b 20 0a 09 09  st ${text} { ...
19ea0 09 09 09 09 09 09 56 69 73 69 62 69 6c 69 74 79  ......Visibility
19eb0 55 6e 6f 62 73 63 75 72 65 64 0a 09 09 09 09 09  Unobscured......
19ec0 09 09 09 56 69 73 69 62 69 6c 69 74 79 50 61 72  ...VisibilityPar
19ed0 74 69 61 6c 6c 79 4f 62 73 63 75 72 65 64 0a 09  tiallyObscured..
19ee0 09 09 09 09 09 09 09 56 69 73 69 62 69 6c 69 74  .......Visibilit
19ef0 79 46 75 6c 6c 79 4f 62 73 63 75 72 65 64 0a 09  yFullyObscured..
19f00 09 09 09 09 09 09 09 3c 69 6e 74 65 67 65 72 3e  .......<integer>
19f10 0a 09 09 09 09 09 09 09 7d 5d 0a 09 09 09 09 09  ........}]......
19f20 09 7d 0a 0a 09 09 09 09 09 09 2d 74 69 6d 65 20  .}........-time 
19f30 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
19f40 79 48 69 6e 74 73 20 3c 69 6e 74 65 67 65 72 3e  yHints <integer>
19f50 5d 20 7d 0a 09 09 09 09 09 09 2d 77 68 65 6e 20  ] }.......-when 
19f60 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e 20  {........return 
19f70 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
19f80 74 20 24 7b 74 65 78 74 7d 20 7b 20 0a 09 09 09  t ${text} { ....
19f90 09 09 09 09 09 6e 6f 77 20 74 61 69 6c 20 68 65  .....now tail he
19fa0 61 64 20 6d 61 72 6b 0a 09 09 09 09 09 09 09 7d  ad mark........}
19fb0 5d 0a 09 09 09 09 09 09 7d 0a 0a 09 09 09 09 09  ].......}.......
19fc0 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09  .default {......
19fd0 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
19fe0 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
19ff0 74 7d 20 5c 0a 09 09 09 09 09 09 09 5b 52 65 6d  t} \........[Rem
1a000 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24  oveUsedOptions $
1a010 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 09 09 09  {line} {........
1a020 09 2d 61 62 6f 76 65 20 2d 62 6f 72 64 65 72 77  .-above -borderw
1a030 69 64 74 68 20 2d 62 75 74 74 6f 6e 20 2d 63 6f  idth -button -co
1a040 75 6e 74 20 2d 64 65 6c 74 61 0a 09 09 09 09 09  unt -delta......
1a050 09 09 09 2d 64 65 74 61 69 6c 20 2d 66 6f 63 75  ...-detail -focu
1a060 73 20 2d 68 65 69 67 68 74 20 2d 6b 65 79 63 6f  s -height -keyco
1a070 64 65 20 2d 6b 65 79 73 79 6d 0a 09 09 09 09 09  de -keysym......
1a080 09 09 09 2d 6d 6f 64 65 20 2d 6f 76 65 72 72 69  ...-mode -overri
1a090 64 65 20 2d 70 6c 61 63 65 20 2d 72 6f 6f 74 20  de -place -root 
1a0a0 2d 72 6f 6f 74 78 20 2d 72 6f 6f 74 79 0a 09 09  -rootx -rooty...
1a0b0 09 09 09 09 09 09 2d 73 65 6e 64 65 76 65 6e 74  ......-sendevent
1a0c0 20 2d 73 65 72 69 61 6c 20 2d 73 74 61 74 65 20   -serial -state 
1a0d0 2d 73 75 62 77 69 6e 64 6f 77 20 2d 74 69 6d 65  -subwindow -time
1a0e0 0a 09 09 09 09 09 09 09 09 2d 77 69 64 74 68 20  .........-width 
1a0f0 2d 77 68 65 6e 20 2d 78 20 2d 79 0a 09 09 09 09  -when -x -y.....
1a100 09 09 09 7d 5d 5d 0a 0a 09 09 09 09 09 09 7d 0a  ...}]]........}.
1a110 09 09 09 09 09 7d 0a 09 09 09 09 09 64 65 66 61  .....}......defa
1a120 75 6c 74 20 7b 20 7d 0a 09 09 09 09 7d 0a 09 09  ult { }.....}...
1a130 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72  .}...}..}..retur
1a140 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d  n "".}..proc com
1a150 70 6c 65 74 65 28 66 6f 63 75 73 29 20 7b 74 65  plete(focus) {te
1a160 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
1a170 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77  e pos mod} {..sw
1a180 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
1a190 0a 09 09 31 20 7b 0a 09 09 09 72 65 74 75 72 6e  ...1 {....return
1a1a0 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
1a1b0 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09  st ${text} \....
1a1c0 5b 63 6f 6e 63 61 74 20 5b 57 69 64 67 65 74 43  [concat [WidgetC
1a1d0 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d  hildren ${text}]
1a1e0 20 2d 64 69 73 70 6c 61 79 6f 66 20 2d 66 6f 72   -displayof -for
1a1f0 63 65 20 2d 6c 61 73 74 66 6f 72 5d 5d 0a 09 09  ce -lastfor]]...
1a200 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09  }...default {...
1a210 09 73 77 69 74 63 68 20 2d 2d 20 5b 50 72 65 76  .switch -- [Prev
1a220 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74  iousWord ${start
1a230 7d 20 24 7b 6c 69 6e 65 7d 5d 20 7b 0a 09 09 09  } ${line}] {....
1a240 09 2d 64 69 73 70 6c 61 79 6f 66 20 2d 0a 09 09  .-displayof -...
1a250 09 09 2d 66 6f 72 63 65 20 2d 0a 09 09 09 09 2d  ..-force -.....-
1a260 6c 61 73 74 66 6f 72 20 7b 0a 09 09 09 09 09 72  lastfor {......r
1a270 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1a280 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1a290 5c 0a 09 09 09 09 09 5b 57 69 64 67 65 74 43 68  \......[WidgetCh
1a2a0 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d  ildren ${text}]]
1a2b0 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a  .....}....}...}.
1a2c0 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
1a2d0 0a 70 72 6f 63 20 46 6f 6e 74 43 6f 6e 66 69 67  .proc FontConfig
1a2e0 75 72 65 20 7b 74 65 78 74 20 6c 69 6e 65 20 70  ure {text line p
1a2f0 72 65 76 7d 20 7b 0a 09 73 65 74 20 66 6f 6e 74  rev} {..set font
1a300 6f 70 74 73 20 7b 2d 66 61 6d 69 6c 79 20 2d 6f  opts {-family -o
1a310 76 65 72 73 74 72 69 6b 65 20 2d 73 69 7a 65 20  verstrike -size 
1a320 2d 73 6c 61 6e 74 20 2d 75 6e 64 65 72 6c 69 6e  -slant -underlin
1a330 65 20 2d 77 65 69 67 68 74 7d 0a 09 73 77 69 74  e -weight}..swit
1a340 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a  ch -- ${prev} {.
1a350 09 09 2d 66 61 6d 69 6c 79 20 7b 0a 09 09 09 72  ..-family {....r
1a360 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1a370 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1a380 5b 66 6f 6e 74 20 66 61 6d 69 6c 69 65 73 5d 5d  [font families]]
1a390 0a 09 09 7d 0a 09 09 2d 75 6e 64 65 72 6c 69 6e  ...}...-underlin
1a3a0 65 20 2d 0a 09 09 2d 6f 76 65 72 73 74 72 69 6b  e -...-overstrik
1a3b0 65 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  e { return [Comp
1a3c0 6c 65 74 65 42 6f 6f 6c 65 61 6e 20 24 7b 74 65  leteBoolean ${te
1a3d0 78 74 7d 5d 20 7d 0a 09 09 2d 73 69 7a 65 20 7b  xt}] }...-size {
1a3e0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
1a3f0 48 69 6e 74 73 20 3c 73 69 7a 65 3e 5d 20 7d 0a  Hints <size>] }.
1a400 09 09 2d 73 6c 61 6e 74 20 7b 0a 09 09 09 72 65  ..-slant {....re
1a410 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
1a420 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b  omList ${text} {
1a430 20 72 6f 6d 61 6e 20 69 74 61 6c 69 63 20 7d 5d   roman italic }]
1a440 0a 09 09 7d 0a 09 09 2d 77 65 69 67 68 74 20 7b  ...}...-weight {
1a450 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
1a460 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
1a470 65 78 74 7d 20 7b 20 6e 6f 72 6d 61 6c 20 62 6f  ext} { normal bo
1a480 6c 64 20 7d 5d 0a 09 09 7d 0a 09 09 64 65 66 61  ld }]...}...defa
1a490 75 6c 74 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  ult {....return 
1a4a0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
1a4b0 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 5b  t ${text} \....[
1a4c0 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e  RemoveUsedOption
1a4d0 73 20 24 7b 6c 69 6e 65 7d 20 24 7b 66 6f 6e 74  s ${line} ${font
1a4e0 6f 70 74 73 7d 5d 5d 0a 09 09 7d 0a 09 7d 0a 7d  opts}]]...}..}.}
1a4f0 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
1a500 66 6f 6e 74 29 20 7b 74 65 78 74 20 73 74 61 72  font) {text star
1a510 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
1a520 6f 64 7d 20 7b 0a 09 73 65 74 20 66 6f 6e 74 6f  od} {..set fonto
1a530 70 74 73 20 7b 2d 66 61 6d 69 6c 79 20 2d 6f 76  pts {-family -ov
1a540 65 72 73 74 72 69 6b 65 20 2d 73 69 7a 65 20 2d  erstrike -size -
1a550 73 6c 61 6e 74 20 2d 75 6e 64 65 72 6c 69 6e 65  slant -underline
1a560 20 2d 77 65 69 67 68 74 7d 0a 09 73 65 74 20 66   -weight}..set f
1a570 6f 6e 74 6d 65 74 72 69 63 73 20 7b 2d 61 73 63  ontmetrics {-asc
1a580 65 6e 74 20 2d 64 65 73 63 65 6e 74 20 2d 6c 69  ent -descent -li
1a590 6e 65 73 70 61 63 65 20 2d 66 69 78 65 64 7d 0a  nespace -fixed}.
1a5a0 09 73 65 74 20 73 75 62 20 5b 4c 69 6e 64 65 78  .set sub [Lindex
1a5b0 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73 65 74   ${line} 1]..set
1a5c0 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73 57   prev [PreviousW
1a5d0 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c  ord ${start} ${l
1a5e0 69 6e 65 7d 5d 0a 09 73 77 69 74 63 68 20 2d 2d  ine}]..switch --
1a5f0 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a   ${pos} {...1 {.
1a600 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
1a610 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
1a620 78 74 7d 20 7b 0a 09 09 09 09 61 63 74 75 61 6c  xt} {.....actual
1a630 20 63 6f 6e 66 69 67 75 72 65 20 63 72 65 61 74   configure creat
1a640 65 20 64 65 6c 65 74 65 20 66 61 6d 69 6c 69 65  e delete familie
1a650 73 20 6d 65 61 73 75 72 65 20 6d 65 74 72 69 63  s measure metric
1a660 73 20 6e 61 6d 65 73 0a 09 09 09 7d 5d 0a 09 09  s names....}]...
1a670 7d 0a 09 09 32 20 7b 0a 09 09 09 73 77 69 74 63  }...2 {....switc
1a680 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09  h -- ${sub} {...
1a690 09 09 61 63 74 75 61 6c 20 2d 0a 09 09 09 09 6d  ..actual -.....m
1a6a0 65 61 73 75 72 65 20 2d 0a 09 09 09 09 6d 65 74  easure -.....met
1a6b0 72 69 63 73 20 7b 0a 09 09 09 09 09 72 65 74 75  rics {......retu
1a6c0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
1a6d0 20 3c 66 6f 6e 74 3e 5d 0a 09 09 09 09 7d 0a 09   <font>].....}..
1a6e0 09 09 09 63 6f 6e 66 69 67 75 72 65 20 2d 0a 09  ...configure -..
1a6f0 09 09 09 64 65 6c 65 74 65 20 7b 0a 09 09 09 09  ...delete {.....
1a700 09 73 65 74 20 6e 61 6d 65 73 20 5b 66 6f 6e 74  .set names [font
1a710 20 6e 61 6d 65 73 5d 0a 09 09 09 09 09 69 66 20   names]......if 
1a720 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length 
1a730 24 7b 6e 61 6d 65 73 7d 5d 7d 20 7b 0a 09 09 09  ${names}]} {....
1a740 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
1a750 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
1a760 78 74 7d 20 24 7b 6e 61 6d 65 73 7d 5d 0a 09 09  xt} ${names}]...
1a770 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ...} else {.....
1a780 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  ..return [Displa
1a790 79 48 69 6e 74 73 20 3c 66 6f 6e 74 6e 61 6d 65  yHints <fontname
1a7a0 3e 5d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a  >]......}.....}.
1a7b0 09 09 09 09 63 72 65 61 74 65 20 7b 0a 09 09 09  ....create {....
1a7c0 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
1a7d0 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
1a7e0 74 7d 20 5c 0a 09 09 09 09 09 5b 63 6f 6e 63 61  t} \......[conca
1a7f0 74 20 3f 66 6f 6e 74 6e 61 6d 65 3f 20 24 7b 66  t ?fontname? ${f
1a800 6f 6e 74 6f 70 74 73 7d 5d 5d 0a 09 09 09 09 7d  ontopts}]].....}
1a810 0a 09 09 09 09 66 61 6d 69 6c 69 65 73 20 7b 0a  .....families {.
1a820 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
1a830 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
1a840 74 65 78 74 7d 20 2d 64 69 73 70 6c 61 79 6f 66  text} -displayof
1a850 5d 0a 09 09 09 09 7d 0a 09 09 09 09 6e 61 6d 65  ].....}.....name
1a860 73 20 7b 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  s {}....}...}...
1a870 33 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d  3 {....switch --
1a880 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 61 63   ${sub} {.....ac
1a890 74 75 61 6c 20 7b 0a 09 09 09 09 09 72 65 74 75  tual {......retu
1a8a0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
1a8b0 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09  List ${text} \..
1a8c0 09 09 09 09 5b 63 6f 6e 63 61 74 20 2d 64 69 73  ....[concat -dis
1a8d0 70 6c 61 79 6f 66 20 24 7b 66 6f 6e 74 6f 70 74  playof ${fontopt
1a8e0 73 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 63  s}]].....}.....c
1a8f0 6f 6e 66 69 67 75 72 65 20 2d 0a 09 09 09 09 63  onfigure -.....c
1a900 72 65 61 74 65 20 7b 0a 09 09 09 09 09 72 65 74  reate {......ret
1a910 75 72 6e 20 5b 46 6f 6e 74 43 6f 6e 66 69 67 75  urn [FontConfigu
1a920 72 65 20 24 7b 74 65 78 74 7d 20 24 7b 6c 69 6e  re ${text} ${lin
1a930 65 7d 20 24 7b 70 72 65 76 7d 5d 0a 09 09 09 09  e} ${prev}].....
1a940 7d 0a 09 09 09 09 64 65 6c 65 74 65 20 7b 0a 09  }.....delete {..
1a950 09 09 09 09 73 65 74 20 6e 61 6d 65 73 20 5b 66  ....set names [f
1a960 6f 6e 74 20 6e 61 6d 65 73 5d 0a 09 09 09 09 09  ont names]......
1a970 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
1a980 74 68 20 24 7b 6e 61 6d 65 73 7d 5d 7d 20 7b 0a  th ${names}]} {.
1a990 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
1a9a0 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
1a9b0 7b 74 65 78 74 7d 20 24 7b 6e 61 6d 65 73 7d 5d  {text} ${names}]
1a9c0 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09  ......} else {..
1a9d0 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73  .....return [Dis
1a9e0 70 6c 61 79 48 69 6e 74 73 20 3c 66 6f 6e 74 6e  playHints <fontn
1a9f0 61 6d 65 3e 5d 0a 09 09 09 09 09 7d 0a 09 09 09  ame>]......}....
1aa00 09 7d 0a 09 09 09 09 66 61 6d 69 6c 69 65 73 20  .}.....families 
1aa10 7b 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d  {......switch --
1aa20 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09 09   ${prev} {......
1aa30 09 2d 64 69 73 70 6c 61 79 6f 66 20 7b 0a 09 09  .-displayof {...
1aa40 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
1aa50 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
1aa60 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 09 09 5b  text} \........[
1aa70 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
1aa80 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 09 09 7d  {text}]].......}
1aa90 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09  ......}.....}...
1aaa0 09 09 6d 65 61 73 75 72 65 20 7b 0a 09 09 09 09  ..measure {.....
1aab0 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
1aac0 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
1aad0 7d 20 7b 2d 64 69 73 70 6c 61 79 6f 66 20 3c 74  } {-displayof <t
1aae0 65 78 74 3e 7d 5d 0a 09 09 09 09 7d 0a 09 09 09  ext>}].....}....
1aaf0 09 6d 65 74 72 69 63 73 20 7b 0a 09 09 09 09 09  .metrics {......
1ab00 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
1ab10 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
1ab20 20 5c 0a 09 09 09 09 09 5b 63 6f 6e 63 61 74 20   \......[concat 
1ab30 2d 64 69 73 70 6c 61 79 6f 66 20 24 7b 66 6f 6e  -displayof ${fon
1ab40 74 6d 65 74 72 69 63 73 7d 5d 5d 0a 09 09 09 09  tmetrics}]].....
1ab50 7d 0a 09 09 09 09 6e 61 6d 65 73 20 7b 7d 0a 09  }.....names {}..
1ab60 09 09 7d 0a 09 09 7d 0a 09 09 34 20 7b 0a 09 09  ..}...}...4 {...
1ab70 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62  .switch -- ${sub
1ab80 7d 20 7b 0a 09 09 09 09 61 63 74 75 61 6c 20 7b  } {.....actual {
1ab90 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20  ......switch -- 
1aba0 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09 09 09  ${prev} {.......
1abb0 2d 64 69 73 70 6c 61 79 6f 66 20 7b 0a 09 09 09  -displayof {....
1abc0 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
1abd0 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
1abe0 65 78 74 7d 20 5c 0a 09 09 09 09 09 09 09 5b 57  ext} \........[W
1abf0 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b  idgetChildren ${
1ac00 74 65 78 74 7d 5d 5d 0a 09 09 09 09 09 09 7d 0a  text}]].......}.
1ac10 09 09 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a  ......default {.
1ac20 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 46  .......return [F
1ac30 6f 6e 74 43 6f 6e 66 69 67 75 72 65 20 24 7b 74  ontConfigure ${t
1ac40 65 78 74 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70  ext} ${line} ${p
1ac50 72 65 76 7d 5d 0a 09 09 09 09 09 09 7d 0a 09 09  rev}].......}...
1ac60 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09 63  ...}.....}.....c
1ac70 6f 6e 66 69 67 75 72 65 20 2d 0a 09 09 09 09 63  onfigure -.....c
1ac80 72 65 61 74 65 20 7b 0a 09 09 09 09 09 72 65 74  reate {......ret
1ac90 75 72 6e 20 5b 46 6f 6e 74 43 6f 6e 66 69 67 75  urn [FontConfigu
1aca0 72 65 20 24 7b 74 65 78 74 7d 20 24 7b 6c 69 6e  re ${text} ${lin
1acb0 65 7d 20 24 7b 70 72 65 76 7d 5d 0a 09 09 09 09  e} ${prev}].....
1acc0 7d 0a 09 09 09 09 64 65 6c 65 74 65 20 7b 0a 09  }.....delete {..
1acd0 09 09 09 09 73 65 74 20 6e 61 6d 65 73 20 5b 66  ....set names [f
1ace0 6f 6e 74 20 6e 61 6d 65 73 5d 0a 09 09 09 09 09  ont names]......
1acf0 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
1ad00 74 68 20 24 7b 6e 61 6d 65 73 7d 5d 7d 20 7b 0a  th ${names}]} {.
1ad10 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
1ad20 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
1ad30 7b 74 65 78 74 7d 20 24 7b 6e 61 6d 65 73 7d 5d  {text} ${names}]
1ad40 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09  ......} else {..
1ad50 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73  .....return [Dis
1ad60 70 6c 61 79 48 69 6e 74 73 20 3c 66 6f 6e 74 6e  playHints <fontn
1ad70 61 6d 65 3e 5d 0a 09 09 09 09 09 7d 0a 09 09 09  ame>]......}....
1ad80 09 7d 0a 09 09 09 09 66 61 6d 69 6c 69 65 73 20  .}.....families 
1ad90 7b 7d 0a 09 09 09 09 6d 65 61 73 75 72 65 20 7b  {}.....measure {
1ada0 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20  ......switch -- 
1adb0 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09 09 09  ${prev} {.......
1adc0 2d 64 69 73 70 6c 61 79 6f 66 20 7b 0a 09 09 09  -displayof {....
1add0 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
1ade0 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
1adf0 65 78 74 7d 20 5c 0a 09 09 09 09 09 09 09 5b 57  ext} \........[W
1ae00 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b  idgetChildren ${
1ae10 74 65 78 74 7d 5d 5d 0a 09 09 09 09 09 09 7d 0a  text}]].......}.
1ae20 09 09 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a  ......default {.
1ae30 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44  .......return [D
1ae40 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 65 78  isplayHints <tex
1ae50 74 3e 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09 09  t>].......}.....
1ae60 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09 6d 65 74  .}.....}.....met
1ae70 72 69 63 73 20 7b 0a 09 09 09 09 09 73 77 69 74  rics {......swit
1ae80 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a  ch -- ${prev} {.
1ae90 09 09 09 09 09 09 2d 64 69 73 70 6c 61 79 6f 66  ......-displayof
1aea0 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e   {........return
1aeb0 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
1aec0 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09  st ${text} \....
1aed0 09 09 09 09 5b 57 69 64 67 65 74 43 68 69 6c 64  ....[WidgetChild
1aee0 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09  ren ${text}]]...
1aef0 09 09 09 09 7d 0a 09 09 09 09 09 09 64 65 66 61  ....}.......defa
1af00 75 6c 74 20 7b 0a 09 09 09 09 09 09 09 72 65 74  ult {........ret
1af10 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
1af20 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24 7b  mList ${text} ${
1af30 66 6f 6e 74 6d 65 74 72 69 63 73 7d 5d 0a 09 09  fontmetrics}]...
1af40 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a 09 09 09  ....}......}....
1af50 09 7d 0a 09 09 09 09 6e 61 6d 65 73 20 7b 7d 0a  .}.....names {}.
1af60 09 09 09 7d 0a 09 09 7d 0a 09 09 64 65 66 61 75  ...}...}...defau
1af70 6c 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  lt {....switch -
1af80 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 61  - ${sub} {.....a
1af90 63 74 75 61 6c 20 2d 0a 09 09 09 09 63 6f 6e 66  ctual -.....conf
1afa0 69 67 75 72 65 20 2d 0a 09 09 09 09 63 72 65 61  igure -.....crea
1afb0 74 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  te {......return
1afc0 20 5b 46 6f 6e 74 43 6f 6e 66 69 67 75 72 65 20   [FontConfigure 
1afd0 24 7b 74 65 78 74 7d 20 24 7b 6c 69 6e 65 7d 20  ${text} ${line} 
1afe0 24 7b 70 72 65 76 7d 5d 0a 09 09 09 09 7d 0a 09  ${prev}].....}..
1aff0 09 09 09 64 65 6c 65 74 65 20 7b 0a 09 09 09 09  ...delete {.....
1b000 09 73 65 74 20 6e 61 6d 65 73 20 5b 66 6f 6e 74  .set names [font
1b010 20 6e 61 6d 65 73 5d 0a 09 09 09 09 09 69 66 20   names]......if 
1b020 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length 
1b030 24 7b 6e 61 6d 65 73 7d 5d 7d 20 7b 0a 09 09 09  ${names}]} {....
1b040 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
1b050 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
1b060 78 74 7d 20 24 7b 6e 61 6d 65 73 7d 5d 0a 09 09  xt} ${names}]...
1b070 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ...} else {.....
1b080 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  ..return [Displa
1b090 79 48 69 6e 74 73 20 3c 66 6f 6e 74 6e 61 6d 65  yHints <fontname
1b0a0 3e 5d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a  >]......}.....}.
1b0b0 09 09 09 09 66 61 6d 69 6c 69 65 73 20 7b 7d 0a  ....families {}.
1b0c0 09 09 09 09 6d 65 61 73 75 72 65 20 7b 0a 09 09  ....measure {...
1b0d0 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  ...return [Displ
1b0e0 61 79 48 69 6e 74 73 20 3c 74 65 78 74 3e 5d 0a  ayHints <text>].
1b0f0 09 09 09 09 7d 0a 09 09 09 09 6d 65 74 72 69 63  ....}.....metric
1b100 73 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  s {......return 
1b110 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
1b120 74 20 24 7b 74 65 78 74 7d 20 24 7b 66 6f 6e 74  t ${text} ${font
1b130 6d 65 74 72 69 63 73 7d 5d 0a 09 09 09 09 7d 0a  metrics}].....}.
1b140 09 09 09 09 6e 61 6d 65 73 20 7b 7d 0a 09 09 09  ....names {}....
1b150 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  }...}..}..return
1b160 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70   "".}..proc comp
1b170 6c 65 74 65 28 66 72 61 6d 65 29 20 7b 74 65 78  lete(frame) {tex
1b180 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
1b190 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69   pos mod} {..swi
1b1a0 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a  tch -- ${pos} {.
1b1b0 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 45 76  ..1 { return [Ev
1b1c0 65 6e 74 75 61 6c 6c 79 49 6e 73 65 72 74 4c 65  entuallyInsertLe
1b1d0 61 64 69 6e 67 44 6f 74 20 24 7b 74 65 78 74 7d  adingDot ${text}
1b1e0 20 3c 70 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a 09   <pathName>] }..
1b1f0 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 72 65  .default {....re
1b200 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 57 69  turn [CompleteWi
1b210 64 67 65 74 43 6f 6e 66 69 67 75 72 61 74 69 6f  dgetConfiguratio
1b220 6e 73 20 24 7b 74 65 78 74 7d 20 24 7b 73 74 61  ns ${text} ${sta
1b230 72 74 7d 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09  rt} ${line} {...
1b240 09 09 2d 62 6f 72 64 65 72 77 69 64 74 68 20 2d  ..-borderwidth -
1b250 63 75 72 73 6f 72 20 2d 68 69 67 68 6c 69 67 68  cursor -highligh
1b260 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67  tbackground -hig
1b270 68 6c 69 67 68 74 63 6f 6c 6f 72 0a 09 09 09 09  hlightcolor.....
1b280 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b 6e  -highlightthickn
1b290 65 73 73 20 2d 72 65 6c 69 65 66 20 2d 74 61 6b  ess -relief -tak
1b2a0 65 66 6f 63 75 73 20 2d 62 61 63 6b 67 72 6f 75  efocus -backgrou
1b2b0 6e 64 0a 09 09 09 09 2d 63 6c 61 73 73 20 2d 63  nd.....-class -c
1b2c0 6f 6c 6f 72 6d 61 70 20 2d 63 6f 6e 74 61 69 6e  olormap -contain
1b2d0 65 72 20 2d 68 65 69 67 68 74 20 2d 76 69 73 75  er -height -visu
1b2e0 61 6c 20 2d 77 69 64 74 68 0a 09 09 09 7d 5d 0a  al -width....}].
1b2f0 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
1b300 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
1b310 74 65 28 67 72 61 62 29 20 7b 74 65 78 74 20 73  te(grab) {text s
1b320 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
1b330 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
1b340 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31   -- ${pos} {...1
1b350 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f   {....return [Co
1b360 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
1b370 7b 74 65 78 74 7d 20 5b 63 6f 6e 63 61 74 20 5c  {text} [concat \
1b380 0a 09 09 09 63 75 72 72 65 6e 74 20 72 65 6c 65  ....current rele
1b390 61 73 65 20 73 65 74 20 73 74 61 74 75 73 20 2d  ase set status -
1b3a0 67 6c 6f 62 61 6c 20 5b 57 69 64 67 65 74 43 68  global [WidgetCh
1b3b0 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d  ildren ${text}]]
1b3c0 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73  ]...}...2 {....s
1b3d0 77 69 74 63 68 20 2d 2d 20 5b 4c 69 6e 64 65 78  witch -- [Lindex
1b3e0 20 24 7b 6c 69 6e 65 7d 20 31 5d 20 7b 0a 09 09   ${line} 1] {...
1b3f0 09 09 2d 67 6c 6f 62 61 6c 20 2d 0a 09 09 09 09  ..-global -.....
1b400 63 75 72 72 65 6e 74 20 2d 0a 09 09 09 09 72 65  current -.....re
1b410 6c 65 61 73 65 20 2d 0a 09 09 09 09 73 74 61 74  lease -.....stat
1b420 75 73 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  us {......return
1b430 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
1b440 73 74 20 24 7b 74 65 78 74 7d 20 5b 57 69 64 67  st ${text} [Widg
1b450 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65 78  etChildren ${tex
1b460 74 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 73  t}]].....}.....s
1b470 65 74 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  et {......return
1b480 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
1b490 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09  st ${text} \....
1b4a0 09 09 5b 63 6f 6e 63 61 74 20 2d 67 6c 6f 62 61  ..[concat -globa
1b4b0 6c 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65  l [WidgetChildre
1b4c0 6e 20 24 7b 74 65 78 74 7d 5d 5d 5d 0a 09 09 09  n ${text}]]]....
1b4d0 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 33 20  .}....}...}...3 
1b4e0 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 5b  {....switch -- [
1b4f0 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31  Lindex ${line} 1
1b500 5d 20 7b 0a 09 09 09 09 73 65 74 20 7b 0a 09 09  ] {.....set {...
1b510 09 09 09 73 77 69 74 63 68 20 2d 2d 20 5b 50 72  ...switch -- [Pr
1b520 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61  eviousWord ${sta
1b530 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 20 7b 0a 09  rt} ${line}] {..
1b540 09 09 09 09 09 2d 67 6c 6f 62 61 6c 20 7b 0a 09  .....-global {..
1b550 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
1b560 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
1b570 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 09 09  {text} \........
1b580 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
1b590 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 09 09  ${text}]].......
1b5a0 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09  }......}.....}..
1b5b0 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75  ..}...}..}..retu
1b5c0 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 47 72  rn "".}..proc Gr
1b5d0 69 64 43 6f 6e 66 69 67 20 7b 74 65 78 74 20 73  idConfig {text s
1b5e0 74 61 72 74 20 6c 69 6e 65 20 70 72 65 76 7d 20  tart line prev} 
1b5f0 7b 0a 09 73 65 74 20 6f 70 74 73 20 7b 0a 09 09  {..set opts {...
1b600 2d 63 6f 6c 75 6d 6e 20 2d 63 6f 6c 75 6d 6e 73  -column -columns
1b610 70 61 6e 20 2d 69 6e 20 2d 69 70 61 64 78 20 2d  pan -in -ipadx -
1b620 69 70 61 64 79 0a 09 09 2d 70 61 64 78 20 2d 70  ipady...-padx -p
1b630 61 64 79 20 2d 72 6f 77 20 2d 72 6f 77 73 70 61  ady -row -rowspa
1b640 6e 20 2d 73 74 69 63 6b 79 0a 09 7d 0a 09 69 66  n -sticky..}..if
1b650 20 7b 2d 31 20 3d 3d 20 5b 73 74 72 69 6e 67 20   {-1 == [string 
1b660 66 69 72 73 74 20 22 2d 22 20 24 7b 6c 69 6e 65  first "-" ${line
1b670 7d 5d 7d 20 7b 0a 09 09 73 65 74 20 73 6c 61 76  }]} {...set slav
1b680 65 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65  e [WidgetChildre
1b690 6e 20 24 7b 74 65 78 74 7d 5d 0a 09 7d 20 65 6c  n ${text}]..} el
1b6a0 73 65 20 7b 0a 09 09 73 65 74 20 73 6c 61 76 65  se {...set slave
1b6b0 20 22 22 0a 09 7d 0a 09 73 77 69 74 63 68 20 2d   ""..}..switch -
1b6c0 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09 2d 63  - ${prev} {...-c
1b6d0 6f 6c 75 6d 6e 20 2d 0a 09 09 2d 63 6f 6c 75 6d  olumn -...-colum
1b6e0 6e 73 70 61 6e 20 2d 0a 09 09 2d 72 6f 77 20 2d  nspan -...-row -
1b6f0 0a 09 09 2d 72 6f 77 73 70 61 6e 20 7b 20 72 65  ...-rowspan { re
1b700 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
1b710 74 73 20 3c 6e 3e 5d 20 7d 0a 0a 09 09 2d 69 70  ts <n>] }....-ip
1b720 61 64 78 20 2d 0a 09 09 2d 69 70 61 64 79 20 2d  adx -...-ipady -
1b730 0a 09 09 2d 70 61 64 78 20 2d 0a 09 09 2d 70 61  ...-padx -...-pa
1b740 64 79 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  dy { return [Dis
1b750 70 6c 61 79 48 69 6e 74 73 20 3c 61 6d 6f 75 6e  playHints <amoun
1b760 74 3e 5d 20 7d 0a 0a 09 09 2d 69 6e 20 7b 20 72  t>] }....-in { r
1b770 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1b780 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1b790 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
1b7a0 24 7b 74 65 78 74 7d 5d 5d 20 7d 0a 09 09 2d 73  ${text}]] }...-s
1b7b0 74 69 63 6b 79 20 7b 0a 09 09 09 73 65 74 20 70  ticky {....set p
1b7c0 72 65 76 20 5b 50 72 65 76 69 6f 75 73 57 6f 72  rev [PreviousWor
1b7d0 64 4f 66 49 6e 63 6f 6d 70 6c 65 74 65 50 6f 73  dOfIncompletePos
1b7e0 69 74 69 6f 6e 20 24 7b 73 74 61 72 74 7d 20 24  ition ${start} $
1b7f0 7b 6c 69 6e 65 7d 5d 0a 09 09 09 72 65 74 75 72  {line}]....retur
1b800 6e 20 5b 43 6f 6d 70 6c 65 74 65 4c 69 73 74 46  n [CompleteListF
1b810 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1b820 5c 0a 09 09 09 5b 73 74 72 69 6e 67 20 74 72 69  \....[string tri
1b830 6d 6c 65 66 74 20 5b 49 6e 63 6f 6d 70 6c 65 74  mleft [Incomplet
1b840 65 4c 69 73 74 52 65 6d 61 69 6e 64 65 72 20 24  eListRemainder $
1b850 7b 6c 69 6e 65 7d 5d 5d 20 5c 0a 09 09 09 7b 6e  {line}]] \....{n
1b860 20 65 20 73 20 77 7d 20 5c 7b 20 7b 20 7d 20 5c   e s w} \{ { } \
1b870 7d 5d 0a 09 09 7d 0a 0a 0a 09 09 64 65 66 61 75  }]...}.....defau
1b880 6c 74 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b  lt {....return [
1b890 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
1b8a0 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 5b 52   ${text} \....[R
1b8b0 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
1b8c0 20 24 7b 6c 69 6e 65 7d 20 5b 63 6f 6e 63 61 74   ${line} [concat
1b8d0 20 24 7b 6f 70 74 73 7d 20 24 7b 73 6c 61 76 65   ${opts} ${slave
1b8e0 7d 5d 5d 5d 0a 09 09 7d 0a 09 7d 0a 7d 0a 20 0a  }]]]...}..}.}. .
1b8f0 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 67 72  proc complete(gr
1b900 69 64 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  id) {text start 
1b910 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
1b920 7d 20 7b 0a 09 73 65 74 20 73 75 62 20 5b 4c 69  } {..set sub [Li
1b930 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a  ndex ${line} 1].
1b940 09 73 65 74 20 70 72 65 76 20 5b 50 72 65 76 69  .set prev [Previ
1b950 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d  ousWord ${start}
1b960 20 24 7b 6c 69 6e 65 7d 5d 0a 09 73 77 69 74 63   ${line}]..switc
1b970 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09  h -- ${pos} {...
1b980 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43  1 {....return [C
1b990 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
1b9a0 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 5b 63 6f  ${text} \....[co
1b9b0 6e 63 61 74 20 5b 57 69 64 67 65 74 43 68 69 6c  ncat [WidgetChil
1b9c0 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 20 7b 0a  dren ${text}] {.
1b9d0 09 09 09 09 62 62 6f 78 20 63 6f 6c 75 6d 6e 63  ....bbox columnc
1b9e0 6f 6e 66 69 67 75 72 65 20 63 6f 6e 66 69 67 75  onfigure configu
1b9f0 72 65 20 66 6f 72 67 65 74 0a 09 09 09 09 69 6e  re forget.....in
1ba00 66 6f 20 6c 6f 63 61 74 69 6f 6e 20 70 72 6f 70  fo location prop
1ba10 61 67 61 74 65 20 72 6f 77 63 6f 6e 66 69 67 75  agate rowconfigu
1ba20 72 65 0a 09 09 09 09 72 65 6d 6f 76 65 20 73 69  re.....remove si
1ba30 7a 65 20 73 6c 61 76 65 73 0a 09 09 09 7d 5d 5d  ze slaves....}]]
1ba40 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73 77  ...}...2 {....sw
1ba50 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b  itch -- ${sub} {
1ba60 0a 09 09 09 09 62 62 6f 78 20 2d 0a 09 09 09 09  .....bbox -.....
1ba70 63 6f 6c 75 6d 6e 63 6f 6e 66 69 67 75 72 65 20  columnconfigure 
1ba80 2d 0a 09 09 09 09 63 6f 6e 66 69 67 75 72 65 20  -.....configure 
1ba90 2d 0a 09 09 09 09 66 6f 72 67 65 74 20 2d 0a 09  -.....forget -..
1baa0 09 09 09 69 6e 66 6f 20 2d 0a 09 09 09 09 6c 6f  ...info -.....lo
1bab0 63 61 74 69 6f 6e 20 2d 0a 09 09 09 09 70 72 6f  cation -.....pro
1bac0 70 61 67 61 74 65 20 2d 0a 09 09 09 09 72 6f 77  pagate -.....row
1bad0 63 6f 6e 66 69 67 75 72 65 20 2d 0a 09 09 09 09  configure -.....
1bae0 72 65 6d 6f 76 65 20 2d 0a 09 09 09 09 73 69 7a  remove -.....siz
1baf0 65 20 2d 0a 09 09 09 09 73 6c 61 76 65 73 20 7b  e -.....slaves {
1bb00 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
1bb10 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
1bb20 7b 74 65 78 74 7d 20 5b 57 69 64 67 65 74 43 68  {text} [WidgetCh
1bb30 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d  ildren ${text}]]
1bb40 0a 09 09 09 09 7d 0a 09 09 09 09 64 65 66 61 75  .....}.....defau
1bb50 6c 74 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  lt {......return
1bb60 20 5b 47 72 69 64 43 6f 6e 66 69 67 20 24 7b 74   [GridConfig ${t
1bb70 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b  ext} ${start} ${
1bb80 6c 69 6e 65 7d 20 24 7b 70 72 65 76 7d 5d 0a 09  line} ${prev}]..
1bb90 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  ...}....}...}...
1bba0 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 73 77 69  default {....swi
1bbb0 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a  tch -- ${sub} {.
1bbc0 09 09 09 09 62 62 6f 78 20 7b 0a 09 09 09 09 09  ....bbox {......
1bbd0 73 77 69 74 63 68 20 5b 65 78 70 72 20 24 7b 70  switch [expr ${p
1bbe0 6f 73 7d 20 25 20 32 5d 20 7b 0a 09 09 09 09 09  os} % 2] {......
1bbf0 09 30 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .0 { return [Dis
1bc00 70 6c 61 79 48 69 6e 74 73 20 3f 72 6f 77 3f 5d  playHints ?row?]
1bc10 20 7d 0a 09 09 09 09 09 09 31 20 7b 20 72 65 74   }.......1 { ret
1bc20 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
1bc30 73 20 3f 63 6f 6c 75 6d 6e 3f 5d 20 7d 0a 09 09  s ?column?] }...
1bc40 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09 72  ...}.....}.....r
1bc50 6f 77 63 6f 6e 66 69 67 75 72 65 20 2d 0a 09 09  owconfigure -...
1bc60 09 09 63 6f 6c 75 6d 6e 63 6f 6e 66 69 67 75 72  ..columnconfigur
1bc70 65 20 7b 0a 09 09 09 09 09 73 77 69 74 63 68 20  e {......switch 
1bc80 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09  -- ${pos} {.....
1bc90 09 09 33 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..3 { return [Di
1bca0 73 70 6c 61 79 48 69 6e 74 73 20 3c 69 6e 64 65  splayHints <inde
1bcb0 78 3e 5d 20 7d 0a 09 09 09 09 09 09 64 65 66 61  x>] }.......defa
1bcc0 75 6c 74 20 7b 0a 09 09 09 09 09 09 09 73 77 69  ult {........swi
1bcd0 74 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b  tch -- ${prev} {
1bce0 0a 09 09 09 09 09 09 09 09 2d 6d 69 6e 73 69 7a  .........-minsiz
1bcf0 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  e { return [Disp
1bd00 6c 61 79 48 69 6e 74 73 20 3c 6d 69 6e 73 69 7a  layHints <minsiz
1bd10 65 3e 5d 20 7d 0a 09 09 09 09 09 09 09 09 2d 77  e>] }.........-w
1bd20 65 69 67 68 74 20 7b 20 72 65 74 75 72 6e 20 5b  eight { return [
1bd30 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 77 65  DisplayHints <we
1bd40 69 67 68 74 3e 5d 20 7d 0a 09 09 09 09 09 09 09  ight>] }........
1bd50 09 2d 70 61 64 20 7b 20 72 65 74 75 72 6e 20 5b  .-pad { return [
1bd60 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 70 61  DisplayHints <pa
1bd70 64 3e 5d 20 7d 0a 09 09 09 09 09 09 09 09 64 65  d>] }.........de
1bd80 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 09 09 09  fault {.........
1bd90 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
1bda0 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
1bdb0 7d 20 5c 0a 09 09 09 09 09 09 09 09 09 5b 52 65  } \..........[Re
1bdc0 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20  moveUsedOptions 
1bdd0 24 7b 6c 69 6e 65 7d 20 20 7b 0a 09 09 09 09 09  ${line}  {......
1bde0 09 09 09 09 09 2d 6d 69 6e 73 69 7a 65 20 2d 77  .....-minsize -w
1bdf0 65 69 67 68 74 20 2d 70 61 64 0a 09 09 09 09 09  eight -pad......
1be00 09 09 09 09 7d 5d 5d 0a 09 09 09 09 09 09 09 09  ....}]].........
1be10 7d 0a 09 09 09 09 09 09 09 7d 0a 09 09 09 09 09  }........}......
1be20 09 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a  .}......}.....}.
1be30 09 09 09 09 63 6f 6e 66 69 67 75 72 65 20 7b 0a  ....configure {.
1be40 09 09 09 09 09 72 65 74 75 72 6e 20 5b 47 72 69  .....return [Gri
1be50 64 43 6f 6e 66 69 67 20 24 7b 74 65 78 74 7d 20  dConfig ${text} 
1be60 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d  ${start} ${line}
1be70 20 24 7b 70 72 65 76 7d 5d 0a 09 09 09 09 7d 0a   ${prev}].....}.
1be80 09 09 09 09 66 6f 72 67 65 74 20 2d 0a 09 09 09  ....forget -....
1be90 09 72 65 6d 6f 76 65 20 7b 0a 09 09 09 09 09 72  .remove {......r
1bea0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1beb0 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1bec0 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
1bed0 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a  ${text}]].....}.
1bee0 09 09 09 09 69 6e 66 6f 20 7b 7d 0a 09 09 09 09  ....info {}.....
1bef0 6c 6f 63 61 74 69 6f 6e 20 7b 0a 09 09 09 09 09  location {......
1bf00 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d  switch -- ${pos}
1bf10 20 7b 0a 09 09 09 09 09 09 33 20 7b 20 72 65 74   {.......3 { ret
1bf20 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
1bf30 73 20 3c 78 3e 5d 20 7d 0a 09 09 09 09 09 09 34  s <x>] }.......4
1bf40 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
1bf50 61 79 48 69 6e 74 73 20 3c 79 3e 5d 20 7d 0a 09  ayHints <y>] }..
1bf60 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09  ....}.....}.....
1bf70 70 72 6f 70 61 67 61 74 65 20 7b 0a 09 09 09 09  propagate {.....
1bf80 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73  .switch -- ${pos
1bf90 7d 20 7b 0a 09 09 09 09 09 09 33 20 7b 20 72 65  } {.......3 { re
1bfa0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 42 6f  turn [CompleteBo
1bfb0 6f 6c 65 61 6e 20 24 7b 74 65 78 74 7d 5d 20 7d  olean ${text}] }
1bfc0 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09  ......}.....}...
1bfd0 09 09 73 69 7a 65 20 7b 7d 0a 09 09 09 09 73 6c  ..size {}.....sl
1bfe0 61 76 65 73 20 7b 0a 09 09 09 09 09 73 77 69 74  aves {......swit
1bff0 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a  ch -- ${prev} {.
1c000 09 09 09 09 09 09 2d 72 6f 77 20 7b 20 72 65 74  ......-row { ret
1c010 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
1c020 73 20 3c 72 6f 77 3e 5d 20 7d 0a 09 09 09 09 09  s <row>] }......
1c030 09 2d 63 6f 6c 75 6d 6e 20 7b 20 72 65 74 75 72  .-column { retur
1c040 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
1c050 3c 63 6f 6c 75 6d 6e 3e 5d 20 7d 0a 09 09 09 09  <column>] }.....
1c060 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09  ..default {.....
1c070 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
1c080 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
1c090 78 74 7d 20 5c 0a 09 09 09 09 09 09 09 5b 52 65  xt} \........[Re
1c0a0 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20  moveUsedOptions 
1c0b0 24 7b 6c 69 6e 65 7d 20 20 7b 20 2d 72 6f 77 20  ${line}  { -row 
1c0c0 2d 63 6f 6c 75 6d 6e 20 7d 5d 5d 0a 09 09 09 09  -column }]].....
1c0d0 09 09 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d  ..}......}.....}
1c0e0 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  .....default {..
1c0f0 09 09 09 09 72 65 74 75 72 6e 20 5b 47 72 69 64  ....return [Grid
1c100 43 6f 6e 66 69 67 20 24 7b 74 65 78 74 7d 20 24  Config ${text} $
1c110 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 20  {start} ${line} 
1c120 24 7b 70 72 65 76 7d 5d 0a 09 09 09 09 7d 0a 09  ${prev}].....}..
1c130 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75  ..}...}..}..retu
1c140 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f  rn "".}..proc co
1c150 6d 70 6c 65 74 65 28 69 6d 61 67 65 29 20 7b 74  mplete(image) {t
1c160 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
1c170 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 73 65  ne pos mod} {.se
1c180 74 20 73 75 62 20 5b 4c 69 6e 64 65 78 20 24 7b  t sub [Lindex ${
1c190 6c 69 6e 65 7d 20 31 5d 0a 09 73 77 69 74 63 68  line} 1]..switch
1c1a0 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31   -- ${pos} {...1
1c1b0 20 7b 20 72 65 74 75 72 6e 20 5b 54 72 79 53 75   { return [TrySu
1c1c0 62 43 6d 64 73 20 24 7b 74 65 78 74 7d 20 69 6d  bCmds ${text} im
1c1d0 61 67 65 5d 20 7d 0a 09 09 32 20 7b 0a 09 09 09  age] }...2 {....
1c1e0 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d  switch -- ${sub}
1c1f0 20 7b 0a 09 09 09 09 63 72 65 61 74 65 20 7b 20   {.....create { 
1c200 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
1c210 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
1c220 20 5b 69 6d 61 67 65 20 74 79 70 65 73 5d 5d 20   [image types]] 
1c230 7d 0a 09 09 09 09 64 65 6c 65 74 65 20 2d 0a 09  }.....delete -..
1c240 09 09 09 68 65 69 67 68 74 20 2d 0a 09 09 09 09  ...height -.....
1c250 74 79 70 65 20 2d 0a 09 09 09 09 77 69 64 74 68  type -.....width
1c260 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c   { return [Compl
1c270 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
1c280 78 74 7d 20 5b 69 6d 61 67 65 20 6e 61 6d 65 73  xt} [image names
1c290 5d 5d 20 7d 0a 09 09 09 09 6e 61 6d 65 73 20 7b  ]] }.....names {
1c2a0 7d 0a 09 09 09 09 74 79 70 65 73 20 7b 7d 0a 09  }.....types {}..
1c2b0 09 09 7d 0a 09 09 7d 0a 09 09 33 20 7b 0a 09 09  ..}...}...3 {...
1c2c0 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62  .switch -- ${sub
1c2d0 7d 20 7b 0a 09 09 09 09 63 72 65 61 74 65 20 7b  } {.....create {
1c2e0 0a 09 09 09 09 09 73 65 74 20 74 79 70 65 20 5b  ......set type [
1c2f0 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 32  Lindex ${line} 2
1c300 5d 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d  ]......switch --
1c310 20 24 7b 74 79 70 65 7d 20 7b 0a 09 09 09 09 09   ${type} {......
1c320 09 62 69 74 6d 61 70 20 7b 0a 09 09 09 09 09 09  .bitmap {.......
1c330 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
1c340 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
1c350 7d 20 7b 0a 09 09 09 09 09 09 09 09 3f 6e 61 6d  } {.........?nam
1c360 65 3f 20 2d 62 61 63 6b 67 72 6f 75 6e 64 20 2d  e? -background -
1c370 64 61 74 61 20 2d 66 69 6c 65 0a 09 09 09 09 09  data -file......
1c380 09 09 09 2d 66 6f 72 65 67 72 6f 75 6e 64 20 2d  ...-foreground -
1c390 6d 61 73 6b 64 61 74 61 20 2d 6d 61 73 6b 66 69  maskdata -maskfi
1c3a0 6c 65 0a 09 09 09 09 09 09 09 7d 5d 0a 09 09 09  le........}]....
1c3b0 09 09 09 7d 0a 09 09 09 09 09 09 70 68 6f 74 6f  ...}.......photo
1c3c0 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e   {........return
1c3d0 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
1c3e0 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09  st ${text} {....
1c3f0 09 09 09 09 09 3f 6e 61 6d 65 3f 20 2d 64 61 74  .....?name? -dat
1c400 61 20 2d 66 6f 72 6d 61 74 20 2d 66 69 6c 65 20  a -format -file 
1c410 2d 67 61 6d 6d 61 0a 09 09 09 09 09 09 09 09 2d  -gamma.........-
1c420 68 65 69 67 68 74 20 2d 70 61 6c 65 74 74 65 20  height -palette 
1c430 2d 77 69 64 74 68 0a 09 09 09 09 09 09 09 7d 5d  -width........}]
1c440 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 09 64  .......}.......d
1c450 65 66 61 75 6c 74 20 7b 7d 0a 09 09 09 09 09 7d  efault {}......}
1c460 0a 09 09 09 09 7d 0a 09 09 09 09 64 65 6c 65 74  .....}.....delet
1c470 65 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  e { return [Comp
1c480 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
1c490 65 78 74 7d 20 5b 69 6d 61 67 65 20 6e 61 6d 65  ext} [image name
1c4a0 73 5d 5d 20 7d 0a 09 09 09 09 64 65 66 61 75 6c  s]] }.....defaul
1c4b0 74 20 7b 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  t {}....}...}...
1c4c0 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 73 77 69  default {....swi
1c4d0 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a  tch -- ${sub} {.
1c4e0 09 09 09 09 63 72 65 61 74 65 20 7b 0a 09 09 09  ....create {....
1c4f0 09 09 73 65 74 20 74 79 70 65 20 5b 4c 69 6e 64  ..set type [Lind
1c500 65 78 20 24 7b 6c 69 6e 65 7d 20 32 5d 0a 09 09  ex ${line} 2]...
1c510 09 09 09 73 65 74 20 70 72 65 76 20 5b 50 72 65  ...set prev [Pre
1c520 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72  viousWord ${star
1c530 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09 09 09  t} ${line}].....
1c540 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20 70  .# puts stderr p
1c550 72 65 76 3d 24 70 72 65 76 0a 09 09 09 09 09 73  rev=$prev......s
1c560 77 69 74 63 68 20 2d 2d 20 24 7b 74 79 70 65 7d  witch -- ${type}
1c570 20 7b 0a 09 09 09 09 09 09 62 69 74 6d 61 70 20   {.......bitmap 
1c580 7b 0a 09 09 09 09 09 09 09 73 77 69 74 63 68 20  {........switch 
1c590 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09  -- ${prev} {....
1c5a0 09 09 09 09 09 2d 62 61 63 6b 67 72 6f 75 6e 64  .....-background
1c5b0 20 2d 0a 09 09 09 09 09 09 09 09 2d 66 6f 72 65   -.........-fore
1c5c0 67 72 6f 75 6e 64 20 7b 20 72 65 74 75 72 6e 20  ground { return 
1c5d0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 63  [DisplayHints <c
1c5e0 6f 6c 6f 72 3e 5d 20 7d 0a 09 09 09 09 09 09 09  olor>] }........
1c5f0 09 2d 64 61 74 61 20 2d 0a 09 09 09 09 09 09 09  .-data -........
1c600 09 2d 6d 61 73 6b 64 61 74 61 20 7b 20 72 65 74  .-maskdata { ret
1c610 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
1c620 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 09 09  s <string>] }...
1c630 09 09 09 09 09 09 2d 66 69 6c 65 20 2d 0a 09 09  ......-file -...
1c640 09 09 09 09 09 09 2d 6d 61 73 6b 66 69 6c 65 20  ......-maskfile 
1c650 7b 20 72 65 74 75 72 6e 20 22 22 20 7d 0a 09 09  { return "" }...
1c660 09 09 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a  ......default {.
1c670 09 09 09 09 09 09 09 09 09 72 65 74 75 72 6e 20  .........return 
1c680 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
1c690 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09  t ${text} \.....
1c6a0 09 09 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64  .....[RemoveUsed
1c6b0 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20  Options ${line} 
1c6c0 7b 0a 09 09 09 09 09 09 09 09 09 09 2d 62 61 63  {...........-bac
1c6d0 6b 67 72 6f 75 6e 64 20 2d 64 61 74 61 20 2d 66  kground -data -f
1c6e0 69 6c 65 0a 09 09 09 09 09 09 09 09 09 09 2d 66  ile...........-f
1c6f0 6f 72 65 67 72 6f 75 6e 64 20 2d 6d 61 73 6b 64  oreground -maskd
1c700 61 74 61 20 2d 6d 61 73 6b 66 69 6c 65 0a 09 09  ata -maskfile...
1c710 09 09 09 09 09 09 09 7d 5d 5d 0a 09 09 09 09 09  .......}]]......
1c720 09 09 09 7d 0a 09 09 09 09 09 09 09 7d 0a 09 09  ...}........}...
1c730 09 09 09 09 7d 0a 09 09 09 09 09 09 70 68 6f 74  ....}.......phot
1c740 6f 20 7b 0a 09 09 09 09 09 09 09 73 77 69 74 63  o {........switc
1c750 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09  h -- ${prev} {..
1c760 09 09 09 09 09 09 09 2d 64 61 74 61 20 7b 20 72  .......-data { r
1c770 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
1c780 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a  nts <string>] }.
1c790 09 09 09 09 09 09 09 09 2d 66 69 6c 65 20 7b 20  ........-file { 
1c7a0 72 65 74 75 72 6e 20 22 22 20 7d 0a 09 09 09 09  return "" }.....
1c7b0 09 09 09 09 2d 66 6f 72 6d 61 74 20 7b 20 72 65  ....-format { re
1c7c0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
1c7d0 74 73 20 3c 66 6f 72 6d 61 74 2d 6e 61 6d 65 3e  ts <format-name>
1c7e0 5d 20 7d 0a 09 09 09 09 09 09 09 09 2d 67 61 6d  ] }.........-gam
1c7f0 6d 61 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  ma { return [Dis
1c800 70 6c 61 79 48 69 6e 74 73 20 3c 76 61 6c 75 65  playHints <value
1c810 3e 5d 20 7d 0a 09 09 09 09 09 09 09 09 2d 68 65  >] }.........-he
1c820 69 67 68 74 20 2d 0a 09 09 09 09 09 09 09 09 2d  ight -.........-
1c830 77 69 64 74 68 20 7b 20 72 65 74 75 72 6e 20 5b  width { return [
1c840 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6e 75  DisplayHints <nu
1c850 6d 62 65 72 3e 5d 20 7d 0a 09 09 09 09 09 09 09  mber>] }........
1c860 09 2d 70 61 6c 65 74 74 65 20 7b 0a 09 09 09 09  .-palette {.....
1c870 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73  .....return [Dis
1c880 70 6c 61 79 48 69 6e 74 73 20 3c 70 61 6c 65 74  playHints <palet
1c890 74 65 2d 73 70 65 63 3e 5d 0a 09 09 09 09 09 09  te-spec>].......
1c8a0 09 09 7d 0a 09 09 09 09 09 09 09 09 64 65 66 61  ..}.........defa
1c8b0 75 6c 74 20 7b 0a 09 09 09 09 09 09 09 09 09 72  ult {..........r
1c8c0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1c8d0 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1c8e0 5c 0a 09 09 09 09 09 09 09 09 09 5b 52 65 6d 6f  \..........[Remo
1c8f0 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b  veUsedOptions ${
1c900 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 09 09 09 09  line} {.........
1c910 09 09 2d 64 61 74 61 20 2d 66 6f 72 6d 61 74 20  ..-data -format 
1c920 2d 66 69 6c 65 20 2d 67 61 6d 6d 61 0a 09 09 09  -file -gamma....
1c930 09 09 09 09 09 09 09 2d 68 65 69 67 68 74 20 2d  .......-height -
1c940 70 61 6c 65 74 74 65 20 2d 77 69 64 74 68 0a 09  palette -width..
1c950 09 09 09 09 09 09 09 09 7d 5d 5d 0a 09 09 09 09  ........}]].....
1c960 09 09 09 09 7d 0a 09 09 09 09 09 09 09 7d 0a 09  ....}........}..
1c970 09 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a 09 09  .....}......}...
1c980 09 09 7d 0a 09 09 09 09 64 65 6c 65 74 65 20 7b  ..}.....delete {
1c990 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
1c9a0 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
1c9b0 7d 20 5b 69 6d 61 67 65 20 6e 61 6d 65 73 5d 5d  } [image names]]
1c9c0 20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b   }.....default {
1c9d0 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a  }....}...}..}.}.
1c9e0 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6c  .proc complete(l
1c9f0 61 62 65 6c 29 20 7b 74 65 78 74 20 73 74 61 72  abel) {text star
1ca00 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
1ca10 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d  od} {..switch --
1ca20 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20   ${pos} {...1 { 
1ca30 72 65 74 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c  return [Eventual
1ca40 6c 79 49 6e 73 65 72 74 4c 65 61 64 69 6e 67 44  lyInsertLeadingD
1ca50 6f 74 20 24 7b 74 65 78 74 7d 20 3c 70 61 74 68  ot ${text} <path
1ca60 4e 61 6d 65 3e 5d 20 7d 0a 09 09 64 65 66 61 75  Name>] }...defau
1ca70 6c 74 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b  lt {....return [
1ca80 43 6f 6d 70 6c 65 74 65 57 69 64 67 65 74 43 6f  CompleteWidgetCo
1ca90 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 24 7b 74  nfigurations ${t
1caa0 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b  ext} ${start} ${
1cab0 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 2d 61 6e 63  line} {.....-anc
1cac0 68 6f 72 20 2d 62 61 63 6b 67 72 6f 75 6e 64 20  hor -background 
1cad0 2d 62 69 74 6d 61 70 20 2d 62 6f 72 64 65 72 77  -bitmap -borderw
1cae0 69 64 74 68 20 2d 63 75 72 73 6f 72 20 2d 66 6f  idth -cursor -fo
1caf0 6e 74 0a 09 09 09 09 2d 66 6f 72 65 67 72 6f 75  nt.....-foregrou
1cb00 6e 64 20 2d 68 69 67 68 6c 69 67 68 74 62 61 63  nd -highlightbac
1cb10 6b 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69 67  kground -highlig
1cb20 68 74 63 6f 6c 6f 72 0a 09 09 09 09 2d 68 69 67  htcolor.....-hig
1cb30 68 6c 69 67 68 74 74 68 69 63 6b 6e 65 73 73 20  hlightthickness 
1cb40 2d 69 6d 61 67 65 20 2d 6a 75 73 74 69 66 79 20  -image -justify 
1cb50 2d 70 61 64 78 20 2d 70 61 64 79 20 2d 72 65 6c  -padx -pady -rel
1cb60 69 65 66 0a 09 09 09 09 2d 74 61 6b 65 66 6f 63  ief.....-takefoc
1cb70 75 73 20 2d 74 65 78 74 20 2d 74 65 78 74 76 61  us -text -textva
1cb80 72 69 61 62 6c 65 20 2d 75 6e 64 65 72 6c 69 6e  riable -underlin
1cb90 65 20 2d 77 72 61 70 6c 65 6e 67 74 68 0a 09 09  e -wraplength...
1cba0 09 09 2d 68 65 69 67 68 74 20 2d 77 69 64 74 68  ..-height -width
1cbb0 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 7d 0a 09 72  ....}]...}..}..r
1cbc0 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63  eturn "".}..proc
1cbd0 20 63 6f 6d 70 6c 65 74 65 28 6c 69 73 74 62 6f   complete(listbo
1cbe0 78 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  x) {text start e
1cbf0 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
1cc00 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b   {..switch -- ${
1cc10 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74  pos} {...1 { ret
1cc20 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c 6c 79 49  urn [EventuallyI
1cc30 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f 74 20  nsertLeadingDot 
1cc40 24 7b 74 65 78 74 7d 20 3c 70 61 74 68 4e 61 6d  ${text} <pathNam
1cc50 65 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74 20  e>] }...default 
1cc60 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  {....return [Com
1cc70 70 6c 65 74 65 57 69 64 67 65 74 43 6f 6e 66 69  pleteWidgetConfi
1cc80 67 75 72 61 74 69 6f 6e 73 20 24 7b 74 65 78 74  gurations ${text
1cc90 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e  } ${start} ${lin
1cca0 65 7d 20 7b 0a 09 09 09 09 2d 62 61 63 6b 67 72  e} {.....-backgr
1ccb0 6f 75 6e 64 20 2d 62 6f 72 64 65 72 77 69 64 74  ound -borderwidt
1ccc0 68 20 2d 63 75 72 73 6f 72 20 2d 65 78 70 6f 72  h -cursor -expor
1ccd0 74 73 65 6c 65 63 74 69 6f 6e 20 2d 66 6f 6e 74  tselection -font
1cce0 0a 09 09 09 09 2d 66 6f 72 65 67 72 6f 75 6e 64  .....-foreground
1ccf0 20 2d 68 65 69 67 68 74 20 2d 68 69 67 68 6c 69   -height -highli
1cd00 67 68 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d 68  ghtbackground -h
1cd10 69 67 68 6c 69 67 68 74 63 6f 6c 6f 72 0a 09 09  ighlightcolor...
1cd20 09 09 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63  ..-highlightthic
1cd30 6b 6e 65 73 73 20 2d 72 65 6c 69 65 66 20 2d 73  kness -relief -s
1cd40 65 6c 65 63 74 62 61 63 6b 67 72 6f 75 6e 64 0a  electbackground.
1cd50 09 09 09 09 2d 73 65 6c 65 63 74 62 6f 72 64 65  ....-selectborde
1cd60 72 77 69 64 74 68 20 2d 73 65 6c 65 63 74 66 6f  rwidth -selectfo
1cd70 72 65 67 72 6f 75 6e 64 20 2d 73 65 74 67 72 69  reground -setgri
1cd80 64 20 2d 74 61 6b 65 66 6f 63 75 73 0a 09 09 09  d -takefocus....
1cd90 09 2d 77 69 64 74 68 20 2d 78 73 63 72 6f 6c 6c  .-width -xscroll
1cda0 63 6f 6d 6d 61 6e 64 20 2d 79 73 63 72 6f 6c 6c  command -yscroll
1cdb0 63 6f 6d 6d 61 6e 64 20 2d 68 65 69 67 68 74 20  command -height 
1cdc0 2d 73 65 6c 65 63 74 6d 6f 64 65 0a 09 09 09 09  -selectmode.....
1cdd0 2d 77 69 64 74 68 0a 09 09 09 7d 5d 0a 09 09 7d  -width....}]...}
1cde0 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
1cdf0 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
1ce00 6c 6f 77 65 72 29 20 7b 74 65 78 74 20 73 74 61  lower) {text sta
1ce10 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
1ce20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d  mod} {..switch -
1ce30 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 2d  - ${pos} {...1 -
1ce40 0a 09 09 32 20 7b 0a 09 09 09 72 65 74 75 72 6e  ...2 {....return
1ce50 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
1ce60 73 74 20 24 7b 74 65 78 74 7d 20 5b 57 69 64 67  st ${text} [Widg
1ce70 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65 78  etChildren ${tex
1ce80 74 7d 5d 5d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70  t}]]...}..}.}..p
1ce90 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6d 65 6e  roc complete(men
1cea0 75 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  u) {text start e
1ceb0 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
1cec0 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b   {..switch -- ${
1ced0 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74  pos} {...1 { ret
1cee0 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c 6c 79 49  urn [EventuallyI
1cef0 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f 74 20  nsertLeadingDot 
1cf00 24 7b 74 65 78 74 7d 20 3c 70 61 74 68 4e 61 6d  ${text} <pathNam
1cf10 65 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74 20  e>] }...default 
1cf20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  {....return [Com
1cf30 70 6c 65 74 65 57 69 64 67 65 74 43 6f 6e 66 69  pleteWidgetConfi
1cf40 67 75 72 61 74 69 6f 6e 73 20 24 7b 74 65 78 74  gurations ${text
1cf50 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e  } ${start} ${lin
1cf60 65 7d 20 7b 0a 09 09 09 09 2d 61 63 74 69 76 65  e} {.....-active
1cf70 62 61 63 6b 67 72 6f 75 6e 64 20 2d 61 63 74 69  background -acti
1cf80 76 65 62 6f 72 64 65 72 77 69 64 74 68 20 2d 61  veborderwidth -a
1cf90 63 74 69 76 65 66 6f 72 65 67 72 6f 75 6e 64 0a  ctiveforeground.
1cfa0 09 09 09 09 2d 62 61 63 6b 67 72 6f 75 6e 64 20  ....-background 
1cfb0 2d 62 6f 72 64 65 72 77 69 64 74 68 20 2d 63 75  -borderwidth -cu
1cfc0 72 73 6f 72 20 2d 64 69 73 61 62 6c 65 64 66 6f  rsor -disabledfo
1cfd0 72 65 67 72 6f 75 6e 64 0a 09 09 09 09 2d 66 6f  reground.....-fo
1cfe0 6e 74 20 2d 66 6f 72 65 67 72 6f 75 6e 64 20 2d  nt -foreground -
1cff0 72 65 6c 69 65 66 20 2d 74 61 6b 65 66 6f 63 75  relief -takefocu
1d000 73 20 2d 70 6f 73 74 63 6f 6d 6d 61 6e 64 0a 09  s -postcommand..
1d010 09 09 09 2d 73 65 6c 65 63 74 63 6f 6c 6f 72 20  ...-selectcolor 
1d020 2d 74 65 61 72 6f 66 66 20 2d 74 65 61 72 6f 66  -tearoff -tearof
1d030 66 63 6f 6d 6d 61 6e 64 20 2d 74 69 74 6c 65 20  fcommand -title 
1d040 2d 74 79 70 65 0a 09 09 09 7d 5d 0a 09 09 7d 0a  -type....}]...}.
1d050 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
1d060 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6d  .proc complete(m
1d070 65 6e 75 62 75 74 74 6f 6e 29 20 7b 74 65 78 74  enubutton) {text
1d080 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
1d090 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74  pos mod} {..swit
1d0a0 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09  ch -- ${pos} {..
1d0b0 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 45 76 65  .1 { return [Eve
1d0c0 6e 74 75 61 6c 6c 79 49 6e 73 65 72 74 4c 65 61  ntuallyInsertLea
1d0d0 64 69 6e 67 44 6f 74 20 24 7b 74 65 78 74 7d 20  dingDot ${text} 
1d0e0 3c 70 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a 09 09  <pathName>] }...
1d0f0 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 72 65 74  default {....ret
1d100 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 57 69 64  urn [CompleteWid
1d110 67 65 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  getConfiguration
1d120 73 20 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72  s ${text} ${star
1d130 74 7d 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09  t} ${line} {....
1d140 09 2d 61 63 74 69 76 65 62 61 63 6b 67 72 6f 75  .-activebackgrou
1d150 6e 64 20 2d 61 63 74 69 76 65 66 6f 72 65 67 72  nd -activeforegr
1d160 6f 75 6e 64 20 2d 61 6e 63 68 6f 72 20 2d 62 61  ound -anchor -ba
1d170 63 6b 67 72 6f 75 6e 64 0a 09 09 09 09 2d 62 69  ckground.....-bi
1d180 74 6d 61 70 20 2d 62 6f 72 64 65 72 77 69 64 74  tmap -borderwidt
1d190 68 20 2d 63 75 72 73 6f 72 20 2d 64 69 73 61 62  h -cursor -disab
1d1a0 6c 65 64 66 6f 72 65 67 72 6f 75 6e 64 20 2d 66  ledforeground -f
1d1b0 6f 6e 74 0a 09 09 09 09 2d 66 6f 72 65 67 72 6f  ont.....-foregro
1d1c0 75 6e 64 20 2d 68 69 67 68 6c 69 67 68 74 62 61  und -highlightba
1d1d0 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69  ckground -highli
1d1e0 67 68 74 63 6f 6c 6f 72 0a 09 09 09 09 2d 68 69  ghtcolor.....-hi
1d1f0 67 68 6c 69 67 68 74 74 68 69 63 6b 6e 65 73 73  ghlightthickness
1d200 20 2d 69 6d 61 67 65 20 2d 6a 75 73 74 69 66 79   -image -justify
1d210 20 2d 70 61 64 78 20 2d 70 61 64 79 20 2d 72 65   -padx -pady -re
1d220 6c 69 65 66 0a 09 09 09 09 2d 74 61 6b 65 66 6f  lief.....-takefo
1d230 63 75 73 20 2d 74 65 78 74 20 2d 74 65 78 74 76  cus -text -textv
1d240 61 72 69 61 62 6c 65 20 2d 75 6e 64 65 72 6c 69  ariable -underli
1d250 6e 65 20 2d 77 72 61 70 6c 65 6e 67 74 68 0a 09  ne -wraplength..
1d260 09 09 09 2d 64 69 72 65 63 74 69 6f 6e 20 2d 68  ...-direction -h
1d270 65 69 67 68 74 20 2d 69 6e 64 69 63 61 74 6f 72  eight -indicator
1d280 6f 6e 20 2d 6d 65 6e 75 20 2d 73 74 61 74 65 20  on -menu -state 
1d290 2d 77 69 64 74 68 0a 09 09 09 7d 5d 0a 09 09 7d  -width....}]...}
1d2a0 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
1d2b0 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
1d2c0 6d 65 73 73 61 67 65 29 20 7b 74 65 78 74 20 73  message) {text s
1d2d0 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
1d2e0 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
1d2f0 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31   -- ${pos} {...1
1d300 20 7b 20 72 65 74 75 72 6e 20 5b 45 76 65 6e 74   { return [Event
1d310 75 61 6c 6c 79 49 6e 73 65 72 74 4c 65 61 64 69  uallyInsertLeadi
1d320 6e 67 44 6f 74 20 24 7b 74 65 78 74 7d 20 3c 70  ngDot ${text} <p
1d330 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a 09 09 64 65  athName>] }...de
1d340 66 61 75 6c 74 20 7b 0a 09 09 09 72 65 74 75 72  fault {....retur
1d350 6e 20 5b 43 6f 6d 70 6c 65 74 65 57 69 64 67 65  n [CompleteWidge
1d360 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20  tConfigurations 
1d370 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d  ${text} ${start}
1d380 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 2d   ${line} {.....-
1d390 61 6e 63 68 6f 72 20 2d 62 61 63 6b 67 72 6f 75  anchor -backgrou
1d3a0 6e 64 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20  nd -borderwidth 
1d3b0 2d 63 75 72 73 6f 72 20 2d 66 6f 6e 74 20 2d 66  -cursor -font -f
1d3c0 6f 72 65 67 72 6f 75 6e 64 0a 09 09 09 09 2d 68  oreground.....-h
1d3d0 69 67 68 6c 69 67 68 74 62 61 63 6b 67 72 6f 75  ighlightbackgrou
1d3e0 6e 64 20 2d 68 69 67 68 6c 69 67 68 74 63 6f 6c  nd -highlightcol
1d3f0 6f 72 20 2d 68 69 67 68 6c 69 67 68 74 74 68 69  or -highlightthi
1d400 63 6b 6e 65 73 73 0a 09 09 09 09 2d 70 61 64 78  ckness.....-padx
1d410 20 2d 70 61 64 79 20 2d 72 65 6c 69 65 66 20 2d   -pady -relief -
1d420 74 61 6b 65 66 6f 63 75 73 20 2d 74 65 78 74 20  takefocus -text 
1d430 2d 74 65 78 74 76 61 72 69 61 62 6c 65 20 2d 77  -textvariable -w
1d440 69 64 74 68 20 0a 09 09 09 09 2d 61 73 70 65 63  idth .....-aspec
1d450 74 20 2d 6a 75 73 74 69 66 79 20 2d 77 69 64 74  t -justify -widt
1d460 68 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 7d 0a 09  h....}]...}..}..
1d470 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f  return "".}..pro
1d480 63 20 4f 70 74 69 6f 6e 50 72 69 6f 72 69 74 79  c OptionPriority
1d490 20 74 65 78 74 20 7b 0a 09 72 65 74 75 72 6e 20   text {..return 
1d4a0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
1d4b0 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 77 69  t ${text} {...wi
1d4c0 64 67 65 74 44 65 66 61 75 6c 74 20 73 74 61 72  dgetDefault star
1d4d0 74 75 70 46 69 6c 65 20 75 73 65 72 44 65 66 61  tupFile userDefa
1d4e0 75 6c 74 20 69 6e 74 65 72 61 63 74 69 76 65 0a  ult interactive.
1d4f0 09 7d 5d 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70  .}].}..proc comp
1d500 6c 65 74 65 28 6f 70 74 69 6f 6e 29 20 7b 74 65  lete(option) {te
1d510 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
1d520 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65  e pos mod} {..se
1d530 74 20 73 75 62 20 5b 4c 69 6e 64 65 78 20 24 7b  t sub [Lindex ${
1d540 6c 69 6e 65 7d 20 31 5d 0a 09 73 77 69 74 63 68  line} 1]..switch
1d550 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31   -- ${pos} {...1
1d560 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f   {....return [Co
1d570 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
1d580 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 61 64 64  {text} {.....add
1d590 20 63 6c 65 61 72 20 67 65 74 20 72 65 61 64 66   clear get readf
1d5a0 69 6c 65 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 09  ile....}]...}...
1d5b0 32 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d  2 {....switch --
1d5c0 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 61 64   ${sub} {.....ad
1d5d0 64 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  d { return [Disp
1d5e0 6c 61 79 48 69 6e 74 73 20 3c 70 61 74 74 65 72  layHints <patter
1d5f0 6e 3e 5d 20 7d 0a 09 09 09 09 67 65 74 20 7b 0a  n>] }.....get {.
1d600 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
1d610 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
1d620 74 65 78 74 7d 20 5b 57 69 64 67 65 74 43 68 69  text} [WidgetChi
1d630 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a  ldren ${text}]].
1d640 09 09 09 09 7d 0a 09 09 09 09 72 65 61 64 66 69  ....}.....readfi
1d650 6c 65 20 7b 20 72 65 74 75 72 6e 20 22 22 20 7d  le { return "" }
1d660 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 33 20 7b 0a  ....}...}...3 {.
1d670 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73  ...switch -- ${s
1d680 75 62 7d 20 7b 0a 09 09 09 09 61 64 64 20 7b 20  ub} {.....add { 
1d690 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
1d6a0 69 6e 74 73 20 3c 76 61 6c 75 65 3e 5d 20 7d 0a  ints <value>] }.
1d6b0 09 09 09 09 67 65 74 20 7b 20 72 65 74 75 72 6e  ....get { return
1d6c0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
1d6d0 6e 61 6d 65 3e 5d 20 7d 0a 09 09 09 09 72 65 61  name>] }.....rea
1d6e0 64 66 69 6c 65 20 7b 20 72 65 74 75 72 6e 20 5b  dfile { return [
1d6f0 4f 70 74 69 6f 6e 50 72 69 6f 72 69 74 79 20 24  OptionPriority $
1d700 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09 7d 0a 09  {text}] }....}..
1d710 09 7d 0a 09 09 34 20 7b 0a 09 09 09 73 77 69 74  .}...4 {....swit
1d720 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09  ch -- ${sub} {..
1d730 09 09 09 61 64 64 20 7b 20 72 65 74 75 72 6e 20  ...add { return 
1d740 5b 4f 70 74 69 6f 6e 50 72 69 6f 72 69 74 79 20  [OptionPriority 
1d750 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09 09 67  ${text}] }.....g
1d760 65 74 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  et {......return
1d770 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
1d780 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09  st ${text} \....
1d790 09 09 5b 43 6c 61 73 73 54 61 62 6c 65 20 5b 4c  ..[ClassTable [L
1d7a0 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 32 5d  index ${line} 2]
1d7b0 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 72 65 61  ]].....}.....rea
1d7c0 64 66 69 6c 65 20 7b 7d 0a 09 09 09 7d 0a 09 09  dfile {}....}...
1d7d0 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 50 61 63  }..}.}..proc Pac
1d7e0 6b 43 6f 6e 66 69 67 20 7b 74 65 78 74 20 6c 69  kConfig {text li
1d7f0 6e 65 20 70 72 65 76 7d 20 7b 0a 09 73 65 74 20  ne prev} {..set 
1d800 6f 70 74 73 20 7b 0a 09 09 2d 61 66 74 65 72 20  opts {...-after 
1d810 2d 61 6e 63 68 6f 72 20 2d 62 65 66 6f 72 65 20  -anchor -before 
1d820 2d 65 78 70 61 6e 64 20 2d 66 69 6c 6c 0a 09 09  -expand -fill...
1d830 2d 69 6e 20 2d 69 70 61 64 78 20 2d 69 70 61 64  -in -ipadx -ipad
1d840 79 20 2d 70 61 64 78 20 2d 70 61 64 79 20 2d 73  y -padx -pady -s
1d850 69 64 65 0a 09 7d 0a 09 69 66 20 7b 2d 31 20 3d  ide..}..if {-1 =
1d860 3d 20 5b 73 74 72 69 6e 67 20 66 69 72 73 74 20  = [string first 
1d870 22 2d 22 20 24 7b 6c 69 6e 65 7d 5d 7d 20 7b 0a  "-" ${line}]} {.
1d880 09 09 73 65 74 20 73 6c 61 76 65 20 5b 57 69 64  ..set slave [Wid
1d890 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65  getChildren ${te
1d8a0 78 74 7d 5d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09  xt}]..} else {..
1d8b0 09 73 65 74 20 73 6c 61 76 65 20 22 22 0a 09 7d  .set slave ""..}
1d8c0 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72  ..switch -- ${pr
1d8d0 65 76 7d 20 7b 0a 09 09 2d 61 66 74 65 72 20 2d  ev} {...-after -
1d8e0 0a 09 09 2d 62 65 66 6f 72 65 20 20 7b 20 72 65  ...-before  { re
1d8f0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
1d900 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b  omList ${text} [
1d910 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
1d920 7b 74 65 78 74 7d 5d 5d 20 7d 0a 09 09 2d 61 6e  {text}]] }...-an
1d930 63 68 6f 72 20 7b 20 72 65 74 75 72 6e 20 5b 43  chor { return [C
1d940 6f 6d 70 6c 65 74 65 41 6e 63 68 6f 72 20 24 7b  ompleteAnchor ${
1d950 74 65 78 74 7d 5d 20 7d 0a 09 09 2d 65 78 70 61  text}] }...-expa
1d960 6e 64 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d  nd { return [Com
1d970 70 6c 65 74 65 42 6f 6f 6c 65 61 6e 20 24 7b 74  pleteBoolean ${t
1d980 65 78 74 7d 5d 20 7d 0a 09 09 2d 66 69 6c 6c 20  ext}] }...-fill 
1d990 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
1d9a0 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
1d9b0 74 7d 20 7b 20 6e 6f 6e 65 20 78 20 79 20 62 6f  t} { none x y bo
1d9c0 74 68 20 7d 5d 20 7d 0a 0a 09 09 2d 69 70 61 64  th }] }....-ipad
1d9d0 78 20 2d 0a 09 09 2d 69 70 61 64 79 20 2d 0a 09  x -...-ipady -..
1d9e0 09 2d 70 61 64 78 20 2d 0a 09 09 2d 70 61 64 79  .-padx -...-pady
1d9f0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
1da00 61 79 48 69 6e 74 73 20 3c 61 6d 6f 75 6e 74 3e  ayHints <amount>
1da10 5d 20 7d 0a 0a 09 09 2d 69 6e 20 7b 20 72 65 74  ] }....-in { ret
1da20 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
1da30 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 57  mList ${text} [W
1da40 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b  idgetChildren ${
1da50 74 65 78 74 7d 5d 5d 20 7d 0a 09 09 2d 73 69 64  text}]] }...-sid
1da60 65 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  e { return [Comp
1da70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
1da80 65 78 74 7d 20 7b 20 6c 65 66 74 20 72 69 67 68  ext} { left righ
1da90 74 20 74 6f 70 20 62 6f 74 74 6f 6d 20 7d 5d 20  t top bottom }] 
1daa0 7d 0a 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  }....default {..
1dab0 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
1dac0 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
1dad0 74 7d 20 5c 0a 09 09 09 5b 52 65 6d 6f 76 65 55  t} \....[RemoveU
1dae0 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e  sedOptions ${lin
1daf0 65 7d 20 5b 63 6f 6e 63 61 74 20 24 7b 6f 70 74  e} [concat ${opt
1db00 73 7d 20 24 7b 73 6c 61 76 65 7d 5d 5d 5d 0a 09  s} ${slave}]]]..
1db10 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 63 6f  .}..}.}..proc co
1db20 6d 70 6c 65 74 65 28 70 61 63 6b 29 20 7b 74 65  mplete(pack) {te
1db30 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
1db40 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65  e pos mod} {..se
1db50 74 20 73 75 62 20 5b 4c 69 6e 64 65 78 20 24 7b  t sub [Lindex ${
1db60 6c 69 6e 65 7d 20 31 5d 0a 09 73 65 74 20 70 72  line} 1]..set pr
1db70 65 76 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64  ev [PreviousWord
1db80 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65   ${start} ${line
1db90 7d 5d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  }]..switch -- ${
1dba0 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a 09 09 09  pos} {...1 {....
1dbb0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
1dbc0 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
1dbd0 20 5c 0a 09 09 09 5b 63 6f 6e 63 61 74 20 5b 57   \....[concat [W
1dbe0 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b  idgetChildren ${
1dbf0 74 65 78 74 7d 5d 20 7b 0a 09 09 09 09 63 6f 6e  text}] {.....con
1dc00 66 69 67 75 72 65 20 66 6f 72 67 65 74 20 69 6e  figure forget in
1dc10 66 6f 20 70 72 6f 70 61 67 61 74 65 20 73 6c 61  fo propagate sla
1dc20 76 65 73 0a 09 09 09 7d 5d 5d 0a 09 09 7d 0a 09  ves....}]]...}..
1dc30 09 32 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  .2 {....switch -
1dc40 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 63  - ${sub} {.....c
1dc50 6f 6e 66 69 67 75 72 65 20 2d 0a 09 09 09 09 66  onfigure -.....f
1dc60 6f 72 67 65 74 20 2d 0a 09 09 09 09 69 6e 66 6f  orget -.....info
1dc70 20 2d 0a 09 09 09 09 70 72 6f 70 61 67 61 74 65   -.....propagate
1dc80 20 2d 0a 09 09 09 09 73 6c 61 76 65 73 20 7b 0a   -.....slaves {.
1dc90 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
1dca0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
1dcb0 74 65 78 74 7d 20 5b 57 69 64 67 65 74 43 68 69  text} [WidgetChi
1dcc0 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a  ldren ${text}]].
1dcd0 09 09 09 09 7d 0a 09 09 09 09 64 65 66 61 75 6c  ....}.....defaul
1dce0 74 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  t {......return 
1dcf0 5b 50 61 63 6b 43 6f 6e 66 69 67 20 24 7b 74 65  [PackConfig ${te
1dd00 78 74 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 72  xt} ${line} ${pr
1dd10 65 76 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a  ev}].....}....}.
1dd20 09 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a  ..}...default {.
1dd30 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73  ...switch -- ${s
1dd40 75 62 7d 20 7b 0a 09 09 09 09 63 6f 6e 66 69 67  ub} {.....config
1dd50 75 72 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72  ure {......retur
1dd60 6e 20 5b 50 61 63 6b 43 6f 6e 66 69 67 20 24 7b  n [PackConfig ${
1dd70 74 65 78 74 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b  text} ${line} ${
1dd80 70 72 65 76 7d 5d 0a 09 09 09 09 7d 0a 09 09 09  prev}].....}....
1dd90 09 66 6f 72 67 65 74 20 7b 0a 09 09 09 09 09 72  .forget {......r
1dda0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1ddb0 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1ddc0 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
1ddd0 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a  ${text}]].....}.
1dde0 09 09 09 09 69 6e 66 6f 20 7b 7d 0a 09 09 09 09  ....info {}.....
1ddf0 70 72 6f 70 61 67 61 74 65 20 7b 0a 09 09 09 09  propagate {.....
1de00 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73  .switch -- ${pos
1de10 7d 20 7b 0a 09 09 09 09 09 09 33 20 7b 20 72 65  } {.......3 { re
1de20 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 42 6f  turn [CompleteBo
1de30 6f 6c 65 61 6e 20 24 7b 74 65 78 74 7d 5d 20 7d  olean ${text}] }
1de40 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09  ......}.....}...
1de50 09 09 73 6c 61 76 65 73 20 7b 7d 0a 09 09 09 09  ..slaves {}.....
1de60 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 72  default {......r
1de70 65 74 75 72 6e 20 5b 50 61 63 6b 43 6f 6e 66 69  eturn [PackConfi
1de80 67 20 24 7b 74 65 78 74 7d 20 24 7b 6c 69 6e 65  g ${text} ${line
1de90 7d 20 24 7b 70 72 65 76 7d 5d 0a 09 09 09 09 7d  } ${prev}].....}
1dea0 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65  ....}...}..}..re
1deb0 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20  turn "".}..proc 
1dec0 50 6c 61 63 65 43 6f 6e 66 69 67 20 7b 74 65 78  PlaceConfig {tex
1ded0 74 20 6c 69 6e 65 20 70 72 65 76 7d 20 7b 0a 09  t line prev} {..
1dee0 73 65 74 20 6f 70 74 73 20 7b 0a 09 09 2d 69 6e  set opts {...-in
1def0 20 2d 78 20 2d 72 65 6c 78 20 2d 79 20 2d 72 65   -x -relx -y -re
1df00 6c 79 20 2d 61 6e 63 68 6f 72 20 2d 77 69 64 74  ly -anchor -widt
1df10 68 0a 09 09 2d 72 65 6c 77 69 64 74 68 20 2d 68  h...-relwidth -h
1df20 65 69 67 68 74 20 2d 72 65 6c 68 65 69 67 68 74  eight -relheight
1df30 20 2d 62 6f 72 64 65 72 6d 6f 64 65 0a 09 7d 0a   -bordermode..}.
1df40 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72 65  .switch -- ${pre
1df50 76 7d 20 7b 0a 0a 09 09 2d 69 6e 20 7b 20 72 65  v} {....-in { re
1df60 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
1df70 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b  omList ${text} [
1df80 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
1df90 7b 74 65 78 74 7d 5d 5d 20 7d 0a 0a 09 09 2d 78  {text}]] }....-x
1dfa0 20 2d 0a 09 09 2d 72 65 6c 78 20 2d 0a 09 09 2d   -...-relx -...-
1dfb0 79 20 2d 0a 09 09 2d 72 65 6c 79 20 7b 20 72 65  y -...-rely { re
1dfc0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
1dfd0 74 73 20 3c 6c 6f 63 61 74 69 6f 6e 3e 5d 20 7d  ts <location>] }
1dfe0 0a 0a 09 09 2d 61 6e 63 68 6f 72 20 7b 20 72 65  ....-anchor { re
1dff0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 41 6e  turn [CompleteAn
1e000 63 68 6f 72 20 24 7b 74 65 78 74 7d 5d 20 7d 0a  chor ${text}] }.
1e010 0a 09 09 2d 77 69 64 74 68 20 2d 0a 09 09 2d 72  ...-width -...-r
1e020 65 6c 77 69 64 74 68 20 2d 0a 09 09 2d 68 65 69  elwidth -...-hei
1e030 67 68 74 20 2d 0a 09 09 2d 72 65 6c 68 65 69 67  ght -...-relheig
1e040 68 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  ht { return [Dis
1e050 70 6c 61 79 48 69 6e 74 73 20 3c 73 69 7a 65 3e  playHints <size>
1e060 5d 20 7d 0a 0a 09 09 2d 62 6f 72 64 65 72 6d 6f  ] }....-bordermo
1e070 64 65 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b  de {....return [
1e080 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
1e090 20 24 7b 74 65 78 74 7d 20 7b 69 67 6e 6f 72 65   ${text} {ignore
1e0a0 20 69 6e 73 69 64 65 20 6f 75 74 73 69 64 65 7d   inside outside}
1e0b0 5d 0a 09 09 7d 0a 0a 09 09 64 65 66 61 75 6c 74  ]...}....default
1e0c0 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f   {....return [Co
1e0d0 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
1e0e0 7b 74 65 78 74 7d 20 5c 0a 09 09 09 5b 52 65 6d  {text} \....[Rem
1e0f0 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24  oveUsedOptions $
1e100 7b 6c 69 6e 65 7d 20 24 7b 6f 70 74 73 7d 5d 5d  {line} ${opts}]]
1e110 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20  ...}..}.}..proc 
1e120 63 6f 6d 70 6c 65 74 65 28 70 6c 61 63 65 29 20  complete(place) 
1e130 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
1e140 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
1e150 09 73 65 74 20 73 75 62 20 5b 4c 69 6e 64 65 78  .set sub [Lindex
1e160 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73 65 74   ${line} 1]..set
1e170 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73 57   prev [PreviousW
1e180 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c  ord ${start} ${l
1e190 69 6e 65 7d 5d 0a 09 73 77 69 74 63 68 20 2d 2d  ine}]..switch --
1e1a0 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a   ${pos} {...1 {.
1e1b0 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
1e1c0 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
1e1d0 78 74 7d 20 5c 0a 09 09 09 5b 63 6f 6e 63 61 74  xt} \....[concat
1e1e0 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e   [WidgetChildren
1e1f0 20 24 7b 74 65 78 74 7d 5d 20 7b 0a 09 09 09 09   ${text}] {.....
1e200 63 6f 6e 66 69 67 75 72 65 20 66 6f 72 67 65 74  configure forget
1e210 20 69 6e 66 6f 20 73 6c 61 76 65 73 0a 09 09 09   info slaves....
1e220 7d 5d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09  }]]...}...2 {...
1e230 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62  .switch -- ${sub
1e240 7d 20 7b 0a 09 09 09 09 63 6f 6e 66 69 67 75 72  } {.....configur
1e250 65 20 2d 0a 09 09 09 09 66 6f 72 67 65 74 20 2d  e -.....forget -
1e260 0a 09 09 09 09 69 6e 66 6f 20 2d 0a 09 09 09 09  .....info -.....
1e270 73 6c 61 76 65 73 20 7b 0a 09 09 09 09 09 72 65  slaves {......re
1e280 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
1e290 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b  omList ${text} [
1e2a0 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
1e2b0 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a 09  {text}]].....}..
1e2c0 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09  ...default {....
1e2d0 09 09 72 65 74 75 72 6e 20 5b 50 6c 61 63 65 43  ..return [PlaceC
1e2e0 6f 6e 66 69 67 20 24 7b 74 65 78 74 7d 20 24 7b  onfig ${text} ${
1e2f0 6c 69 6e 65 7d 20 24 7b 70 72 65 76 7d 5d 0a 09  line} ${prev}]..
1e300 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  ...}....}...}...
1e310 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 73 77 69  default {....swi
1e320 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a  tch -- ${sub} {.
1e330 09 09 09 09 63 6f 6e 66 69 67 75 72 65 20 7b 0a  ....configure {.
1e340 09 09 09 09 09 72 65 74 75 72 6e 20 5b 50 6c 61  .....return [Pla
1e350 63 65 43 6f 6e 66 69 67 20 24 7b 74 65 78 74 7d  ceConfig ${text}
1e360 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 72 65 76 7d   ${line} ${prev}
1e370 5d 0a 09 09 09 09 7d 0a 09 09 09 09 66 6f 72 67  ].....}.....forg
1e380 65 74 20 7b 7d 0a 09 09 09 09 69 6e 66 6f 20 7b  et {}.....info {
1e390 7d 0a 09 09 09 09 73 6c 61 76 65 73 20 7b 7d 0a  }.....slaves {}.
1e3a0 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09  ....default {...
1e3b0 09 09 09 72 65 74 75 72 6e 20 5b 50 6c 61 63 65  ...return [Place
1e3c0 43 6f 6e 66 69 67 20 24 7b 74 65 78 74 7d 20 24  Config ${text} $
1e3d0 7b 6c 69 6e 65 7d 20 24 7b 70 72 65 76 7d 5d 0a  {line} ${prev}].
1e3e0 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  ....}....}...}..
1e3f0 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
1e400 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 72 61  proc complete(ra
1e410 64 69 6f 62 75 74 74 6f 6e 29 20 7b 74 65 78 74  diobutton) {text
1e420 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
1e430 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74  pos mod} {..swit
1e440 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09  ch -- ${pos} {..
1e450 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 45 76 65  .1 { return [Eve
1e460 6e 74 75 61 6c 6c 79 49 6e 73 65 72 74 4c 65 61  ntuallyInsertLea
1e470 64 69 6e 67 44 6f 74 20 24 7b 74 65 78 74 7d 20  dingDot ${text} 
1e480 3c 70 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a 09 09  <pathName>] }...
1e490 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 72 65 74  default {....ret
1e4a0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 57 69 64  urn [CompleteWid
1e4b0 67 65 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  getConfiguration
1e4c0 73 20 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72  s ${text} ${star
1e4d0 74 7d 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09  t} ${line} {....
1e4e0 09 2d 61 63 74 69 76 65 62 61 63 6b 67 72 6f 75  .-activebackgrou
1e4f0 6e 64 20 2d 61 63 74 69 76 65 66 6f 72 65 67 72  nd -activeforegr
1e500 6f 75 6e 64 20 2d 61 6e 63 68 6f 72 20 2d 62 61  ound -anchor -ba
1e510 63 6b 67 72 6f 75 6e 64 0a 09 09 09 09 2d 62 69  ckground.....-bi
1e520 74 6d 61 70 20 2d 62 6f 72 64 65 72 77 69 64 74  tmap -borderwidt
1e530 68 20 2d 63 75 72 73 6f 72 20 2d 64 69 73 61 62  h -cursor -disab
1e540 6c 65 64 66 6f 72 65 67 72 6f 75 6e 64 20 2d 66  ledforeground -f
1e550 6f 6e 74 0a 09 09 09 09 2d 66 6f 72 65 67 72 6f  ont.....-foregro
1e560 75 6e 64 20 2d 68 69 67 68 6c 69 67 68 74 62 61  und -highlightba
1e570 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69  ckground -highli
1e580 67 68 74 63 6f 6c 6f 72 0a 09 09 09 09 2d 68 69  ghtcolor.....-hi
1e590 67 68 6c 69 67 68 74 74 68 69 63 6b 6e 65 73 73  ghlightthickness
1e5a0 20 2d 69 6d 61 67 65 20 2d 6a 75 73 74 69 66 79   -image -justify
1e5b0 20 2d 70 61 64 78 20 2d 70 61 64 79 20 2d 72 65   -padx -pady -re
1e5c0 6c 69 65 66 0a 09 09 09 09 2d 74 61 6b 65 66 6f  lief.....-takefo
1e5d0 63 75 73 20 2d 74 65 78 74 20 2d 74 65 78 74 76  cus -text -textv
1e5e0 61 72 69 61 62 6c 65 20 2d 75 6e 64 65 72 6c 69  ariable -underli
1e5f0 6e 65 20 2d 77 72 61 70 6c 65 6e 67 74 68 20 2d  ne -wraplength -
1e600 63 6f 6d 6d 61 6e 64 0a 09 09 09 09 2d 68 65 69  command.....-hei
1e610 67 68 74 20 2d 69 6e 64 69 63 61 74 6f 72 6f 6e  ght -indicatoron
1e620 20 2d 73 65 6c 65 63 74 63 6f 6c 6f 72 20 2d 73   -selectcolor -s
1e630 65 6c 65 63 74 69 6d 61 67 65 20 2d 73 74 61 74  electimage -stat
1e640 65 20 2d 76 61 6c 75 65 0a 09 09 09 09 2d 76 61  e -value.....-va
1e650 72 69 61 62 6c 65 20 2d 77 69 64 74 68 0a 09 09  riable -width...
1e660 09 7d 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75  .}]...}..}..retu
1e670 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f  rn "".}..proc co
1e680 6d 70 6c 65 74 65 28 72 61 69 73 65 29 20 7b 74  mplete(raise) {t
1e690 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
1e6a0 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 72  ne pos mod} {..r
1e6b0 65 74 75 72 6e 20 5b 63 6f 6d 70 6c 65 74 65 28  eturn [complete(
1e6c0 6c 6f 77 65 72 29 20 24 7b 74 65 78 74 7d 20 24  lower) ${text} $
1e6d0 7b 73 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20 24  {start} ${end} $
1e6e0 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 24 7b  {line} ${pos} ${
1e6f0 6d 6f 64 7d 5d 0a 7d 0a 0a 70 72 6f 63 20 63 6f  mod}].}..proc co
1e700 6d 70 6c 65 74 65 28 73 63 61 6c 65 29 20 7b 74  mplete(scale) {t
1e710 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
1e720 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
1e730 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
1e740 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b  {...1 { return [
1e750 45 76 65 6e 74 75 61 6c 6c 79 49 6e 73 65 72 74  EventuallyInsert
1e760 4c 65 61 64 69 6e 67 44 6f 74 20 24 7b 74 65 78  LeadingDot ${tex
1e770 74 7d 20 3c 70 61 74 68 4e 61 6d 65 3e 5d 20 7d  t} <pathName>] }
1e780 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09  ...default {....
1e790 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
1e7a0 57 69 64 67 65 74 43 6f 6e 66 69 67 75 72 61 74  WidgetConfigurat
1e7b0 69 6f 6e 73 20 24 7b 74 65 78 74 7d 20 24 7b 73  ions ${text} ${s
1e7c0 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 20 7b 0a  tart} ${line} {.
1e7d0 09 09 09 09 2d 61 63 74 69 76 65 62 61 63 6b 67  ....-activebackg
1e7e0 72 6f 75 6e 64 20 2d 62 61 63 6b 67 72 6f 75 6e  round -backgroun
1e7f0 64 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20 2d  d -borderwidth -
1e800 63 75 72 73 6f 72 20 2d 66 6f 6e 74 0a 09 09 09  cursor -font....
1e810 09 2d 66 6f 72 65 67 72 6f 75 6e 64 20 2d 68 69  .-foreground -hi
1e820 67 68 6c 69 67 68 74 62 61 63 6b 67 72 6f 75 6e  ghlightbackgroun
1e830 64 20 2d 68 69 67 68 6c 69 67 68 74 63 6f 6c 6f  d -highlightcolo
1e840 72 0a 09 09 09 09 2d 68 69 67 68 6c 69 67 68 74  r.....-highlight
1e850 74 68 69 63 6b 6e 65 73 73 20 2d 6f 72 69 65 6e  thickness -orien
1e860 74 20 2d 72 65 6c 69 65 66 20 2d 72 65 70 65 61  t -relief -repea
1e870 74 64 65 6c 61 79 0a 09 09 09 09 2d 72 65 70 65  tdelay.....-repe
1e880 61 74 69 6e 74 65 72 76 61 6c 20 2d 74 61 6b 65  atinterval -take
1e890 66 6f 63 75 73 20 2d 74 72 6f 75 67 68 63 6f 6c  focus -troughcol
1e8a0 6f 72 20 2d 62 69 67 69 6e 63 72 65 6d 65 6e 74  or -bigincrement
1e8b0 0a 09 09 09 09 2d 63 6f 6d 6d 61 6e 64 20 2d 64  .....-command -d
1e8c0 69 67 69 74 73 20 2d 66 72 6f 6d 20 2d 6c 61 62  igits -from -lab
1e8d0 65 6c 20 2d 6c 65 6e 67 74 68 20 2d 72 65 73 6f  el -length -reso
1e8e0 6c 75 74 69 6f 6e 0a 09 09 09 09 2d 73 68 6f 77  lution.....-show
1e8f0 76 61 6c 75 65 20 2d 73 6c 69 64 65 72 6c 65 6e  value -sliderlen
1e900 67 74 68 20 2d 73 6c 69 64 65 72 72 65 6c 69 65  gth -sliderrelie
1e910 66 20 2d 73 74 61 74 65 20 2d 74 69 63 6b 69 6e  f -state -tickin
1e920 74 65 72 76 61 6c 0a 09 09 09 09 2d 74 6f 20 2d  terval.....-to -
1e930 76 61 72 69 61 62 6c 65 20 2d 77 69 64 74 68 0a  variable -width.
1e940 09 09 09 7d 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65  ...}]...}..}..re
1e950 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20  turn "".}..proc 
1e960 63 6f 6d 70 6c 65 74 65 28 73 63 72 6f 6c 6c 62  complete(scrollb
1e970 61 72 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  ar) {text start 
1e980 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
1e990 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  } {..switch -- $
1e9a0 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65  {pos} {...1 { re
1e9b0 74 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c 6c 79  turn [Eventually
1e9c0 49 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f 74  InsertLeadingDot
1e9d0 20 24 7b 74 65 78 74 7d 20 3c 70 61 74 68 4e 61   ${text} <pathNa
1e9e0 6d 65 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74  me>] }...default
1e9f0 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f   {....return [Co
1ea00 6d 70 6c 65 74 65 57 69 64 67 65 74 43 6f 6e 66  mpleteWidgetConf
1ea10 69 67 75 72 61 74 69 6f 6e 73 20 24 7b 74 65 78  igurations ${tex
1ea20 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69  t} ${start} ${li
1ea30 6e 65 7d 20 7b 0a 09 09 09 09 2d 61 63 74 69 76  ne} {.....-activ
1ea40 65 62 61 63 6b 67 72 6f 75 6e 64 20 2d 62 61 63  ebackground -bac
1ea50 6b 67 72 6f 75 6e 64 20 2d 62 6f 72 64 65 72 77  kground -borderw
1ea60 69 64 74 68 20 2d 63 75 72 73 6f 72 0a 09 09 09  idth -cursor....
1ea70 09 2d 68 69 67 68 6c 69 67 68 74 62 61 63 6b 67  .-highlightbackg
1ea80 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69 67 68 74  round -highlight
1ea90 63 6f 6c 6f 72 20 2d 68 69 67 68 6c 69 67 68 74  color -highlight
1eaa0 74 68 69 63 6b 6e 65 73 73 0a 09 09 09 09 2d 6a  thickness.....-j
1eab0 75 6d 70 20 2d 6f 72 69 65 6e 74 20 2d 72 65 6c  ump -orient -rel
1eac0 69 65 66 20 2d 72 65 70 65 61 74 64 65 6c 61 79  ief -repeatdelay
1ead0 20 2d 72 65 70 65 61 74 69 6e 74 65 72 76 61 6c   -repeatinterval
1eae0 0a 09 09 09 09 2d 74 61 6b 65 66 6f 63 75 73 20  .....-takefocus 
1eaf0 2d 74 72 6f 75 67 68 63 6f 6c 6f 72 20 2d 61 63  -troughcolor -ac
1eb00 74 69 76 65 72 65 6c 69 65 66 20 2d 63 6f 6d 6d  tiverelief -comm
1eb10 61 6e 64 0a 09 09 09 09 2d 65 6c 65 6d 65 6e 74  and.....-element
1eb20 62 6f 72 64 65 72 77 69 64 74 68 20 2d 77 69 64  borderwidth -wid
1eb30 74 68 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 7d 0a  th....}]...}..}.
1eb40 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
1eb50 6f 63 20 53 65 6c 65 63 74 69 6f 6e 4f 70 74 73  oc SelectionOpts
1eb60 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
1eb70 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 20 6c 73   line pos mod ls
1eb80 74 7d 20 7b 0a 09 73 65 74 20 70 72 65 76 20 5b  t} {..set prev [
1eb90 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73  PreviousWord ${s
1eba0 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09  tart} ${line}]..
1ebb0 69 66 20 7b 2d 31 20 3d 3d 20 5b 6c 73 65 61 72  if {-1 == [lsear
1ebc0 63 68 20 24 7b 6c 73 74 7d 20 24 7b 70 72 65 76  ch ${lst} ${prev
1ebd0 7d 5d 7d 20 7b 0a 09 09 73 65 74 20 70 72 65 76  }]} {...set prev
1ebe0 20 22 22 20 3b 23 20 66 6f 72 63 65 20 74 68 65   "" ;# force the
1ebf0 20 64 65 66 61 75 6c 74 20 61 72 6d 0a 09 7d 0a   default arm..}.
1ec00 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72 65  .switch -- ${pre
1ec10 76 7d 20 7b 0a 09 09 2d 64 69 73 70 6c 61 79 6f  v} {...-displayo
1ec20 66 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43  f {....return [C
1ec30 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
1ec40 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 5b 57 69  ${text} \....[Wi
1ec50 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74  dgetChildren ${t
1ec60 65 78 74 7d 5d 5d 0a 09 09 7d 0a 09 09 2d 73 65  ext}]]...}...-se
1ec70 6c 65 63 74 69 6f 6e 20 7b 0a 09 09 09 76 61 72  lection {....var
1ec80 69 61 62 6c 65 20 73 65 6c 65 63 74 69 6f 6e 2d  iable selection-
1ec90 73 65 6c 65 63 74 69 6f 6e 73 0a 09 09 09 72 65  selections....re
1eca0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
1ecb0 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24  omList ${text} $
1ecc0 7b 73 65 6c 65 63 74 69 6f 6e 2d 73 65 6c 65 63  {selection-selec
1ecd0 74 69 6f 6e 73 7d 5d 0a 09 09 7d 0a 09 09 2d 74  tions}]...}...-t
1ece0 79 70 65 20 7b 0a 09 09 09 76 61 72 69 61 62 6c  ype {....variabl
1ecf0 65 20 73 65 6c 65 63 74 69 6f 6e 2d 74 79 70 65  e selection-type
1ed00 73 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  s....return [Com
1ed10 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
1ed20 74 65 78 74 7d 20 24 7b 73 65 6c 65 63 74 69 6f  text} ${selectio
1ed30 6e 2d 74 79 70 65 73 7d 5d 0a 09 09 7d 0a 09 09  n-types}]...}...
1ed40 2d 63 6f 6d 6d 61 6e 64 20 7b 0a 09 09 09 72 65  -command {....re
1ed50 74 75 72 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d  turn [BraceOrCom
1ed60 6d 61 6e 64 20 24 7b 74 65 78 74 7d 20 5c 0a 09  mand ${text} \..
1ed70 09 09 24 7b 73 74 61 72 74 7d 20 24 7b 65 6e 64  ..${start} ${end
1ed80 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d  } ${line} ${pos}
1ed90 20 24 7b 6d 6f 64 7d 5d 0a 09 09 7d 0a 09 09 2d   ${mod}]...}...-
1eda0 66 6f 72 6d 61 74 20 7b 0a 09 09 09 76 61 72 69  format {....vari
1edb0 61 62 6c 65 20 73 65 6c 65 63 74 69 6f 6e 2d 66  able selection-f
1edc0 6f 72 6d 61 74 73 0a 09 09 09 72 65 74 75 72 6e  ormats....return
1edd0 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
1ede0 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 73 65 6c  st ${text} ${sel
1edf0 65 63 74 69 6f 6e 2d 66 6f 72 6d 61 74 73 7d 5d  ection-formats}]
1ee00 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b  ...}...default {
1ee10 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
1ee20 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
1ee30 65 78 74 7d 20 5c 0a 09 09 09 5b 52 65 6d 6f 76  ext} \....[Remov
1ee40 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c  eUsedOptions ${l
1ee50 69 6e 65 7d 20 24 7b 6c 73 74 7d 5d 5d 0a 09 09  ine} ${lst}]]...
1ee60 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d  }..}.}..proc com
1ee70 70 6c 65 74 65 28 73 65 6c 65 63 74 69 6f 6e 29  plete(selection)
1ee80 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
1ee90 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
1eea0 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
1eeb0 73 7d 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65  s} {...1 {....re
1eec0 74 75 72 6e 20 5b 54 72 79 53 75 62 43 6d 64 73  turn [TrySubCmds
1eed0 20 24 7b 74 65 78 74 7d 20 5b 4c 69 6e 64 65 78   ${text} [Lindex
1eee0 20 24 7b 6c 69 6e 65 7d 20 30 5d 5d 0a 09 09 7d   ${line} 0]]...}
1eef0 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09  ...default {....
1ef00 73 65 74 20 73 75 62 20 5b 4c 69 6e 64 65 78 20  set sub [Lindex 
1ef10 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 09 09 73 65  ${line} 1]....se
1ef20 74 20 77 69 64 67 65 74 73 20 5b 57 69 64 67 65  t widgets [Widge
1ef30 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74  tChildren ${text
1ef40 7d 5d 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20  }]....switch -- 
1ef50 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 63 6c 65  ${sub} {.....cle
1ef60 61 72 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  ar {......return
1ef70 20 5b 53 65 6c 65 63 74 69 6f 6e 4f 70 74 73 20   [SelectionOpts 
1ef80 5c 0a 09 09 09 09 09 24 7b 74 65 78 74 7d 20 24  \......${text} $
1ef90 7b 73 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20 24  {start} ${end} $
1efa0 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 24 7b  {line} ${pos} ${
1efb0 6d 6f 64 7d 20 7b 0a 09 09 09 09 09 09 2d 64 69  mod} {.......-di
1efc0 73 70 6c 61 79 6f 66 20 2d 73 65 6c 65 63 74 69  splayof -selecti
1efd0 6f 6e 0a 09 09 09 09 09 7d 5d 0a 09 09 09 09 7d  on......}].....}
1efe0 0a 09 09 09 09 67 65 74 20 7b 0a 09 09 09 09 09  .....get {......
1eff0 72 65 74 75 72 6e 20 5b 53 65 6c 65 63 74 69 6f  return [Selectio
1f000 6e 4f 70 74 73 20 5c 0a 09 09 09 09 09 24 7b 74  nOpts \......${t
1f010 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b  ext} ${start} ${
1f020 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70  end} ${line} ${p
1f030 6f 73 7d 20 24 7b 6d 6f 64 7d 20 7b 0a 09 09 09  os} ${mod} {....
1f040 09 09 09 2d 64 69 73 70 6c 61 79 6f 66 20 2d 73  ...-displayof -s
1f050 65 6c 65 63 74 69 6f 6e 20 2d 74 79 70 65 0a 09  election -type..
1f060 09 09 09 09 7d 5d 0a 09 09 09 09 7d 0a 09 09 09  ....}].....}....
1f070 09 68 61 6e 64 6c 65 20 7b 0a 09 09 09 09 09 72  .handle {......r
1f080 65 74 75 72 6e 20 5b 53 65 6c 65 63 74 69 6f 6e  eturn [Selection
1f090 4f 70 74 73 20 5c 0a 09 09 09 09 09 24 7b 74 65  Opts \......${te
1f0a0 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 65  xt} ${start} ${e
1f0b0 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f  nd} ${line} ${po
1f0c0 73 7d 20 24 7b 6d 6f 64 7d 20 5c 0a 09 09 09 09  s} ${mod} \.....
1f0d0 09 5b 63 6f 6e 63 61 74 20 7b 2d 73 65 6c 65 63  .[concat {-selec
1f0e0 74 69 6f 6e 20 2d 74 79 70 65 20 2d 66 6f 72 6d  tion -type -form
1f0f0 61 74 7d 20 24 7b 77 69 64 67 65 74 73 7d 5d 5d  at} ${widgets}]]
1f100 0a 09 09 09 09 7d 0a 09 09 09 09 6f 77 6e 20 7b  .....}.....own {
1f110 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 53 65  ......return [Se
1f120 6c 65 63 74 69 6f 6e 4f 70 74 73 20 5c 0a 09 09  lectionOpts \...
1f130 09 09 09 24 7b 74 65 78 74 7d 20 24 7b 73 74 61  ...${text} ${sta
1f140 72 74 7d 20 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e  rt} ${end} ${lin
1f150 65 7d 20 24 7b 70 6f 73 7d 20 24 7b 6d 6f 64 7d  e} ${pos} ${mod}
1f160 20 5c 0a 09 09 09 09 09 5b 63 6f 6e 63 61 74 20   \......[concat 
1f170 7b 2d 63 6f 6d 6d 61 6e 64 20 2d 73 65 6c 65 63  {-command -selec
1f180 74 69 6f 6e 7d 20 24 7b 77 69 64 67 65 74 73 7d  tion} ${widgets}
1f190 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09  ]].....}....}...
1f1a0 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d  }..}.}..proc com
1f1b0 70 6c 65 74 65 28 73 65 6e 64 29 20 7b 74 65 78  plete(send) {tex
1f1c0 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
1f1d0 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74   pos mod} {..set
1f1e0 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73 57   prev [PreviousW
1f1f0 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c  ord ${start} ${l
1f200 69 6e 65 7d 5d 0a 09 69 66 20 7b 22 2d 64 69 73  ine}]..if {"-dis
1f210 70 6c 61 79 6f 66 22 20 3d 3d 20 24 7b 70 72 65  playof" == ${pre
1f220 76 7d 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 5b  v}} {...return [
1f230 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  TryFromList ${te
1f240 78 74 7d 20 5b 57 69 64 67 65 74 43 68 69 6c 64  xt} [WidgetChild
1f250 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 7d  ren ${text}]]..}
1f260 0a 09 73 65 74 20 63 6d 64 73 20 5b 52 65 6d 6f  ..set cmds [Remo
1f270 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b  veUsedOptions ${
1f280 6c 69 6e 65 7d 20 7b 0a 09 09 2d 61 73 79 6e 63  line} {...-async
1f290 20 2d 64 69 73 70 6c 61 79 6f 66 20 2d 2d 0a 09   -displayof --..
1f2a0 7d 20 7b 2d 2d 7d 5d 0a 09 69 66 20 7b 5b 6c 6c  } {--}]..if {[ll
1f2b0 65 6e 67 74 68 20 24 7b 63 6d 64 73 7d 5d 7d 20  ength ${cmds}]} 
1f2c0 7b 0a 09 09 72 65 74 75 72 6e 20 5b 73 74 72 69  {...return [stri
1f2d0 6e 67 20 74 72 69 6d 20 5b 43 6f 6d 70 6c 65 74  ng trim [Complet
1f2e0 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
1f2f0 7d 20 5c 0a 09 09 5b 63 6f 6e 63 61 74 20 24 7b  } \...[concat ${
1f300 63 6d 64 73 7d 20 3c 61 70 70 3e 5d 5d 5d 0a 09  cmds} <app>]]]..
1f310 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66 20 7b 5b  } else {...if {[
1f320 72 65 67 65 78 70 20 2d 2d 20 2d 2d 24 20 24 7b  regexp -- --$ ${
1f330 6c 69 6e 65 7d 5d 7d 20 7b 0a 09 09 09 72 65 74  line}]} {....ret
1f340 75 72 6e 20 5b 6c 69 73 74 20 7b 2d 2d 7d 5d 3b  urn [list {--}];
1f350 20 23 20 61 70 70 65 6e 64 20 61 20 62 6c 61 6e   # append a blan
1f360 6b 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09  k...} else {....
1f370 23 20 54 4f 44 4f 20 6d 61 6b 65 20 74 68 69 73  # TODO make this
1f380 20 62 65 74 74 65 72 21 0a 09 09 09 72 65 74 75   better!....retu
1f390 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
1f3a0 20 5b 6c 69 73 74 20 7b 3c 61 70 70 20 63 6d 64   [list {<app cmd
1f3b0 20 3f 61 72 67 20 2e 2e 2e 3f 3e 7d 5d 5d 0a 09   ?arg ...?>}]]..
1f3c0 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22  .}..}..return ""
1f3d0 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74  .}..proc complet
1f3e0 65 28 74 65 78 74 29 20 7b 74 65 78 74 20 73 74  e(text) {text st
1f3f0 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
1f400 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
1f410 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20  -- ${pos} {...1 
1f420 7b 20 72 65 74 75 72 6e 20 5b 45 76 65 6e 74 75  { return [Eventu
1f430 61 6c 6c 79 49 6e 73 65 72 74 4c 65 61 64 69 6e  allyInsertLeadin
1f440 67 44 6f 74 20 24 7b 74 65 78 74 7d 20 3c 70 61  gDot ${text} <pa
1f450 74 68 4e 61 6d 65 3e 5d 20 7d 0a 09 09 64 65 66  thName>] }...def
1f460 61 75 6c 74 20 7b 0a 09 09 09 72 65 74 75 72 6e  ault {....return
1f470 20 5b 43 6f 6d 70 6c 65 74 65 57 69 64 67 65 74   [CompleteWidget
1f480 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 24  Configurations $
1f490 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20  {text} ${start} 
1f4a0 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 2d 62  ${line} {.....-b
1f4b0 61 63 6b 67 72 6f 75 6e 64 20 2d 62 6f 72 64 65  ackground -borde
1f4c0 72 77 69 64 74 68 20 2d 63 75 72 73 6f 72 20 2d  rwidth -cursor -
1f4d0 65 78 70 6f 72 74 73 65 6c 65 63 74 69 6f 6e 20  exportselection 
1f4e0 2d 66 6f 6e 74 0a 09 09 09 09 2d 66 6f 72 65 67  -font.....-foreg
1f4f0 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69 67 68 74  round -highlight
1f500 62 61 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67 68  background -high
1f510 6c 69 67 68 74 63 6f 6c 6f 72 0a 09 09 09 09 2d  lightcolor.....-
1f520 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b 6e 65  highlightthickne
1f530 73 73 20 2d 69 6e 73 65 72 74 62 61 63 6b 67 72  ss -insertbackgr
1f540 6f 75 6e 64 20 2d 69 6e 73 65 72 74 62 6f 72 64  ound -insertbord
1f550 65 72 77 69 64 74 68 0a 09 09 09 09 2d 69 6e 73  erwidth.....-ins
1f560 65 72 74 6f 66 66 74 69 6d 65 20 2d 69 6e 73 65  ertofftime -inse
1f570 72 74 6f 6e 74 69 6d 65 20 2d 69 6e 73 65 72 74  rtontime -insert
1f580 77 69 64 74 68 20 2d 70 61 64 78 20 2d 70 61 64  width -padx -pad
1f590 79 0a 09 09 09 09 2d 72 65 6c 69 65 66 20 2d 73  y.....-relief -s
1f5a0 65 6c 65 63 74 62 61 63 6b 67 72 6f 75 6e 64 20  electbackground 
1f5b0 2d 73 65 6c 65 63 74 62 6f 72 64 65 72 77 69 64  -selectborderwid
1f5c0 74 68 0a 09 09 09 09 2d 73 65 6c 65 63 74 66 6f  th.....-selectfo
1f5d0 72 65 67 72 6f 75 6e 64 20 2d 73 65 74 67 72 69  reground -setgri
1f5e0 64 20 2d 74 61 6b 65 66 6f 63 75 73 20 2d 78 73  d -takefocus -xs
1f5f0 63 72 6f 6c 6c 63 6f 6d 6d 61 6e 64 0a 09 09 09  crollcommand....
1f600 09 2d 79 73 63 72 6f 6c 6c 63 6f 6d 6d 61 6e 64  .-yscrollcommand
1f610 20 2d 68 65 69 67 68 74 20 2d 73 70 61 63 69 6e   -height -spacin
1f620 67 31 20 2d 73 70 61 63 69 6e 67 32 20 2d 73 70  g1 -spacing2 -sp
1f630 61 63 69 6e 67 33 0a 09 09 09 09 2d 73 74 61 74  acing3.....-stat
1f640 65 20 2d 74 61 62 73 20 2d 77 69 64 74 68 20 2d  e -tabs -width -
1f650 77 72 61 70 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09  wrap....}]...}..
1f660 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
1f670 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74 6b  proc complete(tk
1f680 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
1f690 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
1f6a0 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  {..switch -- ${p
1f6b0 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72  os} {...1 {....r
1f6c0 65 74 75 72 6e 20 5b 54 72 79 53 75 62 43 6d 64  eturn [TrySubCmd
1f6d0 73 20 24 7b 74 65 78 74 7d 20 5b 4c 69 6e 64 65  s ${text} [Linde
1f6e0 78 20 24 7b 6c 69 6e 65 7d 20 30 5d 5d 0a 09 09  x ${line} 0]]...
1f6f0 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09  }...default {...
1f700 09 73 77 69 74 63 68 20 2d 2d 20 5b 4c 69 6e 64  .switch -- [Lind
1f710 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 20 7b 0a  ex ${line} 1] {.
1f720 09 09 09 09 61 70 70 6e 61 6d 65 20 7b 20 72 65  ....appname { re
1f730 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
1f740 74 73 20 3f 6e 65 77 4e 61 6d 65 3f 5d 20 20 7d  ts ?newName?]  }
1f750 0a 09 09 09 09 73 63 61 6c 69 6e 67 20 7b 0a 09  .....scaling {..
1f760 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20 5b 50  ....switch -- [P
1f770 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74  reviousWord ${st
1f780 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 20 7b 0a  art} ${line}] {.
1f790 09 09 09 09 09 09 2d 64 69 73 70 6c 61 79 6f 66  ......-displayof
1f7a0 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e   {........return
1f7b0 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b   [TryFromList ${
1f7c0 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 09 09 5b  text} \........[
1f7d0 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
1f7e0 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 09 09 7d  {text}]].......}
1f7f0 0a 09 09 09 09 09 09 64 65 66 61 75 6c 74 20 7b  .......default {
1f800 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b  ........return [
1f810 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
1f820 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09   ${text} \......
1f830 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74  ..[RemoveUsedOpt
1f840 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b 2d 64  ions ${line} {-d
1f850 69 73 70 6c 61 79 6f 66 20 3f 6e 75 6d 62 65 72  isplayof ?number
1f860 3f 7d 5d 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09  ?}]].......}....
1f870 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09  ..}.....}....}..
1f880 09 7d 0a 09 7d 0a 7d 0a 0a 23 20 70 72 6f 63 20  .}..}.}..# proc 
1f890 63 6f 6d 70 6c 65 74 65 28 74 6b 5f 62 69 73 71  complete(tk_bisq
1f8a0 75 65 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  ue) {text start 
1f8b0 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
1f8c0 7d 20 7b 0a 23 20 7d 0a 0a 70 72 6f 63 20 63 6f  } {.# }..proc co
1f8d0 6d 70 6c 65 74 65 28 74 6b 5f 63 68 6f 6f 73 65  mplete(tk_choose
1f8e0 43 6f 6c 6f 72 29 20 7b 74 65 78 74 20 73 74 61  Color) {text sta
1f8f0 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
1f900 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d  mod} {..switch -
1f910 2d 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20  - [PreviousWord 
1f920 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d  ${start} ${line}
1f930 5d 20 7b 0a 09 09 2d 69 6e 69 74 69 61 6c 63 6f  ] {...-initialco
1f940 6c 6f 72 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  lor { return [Co
1f950 6d 70 6c 65 74 65 43 6f 6c 6f 72 20 24 7b 74 65  mpleteColor ${te
1f960 78 74 7d 5d 20 7d 0a 09 09 2d 70 61 72 65 6e 74  xt}] }...-parent
1f970 20 7b 20 72 65 74 75 72 6e 20 5b 54 72 79 46 72   { return [TryFr
1f980 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b  omList ${text} [
1f990 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
1f9a0 7b 74 65 78 74 7d 5d 5d 20 7d 0a 09 09 2d 74 69  {text}]] }...-ti
1f9b0 74 6c 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  tle { return [Di
1f9c0 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 72 69  splayHints <stri
1f9d0 6e 67 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74  ng>] }...default
1f9e0 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 54 72   {....return [Tr
1f9f0 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  yFromList ${text
1fa00 7d 20 5c 0a 09 09 09 5b 52 65 6d 6f 76 65 55 73  } \....[RemoveUs
1fa10 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65  edOptions ${line
1fa20 7d 20 7b 2d 69 6e 69 74 69 61 6c 63 6f 6c 6f 72  } {-initialcolor
1fa30 20 2d 70 61 72 65 6e 74 20 2d 74 69 74 6c 65 7d   -parent -title}
1fa40 5d 5d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f  ]]...}..}.}..pro
1fa50 63 20 63 6f 6d 70 6c 65 74 65 28 74 6b 5f 64 69  c complete(tk_di
1fa60 61 6c 6f 67 29 20 7b 74 65 78 74 20 73 74 61 72  alog) {text star
1fa70 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
1fa80 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d  od} {..switch --
1fa90 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20   ${pos} {...1 { 
1faa0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
1fab0 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
1fac0 20 5b 54 6f 70 6c 65 76 65 6c 57 69 6e 64 6f 77   [ToplevelWindow
1fad0 73 5d 5d 20 7d 0a 09 09 32 20 7b 20 72 65 74 75  s]] }...2 { retu
1fae0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
1faf0 20 3c 74 69 74 6c 65 3e 5d 20 7d 0a 09 09 33 20   <title>] }...3 
1fb00 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
1fb10 79 48 69 6e 74 73 20 3c 74 65 78 74 3e 5d 20 7d  yHints <text>] }
1fb20 0a 09 09 34 20 7b 20 72 65 74 75 72 6e 20 5b 43  ...4 { return [C
1fb30 6f 6d 70 6c 65 74 65 46 72 6f 6d 42 69 74 6d 61  ompleteFromBitma
1fb40 70 73 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09  ps ${text}] }...
1fb50 35 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  5 { return [Disp
1fb60 6c 61 79 48 69 6e 74 73 20 3c 64 65 66 61 75 6c  layHints <defaul
1fb70 74 49 6e 64 65 78 3e 5d 20 7d 0a 09 09 64 65 66  tIndex>] }...def
1fb80 61 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b 44  ault { return [D
1fb90 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 62 75 74  isplayHints ?but
1fba0 74 6f 6e 4e 61 6d 65 3f 5d 20 7d 0a 09 7d 0a 7d  tonName?] }..}.}
1fbb0 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
1fbc0 74 6b 5f 66 6f 63 75 73 4e 65 78 74 29 20 7b 74  tk_focusNext) {t
1fbd0 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
1fbe0 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
1fbf0 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
1fc00 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b  {...1 { return [
1fc10 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
1fc20 20 24 7b 74 65 78 74 7d 20 5b 57 69 64 67 65 74   ${text} [Widget
1fc30 43 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d  Children ${text}
1fc40 5d 5d 20 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20  ]] }..}.}..proc 
1fc50 63 6f 6d 70 6c 65 74 65 28 74 6b 5f 66 6f 63 75  complete(tk_focu
1fc60 73 50 72 65 76 29 20 7b 74 65 78 74 20 73 74 61  sPrev) {text sta
1fc70 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
1fc80 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d  mod} {..switch -
1fc90 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b  - ${pos} {...1 {
1fca0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
1fcb0 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
1fcc0 7d 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65  } [WidgetChildre
1fcd0 6e 20 24 7b 74 65 78 74 7d 5d 5d 20 7d 0a 09 7d  n ${text}]] }..}
1fce0 0a 7d 0a 0a 23 20 70 72 6f 63 20 63 6f 6d 70 6c  .}..# proc compl
1fcf0 65 74 65 28 74 6b 5f 66 6f 63 75 73 46 6f 6c 6c  ete(tk_focusFoll
1fd00 6f 77 73 4d 6f 75 73 65 29 20 7b 74 65 78 74 20  owsMouse) {text 
1fd10 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
1fd20 6f 73 20 6d 6f 64 7d 20 7b 0a 23 20 7d 0a 0a 70  os mod} {.# }..p
1fd30 72 6f 63 20 47 65 74 4f 70 65 6e 53 61 76 65 46  roc GetOpenSaveF
1fd40 69 6c 65 20 7b 74 65 78 74 20 73 74 61 72 74 20  ile {text start 
1fd50 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
1fd60 20 7b 61 64 64 20 22 22 7d 7d 20 7b 0a 09 23 20   {add ""}} {..# 
1fd70 65 6e 61 62 6c 65 20 66 69 6c 65 6e 61 6d 65 20  enable filename 
1fd80 63 6f 6d 70 6c 65 74 69 6f 6e 20 66 6f 72 20 74  completion for t
1fd90 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 73 77  he first four sw
1fda0 69 74 63 68 65 73 2e 0a 09 73 77 69 74 63 68 20  itches...switch 
1fdb0 2d 2d 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64  -- [PreviousWord
1fdc0 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65   ${start} ${line
1fdd0 7d 5d 20 7b 0a 09 09 2d 64 65 66 61 75 6c 74 65  }] {...-defaulte
1fde0 78 74 65 6e 73 69 6f 6e 20 7b 7d 0a 09 09 2d 66  xtension {}...-f
1fdf0 69 6c 65 74 79 70 65 73 20 7b 7d 0a 09 09 2d 69  iletypes {}...-i
1fe00 6e 69 74 69 61 6c 64 69 72 20 7b 7d 0a 09 09 2d  nitialdir {}...-
1fe10 69 6e 69 74 69 61 6c 66 69 6c 65 20 7b 7d 0a 09  initialfile {}..
1fe20 09 2d 70 61 72 65 6e 74 20 7b 0a 09 09 09 72 65  .-parent {....re
1fe30 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
1fe40 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b  omList ${text} [
1fe50 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
1fe60 7b 74 65 78 74 7d 5d 5d 0a 09 09 7d 0a 09 09 2d  {text}]]...}...-
1fe70 74 69 74 6c 65 20 7b 20 72 65 74 75 72 6e 20 5b  title { return [
1fe80 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 69  DisplayHints <ti
1fe90 74 6c 65 53 74 72 69 6e 67 3e 5d 20 7d 0a 09 09  tleString>] }...
1fea0 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 72 65 74  default {....ret
1feb0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
1fec0 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a  mList ${text} \.
1fed0 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70  ...[RemoveUsedOp
1fee0 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 5b 63  tions ${line} [c
1fef0 6f 6e 63 61 74 20 7b 0a 09 09 09 09 2d 64 65 66  oncat {.....-def
1ff00 61 75 6c 74 65 78 74 65 6e 73 69 6f 6e 20 2d 66  aultextension -f
1ff10 69 6c 65 74 79 70 65 73 20 2d 69 6e 69 74 69 61  iletypes -initia
1ff20 6c 64 69 72 20 2d 70 61 72 65 6e 74 20 2d 74 69  ldir -parent -ti
1ff30 74 6c 65 0a 09 09 09 7d 20 24 7b 61 64 64 7d 5d  tle....} ${add}]
1ff40 5d 5d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f  ]]...}..}.}..pro
1ff50 63 20 63 6f 6d 70 6c 65 74 65 28 74 6b 5f 67 65  c complete(tk_ge
1ff60 74 4f 70 65 6e 46 69 6c 65 29 20 7b 74 65 78 74  tOpenFile) {text
1ff70 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
1ff80 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 72 65 74 75  pos mod} {..retu
1ff90 72 6e 20 5b 47 65 74 4f 70 65 6e 53 61 76 65 46  rn [GetOpenSaveF
1ffa0 69 6c 65 20 5c 0a 09 24 7b 74 65 78 74 7d 20 24  ile \..${text} $
1ffb0 7b 73 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20 24  {start} ${end} $
1ffc0 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 24 7b  {line} ${pos} ${
1ffd0 6d 6f 64 7d 5d 0a 7d 0a 0a 70 72 6f 63 20 63 6f  mod}].}..proc co
1ffe0 6d 70 6c 65 74 65 28 74 6b 5f 67 65 74 53 61 76  mplete(tk_getSav
1fff0 65 46 69 6c 65 29 20 7b 74 65 78 74 20 73 74 61  eFile) {text sta
20000 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
20010 6d 6f 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b  mod} {..return [
20020 47 65 74 4f 70 65 6e 53 61 76 65 46 69 6c 65 20  GetOpenSaveFile 
20030 5c 0a 09 24 7b 74 65 78 74 7d 20 24 7b 73 74 61  \..${text} ${sta
20040 72 74 7d 20 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e  rt} ${end} ${lin
20050 65 7d 20 24 7b 70 6f 73 7d 20 24 7b 6d 6f 64 7d  e} ${pos} ${mod}
20060 20 2d 69 6e 69 74 69 61 6c 66 69 6c 65 5d 0a 7d   -initialfile].}
20070 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
20080 74 6b 5f 6d 65 73 73 61 67 65 42 6f 78 29 20 7b  tk_messageBox) {
20090 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
200a0 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
200b0 73 77 69 74 63 68 20 2d 2d 20 5b 50 72 65 76 69  switch -- [Previ
200c0 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d  ousWord ${start}
200d0 20 24 7b 6c 69 6e 65 7d 5d 20 7b 0a 09 09 2d 64   ${line}] {...-d
200e0 65 66 61 75 6c 74 20 7b 0a 09 09 09 72 65 74 75  efault {....retu
200f0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
20100 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09  List ${text} {..
20110 09 09 09 61 62 6f 72 74 20 63 61 6e 63 65 6c 20  ...abort cancel 
20120 69 67 6e 6f 72 65 20 6e 6f 20 6f 6b 20 72 65 74  ignore no ok ret
20130 72 79 20 79 65 73 0a 09 09 09 7d 5d 0a 09 09 7d  ry yes....}]...}
20140 0a 09 09 2d 69 63 6f 6e 20 7b 0a 09 09 09 72 65  ...-icon {....re
20150 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
20160 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b  omList ${text} {
20170 0a 09 09 09 09 65 72 72 6f 72 20 69 6e 66 6f 20  .....error info 
20180 71 75 65 73 74 69 6f 6e 20 77 61 72 6e 69 6e 67  question warning
20190 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 09 2d 6d 65  ....}]...}...-me
201a0 73 73 61 67 65 20 7b 20 72 65 74 75 72 6e 20 5b  ssage { return [
201b0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 74  DisplayHints <st
201c0 72 69 6e 67 3e 5d 20 7d 0a 09 09 2d 70 61 72 65  ring>] }...-pare
201d0 6e 74 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b  nt {....return [
201e0 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
201f0 20 24 7b 74 65 78 74 7d 20 5b 57 69 64 67 65 74   ${text} [Widget
20200 43 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d  Children ${text}
20210 5d 5d 0a 09 09 7d 0a 09 09 2d 74 69 74 6c 65 20  ]]...}...-title 
20220 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
20230 79 48 69 6e 74 73 20 3c 74 69 74 6c 65 53 74 72  yHints <titleStr
20240 69 6e 67 3e 5d 20 7d 0a 09 09 2d 74 79 70 65 20  ing>] }...-type 
20250 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  {....return [Com
20260 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
20270 74 65 78 74 7d 20 7b 0a 09 09 09 09 61 62 6f 72  text} {.....abor
20280 74 72 65 74 72 79 69 67 6e 6f 72 65 20 6f 6b 20  tretryignore ok 
20290 6f 6b 63 61 6e 63 65 6c 20 72 65 74 72 79 63 61  okcancel retryca
202a0 6e 63 65 6c 20 79 65 73 6e 6f 20 79 65 73 6e 6f  ncel yesno yesno
202b0 63 61 6e 63 65 6c 0a 09 09 09 7d 5d 0a 09 09 7d  cancel....}]...}
202c0 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09  ...default {....
202d0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
202e0 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
202f0 20 5c 0a 09 09 09 5b 52 65 6d 6f 76 65 55 73 65   \....[RemoveUse
20300 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d  dOptions ${line}
20310 20 7b 0a 09 09 09 09 2d 64 65 66 61 75 6c 74 20   {.....-default 
20320 2d 69 63 6f 6e 20 2d 6d 65 73 73 61 67 65 20 2d  -icon -message -
20330 70 61 72 65 6e 74 20 2d 74 69 74 6c 65 20 2d 74  parent -title -t
20340 79 70 65 0a 09 09 09 7d 5d 5d 0a 09 09 7d 0a 09  ype....}]]...}..
20350 7d 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  }.}..proc comple
20360 74 65 28 74 6b 5f 6f 70 74 69 6f 6e 4d 65 6e 75  te(tk_optionMenu
20370 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
20380 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
20390 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  {..switch -- ${p
203a0 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74 75  os} {...1 { retu
203b0 72 6e 20 5b 45 76 65 6e 74 75 61 6c 6c 79 49 6e  rn [EventuallyIn
203c0 73 65 72 74 4c 65 61 64 69 6e 67 44 6f 74 20 24  sertLeadingDot $
203d0 7b 74 65 78 74 7d 20 3c 70 61 74 68 4e 61 6d 65  {text} <pathName
203e0 3e 5d 20 7d 0a 09 09 32 20 7b 20 72 65 74 75 72  >] }...2 { retur
203f0 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e  n [VarCompletion
20400 20 24 7b 74 65 78 74 7d 20 23 30 5d 20 7d 0a 09   ${text} #0] }..
20410 09 33 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .3 { return [Dis
20420 70 6c 61 79 48 69 6e 74 73 20 3c 76 61 6c 75 65  playHints <value
20430 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b  >] }...default {
20440 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
20450 48 69 6e 74 73 20 3f 76 61 6c 75 65 3f 5d 20 7d  Hints ?value?] }
20460 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70  ..}.}..proc comp
20470 6c 65 74 65 28 74 6b 5f 70 6f 70 75 70 29 20 7b  lete(tk_popup) {
20480 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
20490 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
204a0 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d  switch -- ${pos}
204b0 20 7b 0a 09 09 31 20 7b 0a 09 09 09 23 20 64 69   {...1 {....# di
204c0 73 70 6c 61 79 20 6f 6e 6c 79 20 6d 65 6e 75 20  splay only menu 
204d0 77 69 64 67 65 74 73 0a 09 09 09 23 0a 09 09 09  widgets....#....
204e0 73 65 74 20 77 69 64 67 65 74 73 20 5b 57 69 64  set widgets [Wid
204f0 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65  getChildren ${te
20500 78 74 7d 5d 0a 09 09 09 73 65 74 20 6d 65 6e 75  xt}]....set menu
20510 5f 77 69 64 67 65 74 73 20 22 22 0a 09 09 09 66  _widgets ""....f
20520 6f 72 65 61 63 68 20 77 69 64 67 65 74 20 24 7b  oreach widget ${
20530 77 69 64 67 65 74 73 7d 20 7b 0a 09 09 09 09 69  widgets} {.....i
20540 66 20 7b 22 4d 65 6e 75 22 20 3d 3d 20 5b 77 69  f {"Menu" == [wi
20550 6e 66 6f 20 63 6c 61 73 73 20 24 7b 77 69 64 67  nfo class ${widg
20560 65 74 7d 5d 7d 20 7b 0a 09 09 09 09 09 6c 61 70  et}]} {......lap
20570 70 65 6e 64 20 6d 65 6e 75 5f 77 69 64 67 65 74  pend menu_widget
20580 73 20 24 7b 77 69 64 67 65 74 7d 0a 09 09 09 09  s ${widget}.....
20590 7d 0a 09 09 09 7d 0a 09 09 09 69 66 20 7b 5b 6c  }....}....if {[l
205a0 6c 65 6e 67 74 68 20 24 7b 6d 65 6e 75 5f 77 69  length ${menu_wi
205b0 64 67 65 74 73 7d 5d 7d 20 7b 0a 09 09 09 09 72  dgets}]} {.....r
205c0 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69  eturn [TryFromLi
205d0 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 6d 65 6e  st ${text} ${men
205e0 75 5f 77 69 64 67 65 74 73 7d 5d 0a 09 09 09 7d  u_widgets}]....}
205f0 20 65 6c 73 65 20 7b 0a 09 09 09 09 72 65 74 75   else {.....retu
20600 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
20610 20 3c 6d 65 6e 75 3e 5d 0a 09 09 09 7d 0a 09 09   <menu>]....}...
20620 7d 0a 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b  }...2 { return [
20630 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 78 3e  DisplayHints <x>
20640 5d 20 7d 0a 09 09 33 20 7b 20 72 65 74 75 72 6e  ] }...3 { return
20650 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
20660 79 3e 5d 20 7d 0a 09 09 34 20 7b 20 72 65 74 75  y>] }...4 { retu
20670 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
20680 20 3f 65 6e 74 72 79 49 6e 64 65 78 3f 5d 20 7d   ?entryIndex?] }
20690 0a 09 7d 0a 7d 0a 0a 23 20 54 4f 44 4f 3a 20 74  ..}.}..# TODO: t
206a0 68 65 20 6e 61 6d 65 20 2d 20 76 61 6c 75 65 20  he name - value 
206b0 63 6f 6e 73 74 72 75 63 74 20 64 69 64 6e 27 74  construct didn't
206c0 20 77 6f 72 6b 20 69 6e 20 6d 79 20 77 69 73 68   work in my wish
206d0 2e 0a 23 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74  ..#.proc complet
206e0 65 28 74 6b 5f 73 65 74 50 61 6c 65 74 74 65 29  e(tk_setPalette)
206f0 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
20700 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
20710 0a 09 73 65 74 20 64 61 74 61 62 61 73 65 20 7b  ..set database {
20720 0a 09 09 61 63 74 69 76 65 42 61 63 6b 67 72 6f  ...activeBackgro
20730 75 6e 64 20 20 20 20 20 20 20 20 66 6f 72 65 67  und        foreg
20740 72 6f 75 6e 64 20 20 20 20 20 20 20 20 20 20 20  round           
20750 20 20 20 73 65 6c 65 63 74 43 6f 6c 6f 72 0a 09     selectColor..
20760 09 61 63 74 69 76 65 46 6f 72 65 67 72 6f 75 6e  .activeForegroun
20770 64 20 20 20 20 20 20 20 20 68 69 67 68 6c 69 67  d        highlig
20780 68 74 42 61 63 6b 67 72 6f 75 6e 64 20 20 20 20  htBackground    
20790 20 73 65 6c 65 63 74 42 61 63 6b 67 72 6f 75 6e   selectBackgroun
207a0 64 0a 09 09 62 61 63 6b 67 72 6f 75 6e 64 20 20  d...background  
207b0 20 20 20 20 20 20 20 20 20 20 20 20 68 69 67 68              high
207c0 6c 69 67 68 74 43 6f 6c 6f 72 20 20 20 20 20 20  lightColor      
207d0 20 20 20 20 73 65 6c 65 63 74 46 6f 72 65 67 72      selectForegr
207e0 6f 75 6e 64 0a 09 09 64 69 73 61 62 6c 65 64 46  ound...disabledF
207f0 6f 72 65 67 72 6f 75 6e 64 20 20 20 20 20 20 69  oreground      i
20800 6e 73 65 72 74 42 61 63 6b 67 72 6f 75 6e 64 20  nsertBackground 
20810 20 20 20 20 20 20 20 74 72 6f 75 67 68 43 6f 6c         troughCol
20820 6f 72 0a 09 7d 0a 09 73 77 69 74 63 68 20 2d 2d  or..}..switch --
20830 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a   ${pos} {...1 {.
20840 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
20850 65 74 65 43 6f 6c 6f 72 20 24 7b 74 65 78 74 7d  eteColor ${text}
20860 20 24 7b 64 61 74 61 62 61 73 65 7d 5d 0a 09 09   ${database}]...
20870 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09  }...default {...
20880 09 73 77 69 74 63 68 20 5b 65 78 70 72 20 24 7b  .switch [expr ${
20890 70 6f 73 7d 20 25 20 32 5d 20 7b 0a 09 09 09 09  pos} % 2] {.....
208a0 31 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  1 {......return 
208b0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
208c0 74 20 24 7b 74 65 78 74 7d 20 24 7b 64 61 74 61  t ${text} ${data
208d0 62 61 73 65 7d 5d 0a 09 09 09 09 7d 0a 09 09 09  base}].....}....
208e0 09 30 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  .0 {......return
208f0 20 5b 43 6f 6d 70 6c 65 74 65 43 6f 6c 6f 72 20   [CompleteColor 
20900 24 7b 74 65 78 74 7d 5d 0a 09 09 09 09 7d 0a 09  ${text}].....}..
20910 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72  ..}...}..}.}..pr
20920 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74 6b 77 61  oc complete(tkwa
20930 69 74 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  it) {text start 
20940 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
20950 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  } {..switch -- $
20960 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a 09 09  {pos} {...1 {...
20970 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
20980 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
20990 7d 20 7b 0a 09 09 09 09 76 61 72 69 61 62 6c 65  } {.....variable
209a0 20 76 69 73 69 62 69 6c 69 74 79 20 77 69 6e 64   visibility wind
209b0 6f 77 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 09 32  ow....}]...}...2
209c0 20 7b 0a 09 09 09 73 77 69 74 63 68 20 5b 4c 69   {....switch [Li
209d0 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 20  ndex ${line} 1] 
209e0 7b 0a 09 09 09 09 76 61 72 69 61 62 6c 65 20 7b  {.....variable {
209f0 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 56 61  ......return [Va
20a00 72 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 74 65  rCompletion ${te
20a10 78 74 7d 20 23 30 5d 0a 09 09 09 09 7d 0a 09 09  xt} #0].....}...
20a20 09 09 76 69 73 69 62 69 6c 69 74 79 20 2d 0a 09  ..visibility -..
20a30 09 09 09 77 69 6e 64 6f 77 20 7b 0a 09 09 09 09  ...window {.....
20a40 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d  .return [TryFrom
20a50 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 57 69  List ${text} [Wi
20a60 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74  dgetChildren ${t
20a70 65 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09  ext}]].....}....
20a80 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63  }...}..}.}..proc
20a90 20 63 6f 6d 70 6c 65 74 65 28 74 6f 70 6c 65 76   complete(toplev
20aa0 65 6c 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  el) {text start 
20ab0 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
20ac0 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  } {..switch -- $
20ad0 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65  {pos} {...1 { re
20ae0 74 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c 6c 79  turn [Eventually
20af0 49 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f 74  InsertLeadingDot
20b00 20 24 7b 74 65 78 74 7d 20 3c 70 61 74 68 4e 61   ${text} <pathNa
20b10 6d 65 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74  me>] }...default
20b20 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f   {....return [Co
20b30 6d 70 6c 65 74 65 57 69 64 67 65 74 43 6f 6e 66  mpleteWidgetConf
20b40 69 67 75 72 61 74 69 6f 6e 73 20 24 7b 74 65 78  igurations ${tex
20b50 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69  t} ${start} ${li
20b60 6e 65 7d 20 7b 0a 09 09 09 09 2d 62 6f 72 64 65  ne} {.....-borde
20b70 72 77 69 64 74 68 20 2d 63 75 72 73 6f 72 20 2d  rwidth -cursor -
20b80 68 69 67 68 6c 69 67 68 74 62 61 63 6b 67 72 6f  highlightbackgro
20b90 75 6e 64 20 2d 68 69 67 68 6c 69 67 68 74 63 6f  und -highlightco
20ba0 6c 6f 72 0a 09 09 09 09 2d 68 69 67 68 6c 69 67  lor.....-highlig
20bb0 68 74 74 68 69 63 6b 6e 65 73 73 20 2d 72 65 6c  htthickness -rel
20bc0 69 65 66 20 2d 74 61 6b 65 66 6f 63 75 73 20 2d  ief -takefocus -
20bd0 62 61 63 6b 67 72 6f 75 6e 64 0a 09 09 09 09 2d  background.....-
20be0 63 6c 61 73 73 20 2d 63 6f 6c 6f 72 6d 61 70 20  class -colormap 
20bf0 2d 63 6f 6e 74 61 69 6e 65 72 20 2d 68 65 69 67  -container -heig
20c00 68 74 20 2d 6d 65 6e 75 20 2d 73 63 72 65 65 6e  ht -menu -screen
20c10 0a 09 09 09 09 2d 75 73 65 20 2d 76 69 73 75 61  .....-use -visua
20c20 6c 20 2d 77 69 64 74 68 0a 09 09 09 7d 5d 0a 09  l -width....}]..
20c30 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22  .}..}..return ""
20c40 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74  .}..proc complet
20c50 65 28 77 69 6e 66 6f 29 20 7b 74 65 78 74 20 73  e(winfo) {text s
20c60 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
20c70 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 73 75  s mod} {..set su
20c80 62 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65  b [Lindex ${line
20c90 7d 20 31 5d 0a 09 73 77 69 74 63 68 20 2d 2d 20  } 1]..switch -- 
20ca0 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a 09  ${pos} {...1 {..
20cb0 09 09 72 65 74 75 72 6e 20 5b 54 72 79 53 75 62  ..return [TrySub
20cc0 43 6d 64 73 20 24 7b 74 65 78 74 7d 20 77 69 6e  Cmds ${text} win
20cd0 66 6f 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09  fo]...}...2 {...
20ce0 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62  .switch -- ${sub
20cf0 7d 20 7b 0a 09 09 09 09 61 74 6f 6d 20 7b 0a 09  } {.....atom {..
20d00 09 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46  ....return [TryF
20d10 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
20d20 7b 2d 64 69 73 70 6c 61 79 6f 66 20 3c 6e 61 6d  {-displayof <nam
20d30 65 3e 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 63  e>}].....}.....c
20d40 6f 6e 74 61 69 6e 69 6e 67 20 7b 0a 09 09 09 09  ontaining {.....
20d50 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d  .return [TryFrom
20d60 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 2d 64  List ${text} {-d
20d70 69 73 70 6c 61 79 6f 66 20 3c 72 6f 6f 74 58 3e  isplayof <rootX>
20d80 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 69 6e 74  }].....}.....int
20d90 65 72 70 73 20 7b 0a 09 09 09 09 09 72 65 74 75  erps {......retu
20da0 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20  rn [TryFromList 
20db0 24 7b 74 65 78 74 7d 20 2d 64 69 73 70 6c 61 79  ${text} -display
20dc0 6f 66 5d 0a 09 09 09 09 7d 0a 09 09 09 09 61 74  of].....}.....at
20dd0 6f 6d 6e 61 6d 65 20 2d 0a 09 09 09 09 70 61 74  omname -.....pat
20de0 68 6e 61 6d 65 20 7b 0a 09 09 09 09 09 72 65 74  hname {......ret
20df0 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74  urn [TryFromList
20e00 20 24 7b 74 65 78 74 7d 20 7b 2d 64 69 73 70 6c   ${text} {-displ
20e10 61 79 6f 66 20 3c 69 64 3e 7d 5d 0a 09 09 09 09  ayof <id>}].....
20e20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a  }.....default {.
20e30 09 09 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79  .....return [Try
20e40 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
20e50 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e   [WidgetChildren
20e60 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 7d   ${text}]].....}
20e70 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 64 65 66 61  ....}...}...defa
20e80 75 6c 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ult {....switch 
20e90 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09  -- ${sub} {.....
20ea0 61 74 6f 6d 20 7b 0a 09 09 09 09 09 73 77 69 74  atom {......swit
20eb0 63 68 20 2d 2d 20 5b 50 72 65 76 69 6f 75 73 57  ch -- [PreviousW
20ec0 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c  ord ${start} ${l
20ed0 69 6e 65 7d 5d 20 7b 0a 09 09 09 09 09 09 2d 64  ine}] {.......-d
20ee0 69 73 70 6c 61 79 6f 66 20 7b 0a 09 09 09 09 09  isplayof {......
20ef0 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f  ..return [TryFro
20f00 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a  mList ${text} \.
20f10 09 09 09 09 09 09 09 5b 57 69 64 67 65 74 43 68  .......[WidgetCh
20f20 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d  ildren ${text}]]
20f30 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 09 64  .......}.......d
20f40 65 66 61 75 6c 74 20 7b 20 72 65 74 75 72 6e 20  efault { return 
20f50 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6e  [DisplayHints <n
20f60 61 6d 65 3e 5d 20 7d 0a 09 09 09 09 09 7d 0a 09  ame>] }......}..
20f70 09 09 09 7d 0a 09 09 09 09 63 6f 6e 74 61 69 6e  ...}.....contain
20f80 69 6e 67 20 7b 0a 09 09 09 09 09 73 77 69 74 63  ing {......switc
20f90 68 20 2d 2d 20 5b 4c 69 6e 64 65 78 20 24 7b 6c  h -- [Lindex ${l
20fa0 69 6e 65 7d 20 32 5d 20 7b 0a 09 09 09 09 09 09  ine} 2] {.......
20fb0 2d 64 69 73 70 6c 61 79 6f 66 20 7b 0a 09 09 09  -displayof {....
20fc0 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  ....switch -- ${
20fd0 70 6f 73 7d 20 7b 0a 09 09 09 09 09 09 09 09 33  pos} {.........3
20fe0 20 7b 0a 09 09 09 09 09 09 09 09 09 72 65 74 75   {..........retu
20ff0 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20  rn [TryFromList 
21000 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 09  ${text} \.......
21010 09 09 09 5b 57 69 64 67 65 74 43 68 69 6c 64 72  ...[WidgetChildr
21020 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09  en ${text}]]....
21030 09 09 09 09 09 7d 0a 09 09 09 09 09 09 09 09 34  .....}.........4
21040 20 7b 0a 09 09 09 09 09 09 09 09 09 72 65 74 75   {..........retu
21050 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
21060 20 3c 72 6f 6f 74 58 3e 5d 0a 09 09 09 09 09 09   <rootX>].......
21070 09 09 7d 0a 09 09 09 09 09 09 09 09 35 20 7b 0a  ..}.........5 {.
21080 09 09 09 09 09 09 09 09 09 72 65 74 75 72 6e 20  .........return 
21090 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 72  [DisplayHints <r
210a0 6f 6f 74 59 3e 5d 0a 09 09 09 09 09 09 09 09 7d  ootY>].........}
210b0 0a 09 09 09 09 09 09 09 7d 0a 09 09 09 09 09 09  ........}.......
210c0 7d 0a 09 09 09 09 09 09 64 65 66 61 75 6c 74 20  }.......default 
210d0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
210e0 79 48 69 6e 74 73 20 3c 72 6f 6f 74 59 3e 5d 20  yHints <rootY>] 
210f0 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09  }......}.....}..
21100 09 09 09 69 6e 74 65 72 70 73 20 7b 0a 09 09 09  ...interps {....
21110 09 09 73 77 69 74 63 68 20 2d 2d 20 5b 50 72 65  ..switch -- [Pre
21120 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72  viousWord ${star
21130 74 7d 20 24 7b 6c 69 6e 65 7d 5d 20 7b 0a 09 09  t} ${line}] {...
21140 09 09 09 09 2d 64 69 73 70 6c 61 79 6f 66 20 7b  ....-displayof {
21150 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b  ........return [
21160 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  TryFromList ${te
21170 78 74 7d 20 5c 0a 09 09 09 09 09 09 09 5b 57 69  xt} \........[Wi
21180 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74  dgetChildren ${t
21190 65 78 74 7d 5d 5d 0a 09 09 09 09 09 09 7d 0a 09  ext}]].......}..
211a0 09 09 09 09 09 64 65 66 61 75 6c 74 20 7b 7d 0a  .....default {}.
211b0 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09  .....}.....}....
211c0 09 61 74 6f 6d 6e 61 6d 65 20 2d 0a 09 09 09 09  .atomname -.....
211d0 70 61 74 68 6e 61 6d 65 20 7b 0a 09 09 09 09 09  pathname {......
211e0 73 77 69 74 63 68 20 2d 2d 20 5b 50 72 65 76 69  switch -- [Previ
211f0 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d  ousWord ${start}
21200 20 24 7b 6c 69 6e 65 7d 5d 20 7b 0a 09 09 09 09   ${line}] {.....
21210 09 09 2d 64 69 73 70 6c 61 79 6f 66 20 7b 0a 09  ..-displayof {..
21220 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 54 72  ......return [Tr
21230 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  yFromList ${text
21240 7d 20 5c 0a 09 09 09 09 09 09 09 5b 57 69 64 67  } \........[Widg
21250 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65 78  etChildren ${tex
21260 74 7d 5d 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09  t}]].......}....
21270 09 09 09 64 65 66 61 75 6c 74 20 7b 20 72 65 74  ...default { ret
21280 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
21290 73 20 3c 69 64 3e 5d 20 7d 0a 09 09 09 09 09 7d  s <id>] }......}
212a0 0a 09 09 09 09 7d 0a 09 09 09 09 76 69 73 75 61  .....}.....visua
212b0 6c 73 61 76 61 69 6c 61 62 6c 65 20 7b 20 72 65  lsavailable { re
212c0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
212d0 74 73 20 3f 69 6e 63 6c 75 64 65 69 64 73 3f 5d  ts ?includeids?]
212e0 20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b   }.....default {
212f0 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 54 72  ......return [Tr
21300 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  yFromList ${text
21310 7d 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65  } [WidgetChildre
21320 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09  n ${text}]].....
21330 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72  }....}...}..}..r
21340 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63  eturn "".}..proc
21350 20 63 6f 6d 70 6c 65 74 65 28 77 6d 29 20 7b 74   complete(wm) {t
21360 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
21370 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
21380 65 74 20 73 75 62 20 5b 4c 69 6e 64 65 78 20 24  et sub [Lindex $
21390 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73 77 69 74 63  {line} 1]..switc
213a0 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09  h -- ${pos} {...
213b0 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43  1 {....return [C
213c0 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
213d0 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 61 73  ${text} {.....as
213e0 70 65 63 74 20 63 6c 69 65 6e 74 20 63 6f 6c 6f  pect client colo
213f0 72 6d 61 70 77 69 6e 64 6f 77 73 20 63 6f 6d 6d  rmapwindows comm
21400 61 6e 64 20 64 65 69 63 6f 6e 69 66 79 20 66 6f  and deiconify fo
21410 63 75 73 6d 6f 64 65 6c 0a 09 09 09 09 66 72 61  cusmodel.....fra
21420 6d 65 20 67 65 6f 6d 65 74 72 79 20 67 72 69 64  me geometry grid
21430 20 67 72 6f 75 70 20 69 63 6f 6e 62 69 74 6d 61   group iconbitma
21440 70 20 69 63 6f 6e 69 66 79 20 69 63 6f 6e 6d 61  p iconify iconma
21450 73 6b 20 69 63 6f 6e 6e 61 6d 65 0a 09 09 09 09  sk iconname.....
21460 69 63 6f 6e 70 6f 73 69 74 69 6f 6e 20 69 63 6f  iconposition ico
21470 6e 77 69 6e 64 6f 77 20 6d 61 78 73 69 7a 65 20  nwindow maxsize 
21480 6d 69 6e 73 69 7a 65 20 6f 76 65 72 72 69 64 65  minsize override
21490 72 65 64 69 72 65 63 74 0a 09 09 09 09 70 6f 73  redirect.....pos
214a0 69 74 69 6f 6e 66 72 6f 6d 20 70 72 6f 74 6f 63  itionfrom protoc
214b0 6f 6c 20 72 65 73 69 7a 61 62 6c 65 20 73 69 7a  ol resizable siz
214c0 65 66 72 6f 6d 20 73 74 61 74 65 20 74 69 74 6c  efrom state titl
214d0 65 20 74 72 61 6e 73 69 65 6e 74 0a 09 09 09 09  e transient.....
214e0 77 69 74 68 64 72 61 77 0a 09 09 09 7d 5d 0a 09  withdraw....}]..
214f0 09 7d 0a 09 09 32 20 7b 0a 09 09 09 72 65 74 75  .}...2 {....retu
21500 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20  rn [TryFromList 
21510 24 7b 74 65 78 74 7d 20 5b 54 6f 70 6c 65 76 65  ${text} [Topleve
21520 6c 57 69 6e 64 6f 77 73 5d 5d 0a 09 09 7d 0a 09  lWindows]]...}..
21530 09 33 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  .3 {....switch -
21540 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 61  - ${sub} {.....a
21550 73 70 65 63 74 20 7b 20 72 65 74 75 72 6e 20 5b  spect { return [
21560 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 6d 69  DisplayHints ?mi
21570 6e 4e 75 6d 65 72 3f 5d 20 7d 0a 09 09 09 09 63  nNumer?] }.....c
21580 6c 69 65 6e 74 20 7b 20 72 65 74 75 72 6e 20 5b  lient { return [
21590 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 6e 61  DisplayHints ?na
215a0 6d 65 3f 5d 20 7d 0a 09 09 09 09 63 6f 6c 6f 72  me?] }.....color
215b0 6d 61 70 77 69 6e 64 6f 77 73 20 7b 0a 09 09 09  mapwindows {....
215c0 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
215d0 74 65 4c 69 73 74 46 72 6f 6d 4c 69 73 74 20 24  teListFromList $
215e0 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b 73  {text} \......[s
215f0 74 72 69 6e 67 20 74 72 69 6d 6c 65 66 74 20 5b  tring trimleft [
21600 49 6e 63 6f 6d 70 6c 65 74 65 4c 69 73 74 52 65  IncompleteListRe
21610 6d 61 69 6e 64 65 72 20 24 7b 6c 69 6e 65 7d 5d  mainder ${line}]
21620 5d 20 5c 0a 09 09 09 09 09 5b 57 69 64 67 65 74  ] \......[Widget
21630 43 68 69 6c 64 72 65 6e 20 2e 5d 20 5c 7b 20 7b  Children .] \{ {
21640 20 7d 20 5c 7d 5d 0a 09 09 09 09 7d 0a 09 09 09   } \}].....}....
21650 09 63 6f 6d 6d 61 6e 64 20 7b 20 72 65 74 75 72  .command { retur
21660 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
21670 3f 76 61 6c 75 65 3f 5d 20 7d 0a 09 09 09 09 66  ?value?] }.....f
21680 6f 63 75 73 6d 6f 64 65 6c 20 7b 0a 09 09 09 09  ocusmodel {.....
21690 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
216a0 65 4c 69 73 74 46 72 6f 6d 4c 69 73 74 20 24 7b  eListFromList ${
216b0 74 65 78 74 7d 20 7b 61 63 74 69 76 65 20 70 61  text} {active pa
216c0 73 73 69 76 65 7d 5d 0a 09 09 09 09 7d 0a 09 09  ssive}].....}...
216d0 09 09 67 65 6f 6d 65 74 72 79 20 7b 0a 09 09 09  ..geometry {....
216e0 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  ..return [Displa
216f0 79 48 69 6e 74 73 20 3f 3c 77 69 64 74 68 3e 78  yHints ?<width>x
21700 3c 68 65 69 67 68 74 3e 2b 2d 3c 78 3e 2b 2d 3c  <height>+-<x>+-<
21710 79 3e 3f 5d 0a 09 09 09 09 7d 0a 09 09 09 09 67  y>?].....}.....g
21720 72 69 64 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  rid { return [Di
21730 73 70 6c 61 79 48 69 6e 74 73 20 3f 62 61 73 65  splayHints ?base
21740 57 69 64 74 68 3f 5d 20 7d 0a 09 09 09 09 67 72  Width?] }.....gr
21750 6f 75 70 20 7b 0a 09 09 09 09 09 72 65 74 75 72  oup {......retur
21760 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24  n [TryFromList $
21770 7b 74 65 78 74 7d 20 5b 57 69 64 67 65 74 43 68  {text} [WidgetCh
21780 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d  ildren ${text}]]
21790 0a 09 09 09 09 7d 0a 09 09 09 09 69 63 6f 6e 62  .....}.....iconb
217a0 69 74 6d 61 70 20 2d 0a 09 09 09 09 69 63 6f 6e  itmap -.....icon
217b0 6d 61 73 6b 20 7b 20 72 65 74 75 72 6e 20 5b 43  mask { return [C
217c0 6f 6d 70 6c 65 74 65 46 72 6f 6d 42 69 74 6d 61  ompleteFromBitma
217d0 70 73 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09  ps ${text}] }...
217e0 09 09 69 63 6f 6e 6e 61 6d 65 20 7b 20 72 65 74  ..iconname { ret
217f0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
21800 73 20 3f 6e 65 77 4e 61 6d 65 3f 5d 20 7d 0a 09  s ?newName?] }..
21810 09 09 09 69 63 6f 6e 70 6f 73 69 74 69 6f 6e 20  ...iconposition 
21820 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
21830 79 48 69 6e 74 73 20 3f 78 3f 5d 20 7d 0a 09 09  yHints ?x?] }...
21840 09 09 69 63 6f 6e 77 69 6e 64 6f 77 20 7b 0a 09  ..iconwindow {..
21850 09 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46  ....return [TryF
21860 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
21870 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
21880 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a  ${text}]].....}.
21890 09 09 09 09 6d 61 78 73 69 7a 65 20 2d 0a 09 09  ....maxsize -...
218a0 09 09 6d 69 6e 73 69 7a 65 20 7b 20 72 65 74 75  ..minsize { retu
218b0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
218c0 20 3f 77 69 64 74 68 3f 5d 20 7d 0a 09 09 09 09   ?width?] }.....
218d0 6f 76 65 72 72 69 64 65 72 65 64 69 72 65 63 74  overrideredirect
218e0 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c   { return [Compl
218f0 65 74 65 42 6f 6f 6c 65 61 6e 20 24 7b 74 65 78  eteBoolean ${tex
21900 74 7d 5d 20 7d 0a 09 09 09 09 70 6f 73 69 74 69  t}] }.....positi
21910 6f 6e 66 72 6f 6d 20 2d 0a 09 09 09 09 73 69 7a  onfrom -.....siz
21920 65 66 72 6f 6d 20 7b 0a 09 09 09 09 09 72 65 74  efrom {......ret
21930 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
21940 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 70  mList ${text} {p
21950 6f 73 69 74 69 6f 6e 20 75 73 65 72 7d 5d 0a 09  osition user}]..
21960 09 09 09 7d 0a 09 09 09 09 70 72 6f 74 6f 63 6f  ...}.....protoco
21970 6c 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  l {......return 
21980 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
21990 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09  t ${text} {.....
219a0 09 09 57 4d 5f 54 41 4b 45 5f 46 4f 43 55 53 20  ..WM_TAKE_FOCUS 
219b0 57 4d 5f 53 41 56 45 5f 59 4f 55 52 53 45 4c 46  WM_SAVE_YOURSELF
219c0 20 57 4d 5f 44 45 4c 45 54 45 5f 57 49 4e 44 4f   WM_DELETE_WINDO
219d0 57 0a 09 09 09 09 09 7d 5d 0a 09 09 09 09 7d 0a  W......}].....}.
219e0 09 09 09 09 72 65 73 69 7a 61 62 6c 65 20 7b 20  ....resizable { 
219f0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
21a00 69 6e 74 73 20 3f 77 69 64 74 68 3f 5d 20 7d 0a  ints ?width?] }.
21a10 09 09 09 09 74 69 74 6c 65 20 7b 20 72 65 74 75  ....title { retu
21a20 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
21a30 20 3f 73 74 72 69 6e 67 3f 5d 20 7d 0a 09 09 09   ?string?] }....
21a40 09 74 72 61 6e 73 69 65 6e 74 20 7b 0a 09 09 09  .transient {....
21a50 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f  ..return [TryFro
21a60 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 57  mList ${text} [W
21a70 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b  idgetChildren ${
21a80 74 65 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09  text}]].....}...
21a90 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09  ..default {.....
21aa0 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d  .return [TryFrom
21ab0 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 54 6f  List ${text} [To
21ac0 70 6c 65 76 65 6c 57 69 6e 64 6f 77 73 5d 5d 0a  plevelWindows]].
21ad0 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  ....}....}...}..
21ae0 09 34 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  .4 {....switch -
21af0 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 61  - ${sub} {.....a
21b00 73 70 65 63 74 20 7b 20 72 65 74 75 72 6e 20 5b  spect { return [
21b10 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 6d 69  DisplayHints ?mi
21b20 6e 44 65 6e 6f 6d 3f 5d 20 7d 0a 09 09 09 09 67  nDenom?] }.....g
21b30 72 69 64 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  rid { return [Di
21b40 73 70 6c 61 79 48 69 6e 74 73 20 3f 62 61 73 65  splayHints ?base
21b50 48 65 69 67 68 74 3f 5d 20 7d 0a 09 09 09 09 69  Height?] }.....i
21b60 63 6f 6e 70 6f 73 69 74 69 6f 6e 20 7b 20 72 65  conposition { re
21b70 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
21b80 74 73 20 3f 79 3f 5d 20 7d 0a 09 09 09 09 6d 61  ts ?y?] }.....ma
21b90 78 73 69 7a 65 20 2d 0a 09 09 09 09 6d 69 6e 73  xsize -.....mins
21ba0 69 7a 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ize { return [Di
21bb0 73 70 6c 61 79 48 69 6e 74 73 20 3f 68 65 69 67  splayHints ?heig
21bc0 68 74 3f 5d 20 7d 0a 09 09 09 09 70 72 6f 74 6f  ht?] }.....proto
21bd0 63 6f 6c 20 7b 0a 09 09 09 09 09 72 65 74 75 72  col {......retur
21be0 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e  n [BraceOrComman
21bf0 64 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09  d ${text} \.....
21c00 09 24 7b 73 74 61 72 74 7d 20 24 7b 65 6e 64 7d  .${start} ${end}
21c10 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 20   ${line} ${pos} 
21c20 24 7b 6d 6f 64 7d 5d 0a 09 09 09 09 7d 0a 09 09  ${mod}].....}...
21c30 09 09 72 65 73 69 7a 61 62 6c 65 20 7b 20 72 65  ..resizable { re
21c40 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
21c50 74 73 20 3f 68 65 69 67 68 74 3f 5d 20 7d 0a 09  ts ?height?] }..
21c60 09 09 7d 0a 09 09 7d 0a 09 09 35 20 7b 0a 09 09  ..}...}...5 {...
21c70 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62  .switch -- ${sub
21c80 7d 20 7b 0a 09 09 09 09 61 73 70 65 63 74 20 7b  } {.....aspect {
21c90 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
21ca0 48 69 6e 74 73 20 3f 6d 61 78 4e 75 6d 65 72 3f  Hints ?maxNumer?
21cb0 5d 20 7d 0a 09 09 09 09 67 72 69 64 20 7b 20 72  ] }.....grid { r
21cc0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
21cd0 6e 74 73 20 3f 77 69 64 74 68 49 6e 63 3f 5d 20  nts ?widthInc?] 
21ce0 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 36 20 7b  }....}...}...6 {
21cf0 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  ....switch -- ${
21d00 73 75 62 7d 20 7b 0a 09 09 09 09 61 73 70 65 63  sub} {.....aspec
21d10 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  t { return [Disp
21d20 6c 61 79 48 69 6e 74 73 20 3f 6d 61 78 44 65 6e  layHints ?maxDen
21d30 6f 6d 3f 5d 20 7d 0a 09 09 09 09 67 72 69 64 20  om?] }.....grid 
21d40 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
21d50 79 48 69 6e 74 73 20 3f 68 65 69 67 68 74 49 6e  yHints ?heightIn
21d60 63 3f 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  c?] }....}...}..
21d70 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
21d80 23 20 3d 3d 3d 3d 20 4f 62 6a 43 6d 64 20 63 6f  # ==== ObjCmd co
21d90 6d 70 6c 65 74 65 72 73 20 3d 3d 3d 3d 3d 3d 3d  mpleters =======
21da0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
21db0 3d 3d 3d 0a 23 0a 23 20 40 6e 6f 74 65 20 77 68  ===.#.# @note wh
21dc0 65 6e 20 61 20 70 72 6f 63 20 69 73 20 63 6f 6d  en a proc is com
21dd0 6d 65 6e 74 65 64 20 6f 75 74 2c 20 74 68 65 20  mented out, the 
21de0 66 61 6c 6c 62 61 63 6b 0a 23 20 20 20 20 20 20  fallback.#      
21df0 20 63 6f 6d 70 6c 65 74 65 72 73 20 64 6f 20 74   completers do t
21e00 68 65 20 6a 6f 62 20 72 61 74 68 65 72 20 77 65  he job rather we
21e10 6c 6c 2e 0a 23 0a 23 20 3d 3d 3d 3d 3d 3d 3d 3d  ll..#.# ========
21e20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
21e30 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
21e40 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 0a 23 20 70 72  =========...# pr
21e50 6f 63 20 42 75 74 74 6f 6e 4f 62 6a 20 7b 74 65  oc ButtonObj {te
21e60 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
21e70 65 20 70 6f 73 7d 20 7b 0a 23 20 09 72 65 74 75  e pos} {.# .retu
21e80 72 6e 20 22 22 0a 23 20 7d 0a 0a 70 72 6f 63 20  rn "".# }..proc 
21e90 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 42 69 74 6d  CompleteFromBitm
21ea0 61 70 73 20 7b 74 65 78 74 20 7b 61 6c 77 61 79  aps {text {alway
21eb0 73 20 31 7d 7d 20 7b 0a 09 73 65 74 20 69 6e 61  s 1}} {..set ina
21ec0 6d 65 73 20 5b 69 6d 61 67 65 20 6e 61 6d 65 73  mes [image names
21ed0 5d 0a 09 73 65 74 20 62 69 74 6d 61 70 73 20 22  ]..set bitmaps "
21ee0 22 0a 09 66 6f 72 65 61 63 68 20 6e 61 6d 65 20  "..foreach name 
21ef0 24 69 6e 61 6d 65 73 20 7b 0a 09 09 69 66 20 7b  $inames {...if {
21f00 22 62 69 74 6d 61 70 22 20 3d 3d 20 5b 69 6d 61  "bitmap" == [ima
21f10 67 65 20 74 79 70 65 20 24 6e 61 6d 65 5d 7d 20  ge type $name]} 
21f20 7b 0a 09 09 09 6c 61 70 70 65 6e 64 20 62 69 74  {....lappend bit
21f30 6d 61 70 73 20 24 7b 6e 61 6d 65 7d 0a 09 09 7d  maps ${name}...}
21f40 0a 09 7d 0a 09 69 66 20 7b 5b 73 74 72 69 6e 67  ..}..if {[string
21f50 20 6c 65 6e 67 74 68 20 24 7b 62 69 74 6d 61 70   length ${bitmap
21f60 73 7d 5d 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20  s}]} {...return 
21f70 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
21f80 74 20 5c 0a 09 09 24 7b 74 65 78 74 7d 20 24 7b  t \...${text} ${
21f90 62 69 74 6d 61 70 73 7d 5d 0a 09 7d 20 65 6c 73  bitmaps}]..} els
21fa0 65 20 7b 0a 09 09 69 66 20 24 7b 61 6c 77 61 79  e {...if ${alway
21fb0 73 7d 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b  s} {....return [
21fc0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 62 69  DisplayHints <bi
21fd0 74 6d 61 70 73 3e 5d 0a 09 09 7d 20 65 6c 73 65  tmaps>]...} else
21fe0 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 22 22 0a   {....return "".
21ff0 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 43  ..}..}.}..proc C
22000 6f 6d 70 6c 65 74 65 46 72 6f 6d 49 6d 61 67 65  ompleteFromImage
22010 73 20 7b 74 65 78 74 20 7b 61 6c 77 61 79 73 20  s {text {always 
22020 31 7d 7d 20 7b 0a 09 73 65 74 20 69 6e 61 6d 65  1}} {..set iname
22030 73 20 5b 69 6d 61 67 65 20 6e 61 6d 65 73 5d 0a  s [image names].
22040 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e  .if {[string len
22050 67 74 68 20 24 7b 69 6e 61 6d 65 73 7d 5d 7d 20  gth ${inames}]} 
22060 7b 0a 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  {...return [Comp
22070 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
22080 65 78 74 7d 20 24 7b 69 6e 61 6d 65 73 7d 5d 0a  ext} ${inames}].
22090 09 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66 20 24  .} else {...if $
220a0 7b 61 6c 77 61 79 73 7d 20 7b 0a 09 09 09 72 65  {always} {....re
220b0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
220c0 74 73 20 3c 69 6d 61 67 65 3e 5d 0a 09 09 7d 20  ts <image>]...} 
220d0 65 6c 73 65 20 7b 0a 09 09 09 72 65 74 75 72 6e  else {....return
220e0 20 22 22 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72   ""...}..}.}..pr
220f0 6f 63 20 43 6f 6d 70 6c 65 74 65 41 6e 63 68 6f  oc CompleteAncho
22100 72 20 74 65 78 74 20 7b 0a 09 72 65 74 75 72 6e  r text {..return
22110 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
22120 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 6e  st ${text} {...n
22130 20 6e 65 20 65 20 73 65 20 73 20 73 77 20 77 20   ne e se s sw w 
22140 6e 77 20 63 65 6e 74 65 72 0a 09 7d 5d 0a 7d 0a  nw center..}].}.
22150 0a 70 72 6f 63 20 43 6f 6d 70 6c 65 74 65 4a 75  .proc CompleteJu
22160 73 74 69 66 79 20 74 65 78 74 20 7b 0a 09 72 65  stify text {..re
22170 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
22180 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b  omList ${text} {
22190 0a 09 09 6c 65 66 74 20 63 65 6e 74 65 72 20 72  ...left center r
221a0 69 67 68 74 0a 09 7d 5d 0a 7d 0a 0a 70 72 6f 63  ight..}].}..proc
221b0 20 43 61 6e 76 61 73 49 74 65 6d 20 7b 74 65 78   CanvasItem {tex
221c0 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
221d0 20 70 6f 73 20 70 72 65 76 20 74 79 70 65 7d 20   pos prev type} 
221e0 7b 0a 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  {...switch -- ${
221f0 74 79 70 65 7d 20 7b 0a 09 09 61 72 63 20 7b 0a  type} {...arc {.
22200 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  ...switch -- ${p
22210 72 65 76 7d 20 7b 0a 09 09 09 09 2d 65 78 74 65  rev} {.....-exte
22220 6e 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  nt { return [Dis
22230 70 6c 61 79 48 69 6e 74 73 20 3c 64 65 67 72 65  playHints <degre
22240 65 73 3e 5d 20 7d 0a 09 09 09 09 2d 66 69 6c 6c  es>] }.....-fill
22250 20 2d 0a 09 09 09 09 2d 6f 75 74 6c 69 6e 65 20   -.....-outline 
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 3c 63 6f 6c 6f 72 3e 5d 20  yHints <color>] 
22280 7d 0a 09 09 09 09 2d 6f 75 74 6c 69 6e 65 73 74  }.....-outlinest
22290 69 70 70 6c 65 20 2d 0a 09 09 09 09 2d 73 74 69  ipple -.....-sti
222a0 70 70 6c 65 20 7b 0a 09 09 09 09 09 73 65 74 20  pple {......set 
222b0 69 6e 61 6d 65 73 20 5b 69 6d 61 67 65 20 6e 61  inames [image na
222c0 6d 65 73 5d 0a 09 09 09 09 09 73 65 74 20 62 69  mes]......set bi
222d0 74 6d 61 70 73 20 22 22 0a 09 09 09 09 09 66 6f  tmaps ""......fo
222e0 72 65 61 63 68 20 6e 61 6d 65 20 24 69 6e 61 6d  reach name $inam
222f0 65 73 20 7b 0a 09 09 09 09 09 09 69 66 20 7b 22  es {.......if {"
22300 62 69 74 6d 61 70 22 20 3d 3d 20 5b 69 6d 61 67  bitmap" == [imag
22310 65 20 74 79 70 65 20 24 6e 61 6d 65 5d 7d 20 7b  e type $name]} {
22320 0a 09 09 09 09 09 09 09 6c 61 70 70 65 6e 64 20  ........lappend 
22330 62 69 74 6d 61 70 73 20 24 7b 6e 61 6d 65 7d 0a  bitmaps ${name}.
22340 09 09 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a 09  ......}......}..
22350 09 09 09 09 69 66 20 7b 5b 73 74 72 69 6e 67 20  ....if {[string 
22360 6c 65 6e 67 74 68 20 24 7b 62 69 74 6d 61 70 73  length ${bitmaps
22370 7d 5d 7d 20 7b 0a 09 09 09 09 09 09 72 65 74 75  }]} {.......retu
22380 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
22390 4c 69 73 74 20 5c 0a 09 09 09 09 09 09 24 7b 74  List \.......${t
223a0 65 78 74 7d 20 24 7b 62 69 74 6d 61 70 73 7d 5d  ext} ${bitmaps}]
223b0 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09  ......} else {..
223c0 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73  .....return [Dis
223d0 70 6c 61 79 48 69 6e 74 73 20 3c 62 69 74 6d 61  playHints <bitma
223e0 70 73 3e 5d 0a 09 09 09 09 09 7d 0a 09 09 09 09  ps>]......}.....
223f0 7d 0a 09 09 09 09 2d 73 74 61 72 74 20 7b 20 72  }.....-start { r
22400 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
22410 6e 74 73 20 3c 64 65 67 72 65 65 73 3e 5d 20 7d  nts <degrees>] }
22420 0a 09 09 09 09 2d 73 74 79 6c 65 20 7b 20 72 65  .....-style { re
22430 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
22440 74 73 20 3c 74 79 70 65 3e 5d 20 7d 0a 09 09 09  ts <type>] }....
22450 09 2d 74 61 67 73 20 7b 20 72 65 74 75 72 6e 20  .-tags { return 
22460 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74  [DisplayHints <t
22470 61 67 4c 69 73 74 3e 5d 20 7d 0a 09 09 09 09 2d  agList>] }.....-
22480 77 69 64 74 68 20 7b 20 72 65 74 75 72 6e 20 5b  width { return [
22490 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6f 75  DisplayHints <ou
224a0 74 6c 69 6e 65 57 69 64 74 68 3e 5d 20 7d 0a 09  tlineWidth>] }..
224b0 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09  ...default {....
224c0 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
224d0 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
224e0 74 7d 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f 76  t} \......[Remov
224f0 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c  eUsedOptions ${l
22500 69 6e 65 7d 20 7b 0a 09 09 09 09 09 09 2d 65 78  ine} {.......-ex
22510 74 65 6e 74 20 2d 66 69 6c 6c 20 2d 6f 75 74 6c  tent -fill -outl
22520 69 6e 65 20 2d 6f 75 74 6c 69 6e 65 73 74 69 70  ine -outlinestip
22530 70 6c 65 0a 09 09 09 09 09 09 2d 73 74 61 72 74  ple.......-start
22540 20 2d 73 74 69 70 70 6c 65 20 2d 73 74 79 6c 65   -stipple -style
22550 20 2d 74 61 67 73 20 2d 77 69 64 74 68 0a 09 09   -tags -width...
22560 09 09 09 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09  ...}]].....}....
22570 7d 0a 09 09 7d 0a 09 09 62 69 74 6d 61 70 20 7b  }...}...bitmap {
22580 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  ....switch -- ${
22590 70 72 65 76 7d 20 7b 0a 09 09 09 09 2d 61 6e 63  prev} {.....-anc
225a0 68 6f 72 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  hor { return [Co
225b0 6d 70 6c 65 74 65 41 6e 63 68 6f 72 20 24 7b 74  mpleteAnchor ${t
225c0 65 78 74 7d 5d 20 7d 0a 09 09 09 09 2d 62 61 63  ext}] }.....-bac
225d0 6b 67 72 6f 75 6e 64 20 2d 0a 09 09 09 09 2d 66  kground -.....-f
225e0 6f 72 65 67 72 6f 75 6e 64 20 7b 20 72 65 74 75  oreground { retu
225f0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
22600 20 3c 63 6f 6c 6f 72 3e 5d 20 7d 0a 09 09 09 09   <color>] }.....
22610 2d 62 69 74 6d 61 70 20 7b 20 72 65 74 75 72 6e  -bitmap { return
22620 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 42 69   [CompleteFromBi
22630 74 6d 61 70 73 20 24 7b 74 65 78 74 7d 5d 20 7d  tmaps ${text}] }
22640 0a 09 09 09 09 2d 74 61 67 73 20 7b 20 72 65 74  .....-tags { ret
22650 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
22660 73 20 3c 74 61 67 4c 69 73 74 3e 5d 20 7d 0a 09  s <tagList>] }..
22670 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09  ...default {....
22680 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
22690 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
226a0 74 7d 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f 76  t} \......[Remov
226b0 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c  eUsedOptions ${l
226c0 69 6e 65 7d 20 7b 0a 09 09 09 09 09 09 2d 61 6e  ine} {.......-an
226d0 63 68 6f 72 20 2d 62 61 63 6b 67 72 6f 75 6e 64  chor -background
226e0 20 2d 62 69 74 6d 61 70 0a 09 09 09 09 09 09 2d   -bitmap.......-
226f0 66 6f 72 65 67 72 6f 75 6e 64 20 2d 74 61 67 73  foreground -tags
22700 0a 09 09 09 09 09 7d 5d 5d 0a 09 09 09 09 7d 0a  ......}]].....}.
22710 09 09 09 7d 0a 09 09 7d 0a 09 09 69 6d 61 67 65  ...}...}...image
22720 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
22730 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09 2d 61  ${prev} {.....-a
22740 6e 63 68 6f 72 20 7b 20 72 65 74 75 72 6e 20 5b  nchor { return [
22750 43 6f 6d 70 6c 65 74 65 41 6e 63 68 6f 72 20 24  CompleteAnchor $
22760 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09 09 2d 69  {text}] }.....-i
22770 6d 61 67 65 20 7b 20 72 65 74 75 72 6e 20 5b 43  mage { return [C
22780 6f 6d 70 6c 65 74 65 46 72 6f 6d 49 6d 61 67 65  ompleteFromImage
22790 73 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09  s ${text}] }....
227a0 09 2d 74 61 67 73 20 7b 20 72 65 74 75 72 6e 20  .-tags { return 
227b0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74  [DisplayHints <t
227c0 61 67 4c 69 73 74 3e 5d 20 7d 0a 09 09 09 09 64  agList>] }.....d
227d0 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 72 65  efault {......re
227e0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
227f0 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c  omList ${text} \
22800 0a 09 09 09 09 09 5b 52 65 6d 6f 76 65 55 73 65  ......[RemoveUse
22810 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d  dOptions ${line}
22820 20 7b 0a 09 09 09 09 09 09 2d 61 6e 63 68 6f 72   {.......-anchor
22830 20 2d 69 6d 61 67 65 20 2d 74 61 67 73 0a 09 09   -image -tags...
22840 09 09 09 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09  ...}]].....}....
22850 7d 0a 09 09 7d 0a 09 09 6c 69 6e 65 20 7b 0a 09  }...}...line {..
22860 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72  ..switch -- ${pr
22870 65 76 7d 20 7b 0a 09 09 09 09 2d 61 72 72 6f 77  ev} {.....-arrow
22880 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
22890 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
228a0 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 09   ${text} {......
228b0 09 6e 6f 6e 65 20 66 69 72 73 74 20 6c 61 73 74  .none first last
228c0 20 62 6f 74 68 0a 09 09 09 09 09 7d 5d 0a 09 09   both......}]...
228d0 09 09 7d 0a 09 09 09 09 2d 61 72 72 6f 77 73 68  ..}.....-arrowsh
228e0 61 70 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ape { return [Di
228f0 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 68 61 70  splayHints <shap
22900 65 3e 5d 20 7d 0a 09 09 09 09 2d 63 61 70 73 74  e>] }.....-capst
22910 79 6c 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72  yle {......retur
22920 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
22930 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09  ist ${text} {...
22940 09 09 09 09 62 75 74 74 20 70 72 6f 6a 65 63 74  ....butt project
22950 69 6e 67 20 72 6f 75 6e 64 0a 09 09 09 09 09 7d  ing round......}
22960 5d 0a 09 09 09 09 7d 0a 09 09 09 09 2d 66 69 6c  ].....}.....-fil
22970 6c 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  l { return [Disp
22980 6c 61 79 48 69 6e 74 73 20 3c 63 6f 6c 6f 72 3e  layHints <color>
22990 5d 20 7d 0a 09 09 09 09 2d 6a 6f 69 6e 73 74 79  ] }.....-joinsty
229a0 6c 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  le {......return
229b0 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
229c0 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09  st ${text} {....
229d0 09 09 09 62 65 76 65 6c 20 6d 69 74 65 72 20 72  ...bevel miter r
229e0 6f 75 6e 64 0a 09 09 09 09 09 7d 5d 0a 09 09 09  ound......}]....
229f0 09 7d 0a 09 09 09 09 2d 73 6d 6f 6f 74 68 20 7b  .}.....-smooth {
22a00 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
22a10 65 42 6f 6f 6c 65 61 6e 20 24 7b 74 65 78 74 7d  eBoolean ${text}
22a20 5d 20 7d 0a 09 09 09 09 2d 73 70 6c 69 6e 65 73  ] }.....-splines
22a30 74 65 70 73 20 7b 20 72 65 74 75 72 6e 20 5b 44  teps { return [D
22a40 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6e 75 6d  isplayHints <num
22a50 62 65 72 3e 5d 20 7d 0a 09 09 09 09 2d 73 74 69  ber>] }.....-sti
22a60 70 70 6c 65 20 7b 20 72 65 74 75 72 6e 20 5b 43  pple { return [C
22a70 6f 6d 70 6c 65 74 65 46 72 6f 6d 42 69 74 6d 61  ompleteFromBitma
22a80 70 73 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09  ps ${text}] }...
22a90 09 09 2d 74 61 67 73 20 7b 20 72 65 74 75 72 6e  ..-tags { return
22aa0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
22ab0 74 61 67 4c 69 73 74 3e 5d 20 7d 0a 09 09 09 09  tagList>] }.....
22ac0 2d 77 69 64 74 68 20 7b 20 72 65 74 75 72 6e 20  -width { return 
22ad0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c  [DisplayHints <l
22ae0 69 6e 65 57 69 64 74 68 3e 5d 20 7d 0a 09 09 09  ineWidth>] }....
22af0 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09  .default {......
22b00 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
22b10 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
22b20 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f 76 65 55   \......[RemoveU
22b30 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e  sedOptions ${lin
22b40 65 7d 20 7b 0a 09 09 09 09 09 09 2d 61 72 72 6f  e} {.......-arro
22b50 77 20 2d 61 72 72 6f 77 73 68 61 70 65 20 2d 63  w -arrowshape -c
22b60 61 70 73 74 79 6c 65 20 2d 66 69 6c 6c 20 2d 6a  apstyle -fill -j
22b70 6f 69 6e 73 74 79 6c 65 0a 09 09 09 09 09 09 2d  oinstyle.......-
22b80 73 6d 6f 6f 74 68 20 2d 73 70 6c 69 6e 65 73 74  smooth -splinest
22b90 65 70 73 20 2d 73 74 69 70 70 6c 65 20 2d 74 61  eps -stipple -ta
22ba0 67 73 20 2d 77 69 64 74 68 0a 09 09 09 09 09 7d  gs -width......}
22bb0 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09  ]].....}....}...
22bc0 7d 0a 09 09 6f 76 61 6c 20 7b 0a 09 09 09 73 77  }...oval {....sw
22bd0 69 74 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20  itch -- ${prev} 
22be0 7b 0a 09 09 09 09 2d 66 69 6c 6c 20 2d 0a 09 09  {.....-fill -...
22bf0 09 09 2d 6f 75 74 6c 69 6e 65 20 7b 20 72 65 74  ..-outline { ret
22c00 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
22c10 73 20 3c 63 6f 6c 6f 72 3e 5d 20 7d 0a 09 09 09  s <color>] }....
22c20 09 2d 73 74 69 70 70 6c 65 20 7b 20 72 65 74 75  .-stipple { retu
22c30 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
22c40 42 69 74 6d 61 70 73 20 24 7b 74 65 78 74 7d 5d  Bitmaps ${text}]
22c50 20 7d 0a 09 09 09 09 2d 74 61 67 73 20 7b 20 72   }.....-tags { r
22c60 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
22c70 6e 74 73 20 3c 74 61 67 4c 69 73 74 3e 5d 20 7d  nts <tagList>] }
22c80 0a 09 09 09 09 2d 77 69 64 74 68 20 7b 20 72 65  .....-width { re
22c90 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
22ca0 74 73 20 3c 6c 69 6e 65 57 69 64 74 68 3e 5d 20  ts <lineWidth>] 
22cb0 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a  }.....default {.
22cc0 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
22cd0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
22ce0 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b 52 65  text} \......[Re
22cf0 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20  moveUsedOptions 
22d00 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 09 09  ${line} {.......
22d10 2d 66 69 6c 6c 20 2d 6f 75 74 6c 69 6e 65 20 2d  -fill -outline -
22d20 73 74 69 70 70 6c 65 20 2d 74 61 67 73 20 2d 77  stipple -tags -w
22d30 69 64 74 68 0a 09 09 09 09 09 7d 5d 5d 0a 09 09  idth......}]]...
22d40 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 70  ..}....}...}...p
22d50 6f 6c 79 67 6f 6e 20 7b 0a 09 09 09 73 77 69 74  olygon {....swit
22d60 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a  ch -- ${prev} {.
22d70 09 09 09 09 2d 66 69 6c 6c 20 2d 0a 09 09 09 09  ....-fill -.....
22d80 2d 6f 75 74 6c 69 6e 65 20 7b 20 72 65 74 75 72  -outline { retur
22d90 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
22da0 3c 63 6f 6c 6f 72 3e 5d 20 7d 0a 09 09 09 09 2d  <color>] }.....-
22db0 73 6d 6f 6f 74 68 20 7b 20 72 65 74 75 72 6e 20  smooth { return 
22dc0 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e  [CompleteBoolean
22dd0 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09 09   ${text}] }.....
22de0 2d 73 70 6c 69 6e 65 73 74 65 70 73 20 7b 20 72  -splinesteps { r
22df0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
22e00 6e 74 73 20 3c 6e 75 6d 62 65 72 3e 5d 20 7d 0a  nts <number>] }.
22e10 09 09 09 09 2d 73 74 69 70 70 6c 65 20 7b 20 72  ....-stipple { r
22e20 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
22e30 72 6f 6d 42 69 74 6d 61 70 73 20 24 7b 74 65 78  romBitmaps ${tex
22e40 74 7d 5d 20 7d 0a 09 09 09 09 2d 74 61 67 73 20  t}] }.....-tags 
22e50 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
22e60 79 48 69 6e 74 73 20 3c 74 61 67 4c 69 73 74 3e  yHints <tagList>
22e70 5d 20 7d 0a 09 09 09 09 2d 77 69 64 74 68 20 7b  ] }.....-width {
22e80 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
22e90 48 69 6e 74 73 20 3c 6f 75 74 6c 69 6e 65 57 69  Hints <outlineWi
22ea0 64 74 68 3e 5d 20 7d 0a 09 09 09 09 64 65 66 61  dth>] }.....defa
22eb0 75 6c 74 20 7b 0a 09 09 09 09 09 72 65 74 75 72  ult {......retur
22ec0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
22ed0 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09  ist ${text} \...
22ee0 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70  ...[RemoveUsedOp
22ef0 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b 0a  tions ${line} {.
22f00 09 09 09 09 09 09 2d 66 69 6c 6c 20 2d 6f 75 74  ......-fill -out
22f10 6c 69 6e 65 20 2d 73 6d 6f 6f 74 68 20 2d 73 70  line -smooth -sp
22f20 6c 69 6e 65 73 74 65 70 73 0a 09 09 09 09 09 09  linesteps.......
22f30 2d 73 74 69 70 70 6c 65 20 2d 74 61 67 73 20 2d  -stipple -tags -
22f40 77 69 64 74 68 0a 09 09 09 09 09 7d 5d 5d 0a 09  width......}]]..
22f50 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  ...}....}...}...
22f60 72 65 63 74 61 6e 67 6c 65 20 7b 0a 09 09 09 73  rectangle {....s
22f70 77 69 74 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d  witch -- ${prev}
22f80 20 7b 0a 09 09 09 09 2d 66 69 6c 6c 20 2d 0a 09   {.....-fill -..
22f90 09 09 09 2d 6f 75 74 6c 69 6e 65 20 7b 20 72 65  ...-outline { re
22fa0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
22fb0 74 73 20 3c 63 6f 6c 6f 72 3e 5d 20 7d 0a 09 09  ts <color>] }...
22fc0 09 09 2d 73 74 69 70 70 6c 65 20 7b 20 72 65 74  ..-stipple { ret
22fd0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
22fe0 6d 42 69 74 6d 61 70 73 20 24 7b 74 65 78 74 7d  mBitmaps ${text}
22ff0 5d 20 7d 0a 09 09 09 09 2d 74 61 67 73 20 7b 20  ] }.....-tags { 
23000 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
23010 69 6e 74 73 20 3c 74 61 67 4c 69 73 74 3e 5d 20  ints <tagList>] 
23020 7d 0a 09 09 09 09 2d 77 69 64 74 68 20 7b 20 72  }.....-width { r
23030 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
23040 6e 74 73 20 3c 6c 69 6e 65 57 69 64 74 68 3e 5d  nts <lineWidth>]
23050 20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b   }.....default {
23060 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
23070 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
23080 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b 52  {text} \......[R
23090 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
230a0 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 09   ${line} {......
230b0 09 2d 66 69 6c 6c 20 2d 6f 75 74 6c 69 6e 65 20  .-fill -outline 
230c0 2d 73 74 69 70 70 6c 65 20 2d 74 61 67 73 20 2d  -stipple -tags -
230d0 77 69 64 74 68 0a 09 09 09 09 09 7d 5d 5d 0a 09  width......}]]..
230e0 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  ...}....}...}...
230f0 74 65 78 74 20 7b 0a 09 09 09 73 77 69 74 63 68  text {....switch
23100 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09   -- ${prev} {...
23110 09 09 2d 61 6e 63 68 6f 72 20 7b 20 72 65 74 75  ..-anchor { retu
23120 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 41 6e 63 68  rn [CompleteAnch
23130 6f 72 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09  or ${text}] }...
23140 09 09 2d 66 69 6c 6c 20 7b 20 72 65 74 75 72 6e  ..-fill { return
23150 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
23160 63 6f 6c 6f 72 3e 5d 20 7d 0a 09 09 09 09 2d 66  color>] }.....-f
23170 6f 6e 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ont { return [Di
23180 73 70 6c 61 79 48 69 6e 74 73 20 3c 66 6f 6e 74  splayHints <font
23190 3e 5d 20 7d 0a 09 09 09 09 2d 6a 75 73 74 69 66  >] }.....-justif
231a0 79 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  y { return [Comp
231b0 6c 65 74 65 4a 75 73 74 69 66 79 20 24 7b 74 65  leteJustify ${te
231c0 78 74 7d 5d 20 7d 0a 09 09 09 09 2d 73 74 69 70  xt}] }.....-stip
231d0 70 6c 65 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  ple { return [Co
231e0 6d 70 6c 65 74 65 46 72 6f 6d 42 69 74 6d 61 70  mpleteFromBitmap
231f0 73 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09  s ${text}] }....
23200 09 2d 74 61 67 73 20 7b 20 72 65 74 75 72 6e 20  .-tags { return 
23210 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74  [DisplayHints <t
23220 61 67 4c 69 73 74 3e 5d 20 7d 0a 09 09 09 09 2d  agList>] }.....-
23230 74 65 78 74 20 7b 20 72 65 74 75 72 6e 20 5b 44  text { return [D
23240 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 72  isplayHints <str
23250 69 6e 67 3e 5d 20 7d 0a 09 09 09 09 2d 77 69 64  ing>] }.....-wid
23260 74 68 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  th { return [Dis
23270 70 6c 61 79 48 69 6e 74 73 20 3c 6c 69 6e 65 4c  playHints <lineL
23280 65 6e 67 74 68 3e 5d 20 7d 0a 09 09 09 09 64 65  ength>] }.....de
23290 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 72 65 74  fault {......ret
232a0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
232b0 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a  mList ${text} \.
232c0 09 09 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64  .....[RemoveUsed
232d0 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20  Options ${line} 
232e0 7b 0a 09 09 09 09 09 09 2d 61 6e 63 68 6f 72 20  {.......-anchor 
232f0 2d 66 69 6c 6c 20 2d 66 6f 6e 74 20 2d 6a 75 73  -fill -font -jus
23300 74 69 66 79 0a 09 09 09 09 09 09 2d 73 74 69 70  tify.......-stip
23310 70 6c 65 20 2d 74 61 67 73 20 2d 74 65 78 74 20  ple -tags -text 
23320 2d 77 69 64 74 68 0a 09 09 09 09 09 7d 5d 5d 0a  -width......}]].
23330 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  ....}....}...}..
23340 09 77 69 6e 64 6f 77 20 7b 0a 09 09 09 73 77 69  .window {....swi
23350 74 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b  tch -- ${prev} {
23360 0a 09 09 09 09 2d 61 6e 63 68 6f 72 20 7b 20 72  .....-anchor { r
23370 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 41  eturn [CompleteA
23380 6e 63 68 6f 72 20 24 7b 74 65 78 74 7d 5d 20 7d  nchor ${text}] }
23390 0a 09 09 09 09 2d 68 65 69 67 68 74 20 7b 20 72  .....-height { r
233a0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
233b0 6e 74 73 20 3c 70 69 78 65 6c 73 3e 5d 20 7d 0a  nts <pixels>] }.
233c0 09 09 09 09 2d 74 61 67 73 20 7b 20 72 65 74 75  ....-tags { retu
233d0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
233e0 20 3c 74 61 67 4c 69 73 74 3e 5d 20 7d 0a 09 09   <tagList>] }...
233f0 09 09 2d 77 69 64 74 68 20 7b 20 72 65 74 75 72  ..-width { retur
23400 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
23410 3c 6c 69 6e 65 57 69 64 74 68 3e 5d 20 7d 0a 09  <lineWidth>] }..
23420 09 09 09 2d 77 69 6e 64 6f 77 20 7b 0a 09 09 09  ...-window {....
23430 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f  ..return [TryFro
23440 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 57  mList ${text} [W
23450 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b  idgetChildren ${
23460 74 65 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09  text}]].....}...
23470 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09  ..default {.....
23480 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
23490 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
234a0 7d 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f 76 65  } \......[Remove
234b0 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69  UsedOptions ${li
234c0 6e 65 7d 20 7b 0a 09 09 09 09 09 09 2d 61 6e 63  ne} {.......-anc
234d0 68 6f 72 20 2d 68 65 69 67 68 74 20 2d 74 61 67  hor -height -tag
234e0 73 20 2d 77 69 64 74 68 20 2d 77 69 6e 64 6f 77  s -width -window
234f0 0a 09 09 09 09 09 7d 5d 5d 0a 09 09 09 09 7d 0a  ......}]].....}.
23500 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 23  ...}...}..}.}..#
23510 2a 2a 0a 23 20 57 69 64 67 65 74 58 76 69 65 77  **.# WidgetXview
23520 59 76 69 65 77 0a 23 20 0a 23 20 40 70 61 72 61  Yview.# .# @para
23530 6d 20 20 20 20 74 65 78 74 20 20 2d 2d 20 74 68  m    text  -- th
23540 65 20 77 6f 72 64 20 74 6f 20 63 6f 6d 70 6c 65  e word to comple
23550 74 65 2e 0a 23 20 40 70 61 72 61 6d 20 20 20 20  te..# @param    
23560 6c 69 6e 65 20 20 2d 2d 20 74 68 65 20 6c 69 6e  line  -- the lin
23570 65 20 67 61 74 68 65 72 65 64 20 73 6f 20 66 61  e gathered so fa
23580 72 2e 0a 23 20 40 70 61 72 61 6d 20 20 20 20 70  r..# @param    p
23590 6f 73 20 20 20 2d 2d 20 74 68 65 20 63 75 72 72  os   -- the curr
235a0 65 6e 74 20 77 6f 72 64 20 70 6f 73 69 74 69 6f  ent word positio
235b0 6e 2e 0a 23 20 40 70 61 72 61 6d 20 20 20 20 70  n..# @param    p
235c0 72 65 76 20 20 2d 2d 20 74 68 65 20 70 72 65 76  rev  -- the prev
235d0 69 6f 75 73 20 77 6f 72 64 2e 0a 23 20 40 72 65  ious word..# @re
235e0 74 75 72 6e 20 20 20 61 20 73 74 64 20 74 63 6c  turn   a std tcl
235f0 72 65 61 64 6c 69 6e 65 20 66 6f 72 6d 61 74 74  readline formatt
23600 65 64 20 63 6f 6d 70 6c 65 74 65 72 20 73 74 72  ed completer str
23610 69 6e 67 2e 0a 23 20 40 73 61 20 20 20 20 20 20  ing..# @sa      
23620 20 43 61 6e 76 61 73 4f 62 6a 2c 20 45 6e 74 72   CanvasObj, Entr
23630 79 4f 62 6a 0a 23 20 40 64 61 74 65 20 20 20 20  yObj.# @date    
23640 20 53 65 70 2d 31 38 2d 31 39 39 39 0a 23 0a 70   Sep-18-1999.#.p
23650 72 6f 63 20 57 69 64 67 65 74 58 76 69 65 77 59  roc WidgetXviewY
23660 76 69 65 77 20 7b 74 65 78 74 20 6c 69 6e 65 20  view {text line 
23670 70 6f 73 20 70 72 65 76 7d 20 7b 0a 09 73 77 69  pos prev} {..swi
23680 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a  tch -- ${pos} {.
23690 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  ..2 { return [Co
236a0 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
236b0 7b 74 65 78 74 7d 20 7b 3c 69 6e 64 65 78 3e 20  {text} {<index> 
236c0 6d 6f 76 65 74 6f 20 73 63 72 6f 6c 6c 7d 5d 20  moveto scroll}] 
236d0 7d 0a 09 09 33 20 7b 0a 09 09 09 73 77 69 74 63  }...3 {....switc
236e0 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09  h -- ${prev} {..
236f0 09 09 09 6d 6f 76 65 74 6f 20 7b 20 72 65 74 75  ...moveto { retu
23700 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
23710 20 3c 66 72 61 63 74 69 6f 6e 3e 5d 20 7d 0a 09   <fraction>] }..
23720 09 09 09 73 63 72 6f 6c 6c 20 7b 20 72 65 74 75  ...scroll { retu
23730 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
23740 20 3c 6e 75 6d 62 65 72 3e 5d 20 7d 0a 09 09 09   <number>] }....
23750 7d 0a 09 09 7d 0a 09 09 34 20 7b 0a 09 09 09 73  }...}...4 {....s
23760 65 74 20 73 75 62 63 6d 64 20 5b 4c 69 6e 64 65  et subcmd [Linde
23770 78 20 24 7b 6c 69 6e 65 7d 20 32 5d 0a 09 09 09  x ${line} 2]....
23780 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 63  switch -- ${subc
23790 6d 64 7d 20 7b 0a 09 09 09 09 73 63 72 6f 6c 6c  md} {.....scroll
237a0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
237b0 61 79 48 69 6e 74 73 20 3c 77 68 61 74 3e 5d 20  ayHints <what>] 
237c0 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a  }....}...}..}.}.
237d0 0a 23 2a 2a 0a 23 20 57 69 64 67 65 74 53 63 61  .#**.# WidgetSca
237e0 6e 0a 23 20 0a 23 20 40 70 61 72 61 6d 20 20 20  n.# .# @param   
237f0 20 74 65 78 74 20 20 2d 2d 20 74 68 65 20 77 6f   text  -- the wo
23800 72 64 20 74 6f 20 63 6f 6d 70 6c 65 74 65 2e 0a  rd to complete..
23810 23 20 40 70 61 72 61 6d 20 20 20 20 70 6f 73 20  # @param    pos 
23820 20 20 2d 2d 20 74 68 65 20 63 75 72 72 65 6e 74    -- the current
23830 20 77 6f 72 64 20 70 6f 73 69 74 69 6f 6e 2e 0a   word position..
23840 23 20 40 72 65 74 75 72 6e 20 20 20 61 20 73 74  # @return   a st
23850 64 20 74 63 6c 72 65 61 64 6c 69 6e 65 20 66 6f  d tclreadline fo
23860 72 6d 61 74 74 65 64 20 63 6f 6d 70 6c 65 74 65  rmatted complete
23870 72 20 73 74 72 69 6e 67 2e 0a 23 20 40 73 61 20  r string..# @sa 
23880 20 20 20 20 20 20 43 61 6e 76 61 73 4f 62 6a 2c        CanvasObj,
23890 20 45 6e 74 72 79 4f 62 6a 0a 23 20 40 64 61 74   EntryObj.# @dat
238a0 65 20 20 20 20 20 53 65 70 2d 31 38 2d 31 39 39  e     Sep-18-199
238b0 39 0a 23 0a 70 72 6f 63 20 57 69 64 67 65 74 53  9.#.proc WidgetS
238c0 63 61 6e 20 7b 74 65 78 74 20 70 6f 73 7d 20 7b  can {text pos} {
238d0 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
238e0 73 7d 20 7b 0a 09 09 32 20 7b 20 72 65 74 75 72  s} {...2 { retur
238f0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
23900 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 6d 61 72  ist ${text} {mar
23910 6b 20 64 72 61 67 74 6f 7d 5d 20 7d 0a 09 09 33  k dragto}] }...3
23920 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
23930 61 79 48 69 6e 74 73 20 3c 78 3e 5d 20 7d 0a 09  ayHints <x>] }..
23940 09 34 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .4 { return [Dis
23950 70 6c 61 79 48 69 6e 74 73 20 3c 79 3e 5d 20 7d  playHints <y>] }
23960 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 43 61 6e 76  ..}.}..proc Canv
23970 61 73 4f 62 6a 20 7b 74 65 78 74 20 73 74 61 72  asObj {text star
23980 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 7d 20  t end line pos} 
23990 7b 0a 09 73 65 74 20 73 75 62 20 5b 4c 69 6e 64  {..set sub [Lind
239a0 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73  ex ${line} 1]..s
239b0 65 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75  et prev [Previou
239c0 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24  sWord ${start} $
239d0 7b 6c 69 6e 65 7d 5d 0a 09 69 66 20 7b 31 20 3d  {line}]..if {1 =
239e0 3d 20 24 70 6f 73 7d 20 7b 0a 09 09 72 65 74 75  = $pos} {...retu
239f0 72 6e 20 5b 54 72 79 53 75 62 43 6d 64 73 20 24  rn [TrySubCmds $
23a00 7b 74 65 78 74 7d 20 5b 4c 69 6e 64 65 78 20 24  {text} [Lindex $
23a10 7b 6c 69 6e 65 7d 20 30 5d 5d 0a 09 7d 0a 09 73  {line} 0]]..}..s
23a20 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20  witch -- ${sub} 
23a30 7b 0a 09 09 61 64 64 74 61 67 20 7b 0a 09 09 09  {...addtag {....
23a40 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d  switch -- ${pos}
23a50 20 7b 0a 09 09 09 09 32 20 7b 20 72 65 74 75 72   {.....2 { retur
23a60 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
23a70 3c 74 61 67 3e 5d 20 7d 0a 09 09 09 09 33 20 7b  <tag>] }.....3 {
23a80 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
23a90 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
23aa0 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 09 09 61  {text} {.......a
23ab0 62 6f 76 65 20 61 6c 6c 20 62 65 6c 6f 77 20 63  bove all below c
23ac0 6c 6f 73 65 73 74 20 65 6e 63 6c 6f 73 65 64 0a  losest enclosed.
23ad0 09 09 09 09 09 09 6f 76 65 72 6c 61 70 70 69 6e  ......overlappin
23ae0 67 20 77 69 74 68 74 61 67 0a 09 09 09 09 09 7d  g withtag......}
23af0 5d 0a 09 09 09 09 7d 0a 09 09 09 09 64 65 66 61  ].....}.....defa
23b00 75 6c 74 20 7b 0a 09 09 09 09 09 73 65 74 20 73  ult {......set s
23b10 65 61 72 63 68 20 5b 4c 69 6e 64 65 78 20 24 7b  earch [Lindex ${
23b20 6c 69 6e 65 7d 20 33 5d 0a 09 09 09 09 09 73 77  line} 3]......sw
23b30 69 74 63 68 20 2d 2d 20 24 7b 73 65 61 72 63 68  itch -- ${search
23b40 7d 20 7b 0a 09 09 09 09 09 09 61 6c 6c 20 7b 7d  } {.......all {}
23b50 0a 09 09 09 09 09 09 61 62 6f 76 65 20 2d 0a 09  .......above -..
23b60 09 09 09 09 09 77 69 74 68 74 61 67 20 2d 0a 09  .....withtag -..
23b70 09 09 09 09 09 62 65 6c 6f 77 20 7b 20 72 65 74  .....below { ret
23b80 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
23b90 73 20 3c 74 61 67 4f 72 49 64 3e 5d 20 7d 0a 09  s <tagOrId>] }..
23ba0 09 09 09 09 09 63 6c 6f 73 65 73 74 20 7b 0a 09  .....closest {..
23bb0 09 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20  ......switch -- 
23bc0 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 09 09 09  ${pos} {........
23bd0 09 34 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .4 { return [Dis
23be0 70 6c 61 79 48 69 6e 74 73 20 3c 78 3e 5d 20 7d  playHints <x>] }
23bf0 0a 09 09 09 09 09 09 09 09 35 20 7b 20 72 65 74  .........5 { ret
23c00 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
23c10 73 20 3c 79 3e 5d 20 7d 0a 09 09 09 09 09 09 09  s <y>] }........
23c20 09 36 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .6 { return [Dis
23c30 70 6c 61 79 48 69 6e 74 73 20 3f 68 61 6c 6f 3f  playHints ?halo?
23c40 5d 20 7d 0a 09 09 09 09 09 09 09 09 37 20 7b 20  ] }.........7 { 
23c50 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
23c60 69 6e 74 73 20 3f 73 74 61 72 74 3f 5d 20 7d 0a  ints ?start?] }.
23c70 09 09 09 09 09 09 09 7d 0a 09 09 09 09 09 09 7d  .......}.......}
23c80 0a 09 09 09 09 09 09 65 6e 63 6c 6f 73 65 64 20  .......enclosed 
23c90 2d 0a 09 09 09 09 09 09 6f 76 65 72 6c 61 70 70  -.......overlapp
23ca0 69 6e 67 20 7b 0a 09 09 09 09 09 09 09 73 77 69  ing {........swi
23cb0 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a  tch -- ${pos} {.
23cc0 09 09 09 09 09 09 09 09 34 20 7b 20 72 65 74 75  ........4 { retu
23cd0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
23ce0 20 3c 78 31 3e 5d 20 7d 0a 09 09 09 09 09 09 09   <x1>] }........
23cf0 09 35 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .5 { return [Dis
23d00 70 6c 61 79 48 69 6e 74 73 20 3c 79 31 3e 5d 20  playHints <y1>] 
23d10 7d 0a 09 09 09 09 09 09 09 09 36 20 7b 20 72 65  }.........6 { re
23d20 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
23d30 74 73 20 3c 78 32 3e 5d 20 7d 0a 09 09 09 09 09  ts <x2>] }......
23d40 09 09 09 37 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...7 { return [D
23d50 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 79 32 3e  isplayHints <y2>
23d60 5d 20 7d 0a 09 09 09 09 09 09 09 7d 0a 09 09 09  ] }........}....
23d70 09 09 09 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09  ...}......}.....
23d80 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 62 62 6f  }....}...}...bbo
23d90 78 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d  x {....switch --
23da0 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32 20   ${pos} {.....2 
23db0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
23dc0 79 48 69 6e 74 73 20 3c 74 61 67 4f 72 49 64 3e  yHints <tagOrId>
23dd0 5d 20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20  ] }.....default 
23de0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
23df0 79 48 69 6e 74 73 20 3f 74 61 67 4f 72 49 64 3f  yHints ?tagOrId?
23e00 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 62  ] }....}...}...b
23e10 69 6e 64 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ind {....switch 
23e20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09  -- ${pos} {.....
23e30 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  2 { return [Disp
23e40 6c 61 79 48 69 6e 74 73 20 3c 74 61 67 4f 72 49  layHints <tagOrI
23e50 64 3e 5d 20 7d 0a 09 09 09 09 33 20 7b 0a 09 09  d>] }.....3 {...
23e60 09 09 09 73 65 74 20 66 75 6c 6c 74 65 78 74 20  ...set fulltext 
23e70 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20  [Lindex ${line} 
23e80 33 5d 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b  3]......return [
23e90 43 6f 6d 70 6c 65 74 65 53 65 71 75 65 6e 63 65  CompleteSequence
23ea0 20 24 7b 74 65 78 74 7d 20 24 7b 66 75 6c 6c 74   ${text} ${fullt
23eb0 65 78 74 7d 5d 0a 09 09 09 09 09 23 20 72 65 74  ext}]......# ret
23ec0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
23ed0 73 20 3f 73 65 71 75 65 6e 63 65 3f 5d 0a 09 09  s ?sequence?]...
23ee0 09 09 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20  ..}.....default 
23ef0 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 42  {......return [B
23f00 72 61 63 65 4f 72 43 6f 6d 6d 61 6e 64 20 24 7b  raceOrCommand ${
23f10 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 24 7b 73  text} \......${s
23f20 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20 24 7b 6c  tart} ${end} ${l
23f30 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 24 7b 74 65  ine} ${pos} ${te
23f40 78 74 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a  xt}].....}....}.
23f50 09 09 7d 0a 09 09 63 61 6e 76 61 73 78 20 7b 0a  ..}...canvasx {.
23f60 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  ...switch -- ${p
23f70 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b 20 72 65  os} {.....2 { re
23f80 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
23f90 74 73 20 3c 73 63 72 65 65 6e 78 3e 5d 20 7d 0a  ts <screenx>] }.
23fa0 09 09 09 09 33 20 7b 20 72 65 74 75 72 6e 20 5b  ....3 { return [
23fb0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 67 72  DisplayHints ?gr
23fc0 69 64 73 70 61 63 69 6e 67 3f 5d 20 7d 0a 09 09  idspacing?] }...
23fd0 09 7d 0a 09 09 7d 0a 09 09 63 61 6e 76 61 73 79  .}...}...canvasy
23fe0 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
23ff0 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b  ${pos} {.....2 {
24000 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
24010 48 69 6e 74 73 20 3c 73 63 72 65 65 6e 79 3e 5d  Hints <screeny>]
24020 20 7d 0a 09 09 09 09 33 20 7b 20 72 65 74 75 72   }.....3 { retur
24030 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
24040 3f 67 72 69 64 73 70 61 63 69 6e 67 3f 5d 20 7d  ?gridspacing?] }
24050 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 63 6f 6f 72  ....}...}...coor
24060 64 73 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  ds {....switch -
24070 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32  - ${pos} {.....2
24080 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
24090 61 79 48 69 6e 74 73 20 3c 74 61 67 4f 72 49 64  ayHints <tagOrId
240a0 3e 5d 20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74  >] }.....default
240b0 20 7b 0a 09 09 09 09 09 73 77 69 74 63 68 20 5b   {......switch [
240c0 65 78 70 72 20 24 7b 70 6f 73 7d 20 25 20 32 5d  expr ${pos} % 2]
240d0 20 7b 0a 09 09 09 09 09 09 31 20 7b 20 72 65 74   {.......1 { ret
240e0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
240f0 73 20 3f 78 3f 5d 20 7d 0a 09 09 09 09 09 09 30  s ?x?] }.......0
24100 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
24110 61 79 48 69 6e 74 73 20 3f 79 3f 5d 20 7d 0a 09  ayHints ?y?] }..
24120 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 7d  ....}.....}....}
24130 0a 09 09 7d 0a 09 09 64 63 68 61 72 73 20 7b 0a  ...}...dchars {.
24140 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  ...switch -- ${p
24150 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b 20 72 65  os} {.....2 { re
24160 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
24170 74 73 20 3c 74 61 67 4f 72 49 64 3e 5d 20 7d 0a  ts <tagOrId>] }.
24180 09 09 09 09 33 20 7b 20 72 65 74 75 72 6e 20 5b  ....3 { return [
24190 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 66 69  DisplayHints <fi
241a0 72 73 74 3e 5d 20 7d 0a 09 09 09 09 34 20 7b 20  rst>] }.....4 { 
241b0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
241c0 69 6e 74 73 20 3f 6c 61 73 74 3f 5d 20 7d 0a 09  ints ?last?] }..
241d0 09 09 7d 0a 09 09 7d 0a 09 09 64 65 6c 65 74 65  ..}...}...delete
241e0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
241f0 61 79 48 69 6e 74 73 20 3f 74 61 67 4f 72 49 64  ayHints ?tagOrId
24200 3f 5d 20 7d 0a 09 09 64 74 61 67 20 7b 0a 09 09  ?] }...dtag {...
24210 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73  .switch -- ${pos
24220 7d 20 7b 0a 09 09 09 09 32 20 7b 20 72 65 74 75  } {.....2 { retu
24230 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
24240 20 3c 74 61 67 4f 72 49 64 3e 5d 20 7d 0a 09 09   <tagOrId>] }...
24250 09 09 33 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..3 { return [Di
24260 73 70 6c 61 79 48 69 6e 74 73 20 3f 74 61 67 54  splayHints ?tagT
24270 6f 44 65 6c 65 74 65 3f 5d 20 7d 0a 09 09 09 7d  oDelete?] }....}
24280 0a 09 09 7d 0a 09 09 66 69 6e 64 20 7b 0a 09 09  ...}...find {...
24290 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73  .switch -- ${pos
242a0 7d 20 7b 0a 09 09 09 09 32 20 7b 0a 09 09 09 09  } {.....2 {.....
242b0 09 72 65 74 75 72 6e 20 5b 54 72 79 53 75 62 43  .return [TrySubC
242c0 6d 64 73 20 24 7b 74 65 78 74 7d 20 5b 4c 72 61  mds ${text} [Lra
242d0 6e 67 65 20 24 7b 6c 69 6e 65 7d 20 30 20 31 5d  nge ${line} 0 1]
242e0 5d 0a 09 09 09 09 7d 0a 09 09 09 09 64 65 66 61  ].....}.....defa
242f0 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ult { return [Di
24300 73 70 6c 61 79 48 69 6e 74 73 20 3f 61 72 67 3f  splayHints ?arg?
24310 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 66  ] }....}...}...f
24320 6f 63 75 73 20 7b 0a 09 09 09 73 77 69 74 63 68  ocus {....switch
24330 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09   -- ${pos} {....
24340 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .2 { return [Dis
24350 70 6c 61 79 48 69 6e 74 73 20 3f 74 61 67 4f 72  playHints ?tagOr
24360 49 64 3f 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a  Id?] }....}...}.
24370 09 09 67 65 74 74 61 67 73 20 7b 0a 09 09 09 73  ..gettags {....s
24380 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
24390 7b 0a 09 09 09 09 32 20 7b 20 72 65 74 75 72 6e  {.....2 { return
243a0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
243b0 74 61 67 4f 72 49 64 3e 5d 20 7d 0a 09 09 09 7d  tagOrId>] }....}
243c0 0a 09 09 7d 0a 09 09 69 63 75 72 73 6f 72 20 2d  ...}...icursor -
243d0 0a 09 09 69 6e 64 65 78 20 7b 0a 09 09 09 73 77  ...index {....sw
243e0 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
243f0 0a 09 09 09 09 32 20 7b 20 72 65 74 75 72 6e 20  .....2 { return 
24400 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74  [DisplayHints <t
24410 61 67 4f 72 49 64 3e 5d 20 7d 0a 09 09 09 09 33  agOrId>] }.....3
24420 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
24430 61 79 48 69 6e 74 73 20 3c 69 6e 64 65 78 3e 5d  ayHints <index>]
24440 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 69 6e   }....}...}...in
24450 73 65 72 74 20 7b 0a 09 09 09 73 77 69 74 63 68  sert {....switch
24460 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09   -- ${pos} {....
24470 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .2 { return [Dis
24480 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 67 4f 72  playHints <tagOr
24490 49 64 3e 5d 20 7d 0a 09 09 09 09 33 20 7b 20 72  Id>] }.....3 { r
244a0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
244b0 6e 74 73 20 3c 62 65 66 6f 72 65 54 68 69 73 3e  nts <beforeThis>
244c0 5d 20 7d 0a 09 09 09 09 34 20 7b 20 72 65 74 75  ] }.....4 { retu
244d0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
244e0 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 09 09 09   <string>] }....
244f0 7d 0a 09 09 7d 0a 09 09 6c 6f 77 65 72 20 7b 0a  }...}...lower {.
24500 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  ...switch -- ${p
24510 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b 20 72 65  os} {.....2 { re
24520 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
24530 74 73 20 3c 74 61 67 4f 72 49 64 3e 5d 20 7d 0a  ts <tagOrId>] }.
24540 09 09 09 09 33 20 7b 20 72 65 74 75 72 6e 20 5b  ....3 { return [
24550 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 62 65  DisplayHints ?be
24560 6c 6f 77 54 68 69 73 3f 5d 20 7d 0a 09 09 09 7d  lowThis?] }....}
24570 0a 09 09 7d 0a 09 09 6d 6f 76 65 20 7b 0a 09 09  ...}...move {...
24580 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73  .switch -- ${pos
24590 7d 20 7b 0a 09 09 09 09 32 20 7b 20 72 65 74 75  } {.....2 { retu
245a0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
245b0 20 3c 74 61 67 4f 72 49 64 3e 5d 20 7d 0a 09 09   <tagOrId>] }...
245c0 09 09 33 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..3 { return [Di
245d0 73 70 6c 61 79 48 69 6e 74 73 20 3c 78 41 6d 6f  splayHints <xAmo
245e0 75 6e 74 3e 5d 20 7d 0a 09 09 09 09 34 20 7b 20  unt>] }.....4 { 
245f0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
24600 69 6e 74 73 20 3c 79 41 6d 6f 75 6e 74 3e 5d 20  ints <yAmount>] 
24610 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 70 6f 73  }....}...}...pos
24620 74 73 63 72 69 70 74 20 7b 0a 09 09 09 73 77 69  tscript {....swi
24630 74 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b  tch -- ${prev} {
24640 0a 09 09 09 09 2d 66 69 6c 65 20 7b 20 72 65 74  .....-file { ret
24650 75 72 6e 20 22 22 20 7d 0a 09 09 09 09 2d 63 6f  urn "" }.....-co
24660 6c 6f 72 6d 61 70 20 2d 0a 09 09 09 09 2d 63 6f  lormap -.....-co
24670 6c 6f 72 6d 6f 64 65 20 2d 0a 09 09 09 09 2d 66  lormode -.....-f
24680 6f 6e 74 6d 61 70 20 2d 0a 09 09 09 09 2d 68 65  ontmap -.....-he
24690 69 67 68 74 20 2d 0a 09 09 09 09 2d 70 61 67 65  ight -.....-page
246a0 61 6e 63 68 6f 72 20 2d 0a 09 09 09 09 2d 70 61  anchor -.....-pa
246b0 67 65 68 65 69 67 68 74 20 2d 0a 09 09 09 09 2d  geheight -.....-
246c0 70 61 67 65 77 69 64 74 68 20 2d 0a 09 09 09 09  pagewidth -.....
246d0 2d 70 61 67 65 78 20 2d 0a 09 09 09 09 2d 70 61  -pagex -.....-pa
246e0 67 65 79 20 2d 0a 09 09 09 09 2d 72 6f 74 61 74  gey -.....-rotat
246f0 65 20 2d 0a 09 09 09 09 2d 77 69 64 74 68 20 2d  e -.....-width -
24700 0a 09 09 09 09 2d 78 20 2d 0a 09 09 09 09 2d 79  .....-x -.....-y
24710 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
24720 61 79 48 69 6e 74 73 20 3c 5b 53 74 72 69 6e 67  ayHints <[String
24730 20 72 61 6e 67 65 20 24 7b 70 72 65 76 7d 20 31   range ${prev} 1
24740 20 65 6e 64 5d 3e 5d 20 7d 0a 09 09 09 09 64 65   end]>] }.....de
24750 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 72 65 74  fault {......ret
24760 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
24770 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a  mList ${text} \.
24780 09 09 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64  .....[RemoveUsed
24790 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20  Options ${line} 
247a0 7b 0a 09 09 09 09 09 09 2d 63 6f 6c 6f 72 6d 61  {.......-colorma
247b0 70 20 2d 63 6f 6c 6f 72 6d 6f 64 65 20 2d 66 69  p -colormode -fi
247c0 6c 65 20 2d 66 6f 6e 74 6d 61 70 20 2d 68 65 69  le -fontmap -hei
247d0 67 68 74 0a 09 09 09 09 09 09 2d 70 61 67 65 61  ght.......-pagea
247e0 6e 63 68 6f 72 20 2d 70 61 67 65 68 65 69 67 68  nchor -pageheigh
247f0 74 20 2d 70 61 67 65 77 69 64 74 68 20 2d 70 61  t -pagewidth -pa
24800 67 65 78 0a 09 09 09 09 09 09 2d 70 61 67 65 79  gex.......-pagey
24810 20 2d 72 6f 74 61 74 65 20 2d 77 69 64 74 68 20   -rotate -width 
24820 2d 78 20 2d 79 0a 09 09 09 09 09 7d 5d 5d 0a 09  -x -y......}]]..
24830 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  ...}....}...}...
24840 72 61 69 73 65 20 7b 0a 09 09 09 73 77 69 74 63  raise {....switc
24850 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09  h -- ${pos} {...
24860 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..2 { return [Di
24870 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 67 4f  splayHints <tagO
24880 72 49 64 3e 5d 20 7d 0a 09 09 09 09 33 20 7b 20  rId>] }.....3 { 
24890 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
248a0 69 6e 74 73 20 3f 61 62 6f 76 65 54 68 69 73 3f  ints ?aboveThis?
248b0 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 73  ] }....}...}...s
248c0 63 61 6c 65 20 7b 0a 09 09 09 73 77 69 74 63 68  cale {....switch
248d0 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09   -- ${pos} {....
248e0 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .2 { return [Dis
248f0 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 67 4f 72  playHints <tagOr
24900 49 64 3e 5d 20 7d 0a 09 09 09 09 33 20 7b 20 72  Id>] }.....3 { r
24910 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
24920 6e 74 73 20 3c 78 4f 72 69 67 69 6e 3e 5d 20 7d  nts <xOrigin>] }
24930 0a 09 09 09 09 34 20 7b 20 72 65 74 75 72 6e 20  .....4 { return 
24940 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 79  [DisplayHints <y
24950 4f 72 69 67 69 6e 3e 5d 20 7d 0a 09 09 09 09 35  Origin>] }.....5
24960 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
24970 61 79 48 69 6e 74 73 20 3c 78 53 63 61 6c 65 3e  ayHints <xScale>
24980 5d 20 7d 0a 09 09 09 09 36 20 7b 20 72 65 74 75  ] }.....6 { retu
24990 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
249a0 20 3c 79 53 63 61 6c 65 3e 5d 20 7d 0a 09 09 09   <yScale>] }....
249b0 7d 0a 09 09 7d 0a 09 09 73 63 61 6e 20 7b 20 72  }...}...scan { r
249c0 65 74 75 72 6e 20 5b 57 69 64 67 65 74 53 63 61  eturn [WidgetSca
249d0 6e 20 24 7b 74 65 78 74 7d 20 24 7b 70 6f 73 7d  n ${text} ${pos}
249e0 5d 20 7d 0a 09 09 73 65 6c 65 63 74 20 7b 0a 09  ] }...select {..
249f0 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
24a00 73 7d 20 7b 0a 09 09 09 09 32 20 7b 0a 09 09 09  s} {.....2 {....
24a10 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
24a20 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
24a30 74 7d 20 7b 0a 09 09 09 09 09 09 61 64 6a 75 73  t} {.......adjus
24a40 74 20 63 6c 65 61 72 20 69 74 65 6d 20 66 72 6f  t clear item fro
24a50 6d 20 74 6f 0a 09 09 09 09 09 7d 5d 0a 09 09 09  m to......}]....
24a60 09 7d 0a 09 09 09 09 33 20 7b 0a 09 09 09 09 09  .}.....3 {......
24a70 73 65 74 20 73 75 62 20 5b 4c 69 6e 64 65 78 20  set sub [Lindex 
24a80 24 7b 6c 69 6e 65 7d 20 32 5d 0a 09 09 09 09 09  ${line} 2]......
24a90 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d  switch -- ${sub}
24aa0 20 7b 0a 09 09 09 09 09 09 61 64 6a 75 73 74 20   {.......adjust 
24ab0 2d 0a 09 09 09 09 09 09 66 72 6f 6d 20 2d 0a 09  -.......from -..
24ac0 09 09 09 09 09 74 6f 20 7b 20 72 65 74 75 72 6e  .....to { return
24ad0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
24ae0 74 61 67 4f 72 49 64 3e 5d 20 7d 0a 09 09 09 09  tagOrId>] }.....
24af0 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09 34 20 7b  .}.....}.....4 {
24b00 0a 09 09 09 09 09 73 65 74 20 73 75 62 20 5b 4c  ......set sub [L
24b10 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 32 5d  index ${line} 2]
24b20 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20  ......switch -- 
24b30 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 09 09 61  ${sub} {.......a
24b40 64 6a 75 73 74 20 2d 0a 09 09 09 09 09 09 66 72  djust -.......fr
24b50 6f 6d 20 2d 0a 09 09 09 09 09 09 74 6f 20 7b 20  om -.......to { 
24b60 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
24b70 69 6e 74 73 20 3c 69 6e 64 65 78 3e 5d 20 7d 0a  ints <index>] }.
24b80 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09  .....}.....}....
24b90 7d 0a 09 09 7d 0a 09 09 78 76 69 65 77 20 2d 0a  }...}...xview -.
24ba0 09 09 79 76 69 65 77 20 7b 20 72 65 74 75 72 6e  ..yview { return
24bb0 20 5b 58 76 69 65 77 59 76 69 65 77 20 24 7b 74   [XviewYview ${t
24bc0 65 78 74 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70  ext} ${line} ${p
24bd0 6f 73 7d 20 24 7b 70 72 65 76 7d 5d 20 7d 0a 09  os} ${prev}] }..
24be0 09 63 72 65 61 74 65 20 7b 0a 09 09 09 73 77 69  .create {....swi
24bf0 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a  tch -- ${pos} {.
24c00 09 09 09 09 32 20 7b 0a 09 09 09 09 09 72 65 74  ....2 {......ret
24c10 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
24c20 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a  mList ${text} {.
24c30 09 09 09 09 09 09 61 72 63 20 62 69 74 6d 61 70  ......arc bitmap
24c40 20 69 6d 61 67 65 20 6c 69 6e 65 20 6f 76 61 6c   image line oval
24c50 0a 09 09 09 09 09 09 70 6f 6c 79 67 6f 6e 20 72  .......polygon r
24c60 65 63 74 61 6e 67 6c 65 20 74 65 78 74 20 77 69  ectangle text wi
24c70 6e 64 6f 77 0a 09 09 09 09 09 7d 5d 0a 09 09 09  ndow......}]....
24c80 09 7d 0a 09 09 09 09 33 20 7b 20 72 65 74 75 72  .}.....3 { retur
24c90 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
24ca0 3c 78 31 3e 5d 20 7d 0a 09 09 09 09 34 20 7b 20  <x1>] }.....4 { 
24cb0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
24cc0 69 6e 74 73 20 3c 79 31 3e 5d 20 7d 0a 09 09 09  ints <y1>] }....
24cd0 09 35 20 7b 0a 09 09 09 09 09 73 65 74 20 74 79  .5 {......set ty
24ce0 70 65 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e  pe [Lindex ${lin
24cf0 65 7d 20 32 5d 0a 09 09 09 09 09 73 77 69 74 63  e} 2]......switc
24d00 68 20 2d 2d 20 24 7b 74 79 70 65 7d 20 7b 0a 09  h -- ${type} {..
24d10 09 09 09 09 09 61 72 63 20 2d 0a 09 09 09 09 09  .....arc -......
24d20 09 6f 76 61 6c 20 2d 0a 09 09 09 09 09 09 72 65  .oval -.......re
24d30 63 74 61 6e 67 6c 65 20 7b 20 72 65 74 75 72 6e  ctangle { return
24d40 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
24d50 78 32 3e 5d 20 7d 0a 09 09 09 09 09 09 23 20 54  x2>] }.......# T
24d60 4f 44 4f 20 69 74 65 6d 73 20 77 69 74 68 20 6d  ODO items with m
24d70 6f 72 65 20 74 68 61 6e 20 34 20 63 6f 6f 72 64  ore than 4 coord
24d80 69 6e 61 74 65 73 0a 09 09 09 09 09 09 64 65 66  inates.......def
24d90 61 75 6c 74 20 7b 0a 09 09 09 09 09 09 09 72 65  ault {........re
24da0 74 75 72 6e 20 5b 43 61 6e 76 61 73 49 74 65 6d  turn [CanvasItem
24db0 20 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74   ${text} ${start
24dc0 7d 20 5c 0a 09 09 09 09 09 09 09 24 7b 65 6e 64  } \........${end
24dd0 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d  } ${line} ${pos}
24de0 20 24 7b 70 72 65 76 7d 20 24 7b 74 79 70 65 7d   ${prev} ${type}
24df0 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 7d  ].......}......}
24e00 0a 09 09 09 09 7d 0a 09 09 09 09 36 20 7b 0a 09  .....}.....6 {..
24e10 09 09 09 09 73 65 74 20 74 79 70 65 20 5b 4c 69  ....set type [Li
24e20 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 32 5d 0a  ndex ${line} 2].
24e30 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  .....switch -- $
24e40 7b 74 79 70 65 7d 20 7b 0a 09 09 09 09 09 09 61  {type} {.......a
24e50 72 63 20 2d 0a 09 09 09 09 09 09 6f 76 61 6c 20  rc -.......oval 
24e60 2d 0a 09 09 09 09 09 09 72 65 63 74 61 6e 67 6c  -.......rectangl
24e70 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  e { return [Disp
24e80 6c 61 79 48 69 6e 74 73 20 3c 79 32 3e 5d 20 7d  layHints <y2>] }
24e90 0a 09 09 09 09 09 09 23 20 54 4f 44 4f 20 69 74  .......# TODO it
24ea0 65 6d 73 20 77 69 74 68 20 6d 6f 72 65 20 74 68  ems with more th
24eb0 61 6e 20 34 20 63 6f 6f 72 64 69 6e 61 74 65 73  an 4 coordinates
24ec0 0a 09 09 09 09 09 09 64 65 66 61 75 6c 74 20 7b  .......default {
24ed0 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b  ........return [
24ee0 43 61 6e 76 61 73 49 74 65 6d 20 24 7b 74 65 78  CanvasItem ${tex
24ef0 74 7d 20 24 7b 73 74 61 72 74 7d 20 5c 0a 09 09  t} ${start} \...
24f00 09 09 09 09 09 24 7b 65 6e 64 7d 20 24 7b 6c 69  .....${end} ${li
24f10 6e 65 7d 20 24 7b 70 6f 73 7d 20 24 7b 70 72 65  ne} ${pos} ${pre
24f20 76 7d 20 24 7b 74 79 70 65 7d 5d 0a 09 09 09 09  v} ${type}].....
24f30 09 09 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d  ..}......}.....}
24f40 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  .....default {..
24f50 09 09 09 09 73 65 74 20 74 79 70 65 20 5b 4c 69  ....set type [Li
24f60 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 32 5d 0a  ndex ${line} 2].
24f70 09 09 09 09 09 23 20 54 4f 44 4f 20 69 74 65 6d  .....# TODO item
24f80 73 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e  s with more than
24f90 20 34 20 63 6f 6f 72 64 69 6e 61 74 65 73 0a 09   4 coordinates..
24fa0 09 09 09 09 72 65 74 75 72 6e 20 5b 43 61 6e 76  ....return [Canv
24fb0 61 73 49 74 65 6d 20 24 7b 74 65 78 74 7d 20 24  asItem ${text} $
24fc0 7b 73 74 61 72 74 7d 20 5c 0a 09 09 09 09 09 24  {start} \......$
24fd0 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b  {end} ${line} ${
24fe0 70 6f 73 7d 20 24 7b 70 72 65 76 7d 20 24 7b 74  pos} ${prev} ${t
24ff0 79 70 65 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d  ype}].....}....}
25000 0a 09 09 7d 0a 09 09 69 74 65 6d 63 6f 6e 66 69  ...}...itemconfi
25010 67 75 72 65 20 2d 0a 09 09 69 74 65 6d 63 67 65  gure -...itemcge
25020 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d  t {....switch --
25030 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32 20   ${pos} {.....2 
25040 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
25050 79 48 69 6e 74 73 20 3c 74 61 67 4f 72 49 64 3e  yHints <tagOrId>
25060 5d 20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20  ] }.....default 
25070 7b 0a 0a 09 09 09 09 09 73 65 74 20 69 64 20 5b  {.......set id [
25080 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 32  Lindex ${line} 2
25090 5d 0a 09 09 09 09 09 73 65 74 20 74 79 70 65 20  ]......set type 
250a0 5b 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d  [[Lindex ${line}
250b0 20 30 5d 20 74 79 70 65 20 24 7b 69 64 7d 5d 0a   0] type ${id}].
250c0 09 09 09 09 09 69 66 20 7b 21 5b 73 74 72 69 6e  .....if {![strin
250d0 67 20 6c 65 6e 67 74 68 20 24 7b 74 79 70 65 7d  g length ${type}
250e0 5d 7d 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72  ]} {.......retur
250f0 6e 20 22 22 3b 20 23 20 6e 6f 20 73 75 63 68 20  n ""; # no such 
25100 65 6c 65 6d 65 6e 74 0a 09 09 09 09 09 7d 0a 0a  element......}..
25110 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 61 6e  .....return [Can
25120 76 61 73 49 74 65 6d 20 24 7b 74 65 78 74 7d 20  vasItem ${text} 
25130 24 7b 73 74 61 72 74 7d 20 5c 0a 09 09 09 09 09  ${start} \......
25140 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24  ${end} ${line} $
25150 7b 70 6f 73 7d 20 24 7b 70 72 65 76 7d 20 24 7b  {pos} ${prev} ${
25160 74 79 70 65 7d 5d 0a 09 09 09 09 7d 0a 09 09 09  type}].....}....
25170 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  }...}..}..return
25180 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 45 6e 74 72   "".}..proc Entr
25190 79 49 6e 64 65 78 20 74 65 78 74 20 7b 0a 09 72  yIndex text {..r
251a0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
251b0 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
251c0 7b 0a 09 09 3c 6e 75 6d 62 65 72 3e 20 3c 40 6e  {...<number> <@n
251d0 75 6d 62 65 72 3e 20 61 6e 63 68 6f 72 20 65 6e  umber> anchor en
251e0 64 20 73 65 6c 2e 66 69 72 73 74 20 73 65 6c 2e  d sel.first sel.
251f0 6c 61 73 74 0a 09 7d 5d 0a 7d 0a 0a 70 72 6f 63  last..}].}..proc
25200 20 45 6e 74 72 79 4f 62 6a 20 7b 74 65 78 74 20   EntryObj {text 
25210 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
25220 6f 73 7d 20 7b 0a 09 73 65 74 20 73 75 62 20 5b  os} {..set sub [
25230 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31  Lindex ${line} 1
25240 5d 0a 09 73 65 74 20 70 72 65 76 20 5b 50 72 65  ]..set prev [Pre
25250 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72  viousWord ${star
25260 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 69 66 20  t} ${line}]..if 
25270 7b 31 20 3d 3d 20 24 70 6f 73 7d 20 7b 0a 09 09  {1 == $pos} {...
25280 72 65 74 75 72 6e 20 5b 54 72 79 53 75 62 43 6d  return [TrySubCm
25290 64 73 20 24 7b 74 65 78 74 7d 20 5b 4c 69 6e 64  ds ${text} [Lind
252a0 65 78 20 24 7b 6c 69 6e 65 7d 20 30 5d 5d 0a 09  ex ${line} 0]]..
252b0 7d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73  }..switch -- ${s
252c0 75 62 7d 20 7b 0a 09 09 62 62 6f 78 20 2d 0a 09  ub} {...bbox -..
252d0 09 69 63 75 72 73 6f 72 20 2d 0a 09 09 69 6e 64  .icursor -...ind
252e0 65 78 20 7b 20 72 65 74 75 72 6e 20 5b 45 6e 74  ex { return [Ent
252f0 72 79 49 6e 64 65 78 20 24 7b 74 65 78 74 7d 5d  ryIndex ${text}]
25300 20 7d 0a 09 09 63 67 65 74 20 7b 7d 0a 09 09 63   }...cget {}...c
25310 6f 6e 66 69 67 75 72 65 20 7b 7d 0a 09 09 67 65  onfigure {}...ge
25320 74 20 7b 7d 0a 09 09 69 6e 73 65 72 74 20 7b 0a  t {}...insert {.
25330 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  ...switch -- ${p
25340 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b 20 72 65  os} {.....2 { re
25350 74 75 72 6e 20 5b 45 6e 74 72 79 49 6e 64 65 78  turn [EntryIndex
25360 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09 09   ${text}] }.....
25370 33 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  3 { return [Disp
25380 6c 61 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67  layHints <string
25390 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  >] }....}...}...
253a0 73 63 61 6e 20 7b 20 72 65 74 75 72 6e 20 5b 57  scan { return [W
253b0 69 64 67 65 74 53 63 61 6e 20 24 7b 74 65 78 74  idgetScan ${text
253c0 7d 20 24 7b 70 6f 73 7d 5d 20 7d 0a 09 09 73 65  } ${pos}] }...se
253d0 6c 65 63 74 69 6f 6e 20 7b 0a 09 09 09 73 77 69  lection {....swi
253e0 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a  tch -- ${pos} {.
253f0 09 09 09 09 32 20 7b 0a 09 09 09 09 09 72 65 74  ....2 {......ret
25400 75 72 6e 20 5b 54 72 79 53 75 62 43 6d 64 73 20  urn [TrySubCmds 
25410 24 7b 74 65 78 74 7d 20 5b 4c 72 61 6e 67 65 20  ${text} [Lrange 
25420 24 7b 6c 69 6e 65 7d 20 30 20 31 5d 5d 0a 09 09  ${line} 0 1]]...
25430 09 09 7d 0a 09 09 09 09 33 20 7b 0a 09 09 09 09  ..}.....3 {.....
25440 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72 65  .switch -- ${pre
25450 76 7d 20 7b 0a 09 09 09 09 09 09 61 64 6a 75 73  v} {.......adjus
25460 74 20 2d 0a 09 09 09 09 09 09 66 72 6f 6d 20 2d  t -.......from -
25470 0a 09 09 09 09 09 09 74 6f 20 7b 20 72 65 74 75  .......to { retu
25480 72 6e 20 5b 45 6e 74 72 79 49 6e 64 65 78 20 24  rn [EntryIndex $
25490 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09 09 09 09  {text}] }.......
254a0 63 6c 65 61 72 20 2d 0a 09 09 09 09 09 09 70 72  clear -.......pr
254b0 65 73 65 6e 74 20 7b 7d 0a 09 09 09 09 09 09 72  esent {}.......r
254c0 61 6e 67 65 20 7b 20 72 65 74 75 72 6e 20 5b 44  ange { return [D
254d0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 61  isplayHints <sta
254e0 72 74 3e 5d 20 7d 0a 09 09 09 09 09 7d 0a 09 09  rt>] }......}...
254f0 09 09 7d 0a 09 09 09 09 34 20 7b 0a 09 09 09 09  ..}.....4 {.....
25500 09 73 77 69 74 63 68 20 2d 2d 20 5b 4c 69 6e 64  .switch -- [Lind
25510 65 78 20 24 7b 6c 69 6e 65 7d 20 32 5d 20 7b 0a  ex ${line} 2] {.
25520 09 09 09 09 09 09 72 61 6e 67 65 20 7b 20 72 65  ......range { re
25530 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
25540 74 73 20 3c 65 6e 64 3e 5d 20 7d 0a 09 09 09 09  ts <end>] }.....
25550 09 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09  .}.....}....}...
25560 7d 0a 09 09 78 76 69 65 77 20 2d 0a 09 09 79 76  }...xview -...yv
25570 69 65 77 20 7b 20 72 65 74 75 72 6e 20 5b 57 69  iew { return [Wi
25580 64 67 65 74 58 76 69 65 77 59 76 69 65 77 20 24  dgetXviewYview $
25590 7b 74 65 78 74 7d 20 24 7b 6c 69 6e 65 7d 20 24  {text} ${line} $
255a0 7b 70 6f 73 7d 20 24 7b 70 72 65 76 7d 5d 20 7d  {pos} ${prev}] }
255b0 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
255c0 0a 0a 23 20 70 72 6f 63 20 43 68 65 63 6b 62 75  ..# proc Checkbu
255d0 74 74 6f 6e 4f 62 6a 20 7b 74 65 78 74 20 73 74  ttonObj {text st
255e0 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
255f0 7d 20 7b 0a 23 20 74 68 65 20 66 61 6c 6c 62 61  } {.# the fallba
25600 63 6b 20 72 6f 75 74 69 6e 65 73 20 64 6f 20 74  ck routines do t
25610 68 65 20 6a 6f 62 20 70 72 65 74 74 79 20 77 65  he job pretty we
25620 6c 6c 2e 0a 23 20 7d 0a 0a 23 20 70 72 6f 63 20  ll..# }..# proc 
25630 46 72 61 6d 65 4f 62 6a 20 7b 74 65 78 74 20 73  FrameObj {text s
25640 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
25650 73 7d 20 7b 0a 23 20 74 68 65 20 66 61 6c 6c 62  s} {.# the fallb
25660 61 63 6b 20 72 6f 75 74 69 6e 65 73 20 64 6f 20  ack routines do 
25670 74 68 65 20 6a 6f 62 20 70 72 65 74 74 79 20 77  the job pretty w
25680 65 6c 6c 2e 0a 23 20 7d 0a 0a 23 20 70 72 6f 63  ell..# }..# proc
25690 20 4c 61 62 65 6c 4f 62 6a 20 7b 74 65 78 74 20   LabelObj {text 
256a0 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
256b0 6f 73 7d 20 7b 0a 23 20 74 68 65 20 66 61 6c 6c  os} {.# the fall
256c0 62 61 63 6b 20 72 6f 75 74 69 6e 65 73 20 64 6f  back routines do
256d0 20 74 68 65 20 6a 6f 62 20 70 72 65 74 74 79 20   the job pretty 
256e0 77 65 6c 6c 2e 0a 23 20 7d 0a 0a 70 72 6f 63 20  well..# }..proc 
256f0 4c 69 73 74 62 6f 78 4f 62 6a 20 7b 74 65 78 74  ListboxObj {text
25700 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
25710 70 6f 73 7d 20 7b 0a 09 73 65 74 20 73 75 62 20  pos} {..set sub 
25720 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20  [Lindex ${line} 
25730 31 5d 0a 09 73 65 74 20 70 72 65 76 20 5b 50 72  1]..set prev [Pr
25740 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61  eviousWord ${sta
25750 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 69 66  rt} ${line}]..if
25760 20 7b 31 20 3d 3d 20 24 70 6f 73 7d 20 7b 0a 09   {1 == $pos} {..
25770 09 72 65 74 75 72 6e 20 5b 54 72 79 53 75 62 43  .return [TrySubC
25780 6d 64 73 20 24 7b 74 65 78 74 7d 20 5b 4c 69 6e  mds ${text} [Lin
25790 64 65 78 20 24 7b 6c 69 6e 65 7d 20 30 5d 5d 0a  dex ${line} 0]].
257a0 09 7d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  .}..switch -- ${
257b0 73 75 62 7d 20 7b 0a 09 09 61 63 74 69 76 61 74  sub} {...activat
257c0 65 20 2d 0a 09 09 62 62 6f 78 20 2d 0a 09 09 69  e -...bbox -...i
257d0 6e 64 65 78 20 2d 0a 09 09 73 65 65 20 7b 0a 09  ndex -...see {..
257e0 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
257f0 73 7d 20 7b 0a 09 09 09 09 32 20 7b 0a 09 09 09  s} {.....2 {....
25800 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  ..return [Displa
25810 79 48 69 6e 74 73 20 3c 69 6e 64 65 78 3e 5d 0a  yHints <index>].
25820 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  ....}....}...}..
25830 09 69 6e 73 65 72 74 20 7b 0a 09 09 09 73 77 69  .insert {....swi
25840 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a  tch -- ${pos} {.
25850 09 09 09 09 32 20 7b 0a 09 09 09 09 09 72 65 74  ....2 {......ret
25860 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
25870 73 20 3c 69 6e 64 65 78 3e 5d 0a 09 09 09 09 7d  s <index>].....}
25880 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  .....default {..
25890 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70  ....return [Disp
258a0 6c 61 79 48 69 6e 74 73 20 3f 65 6c 65 6d 65 6e  layHints ?elemen
258b0 74 3f 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09  t?].....}....}..
258c0 09 7d 0a 09 09 63 67 65 74 20 7b 7d 0a 09 09 63  .}...cget {}...c
258d0 6f 6e 66 69 67 75 72 65 20 7b 7d 0a 09 09 63 75  onfigure {}...cu
258e0 72 73 65 6c 65 63 74 69 6f 6e 20 7b 7d 0a 09 09  rselection {}...
258f0 64 65 6c 65 74 65 20 2d 0a 09 09 67 65 74 20 7b  delete -...get {
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 0a 09  pos} {.....2 {..
25920 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70  ....return [Disp
25930 6c 61 79 48 69 6e 74 73 20 3c 66 69 72 73 74 3e  layHints <first>
25940 5d 0a 09 09 09 09 7d 0a 09 09 09 09 33 20 7b 0a  ].....}.....3 {.
25950 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73  .....return [Dis
25960 70 6c 61 79 48 69 6e 74 73 20 3f 6c 61 73 74 3f  playHints ?last?
25970 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d  ].....}....}...}
25980 0a 09 09 6e 65 61 72 65 73 74 20 7b 0a 09 09 09  ...nearest {....
25990 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d  switch -- ${pos}
259a0 20 7b 0a 09 09 09 09 32 20 7b 0a 09 09 09 09 09   {.....2 {......
259b0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
259c0 69 6e 74 73 20 3c 79 3e 5d 0a 09 09 09 09 7d 0a  ints <y>].....}.
259d0 09 09 09 7d 0a 09 09 7d 0a 09 09 73 69 7a 65 20  ...}...}...size 
259e0 7b 7d 20 20 20 20 20 0a 0a 09 09 73 63 61 6e 20  {}     ....scan 
259f0 7b 20 72 65 74 75 72 6e 20 5b 57 69 64 67 65 74  { return [Widget
25a00 53 63 61 6e 20 24 7b 74 65 78 74 7d 20 24 7b 70  Scan ${text} ${p
25a10 6f 73 7d 5d 20 7d 0a 0a 09 09 78 76 69 65 77 20  os}] }....xview 
25a20 2d 0a 09 09 79 76 69 65 77 20 7b 20 72 65 74 75  -...yview { retu
25a30 72 6e 20 5b 57 69 64 67 65 74 58 76 69 65 77 59  rn [WidgetXviewY
25a40 76 69 65 77 20 24 7b 74 65 78 74 7d 20 24 7b 6c  view ${text} ${l
25a50 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 24 7b 70 72  ine} ${pos} ${pr
25a60 65 76 7d 5d 20 7d 0a 0a 09 09 73 65 6c 65 63 74  ev}] }....select
25a70 69 6f 6e 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ion {....switch 
25a80 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09  -- ${pos} {.....
25a90 32 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  2 {......return 
25aa0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
25ab0 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09  t ${text} \.....
25ac0 09 7b 61 6e 63 68 6f 72 20 63 6c 65 61 72 20 69  .{anchor clear i
25ad0 6e 63 6c 75 64 65 73 20 73 65 74 7d 5d 0a 09 09  ncludes set}]...
25ae0 09 09 7d 0a 09 09 09 09 33 20 7b 0a 09 09 09 09  ..}.....3 {.....
25af0 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72 65  .switch -- ${pre
25b00 76 7d 20 7b 0a 09 09 09 09 09 09 61 6e 63 68 6f  v} {.......ancho
25b10 72 20 2d 0a 09 09 09 09 09 09 69 6e 63 6c 75 64  r -.......includ
25b20 65 73 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75  es {........retu
25b30 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
25b40 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09  List ${text} {..
25b50 09 09 09 09 09 09 09 61 63 74 69 76 65 20 61 6e  .......active an
25b60 63 68 6f 72 20 65 6e 64 20 40 78 20 40 79 20 3c  chor end @x @y <
25b70 6e 75 6d 62 65 72 3e 0a 09 09 09 09 09 09 09 7d  number>........}
25b80 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 09  ].......}.......
25b90 63 6c 65 61 72 20 2d 0a 09 09 09 09 09 09 73 65  clear -.......se
25ba0 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  t { return [Disp
25bb0 6c 61 79 48 69 6e 74 73 20 3c 66 69 72 73 74 3e  layHints <first>
25bc0 5d 20 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d  ] }......}.....}
25bd0 0a 09 09 09 09 34 20 7b 0a 09 09 09 09 09 73 77  .....4 {......sw
25be0 69 74 63 68 20 2d 2d 20 5b 4c 69 6e 64 65 78 20  itch -- [Lindex 
25bf0 24 7b 6c 69 6e 65 7d 20 32 5d 20 7b 0a 09 09 09  ${line} 2] {....
25c00 09 09 09 63 6c 65 61 72 20 2d 0a 09 09 09 09 09  ...clear -......
25c10 09 73 65 74 20 7b 20 72 65 74 75 72 6e 20 5b 44  .set { return [D
25c20 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 6c 61 73  isplayHints ?las
25c30 74 3f 5d 20 7d 0a 09 09 09 09 09 7d 0a 09 09 09  t?] }......}....
25c40 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d  .}....}...}..}.}
25c50 0a 0a 70 72 6f 63 20 4d 65 6e 75 49 6e 64 65 78  ..proc MenuIndex
25c60 20 74 65 78 74 20 7b 0a 09 72 65 74 75 72 6e 20   text {..return 
25c70 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
25c80 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 3c 6e  t ${text} {...<n
25c90 75 6d 62 65 72 3e 20 61 63 74 69 76 65 20 65 6e  umber> active en
25ca0 64 20 6c 61 73 74 20 6e 6f 6e 65 20 3c 40 6e 75  d last none <@nu
25cb0 6d 62 65 72 3e 20 3c 6c 61 62 65 6c 50 61 74 74  mber> <labelPatt
25cc0 65 72 6e 3e 0a 09 7d 5d 0a 7d 0a 0a 70 72 6f 63  ern>..}].}..proc
25cd0 20 4d 65 6e 75 49 74 65 6d 20 7b 74 65 78 74 20   MenuItem {text 
25ce0 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
25cf0 6f 73 20 76 69 72 74 75 61 6c 70 6f 73 7d 20 7b  os virtualpos} {
25d00 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 76 69  ..switch -- ${vi
25d10 72 74 75 61 6c 70 6f 73 7d 20 7b 0a 09 09 32 20  rtualpos} {...2 
25d20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  {....return [Com
25d30 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
25d40 74 65 78 74 7d 20 7b 0a 09 09 09 09 63 61 73 63  text} {.....casc
25d50 61 64 65 20 63 68 65 63 6b 62 75 74 74 6f 6e 20  ade checkbutton 
25d60 63 6f 6d 6d 61 6e 64 20 72 61 64 69 6f 62 75 74  command radiobut
25d70 74 6f 6e 20 73 65 70 61 72 61 74 6f 72 0a 09 09  ton separator...
25d80 09 7d 5d 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c  .}]...}...defaul
25d90 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d  t {....switch --
25da0 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24   [PreviousWord $
25db0 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d  {start} ${line}]
25dc0 20 7b 0a 09 09 09 09 2d 61 63 74 69 76 65 62 61   {.....-activeba
25dd0 63 6b 67 72 6f 75 6e 64 20 2d 0a 09 09 09 09 2d  ckground -.....-
25de0 61 63 74 69 76 65 66 6f 72 65 67 72 6f 75 6e 64  activeforeground
25df0 20 2d 0a 09 09 09 09 2d 62 61 63 6b 67 72 6f 75   -.....-backgrou
25e00 6e 64 20 2d 0a 09 09 09 09 2d 66 6f 72 65 67 72  nd -.....-foregr
25e10 6f 75 6e 64 20 2d 0a 09 09 09 09 2d 73 65 6c 65  ound -.....-sele
25e20 63 74 63 6f 6c 6f 72 20 7b 0a 09 09 09 09 09 72  ctcolor {......r
25e30 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
25e40 6e 74 73 20 3c 63 6f 6c 6f 72 3e 5d 0a 09 09 09  nts <color>]....
25e50 09 7d 0a 0a 09 09 09 09 2d 61 63 63 65 6c 65 72  .}......-acceler
25e60 61 74 6f 72 20 7b 20 72 65 74 75 72 6e 20 5b 44  ator { return [D
25e70 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 61 63 63  isplayHints <acc
25e80 65 6c 3e 5d 20 7d 0a 09 09 09 09 2d 62 69 74 6d  el>] }.....-bitm
25e90 61 70 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d  ap { return [Com
25ea0 70 6c 65 74 65 46 72 6f 6d 42 69 74 6d 61 70 73  pleteFromBitmaps
25eb0 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 0a 09 09 09   ${text}] }.....
25ec0 09 2d 63 6f 6c 75 6d 6e 62 72 65 61 6b 20 2d 0a  .-columnbreak -.
25ed0 09 09 09 09 2d 68 69 64 65 6d 61 72 67 69 6e 20  ....-hidemargin 
25ee0 2d 0a 09 09 09 09 2d 69 6e 64 69 63 61 74 6f 72  -.....-indicator
25ef0 6f 6e 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  on {......return
25f00 20 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65 61   [CompleteBoolea
25f10 6e 20 24 7b 74 65 78 74 7d 5d 0a 09 09 09 09 7d  n ${text}].....}
25f20 0a 09 09 09 09 2d 63 6f 6d 6d 61 6e 64 20 7b 0a  .....-command {.
25f30 09 09 09 09 09 72 65 74 75 72 6e 20 5b 42 72 61  .....return [Bra
25f40 63 65 4f 72 43 6f 6d 6d 61 6e 64 20 24 7b 74 65  ceOrCommand ${te
25f50 78 74 7d 20 5c 0a 09 09 09 09 09 24 7b 73 74 61  xt} \......${sta
25f60 72 74 7d 20 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e  rt} ${end} ${lin
25f70 65 7d 20 24 7b 70 6f 73 7d 20 24 7b 74 65 78 74  e} ${pos} ${text
25f80 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 2d 66 6f  }].....}.....-fo
25f90 6e 74 20 7b 0a 09 09 09 09 09 73 65 74 20 6e 61  nt {......set na
25fa0 6d 65 73 20 5b 66 6f 6e 74 20 6e 61 6d 65 73 5d  mes [font names]
25fb0 0a 09 09 09 09 09 69 66 20 7b 5b 73 74 72 69 6e  ......if {[strin
25fc0 67 20 6c 65 6e 67 74 68 20 24 7b 6e 61 6d 65 73  g length ${names
25fd0 7d 5d 7d 20 7b 0a 09 09 09 09 09 09 72 65 74 75  }]} {.......retu
25fe0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
25ff0 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 6e  List ${text} ${n
26000 61 6d 65 73 7d 5d 0a 09 09 09 09 09 7d 20 65 6c  ames}]......} el
26010 73 65 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72  se {.......retur
26020 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
26030 3c 66 6f 6e 74 6e 61 6d 65 3e 5d 0a 09 09 09 09  <fontname>].....
26040 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09 2d 69 6d  .}.....}.....-im
26050 61 67 65 20 2d 0a 09 09 09 09 2d 73 65 6c 65 63  age -.....-selec
26060 74 69 6d 61 67 65 20 7b 20 72 65 74 75 72 6e 20  timage { return 
26070 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 49 6d 61  [CompleteFromIma
26080 67 65 73 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 0a  ges ${text}] }..
26090 09 09 09 09 2d 6c 61 62 65 6c 20 7b 20 72 65 74  ....-label { ret
260a0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
260b0 73 20 3c 6c 61 62 65 6c 3e 5d 20 7d 0a 09 09 09  s <label>] }....
260c0 09 2d 6d 65 6e 75 20 7b 0a 09 09 09 09 09 73 65  .-menu {......se
260d0 74 20 6e 61 6d 65 73 20 5b 57 69 64 67 65 74 43  t names [WidgetC
260e0 68 69 6c 64 72 65 6e 20 5b 4c 69 6e 64 65 78 20  hildren [Lindex 
260f0 24 7b 6c 69 6e 65 7d 20 30 5d 5d 0a 09 09 09 09  ${line} 0]].....
26100 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e  .if {[string len
26110 67 74 68 20 24 7b 6e 61 6d 65 73 7d 5d 7d 20 7b  gth ${names}]} {
26120 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  .......return [C
26130 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
26140 24 7b 74 65 78 74 7d 20 24 7b 6e 61 6d 65 73 7d  ${text} ${names}
26150 5d 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a  ]......} else {.
26160 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  ......return [Di
26170 73 70 6c 61 79 48 69 6e 74 73 20 3c 6d 65 6e 75  splayHints <menu
26180 3e 5d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a  >]......}.....}.
26190 0a 09 09 09 09 2d 6f 66 66 76 61 6c 75 65 20 2d  .....-offvalue -
261a0 0a 09 09 09 09 2d 6f 6e 76 61 6c 75 65 20 7b 20  .....-onvalue { 
261b0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
261c0 69 6e 74 73 20 3c 76 61 6c 75 65 3e 5d 20 7d 0a  ints <value>] }.
261d0 0a 09 09 09 09 2d 73 74 61 74 65 20 7b 0a 09 09  .....-state {...
261e0 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
261f0 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
26200 78 74 7d 20 7b 0a 09 09 09 09 09 09 6e 6f 72 6d  xt} {.......norm
26210 61 6c 20 61 63 74 69 76 65 20 64 69 73 61 62 6c  al active disabl
26220 65 64 0a 09 09 09 09 09 7d 5d 0a 09 09 09 09 7d  ed......}].....}
26230 0a 09 09 09 09 2d 75 6e 64 65 72 6c 69 6e 65 20  .....-underline 
26240 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
26250 79 48 69 6e 74 73 20 3c 69 6e 74 65 67 65 72 3e  yHints <integer>
26260 5d 20 7d 0a 09 09 09 09 2d 76 61 6c 75 65 20 7b  ] }.....-value {
26270 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
26280 48 69 6e 74 73 20 3c 76 61 6c 75 65 3e 5d 20 7d  Hints <value>] }
26290 0a 09 09 09 09 2d 76 61 72 69 61 62 6c 65 20 7b  .....-variable {
262a0 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 56 61  ......return [Va
262b0 72 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 74 65  rCompletion ${te
262c0 78 74 7d 20 23 30 5d 0a 09 09 09 09 7d 0a 0a 09  xt} #0].....}...
262d0 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09  ...default {....
262e0 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
262f0 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
26300 74 7d 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f 76  t} \......[Remov
26310 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c  eUsedOptions ${l
26320 69 6e 65 7d 20 7b 0a 09 09 09 09 09 09 2d 61 63  ine} {.......-ac
26330 74 69 76 65 62 61 63 6b 67 72 6f 75 6e 64 20 2d  tivebackground -
26340 61 63 74 69 76 65 66 6f 72 65 67 72 6f 75 6e 64  activeforeground
26350 0a 09 09 09 09 09 09 2d 61 63 63 65 6c 65 72 61  .......-accelera
26360 74 6f 72 20 2d 62 61 63 6b 67 72 6f 75 6e 64 20  tor -background 
26370 2d 62 69 74 6d 61 70 20 2d 63 6f 6c 75 6d 6e 62  -bitmap -columnb
26380 72 65 61 6b 0a 09 09 09 09 09 09 2d 63 6f 6d 6d  reak.......-comm
26390 61 6e 64 20 2d 66 6f 6e 74 20 2d 66 6f 72 65 67  and -font -foreg
263a0 72 6f 75 6e 64 20 2d 68 69 64 65 6d 61 72 67 69  round -hidemargi
263b0 6e 20 2d 69 6d 61 67 65 0a 09 09 09 09 09 09 2d  n -image.......-
263c0 69 6e 64 69 63 61 74 6f 72 6f 6e 20 2d 6c 61 62  indicatoron -lab
263d0 65 6c 20 2d 6d 65 6e 75 20 2d 6f 66 66 76 61 6c  el -menu -offval
263e0 75 65 20 2d 6f 6e 76 61 6c 75 65 0a 09 09 09 09  ue -onvalue.....
263f0 09 09 2d 73 65 6c 65 63 74 63 6f 6c 6f 72 20 2d  ..-selectcolor -
26400 73 65 6c 65 63 74 69 6d 61 67 65 20 2d 73 74 61  selectimage -sta
26410 74 65 20 2d 75 6e 64 65 72 6c 69 6e 65 0a 09 09  te -underline...
26420 09 09 09 09 2d 76 61 6c 75 65 20 2d 76 61 72 69  ....-value -vari
26430 61 62 6c 65 0a 09 09 09 09 09 7d 5d 5d 0a 09 09  able......}]]...
26440 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a  ..}....}...}..}.
26450 7d 0a 0a 70 72 6f 63 20 4d 65 6e 75 4f 62 6a 20  }..proc MenuObj 
26460 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
26470 6c 69 6e 65 20 70 6f 73 7d 20 7b 0a 09 73 65 74  line pos} {..set
26480 20 73 75 62 20 5b 4c 69 6e 64 65 78 20 24 7b 6c   sub [Lindex ${l
26490 69 6e 65 7d 20 31 5d 0a 09 73 65 74 20 70 72 65  ine} 1]..set pre
264a0 76 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20  v [PreviousWord 
264b0 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d  ${start} ${line}
264c0 5d 0a 09 69 66 20 7b 31 20 3d 3d 20 24 70 6f 73  ]..if {1 == $pos
264d0 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 5b 54 72  } {...return [Tr
264e0 79 53 75 62 43 6d 64 73 20 24 7b 74 65 78 74 7d  ySubCmds ${text}
264f0 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d   [Lindex ${line}
26500 20 30 5d 5d 0a 09 7d 0a 09 73 77 69 74 63 68 20   0]]..}..switch 
26510 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 61 63  -- ${sub} {...ac
26520 74 69 76 61 74 65 20 2d 0a 09 09 69 6e 64 65 78  tivate -...index
26530 20 2d 0a 09 09 69 6e 76 6f 6b 65 20 2d 0a 09 09   -...invoke -...
26540 70 6f 73 74 63 61 73 63 61 64 65 20 2d 0a 09 09  postcascade -...
26550 74 79 70 65 20 2d 0a 09 09 79 70 6f 73 69 74 69  type -...ypositi
26560 6f 6e 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  on {....switch -
26570 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32  - ${pos} {.....2
26580 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
26590 4d 65 6e 75 49 6e 64 65 78 20 24 7b 74 65 78 74  MenuIndex ${text
265a0 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09  }].....}....}...
265b0 7d 0a 09 09 63 6f 6e 66 69 67 75 72 65 20 7b 7d  }...configure {}
265c0 0a 09 09 63 67 65 74 20 7b 7d 0a 0a 09 09 61 64  ...cget {}....ad
265d0 64 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 4d  d {....return [M
265e0 65 6e 75 49 74 65 6d 20 24 7b 74 65 78 74 7d 20  enuItem ${text} 
265f0 24 7b 73 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20  ${start} ${end} 
26600 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 24  ${line} ${pos} $
26610 7b 70 6f 73 7d 5d 0a 09 09 7d 0a 09 09 63 6c 6f  {pos}]...}...clo
26620 6e 65 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  ne {....switch -
26630 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32  - ${pos} {.....2
26640 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
26650 61 79 48 69 6e 74 73 20 3c 6e 65 77 50 61 74 68  ayHints <newPath
26660 6e 61 6d 65 3e 5d 20 7d 0a 09 09 09 09 33 20 7b  name>] }.....3 {
26670 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
26680 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
26690 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 09 09 6e  {text} {.......n
266a0 6f 72 6d 61 6c 20 6d 65 6e 75 62 61 72 20 74 65  ormal menubar te
266b0 61 72 6f 66 66 0a 09 09 09 09 09 7d 5d 0a 09 09  aroff......}]...
266c0 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 64  ..}....}...}...d
266d0 65 6c 65 74 65 20 7b 0a 09 09 09 73 77 69 74 63  elete {....switc
266e0 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09  h -- ${pos} {...
266f0 09 09 32 20 2d 0a 09 09 09 09 33 20 7b 20 72 65  ..2 -.....3 { re
26700 74 75 72 6e 20 5b 4d 65 6e 75 49 6e 64 65 78 20  turn [MenuIndex 
26710 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09 7d 0a  ${text}] }....}.
26720 09 09 7d 0a 09 09 69 6e 73 65 72 74 20 7b 0a 09  ..}...insert {..
26730 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
26740 73 7d 20 7b 0a 09 09 09 09 32 20 7b 20 72 65 74  s} {.....2 { ret
26750 75 72 6e 20 5b 4d 65 6e 75 49 6e 64 65 78 20 24  urn [MenuIndex $
26760 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09 09 64 65  {text}] }.....de
26770 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 72 65 74  fault {......ret
26780 75 72 6e 20 5b 4d 65 6e 75 49 74 65 6d 20 24 7b  urn [MenuItem ${
26790 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24  text} ${start} $
267a0 7b 65 6e 64 7d 20 5c 0a 09 09 09 09 09 24 7b 6c  {end} \......${l
267b0 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 5b 65 78 70  ine} ${pos} [exp
267c0 72 20 24 7b 70 6f 73 7d 20 2d 20 31 5d 5d 0a 09  r ${pos} - 1]]..
267d0 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  ...}....}...}...
267e0 65 6e 74 72 79 63 67 65 74 20 2d 0a 09 09 65 6e  entrycget -...en
267f0 74 72 79 63 6f 6e 66 69 67 75 72 65 20 7b 0a 09  tryconfigure {..
26800 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
26810 73 7d 20 7b 0a 09 09 09 09 32 20 7b 20 72 65 74  s} {.....2 { ret
26820 75 72 6e 20 5b 4d 65 6e 75 49 6e 64 65 78 20 24  urn [MenuIndex $
26830 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09 09 64 65  {text}] }.....de
26840 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 72 65 74  fault {......ret
26850 75 72 6e 20 5b 4d 65 6e 75 49 74 65 6d 20 24 7b  urn [MenuItem ${
26860 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 5c  text} ${start} \
26870 0a 09 09 09 09 09 24 7b 65 6e 64 7d 20 24 7b 6c  ......${end} ${l
26880 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 24 7b 70 6f  ine} ${pos} ${po
26890 73 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09  s}].....}....}..
268a0 09 7d 0a 09 09 70 6f 73 74 20 7b 0a 09 09 09 73  .}...post {....s
268b0 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
268c0 7b 0a 09 09 09 09 32 20 7b 20 72 65 74 75 72 6e  {.....2 { return
268d0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
268e0 78 3e 5d 20 7d 0a 09 09 09 09 33 20 7b 20 72 65  x>] }.....3 { re
268f0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
26900 74 73 20 3c 79 3e 5d 20 7d 0a 09 09 09 7d 0a 09  ts <y>] }....}..
26910 09 7d 0a 09 09 23 20 3f 3f 3f 20 58 58 58 0a 09  .}...# ??? XXX..
26920 09 75 6e 70 6f 73 74 20 7b 7d 0a 09 7d 0a 7d 0a  .unpost {}..}.}.
26930 0a 70 72 6f 63 20 50 68 6f 74 6f 4f 62 6a 20 7b  .proc PhotoObj {
26940 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
26950 69 6e 65 20 70 6f 73 7d 20 7b 0a 09 73 65 74 20  ine pos} {..set 
26960 73 75 62 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69  sub [Lindex ${li
26970 6e 65 7d 20 31 5d 0a 09 73 65 74 20 70 72 65 76  ne} 1]..set prev
26980 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24   [PreviousWord $
26990 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d  {start} ${line}]
269a0 0a 09 73 65 74 20 63 6f 70 79 5f 6f 70 74 73 20  ..set copy_opts 
269b0 7b 20 2d 66 72 6f 6d 20 2d 74 6f 20 2d 73 68 72  { -from -to -shr
269c0 69 6e 6b 20 2d 7a 6f 6f 6d 20 2d 73 75 62 73 61  ink -zoom -subsa
269d0 6d 70 6c 65 20 7d 0a 09 73 65 74 20 72 65 61 64  mple }..set read
269e0 5f 6f 70 74 73 20 7b 20 2d 66 72 6f 6d 20 2d 74  _opts { -from -t
269f0 6f 20 2d 73 68 72 69 6e 6b 20 2d 66 6f 72 6d 61  o -shrink -forma
26a00 74 20 7d 0a 09 73 65 74 20 77 72 69 74 65 5f 6f  t }..set write_o
26a10 70 74 73 20 7b 20 2d 66 72 6f 6d 20 2d 66 6f 72  pts { -from -for
26a20 6d 61 74 20 7d 0a 09 73 77 69 74 63 68 20 2d 2d  mat }..switch --
26a30 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a   ${pos} {...1 {.
26a40 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
26a50 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
26a60 78 74 7d 20 7b 0a 09 09 09 09 62 6c 61 6e 6b 20  xt} {.....blank 
26a70 63 67 65 74 20 63 6f 6e 66 69 67 75 72 65 20 63  cget configure c
26a80 6f 70 79 20 67 65 74 20 70 75 74 20 72 65 61 64  opy get put read
26a90 20 72 65 64 69 74 68 65 72 20 77 72 69 74 65 20   redither write 
26aa0 20 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 09 32 20   ....}]...}...2 
26ab0 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  {....switch -- $
26ac0 7b 73 75 62 7d 20 7b 0a 09 09 09 09 62 6c 61 6e  {sub} {.....blan
26ad0 6b 20 7b 7d 0a 09 09 09 09 63 67 65 74 20 7b 7d  k {}.....cget {}
26ae0 0a 09 09 09 09 63 6f 6e 66 69 67 75 72 65 20 7b  .....configure {
26af0 7d 0a 09 09 09 09 72 65 64 69 74 68 65 72 20 7b  }.....redither {
26b00 7d 0a 09 09 09 09 63 6f 70 79 20 7b 20 72 65 74  }.....copy { ret
26b10 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
26b20 6d 49 6d 61 67 65 73 20 24 7b 74 65 78 74 7d 5d  mImages ${text}]
26b30 20 7d 0a 09 09 09 09 67 65 74 20 7b 20 72 65 74   }.....get { ret
26b40 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
26b50 73 20 3c 78 3e 5d 20 7d 0a 09 09 09 09 70 75 74  s <x>] }.....put
26b60 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
26b70 61 79 48 69 6e 74 73 20 3c 64 61 74 61 3e 5d 20  ayHints <data>] 
26b80 7d 0a 09 09 09 09 72 65 61 64 20 7b 7d 0a 09 09  }.....read {}...
26b90 09 09 77 72 69 74 65 20 7b 7d 0a 09 09 09 7d 0a  ..write {}....}.
26ba0 09 09 7d 0a 09 09 33 20 7b 0a 09 09 09 73 77 69  ..}...3 {....swi
26bb0 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a  tch -- ${sub} {.
26bc0 09 09 09 09 62 6c 61 6e 6b 20 7b 7d 0a 09 09 09  ....blank {}....
26bd0 09 63 67 65 74 20 7b 7d 0a 09 09 09 09 63 6f 6e  .cget {}.....con
26be0 66 69 67 75 72 65 20 7b 7d 0a 09 09 09 09 72 65  figure {}.....re
26bf0 64 69 74 68 65 72 20 7b 7d 0a 09 09 09 09 63 6f  dither {}.....co
26c00 70 79 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d  py { return [Com
26c10 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
26c20 74 65 78 74 7d 20 24 7b 63 6f 70 79 5f 6f 70 74  text} ${copy_opt
26c30 73 7d 5d 20 7d 0a 09 09 09 09 67 65 74 20 7b 20  s}] }.....get { 
26c40 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
26c50 69 6e 74 73 20 3c 79 3e 5d 20 7d 0a 09 09 09 09  ints <y>] }.....
26c60 70 75 74 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  put { return [Co
26c70 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
26c80 7b 74 65 78 74 7d 20 2d 74 6f 5d 20 7d 0a 09 09  {text} -to] }...
26c90 09 09 72 65 61 64 20 7b 20 72 65 74 75 72 6e 20  ..read { return 
26ca0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
26cb0 74 20 24 7b 74 65 78 74 7d 20 24 7b 72 65 61 64  t ${text} ${read
26cc0 5f 6f 70 74 73 7d 5d 20 7d 0a 09 09 09 09 77 72  _opts}] }.....wr
26cd0 69 74 65 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  ite { return [Co
26ce0 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
26cf0 7b 74 65 78 74 7d 20 24 7b 77 72 69 74 65 5f 6f  {text} ${write_o
26d00 70 74 73 7d 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d  pts}] }....}...}
26d10 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09  ...default {....
26d20 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d  switch -- ${sub}
26d30 20 7b 0a 09 09 09 09 62 6c 61 6e 6b 20 7b 7d 0a   {.....blank {}.
26d40 09 09 09 09 63 67 65 74 20 7b 7d 0a 09 09 09 09  ....cget {}.....
26d50 63 6f 6e 66 69 67 75 72 65 20 7b 7d 0a 09 09 09  configure {}....
26d60 09 72 65 64 69 74 68 65 72 20 7b 7d 0a 09 09 09  .redither {}....
26d70 09 67 65 74 20 7b 7d 0a 09 09 09 09 63 6f 70 79  .get {}.....copy
26d80 20 7b 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d   {......switch -
26d90 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09  - ${prev} {.....
26da0 09 09 2d 66 72 6f 6d 20 2d 0a 09 09 09 09 09 09  ..-from -.......
26db0 2d 74 6f 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  -to { return [Di
26dc0 73 70 6c 61 79 48 69 6e 74 73 20 5b 6c 69 73 74  splayHints [list
26dd0 20 3c 78 31 20 79 31 20 78 32 20 79 32 3e 5d 5d   <x1 y1 x2 y2>]]
26de0 20 7d 0a 09 09 09 09 09 09 2d 7a 6f 6f 6d 20 2d   }.......-zoom -
26df0 0a 09 09 09 09 09 09 2d 73 75 62 73 61 6d 70 6c  .......-subsampl
26e00 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  e { return [Disp
26e10 6c 61 79 48 69 6e 74 73 20 5b 6c 69 73 74 20 3c  layHints [list <
26e20 78 20 79 3e 5d 5d 20 7d 0a 09 09 09 09 09 09 64  x y>]] }.......d
26e30 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 09 09  efault {........
26e40 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
26e50 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
26e60 20 5c 0a 09 09 09 09 09 09 09 5b 52 65 6d 6f 76   \........[Remov
26e70 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c  eUsedOptions ${l
26e80 69 6e 65 7d 20 24 7b 63 6f 70 79 5f 6f 70 74 73  ine} ${copy_opts
26e90 7d 5d 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09 09  }]].......}.....
26ea0 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09 70 75 74  .}.....}.....put
26eb0 20 7b 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d   {......switch -
26ec0 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09  - ${prev} {.....
26ed0 09 09 2d 74 6f 20 7b 0a 09 09 09 09 09 09 09 72  ..-to {........r
26ee0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
26ef0 6e 74 73 20 5b 6c 69 73 74 20 3c 78 31 20 79 31  nts [list <x1 y1
26f00 20 78 32 20 79 32 3e 5d 5d 0a 09 09 09 09 09 09   x2 y2>]].......
26f10 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09  }......}.....}..
26f20 09 09 09 72 65 61 64 20 7b 0a 09 09 09 09 09 73  ...read {......s
26f30 77 69 74 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d  witch -- ${prev}
26f40 20 7b 0a 09 09 09 09 09 09 2d 66 72 6f 6d 20 7b   {.......-from {
26f50 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
26f60 48 69 6e 74 73 20 5b 6c 69 73 74 20 3c 78 31 20  Hints [list <x1 
26f70 79 31 20 78 32 20 79 32 3e 5d 5d 20 7d 0a 09 09  y1 x2 y2>]] }...
26f80 09 09 09 09 2d 74 6f 20 7b 20 72 65 74 75 72 6e  ....-to { return
26f90 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 5b   [DisplayHints [
26fa0 6c 69 73 74 20 3c 78 20 79 3e 5d 5d 20 7d 0a 09  list <x y>]] }..
26fb0 09 09 09 09 09 2d 66 6f 72 6d 61 74 20 7b 20 72  .....-format { r
26fc0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
26fd0 6e 74 73 20 3c 66 6f 72 6d 61 74 4e 61 6d 65 3e  nts <formatName>
26fe0 5d 20 7d 0a 09 09 09 09 09 09 64 65 66 61 75 6c  ] }.......defaul
26ff0 74 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72  t {........retur
27000 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
27010 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09  ist ${text} \...
27020 09 09 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64  .....[RemoveUsed
27030 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20  Options ${line} 
27040 24 7b 72 65 61 64 5f 6f 70 74 73 7d 5d 5d 0a 09  ${read_opts}]]..
27050 09 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a 09 09  .....}......}...
27060 09 09 7d 0a 09 09 09 09 77 72 69 74 65 20 7b 0a  ..}.....write {.
27070 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  .....switch -- $
27080 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09 09 09 2d  {prev} {.......-
27090 66 72 6f 6d 20 7b 20 72 65 74 75 72 6e 20 5b 44  from { return [D
270a0 69 73 70 6c 61 79 48 69 6e 74 73 20 5b 6c 69 73  isplayHints [lis
270b0 74 20 3c 78 31 20 79 31 20 78 32 20 79 32 3e 5d  t <x1 y1 x2 y2>]
270c0 5d 20 7d 0a 09 09 09 09 09 09 2d 66 6f 72 6d 61  ] }.......-forma
270d0 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  t { return [Disp
270e0 6c 61 79 48 69 6e 74 73 20 3c 66 6f 72 6d 61 74  layHints <format
270f0 4e 61 6d 65 3e 5d 20 7d 0a 09 09 09 09 09 09 64  Name>] }.......d
27100 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 09 09  efault {........
27110 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
27120 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
27130 20 5c 0a 09 09 09 09 09 09 09 5b 52 65 6d 6f 76   \........[Remov
27140 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c  eUsedOptions ${l
27150 69 6e 65 7d 20 24 7b 77 72 69 74 65 5f 6f 70 74  ine} ${write_opt
27160 73 7d 5d 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09  s}]].......}....
27170 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09  ..}.....}....}..
27180 09 7d 0a 09 7d 0a 7d 0a 0a 23 20 70 72 6f 63 20  .}..}.}..# proc 
27190 52 61 64 69 6f 62 75 74 74 6f 6e 4f 62 6a 20 7b  RadiobuttonObj {
271a0 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
271b0 69 6e 65 20 70 6f 73 7d 20 7b 0a 23 20 74 68 65  ine pos} {.# the
271c0 20 66 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e   fallback routin
271d0 65 73 20 64 6f 20 74 68 65 20 6a 6f 62 20 70 72  es do the job pr
271e0 65 74 74 79 20 77 65 6c 6c 2e 0a 23 20 7d 0a 0a  etty well..# }..
271f0 70 72 6f 63 20 53 63 61 6c 65 4f 62 6a 20 7b 74  proc ScaleObj {t
27200 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
27210 6e 65 20 70 6f 73 7d 20 7b 0a 0a 09 73 65 74 20  ne pos} {...set 
27220 73 75 62 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69  sub [Lindex ${li
27230 6e 65 7d 20 31 5d 0a 09 73 65 74 20 70 72 65 76  ne} 1]..set prev
27240 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24   [PreviousWord $
27250 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d  {start} ${line}]
27260 0a 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  ...switch -- ${p
27270 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72  os} {...1 {....r
27280 65 74 75 72 6e 20 5b 54 72 79 53 75 62 43 6d 64  eturn [TrySubCmd
27290 73 20 24 7b 74 65 78 74 7d 20 5b 4c 69 6e 64 65  s ${text} [Linde
272a0 78 20 24 7b 6c 69 6e 65 7d 20 30 5d 5d 0a 09 09  x ${line} 0]]...
272b0 7d 0a 09 09 32 20 7b 0a 09 09 09 73 77 69 74 63  }...2 {....switc
272c0 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09  h -- ${sub} {...
272d0 09 09 63 6f 6f 72 64 73 20 7b 20 72 65 74 75 72  ..coords { retur
272e0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
272f0 3f 76 61 6c 75 65 3f 5d 20 7d 0a 09 09 09 09 67  ?value?] }.....g
27300 65 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  et { return [Dis
27310 70 6c 61 79 48 69 6e 74 73 20 3f 78 3f 5d 20 7d  playHints ?x?] }
27320 0a 09 09 09 09 69 64 65 6e 74 69 66 79 20 7b 20  .....identify { 
27330 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
27340 69 6e 74 73 20 3c 78 3e 5d 20 7d 0a 09 09 09 09  ints <x>] }.....
27350 73 65 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  set { return [Di
27360 73 70 6c 61 79 48 69 6e 74 73 20 3c 76 61 6c 75  splayHints <valu
27370 65 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  e>] }....}...}..
27380 09 33 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  .3 {....switch -
27390 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 67  - ${sub} {.....g
273a0 65 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  et { return [Dis
273b0 70 6c 61 79 48 69 6e 74 73 20 3f 79 3f 5d 20 7d  playHints ?y?] }
273c0 0a 09 09 09 09 69 64 65 6e 74 69 66 79 20 7b 20  .....identify { 
273d0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
273e0 69 6e 74 73 20 3c 79 3e 5d 20 7d 0a 09 09 09 7d  ints <y>] }....}
273f0 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20  ...}..}.}..proc 
27400 53 63 72 6f 6c 6c 62 61 72 4f 62 6a 20 7b 74 65  ScrollbarObj {te
27410 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
27420 65 20 70 6f 73 7d 20 7b 0a 0a 09 73 65 74 20 73  e pos} {...set s
27430 75 62 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e  ub [Lindex ${lin
27440 65 7d 20 31 5d 0a 09 73 65 74 20 70 72 65 76 20  e} 1]..set prev 
27450 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b  [PreviousWord ${
27460 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a  start} ${line}].
27470 0a 09 23 20 6e 6f 74 65 20 74 68 61 74 20 74 68  ..# note that th
27480 65 20 60 70 72 65 66 69 78 20 6d 6f 76 65 74 6f  e `prefix moveto
27490 7c 73 63 72 6f 6c 6c 27 0a 09 23 20 63 6f 6e 73  |scroll'..# cons
274a0 74 72 75 63 74 20 69 73 20 68 61 72 64 20 74 6f  truct is hard to
274b0 20 63 6f 6d 70 6c 65 74 65 2e 0a 09 23 0a 09 73   complete...#..s
274c0 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
274d0 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65 74 75 72  {...1 {....retur
274e0 6e 20 5b 54 72 79 53 75 62 43 6d 64 73 20 24 7b  n [TrySubCmds ${
274f0 74 65 78 74 7d 20 5b 4c 69 6e 64 65 78 20 24 7b  text} [Lindex ${
27500 6c 69 6e 65 7d 20 30 5d 5d 0a 09 09 7d 0a 09 09  line} 0]]...}...
27510 32 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d  2 {....switch --
27520 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 61 63   ${sub} {.....ac
27530 74 69 76 61 74 65 20 7b 0a 09 09 09 09 09 72 65  tivate {......re
27540 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
27550 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b  omList ${text} {
27560 0a 09 09 09 09 09 09 61 72 72 6f 77 31 20 73 6c  .......arrow1 sl
27570 69 64 65 72 20 61 72 72 6f 77 32 0a 09 09 09 09  ider arrow2.....
27580 09 7d 5d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 66  .}].....}......f
27590 72 61 63 74 69 6f 6e 20 2d 0a 09 09 09 09 69 64  raction -.....id
275a0 65 6e 74 69 66 79 20 7b 20 72 65 74 75 72 6e 20  entify { return 
275b0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 78  [DisplayHints <x
275c0 3e 5d 20 7d 0a 09 09 09 09 64 65 6c 74 61 20 7b  >] }.....delta {
275d0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
275e0 48 69 6e 74 73 20 3c 64 65 6c 74 61 58 3e 5d 20  Hints <deltaX>] 
275f0 7d 0a 09 09 09 09 73 65 74 20 7b 20 72 65 74 75  }.....set { retu
27600 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
27610 20 3c 66 69 72 73 74 3e 5d 20 7d 0a 09 09 09 7d   <first>] }....}
27620 0a 09 09 7d 0a 09 09 33 20 7b 0a 09 09 09 73 77  ...}...3 {....sw
27630 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b  itch -- ${sub} {
27640 0a 0a 09 09 09 09 66 72 61 63 74 69 6f 6e 20 2d  ......fraction -
27650 0a 09 09 09 09 69 64 65 6e 74 69 66 79 20 7b 20  .....identify { 
27660 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
27670 69 6e 74 73 20 3c 79 3e 5d 20 7d 0a 09 09 09 09  ints <y>] }.....
27680 64 65 6c 74 61 20 7b 20 72 65 74 75 72 6e 20 5b  delta { return [
27690 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 64 65  DisplayHints <de
276a0 6c 74 61 59 3e 5d 20 7d 0a 09 09 09 09 73 65 74  ltaY>] }.....set
276b0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
276c0 61 79 48 69 6e 74 73 20 3c 6c 61 73 74 3e 5d 20  ayHints <last>] 
276d0 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a  }....}...}..}.}.
276e0 0a 70 72 6f 63 20 54 65 78 74 4f 62 6a 20 7b 74  .proc TextObj {t
276f0 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
27700 6e 65 20 70 6f 73 7d 20 7b 0a 09 23 20 54 4f 44  ne pos} {..# TOD
27710 4f 20 2e 2e 2e 0a 09 72 65 74 75 72 6e 20 5b 43  O .....return [C
27720 6f 6d 70 6c 65 74 65 46 72 6f 6d 4f 70 74 69 6f  ompleteFromOptio
27730 6e 73 4f 72 53 75 62 43 6d 64 73 20 5c 0a 09 24  nsOrSubCmds \..$
27740 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20  {text} ${start} 
27750 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24  ${end} ${line} $
27760 7b 70 6f 73 7d 5d 0a 7d 0a 0a 7d 3b 20 23 20 6e  {pos}].}..}; # n
27770 61 6d 65 73 70 61 63 65 20 74 63 6c 72 65 61 64  amespace tclread
27780 6c 69 6e 65 0a                                   line.