Tk Source Code

Hex Artifact Content
Login
Bounty program for improvements to Tcl and certain Tcl packages.

Artifact b02d466ba9f0ef9c353e833b7bc85697ef2fe72e:


0000: 23 0a 23 20 44 45 52 49 56 45 44 20 46 52 4f 4d  #.# DERIVED FROM
0010: 3a 20 74 6b 2f 6c 69 62 72 61 72 79 2f 65 6e 74  : tk/library/ent
0020: 72 79 2e 74 63 6c 20 72 31 2e 32 32 0a 23 0a 23  ry.tcl r1.22.#.#
0030: 20 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 31   Copyright (c) 1
0040: 39 39 32 2d 31 39 39 34 20 54 68 65 20 52 65 67  992-1994 The Reg
0050: 65 6e 74 73 20 6f 66 20 74 68 65 20 55 6e 69 76  ents of the Univ
0060: 65 72 73 69 74 79 20 6f 66 20 43 61 6c 69 66 6f  ersity of Califo
0070: 72 6e 69 61 2e 0a 23 20 43 6f 70 79 72 69 67 68  rnia..# Copyrigh
0080: 74 20 28 63 29 20 31 39 39 34 2d 31 39 39 37 20  t (c) 1994-1997 
0090: 53 75 6e 20 4d 69 63 72 6f 73 79 73 74 65 6d 73  Sun Microsystems
00a0: 2c 20 49 6e 63 2e 0a 23 20 43 6f 70 79 72 69 67  , Inc..# Copyrig
00b0: 68 74 20 28 63 29 20 32 30 30 34 2c 20 4a 6f 65  ht (c) 2004, Joe
00c0: 20 45 6e 67 6c 69 73 68 0a 23 0a 23 20 53 65 65   English.#.# See
00d0: 20 74 68 65 20 66 69 6c 65 20 22 6c 69 63 65 6e   the file "licen
00e0: 73 65 2e 74 65 72 6d 73 22 20 66 6f 72 20 69 6e  se.terms" for in
00f0: 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 75 73 61  formation on usa
0100: 67 65 20 61 6e 64 20 72 65 64 69 73 74 72 69 62  ge and redistrib
0110: 75 74 69 6f 6e 0a 23 20 6f 66 20 74 68 69 73 20  ution.# of this 
0120: 66 69 6c 65 2c 20 61 6e 64 20 66 6f 72 20 61 20  file, and for a 
0130: 44 49 53 43 4c 41 49 4d 45 52 20 4f 46 20 41 4c  DISCLAIMER OF AL
0140: 4c 20 57 41 52 52 41 4e 54 49 45 53 2e 0a 23 0a  L WARRANTIES..#.
0150: 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  .namespace eval 
0160: 74 74 6b 20 7b 0a 20 20 20 20 6e 61 6d 65 73 70  ttk {.    namesp
0170: 61 63 65 20 65 76 61 6c 20 65 6e 74 72 79 20 7b  ace eval entry {
0180: 0a 09 76 61 72 69 61 62 6c 65 20 53 74 61 74 65  ..variable State
0190: 0a 0a 09 73 65 74 20 53 74 61 74 65 28 78 29 20  ...set State(x) 
01a0: 30 0a 09 73 65 74 20 53 74 61 74 65 28 73 65 6c  0..set State(sel
01b0: 65 63 74 4d 6f 64 65 29 20 6e 6f 6e 65 0a 09 73  ectMode) none..s
01c0: 65 74 20 53 74 61 74 65 28 61 6e 63 68 6f 72 29  et State(anchor)
01d0: 20 30 0a 09 73 65 74 20 53 74 61 74 65 28 73 63   0..set State(sc
01e0: 61 6e 58 29 20 30 0a 09 73 65 74 20 53 74 61 74  anX) 0..set Stat
01f0: 65 28 73 63 61 6e 49 6e 64 65 78 29 20 30 0a 09  e(scanIndex) 0..
0200: 73 65 74 20 53 74 61 74 65 28 73 63 61 6e 4d 6f  set State(scanMo
0210: 76 65 64 29 20 30 0a 0a 09 23 20 42 75 74 74 6f  ved) 0...# Butto
0220: 6e 2d 32 20 73 63 61 6e 20 73 70 65 65 64 20 69  n-2 scan speed i
0230: 73 20 28 73 63 61 6e 4e 75 6d 2f 73 63 61 6e 44  s (scanNum/scanD
0240: 65 6e 29 20 63 68 61 72 61 63 74 65 72 73 0a 09  en) characters..
0250: 23 20 70 65 72 20 70 69 78 65 6c 20 6f 66 20 6d  # per pixel of m
0260: 6f 75 73 65 20 6d 6f 76 65 6d 65 6e 74 2e 0a 09  ouse movement...
0270: 23 20 54 68 65 20 73 74 61 6e 64 61 72 64 20 54  # The standard T
0280: 6b 20 65 6e 74 72 79 20 77 69 64 67 65 74 20 75  k entry widget u
0290: 73 65 73 20 74 68 65 20 65 71 75 69 76 61 6c 65  ses the equivale
02a0: 6e 74 20 6f 66 0a 09 23 20 73 63 61 6e 4e 75 6d  nt of..# scanNum
02b0: 20 3d 20 31 30 2c 20 73 63 61 6e 44 65 6e 20 3d   = 10, scanDen =
02c0: 20 61 76 65 72 61 67 65 20 63 68 61 72 61 63 74   average charact
02d0: 65 72 20 77 69 64 74 68 2e 0a 09 23 20 49 20 64  er width...# I d
02e0: 6f 6e 27 74 20 6b 6e 6f 77 20 77 68 79 20 74 68  on't know why th
02f0: 61 74 20 77 61 73 20 63 68 6f 73 65 6e 2e 0a 09  at was chosen...
0300: 23 0a 09 73 65 74 20 53 74 61 74 65 28 73 63 61  #..set State(sca
0310: 6e 4e 75 6d 29 20 31 0a 09 73 65 74 20 53 74 61  nNum) 1..set Sta
0320: 74 65 28 73 63 61 6e 44 65 6e 29 20 31 0a 09 73  te(scanDen) 1..s
0330: 65 74 20 53 74 61 74 65 28 64 65 61 64 62 61 6e  et State(deadban
0340: 64 29 20 33 09 3b 23 20 23 70 69 78 65 6c 73 20  d) 3.;# #pixels 
0350: 66 6f 72 20 6d 6f 75 73 65 2d 6d 6f 76 65 64 20  for mouse-moved 
0360: 64 65 61 64 62 61 6e 64 2e 0a 20 20 20 20 7d 0a  deadband..    }.
0370: 7d 0a 0a 23 23 23 20 4f 70 74 69 6f 6e 20 64 61  }..### Option da
0380: 74 61 62 61 73 65 20 73 65 74 74 69 6e 67 73 2e  tabase settings.
0390: 0a 23 0a 6f 70 74 69 6f 6e 20 61 64 64 20 2a 54  .#.option add *T
03a0: 45 6e 74 72 79 2e 63 75 72 73 6f 72 20 5b 74 74  Entry.cursor [tt
03b0: 6b 3a 3a 63 75 72 73 6f 72 20 74 65 78 74 5d 0a  k::cursor text].
03c0: 0a 23 23 23 20 42 69 6e 64 69 6e 67 73 2e 0a 23  .### Bindings..#
03d0: 0a 23 20 52 65 6d 6f 76 65 64 20 74 68 65 20 66  .# Removed the f
03e0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 6e 64 61 72  ollowing standar
03f0: 64 20 54 6b 20 62 69 6e 64 69 6e 67 73 3a 0a 23  d Tk bindings:.#
0400: 0a 23 20 3c 43 6f 6e 74 72 6f 6c 2d 4b 65 79 2d  .# <Control-Key-
0410: 73 70 61 63 65 3e 2c 20 3c 43 6f 6e 74 72 6f 6c  space>, <Control
0420: 2d 53 68 69 66 74 2d 4b 65 79 2d 73 70 61 63 65  -Shift-Key-space
0430: 3e 2c 0a 23 20 3c 4b 65 79 2d 53 65 6c 65 63 74  >,.# <Key-Select
0440: 3e 2c 20 20 3c 53 68 69 66 74 2d 4b 65 79 2d 53  >,  <Shift-Key-S
0450: 65 6c 65 63 74 3e 3a 0a 23 09 74 74 6b 3a 3a 65  elect>:.#.ttk::e
0460: 6e 74 72 79 20 77 69 64 67 65 74 20 64 6f 65 73  ntry widget does
0470: 6e 27 74 20 75 73 65 20 73 65 6c 65 63 74 69 6f  n't use selectio
0480: 6e 20 61 6e 63 68 6f 72 2e 0a 23 20 3c 4b 65 79  n anchor..# <Key
0490: 2d 49 6e 73 65 72 74 3e 3a 0a 23 09 49 6e 73 65  -Insert>:.#.Inse
04a0: 72 74 73 20 50 52 49 4d 41 52 59 20 73 65 6c 65  rts PRIMARY sele
04b0: 63 74 69 6f 6e 20 28 6f 6e 20 6e 6f 6e 2d 57 69  ction (on non-Wi
04c0: 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 29  ndows platforms)
04d0: 2e 0a 23 09 54 68 69 73 20 69 73 20 69 6e 63 6f  ..#.This is inco
04e0: 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 74 79  nsistent with ty
04f0: 70 69 63 61 6c 20 70 6c 61 74 66 6f 72 6d 20 62  pical platform b
0500: 69 6e 64 69 6e 67 73 2e 0a 23 20 3c 44 6f 75 62  indings..# <Doub
0510: 6c 65 2d 53 68 69 66 74 2d 42 75 74 74 6f 6e 50  le-Shift-ButtonP
0520: 72 65 73 73 2d 31 3e 2c 20 3c 54 72 69 70 6c 65  ress-1>, <Triple
0530: 2d 53 68 69 66 74 2d 42 75 74 74 6f 6e 50 72 65  -Shift-ButtonPre
0540: 73 73 2d 31 3e 3a 0a 23 09 54 68 65 73 65 20 64  ss-1>:.#.These d
0550: 6f 6e 27 74 20 64 6f 20 74 68 65 20 72 69 67 68  on't do the righ
0560: 74 20 74 68 69 6e 67 20 74 6f 20 73 74 61 72 74  t thing to start
0570: 20 77 69 74 68 2e 0a 23 20 3c 4d 65 74 61 2d 4b   with..# <Meta-K
0580: 65 79 2d 62 3e 2c 20 3c 4d 65 74 61 2d 4b 65 79  ey-b>, <Meta-Key
0590: 2d 64 3e 2c 20 3c 4d 65 74 61 2d 4b 65 79 2d 66  -d>, <Meta-Key-f
05a0: 3e 2c 0a 23 20 3c 4d 65 74 61 2d 4b 65 79 2d 42  >,.# <Meta-Key-B
05b0: 61 63 6b 53 70 61 63 65 3e 2c 20 3c 4d 65 74 61  ackSpace>, <Meta
05c0: 2d 4b 65 79 2d 44 65 6c 65 74 65 3e 3a 0a 23 09  -Key-Delete>:.#.
05d0: 4a 75 64 67 6d 65 6e 74 20 63 61 6c 6c 2e 20 20  Judgment call.  
05e0: 49 66 20 3c 4d 65 74 61 3e 20 68 61 70 70 65 6e  If <Meta> happen
05f0: 73 20 74 6f 20 62 65 20 61 73 73 69 67 6e 65 64  s to be assigned
0600: 20 74 6f 20 74 68 65 20 41 6c 74 20 6b 65 79 2c   to the Alt key,
0610: 0a 23 09 74 68 65 73 65 20 63 6f 75 6c 64 20 63  .#.these could c
0620: 6f 6e 66 6c 69 63 74 20 77 69 74 68 20 61 70 70  onflict with app
0630: 6c 69 63 61 74 69 6f 6e 20 61 63 63 65 6c 65 72  lication acceler
0640: 61 74 6f 72 73 2e 0a 23 09 28 50 6c 75 73 2c 20  ators..#.(Plus, 
0650: 77 68 6f 20 68 61 73 20 61 20 4d 65 74 61 20 6b  who has a Meta k
0660: 65 79 20 74 68 65 73 65 20 64 61 79 73 3f 29 0a  ey these days?).
0670: 23 20 3c 43 6f 6e 74 72 6f 6c 2d 4b 65 79 2d 74  # <Control-Key-t
0680: 3e 3a 0a 23 09 41 6e 6f 74 68 65 72 20 6a 75 64  >:.#.Another jud
0690: 67 6d 65 6e 74 20 63 61 6c 6c 2e 20 20 49 66 20  gment call.  If 
06a0: 61 6e 79 6f 6e 65 20 6d 69 73 73 65 73 20 74 68  anyone misses th
06b0: 69 73 2c 20 6c 65 74 20 6d 65 20 6b 6e 6f 77 0a  is, let me know.
06c0: 23 09 61 6e 64 20 49 27 6c 6c 20 70 75 74 20 69  #.and I'll put i
06d0: 74 20 62 61 63 6b 2e 0a 23 0a 0a 23 23 20 43 6c  t back..#..## Cl
06e0: 69 70 62 6f 61 72 64 20 65 76 65 6e 74 73 3a 0a  ipboard events:.
06f0: 23 0a 62 69 6e 64 20 54 45 6e 74 72 79 20 3c 3c  #.bind TEntry <<
0700: 43 75 74 3e 3e 20 09 09 09 7b 20 74 74 6b 3a 3a  Cut>> ...{ ttk::
0710: 65 6e 74 72 79 3a 3a 43 75 74 20 25 57 20 7d 0a  entry::Cut %W }.
0720: 62 69 6e 64 20 54 45 6e 74 72 79 20 3c 3c 43 6f  bind TEntry <<Co
0730: 70 79 3e 3e 20 09 09 09 7b 20 74 74 6b 3a 3a 65  py>> ...{ ttk::e
0740: 6e 74 72 79 3a 3a 43 6f 70 79 20 25 57 20 7d 0a  ntry::Copy %W }.
0750: 62 69 6e 64 20 54 45 6e 74 72 79 20 3c 3c 50 61  bind TEntry <<Pa
0760: 73 74 65 3e 3e 20 09 09 09 7b 20 74 74 6b 3a 3a  ste>> ...{ ttk::
0770: 65 6e 74 72 79 3a 3a 50 61 73 74 65 20 25 57 20  entry::Paste %W 
0780: 7d 0a 62 69 6e 64 20 54 45 6e 74 72 79 20 3c 3c  }.bind TEntry <<
0790: 43 6c 65 61 72 3e 3e 20 09 09 09 7b 20 74 74 6b  Clear>> ...{ ttk
07a0: 3a 3a 65 6e 74 72 79 3a 3a 43 6c 65 61 72 20 25  ::entry::Clear %
07b0: 57 20 7d 0a 0a 23 23 20 42 75 74 74 6f 6e 31 20  W }..## Button1 
07c0: 62 69 6e 64 69 6e 67 73 3a 0a 23 09 55 73 65 64  bindings:.#.Used
07d0: 20 66 6f 72 20 73 65 6c 65 63 74 69 6f 6e 20 61   for selection a
07e0: 6e 64 20 6e 61 76 69 67 61 74 69 6f 6e 2e 0a 23  nd navigation..#
07f0: 0a 62 69 6e 64 20 54 45 6e 74 72 79 20 3c 42 75  .bind TEntry <Bu
0800: 74 74 6f 6e 50 72 65 73 73 2d 31 3e 20 09 09 7b  ttonPress-1> ..{
0810: 20 74 74 6b 3a 3a 65 6e 74 72 79 3a 3a 50 72 65   ttk::entry::Pre
0820: 73 73 20 25 57 20 25 78 20 7d 0a 62 69 6e 64 20  ss %W %x }.bind 
0830: 54 45 6e 74 72 79 20 3c 53 68 69 66 74 2d 42 75  TEntry <Shift-Bu
0840: 74 74 6f 6e 50 72 65 73 73 2d 31 3e 09 7b 20 74  ttonPress-1>.{ t
0850: 74 6b 3a 3a 65 6e 74 72 79 3a 3a 53 68 69 66 74  tk::entry::Shift
0860: 2d 50 72 65 73 73 20 25 57 20 25 78 20 7d 0a 62  -Press %W %x }.b
0870: 69 6e 64 20 54 45 6e 74 72 79 20 3c 44 6f 75 62  ind TEntry <Doub
0880: 6c 65 2d 42 75 74 74 6f 6e 50 72 65 73 73 2d 31  le-ButtonPress-1
0890: 3e 20 09 7b 20 74 74 6b 3a 3a 65 6e 74 72 79 3a  > .{ ttk::entry:
08a0: 3a 53 65 6c 65 63 74 20 25 57 20 25 78 20 77 6f  :Select %W %x wo
08b0: 72 64 20 7d 0a 62 69 6e 64 20 54 45 6e 74 72 79  rd }.bind TEntry
08c0: 20 3c 54 72 69 70 6c 65 2d 42 75 74 74 6f 6e 50   <Triple-ButtonP
08d0: 72 65 73 73 2d 31 3e 20 09 7b 20 74 74 6b 3a 3a  ress-1> .{ ttk::
08e0: 65 6e 74 72 79 3a 3a 53 65 6c 65 63 74 20 25 57  entry::Select %W
08f0: 20 25 78 20 6c 69 6e 65 20 7d 0a 62 69 6e 64 20   %x line }.bind 
0900: 54 45 6e 74 72 79 20 3c 42 31 2d 4d 6f 74 69 6f  TEntry <B1-Motio
0910: 6e 3e 09 09 09 7b 20 74 74 6b 3a 3a 65 6e 74 72  n>...{ ttk::entr
0920: 79 3a 3a 44 72 61 67 20 25 57 20 25 78 20 7d 0a  y::Drag %W %x }.
0930: 0a 62 69 6e 64 20 54 45 6e 74 72 79 20 3c 42 31  .bind TEntry <B1
0940: 2d 4c 65 61 76 65 3e 20 09 09 7b 20 74 74 6b 3a  -Leave> ..{ ttk:
0950: 3a 65 6e 74 72 79 3a 3a 44 72 61 67 4f 75 74 20  :entry::DragOut 
0960: 25 57 20 25 6d 20 7d 0a 62 69 6e 64 20 54 45 6e  %W %m }.bind TEn
0970: 74 72 79 20 3c 42 31 2d 45 6e 74 65 72 3e 09 09  try <B1-Enter>..
0980: 7b 20 74 74 6b 3a 3a 65 6e 74 72 79 3a 3a 44 72  { ttk::entry::Dr
0990: 61 67 49 6e 20 25 57 20 7d 0a 62 69 6e 64 20 54  agIn %W }.bind T
09a0: 45 6e 74 72 79 20 3c 42 75 74 74 6f 6e 52 65 6c  Entry <ButtonRel
09b0: 65 61 73 65 2d 31 3e 09 7b 20 74 74 6b 3a 3a 65  ease-1>.{ ttk::e
09c0: 6e 74 72 79 3a 3a 52 65 6c 65 61 73 65 20 25 57  ntry::Release %W
09d0: 20 7d 0a 0a 62 69 6e 64 20 54 45 6e 74 72 79 20   }..bind TEntry 
09e0: 3c 43 6f 6e 74 72 6f 6c 2d 42 75 74 74 6f 6e 50  <Control-ButtonP
09f0: 72 65 73 73 2d 31 3e 20 7b 0a 20 20 20 20 25 57  ress-1> {.    %W
0a00: 20 69 6e 73 74 61 74 65 20 7b 21 72 65 61 64 6f   instate {!reado
0a10: 6e 6c 79 20 21 64 69 73 61 62 6c 65 64 7d 20 7b  nly !disabled} {
0a20: 20 25 57 20 69 63 75 72 73 6f 72 20 40 25 78 20   %W icursor @%x 
0a30: 3b 20 66 6f 63 75 73 20 25 57 20 7d 0a 7d 0a 0a  ; focus %W }.}..
0a40: 23 23 20 42 75 74 74 6f 6e 32 20 62 69 6e 64 69  ## Button2 bindi
0a50: 6e 67 73 3a 0a 23 09 55 73 65 64 20 66 6f 72 20  ngs:.#.Used for 
0a60: 73 63 61 6e 6e 69 6e 67 20 61 6e 64 20 70 72 69  scanning and pri
0a70: 6d 61 72 79 20 74 72 61 6e 73 66 65 72 2e 0a 23  mary transfer..#
0a80: 09 4e 6f 74 65 3a 20 42 75 74 74 6f 6e 52 65 6c  .Note: ButtonRel
0a90: 65 61 73 65 2d 32 20 69 73 20 6d 61 70 70 65 64  ease-2 is mapped
0aa0: 20 74 6f 20 3c 3c 50 61 73 74 65 53 65 6c 65 63   to <<PasteSelec
0ab0: 74 69 6f 6e 3e 3e 20 69 6e 20 74 6b 2e 74 63 6c  tion>> in tk.tcl
0ac0: 2e 0a 23 0a 62 69 6e 64 20 54 45 6e 74 72 79 20  ..#.bind TEntry 
0ad0: 3c 42 75 74 74 6f 6e 50 72 65 73 73 2d 32 3e 20  <ButtonPress-2> 
0ae0: 09 09 7b 20 74 74 6b 3a 3a 65 6e 74 72 79 3a 3a  ..{ ttk::entry::
0af0: 53 63 61 6e 4d 61 72 6b 20 25 57 20 25 78 20 7d  ScanMark %W %x }
0b00: 0a 62 69 6e 64 20 54 45 6e 74 72 79 20 3c 42 32  .bind TEntry <B2
0b10: 2d 4d 6f 74 69 6f 6e 3e 20 09 09 7b 20 74 74 6b  -Motion> ..{ ttk
0b20: 3a 3a 65 6e 74 72 79 3a 3a 53 63 61 6e 44 72 61  ::entry::ScanDra
0b30: 67 20 25 57 20 25 78 20 7d 0a 62 69 6e 64 20 54  g %W %x }.bind T
0b40: 45 6e 74 72 79 20 3c 42 75 74 74 6f 6e 52 65 6c  Entry <ButtonRel
0b50: 65 61 73 65 2d 32 3e 09 09 7b 20 74 74 6b 3a 3a  ease-2>..{ ttk::
0b60: 65 6e 74 72 79 3a 3a 53 63 61 6e 52 65 6c 65 61  entry::ScanRelea
0b70: 73 65 20 25 57 20 25 78 20 7d 0a 62 69 6e 64 20  se %W %x }.bind 
0b80: 54 45 6e 74 72 79 20 3c 3c 50 61 73 74 65 53 65  TEntry <<PasteSe
0b90: 6c 65 63 74 69 6f 6e 3e 3e 09 09 7b 20 74 74 6b  lection>>..{ ttk
0ba0: 3a 3a 65 6e 74 72 79 3a 3a 53 63 61 6e 52 65 6c  ::entry::ScanRel
0bb0: 65 61 73 65 20 25 57 20 25 78 20 7d 0a 0a 23 23  ease %W %x }..##
0bc0: 20 4b 65 79 62 6f 61 72 64 20 6e 61 76 69 67 61   Keyboard naviga
0bd0: 74 69 6f 6e 20 62 69 6e 64 69 6e 67 73 3a 0a 23  tion bindings:.#
0be0: 0a 62 69 6e 64 20 54 45 6e 74 72 79 20 3c 4b 65  .bind TEntry <Ke
0bf0: 79 2d 4c 65 66 74 3e 20 09 09 09 7b 20 74 74 6b  y-Left> ...{ ttk
0c00: 3a 3a 65 6e 74 72 79 3a 3a 4d 6f 76 65 20 25 57  ::entry::Move %W
0c10: 20 70 72 65 76 63 68 61 72 20 7d 0a 62 69 6e 64   prevchar }.bind
0c20: 20 54 45 6e 74 72 79 20 3c 4b 65 79 2d 52 69 67   TEntry <Key-Rig
0c30: 68 74 3e 20 09 09 7b 20 74 74 6b 3a 3a 65 6e 74  ht> ..{ ttk::ent
0c40: 72 79 3a 3a 4d 6f 76 65 20 25 57 20 6e 65 78 74  ry::Move %W next
0c50: 63 68 61 72 20 7d 0a 62 69 6e 64 20 54 45 6e 74  char }.bind TEnt
0c60: 72 79 20 3c 43 6f 6e 74 72 6f 6c 2d 4b 65 79 2d  ry <Control-Key-
0c70: 4c 65 66 74 3e 09 09 7b 20 74 74 6b 3a 3a 65 6e  Left>..{ ttk::en
0c80: 74 72 79 3a 3a 4d 6f 76 65 20 25 57 20 70 72 65  try::Move %W pre
0c90: 76 77 6f 72 64 20 7d 0a 62 69 6e 64 20 54 45 6e  vword }.bind TEn
0ca0: 74 72 79 20 3c 43 6f 6e 74 72 6f 6c 2d 4b 65 79  try <Control-Key
0cb0: 2d 52 69 67 68 74 3e 09 09 7b 20 74 74 6b 3a 3a  -Right>..{ ttk::
0cc0: 65 6e 74 72 79 3a 3a 4d 6f 76 65 20 25 57 20 6e  entry::Move %W n
0cd0: 65 78 74 77 6f 72 64 20 7d 0a 62 69 6e 64 20 54  extword }.bind T
0ce0: 45 6e 74 72 79 20 3c 4b 65 79 2d 48 6f 6d 65 3e  Entry <Key-Home>
0cf0: 09 09 09 7b 20 74 74 6b 3a 3a 65 6e 74 72 79 3a  ...{ ttk::entry:
0d00: 3a 4d 6f 76 65 20 25 57 20 68 6f 6d 65 20 7d 0a  :Move %W home }.
0d10: 62 69 6e 64 20 54 45 6e 74 72 79 20 3c 4b 65 79  bind TEntry <Key
0d20: 2d 45 6e 64 3e 09 09 09 7b 20 74 74 6b 3a 3a 65  -End>...{ ttk::e
0d30: 6e 74 72 79 3a 3a 4d 6f 76 65 20 25 57 20 65 6e  ntry::Move %W en
0d40: 64 20 7d 0a 0a 62 69 6e 64 20 54 45 6e 74 72 79  d }..bind TEntry
0d50: 20 3c 53 68 69 66 74 2d 4b 65 79 2d 4c 65 66 74   <Shift-Key-Left
0d60: 3e 20 09 09 7b 20 74 74 6b 3a 3a 65 6e 74 72 79  > ..{ ttk::entry
0d70: 3a 3a 45 78 74 65 6e 64 20 25 57 20 70 72 65 76  ::Extend %W prev
0d80: 63 68 61 72 20 7d 0a 62 69 6e 64 20 54 45 6e 74  char }.bind TEnt
0d90: 72 79 20 3c 53 68 69 66 74 2d 4b 65 79 2d 52 69  ry <Shift-Key-Ri
0da0: 67 68 74 3e 09 09 7b 20 74 74 6b 3a 3a 65 6e 74  ght>..{ ttk::ent
0db0: 72 79 3a 3a 45 78 74 65 6e 64 20 25 57 20 6e 65  ry::Extend %W ne
0dc0: 78 74 63 68 61 72 20 7d 0a 62 69 6e 64 20 54 45  xtchar }.bind TE
0dd0: 6e 74 72 79 20 3c 53 68 69 66 74 2d 43 6f 6e 74  ntry <Shift-Cont
0de0: 72 6f 6c 2d 4b 65 79 2d 4c 65 66 74 3e 09 7b 20  rol-Key-Left>.{ 
0df0: 74 74 6b 3a 3a 65 6e 74 72 79 3a 3a 45 78 74 65  ttk::entry::Exte
0e00: 6e 64 20 25 57 20 70 72 65 76 77 6f 72 64 20 7d  nd %W prevword }
0e10: 0a 62 69 6e 64 20 54 45 6e 74 72 79 20 3c 53 68  .bind TEntry <Sh
0e20: 69 66 74 2d 43 6f 6e 74 72 6f 6c 2d 4b 65 79 2d  ift-Control-Key-
0e30: 52 69 67 68 74 3e 09 7b 20 74 74 6b 3a 3a 65 6e  Right>.{ ttk::en
0e40: 74 72 79 3a 3a 45 78 74 65 6e 64 20 25 57 20 6e  try::Extend %W n
0e50: 65 78 74 77 6f 72 64 20 7d 0a 62 69 6e 64 20 54  extword }.bind T
0e60: 45 6e 74 72 79 20 3c 53 68 69 66 74 2d 4b 65 79  Entry <Shift-Key
0e70: 2d 48 6f 6d 65 3e 09 09 7b 20 74 74 6b 3a 3a 65  -Home>..{ ttk::e
0e80: 6e 74 72 79 3a 3a 45 78 74 65 6e 64 20 25 57 20  ntry::Extend %W 
0e90: 68 6f 6d 65 20 7d 0a 62 69 6e 64 20 54 45 6e 74  home }.bind TEnt
0ea0: 72 79 20 3c 53 68 69 66 74 2d 4b 65 79 2d 45 6e  ry <Shift-Key-En
0eb0: 64 3e 09 09 7b 20 74 74 6b 3a 3a 65 6e 74 72 79  d>..{ ttk::entry
0ec0: 3a 3a 45 78 74 65 6e 64 20 25 57 20 65 6e 64 20  ::Extend %W end 
0ed0: 7d 0a 0a 62 69 6e 64 20 54 45 6e 74 72 79 20 3c  }..bind TEntry <
0ee0: 43 6f 6e 74 72 6f 6c 2d 4b 65 79 2d 73 6c 61 73  Control-Key-slas
0ef0: 68 3e 20 09 7b 20 25 57 20 73 65 6c 65 63 74 69  h> .{ %W selecti
0f00: 6f 6e 20 72 61 6e 67 65 20 30 20 65 6e 64 20 7d  on range 0 end }
0f10: 0a 62 69 6e 64 20 54 45 6e 74 72 79 20 3c 43 6f  .bind TEntry <Co
0f20: 6e 74 72 6f 6c 2d 4b 65 79 2d 62 61 63 6b 73 6c  ntrol-Key-backsl
0f30: 61 73 68 3e 20 09 7b 20 25 57 20 73 65 6c 65 63  ash> .{ %W selec
0f40: 74 69 6f 6e 20 63 6c 65 61 72 20 7d 0a 0a 62 69  tion clear }..bi
0f50: 6e 64 20 54 45 6e 74 72 79 20 3c 3c 54 72 61 76  nd TEntry <<Trav
0f60: 65 72 73 65 49 6e 3e 3e 20 09 7b 20 25 57 20 73  erseIn>> .{ %W s
0f70: 65 6c 65 63 74 69 6f 6e 20 72 61 6e 67 65 20 30  election range 0
0f80: 20 65 6e 64 3b 20 25 57 20 69 63 75 72 73 6f 72   end; %W icursor
0f90: 20 65 6e 64 20 7d 0a 0a 23 23 20 45 64 69 74 20   end }..## Edit 
0fa0: 62 69 6e 64 69 6e 67 73 3a 0a 23 0a 62 69 6e 64  bindings:.#.bind
0fb0: 20 54 45 6e 74 72 79 20 3c 4b 65 79 50 72 65 73   TEntry <KeyPres
0fc0: 73 3e 20 09 09 09 7b 20 74 74 6b 3a 3a 65 6e 74  s> ...{ ttk::ent
0fd0: 72 79 3a 3a 49 6e 73 65 72 74 20 25 57 20 25 41  ry::Insert %W %A
0fe0: 20 7d 0a 62 69 6e 64 20 54 45 6e 74 72 79 20 3c   }.bind TEntry <
0ff0: 4b 65 79 2d 44 65 6c 65 74 65 3e 09 09 7b 20 74  Key-Delete>..{ t
1000: 74 6b 3a 3a 65 6e 74 72 79 3a 3a 44 65 6c 65 74  tk::entry::Delet
1010: 65 20 25 57 20 7d 0a 62 69 6e 64 20 54 45 6e 74  e %W }.bind TEnt
1020: 72 79 20 3c 4b 65 79 2d 42 61 63 6b 53 70 61 63  ry <Key-BackSpac
1030: 65 3e 20 09 09 7b 20 74 74 6b 3a 3a 65 6e 74 72  e> ..{ ttk::entr
1040: 79 3a 3a 42 61 63 6b 73 70 61 63 65 20 25 57 20  y::Backspace %W 
1050: 7d 0a 0a 23 20 49 67 6e 6f 72 65 20 61 6c 6c 20  }..# Ignore all 
1060: 41 6c 74 2c 20 4d 65 74 61 2c 20 61 6e 64 20 43  Alt, Meta, and C
1070: 6f 6e 74 72 6f 6c 20 6b 65 79 70 72 65 73 73 65  ontrol keypresse
1080: 73 20 75 6e 6c 65 73 73 20 65 78 70 6c 69 63 69  s unless explici
1090: 74 6c 79 20 62 6f 75 6e 64 2e 0a 23 20 4f 74 68  tly bound..# Oth
10a0: 65 72 77 69 73 65 2c 20 74 68 65 20 3c 4b 65 79  erwise, the <Key
10b0: 50 72 65 73 73 3e 20 63 6c 61 73 73 20 62 69 6e  Press> class bin
10c0: 64 69 6e 67 20 77 69 6c 6c 20 66 69 72 65 20 61  ding will fire a
10d0: 6e 64 20 69 6e 73 65 72 74 20 74 68 65 20 63 68  nd insert the ch
10e0: 61 72 61 63 74 65 72 2e 0a 23 20 44 69 74 74 6f  aracter..# Ditto
10f0: 20 66 6f 72 20 45 73 63 61 70 65 2c 20 52 65 74   for Escape, Ret
1100: 75 72 6e 2c 20 61 6e 64 20 54 61 62 2e 0a 23 0a  urn, and Tab..#.
1110: 62 69 6e 64 20 54 45 6e 74 72 79 20 3c 41 6c 74  bind TEntry <Alt
1120: 2d 4b 65 79 50 72 65 73 73 3e 09 09 7b 23 20 6e  -KeyPress>..{# n
1130: 6f 74 68 69 6e 67 7d 0a 62 69 6e 64 20 54 45 6e  othing}.bind TEn
1140: 74 72 79 20 3c 4d 65 74 61 2d 4b 65 79 50 72 65  try <Meta-KeyPre
1150: 73 73 3e 09 09 7b 23 20 6e 6f 74 68 69 6e 67 7d  ss>..{# nothing}
1160: 0a 62 69 6e 64 20 54 45 6e 74 72 79 20 3c 43 6f  .bind TEntry <Co
1170: 6e 74 72 6f 6c 2d 4b 65 79 50 72 65 73 73 3e 20  ntrol-KeyPress> 
1180: 09 09 7b 23 20 6e 6f 74 68 69 6e 67 7d 0a 62 69  ..{# nothing}.bi
1190: 6e 64 20 54 45 6e 74 72 79 20 3c 4b 65 79 2d 45  nd TEntry <Key-E
11a0: 73 63 61 70 65 3e 20 09 09 7b 23 20 6e 6f 74 68  scape> ..{# noth
11b0: 69 6e 67 7d 0a 62 69 6e 64 20 54 45 6e 74 72 79  ing}.bind TEntry
11c0: 20 3c 4b 65 79 2d 52 65 74 75 72 6e 3e 20 09 09   <Key-Return> ..
11d0: 7b 23 20 6e 6f 74 68 69 6e 67 7d 0a 62 69 6e 64  {# nothing}.bind
11e0: 20 54 45 6e 74 72 79 20 3c 4b 65 79 2d 4b 50 5f   TEntry <Key-KP_
11f0: 45 6e 74 65 72 3e 20 09 09 7b 23 20 6e 6f 74 68  Enter> ..{# noth
1200: 69 6e 67 7d 0a 62 69 6e 64 20 54 45 6e 74 72 79  ing}.bind TEntry
1210: 20 3c 4b 65 79 2d 54 61 62 3e 20 09 09 09 7b 23   <Key-Tab> ...{#
1220: 20 6e 6f 74 68 69 6e 67 7d 0a 0a 23 20 41 72 67   nothing}..# Arg
1230: 68 2e 20 20 41 70 70 61 72 65 6e 74 6c 79 20 6f  h.  Apparently o
1240: 6e 20 57 69 6e 64 6f 77 73 2c 20 74 68 65 20 4e  n Windows, the N
1250: 75 6d 4c 6f 63 6b 20 6d 6f 64 69 66 69 65 72 20  umLock modifier 
1260: 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 0a 23  is interpreted.#
1270: 20 61 73 20 61 20 43 6f 6d 6d 61 6e 64 20 6d 6f   as a Command mo
1280: 64 69 66 69 65 72 2e 0a 69 66 20 7b 5b 74 6b 20  difier..if {[tk 
1290: 77 69 6e 64 6f 77 69 6e 67 73 79 73 74 65 6d 5d  windowingsystem]
12a0: 20 65 71 20 22 61 71 75 61 22 7d 20 7b 0a 20 20   eq "aqua"} {.  
12b0: 20 20 62 69 6e 64 20 54 45 6e 74 72 79 20 3c 43    bind TEntry <C
12c0: 6f 6d 6d 61 6e 64 2d 4b 65 79 50 72 65 73 73 3e  ommand-KeyPress>
12d0: 09 7b 23 20 6e 6f 74 68 69 6e 67 7d 0a 7d 0a 23  .{# nothing}.}.#
12e0: 20 54 6b 2d 6f 6e 2d 43 6f 63 6f 61 20 67 65 6e   Tk-on-Cocoa gen
12f0: 65 72 61 74 65 73 20 63 68 61 72 61 63 74 65 72  erates character
1300: 73 20 66 6f 72 20 74 68 65 73 65 20 74 77 6f 20  s for these two 
1310: 6b 65 79 73 2e 20 5b 42 75 67 20 32 39 37 31 36  keys. [Bug 29716
1320: 36 33 5d 0a 62 69 6e 64 20 54 45 6e 74 72 79 20  63].bind TEntry 
1330: 3c 44 6f 77 6e 3e 09 09 09 7b 23 20 6e 6f 74 68  <Down>...{# noth
1340: 69 6e 67 7d 0a 62 69 6e 64 20 54 45 6e 74 72 79  ing}.bind TEntry
1350: 20 3c 55 70 3e 09 09 09 7b 23 20 6e 6f 74 68 69   <Up>...{# nothi
1360: 6e 67 7d 0a 0a 23 23 20 41 64 64 69 74 69 6f 6e  ng}..## Addition
1370: 61 6c 20 65 6d 61 63 73 2d 6c 69 6b 65 20 62 69  al emacs-like bi
1380: 6e 64 69 6e 67 73 3a 0a 23 0a 62 69 6e 64 20 54  ndings:.#.bind T
1390: 45 6e 74 72 79 20 3c 43 6f 6e 74 72 6f 6c 2d 4b  Entry <Control-K
13a0: 65 79 2d 61 3e 09 09 7b 20 74 74 6b 3a 3a 65 6e  ey-a>..{ ttk::en
13b0: 74 72 79 3a 3a 4d 6f 76 65 20 25 57 20 68 6f 6d  try::Move %W hom
13c0: 65 20 7d 0a 62 69 6e 64 20 54 45 6e 74 72 79 20  e }.bind TEntry 
13d0: 3c 43 6f 6e 74 72 6f 6c 2d 4b 65 79 2d 62 3e 09  <Control-Key-b>.
13e0: 09 7b 20 74 74 6b 3a 3a 65 6e 74 72 79 3a 3a 4d  .{ ttk::entry::M
13f0: 6f 76 65 20 25 57 20 70 72 65 76 63 68 61 72 20  ove %W prevchar 
1400: 7d 0a 62 69 6e 64 20 54 45 6e 74 72 79 20 3c 43  }.bind TEntry <C
1410: 6f 6e 74 72 6f 6c 2d 4b 65 79 2d 64 3e 20 09 09  ontrol-Key-d> ..
1420: 7b 20 74 74 6b 3a 3a 65 6e 74 72 79 3a 3a 44 65  { ttk::entry::De
1430: 6c 65 74 65 20 25 57 20 7d 0a 62 69 6e 64 20 54  lete %W }.bind T
1440: 45 6e 74 72 79 20 3c 43 6f 6e 74 72 6f 6c 2d 4b  Entry <Control-K
1450: 65 79 2d 65 3e 20 09 09 7b 20 74 74 6b 3a 3a 65  ey-e> ..{ ttk::e
1460: 6e 74 72 79 3a 3a 4d 6f 76 65 20 25 57 20 65 6e  ntry::Move %W en
1470: 64 20 7d 0a 62 69 6e 64 20 54 45 6e 74 72 79 20  d }.bind TEntry 
1480: 3c 43 6f 6e 74 72 6f 6c 2d 4b 65 79 2d 66 3e 20  <Control-Key-f> 
1490: 09 09 7b 20 74 74 6b 3a 3a 65 6e 74 72 79 3a 3a  ..{ ttk::entry::
14a0: 4d 6f 76 65 20 25 57 20 6e 65 78 74 63 68 61 72  Move %W nextchar
14b0: 20 7d 0a 62 69 6e 64 20 54 45 6e 74 72 79 20 3c   }.bind TEntry <
14c0: 43 6f 6e 74 72 6f 6c 2d 4b 65 79 2d 68 3e 09 09  Control-Key-h>..
14d0: 7b 20 74 74 6b 3a 3a 65 6e 74 72 79 3a 3a 42 61  { ttk::entry::Ba
14e0: 63 6b 73 70 61 63 65 20 25 57 20 7d 0a 62 69 6e  ckspace %W }.bin
14f0: 64 20 54 45 6e 74 72 79 20 3c 43 6f 6e 74 72 6f  d TEntry <Contro
1500: 6c 2d 4b 65 79 2d 6b 3e 09 09 7b 20 25 57 20 64  l-Key-k>..{ %W d
1510: 65 6c 65 74 65 20 69 6e 73 65 72 74 20 65 6e 64  elete insert end
1520: 20 7d 0a 0a 23 23 23 20 43 6c 69 70 62 6f 61 72   }..### Clipboar
1530: 64 20 70 72 6f 63 65 64 75 72 65 73 2e 0a 23 0a  d procedures..#.
1540: 0a 23 23 20 45 6e 74 72 79 53 65 6c 65 63 74 69  .## EntrySelecti
1550: 6f 6e 20 2d 2d 20 52 65 74 75 72 6e 20 74 68 65  on -- Return the
1560: 20 73 65 6c 65 63 74 65 64 20 74 65 78 74 20 6f   selected text o
1570: 66 20 74 68 65 20 65 6e 74 72 79 2e 0a 23 09 52  f the entry..#.R
1580: 61 69 73 65 73 20 61 6e 20 65 72 72 6f 72 20 69  aises an error i
1590: 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 65  f there is no se
15a0: 6c 65 63 74 69 6f 6e 2e 0a 23 0a 70 72 6f 63 20  lection..#.proc 
15b0: 74 74 6b 3a 3a 65 6e 74 72 79 3a 3a 45 6e 74 72  ttk::entry::Entr
15c0: 79 53 65 6c 65 63 74 69 6f 6e 20 7b 77 7d 20 7b  ySelection {w} {
15d0: 0a 20 20 20 20 73 65 74 20 65 6e 74 72 79 53 74  .    set entrySt
15e0: 72 69 6e 67 20 5b 73 74 72 69 6e 67 20 72 61 6e  ring [string ran
15f0: 67 65 20 5b 24 77 20 67 65 74 5d 20 5b 24 77 20  ge [$w get] [$w 
1600: 69 6e 64 65 78 20 73 65 6c 2e 66 69 72 73 74 5d  index sel.first]
1610: 20 5c 0a 09 20 20 20 20 5b 65 78 70 72 20 7b 5b   \..    [expr {[
1620: 24 77 20 69 6e 64 65 78 20 73 65 6c 2e 6c 61 73  $w index sel.las
1630: 74 5d 20 2d 20 31 7d 5d 5d 0a 20 20 20 20 69 66  t] - 1}]].    if
1640: 20 7b 5b 24 77 20 63 67 65 74 20 2d 73 68 6f 77   {[$w cget -show
1650: 5d 20 6e 65 20 22 22 7d 20 7b 0a 09 72 65 74 75  ] ne ""} {..retu
1660: 72 6e 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61  rn [string repea
1670: 74 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20  t [string index 
1680: 5b 24 77 20 63 67 65 74 20 2d 73 68 6f 77 5d 20  [$w cget -show] 
1690: 30 5d 20 5c 0a 09 09 5b 73 74 72 69 6e 67 20 6c  0] \...[string l
16a0: 65 6e 67 74 68 20 24 65 6e 74 72 79 53 74 72 69  ength $entryStri
16b0: 6e 67 5d 5d 0a 20 20 20 20 7d 0a 20 20 20 20 72  ng]].    }.    r
16c0: 65 74 75 72 6e 20 24 65 6e 74 72 79 53 74 72 69  eturn $entryStri
16d0: 6e 67 0a 7d 0a 0a 23 23 20 50 61 73 74 65 20 2d  ng.}..## Paste -
16e0: 2d 20 49 6e 73 65 72 74 20 63 6c 69 70 62 6f 61  - Insert clipboa
16f0: 72 64 20 63 6f 6e 74 65 6e 74 73 20 61 74 20 63  rd contents at c
1700: 75 72 72 65 6e 74 20 69 6e 73 65 72 74 20 70 6f  urrent insert po
1710: 69 6e 74 2e 0a 23 0a 70 72 6f 63 20 74 74 6b 3a  int..#.proc ttk:
1720: 3a 65 6e 74 72 79 3a 3a 50 61 73 74 65 20 7b 77  :entry::Paste {w
1730: 7d 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 0a  } {.    catch {.
1740: 09 73 65 74 20 63 6c 69 70 62 6f 61 72 64 20 5b  .set clipboard [
1750: 3a 3a 74 6b 3a 3a 47 65 74 53 65 6c 65 63 74 69  ::tk::GetSelecti
1760: 6f 6e 20 24 77 20 43 4c 49 50 42 4f 41 52 44 5d  on $w CLIPBOARD]
1770: 0a 09 50 65 6e 64 69 6e 67 44 65 6c 65 74 65 20  ..PendingDelete 
1780: 24 77 0a 09 24 77 20 69 6e 73 65 72 74 20 69 6e  $w..$w insert in
1790: 73 65 72 74 20 24 63 6c 69 70 62 6f 61 72 64 0a  sert $clipboard.
17a0: 09 53 65 65 20 24 77 20 69 6e 73 65 72 74 0a 20  .See $w insert. 
17b0: 20 20 20 7d 0a 7d 0a 0a 23 23 20 43 6f 70 79 20     }.}..## Copy 
17c0: 2d 2d 20 43 6f 70 79 20 73 65 6c 65 63 74 69 6f  -- Copy selectio
17d0: 6e 20 74 6f 20 63 6c 69 70 62 6f 61 72 64 2e 0a  n to clipboard..
17e0: 23 0a 70 72 6f 63 20 74 74 6b 3a 3a 65 6e 74 72  #.proc ttk::entr
17f0: 79 3a 3a 43 6f 70 79 20 7b 77 7d 20 7b 0a 20 20  y::Copy {w} {.  
1800: 20 20 69 66 20 7b 21 5b 63 61 74 63 68 20 7b 45    if {![catch {E
1810: 6e 74 72 79 53 65 6c 65 63 74 69 6f 6e 20 24 77  ntrySelection $w
1820: 7d 20 73 65 6c 65 63 74 69 6f 6e 5d 7d 20 7b 0a  } selection]} {.
1830: 09 63 6c 69 70 62 6f 61 72 64 20 63 6c 65 61 72  .clipboard clear
1840: 20 2d 64 69 73 70 6c 61 79 6f 66 20 24 77 0a 09   -displayof $w..
1850: 63 6c 69 70 62 6f 61 72 64 20 61 70 70 65 6e 64  clipboard append
1860: 20 2d 64 69 73 70 6c 61 79 6f 66 20 24 77 20 24   -displayof $w $
1870: 73 65 6c 65 63 74 69 6f 6e 0a 20 20 20 20 7d 0a  selection.    }.
1880: 7d 0a 0a 23 23 20 43 6c 65 61 72 20 2d 2d 20 44  }..## Clear -- D
1890: 65 6c 65 74 65 20 74 68 65 20 73 65 6c 65 63 74  elete the select
18a0: 69 6f 6e 2e 0a 23 0a 70 72 6f 63 20 74 74 6b 3a  ion..#.proc ttk:
18b0: 3a 65 6e 74 72 79 3a 3a 43 6c 65 61 72 20 7b 77  :entry::Clear {w
18c0: 7d 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 20  } {.    catch { 
18d0: 24 77 20 64 65 6c 65 74 65 20 73 65 6c 2e 66 69  $w delete sel.fi
18e0: 72 73 74 20 73 65 6c 2e 6c 61 73 74 20 7d 0a 7d  rst sel.last }.}
18f0: 0a 0a 23 23 20 43 75 74 20 2d 2d 20 43 6f 70 79  ..## Cut -- Copy
1900: 20 73 65 6c 65 63 74 69 6f 6e 20 74 6f 20 63 6c   selection to cl
1910: 69 70 62 6f 61 72 64 20 74 68 65 6e 20 64 65 6c  ipboard then del
1920: 65 74 65 20 69 74 2e 0a 23 0a 70 72 6f 63 20 74  ete it..#.proc t
1930: 74 6b 3a 3a 65 6e 74 72 79 3a 3a 43 75 74 20 7b  tk::entry::Cut {
1940: 77 7d 20 7b 0a 20 20 20 20 43 6f 70 79 20 24 77  w} {.    Copy $w
1950: 3b 20 43 6c 65 61 72 20 24 77 0a 7d 0a 0a 23 23  ; Clear $w.}..##
1960: 23 20 4e 61 76 69 67 61 74 69 6f 6e 20 70 72 6f  # Navigation pro
1970: 63 65 64 75 72 65 73 2e 0a 23 0a 0a 23 23 20 43  cedures..#..## C
1980: 6c 6f 73 65 73 74 47 61 70 20 2d 2d 20 46 69 6e  losestGap -- Fin
1990: 64 20 63 6c 6f 73 65 73 74 20 62 6f 75 6e 64 61  d closest bounda
19a0: 72 79 20 62 65 74 77 65 65 6e 20 63 68 61 72 61  ry between chara
19b0: 63 74 65 72 73 2e 0a 23 20 09 52 65 74 75 72 6e  cters..# .Return
19c0: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
19d0: 68 65 20 63 68 61 72 61 63 74 65 72 20 6a 75 73  he character jus
19e0: 74 20 61 66 74 65 72 20 74 68 65 20 62 6f 75 6e  t after the boun
19f0: 64 61 72 79 2e 0a 23 0a 70 72 6f 63 20 74 74 6b  dary..#.proc ttk
1a00: 3a 3a 65 6e 74 72 79 3a 3a 43 6c 6f 73 65 73 74  ::entry::Closest
1a10: 47 61 70 20 7b 77 20 78 7d 20 7b 0a 20 20 20 20  Gap {w x} {.    
1a20: 73 65 74 20 70 6f 73 20 5b 24 77 20 69 6e 64 65  set pos [$w inde
1a30: 78 20 40 24 78 5d 0a 20 20 20 20 73 65 74 20 62  x @$x].    set b
1a40: 62 6f 78 20 5b 24 77 20 62 62 6f 78 20 24 70 6f  box [$w bbox $po
1a50: 73 5d 0a 20 20 20 20 69 66 20 7b 24 78 20 2d 20  s].    if {$x - 
1a60: 5b 6c 69 6e 64 65 78 20 24 62 62 6f 78 20 30 5d  [lindex $bbox 0]
1a70: 20 3e 20 5b 6c 69 6e 64 65 78 20 24 62 62 6f 78   > [lindex $bbox
1a80: 20 32 5d 2f 32 7d 20 7b 0a 09 69 6e 63 72 20 70   2]/2} {..incr p
1a90: 6f 73 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  os.    }.    ret
1aa0: 75 72 6e 20 24 70 6f 73 0a 7d 0a 0a 23 23 20 53  urn $pos.}..## S
1ab0: 65 65 20 24 69 6e 64 65 78 20 2d 2d 20 4d 61 6b  ee $index -- Mak
1ac0: 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20  e sure that the 
1ad0: 63 68 61 72 61 63 74 65 72 20 61 74 20 24 69 6e  character at $in
1ae0: 64 65 78 20 69 73 20 76 69 73 69 62 6c 65 2e 0a  dex is visible..
1af0: 23 0a 70 72 6f 63 20 74 74 6b 3a 3a 65 6e 74 72  #.proc ttk::entr
1b00: 79 3a 3a 53 65 65 20 7b 77 20 7b 69 6e 64 65 78  y::See {w {index
1b10: 20 69 6e 73 65 72 74 7d 7d 20 7b 0a 20 20 20 20   insert}} {.    
1b20: 75 70 64 61 74 65 20 69 64 6c 65 74 61 73 6b 73  update idletasks
1b30: 09 3b 23 20 65 6e 73 75 72 65 20 73 63 72 6f 6c  .;# ensure scrol
1b40: 6c 20 64 61 74 61 20 75 70 2d 74 6f 2d 64 61 74  l data up-to-dat
1b50: 65 0a 20 20 20 20 73 65 74 20 63 20 5b 24 77 20  e.    set c [$w 
1b60: 69 6e 64 65 78 20 24 69 6e 64 65 78 5d 0a 20 20  index $index].  
1b70: 20 20 23 20 40 40 40 20 4f 52 3a 20 63 68 65 63    # @@@ OR: chec
1b80: 6b 20 5b 24 77 20 69 6e 64 65 78 20 6c 65 66 74  k [$w index left
1b90: 5d 20 2f 20 5b 24 77 20 69 6e 64 65 78 20 72 69  ] / [$w index ri
1ba0: 67 68 74 5d 0a 20 20 20 20 69 66 20 7b 24 63 20  ght].    if {$c 
1bb0: 3c 20 5b 24 77 20 69 6e 64 65 78 20 40 30 5d 20  < [$w index @0] 
1bc0: 7c 7c 20 24 63 20 3e 3d 20 5b 24 77 20 69 6e 64  || $c >= [$w ind
1bd0: 65 78 20 40 5b 77 69 6e 66 6f 20 77 69 64 74 68  ex @[winfo width
1be0: 20 24 77 5d 5d 7d 20 7b 0a 09 24 77 20 78 76 69   $w]]} {..$w xvi
1bf0: 65 77 20 24 63 0a 20 20 20 20 7d 0a 7d 0a 0a 23  ew $c.    }.}..#
1c00: 23 20 4e 65 78 74 57 6f 72 64 20 2d 2d 20 46 69  # NextWord -- Fi
1c10: 6e 64 20 74 68 65 20 6e 65 78 74 20 77 6f 72 64  nd the next word
1c20: 20 70 6f 73 69 74 69 6f 6e 2e 0a 23 09 4e 6f 74   position..#.Not
1c30: 65 3a 20 54 68 65 20 22 6e 65 78 74 20 77 6f 72  e: The "next wor
1c40: 64 20 70 6f 73 69 74 69 6f 6e 22 20 66 6f 6c 6c  d position" foll
1c50: 6f 77 73 20 70 6c 61 74 66 6f 72 6d 20 63 6f 6e  ows platform con
1c60: 76 65 6e 74 69 6f 6e 73 3a 0a 23 09 65 69 74 68  ventions:.#.eith
1c70: 65 72 20 74 68 65 20 6e 65 78 74 20 65 6e 64 2d  er the next end-
1c80: 6f 66 2d 77 6f 72 64 20 70 6f 73 69 74 69 6f 6e  of-word position
1c90: 2c 20 6f 72 20 74 68 65 20 73 74 61 72 74 2d 6f  , or the start-o
1ca0: 66 2d 77 6f 72 64 0a 23 09 70 6f 73 69 74 69 6f  f-word.#.positio
1cb0: 6e 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  n following the 
1cc0: 6e 65 78 74 20 65 6e 64 2d 6f 66 2d 77 6f 72 64  next end-of-word
1cd0: 20 70 6f 73 69 74 69 6f 6e 2e 0a 23 0a 73 65 74   position..#.set
1ce0: 20 3a 3a 74 74 6b 3a 3a 65 6e 74 72 79 3a 3a 53   ::ttk::entry::S
1cf0: 74 61 74 65 28 73 74 61 72 74 4e 65 78 74 29 20  tate(startNext) 
1d00: 5c 0a 09 5b 73 74 72 69 6e 67 20 65 71 75 61 6c  \..[string equal
1d10: 20 5b 74 6b 20 77 69 6e 64 6f 77 69 6e 67 73 79   [tk windowingsy
1d20: 73 74 65 6d 5d 20 22 77 69 6e 33 32 22 5d 0a 0a  stem] "win32"]..
1d30: 70 72 6f 63 20 74 74 6b 3a 3a 65 6e 74 72 79 3a  proc ttk::entry:
1d40: 3a 4e 65 78 74 57 6f 72 64 20 7b 77 20 73 74 61  :NextWord {w sta
1d50: 72 74 7d 20 7b 0a 20 20 20 20 76 61 72 69 61 62  rt} {.    variab
1d60: 6c 65 20 53 74 61 74 65 0a 20 20 20 20 73 65 74  le State.    set
1d70: 20 70 6f 73 20 5b 74 63 6c 5f 65 6e 64 4f 66 57   pos [tcl_endOfW
1d80: 6f 72 64 20 5b 24 77 20 67 65 74 5d 20 5b 24 77  ord [$w get] [$w
1d90: 20 69 6e 64 65 78 20 24 73 74 61 72 74 5d 5d 0a   index $start]].
1da0: 20 20 20 20 69 66 20 7b 24 70 6f 73 20 3e 3d 20      if {$pos >= 
1db0: 30 20 26 26 20 24 53 74 61 74 65 28 73 74 61 72  0 && $State(star
1dc0: 74 4e 65 78 74 29 7d 20 7b 0a 09 73 65 74 20 70  tNext)} {..set p
1dd0: 6f 73 20 5b 74 63 6c 5f 73 74 61 72 74 4f 66 4e  os [tcl_startOfN
1de0: 65 78 74 57 6f 72 64 20 5b 24 77 20 67 65 74 5d  extWord [$w get]
1df0: 20 24 70 6f 73 5d 0a 20 20 20 20 7d 0a 20 20 20   $pos].    }.   
1e00: 20 69 66 20 7b 24 70 6f 73 20 3c 20 30 7d 20 7b   if {$pos < 0} {
1e10: 0a 09 72 65 74 75 72 6e 20 65 6e 64 0a 20 20 20  ..return end.   
1e20: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 24 70   }.    return $p
1e30: 6f 73 0a 7d 0a 0a 23 23 20 50 72 65 76 57 6f 72  os.}..## PrevWor
1e40: 64 20 2d 2d 20 46 69 6e 64 20 74 68 65 20 70 72  d -- Find the pr
1e50: 65 76 69 6f 75 73 20 77 6f 72 64 20 70 6f 73 69  evious word posi
1e60: 74 69 6f 6e 2e 0a 23 0a 70 72 6f 63 20 74 74 6b  tion..#.proc ttk
1e70: 3a 3a 65 6e 74 72 79 3a 3a 50 72 65 76 57 6f 72  ::entry::PrevWor
1e80: 64 20 7b 77 20 73 74 61 72 74 7d 20 7b 0a 20 20  d {w start} {.  
1e90: 20 20 73 65 74 20 70 6f 73 20 5b 74 63 6c 5f 73    set pos [tcl_s
1ea0: 74 61 72 74 4f 66 50 72 65 76 69 6f 75 73 57 6f  tartOfPreviousWo
1eb0: 72 64 20 5b 24 77 20 67 65 74 5d 20 5b 24 77 20  rd [$w get] [$w 
1ec0: 69 6e 64 65 78 20 24 73 74 61 72 74 5d 5d 0a 20  index $start]]. 
1ed0: 20 20 20 69 66 20 7b 24 70 6f 73 20 3c 20 30 7d     if {$pos < 0}
1ee0: 20 7b 0a 09 72 65 74 75 72 6e 20 30 0a 20 20 20   {..return 0.   
1ef0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 24 70   }.    return $p
1f00: 6f 73 0a 7d 0a 0a 23 23 20 52 65 6c 49 6e 64 65  os.}..## RelInde
1f10: 78 20 2d 2d 20 43 6f 6d 70 75 74 65 20 63 68 61  x -- Compute cha
1f20: 72 61 63 74 65 72 2f 77 6f 72 64 2f 6c 69 6e 65  racter/word/line
1f30: 2d 72 65 6c 61 74 69 76 65 20 69 6e 64 65 78 2e  -relative index.
1f40: 0a 23 0a 70 72 6f 63 20 74 74 6b 3a 3a 65 6e 74  .#.proc ttk::ent
1f50: 72 79 3a 3a 52 65 6c 49 6e 64 65 78 20 7b 77 20  ry::RelIndex {w 
1f60: 77 68 65 72 65 20 7b 69 6e 64 65 78 20 69 6e 73  where {index ins
1f70: 65 72 74 7d 7d 20 7b 0a 20 20 20 20 73 77 69 74  ert}} {.    swit
1f80: 63 68 20 2d 2d 20 24 77 68 65 72 65 20 7b 0a 09  ch -- $where {..
1f90: 70 72 65 76 63 68 61 72 09 7b 20 65 78 70 72 20  prevchar.{ expr 
1fa0: 7b 5b 24 77 20 69 6e 64 65 78 20 24 69 6e 64 65  {[$w index $inde
1fb0: 78 5d 20 2d 20 31 7d 20 7d 0a 20 20 20 20 09 6e  x] - 1} }.    .n
1fc0: 65 78 74 63 68 61 72 09 7b 20 65 78 70 72 20 7b  extchar.{ expr {
1fd0: 5b 24 77 20 69 6e 64 65 78 20 24 69 6e 64 65 78  [$w index $index
1fe0: 5d 20 2b 20 31 7d 20 7d 0a 09 70 72 65 76 77 6f  ] + 1} }..prevwo
1ff0: 72 64 09 7b 20 50 72 65 76 57 6f 72 64 20 24 77  rd.{ PrevWord $w
2000: 20 24 69 6e 64 65 78 20 7d 0a 09 6e 65 78 74 77   $index }..nextw
2010: 6f 72 64 09 7b 20 4e 65 78 74 57 6f 72 64 20 24  ord.{ NextWord $
2020: 77 20 24 69 6e 64 65 78 20 7d 0a 09 68 6f 6d 65  w $index }..home
2030: 09 09 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 09  ..{ return 0 }..
2040: 65 6e 64 09 09 7b 20 24 77 20 69 6e 64 65 78 20  end..{ $w index 
2050: 65 6e 64 20 7d 0a 09 64 65 66 61 75 6c 74 09 09  end }..default..
2060: 7b 20 65 72 72 6f 72 20 22 42 61 64 20 72 65 6c  { error "Bad rel
2070: 61 74 69 76 65 20 69 6e 64 65 78 20 24 69 6e 64  ative index $ind
2080: 65 78 22 20 7d 0a 20 20 20 20 7d 0a 7d 0a 0a 23  ex" }.    }.}..#
2090: 23 20 4d 6f 76 65 20 2d 2d 20 4d 6f 76 65 20 69  # Move -- Move i
20a0: 6e 73 65 72 74 20 63 75 72 73 6f 72 20 74 6f 20  nsert cursor to 
20b0: 72 65 6c 61 74 69 76 65 20 6c 6f 63 61 74 69 6f  relative locatio
20c0: 6e 2e 0a 23 09 41 6c 73 6f 20 63 6c 65 61 72 73  n..#.Also clears
20d0: 20 74 68 65 20 73 65 6c 65 63 74 69 6f 6e 2c 20   the selection, 
20e0: 69 66 20 61 6e 79 2c 20 61 6e 64 20 6d 61 6b 65  if any, and make
20f0: 73 20 73 75 72 65 0a 23 09 74 68 61 74 20 74 68  s sure.#.that th
2100: 65 20 69 6e 73 65 72 74 20 63 75 72 73 6f 72 20  e insert cursor 
2110: 69 73 20 76 69 73 69 62 6c 65 2e 0a 23 0a 70 72  is visible..#.pr
2120: 6f 63 20 74 74 6b 3a 3a 65 6e 74 72 79 3a 3a 4d  oc ttk::entry::M
2130: 6f 76 65 20 7b 77 20 77 68 65 72 65 7d 20 7b 0a  ove {w where} {.
2140: 20 20 20 20 24 77 20 69 63 75 72 73 6f 72 20 5b      $w icursor [
2150: 52 65 6c 49 6e 64 65 78 20 24 77 20 24 77 68 65  RelIndex $w $whe
2160: 72 65 5d 0a 20 20 20 20 24 77 20 73 65 6c 65 63  re].    $w selec
2170: 74 69 6f 6e 20 63 6c 65 61 72 0a 20 20 20 20 53  tion clear.    S
2180: 65 65 20 24 77 20 69 6e 73 65 72 74 0a 7d 0a 0a  ee $w insert.}..
2190: 23 23 23 20 53 65 6c 65 63 74 69 6f 6e 20 70 72  ### Selection pr
21a0: 6f 63 65 64 75 72 65 73 2e 0a 23 0a 0a 23 23 20  ocedures..#..## 
21b0: 45 78 74 65 6e 64 54 6f 20 2d 2d 20 45 78 74 65  ExtendTo -- Exte
21c0: 6e 64 20 74 68 65 20 73 65 6c 65 63 74 69 6f 6e  nd the selection
21d0: 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
21e0: 64 20 69 6e 64 65 78 2e 0a 23 0a 23 20 54 68 65  d index..#.# The
21f0: 20 6f 74 68 65 72 20 65 6e 64 20 6f 66 20 74 68   other end of th
2200: 65 20 73 65 6c 65 63 74 69 6f 6e 20 28 74 68 65  e selection (the
2210: 20 61 6e 63 68 6f 72 29 20 69 73 20 64 65 74 65   anchor) is dete
2220: 72 6d 69 6e 65 64 20 61 73 20 66 6f 6c 6c 6f 77  rmined as follow
2230: 73 3a 0a 23 0a 23 20 28 31 29 20 69 66 20 74 68  s:.#.# (1) if th
2240: 65 72 65 20 69 73 20 6e 6f 20 73 65 6c 65 63 74  ere is no select
2250: 69 6f 6e 2c 20 74 68 65 20 61 6e 63 68 6f 72 20  ion, the anchor 
2260: 69 73 20 74 68 65 20 69 6e 73 65 72 74 20 63 75  is the insert cu
2270: 72 73 6f 72 3b 0a 23 20 28 32 29 20 69 66 20 74  rsor;.# (2) if t
2280: 68 65 20 69 6e 64 65 78 20 69 73 20 6f 75 74 73  he index is outs
2290: 69 64 65 20 74 68 65 20 73 65 6c 65 63 74 69 6f  ide the selectio
22a0: 6e 2c 20 67 72 6f 77 20 74 68 65 20 73 65 6c 65  n, grow the sele
22b0: 63 74 69 6f 6e 3b 0a 23 20 28 33 29 20 69 66 20  ction;.# (3) if 
22c0: 74 68 65 20 69 6e 73 65 72 74 20 63 75 72 73 6f  the insert curso
22d0: 72 20 69 73 20 61 74 20 6f 6e 65 20 65 6e 64 20  r is at one end 
22e0: 6f 66 20 74 68 65 20 73 65 6c 65 63 74 69 6f 6e  of the selection
22f0: 2c 20 61 6e 63 68 6f 72 20 74 68 65 20 6f 74 68  , anchor the oth
2300: 65 72 20 65 6e 64 0a 23 20 28 34 29 20 6f 74 68  er end.# (4) oth
2310: 65 72 77 69 73 65 20 61 6e 63 68 6f 72 20 74 68  erwise anchor th
2320: 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 73  e start of the s
2330: 65 6c 65 63 74 69 6f 6e 0a 23 0a 23 20 54 68 65  election.#.# The
2340: 20 69 6e 73 65 72 74 20 63 75 72 73 6f 72 20 69   insert cursor i
2350: 73 20 70 6c 61 63 65 64 20 61 74 20 74 68 65 20  s placed at the 
2360: 6e 65 77 20 65 6e 64 20 6f 66 20 74 68 65 20 73  new end of the s
2370: 65 6c 65 63 74 69 6f 6e 2e 0a 23 0a 23 20 52 65  election..#.# Re
2380: 74 75 72 6e 73 3a 20 73 65 6c 65 63 74 69 6f 6e  turns: selection
2390: 20 61 6e 63 68 6f 72 2e 0a 23 0a 70 72 6f 63 20   anchor..#.proc 
23a0: 74 74 6b 3a 3a 65 6e 74 72 79 3a 3a 45 78 74 65  ttk::entry::Exte
23b0: 6e 64 54 6f 20 7b 77 20 69 6e 64 65 78 7d 20 7b  ndTo {w index} {
23c0: 0a 20 20 20 20 73 65 74 20 69 6e 64 65 78 20 5b  .    set index [
23d0: 24 77 20 69 6e 64 65 78 20 24 69 6e 64 65 78 5d  $w index $index]
23e0: 0a 20 20 20 20 73 65 74 20 69 6e 73 65 72 74 20  .    set insert 
23f0: 5b 24 77 20 69 6e 64 65 78 20 69 6e 73 65 72 74  [$w index insert
2400: 5d 0a 0a 20 20 20 20 23 20 46 69 67 75 72 65 20  ]..    # Figure 
2410: 6f 75 74 20 73 65 6c 65 63 74 69 6f 6e 20 61 6e  out selection an
2420: 63 68 6f 72 3a 0a 20 20 20 20 69 66 20 7b 21 5b  chor:.    if {![
2430: 24 77 20 73 65 6c 65 63 74 69 6f 6e 20 70 72 65  $w selection pre
2440: 73 65 6e 74 5d 7d 20 7b 0a 20 20 20 20 09 73 65  sent]} {.    .se
2450: 74 20 61 6e 63 68 6f 72 20 24 69 6e 73 65 72 74  t anchor $insert
2460: 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  .    } else {.  
2470: 20 20 09 73 65 74 20 73 65 6c 66 69 72 73 74 20    .set selfirst 
2480: 5b 24 77 20 69 6e 64 65 78 20 73 65 6c 2e 66 69  [$w index sel.fi
2490: 72 73 74 5d 0a 09 73 65 74 20 73 65 6c 6c 61 73  rst]..set sellas
24a0: 74 20 20 5b 24 77 20 69 6e 64 65 78 20 73 65 6c  t  [$w index sel
24b0: 2e 6c 61 73 74 5d 0a 0a 09 69 66 20 7b 20 20 20  .last]...if {   
24c0: 28 24 69 6e 64 65 78 20 3c 20 24 73 65 6c 66 69  ($index < $selfi
24d0: 72 73 74 29 0a 09 20 20 20 20 7c 7c 20 28 24 69  rst)..    || ($i
24e0: 6e 73 65 72 74 20 3d 3d 20 24 73 65 6c 66 69 72  nsert == $selfir
24f0: 73 74 20 26 26 20 24 69 6e 64 65 78 20 3c 3d 20  st && $index <= 
2500: 24 73 65 6c 6c 61 73 74 29 0a 09 7d 20 7b 0a 09  $sellast)..} {..
2510: 20 20 20 20 73 65 74 20 61 6e 63 68 6f 72 20 24      set anchor $
2520: 73 65 6c 6c 61 73 74 0a 09 7d 20 65 6c 73 65 20  sellast..} else 
2530: 7b 0a 09 20 20 20 20 73 65 74 20 61 6e 63 68 6f  {..    set ancho
2540: 72 20 24 73 65 6c 66 69 72 73 74 0a 09 7d 0a 20  r $selfirst..}. 
2550: 20 20 20 7d 0a 0a 20 20 20 20 23 20 45 78 74 65     }..    # Exte
2560: 6e 64 20 73 65 6c 65 63 74 69 6f 6e 3a 0a 20 20  nd selection:.  
2570: 20 20 69 66 20 7b 24 61 6e 63 68 6f 72 20 3c 20    if {$anchor < 
2580: 24 69 6e 64 65 78 7d 20 7b 0a 09 24 77 20 73 65  $index} {..$w se
2590: 6c 65 63 74 69 6f 6e 20 72 61 6e 67 65 20 24 61  lection range $a
25a0: 6e 63 68 6f 72 20 24 69 6e 64 65 78 0a 20 20 20  nchor $index.   
25b0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 09 24   } else {.    .$
25c0: 77 20 73 65 6c 65 63 74 69 6f 6e 20 72 61 6e 67  w selection rang
25d0: 65 20 24 69 6e 64 65 78 20 24 61 6e 63 68 6f 72  e $index $anchor
25e0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 24 77 20 69  .    }..    $w i
25f0: 63 75 72 73 6f 72 20 24 69 6e 64 65 78 0a 20 20  cursor $index.  
2600: 20 20 72 65 74 75 72 6e 20 24 61 6e 63 68 6f 72    return $anchor
2610: 0a 7d 0a 0a 23 23 20 45 78 74 65 6e 64 20 2d 2d  .}..## Extend --
2620: 20 45 78 74 65 6e 64 20 74 68 65 20 73 65 6c 65   Extend the sele
2630: 63 74 69 6f 6e 20 74 6f 20 61 20 72 65 6c 61 74  ction to a relat
2640: 69 76 65 20 70 6f 73 69 74 69 6f 6e 2c 20 73 68  ive position, sh
2650: 6f 77 20 69 6e 73 65 72 74 20 63 75 72 73 6f 72  ow insert cursor
2660: 0a 23 0a 70 72 6f 63 20 74 74 6b 3a 3a 65 6e 74  .#.proc ttk::ent
2670: 72 79 3a 3a 45 78 74 65 6e 64 20 7b 77 20 77 68  ry::Extend {w wh
2680: 65 72 65 7d 20 7b 0a 20 20 20 20 45 78 74 65 6e  ere} {.    Exten
2690: 64 54 6f 20 24 77 20 5b 52 65 6c 49 6e 64 65 78  dTo $w [RelIndex
26a0: 20 24 77 20 24 77 68 65 72 65 5d 0a 20 20 20 20   $w $where].    
26b0: 53 65 65 20 24 77 0a 7d 0a 0a 23 23 23 20 42 75  See $w.}..### Bu
26c0: 74 74 6f 6e 20 31 20 62 69 6e 64 69 6e 67 20 70  tton 1 binding p
26d0: 72 6f 63 65 64 75 72 65 73 2e 0a 23 0a 23 20 44  rocedures..#.# D
26e0: 6f 75 62 6c 65 2d 63 6c 69 63 6b 69 6e 67 20 66  ouble-clicking f
26f0: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 64 72 61  ollowed by a dra
2700: 67 20 65 6e 74 65 72 73 20 22 77 6f 72 64 2d 73  g enters "word-s
2710: 65 6c 65 63 74 22 20 6d 6f 64 65 2e 0a 23 20 54  elect" mode..# T
2720: 72 69 70 6c 65 2d 63 6c 69 63 6b 69 6e 67 20 65  riple-clicking e
2730: 6e 74 65 72 73 20 22 6c 69 6e 65 2d 73 65 6c 65  nters "line-sele
2740: 63 74 22 20 6d 6f 64 65 2e 0a 23 0a 0a 23 23 20  ct" mode..#..## 
2750: 50 72 65 73 73 20 2d 2d 20 42 75 74 74 6f 6e 50  Press -- ButtonP
2760: 72 65 73 73 2d 31 20 62 69 6e 64 69 6e 67 2e 0a  ress-1 binding..
2770: 23 09 53 65 74 20 74 68 65 20 69 6e 73 65 72 74  #.Set the insert
2780: 69 6f 6e 20 63 75 72 73 6f 72 2c 20 63 6c 61 69  ion cursor, clai
2790: 6d 20 74 68 65 20 69 6e 70 75 74 20 66 6f 63 75  m the input focu
27a0: 73 2c 20 73 65 74 20 75 70 20 66 6f 72 0a 23 09  s, set up for.#.
27b0: 66 75 74 75 72 65 20 64 72 61 67 20 6f 70 65 72  future drag oper
27c0: 61 74 69 6f 6e 73 2e 0a 23 0a 70 72 6f 63 20 74  ations..#.proc t
27d0: 74 6b 3a 3a 65 6e 74 72 79 3a 3a 50 72 65 73 73  tk::entry::Press
27e0: 20 7b 77 20 78 7d 20 7b 0a 20 20 20 20 76 61 72   {w x} {.    var
27f0: 69 61 62 6c 65 20 53 74 61 74 65 0a 0a 20 20 20  iable State..   
2800: 20 24 77 20 69 63 75 72 73 6f 72 20 5b 43 6c 6f   $w icursor [Clo
2810: 73 65 73 74 47 61 70 20 24 77 20 24 78 5d 0a 20  sestGap $w $x]. 
2820: 20 20 20 24 77 20 73 65 6c 65 63 74 69 6f 6e 20     $w selection 
2830: 63 6c 65 61 72 0a 20 20 20 20 24 77 20 69 6e 73  clear.    $w ins
2840: 74 61 74 65 20 21 64 69 73 61 62 6c 65 64 20 7b  tate !disabled {
2850: 20 66 6f 63 75 73 20 24 77 20 7d 0a 0a 20 20 20   focus $w }..   
2860: 20 23 20 53 65 74 20 75 70 20 66 6f 72 20 66 75   # Set up for fu
2870: 74 75 72 65 20 64 72 61 67 2c 20 64 6f 75 62 6c  ture drag, doubl
2880: 65 2d 63 6c 69 63 6b 2c 20 6f 72 20 74 72 69 70  e-click, or trip
2890: 6c 65 2d 63 6c 69 63 6b 2e 0a 20 20 20 20 73 65  le-click..    se
28a0: 74 20 53 74 61 74 65 28 78 29 20 24 78 0a 20 20  t State(x) $x.  
28b0: 20 20 73 65 74 20 53 74 61 74 65 28 73 65 6c 65    set State(sele
28c0: 63 74 4d 6f 64 65 29 20 63 68 61 72 0a 20 20 20  ctMode) char.   
28d0: 20 73 65 74 20 53 74 61 74 65 28 61 6e 63 68 6f   set State(ancho
28e0: 72 29 20 5b 24 77 20 69 6e 64 65 78 20 69 6e 73  r) [$w index ins
28f0: 65 72 74 5d 0a 7d 0a 0a 23 23 20 53 68 69 66 74  ert].}..## Shift
2900: 2d 50 72 65 73 73 20 2d 2d 20 53 68 69 66 74 2d  -Press -- Shift-
2910: 42 75 74 74 6f 6e 50 72 65 73 73 2d 31 20 62 69  ButtonPress-1 bi
2920: 6e 64 69 6e 67 2e 0a 23 09 45 78 74 65 6e 64 73  nding..#.Extends
2930: 20 74 68 65 20 73 65 6c 65 63 74 69 6f 6e 2c 20   the selection, 
2940: 73 65 74 73 20 61 6e 63 68 6f 72 20 66 6f 72 20  sets anchor for 
2950: 66 75 74 75 72 65 20 64 72 61 67 20 6f 70 65 72  future drag oper
2960: 61 74 69 6f 6e 73 2e 0a 23 0a 70 72 6f 63 20 74  ations..#.proc t
2970: 74 6b 3a 3a 65 6e 74 72 79 3a 3a 53 68 69 66 74  tk::entry::Shift
2980: 2d 50 72 65 73 73 20 7b 77 20 78 7d 20 7b 0a 20  -Press {w x} {. 
2990: 20 20 20 76 61 72 69 61 62 6c 65 20 53 74 61 74     variable Stat
29a0: 65 0a 0a 20 20 20 20 66 6f 63 75 73 20 24 77 0a  e..    focus $w.
29b0: 20 20 20 20 73 65 74 20 61 6e 63 68 6f 72 20 5b      set anchor [
29c0: 45 78 74 65 6e 64 54 6f 20 24 77 20 40 24 78 5d  ExtendTo $w @$x]
29d0: 0a 0a 20 20 20 20 73 65 74 20 53 74 61 74 65 28  ..    set State(
29e0: 78 29 20 24 78 0a 20 20 20 20 73 65 74 20 53 74  x) $x.    set St
29f0: 61 74 65 28 73 65 6c 65 63 74 4d 6f 64 65 29 20  ate(selectMode) 
2a00: 63 68 61 72 0a 20 20 20 20 73 65 74 20 53 74 61  char.    set Sta
2a10: 74 65 28 61 6e 63 68 6f 72 29 20 24 61 6e 63 68  te(anchor) $anch
2a20: 6f 72 0a 7d 0a 0a 23 23 20 53 65 6c 65 63 74 20  or.}..## Select 
2a30: 24 77 20 24 78 20 24 6d 6f 64 65 20 2d 2d 20 42  $w $x $mode -- B
2a40: 69 6e 64 69 6e 67 20 66 6f 72 20 64 6f 75 62 6c  inding for doubl
2a50: 65 2d 20 61 6e 64 20 74 72 69 70 6c 65 2d 20 63  e- and triple- c
2a60: 6c 69 63 6b 73 2e 0a 23 09 53 65 6c 65 63 74 73  licks..#.Selects
2a70: 20 61 20 77 6f 72 64 20 6f 72 20 6c 69 6e 65 20   a word or line 
2a80: 28 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 6d 6f  (according to mo
2a90: 64 65 29 2c 0a 23 09 61 6e 64 20 73 65 74 73 20  de),.#.and sets 
2aa0: 74 68 65 20 73 65 6c 65 63 74 69 6f 6e 20 6d 6f  the selection mo
2ab0: 64 65 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e  de for subsequen
2ac0: 74 20 64 72 61 67 20 6f 70 65 72 61 74 69 6f 6e  t drag operation
2ad0: 73 2e 0a 23 0a 70 72 6f 63 20 74 74 6b 3a 3a 65  s..#.proc ttk::e
2ae0: 6e 74 72 79 3a 3a 53 65 6c 65 63 74 20 7b 77 20  ntry::Select {w 
2af0: 78 20 6d 6f 64 65 7d 20 7b 0a 20 20 20 20 76 61  x mode} {.    va
2b00: 72 69 61 62 6c 65 20 53 74 61 74 65 0a 20 20 20  riable State.   
2b10: 20 73 65 74 20 63 75 72 20 5b 43 6c 6f 73 65 73   set cur [Closes
2b20: 74 47 61 70 20 24 77 20 24 78 5d 0a 0a 20 20 20  tGap $w $x]..   
2b30: 20 73 77 69 74 63 68 20 2d 2d 20 24 6d 6f 64 65   switch -- $mode
2b40: 20 7b 0a 20 20 20 20 09 77 6f 72 64 09 7b 20 57   {.    .word.{ W
2b50: 6f 72 64 53 65 6c 65 63 74 20 24 77 20 24 63 75  ordSelect $w $cu
2b60: 72 20 24 63 75 72 20 7d 0a 20 20 20 20 09 6c 69  r $cur }.    .li
2b70: 6e 65 09 7b 20 4c 69 6e 65 53 65 6c 65 63 74 20  ne.{ LineSelect 
2b80: 24 77 20 24 63 75 72 20 24 63 75 72 20 7d 0a 09  $w $cur $cur }..
2b90: 63 68 61 72 09 7b 20 23 20 6e 6f 2d 6f 70 20 7d  char.{ # no-op }
2ba0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 65 74 20  .    }..    set 
2bb0: 53 74 61 74 65 28 61 6e 63 68 6f 72 29 20 24 63  State(anchor) $c
2bc0: 75 72 0a 20 20 20 20 73 65 74 20 53 74 61 74 65  ur.    set State
2bd0: 28 73 65 6c 65 63 74 4d 6f 64 65 29 20 24 6d 6f  (selectMode) $mo
2be0: 64 65 0a 7d 0a 0a 23 23 20 44 72 61 67 20 2d 2d  de.}..## Drag --
2bf0: 20 42 75 74 74 6f 6e 31 20 6d 6f 74 69 6f 6e 20   Button1 motion 
2c00: 62 69 6e 64 69 6e 67 2e 0a 23 0a 70 72 6f 63 20  binding..#.proc 
2c10: 74 74 6b 3a 3a 65 6e 74 72 79 3a 3a 44 72 61 67  ttk::entry::Drag
2c20: 20 7b 77 20 78 7d 20 7b 0a 20 20 20 20 76 61 72   {w x} {.    var
2c30: 69 61 62 6c 65 20 53 74 61 74 65 0a 20 20 20 20  iable State.    
2c40: 73 65 74 20 53 74 61 74 65 28 78 29 20 24 78 0a  set State(x) $x.
2c50: 20 20 20 20 44 72 61 67 54 6f 20 24 77 20 24 78      DragTo $w $x
2c60: 0a 7d 0a 0a 23 23 20 44 72 61 67 54 6f 20 24 77  .}..## DragTo $w
2c70: 20 24 78 20 2d 2d 20 45 78 74 65 6e 64 20 73 65   $x -- Extend se
2c80: 6c 65 63 74 69 6f 6e 20 74 6f 20 24 78 20 62 61  lection to $x ba
2c90: 73 65 64 20 6f 6e 20 63 75 72 72 65 6e 74 20 73  sed on current s
2ca0: 65 6c 65 63 74 69 6f 6e 20 6d 6f 64 65 2e 0a 23  election mode..#
2cb0: 0a 70 72 6f 63 20 74 74 6b 3a 3a 65 6e 74 72 79  .proc ttk::entry
2cc0: 3a 3a 44 72 61 67 54 6f 20 7b 77 20 78 7d 20 7b  ::DragTo {w x} {
2cd0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 53 74  .    variable St
2ce0: 61 74 65 0a 0a 20 20 20 20 73 65 74 20 63 75 72  ate..    set cur
2cf0: 20 5b 43 6c 6f 73 65 73 74 47 61 70 20 24 77 20   [ClosestGap $w 
2d00: 24 78 5d 0a 20 20 20 20 73 77 69 74 63 68 20 24  $x].    switch $
2d10: 53 74 61 74 65 28 73 65 6c 65 63 74 4d 6f 64 65  State(selectMode
2d20: 29 20 7b 0a 09 63 68 61 72 20 7b 20 43 68 61 72  ) {..char { Char
2d30: 53 65 6c 65 63 74 20 24 77 20 24 53 74 61 74 65  Select $w $State
2d40: 28 61 6e 63 68 6f 72 29 20 24 63 75 72 20 7d 0a  (anchor) $cur }.
2d50: 09 77 6f 72 64 20 7b 20 57 6f 72 64 53 65 6c 65  .word { WordSele
2d60: 63 74 20 24 77 20 24 53 74 61 74 65 28 61 6e 63  ct $w $State(anc
2d70: 68 6f 72 29 20 24 63 75 72 20 7d 0a 09 6c 69 6e  hor) $cur }..lin
2d80: 65 20 7b 20 4c 69 6e 65 53 65 6c 65 63 74 20 24  e { LineSelect $
2d90: 77 20 24 53 74 61 74 65 28 61 6e 63 68 6f 72 29  w $State(anchor)
2da0: 20 24 63 75 72 20 7d 0a 09 6e 6f 6e 65 20 7b 20   $cur }..none { 
2db0: 23 20 6e 6f 2d 6f 70 20 7d 0a 20 20 20 20 7d 0a  # no-op }.    }.
2dc0: 7d 0a 0a 23 23 20 3c 42 31 2d 4c 65 61 76 65 3e  }..## <B1-Leave>
2dd0: 20 62 69 6e 64 69 6e 67 3a 0a 23 09 42 65 67 69   binding:.#.Begi
2de0: 6e 20 61 75 74 6f 73 63 72 6f 6c 6c 2e 0a 23 0a  n autoscroll..#.
2df0: 70 72 6f 63 20 74 74 6b 3a 3a 65 6e 74 72 79 3a  proc ttk::entry:
2e00: 3a 44 72 61 67 4f 75 74 20 7b 77 20 6d 6f 64 65  :DragOut {w mode
2e10: 7d 20 7b 0a 20 20 20 20 76 61 72 69 61 62 6c 65  } {.    variable
2e20: 20 53 74 61 74 65 0a 20 20 20 20 69 66 20 7b 24   State.    if {$
2e30: 53 74 61 74 65 28 73 65 6c 65 63 74 4d 6f 64 65  State(selectMode
2e40: 29 20 6e 65 20 22 6e 6f 6e 65 22 20 26 26 20 24  ) ne "none" && $
2e50: 6d 6f 64 65 20 65 71 20 22 4e 6f 74 69 66 79 4e  mode eq "NotifyN
2e60: 6f 72 6d 61 6c 22 7d 20 7b 0a 09 74 74 6b 3a 3a  ormal"} {..ttk::
2e70: 52 65 70 65 61 74 65 64 6c 79 20 74 74 6b 3a 3a  Repeatedly ttk::
2e80: 65 6e 74 72 79 3a 3a 41 75 74 6f 53 63 72 6f 6c  entry::AutoScrol
2e90: 6c 20 24 77 0a 20 20 20 20 7d 0a 7d 0a 0a 23 23  l $w.    }.}..##
2ea0: 20 3c 42 31 2d 45 6e 74 65 72 3e 20 62 69 6e 64   <B1-Enter> bind
2eb0: 69 6e 67 0a 23 20 09 53 75 73 70 65 6e 64 20 61  ing.# .Suspend a
2ec0: 75 74 6f 73 63 72 6f 6c 6c 2e 0a 23 0a 70 72 6f  utoscroll..#.pro
2ed0: 63 20 74 74 6b 3a 3a 65 6e 74 72 79 3a 3a 44 72  c ttk::entry::Dr
2ee0: 61 67 49 6e 20 7b 77 7d 20 7b 0a 20 20 20 20 74  agIn {w} {.    t
2ef0: 74 6b 3a 3a 43 61 6e 63 65 6c 52 65 70 65 61 74  tk::CancelRepeat
2f00: 20 0a 7d 0a 0a 23 23 20 3c 42 75 74 74 6f 6e 52   .}..## <ButtonR
2f10: 65 6c 65 61 73 65 2d 31 3e 20 62 69 6e 64 69 6e  elease-1> bindin
2f20: 67 0a 23 0a 70 72 6f 63 20 74 74 6b 3a 3a 65 6e  g.#.proc ttk::en
2f30: 74 72 79 3a 3a 52 65 6c 65 61 73 65 20 7b 77 7d  try::Release {w}
2f40: 20 7b 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20   {.    variable 
2f50: 53 74 61 74 65 0a 20 20 20 20 73 65 74 20 53 74  State.    set St
2f60: 61 74 65 28 73 65 6c 65 63 74 4d 6f 64 65 29 20  ate(selectMode) 
2f70: 6e 6f 6e 65 0a 20 20 20 20 74 74 6b 3a 3a 43 61  none.    ttk::Ca
2f80: 6e 63 65 6c 52 65 70 65 61 74 20 09 3b 23 20 73  ncelRepeat .;# s
2f90: 75 73 70 65 6e 64 20 61 75 74 6f 73 63 72 6f 6c  uspend autoscrol
2fa0: 6c 0a 7d 0a 0a 23 23 20 41 75 74 6f 53 63 72 6f  l.}..## AutoScro
2fb0: 6c 6c 0a 23 09 43 61 6c 6c 65 64 20 72 65 70 65  ll.#.Called repe
2fc0: 61 74 65 64 6c 79 20 77 68 65 6e 20 74 68 65 20  atedly when the 
2fd0: 6d 6f 75 73 65 20 69 73 20 6f 75 74 73 69 64 65  mouse is outside
2fe0: 20 61 6e 20 65 6e 74 72 79 20 77 69 6e 64 6f 77   an entry window
2ff0: 0a 23 09 77 69 74 68 20 42 75 74 74 6f 6e 20 31  .#.with Button 1
3000: 20 64 6f 77 6e 2e 20 20 53 63 72 6f 6c 6c 20 74   down.  Scroll t
3010: 68 65 20 77 69 6e 64 6f 77 20 6c 65 66 74 20 6f  he window left o
3020: 72 20 72 69 67 68 74 2c 0a 23 09 64 65 70 65 6e  r right,.#.depen
3030: 64 69 6e 67 20 6f 6e 20 77 68 65 72 65 20 74 68  ding on where th
3040: 65 20 6d 6f 75 73 65 20 6c 65 66 74 20 74 68 65  e mouse left the
3050: 20 77 69 6e 64 6f 77 2c 20 61 6e 64 20 65 78 74   window, and ext
3060: 65 6e 64 20 0a 23 09 74 68 65 20 73 65 6c 65 63  end .#.the selec
3070: 74 69 6f 6e 20 61 63 63 6f 72 64 69 6e 67 20 74  tion according t
3080: 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65  o the current se
3090: 6c 65 63 74 69 6f 6e 20 6d 6f 64 65 2e 0a 23 0a  lection mode..#.
30a0: 23 20 54 4f 44 4f 3a 20 41 75 74 6f 53 63 72 6f  # TODO: AutoScro
30b0: 6c 6c 20 73 68 6f 75 6c 64 20 72 65 70 65 61 74  ll should repeat
30c0: 20 66 61 73 74 65 72 20 28 35 30 6d 73 29 20 74   faster (50ms) t
30d0: 68 61 6e 20 6e 6f 72 6d 61 6c 20 61 75 74 6f 72  han normal autor
30e0: 65 70 65 61 74 2e 0a 23 20 54 4f 44 4f 3a 20 4e  epeat..# TODO: N
30f0: 65 65 64 20 61 20 77 61 79 20 66 6f 72 20 52 65  eed a way for Re
3100: 70 65 61 74 20 73 63 72 69 70 74 73 20 74 6f 20  peat scripts to 
3110: 63 61 6e 63 65 6c 20 74 68 65 6d 73 65 6c 76 65  cancel themselve
3120: 73 2e 0a 23 0a 70 72 6f 63 20 74 74 6b 3a 3a 65  s..#.proc ttk::e
3130: 6e 74 72 79 3a 3a 41 75 74 6f 53 63 72 6f 6c 6c  ntry::AutoScroll
3140: 20 7b 77 7d 20 7b 0a 20 20 20 20 76 61 72 69 61   {w} {.    varia
3150: 62 6c 65 20 53 74 61 74 65 0a 20 20 20 20 69 66  ble State.    if
3160: 20 7b 21 5b 77 69 6e 66 6f 20 65 78 69 73 74 73   {![winfo exists
3170: 20 24 77 5d 7d 20 72 65 74 75 72 6e 0a 20 20 20   $w]} return.   
3180: 20 73 65 74 20 78 20 24 53 74 61 74 65 28 78 29   set x $State(x)
3190: 0a 20 20 20 20 69 66 20 7b 24 78 20 3e 20 5b 77  .    if {$x > [w
31a0: 69 6e 66 6f 20 77 69 64 74 68 20 24 77 5d 7d 20  info width $w]} 
31b0: 7b 0a 09 24 77 20 78 76 69 65 77 20 73 63 72 6f  {..$w xview scro
31c0: 6c 6c 20 32 20 75 6e 69 74 73 0a 09 44 72 61 67  ll 2 units..Drag
31d0: 54 6f 20 24 77 20 24 78 0a 20 20 20 20 7d 20 65  To $w $x.    } e
31e0: 6c 73 65 69 66 20 7b 24 78 20 3c 20 30 7d 20 7b  lseif {$x < 0} {
31f0: 0a 09 24 77 20 78 76 69 65 77 20 73 63 72 6f 6c  ..$w xview scrol
3200: 6c 20 2d 32 20 75 6e 69 74 73 0a 09 44 72 61 67  l -2 units..Drag
3210: 54 6f 20 24 77 20 24 78 0a 20 20 20 20 7d 0a 7d  To $w $x.    }.}
3220: 0a 0a 23 23 20 43 68 61 72 53 65 6c 65 63 74 20  ..## CharSelect 
3230: 2d 2d 20 73 65 6c 65 63 74 20 63 68 61 72 61 63  -- select charac
3240: 74 65 72 73 20 62 65 74 77 65 65 6e 20 69 6e 64  ters between ind
3250: 65 78 20 24 66 72 6f 6d 20 61 6e 64 20 24 74 6f  ex $from and $to
3260: 0a 23 0a 70 72 6f 63 20 74 74 6b 3a 3a 65 6e 74  .#.proc ttk::ent
3270: 72 79 3a 3a 43 68 61 72 53 65 6c 65 63 74 20 7b  ry::CharSelect {
3280: 77 20 66 72 6f 6d 20 74 6f 7d 20 7b 0a 20 20 20  w from to} {.   
3290: 20 69 66 20 7b 24 74 6f 20 3c 3d 20 24 66 72 6f   if {$to <= $fro
32a0: 6d 7d 20 7b 0a 09 24 77 20 73 65 6c 65 63 74 69  m} {..$w selecti
32b0: 6f 6e 20 72 61 6e 67 65 20 24 74 6f 20 24 66 72  on range $to $fr
32c0: 6f 6d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  om.    } else {.
32d0: 09 24 77 20 73 65 6c 65 63 74 69 6f 6e 20 72 61  .$w selection ra
32e0: 6e 67 65 20 24 66 72 6f 6d 20 24 74 6f 0a 20 20  nge $from $to.  
32f0: 20 20 7d 0a 20 20 20 20 24 77 20 69 63 75 72 73    }.    $w icurs
3300: 6f 72 20 24 74 6f 0a 7d 0a 0a 23 23 20 57 6f 72  or $to.}..## Wor
3310: 64 53 65 6c 65 63 74 20 2d 2d 20 53 65 6c 65 63  dSelect -- Selec
3320: 74 20 77 68 6f 6c 65 20 77 6f 72 64 73 20 62 65  t whole words be
3330: 74 77 65 65 6e 20 69 6e 64 65 78 20 24 66 72 6f  tween index $fro
3340: 6d 20 61 6e 64 20 24 74 6f 0a 23 0a 70 72 6f 63  m and $to.#.proc
3350: 20 74 74 6b 3a 3a 65 6e 74 72 79 3a 3a 57 6f 72   ttk::entry::Wor
3360: 64 53 65 6c 65 63 74 20 7b 77 20 66 72 6f 6d 20  dSelect {w from 
3370: 74 6f 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 74  to} {.    if {$t
3380: 6f 20 3c 20 24 66 72 6f 6d 7d 20 7b 0a 09 73 65  o < $from} {..se
3390: 74 20 66 69 72 73 74 20 5b 57 6f 72 64 42 61 63  t first [WordBac
33a0: 6b 20 5b 24 77 20 67 65 74 5d 20 24 74 6f 5d 0a  k [$w get] $to].
33b0: 09 73 65 74 20 6c 61 73 74 20 5b 57 6f 72 64 46  .set last [WordF
33c0: 6f 72 77 61 72 64 20 5b 24 77 20 67 65 74 5d 20  orward [$w get] 
33d0: 24 66 72 6f 6d 5d 0a 09 24 77 20 69 63 75 72 73  $from]..$w icurs
33e0: 6f 72 20 24 66 69 72 73 74 0a 20 20 20 20 7d 20  or $first.    } 
33f0: 65 6c 73 65 20 7b 0a 09 73 65 74 20 66 69 72 73  else {..set firs
3400: 74 20 5b 57 6f 72 64 42 61 63 6b 20 5b 24 77 20  t [WordBack [$w 
3410: 67 65 74 5d 20 24 66 72 6f 6d 5d 0a 09 73 65 74  get] $from]..set
3420: 20 6c 61 73 74 20 5b 57 6f 72 64 46 6f 72 77 61   last [WordForwa
3430: 72 64 20 5b 24 77 20 67 65 74 5d 20 24 74 6f 5d  rd [$w get] $to]
3440: 0a 09 24 77 20 69 63 75 72 73 6f 72 20 24 6c 61  ..$w icursor $la
3450: 73 74 0a 20 20 20 20 7d 0a 20 20 20 20 24 77 20  st.    }.    $w 
3460: 73 65 6c 65 63 74 69 6f 6e 20 72 61 6e 67 65 20  selection range 
3470: 24 66 69 72 73 74 20 24 6c 61 73 74 0a 7d 0a 0a  $first $last.}..
3480: 23 23 20 57 6f 72 64 42 61 63 6b 2c 20 57 6f 72  ## WordBack, Wor
3490: 64 46 6f 72 77 61 72 64 20 2d 2d 20 68 65 6c 70  dForward -- help
34a0: 65 72 20 72 6f 75 74 69 6e 65 73 20 66 6f 72 20  er routines for 
34b0: 57 6f 72 64 53 65 6c 65 63 74 2e 0a 23 0a 70 72  WordSelect..#.pr
34c0: 6f 63 20 74 74 6b 3a 3a 65 6e 74 72 79 3a 3a 57  oc ttk::entry::W
34d0: 6f 72 64 42 61 63 6b 20 7b 74 65 78 74 20 69 6e  ordBack {text in
34e0: 64 65 78 7d 20 7b 0a 20 20 20 20 69 66 20 7b 5b  dex} {.    if {[
34f0: 73 65 74 20 70 6f 73 20 5b 74 63 6c 5f 77 6f 72  set pos [tcl_wor
3500: 64 42 72 65 61 6b 42 65 66 6f 72 65 20 24 74 65  dBreakBefore $te
3510: 78 74 20 24 69 6e 64 65 78 5d 5d 20 3c 20 30 7d  xt $index]] < 0}
3520: 20 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 20 20   { return 0 }.  
3530: 20 20 72 65 74 75 72 6e 20 24 70 6f 73 0a 7d 0a    return $pos.}.
3540: 70 72 6f 63 20 74 74 6b 3a 3a 65 6e 74 72 79 3a  proc ttk::entry:
3550: 3a 57 6f 72 64 46 6f 72 77 61 72 64 20 7b 74 65  :WordForward {te
3560: 78 74 20 69 6e 64 65 78 7d 20 7b 0a 20 20 20 20  xt index} {.    
3570: 69 66 20 7b 5b 73 65 74 20 70 6f 73 20 5b 74 63  if {[set pos [tc
3580: 6c 5f 77 6f 72 64 42 72 65 61 6b 41 66 74 65 72  l_wordBreakAfter
3590: 20 24 74 65 78 74 20 24 69 6e 64 65 78 5d 5d 20   $text $index]] 
35a0: 3c 20 30 7d 20 7b 20 72 65 74 75 72 6e 20 65 6e  < 0} { return en
35b0: 64 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 24  d }.    return $
35c0: 70 6f 73 0a 7d 0a 0a 23 23 20 4c 69 6e 65 53 65  pos.}..## LineSe
35d0: 6c 65 63 74 20 2d 2d 20 53 65 6c 65 63 74 20 74  lect -- Select t
35e0: 68 65 20 65 6e 74 69 72 65 20 6c 69 6e 65 2e 0a  he entire line..
35f0: 23 0a 70 72 6f 63 20 74 74 6b 3a 3a 65 6e 74 72  #.proc ttk::entr
3600: 79 3a 3a 4c 69 6e 65 53 65 6c 65 63 74 20 7b 77  y::LineSelect {w
3610: 20 5f 20 5f 7d 20 7b 0a 20 20 20 20 76 61 72 69   _ _} {.    vari
3620: 61 62 6c 65 20 53 74 61 74 65 0a 20 20 20 20 24  able State.    $
3630: 77 20 73 65 6c 65 63 74 69 6f 6e 20 72 61 6e 67  w selection rang
3640: 65 20 30 20 65 6e 64 0a 20 20 20 20 24 77 20 69  e 0 end.    $w i
3650: 63 75 72 73 6f 72 20 65 6e 64 0a 7d 0a 0a 23 23  cursor end.}..##
3660: 23 20 42 75 74 74 6f 6e 20 32 20 62 69 6e 64 69  # Button 2 bindi
3670: 6e 67 20 70 72 6f 63 65 64 75 72 65 73 2e 0a 23  ng procedures..#
3680: 0a 0a 23 23 20 53 63 61 6e 4d 61 72 6b 20 2d 2d  ..## ScanMark --
3690: 20 42 75 74 74 6f 6e 50 72 65 73 73 2d 32 20 62   ButtonPress-2 b
36a0: 69 6e 64 69 6e 67 2e 0a 23 09 4d 61 72 6b 73 20  inding..#.Marks 
36b0: 74 68 65 20 73 74 61 72 74 20 6f 66 20 61 20 73  the start of a s
36c0: 63 61 6e 20 6f 72 20 70 72 69 6d 61 72 79 20 74  can or primary t
36d0: 72 61 6e 73 66 65 72 20 6f 70 65 72 61 74 69 6f  ransfer operatio
36e0: 6e 2e 0a 23 0a 70 72 6f 63 20 74 74 6b 3a 3a 65  n..#.proc ttk::e
36f0: 6e 74 72 79 3a 3a 53 63 61 6e 4d 61 72 6b 20 7b  ntry::ScanMark {
3700: 77 20 78 7d 20 7b 0a 20 20 20 20 76 61 72 69 61  w x} {.    varia
3710: 62 6c 65 20 53 74 61 74 65 0a 20 20 20 20 73 65  ble State.    se
3720: 74 20 53 74 61 74 65 28 73 63 61 6e 58 29 20 24  t State(scanX) $
3730: 78 0a 20 20 20 20 73 65 74 20 53 74 61 74 65 28  x.    set State(
3740: 73 63 61 6e 49 6e 64 65 78 29 20 5b 24 77 20 69  scanIndex) [$w i
3750: 6e 64 65 78 20 40 30 5d 0a 20 20 20 20 73 65 74  ndex @0].    set
3760: 20 53 74 61 74 65 28 73 63 61 6e 4d 6f 76 65 64   State(scanMoved
3770: 29 20 30 0a 7d 0a 0a 23 23 20 53 63 61 6e 44 72  ) 0.}..## ScanDr
3780: 61 67 20 2d 2d 20 42 75 74 74 6f 6e 32 20 6d 6f  ag -- Button2 mo
3790: 74 69 6f 6e 20 62 69 6e 64 69 6e 67 2e 0a 23 0a  tion binding..#.
37a0: 70 72 6f 63 20 74 74 6b 3a 3a 65 6e 74 72 79 3a  proc ttk::entry:
37b0: 3a 53 63 61 6e 44 72 61 67 20 7b 77 20 78 7d 20  :ScanDrag {w x} 
37c0: 7b 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 53  {.    variable S
37d0: 74 61 74 65 0a 0a 20 20 20 20 73 65 74 20 64 78  tate..    set dx
37e0: 20 5b 65 78 70 72 20 7b 24 53 74 61 74 65 28 73   [expr {$State(s
37f0: 63 61 6e 58 29 20 2d 20 24 78 7d 5d 0a 20 20 20  canX) - $x}].   
3800: 20 69 66 20 7b 61 62 73 28 24 64 78 29 20 3e 20   if {abs($dx) > 
3810: 24 53 74 61 74 65 28 64 65 61 64 62 61 6e 64 29  $State(deadband)
3820: 7d 20 7b 0a 09 73 65 74 20 53 74 61 74 65 28 73  } {..set State(s
3830: 63 61 6e 4d 6f 76 65 64 29 20 31 0a 20 20 20 20  canMoved) 1.    
3840: 7d 0a 20 20 20 20 73 65 74 20 6c 65 66 74 20 5b  }.    set left [
3850: 65 78 70 72 20 7b 24 53 74 61 74 65 28 73 63 61  expr {$State(sca
3860: 6e 49 6e 64 65 78 29 20 2b 20 28 24 64 78 2a 24  nIndex) + ($dx*$
3870: 53 74 61 74 65 28 73 63 61 6e 4e 75 6d 29 29 2f  State(scanNum))/
3880: 24 53 74 61 74 65 28 73 63 61 6e 44 65 6e 29 7d  $State(scanDen)}
3890: 5d 0a 20 20 20 20 24 77 20 78 76 69 65 77 20 24  ].    $w xview $
38a0: 6c 65 66 74 0a 0a 20 20 20 20 69 66 20 7b 24 6c  left..    if {$l
38b0: 65 66 74 20 21 3d 20 5b 73 65 74 20 6e 65 77 4c  eft != [set newL
38c0: 65 66 74 20 5b 24 77 20 69 6e 64 65 78 20 40 30  eft [$w index @0
38d0: 5d 5d 7d 20 7b 0a 20 20 20 20 09 23 20 57 65 27  ]]} {.    .# We'
38e0: 76 65 20 73 63 61 6e 6e 65 64 20 70 61 73 74 20  ve scanned past 
38f0: 6f 6e 65 20 65 6e 64 20 6f 66 20 74 68 65 20 65  one end of the e
3900: 6e 74 72 79 3b 0a 09 23 20 72 65 73 65 74 20 74  ntry;..# reset t
3910: 68 65 20 6d 61 72 6b 20 73 6f 20 74 68 61 74 20  he mark so that 
3920: 74 68 65 20 74 65 78 74 20 77 69 6c 6c 20 73 74  the text will st
3930: 61 72 74 20 64 72 61 67 67 69 6e 67 20 61 67 61  art dragging aga
3940: 69 6e 0a 09 23 20 61 73 20 73 6f 6f 6e 20 61 73  in..# as soon as
3950: 20 74 68 65 20 6d 6f 75 73 65 20 72 65 76 65 72   the mouse rever
3960: 73 65 73 20 64 69 72 65 63 74 69 6f 6e 2e 0a 09  ses direction...
3970: 23 0a 09 73 65 74 20 53 74 61 74 65 28 73 63 61  #..set State(sca
3980: 6e 58 29 20 24 78 0a 09 73 65 74 20 53 74 61 74  nX) $x..set Stat
3990: 65 28 73 63 61 6e 49 6e 64 65 78 29 20 24 6e 65  e(scanIndex) $ne
39a0: 77 4c 65 66 74 0a 20 20 20 20 7d 0a 7d 0a 0a 23  wLeft.    }.}..#
39b0: 23 20 53 63 61 6e 52 65 6c 65 61 73 65 20 2d 2d  # ScanRelease --
39c0: 20 42 75 74 74 6f 6e 32 20 72 65 6c 65 61 73 65   Button2 release
39d0: 20 62 69 6e 64 69 6e 67 2e 0a 23 09 44 6f 20 61   binding..#.Do a
39e0: 20 70 72 69 6d 61 72 79 20 74 72 61 6e 73 66 65   primary transfe
39f0: 72 20 69 66 20 74 68 65 20 6d 6f 75 73 65 20 68  r if the mouse h
3a00: 61 73 20 6e 6f 74 20 6d 6f 76 65 64 20 73 69 6e  as not moved sin
3a10: 63 65 20 74 68 65 20 62 75 74 74 6f 6e 20 70 72  ce the button pr
3a20: 65 73 73 2e 0a 23 0a 70 72 6f 63 20 74 74 6b 3a  ess..#.proc ttk:
3a30: 3a 65 6e 74 72 79 3a 3a 53 63 61 6e 52 65 6c 65  :entry::ScanRele
3a40: 61 73 65 20 7b 77 20 78 7d 20 7b 0a 20 20 20 20  ase {w x} {.    
3a50: 76 61 72 69 61 62 6c 65 20 53 74 61 74 65 0a 20  variable State. 
3a60: 20 20 20 69 66 20 7b 21 24 53 74 61 74 65 28 73     if {!$State(s
3a70: 63 61 6e 4d 6f 76 65 64 29 7d 20 7b 0a 09 24 77  canMoved)} {..$w
3a80: 20 69 6e 73 74 61 74 65 20 7b 21 64 69 73 61 62   instate {!disab
3a90: 6c 65 64 20 21 72 65 61 64 6f 6e 6c 79 7d 20 7b  led !readonly} {
3aa0: 0a 09 20 20 20 20 24 77 20 69 63 75 72 73 6f 72  ..    $w icursor
3ab0: 20 5b 43 6c 6f 73 65 73 74 47 61 70 20 24 77 20   [ClosestGap $w 
3ac0: 24 78 5d 0a 09 20 20 20 20 63 61 74 63 68 20 7b  $x]..    catch {
3ad0: 24 77 20 69 6e 73 65 72 74 20 69 6e 73 65 72 74  $w insert insert
3ae0: 20 5b 3a 3a 74 6b 3a 3a 47 65 74 53 65 6c 65 63   [::tk::GetSelec
3af0: 74 69 6f 6e 20 24 77 20 50 52 49 4d 41 52 59 5d  tion $w PRIMARY]
3b00: 7d 0a 09 7d 0a 20 20 20 20 7d 0a 7d 0a 0a 23 23  }..}.    }.}..##
3b10: 23 20 49 6e 73 65 72 74 69 6f 6e 20 61 6e 64 20  # Insertion and 
3b20: 64 65 6c 65 74 69 6f 6e 20 70 72 6f 63 65 64 75  deletion procedu
3b30: 72 65 73 2e 0a 23 0a 0a 23 23 20 50 65 6e 64 69  res..#..## Pendi
3b40: 6e 67 44 65 6c 65 74 65 20 2d 2d 20 44 65 6c 65  ngDelete -- Dele
3b50: 74 65 20 73 65 6c 65 63 74 69 6f 6e 20 70 72 69  te selection pri
3b60: 6f 72 20 74 6f 20 69 6e 73 65 72 74 2e 0a 23 09  or to insert..#.
3b70: 49 66 20 74 68 65 20 65 6e 74 72 79 20 63 75 72  If the entry cur
3b80: 72 65 6e 74 6c 79 20 68 61 73 20 61 20 73 65 6c  rently has a sel
3b90: 65 63 74 69 6f 6e 2c 20 64 65 6c 65 74 65 20 69  ection, delete i
3ba0: 74 20 61 6e 64 0a 23 09 73 65 74 20 74 68 65 20  t and.#.set the 
3bb0: 69 6e 73 65 72 74 20 70 6f 73 69 74 69 6f 6e 20  insert position 
3bc0: 74 6f 20 77 68 65 72 65 20 74 68 65 20 73 65 6c  to where the sel
3bd0: 65 63 74 69 6f 6e 20 77 61 73 2e 0a 23 09 52 65  ection was..#.Re
3be0: 74 75 72 6e 73 3a 20 31 20 69 66 20 70 65 6e 64  turns: 1 if pend
3bf0: 69 6e 67 20 64 65 6c 65 74 65 20 6f 63 63 75 72  ing delete occur
3c00: 72 65 64 2c 20 30 20 69 66 20 6e 6f 74 68 69 6e  red, 0 if nothin
3c10: 67 20 77 61 73 20 73 65 6c 65 63 74 65 64 2e 0a  g was selected..
3c20: 23 0a 70 72 6f 63 20 74 74 6b 3a 3a 65 6e 74 72  #.proc ttk::entr
3c30: 79 3a 3a 50 65 6e 64 69 6e 67 44 65 6c 65 74 65  y::PendingDelete
3c40: 20 7b 77 7d 20 7b 0a 20 20 20 20 69 66 20 7b 5b   {w} {.    if {[
3c50: 24 77 20 73 65 6c 65 63 74 69 6f 6e 20 70 72 65  $w selection pre
3c60: 73 65 6e 74 5d 7d 20 7b 0a 09 24 77 20 69 63 75  sent]} {..$w icu
3c70: 72 73 6f 72 20 73 65 6c 2e 66 69 72 73 74 0a 09  rsor sel.first..
3c80: 24 77 20 64 65 6c 65 74 65 20 73 65 6c 2e 66 69  $w delete sel.fi
3c90: 72 73 74 20 73 65 6c 2e 6c 61 73 74 0a 09 72 65  rst sel.last..re
3ca0: 74 75 72 6e 20 31 0a 20 20 20 20 7d 0a 20 20 20  turn 1.    }.   
3cb0: 20 72 65 74 75 72 6e 20 30 0a 7d 0a 0a 23 23 20   return 0.}..## 
3cc0: 49 6e 73 65 72 74 20 2d 2d 20 49 6e 73 65 72 74  Insert -- Insert
3cd0: 20 74 65 78 74 20 69 6e 74 6f 20 74 68 65 20 65   text into the e
3ce0: 6e 74 72 79 20 77 69 64 67 65 74 2e 0a 23 09 49  ntry widget..#.I
3cf0: 66 20 61 20 73 65 6c 65 63 74 69 6f 6e 20 69 73  f a selection is
3d00: 20 70 72 65 73 65 6e 74 2c 20 74 68 65 20 6e 65   present, the ne
3d10: 77 20 74 65 78 74 20 72 65 70 6c 61 63 65 73 20  w text replaces 
3d20: 69 74 2e 0a 23 09 4f 74 68 65 72 77 69 73 65 2c  it..#.Otherwise,
3d30: 20 74 68 65 20 6e 65 77 20 74 65 78 74 20 69 73   the new text is
3d40: 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65   inserted at the
3d50: 20 69 6e 73 65 72 74 20 63 75 72 73 6f 72 2e 0a   insert cursor..
3d60: 23 0a 70 72 6f 63 20 74 74 6b 3a 3a 65 6e 74 72  #.proc ttk::entr
3d70: 79 3a 3a 49 6e 73 65 72 74 20 7b 77 20 73 7d 20  y::Insert {w s} 
3d80: 7b 0a 20 20 20 20 69 66 20 7b 24 73 20 65 71 20  {.    if {$s eq 
3d90: 22 22 7d 20 7b 20 72 65 74 75 72 6e 20 7d 0a 20  ""} { return }. 
3da0: 20 20 20 50 65 6e 64 69 6e 67 44 65 6c 65 74 65     PendingDelete
3db0: 20 24 77 0a 20 20 20 20 24 77 20 69 6e 73 65 72   $w.    $w inser
3dc0: 74 20 69 6e 73 65 72 74 20 24 73 0a 20 20 20 20  t insert $s.    
3dd0: 53 65 65 20 24 77 20 69 6e 73 65 72 74 0a 7d 0a  See $w insert.}.
3de0: 0a 23 23 20 42 61 63 6b 73 70 61 63 65 20 2d 2d  .## Backspace --
3df0: 20 42 61 63 6b 73 70 61 63 65 20 6f 76 65 72 20   Backspace over 
3e00: 74 68 65 20 63 68 61 72 61 63 74 65 72 20 6a 75  the character ju
3e10: 73 74 20 62 65 66 6f 72 65 20 74 68 65 20 69 6e  st before the in
3e20: 73 65 72 74 20 63 75 72 73 6f 72 2e 0a 23 09 49  sert cursor..#.I
3e30: 66 20 74 68 65 72 65 20 69 73 20 61 20 73 65 6c  f there is a sel
3e40: 65 63 74 69 6f 6e 2c 20 64 65 6c 65 74 65 20 74  ection, delete t
3e50: 68 61 74 20 69 6e 73 74 65 61 64 2e 0a 23 09 49  hat instead..#.I
3e60: 66 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74  f the new insert
3e70: 20 70 6f 73 69 74 69 6f 6e 20 69 73 20 6f 66 66   position is off
3e80: 73 63 72 65 65 6e 20 74 6f 20 74 68 65 20 6c 65  screen to the le
3e90: 66 74 2c 0a 23 09 73 63 72 6f 6c 6c 20 74 6f 20  ft,.#.scroll to 
3ea0: 70 6c 61 63 65 20 74 68 65 20 63 75 72 73 6f 72  place the cursor
3eb0: 20 61 74 20 61 62 6f 75 74 20 74 68 65 20 6d 69   at about the mi
3ec0: 64 64 6c 65 20 6f 66 20 74 68 65 20 77 69 6e 64  ddle of the wind
3ed0: 6f 77 2e 0a 23 0a 70 72 6f 63 20 74 74 6b 3a 3a  ow..#.proc ttk::
3ee0: 65 6e 74 72 79 3a 3a 42 61 63 6b 73 70 61 63 65  entry::Backspace
3ef0: 20 7b 77 7d 20 7b 0a 20 20 20 20 69 66 20 7b 5b   {w} {.    if {[
3f00: 50 65 6e 64 69 6e 67 44 65 6c 65 74 65 20 24 77  PendingDelete $w
3f10: 5d 7d 20 7b 0a 20 20 20 20 09 53 65 65 20 24 77  ]} {.    .See $w
3f20: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 20  ..return.    }. 
3f30: 20 20 20 73 65 74 20 78 20 5b 65 78 70 72 20 7b     set x [expr {
3f40: 5b 24 77 20 69 6e 64 65 78 20 69 6e 73 65 72 74  [$w index insert
3f50: 5d 20 2d 20 31 7d 5d 0a 20 20 20 20 69 66 20 7b  ] - 1}].    if {
3f60: 24 78 20 3c 20 30 7d 20 7b 20 72 65 74 75 72 6e  $x < 0} { return
3f70: 20 7d 0a 0a 20 20 20 20 24 77 20 64 65 6c 65 74   }..    $w delet
3f80: 65 20 24 78 0a 0a 20 20 20 20 69 66 20 7b 5b 24  e $x..    if {[$
3f90: 77 20 69 6e 64 65 78 20 40 30 5d 20 3e 3d 20 5b  w index @0] >= [
3fa0: 24 77 20 69 6e 64 65 78 20 69 6e 73 65 72 74 5d  $w index insert]
3fb0: 7d 20 7b 0a 09 73 65 74 20 72 61 6e 67 65 20 5b  } {..set range [
3fc0: 24 77 20 78 76 69 65 77 5d 0a 09 73 65 74 20 6c  $w xview]..set l
3fd0: 65 66 74 20 5b 6c 69 6e 64 65 78 20 24 72 61 6e  eft [lindex $ran
3fe0: 67 65 20 30 5d 0a 09 73 65 74 20 72 69 67 68 74  ge 0]..set right
3ff0: 20 5b 6c 69 6e 64 65 78 20 24 72 61 6e 67 65 20   [lindex $range 
4000: 31 5d 0a 09 24 77 20 78 76 69 65 77 20 6d 6f 76  1]..$w xview mov
4010: 65 74 6f 20 5b 65 78 70 72 20 7b 24 6c 65 66 74  eto [expr {$left
4020: 20 2d 20 28 24 72 69 67 68 74 20 2d 20 24 6c 65   - ($right - $le
4030: 66 74 29 2f 32 2e 30 7d 5d 0a 20 20 20 20 7d 0a  ft)/2.0}].    }.
4040: 7d 0a 0a 23 23 20 44 65 6c 65 74 65 20 2d 2d 20  }..## Delete -- 
4050: 44 65 6c 65 74 65 20 74 68 65 20 63 68 61 72 61  Delete the chara
4060: 63 74 65 72 20 61 66 74 65 72 20 74 68 65 20 69  cter after the i
4070: 6e 73 65 72 74 20 63 75 72 73 6f 72 2e 0a 23 09  nsert cursor..#.
4080: 49 66 20 74 68 65 72 65 20 69 73 20 61 20 73 65  If there is a se
4090: 6c 65 63 74 69 6f 6e 2c 20 64 65 6c 65 74 65 20  lection, delete 
40a0: 74 68 61 74 20 69 6e 73 74 65 61 64 2e 0a 23 0a  that instead..#.
40b0: 70 72 6f 63 20 74 74 6b 3a 3a 65 6e 74 72 79 3a  proc ttk::entry:
40c0: 3a 44 65 6c 65 74 65 20 7b 77 7d 20 7b 0a 20 20  :Delete {w} {.  
40d0: 20 20 69 66 20 7b 21 5b 50 65 6e 64 69 6e 67 44    if {![PendingD
40e0: 65 6c 65 74 65 20 24 77 5d 7d 20 7b 0a 09 24 77  elete $w]} {..$w
40f0: 20 64 65 6c 65 74 65 20 69 6e 73 65 72 74 0a 20   delete insert. 
4100: 20 20 20 7d 0a 7d 0a 0a 23 2a 45 4f 46 2a 0a        }.}..#*EOF*.