diff --git a/library/sketch/SKETCH b/library/sketch/SKETCH
index 76c5e334..552659c7 100644
--- a/library/sketch/SKETCH
+++ b/library/sketch/SKETCH
@@ -1,18 +1,21 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 5-Dec-2023 00:44:13" {WMEDLEY}<library>sketch>SKETCH.;5 491114 
+(FILECREATED "30-Nov-2025 10:10:57" {WMEDLEY}<library>SKETCH>SKETCH.;11 493235 
 
       :EDIT-BY rmk
 
       :CHANGES-TO (VARS SKETCHCOMS)
+                  (FNS UPDATE-SKETCH EDIT-SKETCH)
 
-      :PREVIOUS-DATE "19-Oct-2023 23:55:27" {WMEDLEY}<library>sketch>SKETCH.;4)
+      :PREVIOUS-DATE " 8-Nov-2025 12:19:12" {WMEDLEY}<library>SKETCH>SKETCH.;10)
 
 
 (PRETTYCOMPRINT SKETCHCOMS)
 
 (RPAQQ SKETCHCOMS
-       [[DECLARE%: FIRST DOCOPY DONTEVAL@LOAD
+       [(FILES (SYSLOAD)
+               TEDIT)
+        [DECLARE%: FIRST DOCOPY DONTEVAL@LOAD
                (P (PROG ((NOTECARDSFLG (GETPROP 'NOTECARDS 'FILEDATES))
                          (SKETCHFLG (AND (BOUNDP 'ALL.SKETCHES)
                                          ALL.SKETCHES))
@@ -48,17 +51,16 @@ To abort loading the new version of Sketch, type '^'."]
         (FNS SKETCH SKETCH.FROM.A.FILE SKETCHW.CREATE SKETCH.RESET SKETCHW.FIG.CHANGED 
              SK.WINDOW.TITLE EDITSLIDE EDITSKETCH SK.PUT.ON.FILE SK.OUTPUT.FILE.NAME SKETCH.PUT 
              SK.GET.FROM.FILE SK.INCLUDE.FILE SK.GET.IMAGEOBJ.FROM.FILE SKETCH.GET 
-             ADD.SKETCH.TO.VIEWER FILENAMELESSVERSION SK.ADD.ELEMENTS.TO.SKETCH SKETCH.SET.A.DEFAULT
-             SK.POPUP.SELECTIONFN GETSKETCHWREGION SK.ADD.ELEMENT SK.ADD.PRIORITY.ELEMENT.TO.SKETCH 
-             SK.ELTS.BY.PRIORITY SK.ORDER.ELEMENTS SK.ADD.PRIORITY.LOCAL.ELEMENT.TO.SKETCH 
-             SK.ADD.ELEMENTS SK.CHECK.WHENADDEDFN SK.APPLY.MENU.COMMAND SK.DELETE.ELEMENT1 
-             SK.MARK.DIRTY SK.MARK.UNDIRTY SK.MENU.AND.RETURN.FIELD SKETCH.SET.BRUSH.SHAPE 
-             SKETCH.SET.BRUSH.SIZE SKETCHW.CLOSEFN SK.CONFIRM.DESTRUCTION SKETCHW.OUTFN 
-             SKETCHW.REOPENFN MAKE.LOCAL.SKETCH MAP.SKETCHSPEC.INTO.VIEWER SKETCHW.REPAINTFN 
-             SKETCHW.REPAINTFN1 SK.DRAWFIGURE.IF SKETCHW.SCROLLFN SKETCHW.RESHAPEFN 
-             SK.UPDATE.EVENT.SELECTION LIGHTGRAYWINDOW SK.ADD.SPACES SK.SKETCH.MENU 
-             SK.CHECK.IMAGEOBJ.WHENDELETEDFN SK.APPLY.IMAGEOBJ.WHENDELETEDFN SK.RETURN.TTY 
-             SK.TAKE.TTY)
+             ADD.SKETCH.TO.VIEWER SK.ADD.ELEMENTS.TO.SKETCH SKETCH.SET.A.DEFAULT SK.POPUP.SELECTIONFN
+             GETSKETCHWREGION SK.ADD.ELEMENT SK.ADD.PRIORITY.ELEMENT.TO.SKETCH SK.ELTS.BY.PRIORITY 
+             SK.ORDER.ELEMENTS SK.ADD.PRIORITY.LOCAL.ELEMENT.TO.SKETCH SK.ADD.ELEMENTS 
+             SK.CHECK.WHENADDEDFN SK.APPLY.MENU.COMMAND SK.DELETE.ELEMENT1 SK.MARK.DIRTY 
+             SK.MARK.UNDIRTY SK.MENU.AND.RETURN.FIELD SKETCH.SET.BRUSH.SHAPE SKETCH.SET.BRUSH.SIZE 
+             SKETCHW.CLOSEFN SK.CONFIRM.DESTRUCTION SKETCHW.OUTFN SKETCHW.REOPENFN MAKE.LOCAL.SKETCH
+             MAP.SKETCHSPEC.INTO.VIEWER SKETCHW.REPAINTFN SKETCHW.REPAINTFN1 SK.DRAWFIGURE.IF 
+             SKETCHW.SCROLLFN SKETCHW.RESHAPEFN SK.UPDATE.EVENT.SELECTION LIGHTGRAYWINDOW 
+             SK.ADD.SPACES SK.SKETCH.MENU SK.CHECK.IMAGEOBJ.WHENDELETEDFN 
+             SK.APPLY.IMAGEOBJ.WHENDELETEDFN SK.RETURN.TTY SK.TAKE.TTY)
         (COMS                                                (* ; 
                                                              "fns for dealing with the sketch menu")
               (FNS SKETCH.COMMANDMENU SKETCH.COMMANDMENU.ITEMS CREATE.SKETCHW.COMMANDMENU 
@@ -242,6 +244,8 @@ To abort loading the new version of Sketch, type '^'."]
                            "Reads a file name and opens a sketch window onto the sketch it contains."
                                                               ]
         (VARS (BackgroundMenu))
+        (COMS (VARS SKETCHFILES)
+              (FNS UPDATE-SKETCH EDIT-SKETCH))
         (FILES SKETCH-OPS SKETCH-ELEMENTS SKETCH-EDIT SKETCH-OBJ SKETCH-BMELT)
         (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (FILES (LOADCOMP)
                                                                 SKETCH-OPS SKETCH-ELEMENTS SKETCH-OBJ
@@ -260,13 +264,6 @@ To abort loading the new version of Sketch, type '^'."]
               (MACROS SK.SET.RECORD.LENGTHS.MACRO)
               (GLOBALVARS SKETCH.RECORD.LENGTHS)
               (P (SK.SET.RECORD.LENGTHS)))
-        [COMS                                                (* ; 
-                     "to correct for a bug in the file package that marks LOADCOMPed file as changed")
-              (P (UNMARKASCHANGED 'SKETCH 'FILE)
-                 (UNMARKASCHANGED 'SKETCH-ELEMENTS 'FILE)
-                 (UNMARKASCHANGED 'SKETCH-OPS 'FILE)
-                 (UNMARKASCHANGED 'SKETCH-EDIT 'FILE)
-                 (UNMARKASCHANGED 'SKETCH-OBJ 'FILE]
         (COMS                                                (* ; 
                                                   "add sketch as option to file browser edit command")
               (FNS SK.ADD.EDIT.COMMAND.TO.FILE.BROWSER)
@@ -275,6 +272,9 @@ To abort loading the new version of Sketch, type '^'."]
                                                                              (NLAML)
                                                                              (LAMA SK.UNIONREGIONS 
                                                                                    SKETCH.CREATE])
+
+(FILESLOAD (SYSLOAD)
+       TEDIT)
 (DECLARE%: FIRST DOCOPY DONTEVAL@LOAD 
 
 [PROG ((NOTECARDSFLG (GETPROP 'NOTECARDS 'FILEDATES))
@@ -437,12 +437,13 @@ To abort loading the new version of Sketch, type '^'."]
           (RETURN NEWNAME])
 
 (SK.OUTPUT.FILE.NAME
-  [LAMBDA (SKETCHFILENAME)                                   (* rrb " 5-May-86 10:45")
+  [LAMBDA (SKETCHFILENAME)                                   (* ; "Edited  3-Nov-2025 15:05 by rmk")
+                                                             (* rrb " 5-May-86 10:45")
     (COND
-       ((STRPOS " " SKETCHFILENAME)                          (* don't put up dummy names that 
-                                                             contain spaces)
+       ((STRPOS " " SKETCHFILENAME)                          (* ; 
+                                                       "don't put up dummy names that contain spaces")
         NIL)
-       (T (FILENAMELESSVERSION SKETCHFILENAME])
+       (T (PACKFILENAME 'VERSION NIL 'BODY SKETCHFILENAME])
 
 (SKETCH.PUT
   [LAMBDA (FILENAME SKETCH VIEWER REGION SCALE GRID)         (* ; "Edited  1-Feb-2022 09:17 by rmk")
@@ -640,13 +641,6 @@ To abort loading the new version of Sketch, type '^'."]
                                                                  (GETSKETCHPROP TOSKETCH 'VIEWS])
                     (PUTSKETCHPROP TOSKETCH SKPROP (GETSKETCHPROP ADDSKETCH SKPROP])
 
-(FILENAMELESSVERSION
-  [LAMBDA (FILENAME)                                         (* rrb "29-Jan-86 15:57")
-          
-          (* strips the version number off of FILENAME if it has one.)
-
-    (PACKFILENAME (CONS 'VERSION (CONS NIL (UNPACKFILENAME FILENAME])
-
 (SK.ADD.ELEMENTS.TO.SKETCH
   [LAMBDA (ELTS SKW)                                         (* rrb "10-Mar-86 16:50")
                                                              (* adds a list of elements to a sketch)
@@ -659,7 +653,9 @@ To abort loading the new version of Sketch, type '^'."]
                         (SK.ADD.ELEMENT ELT SKW])
 
 (SKETCH.SET.A.DEFAULT
-  [LAMBDA (SKW)                                              (* rrb "14-Jul-86 13:43")
+  [LAMBDA (SKW)                                              (* ; "Edited  6-Nov-2025 22:34 by rmk")
+                                                             (* rrb "14-Jul-86 13:43")
+                                                             (* ; "allows the user to set a default")
                                                              (* allows the user to set a default)
     (\CURSOR.IN.MIDDLE.MENU (create MENU
                                    ITEMS _ '[(Line SKETCH.SET.BRUSH.SIZE 
@@ -673,7 +669,8 @@ To abort loading the new version of Sketch, type '^'."]
                                                           (Add% arrowhead SK.SET.LINE.ARROWHEAD 
                                                    "Sets the arrowhead characteristics of new lines."
                                                                  )
-                                                          ("Mouse line specs" SK.SET.LINE.LENGTH.MODE 
+                                                          ("Mouse line specs" SK.SET.LINE.LENGTH.MODE
+                                                                 
                    "Sets whether the lines drawn with the middle mouse button connect to each other."
                                                                  )))
                                              (Arrowhead SK.SET.ARROWHEAD.LENGTH 
@@ -715,7 +712,8 @@ To abort loading the new version of Sketch, type '^'."]
                                                   (SUBITEMS ("Clockwise" SK.SET.ARC.DIRECTION.CW 
                                                 "Makes new arcs go around in the clockwise direction"
                                                                    )
-                                                         ("Counterclockwise" SK.SET.ARC.DIRECTION.CCW 
+                                                         ("Counterclockwise" SK.SET.ARC.DIRECTION.CCW
+                                                                
                                          "Makes new arcs go around in the counterclockwise direction"
                                                                 )))
                                              ("Input scale" SK.SET.INPUT.SCALE 
@@ -740,7 +738,8 @@ To abort loading the new version of Sketch, type '^'."]
 This will be slow for arcs and curves."]
                                    CENTERFLG _ T
                                    WHENSELECTEDFN _ (FUNCTION SK.POPUP.SELECTIONFN)
-                                   MENUFONT _ (SK.FONTNAMELIST (FONTCREATE BOLDFONT])
+                                   MENUFONT _ (FONTPROP (FONTCREATE BOLDFONT)
+                                                     'SPEC])
 
 (SK.POPUP.SELECTIONFN
   [LAMBDA (ITEM MENU)                                        (* rrb " 3-Sep-85 14:27")
@@ -1348,12 +1347,13 @@ This will be slow for arcs and curves."]
 (DEFINEQ
 
 (SKETCH.COMMANDMENU
-  [LAMBDA (ITEMS TITLE)                                      (* rrb "14-Jul-86 13:43")
+  [LAMBDA (ITEMS TITLE)                                      (* ; "Edited  6-Nov-2025 22:36 by rmk")
+                                                             (* rrb "14-Jul-86 13:43")
     (create MENU
            ITEMS _ ITEMS
            CENTERFLG _ T
            WHENSELECTEDFN _ (FUNCTION SKETCHW.SELECTIONFN)
-           MENUFONT _ (SK.FONTNAMELIST (FONTCREATE BOLDFONT))
+           MENUFONT _ (FONTCREATE BOLDFONT)
            TITLE _ TITLE])
 
 (SKETCH.COMMANDMENU.ITEMS
@@ -6657,10 +6657,9 @@ This will be slow for arcs and curves."))
 (DEFINEQ
 
 (SKETCH.TITLE
-  [LAMBDA (SKW)                                              (* rrb " 5-May-86 13:19")
-          
-          (* gets the title of the sketch being edited in SKW.)
-
+  [LAMBDA (SKW)                                              (* rrb " 5-May-86 13:19")
+                                                             (* gets the title of the sketch being 
+                                                             edited in SKW.)
     (fetch (SKETCH SKETCHNAME) of (INSURE.SKETCH SKW])
 
 (SK.SHRINK.ICONCREATE
@@ -8594,6 +8593,43 @@ Otherwise, type '^'.")
 
 (RPAQQ BackgroundMenu NIL)
 
+(RPAQQ SKETCHFILES (SKETCH SKETCH-OPS SKETCH-ELEMENTS SKETCH-EDIT SKETCH-OBJ SKETCH-BMELT))
+(DEFINEQ
+
+(UPDATE-SKETCH
+  [LAMBDA (FILES LDFLG)                                      (* ; "Edited 30-Nov-2025 10:09 by rmk")
+                                                             (* ; "Edited  9-Mar-2025 19:17 by rmk")
+                                                             (* ; "Edited  7-Mar-2025 23:40 by rmk")
+                                                             (* ; "Edited 26-Oct-2022 21:10 by rmk")
+                                                             (* ; "Edited 16-Feb-2025 11:25 by rmk")
+
+    (* ;; 
+ "Loads compiled TEDITFILES that were compiled on sources different from the currently loaded files.")
+
+    (CL:UNLESS LDFLG
+        (SETQ LDFLG 'SYSLOAD))
+    (for F CF in (OR FILES SKETCHFILES) when (SETQ CF (FINDFILE-WITH-EXTENSIONS F NIL 
+                                                             *COMPILED-EXTENSIONS*))
+       unless (thereis LF TCF in LOADEDFILELST first (SETQ TCF (TRUEFILENAME CF))
+                 suchthat (STRING.EQUAL TCF (TRUEFILENAME LF))) do (LOAD CF LDFLG])
+
+(EDIT-SKETCH
+  [LAMBDA NIL                                                (* ; "Edited 30-Nov-2025 10:10 by rmk")
+                                                             (* ; "Edited  7-Mar-2025 22:53 by rmk")
+                                                             (* ; "Edited  3-Jul-2023 13:44 by rmk")
+                                                             (* ; "Edited 17-Jun-2023 10:00 by rmk")
+                                                             (* ; "Edited 25-Apr-2023 17:39 by rmk")
+                                                             (* ; "Edited 26-Oct-2022 21:12 by rmk")
+                                                             (* ; "Edited 14-Sep-2022 08:37 by rmk")
+    (BKSYSBUF " ")
+    (RESETLST
+        (RESETSAVE LOADDBFLG 'YES)
+        (UPDATE-SKETCH SKETCHFILES)
+        (FOR F IN SKETCHFILES DO (LOADFROM F)
+                                 (LOADCOMP F)))
+    (%. ANALYZE ON IN SKETCHFILES])
+)
+
 (FILESLOAD SKETCH-OPS SKETCH-ELEMENTS SKETCH-EDIT SKETCH-OBJ SKETCH-BMELT)
 (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY 
 
@@ -8723,21 +8759,6 @@ Otherwise, type '^'.")
 
 
 
-(* ; "to correct for a bug in the file package that marks LOADCOMPed file as changed")
-
-
-(UNMARKASCHANGED 'SKETCH 'FILE)
-
-(UNMARKASCHANGED 'SKETCH-ELEMENTS 'FILE)
-
-(UNMARKASCHANGED 'SKETCH-OPS 'FILE)
-
-(UNMARKASCHANGED 'SKETCH-EDIT 'FILE)
-
-(UNMARKASCHANGED 'SKETCH-OBJ 'FILE)
-
-
-
 (* ; "add sketch as option to file browser edit command")
 
 (DEFINEQ
@@ -8768,149 +8789,150 @@ Otherwise, type '^'.")
 (ADDTOVAR LAMA SK.UNIONREGIONS SKETCH.CREATE)
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (22176 85539 (SKETCH 22186 . 24291) (SKETCH.FROM.A.FILE 24293 . 24608) (SKETCHW.CREATE 
-24610 . 29184) (SKETCH.RESET 29186 . 30708) (SKETCHW.FIG.CHANGED 30710 . 31050) (SK.WINDOW.TITLE 31052
- . 31439) (EDITSLIDE 31441 . 31847) (EDITSKETCH 31849 . 32173) (SK.PUT.ON.FILE 32175 . 33627) (
-SK.OUTPUT.FILE.NAME 33629 . 34003) (SKETCH.PUT 34005 . 36903) (SK.GET.FROM.FILE 36905 . 37798) (
-SK.INCLUDE.FILE 37800 . 40308) (SK.GET.IMAGEOBJ.FROM.FILE 40310 . 42513) (SKETCH.GET 42515 . 42822) (
-ADD.SKETCH.TO.VIEWER 42824 . 45410) (FILENAMELESSVERSION 45412 . 45688) (SK.ADD.ELEMENTS.TO.SKETCH 
-45690 . 46204) (SKETCH.SET.A.DEFAULT 46206 . 53364) (SK.POPUP.SELECTIONFN 53366 . 53908) (
-GETSKETCHWREGION 53910 . 54116) (SK.ADD.ELEMENT 54118 . 55697) (SK.ADD.PRIORITY.ELEMENT.TO.SKETCH 
-55699 . 57093) (SK.ELTS.BY.PRIORITY 57095 . 57391) (SK.ORDER.ELEMENTS 57393 . 57660) (
-SK.ADD.PRIORITY.LOCAL.ELEMENT.TO.SKETCH 57662 . 59156) (SK.ADD.ELEMENTS 59158 . 59682) (
-SK.CHECK.WHENADDEDFN 59684 . 60414) (SK.APPLY.MENU.COMMAND 60416 . 61214) (SK.DELETE.ELEMENT1 61216 . 
-62794) (SK.MARK.DIRTY 62796 . 63462) (SK.MARK.UNDIRTY 63464 . 63795) (SK.MENU.AND.RETURN.FIELD 63797
- . 64462) (SKETCH.SET.BRUSH.SHAPE 64464 . 65049) (SKETCH.SET.BRUSH.SIZE 65051 . 65557) (
-SKETCHW.CLOSEFN 65559 . 67350) (SK.CONFIRM.DESTRUCTION 67352 . 68351) (SKETCHW.OUTFN 68353 . 68617) (
-SKETCHW.REOPENFN 68619 . 69031) (MAKE.LOCAL.SKETCH 69033 . 69763) (MAP.SKETCHSPEC.INTO.VIEWER 69765 . 
-70975) (SKETCHW.REPAINTFN 70977 . 71805) (SKETCHW.REPAINTFN1 71807 . 72746) (SK.DRAWFIGURE.IF 72748 . 
-73270) (SKETCHW.SCROLLFN 73272 . 77465) (SKETCHW.RESHAPEFN 77467 . 79725) (SK.UPDATE.EVENT.SELECTION 
-79727 . 81782) (LIGHTGRAYWINDOW 81784 . 81947) (SK.ADD.SPACES 81949 . 82695) (SK.SKETCH.MENU 82697 . 
-83019) (SK.CHECK.IMAGEOBJ.WHENDELETEDFN 83021 . 83873) (SK.APPLY.IMAGEOBJ.WHENDELETEDFN 83875 . 84835)
- (SK.RETURN.TTY 84837 . 85205) (SK.TAKE.TTY 85207 . 85537)) (85593 108921 (SKETCH.COMMANDMENU 85603 . 
-85940) (SKETCH.COMMANDMENU.ITEMS 85942 . 106025) (CREATE.SKETCHW.COMMANDMENU 106027 . 106447) (
-SKETCHW.SELECTIONFN 106449 . 107552) (SKETCH.MONITORLOCK 107554 . 108025) (SK.EVAL.AS.PROCESS 108027
- . 108640) (SK.EVAL.WITH.LOCK 108642 . 108919)) (108922 116726 (SK.FIX.MENU 108932 . 110026) (
-SK.SET.UP.MENUS 110028 . 112329) (SK.INSURE.HAS.MENU 112331 . 112993) (SK.CREATE.STANDARD.MENU 112995
- . 113440) (SK.ADD.ITEM.TO.MENU 113442 . 114117) (SK.GET.VIEWER.POPUP.MENU 114119 . 116320) (
-SK.CLEAR.POPUP.MENU 116322 . 116724)) (116782 125604 (SKETCH.CREATE 116792 . 117578) (GETSKETCHPROP 
-117580 . 120637) (PUTSKETCHPROP 120639 . 124571) (CREATE.DEFAULT.SKETCH.CONTEXT 124573 . 125602)) (
-125770 148666 (SK.COPY.BUTTONEVENTFN 125780 . 137008) (SK.BUTTONEVENT.MARK 137010 . 137393) (
-SK.BUILD.IMAGEOBJ 137395 . 147310) (SK.BUTTONEVENT.OVERP 147312 . 147935) (SK.BUTTONEVENT.SAME.KEYS 
-147937 . 148664)) (148945 174760 (SK.SEL.AND.CHANGE 148955 . 149247) (SK.CHECK.WHENCHANGEDFN 149249 . 
-149955) (SK.CHECK.PRECHANGEFN 149957 . 150558) (SK.CHANGE.ELT 150560 . 150752) (SK.CHANGE.THING 150754
- . 152005) (SKETCH.CHANGE.ELEMENTS 152007 . 153190) (SK.APPLY.SINGLE.CHANGEFN 153192 . 153765) (
-SK.DO.CHANGESPECS 153767 . 155426) (SK.VIEWER.FROM.SKETCH.ARG 155428 . 155870) (SK.DO.CHANGESPEC1 
-155872 . 157747) (SK.CHANGEFN 157749 . 158329) (SK.READCHANGEFN 158331 . 158790) (SK.DEFAULT.CHANGEFN 
-158792 . 161264) (CHANGEABLEFIELDITEMS 161266 . 161913) (SK.APPLY.CHANGE.COMMAND 161915 . 162532) (
-SK.DO.AND.RECORD.CHANGES 162534 . 163931) (SK.APPLY.CHANGE.COMMAND1 163933 . 165421) (
-SK.ELEMENTS.CHANGEFN 165423 . 167747) (READ.POINT.TO.ADD 167749 . 168693) (GLOBAL.KNOT.FROM.LOCAL 
-168695 . 169155) (SK.ADD.KNOT.TO.ELEMENT 169157 . 170101) (SK.GROUP.CHANGEFN 170103 . 171315) (
-SK.GROUP.CHANGEFN1 171317 . 174758)) (174927 188660 (ADD.ELEMENT.TO.SKETCH 174937 . 176643) (
-ADD.SKETCH.VIEWER 176645 . 177313) (REMOVE.SKETCH.VIEWER 177315 . 177928) (ALL.SKETCH.VIEWERS 177930
- . 178170) (SKETCH.ALL.VIEWERS 178172 . 178432) (VIEWER.BUCKET 178434 . 178585) (ELT.INSIDE.REGION? 
-178587 . 178914) (ELT.INSIDE.SKWP 178916 . 179207) (SCALE.FROM.SKW 179209 . 179459) (
-SK.ADDELT.TO.WINDOW 179461 . 180321) (SK.CALC.REGION.VIEWED 180323 . 180701) (SK.DRAWFIGURE 180703 . 
-181992) (SK.DRAWFIGURE1 181994 . 182378) (SK.LOCAL.FROM.GLOBAL 182380 . 183615) (SKETCH.REGION.VIEWED 
-183617 . 186304) (SKETCH.VIEW.FROM.NAME 186306 . 186736) (SK.UPDATE.REGION.VIEWED 186738 . 187130) (
-SKETCH.ADD.AND.DISPLAY 187132 . 187540) (SKETCH.ADD.AND.DISPLAY1 187542 . 187980) (SK.ADD.ITEM 187982
- . 188314) (SKETCHW.ADD.INSTANCE 188316 . 188658)) (188701 201889 (SK.SEL.AND.DELETE 188711 . 189099) 
-(SK.ERASE.AND.DELETE.ITEM 189101 . 189520) (REMOVE.ELEMENT.FROM.SKETCH 189522 . 190633) (
-SK.DELETE.ELEMENT 190635 . 191193) (SK.DELETE.ELEMENT2 191195 . 191856) (SK.DELETE.KNOT 191858 . 
-192149) (SK.SEL.AND.DELETE.KNOT 192151 . 193276) (SK.DELETE.ELEMENT.KNOT 193278 . 196485) (
-SK.CHECK.WHENDELETEDFN 196487 . 197267) (SK.CHECK.PREEDITFN 197269 . 197753) (
-SK.CHECK.END.INITIAL.EDIT 197755 . 198289) (SK.CHECK.WHENPOINTDELETEDFN 198291 . 199087) (SK.ERASE.ELT
- 199089 . 199425) (SK.DELETE.ELT 199427 . 199802) (SK.DELETE.ITEM 199804 . 200212) (DELFROMTCONC 
-200214 . 201887)) (201928 215762 (SK.COPY.ELT 201938 . 202308) (SK.SEL.AND.COPY 202310 . 202693) (
-SK.COPY.ELEMENTS 202695 . 208323) (SK.ADD.COPY.OF.ELEMENTS 208325 . 210092) (
-SK.GLOBAL.FROM.LOCAL.ELEMENTS 210094 . 210334) (SK.COPY.ITEM 210336 . 211133) (SK.INSERT.SKETCH 211135
- . 215760)) (215802 245823 (SK.MOVE.ELT 215812 . 216087) (SK.MOVE.ELT.OR.PT 216089 . 216402) (
-SK.APPLY.DEFAULT.MOVE 216404 . 216838) (SK.SEL.AND.MOVE 216840 . 217387) (SK.MOVE.ELEMENTS 217389 . 
-228261) (SKETCH.MOVE.ELEMENTS 228263 . 230194) (SKETCH.COPY.ELEMENTS 230196 . 232243) (
-\SKETCH.COPY.ELEMENT 232245 . 232970) (SK.TRANSLATE.ELEMENT 232972 . 233455) (SK.COPY.GLOBAL.ELEMENT 
-233457 . 233668) (SK.MAKE.ELEMENT.MOVE.ARG 233670 . 234290) (SK.MAKE.ELEMENTS.MOVE.ARG 234292 . 234814
-) (SK.MAKE.POINTS.AND.ELEMENTS.MOVE.ARG 234816 . 235885) (SK.SHOW.FIG.FROM.INFO 235887 . 236255) (
-SK.MOVE.THING 236257 . 237163) (UPDATE.ELEMENT.IN.SKETCH 237165 . 239220) (SK.UPDATE.ELEMENT 239222 . 
-240781) (SK.UPDATE.ELEMENTS 240783 . 241502) (SK.UPDATE.ELEMENT1 241504 . 245404) (
-SK.MOVE.ELEMENT.POINT 245406 . 245821)) (245886 268175 (SK.MOVE.POINTS 245896 . 246183) (
-SK.SEL.AND.MOVE.POINTS 246185 . 246490) (SK.DO.MOVE.ELEMENT.POINTS 246492 . 255149) (
-SK.MOVE.ITEM.POINTS 255151 . 256822) (SK.TRANSLATEPTSFN 256824 . 257208) (SK.TRANSLATE.POINTS 257210
- . 258111) (SK.SELECT.MULTIPLE.POINTS 258113 . 263753) (SK.CONTROL.POINTS.IN.REGION 263755 . 265176) (
-SK.ADD.PT.SELECTION 265178 . 265642) (SK.REMOVE.PT.SELECTION 265644 . 266261) (SK.ADD.POINT 266263 . 
-266886) (SK.ELTS.CONTAINING.PTS 266888 . 267513) (SK.HOTSPOTS.NOT.ON.LIST 267515 . 268173)) (268333 
-271129 (SK.SET.MOVE.MODE 268343 . 269014) (SK.SET.MOVE.MODE.POINTS 269016 . 269355) (
-SK.SET.MOVE.MODE.ELEMENTS 269357 . 269701) (SK.SET.MOVE.MODE.COMBINED 269703 . 270053) (READMOVEMODE 
-270055 . 271127)) (271130 289885 (SK.ALIGN.POINTS 271140 . 271430) (SK.SEL.AND.ALIGN.POINTS 271432 . 
-271741) (SK.ALIGN.POINTS.LEFT 271743 . 272046) (SK.ALIGN.POINTS.RIGHT 272048 . 272353) (
-SK.ALIGN.POINTS.TOP 272355 . 272656) (SK.ALIGN.POINTS.BOTTOM 272658 . 272965) (
-SK.EVEN.SPACE.POINTS.IN.X 272967 . 273287) (SK.EVEN.SPACE.POINTS.IN.Y 273289 . 273609) (
-SK.DO.ALIGN.POINTS 273611 . 284233) (SK.NTH.CONTROL.POINT 284235 . 284696) (
-SK.GET.SELECTED.ELEMENT.STRUCTURE 284698 . 285364) (SK.CORRESPONDING.CONTROL.PT 285366 . 285920) (
-SK.CONTROL.POINT.NUMBER 285922 . 286292) (SK.DO.ALIGN.SETVALUE 286294 . 289883)) (289949 303381 (
-SKETCH.CREATE.GROUP 289959 . 290448) (SK.CREATE.GROUP1 290450 . 290997) (SK.UPDATE.GROUP.AFTER.CHANGE 
-290999 . 291788) (SK.GROUP.ELTS 291790 . 292071) (SK.SEL.AND.GROUP 292073 . 292459) (SK.GROUP.ELEMENTS
- 292461 . 294110) (SK.UNGROUP.ELT 294112 . 294396) (SK.SEL.AND.UNGROUP 294398 . 296067) (
-SK.UNGROUP.ELEMENT 296069 . 297005) (SK.GLOBAL.REGION.OF.LOCAL.ELEMENTS 297007 . 297929) (
-SK.LOCAL.REGION.OF.LOCAL.ELEMENTS 297931 . 298942) (SK.GLOBAL.REGION.OF.GLOBAL.ELEMENTS 298944 . 
-300284) (SK.UNIONREGIONS 300286 . 302652) (SKETCH.REGION.OF.SKETCH 302654 . 303070) (SK.FLASHREGION 
-303072 . 303379)) (303382 316853 (INIT.GROUP.ELEMENT 303392 . 304264) (GROUP.DRAWFN 304266 . 304716) (
-GROUP.EXPANDFN 304718 . 306281) (GROUP.INSIDEFN 306283 . 306692) (GROUP.REGIONFN 306694 . 307089) (
-GROUP.GLOBALREGIONFN 307091 . 307409) (GROUP.TRANSLATEFN 307411 . 309443) (GROUP.TRANSFORMFN 309445 . 
-312925) (GROUP.READCHANGEFN 312927 . 316851)) (316854 317862 (REGION.CENTER 316864 . 317465) (
-REMOVE.LAST 317467 . 317860)) (317915 323022 (SK.MOVE.GROUP.CONTROL.PT 317925 . 318216) (
-SK.SEL.AND.MOVE.CONTROL.PT 318218 . 319622) (SK.MOVE.GROUP.ELEMENT.CONTROL.POINT 319624 . 321697) (
-SK.READ.NEW.GROUP.CONTROL.PT 321699 . 323020)) (323281 327905 (SK.DO.GROUP 323291 . 324743) (
-SK.CHECK.WHENGROUPEDFN 324745 . 325455) (SK.DO.UNGROUP 325457 . 326662) (SK.CHECK.WHENUNGROUPEDFN 
-326664 . 327251) (SK.GROUP.UNDO 327253 . 327576) (SK.UNGROUP.UNDO 327578 . 327903)) (328146 333068 (
-SK.FREEZE.ELTS 328156 . 328440) (SK.SEL.AND.FREEZE 328442 . 328832) (SK.FREEZE.ELEMENTS 328834 . 
-329385) (SK.UNFREEZE.ELT 329387 . 329676) (SK.SEL.AND.UNFREEZE 329678 . 331214) (SK.UNFREEZE.ELEMENTS 
-331216 . 331775) (SK.FREEZE.UNDO 331777 . 332022) (SK.UNFREEZE.UNDO 332024 . 332271) (SK.DO.FREEZE 
-332273 . 332666) (SK.DO.UNFREEZE 332668 . 333066)) (333298 343108 (SKETCH.ELEMENTS.OF.SKETCH 333308 . 
-334143) (SKETCH.LIST.OF.ELEMENTS 334145 . 334863) (SKETCH.ADD.ELEMENT 334865 . 335940) (
-SKETCH.DELETE.ELEMENT 335942 . 337674) (DELFROMGROUPELT 337676 . 338476) (SKETCH.ELEMENT.TYPE 338478
- . 338827) (SKETCH.ELEMENT.CHANGED 338829 . 340397) (SK.ELEMENT.CHANGED1 340399 . 341050) (
-SK.UPDATE.GLOBAL.IMAGE.OBJECT.ELEMENT 341052 . 343106)) (343162 347774 (INSURE.SKETCH 343172 . 345787)
- (LOCALSPECS.FROM.VIEWER 345789 . 346149) (SK.LOCAL.ELT.FROM.GLOBALPART 346151 . 346619) (
-SKETCH.FROM.VIEWER 346621 . 346855) (INSPECT.SKETCH 346857 . 347182) (ELT.INSIDE.SKETCHWP 347184 . 
-347457) (SK.INSIDE.REGION 347459 . 347772)) (347775 352105 (MAPSKETCHSPECS 347785 . 348406) (
-MAPCOLLECTSKETCHSPECS 348408 . 349157) (MAPSKETCHSPECSUNTIL 349159 . 349967) (MAPGLOBALSKETCHSPECS 
-349969 . 350670) (MAPGLOBALSKETCHELEMENTS 350672 . 352103)) (352167 378059 (SK.ADD.SELECTION 352177 . 
-352917) (SK.COPY.INSERTFN 352919 . 356550) (SCREENELEMENTP 356552 . 357025) (SK.ITEM.REGION 357027 . 
-357514) (SK.ELEMENT.GLOBAL.REGION 357516 . 358044) (SK.LOCAL.ITEMS.IN.REGION 358046 . 360025) (
-SK.REGIONFN 360027 . 360349) (SK.GLOBAL.REGIONFN 360351 . 360709) (SK.REMOVE.SELECTION 360711 . 361439
-) (SK.SELECT.MULTIPLE.ITEMS 361441 . 371883) (SKETCH.GET.ELEMENTS 371885 . 373308) (SK.PUT.MARKS.UP 
-373310 . 373649) (SK.TAKE.MARKS.DOWN 373651 . 373990) (SK.TRANSLATE.GLOBALPART 373992 . 376119) (
-SK.TRANSLATE.ITEM 376121 . 377048) (SK.TRANSLATEFN 377050 . 377246) (TRANSLATE.SKETCH 377248 . 378057)
-) (378325 381232 (SK.INPUT.SCALE 378335 . 379182) (SK.UPDATE.SKETCHCONTEXT 379184 . 379781) (
-SK.SET.INPUT.SCALE 379783 . 380432) (SK.SET.INPUT.SCALE.CURRENT 380434 . 380725) (
-SK.SET.INPUT.SCALE.VALUE 380727 . 381230)) (381283 383195 (SK.SET.FEEDBACK.MODE 381293 . 382599) (
-SK.SET.FEEDBACK.POINT 382601 . 382769) (SK.SET.FEEDBACK.VERBOSE 382771 . 382940) (
-SK.SET.FEEDBACK.ALWAYS 382942 . 383193)) (383346 384623 (SKETCH.TITLE 383356 . 383619) (
-SK.SHRINK.ICONCREATE 383621 . 384621)) (390313 393127 (READBRUSHSHAPE 390323 . 390782) (READ.FUNCTION 
-390784 . 391299) (READBRUSHSIZE 391301 . 391759) (READANGLE 391761 . 392253) (READARCDIRECTION 392255
- . 393125)) (393128 403539 (SK.CHANGE.DASHING 393138 . 397086) (READ.AND.SAVE.NEW.DASHING 397088 . 
-398856) (READ.NEW.DASHING 398858 . 400598) (READ.DASHING.CHANGE 400600 . 402075) (SK.CACHE.DASHING 
-402077 . 403079) (SK.DASHING.LABEL 403081 . 403537)) (403540 407245 (READ.FILLING.CHANGE 403550 . 
-405531) (SK.CACHE.FILLING 405533 . 406251) (READ.AND.SAVE.NEW.FILLING 406253 . 406851) (
-SK.FILLING.LABEL 406853 . 407243)) (407629 443882 (SK.GETGLOBALPOSITION 407639 . 407944) (
-SKETCH.TRACK.ELEMENTS 407946 . 411466) (SK.PICKOUT.WHOLE.MOVE.ELEMENTS 411468 . 412027) (
-MAP.SKETCH.ELEMENTS.INTO.VIEWER 412029 . 412421) (MAP.GLOBAL.POSITION.INTO.VIEWER 412423 . 412803) (
-SKETCH.TO.VIEWER.POSITION 412805 . 413164) (SKETCH.TRACK.IMAGE 413166 . 414020) (SK.TRACK.IMAGE1 
-414022 . 415434) (MAP.VIEWER.XY.INTO.GLOBAL 415436 . 416430) (SK.SET.POSITION 416432 . 416768) (
-MAP.VIEWER.PT.INTO.GLOBAL 416770 . 417876) (VIEWER.TO.SKETCH.POSITION 417878 . 418513) (
-SK.INSURE.SCALE 418515 . 418775) (SKETCH.TO.VIEWER.REGION 418777 . 419583) (VIEWER.TO.SKETCH.REGION 
-419585 . 419923) (SK.READ.POINT.WITH.FEEDBACK 419925 . 430928) (SKETCH.GET.POSITION 430930 . 432810) (
-\CLOBBER.POSITION 432812 . 433260) (NEAREST.HOT.SPOT 433262 . 434790) (GETWREGION 434792 . 435553) (
-GET.BITMAP.POSITION 435555 . 436339) (SK.TRACK.BITMAP1 436341 . 443880)) (444451 475337 (
-SK.BRING.UP.POSITION.PAD 444461 . 450321) (SK.PAD.READER.POSITION 450323 . 451972) (
-SK.POSITION.READER.REPAINTFN 451974 . 453758) (SK.POSITION.PAD.FROM.VIEWER 453760 . 455102) (
-SK.INIT.POSITION.NUMBER.PAD.MENU 455104 . 455454) (SK.READ.POSITION.PAD.HANDLER 455456 . 461188) (
-DISPLAY.POSITION.READER.TOTAL 461190 . 463488) (POSITION.PAD.READER.HANDLER 463490 . 471533) (
-POSITIONPAD.HELDFN 471535 . 473019) (\POSITION.PAD.ADD.DIGIT.MENU 473021 . 474600) (
-\POSITION.READER.NUMBERPAD 474602 . 475335)) (476963 479641 (SK.DRAWFN 476973 . 477339) (
-SK.TRANSFORMFN 477341 . 477722) (SK.EXPANDFN 477724 . 478001) (SK.INPUT 478003 . 478384) (SK.INSIDEFN 
-478386 . 479026) (SK.UPDATEFN 479028 . 479639)) (485309 489254 (SK.CHECK.SKETCH.VERSION 485319 . 
-486559) (SK.INSURE.RECORD.LENGTH 486561 . 488044) (SK.INSURE.HAS.LENGTH 488046 . 488784) (
-SK.RECORD.LENGTH 488786 . 488960) (SK.SET.RECORD.LENGTHS 488962 . 489252)) (489999 490886 (
-SK.ADD.EDIT.COMMAND.TO.FILE.BROWSER 490009 . 490884)))))
+  (FILEMAP (NIL (21911 85500 (SKETCH 21921 . 24026) (SKETCH.FROM.A.FILE 24028 . 24343) (SKETCHW.CREATE 
+24345 . 28919) (SKETCH.RESET 28921 . 30443) (SKETCHW.FIG.CHANGED 30445 . 30785) (SK.WINDOW.TITLE 30787
+ . 31174) (EDITSLIDE 31176 . 31582) (EDITSKETCH 31584 . 31908) (SK.PUT.ON.FILE 31910 . 33362) (
+SK.OUTPUT.FILE.NAME 33364 . 33849) (SKETCH.PUT 33851 . 36749) (SK.GET.FROM.FILE 36751 . 37644) (
+SK.INCLUDE.FILE 37646 . 40154) (SK.GET.IMAGEOBJ.FROM.FILE 40156 . 42359) (SKETCH.GET 42361 . 42668) (
+ADD.SKETCH.TO.VIEWER 42670 . 45256) (SK.ADD.ELEMENTS.TO.SKETCH 45258 . 45772) (SKETCH.SET.A.DEFAULT 
+45774 . 53325) (SK.POPUP.SELECTIONFN 53327 . 53869) (GETSKETCHWREGION 53871 . 54077) (SK.ADD.ELEMENT 
+54079 . 55658) (SK.ADD.PRIORITY.ELEMENT.TO.SKETCH 55660 . 57054) (SK.ELTS.BY.PRIORITY 57056 . 57352) (
+SK.ORDER.ELEMENTS 57354 . 57621) (SK.ADD.PRIORITY.LOCAL.ELEMENT.TO.SKETCH 57623 . 59117) (
+SK.ADD.ELEMENTS 59119 . 59643) (SK.CHECK.WHENADDEDFN 59645 . 60375) (SK.APPLY.MENU.COMMAND 60377 . 
+61175) (SK.DELETE.ELEMENT1 61177 . 62755) (SK.MARK.DIRTY 62757 . 63423) (SK.MARK.UNDIRTY 63425 . 63756
+) (SK.MENU.AND.RETURN.FIELD 63758 . 64423) (SKETCH.SET.BRUSH.SHAPE 64425 . 65010) (
+SKETCH.SET.BRUSH.SIZE 65012 . 65518) (SKETCHW.CLOSEFN 65520 . 67311) (SK.CONFIRM.DESTRUCTION 67313 . 
+68312) (SKETCHW.OUTFN 68314 . 68578) (SKETCHW.REOPENFN 68580 . 68992) (MAKE.LOCAL.SKETCH 68994 . 69724
+) (MAP.SKETCHSPEC.INTO.VIEWER 69726 . 70936) (SKETCHW.REPAINTFN 70938 . 71766) (SKETCHW.REPAINTFN1 
+71768 . 72707) (SK.DRAWFIGURE.IF 72709 . 73231) (SKETCHW.SCROLLFN 73233 . 77426) (SKETCHW.RESHAPEFN 
+77428 . 79686) (SK.UPDATE.EVENT.SELECTION 79688 . 81743) (LIGHTGRAYWINDOW 81745 . 81908) (
+SK.ADD.SPACES 81910 . 82656) (SK.SKETCH.MENU 82658 . 82980) (SK.CHECK.IMAGEOBJ.WHENDELETEDFN 82982 . 
+83834) (SK.APPLY.IMAGEOBJ.WHENDELETEDFN 83836 . 84796) (SK.RETURN.TTY 84798 . 85166) (SK.TAKE.TTY 
+85168 . 85498)) (85554 108969 (SKETCH.COMMANDMENU 85564 . 85988) (SKETCH.COMMANDMENU.ITEMS 85990 . 
+106073) (CREATE.SKETCHW.COMMANDMENU 106075 . 106495) (SKETCHW.SELECTIONFN 106497 . 107600) (
+SKETCH.MONITORLOCK 107602 . 108073) (SK.EVAL.AS.PROCESS 108075 . 108688) (SK.EVAL.WITH.LOCK 108690 . 
+108967)) (108970 116774 (SK.FIX.MENU 108980 . 110074) (SK.SET.UP.MENUS 110076 . 112377) (
+SK.INSURE.HAS.MENU 112379 . 113041) (SK.CREATE.STANDARD.MENU 113043 . 113488) (SK.ADD.ITEM.TO.MENU 
+113490 . 114165) (SK.GET.VIEWER.POPUP.MENU 114167 . 116368) (SK.CLEAR.POPUP.MENU 116370 . 116772)) (
+116830 125652 (SKETCH.CREATE 116840 . 117626) (GETSKETCHPROP 117628 . 120685) (PUTSKETCHPROP 120687 . 
+124619) (CREATE.DEFAULT.SKETCH.CONTEXT 124621 . 125650)) (125818 148714 (SK.COPY.BUTTONEVENTFN 125828
+ . 137056) (SK.BUTTONEVENT.MARK 137058 . 137441) (SK.BUILD.IMAGEOBJ 137443 . 147358) (
+SK.BUTTONEVENT.OVERP 147360 . 147983) (SK.BUTTONEVENT.SAME.KEYS 147985 . 148712)) (148993 174808 (
+SK.SEL.AND.CHANGE 149003 . 149295) (SK.CHECK.WHENCHANGEDFN 149297 . 150003) (SK.CHECK.PRECHANGEFN 
+150005 . 150606) (SK.CHANGE.ELT 150608 . 150800) (SK.CHANGE.THING 150802 . 152053) (
+SKETCH.CHANGE.ELEMENTS 152055 . 153238) (SK.APPLY.SINGLE.CHANGEFN 153240 . 153813) (SK.DO.CHANGESPECS 
+153815 . 155474) (SK.VIEWER.FROM.SKETCH.ARG 155476 . 155918) (SK.DO.CHANGESPEC1 155920 . 157795) (
+SK.CHANGEFN 157797 . 158377) (SK.READCHANGEFN 158379 . 158838) (SK.DEFAULT.CHANGEFN 158840 . 161312) (
+CHANGEABLEFIELDITEMS 161314 . 161961) (SK.APPLY.CHANGE.COMMAND 161963 . 162580) (
+SK.DO.AND.RECORD.CHANGES 162582 . 163979) (SK.APPLY.CHANGE.COMMAND1 163981 . 165469) (
+SK.ELEMENTS.CHANGEFN 165471 . 167795) (READ.POINT.TO.ADD 167797 . 168741) (GLOBAL.KNOT.FROM.LOCAL 
+168743 . 169203) (SK.ADD.KNOT.TO.ELEMENT 169205 . 170149) (SK.GROUP.CHANGEFN 170151 . 171363) (
+SK.GROUP.CHANGEFN1 171365 . 174806)) (174975 188708 (ADD.ELEMENT.TO.SKETCH 174985 . 176691) (
+ADD.SKETCH.VIEWER 176693 . 177361) (REMOVE.SKETCH.VIEWER 177363 . 177976) (ALL.SKETCH.VIEWERS 177978
+ . 178218) (SKETCH.ALL.VIEWERS 178220 . 178480) (VIEWER.BUCKET 178482 . 178633) (ELT.INSIDE.REGION? 
+178635 . 178962) (ELT.INSIDE.SKWP 178964 . 179255) (SCALE.FROM.SKW 179257 . 179507) (
+SK.ADDELT.TO.WINDOW 179509 . 180369) (SK.CALC.REGION.VIEWED 180371 . 180749) (SK.DRAWFIGURE 180751 . 
+182040) (SK.DRAWFIGURE1 182042 . 182426) (SK.LOCAL.FROM.GLOBAL 182428 . 183663) (SKETCH.REGION.VIEWED 
+183665 . 186352) (SKETCH.VIEW.FROM.NAME 186354 . 186784) (SK.UPDATE.REGION.VIEWED 186786 . 187178) (
+SKETCH.ADD.AND.DISPLAY 187180 . 187588) (SKETCH.ADD.AND.DISPLAY1 187590 . 188028) (SK.ADD.ITEM 188030
+ . 188362) (SKETCHW.ADD.INSTANCE 188364 . 188706)) (188749 201937 (SK.SEL.AND.DELETE 188759 . 189147) 
+(SK.ERASE.AND.DELETE.ITEM 189149 . 189568) (REMOVE.ELEMENT.FROM.SKETCH 189570 . 190681) (
+SK.DELETE.ELEMENT 190683 . 191241) (SK.DELETE.ELEMENT2 191243 . 191904) (SK.DELETE.KNOT 191906 . 
+192197) (SK.SEL.AND.DELETE.KNOT 192199 . 193324) (SK.DELETE.ELEMENT.KNOT 193326 . 196533) (
+SK.CHECK.WHENDELETEDFN 196535 . 197315) (SK.CHECK.PREEDITFN 197317 . 197801) (
+SK.CHECK.END.INITIAL.EDIT 197803 . 198337) (SK.CHECK.WHENPOINTDELETEDFN 198339 . 199135) (SK.ERASE.ELT
+ 199137 . 199473) (SK.DELETE.ELT 199475 . 199850) (SK.DELETE.ITEM 199852 . 200260) (DELFROMTCONC 
+200262 . 201935)) (201976 215810 (SK.COPY.ELT 201986 . 202356) (SK.SEL.AND.COPY 202358 . 202741) (
+SK.COPY.ELEMENTS 202743 . 208371) (SK.ADD.COPY.OF.ELEMENTS 208373 . 210140) (
+SK.GLOBAL.FROM.LOCAL.ELEMENTS 210142 . 210382) (SK.COPY.ITEM 210384 . 211181) (SK.INSERT.SKETCH 211183
+ . 215808)) (215850 245871 (SK.MOVE.ELT 215860 . 216135) (SK.MOVE.ELT.OR.PT 216137 . 216450) (
+SK.APPLY.DEFAULT.MOVE 216452 . 216886) (SK.SEL.AND.MOVE 216888 . 217435) (SK.MOVE.ELEMENTS 217437 . 
+228309) (SKETCH.MOVE.ELEMENTS 228311 . 230242) (SKETCH.COPY.ELEMENTS 230244 . 232291) (
+\SKETCH.COPY.ELEMENT 232293 . 233018) (SK.TRANSLATE.ELEMENT 233020 . 233503) (SK.COPY.GLOBAL.ELEMENT 
+233505 . 233716) (SK.MAKE.ELEMENT.MOVE.ARG 233718 . 234338) (SK.MAKE.ELEMENTS.MOVE.ARG 234340 . 234862
+) (SK.MAKE.POINTS.AND.ELEMENTS.MOVE.ARG 234864 . 235933) (SK.SHOW.FIG.FROM.INFO 235935 . 236303) (
+SK.MOVE.THING 236305 . 237211) (UPDATE.ELEMENT.IN.SKETCH 237213 . 239268) (SK.UPDATE.ELEMENT 239270 . 
+240829) (SK.UPDATE.ELEMENTS 240831 . 241550) (SK.UPDATE.ELEMENT1 241552 . 245452) (
+SK.MOVE.ELEMENT.POINT 245454 . 245869)) (245934 268223 (SK.MOVE.POINTS 245944 . 246231) (
+SK.SEL.AND.MOVE.POINTS 246233 . 246538) (SK.DO.MOVE.ELEMENT.POINTS 246540 . 255197) (
+SK.MOVE.ITEM.POINTS 255199 . 256870) (SK.TRANSLATEPTSFN 256872 . 257256) (SK.TRANSLATE.POINTS 257258
+ . 258159) (SK.SELECT.MULTIPLE.POINTS 258161 . 263801) (SK.CONTROL.POINTS.IN.REGION 263803 . 265224) (
+SK.ADD.PT.SELECTION 265226 . 265690) (SK.REMOVE.PT.SELECTION 265692 . 266309) (SK.ADD.POINT 266311 . 
+266934) (SK.ELTS.CONTAINING.PTS 266936 . 267561) (SK.HOTSPOTS.NOT.ON.LIST 267563 . 268221)) (268381 
+271177 (SK.SET.MOVE.MODE 268391 . 269062) (SK.SET.MOVE.MODE.POINTS 269064 . 269403) (
+SK.SET.MOVE.MODE.ELEMENTS 269405 . 269749) (SK.SET.MOVE.MODE.COMBINED 269751 . 270101) (READMOVEMODE 
+270103 . 271175)) (271178 289933 (SK.ALIGN.POINTS 271188 . 271478) (SK.SEL.AND.ALIGN.POINTS 271480 . 
+271789) (SK.ALIGN.POINTS.LEFT 271791 . 272094) (SK.ALIGN.POINTS.RIGHT 272096 . 272401) (
+SK.ALIGN.POINTS.TOP 272403 . 272704) (SK.ALIGN.POINTS.BOTTOM 272706 . 273013) (
+SK.EVEN.SPACE.POINTS.IN.X 273015 . 273335) (SK.EVEN.SPACE.POINTS.IN.Y 273337 . 273657) (
+SK.DO.ALIGN.POINTS 273659 . 284281) (SK.NTH.CONTROL.POINT 284283 . 284744) (
+SK.GET.SELECTED.ELEMENT.STRUCTURE 284746 . 285412) (SK.CORRESPONDING.CONTROL.PT 285414 . 285968) (
+SK.CONTROL.POINT.NUMBER 285970 . 286340) (SK.DO.ALIGN.SETVALUE 286342 . 289931)) (289997 303429 (
+SKETCH.CREATE.GROUP 290007 . 290496) (SK.CREATE.GROUP1 290498 . 291045) (SK.UPDATE.GROUP.AFTER.CHANGE 
+291047 . 291836) (SK.GROUP.ELTS 291838 . 292119) (SK.SEL.AND.GROUP 292121 . 292507) (SK.GROUP.ELEMENTS
+ 292509 . 294158) (SK.UNGROUP.ELT 294160 . 294444) (SK.SEL.AND.UNGROUP 294446 . 296115) (
+SK.UNGROUP.ELEMENT 296117 . 297053) (SK.GLOBAL.REGION.OF.LOCAL.ELEMENTS 297055 . 297977) (
+SK.LOCAL.REGION.OF.LOCAL.ELEMENTS 297979 . 298990) (SK.GLOBAL.REGION.OF.GLOBAL.ELEMENTS 298992 . 
+300332) (SK.UNIONREGIONS 300334 . 302700) (SKETCH.REGION.OF.SKETCH 302702 . 303118) (SK.FLASHREGION 
+303120 . 303427)) (303430 316901 (INIT.GROUP.ELEMENT 303440 . 304312) (GROUP.DRAWFN 304314 . 304764) (
+GROUP.EXPANDFN 304766 . 306329) (GROUP.INSIDEFN 306331 . 306740) (GROUP.REGIONFN 306742 . 307137) (
+GROUP.GLOBALREGIONFN 307139 . 307457) (GROUP.TRANSLATEFN 307459 . 309491) (GROUP.TRANSFORMFN 309493 . 
+312973) (GROUP.READCHANGEFN 312975 . 316899)) (316902 317910 (REGION.CENTER 316912 . 317513) (
+REMOVE.LAST 317515 . 317908)) (317963 323070 (SK.MOVE.GROUP.CONTROL.PT 317973 . 318264) (
+SK.SEL.AND.MOVE.CONTROL.PT 318266 . 319670) (SK.MOVE.GROUP.ELEMENT.CONTROL.POINT 319672 . 321745) (
+SK.READ.NEW.GROUP.CONTROL.PT 321747 . 323068)) (323329 327953 (SK.DO.GROUP 323339 . 324791) (
+SK.CHECK.WHENGROUPEDFN 324793 . 325503) (SK.DO.UNGROUP 325505 . 326710) (SK.CHECK.WHENUNGROUPEDFN 
+326712 . 327299) (SK.GROUP.UNDO 327301 . 327624) (SK.UNGROUP.UNDO 327626 . 327951)) (328194 333116 (
+SK.FREEZE.ELTS 328204 . 328488) (SK.SEL.AND.FREEZE 328490 . 328880) (SK.FREEZE.ELEMENTS 328882 . 
+329433) (SK.UNFREEZE.ELT 329435 . 329724) (SK.SEL.AND.UNFREEZE 329726 . 331262) (SK.UNFREEZE.ELEMENTS 
+331264 . 331823) (SK.FREEZE.UNDO 331825 . 332070) (SK.UNFREEZE.UNDO 332072 . 332319) (SK.DO.FREEZE 
+332321 . 332714) (SK.DO.UNFREEZE 332716 . 333114)) (333346 343156 (SKETCH.ELEMENTS.OF.SKETCH 333356 . 
+334191) (SKETCH.LIST.OF.ELEMENTS 334193 . 334911) (SKETCH.ADD.ELEMENT 334913 . 335988) (
+SKETCH.DELETE.ELEMENT 335990 . 337722) (DELFROMGROUPELT 337724 . 338524) (SKETCH.ELEMENT.TYPE 338526
+ . 338875) (SKETCH.ELEMENT.CHANGED 338877 . 340445) (SK.ELEMENT.CHANGED1 340447 . 341098) (
+SK.UPDATE.GLOBAL.IMAGE.OBJECT.ELEMENT 341100 . 343154)) (343210 347822 (INSURE.SKETCH 343220 . 345835)
+ (LOCALSPECS.FROM.VIEWER 345837 . 346197) (SK.LOCAL.ELT.FROM.GLOBALPART 346199 . 346667) (
+SKETCH.FROM.VIEWER 346669 . 346903) (INSPECT.SKETCH 346905 . 347230) (ELT.INSIDE.SKETCHWP 347232 . 
+347505) (SK.INSIDE.REGION 347507 . 347820)) (347823 352153 (MAPSKETCHSPECS 347833 . 348454) (
+MAPCOLLECTSKETCHSPECS 348456 . 349205) (MAPSKETCHSPECSUNTIL 349207 . 350015) (MAPGLOBALSKETCHSPECS 
+350017 . 350718) (MAPGLOBALSKETCHELEMENTS 350720 . 352151)) (352215 378107 (SK.ADD.SELECTION 352225 . 
+352965) (SK.COPY.INSERTFN 352967 . 356598) (SCREENELEMENTP 356600 . 357073) (SK.ITEM.REGION 357075 . 
+357562) (SK.ELEMENT.GLOBAL.REGION 357564 . 358092) (SK.LOCAL.ITEMS.IN.REGION 358094 . 360073) (
+SK.REGIONFN 360075 . 360397) (SK.GLOBAL.REGIONFN 360399 . 360757) (SK.REMOVE.SELECTION 360759 . 361487
+) (SK.SELECT.MULTIPLE.ITEMS 361489 . 371931) (SKETCH.GET.ELEMENTS 371933 . 373356) (SK.PUT.MARKS.UP 
+373358 . 373697) (SK.TAKE.MARKS.DOWN 373699 . 374038) (SK.TRANSLATE.GLOBALPART 374040 . 376167) (
+SK.TRANSLATE.ITEM 376169 . 377096) (SK.TRANSLATEFN 377098 . 377294) (TRANSLATE.SKETCH 377296 . 378105)
+) (378373 381280 (SK.INPUT.SCALE 378383 . 379230) (SK.UPDATE.SKETCHCONTEXT 379232 . 379829) (
+SK.SET.INPUT.SCALE 379831 . 380480) (SK.SET.INPUT.SCALE.CURRENT 380482 . 380773) (
+SK.SET.INPUT.SCALE.VALUE 380775 . 381278)) (381331 383243 (SK.SET.FEEDBACK.MODE 381341 . 382647) (
+SK.SET.FEEDBACK.POINT 382649 . 382817) (SK.SET.FEEDBACK.VERBOSE 382819 . 382988) (
+SK.SET.FEEDBACK.ALWAYS 382990 . 383241)) (383394 384772 (SKETCH.TITLE 383404 . 383768) (
+SK.SHRINK.ICONCREATE 383770 . 384770)) (390462 393276 (READBRUSHSHAPE 390472 . 390931) (READ.FUNCTION 
+390933 . 391448) (READBRUSHSIZE 391450 . 391908) (READANGLE 391910 . 392402) (READARCDIRECTION 392404
+ . 393274)) (393277 403688 (SK.CHANGE.DASHING 393287 . 397235) (READ.AND.SAVE.NEW.DASHING 397237 . 
+399005) (READ.NEW.DASHING 399007 . 400747) (READ.DASHING.CHANGE 400749 . 402224) (SK.CACHE.DASHING 
+402226 . 403228) (SK.DASHING.LABEL 403230 . 403686)) (403689 407394 (READ.FILLING.CHANGE 403699 . 
+405680) (SK.CACHE.FILLING 405682 . 406400) (READ.AND.SAVE.NEW.FILLING 406402 . 407000) (
+SK.FILLING.LABEL 407002 . 407392)) (407778 444031 (SK.GETGLOBALPOSITION 407788 . 408093) (
+SKETCH.TRACK.ELEMENTS 408095 . 411615) (SK.PICKOUT.WHOLE.MOVE.ELEMENTS 411617 . 412176) (
+MAP.SKETCH.ELEMENTS.INTO.VIEWER 412178 . 412570) (MAP.GLOBAL.POSITION.INTO.VIEWER 412572 . 412952) (
+SKETCH.TO.VIEWER.POSITION 412954 . 413313) (SKETCH.TRACK.IMAGE 413315 . 414169) (SK.TRACK.IMAGE1 
+414171 . 415583) (MAP.VIEWER.XY.INTO.GLOBAL 415585 . 416579) (SK.SET.POSITION 416581 . 416917) (
+MAP.VIEWER.PT.INTO.GLOBAL 416919 . 418025) (VIEWER.TO.SKETCH.POSITION 418027 . 418662) (
+SK.INSURE.SCALE 418664 . 418924) (SKETCH.TO.VIEWER.REGION 418926 . 419732) (VIEWER.TO.SKETCH.REGION 
+419734 . 420072) (SK.READ.POINT.WITH.FEEDBACK 420074 . 431077) (SKETCH.GET.POSITION 431079 . 432959) (
+\CLOBBER.POSITION 432961 . 433409) (NEAREST.HOT.SPOT 433411 . 434939) (GETWREGION 434941 . 435702) (
+GET.BITMAP.POSITION 435704 . 436488) (SK.TRACK.BITMAP1 436490 . 444029)) (444600 475486 (
+SK.BRING.UP.POSITION.PAD 444610 . 450470) (SK.PAD.READER.POSITION 450472 . 452121) (
+SK.POSITION.READER.REPAINTFN 452123 . 453907) (SK.POSITION.PAD.FROM.VIEWER 453909 . 455251) (
+SK.INIT.POSITION.NUMBER.PAD.MENU 455253 . 455603) (SK.READ.POSITION.PAD.HANDLER 455605 . 461337) (
+DISPLAY.POSITION.READER.TOTAL 461339 . 463637) (POSITION.PAD.READER.HANDLER 463639 . 471682) (
+POSITIONPAD.HELDFN 471684 . 473168) (\POSITION.PAD.ADD.DIGIT.MENU 473170 . 474749) (
+\POSITION.READER.NUMBERPAD 474751 . 475484)) (477112 479790 (SK.DRAWFN 477122 . 477488) (
+SK.TRANSFORMFN 477490 . 477871) (SK.EXPANDFN 477873 . 478150) (SK.INPUT 478152 . 478533) (SK.INSIDEFN 
+478535 . 479175) (SK.UPDATEFN 479177 . 479788)) (484955 487111 (UPDATE-SKETCH 484965 . 486078) (
+EDIT-SKETCH 486080 . 487109)) (487712 491657 (SK.CHECK.SKETCH.VERSION 487722 . 488962) (
+SK.INSURE.RECORD.LENGTH 488964 . 490447) (SK.INSURE.HAS.LENGTH 490449 . 491187) (SK.RECORD.LENGTH 
+491189 . 491363) (SK.SET.RECORD.LENGTHS 491365 . 491655)) (492120 493007 (
+SK.ADD.EDIT.COMMAND.TO.FILE.BROWSER 492130 . 493005)))))
 STOP
diff --git a/library/sketch/SKETCH-EDIT b/library/sketch/SKETCH-EDIT
index fe712eea..998a52ec 100644
--- a/library/sketch/SKETCH-EDIT
+++ b/library/sketch/SKETCH-EDIT
@@ -1,18 +1,20 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 5-Dec-2023 00:12:04" {WMEDLEY}<library>sketch>SKETCH-EDIT.;1 108598 
+(FILECREATED " 2-Dec-2025 10:03:57" {WMEDLEY}<library>SKETCH>SKETCH-EDIT.;21 113506 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (RECORDS TEXTELTSELECTION)
+      :CHANGES-TO (FNS \SKED.ARROWKEYS \SKED.INSERT.UNDO \SKED.INSERT.ACTION 
+                       \SKED.INSERT.CHARS.TO.STR \SKED.INSERT CHAR.BEGIN)
+                  (VARS SKETCH-EDITCOMS)
 
-      :PREVIOUS-DATE "21-Aug-2021 20:50:04" {WMEDLEY}<library>sketch>SKETCHEDIT.;1)
+      :PREVIOUS-DATE "30-Nov-2025 08:45:15" {WMEDLEY}<library>SKETCH>SKETCH-EDIT.;17)
 
 
 (PRETTYCOMPRINT SKETCH-EDITCOMS)
 
 (RPAQQ SKETCH-EDITCOMS
-       ((COMS (* selection functions)
+       ((COMS                                                (* ; "selection functions")
               (FNS BUTLAST CHAR.BEGIN CLOSEST.CHAR CLOSEST.LINE FLASHW HILITE.LINE HILITE.TEXT 
                    IN.TEXT.EXTEND INIMAGEOBJ INTEXT NEW.TEXT.EXTEND NEW.TEXT.SELECTIONP NTHCHARWIDTH
                    NTHLOCALREGION ONCHAR SHOW.EXTENDED.SELECTION.FEEDBACK SHOW.FEEDBACK 
@@ -20,29 +22,30 @@
                    SK.ENTER.EDIT.CHANGE SKED.REMOVE.OTHER.SELECTIONS SKED.EXTEND.SELECTION 
                    SKED.MOVE.SELECTION CREATE.TEXT.SELECTION SKED.SELECTION.FEEDBACK 
                    SKED.SET.EXTENDSELECTION SKED.SET.SELECTION LINE.BEGIN SELECTION.GREATERP 
-                   SK.WORD.BREAK.CLASS SK.GETSYNTAX)
+                   SK.GETSYNTAX)
               (DECLARE%: DONTCOPY (RECORDS TEXTELTSELECTION))
               (UGLYVARS IN.TEXT.FEEDBACK.CURSOR NEW.TEXT.FEEDBACK.CURSOR NEW.TEXT.FEEDBACK.SHADE 
                      SELECTION.HIGHLIGHT.SHADE)
               (GLOBALVARS IN.TEXT.FEEDBACK.CURSOR NEW.TEXT.FEEDBACK.CURSOR NEW.TEXT.FEEDBACK.SHADE 
                      SELECTION.HIGHLIGHT.SHADE))
-        (COMS (* editting functions)
-              (FNS WB.EDITOR SK.TTYENTRYFN SK.TTYEXITFN SKED.INSERT \SKED.INSERT FIRST.N.ELEMENTS 
-                   SKED.CREATE.NEW.TEXTBOX SKED.CHARACTERPOSITION SKED.LINE.AND.CHAR# 
-                   \SKED.DELETE.WORD.FROM.STRING \SKED.INSERT.CHARS.TO.STR JOINCHARS 
-                   STRINGFROMCHARACTERS GETALLCHARS CLEANUP.EDIT SKED.NEW.TEXTELT))
-        (COMS (* line adding functions)
+        (COMS                                                (* ; "editing functions")
+              (FNS WB.EDITOR SK.TTYENTRYFN SK.TTYEXITFN SKED.INSERT \SKED.INSERT \SKED.ARROWKEYS 
+                   \SKED.INSERT.ACTION \SKED.INSERT.UNDO FIRST.N.ELEMENTS SKED.CREATE.NEW.TEXTBOX 
+                   SKED.CHARACTERPOSITION SKED.LINE.AND.CHAR# \SKED.DELETE.WORD.FROM.STRING 
+                   \SKED.INSERT.CHARS.TO.STR JOINCHARS STRINGFROMCHARACTERS GETALLCHARS CLEANUP.EDIT
+                   SKED.NEW.TEXTELT))
+        (COMS                                                (* ; "line adding functions")
               (FNS MAP.SCREEN.POSITION.ONTO.GRID NEAREST.ON.GRID SK.MIDDLE.TITLEFN WB.BUTTON.HANDLER
                    WB.ADD.NEW.POINT WB.DRAWLINE WB.RUBBERBAND.POSITION SK.RUBBERBAND.FEEDBACKFN 
                    RESET.LINE.BEING.INPUT)
-              [P (* Was MODERNIZE loaded before?)
+              [P                                             (* ; "Was MODERNIZE loaded before?")
                  (CL:WHEN (GETD 'MODERNWINDOW.SETUP)
                      (MODERNWINDOW.SETUP 'WB.BUTTON.HANDLER))]
               (FNS NEAREST.EXISTING.POSITION WB.NEARPT LASTMOUSEPOSITION))))
 
 
 
-(* selection functions)
+(* ; "selection functions")
 
 (DEFINEQ
 
@@ -59,10 +62,13 @@
                 (BUTLAST (CDR LST])
 
 (CHAR.BEGIN
-  [LAMBDA (CHAR# LINE# TEXTELT STRM)                         (* rrb "14-Jan-85 15:40")
-          
-          (* determines the x position of the first bit of character CHAR# in LINE# of 
-          TEXTELT.)
+  [LAMBDA (CHAR# LINE# TEXTELT STRM)                         (* ; "Edited  1-Dec-2025 00:22 by rmk")
+                                                             (* rrb "14-Jan-85 15:40")
+
+    (* ;; "determines the x position of the first bit of character CHAR# in LINE# of TEXTELT.")
+
+         (* determines the x position of the first bit of character CHAR# in LINE# of 
+         TEXTELT.)
 
     (PROG ((LTEXT (fetch (SCREENELT LOCALPART) of TEXTELT))
            TEXT XPOS LFONT LREGION)
@@ -72,26 +78,21 @@
                                                                         of LTEXT)
                                                                      LINE#]
           (COND
-             ((EQ CHAR# 0)                                   (* before the first character.)
+             ((EQ CHAR# 0)                                   (* ; "before the first character.")
               (RETURN XPOS)))
           (SETQ LFONT (fetch (LOCALTEXT LOCALFONT) of LTEXT))
           (RETURN (IPLUS XPOS (COND
                                  ((IMAGESTREAMTYPEP STRM 'HARDCOPY)
-          
-          (* hardcopy streams must pass the stream so correction in widths is accounted 
-          for.)
-
+                                                             (* ; 
+                    "hardcopy streams must pass the stream so correction in widths is accounted for.")
                                   (DSPFONT LFONT STRM)
                                   (STRINGWIDTH (SUBSTRING TEXT 1 CHAR#)
                                          STRM))
                                  ((FONTP LFONT)
-                                  (for I from 1 to CHAR# sum (CHARWIDTH (CHCON1 (NTHCHAR TEXT I))
-                                                                    LFONT)))
-                                 (T 
-          
-          (* if it is printed in shade, put cursor a percentage of the way across the 
-          area.)
-
+                                  (STRINGWIDTH (SUBSTRING TEXT 1 CHAR#)
+                                         LFONT))
+                                 (T                          (* ; 
+                     "if it is printed in shade, put cursor a percentage of the way across the area.")
                                     (IQUOTIENT (ITIMES CHAR# (fetch (REGION WIDTH) of LREGION))
                                            (NCHARS TEXT])
 
@@ -520,11 +521,10 @@
                         (SKED.MOVE.SELECTION SKW (NOT (WINDOWPROP SKW 'USEGRID])
 
 (SKED.MOVE.SELECTION
-  [LAMBDA (SKW USEGRID)                                      (* rrb "11-Jul-86 15:51")
-          
-          (* the user has left buttoned in a sketch window.
-          Put the caret there.)
-
+  [LAMBDA (SKW USEGRID)                                      (* ; "Edited  5-Nov-2025 23:56 by rmk")
+                                                             (* rrb "11-Jul-86 15:51")
+                                                             (* ; 
+                               "the user has left buttoned in a sketch window.  Put the caret there.")
     (SKED.CLEAR.SELECTION SKW)
     (PROG (FEEDBACKX FEEDBACKY OLDGRIDX OLDGRIDY OLDX OLDY OLDCUR FEEDBACKCUR INTEXT INIMAGEOBJ 
                  STARTLINE STARTCHAR X Y (DSP (WINDOWPROP SKW 'DSP))
@@ -532,44 +532,36 @@
                  (GRID (SK.GRIDFACTOR SKW)))
           (until (MOUSESTATE UP)
              do 
-          
-          (* track with the appropriate caret depending upon whether the cursor is inside 
-          of existing text or not.)
+                (* ;; "track with the appropriate caret depending upon whether the cursor is inside of existing text or not.")
 
                 (SETQ X (LASTMOUSEX DSP))
                 (SETQ Y (LASTMOUSEY DSP))
                 (COND
                    ((OR (NEQ OLDX X)
-                        (NEQ OLDY Y))
-          
-          (* only look for things when the cursor position has changed.)
-
+                        (NEQ OLDY Y))                        (* ; 
+                                         "only look for things when the cursor position has changed.")
                     (SETQ OLDX X)
                     (SETQ OLDY Y)
                     [COND
                        ([AND (SETQ INTEXT
                               (for ELT in (LOCALSPECS.FROM.VIEWER SKW)
+                                 unless (EQ 'SHADE (fetch (LOCALTEXT LOCALFONT)
+                                                      of (fetch (SCREENELT LOCALPART) of ELT)))
                                  when (SELECTQ (fetch (SCREENELT GTYPE) of ELT)
-                                          (TEXT (AND (NEQ (fetch (LOCALTEXT LOCALFONT)
-                                                             of (fetch (SCREENELT LOCALPART)
-                                                                   of ELT))
-                                                          'SHADE)
-                                                     (SETQ STARTLINE (INTEXT ELT X Y))))
-                                          (TEXTBOX (AND (NEQ (fetch (LOCALTEXTBOX LOCALFONT)
-                                                                of (fetch (SCREENELT LOCALPART)
-                                                                      of ELT))
-                                                             'SHADE)
-                                                        (INSIDE? (fetch (LOCALTEXTBOX 
-                                                                               LOCALTEXTBOXREGION)
-                                                                    of (fetch (SCREENELT LOCALPART)
-                                                                          of ELT))
-                                                               X Y)
-                                                        (SETQ STARTLINE (CLOSEST.LINE ELT Y))))
+                                          (TEXT (SETQ STARTLINE (INTEXT ELT X Y)))
+                                          (TEXTBOX (CL:WHEN (INSIDE? (fetch (LOCALTEXTBOX 
+                                                                                   LOCALTEXTBOXREGION
+                                                                                   )
+                                                                        of (fetch (SCREENELT 
+                                                                                         LOCALPART)
+                                                                              of ELT))
+                                                                   X Y)
+                                                       (SETQ STARTLINE (CLOSEST.LINE ELT Y))))
                                           NIL) do (RETURN ELT)))
                              (NOT (SK.ELEMENT.PROTECTED? (fetch (SCREENELT GLOBALPART) of INTEXT)
-                                         'CHANGE]            (* inside of a text element.)
+                                         'CHANGE]            (* ; "inside of a text element.")
                         (SETQ FEEDBACKCUR IN.TEXT.FEEDBACK.CURSOR)
-                        (SETQ FEEDBACKX (CHAR.BEGIN (SETQ STARTCHAR (CLOSEST.CHAR X STARTLINE INTEXT 
+                        (SETQ FEEDBACKX (CHAR.BEGIN (SETQ STARTCHAR (CLOSEST.CHAR X STARTLINE INTEXT
                                                                            DSP))
                                                STARTLINE INTEXT DSP))
                         (SETQ FEEDBACKY (LINE.BEGIN STARTLINE INTEXT)))
@@ -577,7 +569,7 @@
                           (COND
                              (USEGRID (SETQ FEEDBACKX (MAP.WINDOW.ONTO.GRID X SCALE GRID))
                                     (SETQ FEEDBACKY (MAP.WINDOW.ONTO.GRID Y SCALE GRID)))
-                             (T                              (* no grid)
+                             (T                              (* ; "no grid")
                                 (SETQ FEEDBACKX X)
                                 (SETQ FEEDBACKY Y]
                     (COND
@@ -588,13 +580,13 @@
                         (SHOW.FEEDBACK (SETQ OLDCUR FEEDBACKCUR)
                                (SETQ OLDGRIDX FEEDBACKX)
                                (SETQ OLDGRIDY FEEDBACKY)
-                               SKW)))                        (* give the coordinate display window 
-                                                             a shot.)
+                               SKW)))                        (* ; 
+                                                         "give the coordinate display window a shot.")
                     (SKETCHW.UPDATE.LOCATORS SKW)))
              finally (AND OLDGRIDX (SHOW.FEEDBACK OLDCUR OLDGRIDX OLDGRIDY SKW))
                    (COND
-                      ((EQ OLDCUR IN.TEXT.FEEDBACK.CURSOR)   (* selection is existing text)
-                       (SKED.SET.SELECTION (CREATE.TEXT.SELECTION INTEXT STARTLINE STARTCHAR OLDGRIDX 
+                      ((EQ OLDCUR IN.TEXT.FEEDBACK.CURSOR)   (* ; "selection is existing text")
+                       (SKED.SET.SELECTION (CREATE.TEXT.SELECTION INTEXT STARTLINE STARTCHAR OLDGRIDX
                                                   OLDGRIDY DSP)
                               SKW))
                       (OLDGRIDX (SKED.SET.SELECTION (create POSITION
@@ -688,30 +680,18 @@
                       (IGREATERP (fetch (TEXTELTSELECTION SKCHAR#) of SEL2)
                              (fetch (TEXTELTSELECTION SKCHAR#) of SEL1])
 
-(SK.WORD.BREAK.CLASS
-  [LAMBDA (CHCODE)                                           (* rrb "11-Jul-86 17:17")
-                                                             (* version of TEDIT.WORDGET that makes 
-                                                             sure TEDIT is loaded.)
-    (COND
-       ((DEFINEDP (FUNCTION TEDIT.WORDGET))
-        (TEDIT.WORDGET CHCODE))
-       ((EQ CHCODE 32)                                       (* space, return the code tedit uses 
-                                                             for word separators)
-        22)
-       (T                                                    (* this probably isn't right but 
-                                                             should do something reasonable.)
-          (GETSYNTAX CHCODE (GETREADTABLE])
-
 (SK.GETSYNTAX
-  [LAMBDA (CHARCODE)                                         (* rrb "11-Jul-86 17:18")
-          
-          (* version of getsyntax that uses the TEDIT table if it is available, otherwise 
-          the terminal.)
+  [LAMBDA (CHARCODE)                                         (* ; "Edited 30-Nov-2025 08:39 by rmk")
+                                                             (* ; "Edited 10-Nov-2025 15:33 by rmk")
+                                                             (* rrb "11-Jul-86 17:18")
 
-    (COND
-       ((DEFINEDP (FUNCTION TEDIT.GETSYNTAX))
-        (TEDIT.GETSYNTAX CHARCODE TEDIT.READTABLE))
-       (T (GETSYNTAX CHARCODE (GETTERMTABLE])
+    (* ;; "Original code used TEDIT.GETSYNTAX if it was defined, otherwise called the system GETSYNTAX.  That made SKETCH dependent on the system tags (CHARDELETE etc.).  Bbut now we know that loading SKETCH insures that TEDIT is loaded, so Sketch is modified to use the Tedit action names")
+
+    (* ;; "4 is (\TEDIT.TTC FN)")
+
+    (CL:WHEN (EQ 4 (\SYNCODE (fetch READSA of TEDIT.READTABLE)
+                          CHARCODE))
+           (TEDIT.GET.CHARACTION CHARCODE])
 )
 (DECLARE%: DONTCOPY 
 (DECLARE%: EVAL@COMPILE
@@ -764,52 +744,57 @@
 
 
 
-(* editting functions)
+(* ; "editing functions")
 
 (DEFINEQ
 
 (WB.EDITOR
-  [LAMBDA (SKW)                                              (* rrb "17-Jul-85 15:53")
-          
-          (* the process that looks for characters and adds them to the white board as 
-          text elements.)
-          
-          (* save the value of del as an interrupt character so it is restored when this 
-          process exits. This is also done by TTYENTRYFN and TTYEXITFN on the process.)
+  [LAMBDA (SKW)                                              (* ; "Edited 29-Nov-2025 17:14 by rmk")
+                                                             (* rrb "17-Jul-85 15:53")
+                                                             (* ; 
+           "the process that looks for characters and adds them to the white board as text elements.")
 
-    (RESETFORM (INTERRUPTCHAR 127 T)
-           (PROG (CHARS EDITINPROGRESS)
-                 (TTYDISPLAYSTREAM SKW)
-             LP  (COND
-                    ((\SYSBUFP)
-          
-          (* a character has been typed, read all of the characters, delete the current 
-          selection if extended and insert the new characters.)
+    (* ;; "RMK:  DEL/RUBOUT is no longer an interrupt character")
 
-                     (RESET.LINE.BEING.INPUT SKW)
-                     (SKED.INSERT (GETALLCHARS T)
-                            SKW)
-                     (SETQ EDITINPROGRESS T))
-                    ((AND EDITINPROGRESS (NOT (INSIDEP (WINDOWPROP SKW 'REGION)
-                                                     LASTMOUSEX LASTMOUSEY)))
-                     (CLEANUP.EDIT SKW)
-                     (SETQ EDITINPROGRESS NIL)))             (* let the mouse process run.)
-                 (BLOCK)
-                 (GO LP])
+    (* ;; "save the value of del as an interrupt character so it is restored when this process exits.  This is also done by TTYENTRYFN and TTYEXITFN on the process.")
+
+    (PROG (CHARS EDITINPROGRESS)
+          (TTYDISPLAYSTREAM SKW)
+      LP  (COND
+             ((\SYSBUFP)
+
+              (* ;; "a character has been typed, read all of the characters, delete the current selection if extended and insert the new characters.")
+
+              (RESET.LINE.BEING.INPUT SKW)
+              (SKED.INSERT (GETALLCHARS T)
+                     SKW)
+              (SETQ EDITINPROGRESS T))
+             ((AND EDITINPROGRESS (NOT (INSIDEP (WINDOWPROP SKW 'REGION)
+                                              LASTMOUSEX LASTMOUSEY)))
+              (CLEANUP.EDIT SKW)
+              (SETQ EDITINPROGRESS NIL)))                    (* ; "let the mouse process run.")
+          (BLOCK)
+          (GO LP])
 
 (SK.TTYENTRYFN
-  [LAMBDA (SKPROC)                                           (* rrb "20-Jun-85 14:13")
-          
-          (* the sketch process just got the tty. Turns off DEL as an interrupt)
+  [LAMBDA (SKPROC)                                           (* ; "Edited 29-Nov-2025 17:16 by rmk")
+                                                             (* rrb "20-Jun-85 14:13")
+                                                             (* ; 
+                                "the sketch process just got the tty.  Turns off DEL as an interrupt")
 
-    (PROCESSPROP SKPROC 'OLDINTERRUPTVALUE (INTERRUPTCHAR 127 NIL])
+    (* ;; "RMK 2025:  DEL/RUBOUT is no longer an interrupt")
+
+    (AND NIL (PROCESSPROP SKPROC 'OLDINTERRUPTVALUE (INTERRUPTCHAR 127 NIL])
 
 (SK.TTYEXITFN
-  [LAMBDA (SKPROC)                                           (* rrb "20-Jun-85 13:55")
-          
-          (* the sketch process just got the tty. Turns off DEL as an interrupt)
+  [LAMBDA (SKPROC)                                           (* ; "Edited 29-Nov-2025 17:17 by rmk")
+                                                             (* rrb "20-Jun-85 13:55")
+                                                             (* ; 
+                                "the sketch process just got the tty.  Turns off DEL as an interrupt")
 
-    (INTERRUPTCHAR (PROCESSPROP SKPROC 'OLDINTERRUPTVALUE])
+    (* ;; "RMK:  DEL/RUBOUT is no longer an interrupt")
+
+    (AND NIL (INTERRUPTCHAR (PROCESSPROP SKPROC 'OLDINTERRUPTVALUE])
 
 (SKED.INSERT
   [LAMBDA (CHARCODES SKW ATSCALE)                            (* rrb "10-Feb-86 10:15")
@@ -822,81 +807,64 @@
            (\SKED.INSERT CHARCODES SKW ATSCALE])
 
 (\SKED.INSERT
-  [LAMBDA (CHARCODES SKW ATSCALE)                            (* ; "Edited 20-Feb-87 17:28 by rrb")
+  [LAMBDA (CHARCODES SKW ATSCALE)                            (* ; "Edited  1-Dec-2025 13:23 by rmk")
+                                                             (* ; "Edited 12-Nov-2025 14:49 by rmk")
+                                                             (* ; "Edited 10-Nov-2025 15:32 by rmk")
+                                                             (* ; "Edited 20-Feb-87 17:28 by rrb")
     (COND
        ((GREATERP (LENGTH CHARCODES)
                200)
-          
-          (* the maximum string length limits the number of characters that can be 
-          inserted at once. This can happen from a shift select.)
+
+        (* ;; "the maximum string length limits the number of characters that can be inserted at once.  This can happen from a shift select.")
 
         (SKED.INSERT (FIRST.N.ELEMENTS CHARCODES 200)
                SKW ATSCALE)
         (SKED.INSERT (NTH CHARCODES 201)
                SKW ATSCALE))
+       ((\SKED.INSERT.ACTION CHARCODES SKW))
        (T (PROG ((SELECTION (WINDOWPROP SKW 'SELECTION))
                  (EXTENSION (WINDOWPROP SKW 'EXTENDSELECTION))
                  TEXTELT ELTTYPE GTEXTELT FIRSTLINE# FIRSTCHAR# LASTLINE# LASTCHAR# STRLST NEWSTRS 
                  NEWELT STRPIECE NEWLINE# NEWCHAR# SKCONTEXT PTRCHAR# CONTROLCHARTAIL)
-                (COND
-                   ((EQ (SK.GETSYNTAX (CAR CHARCODES))
-                        'UNDO)
-          
-          (* user typed an undo Avoid the overhead of inserting no characters and allow 
-          undo to be typed without a selection.)
-
-                    (SETQ CONTROLCHARTAIL 'UNDO)
-                    (GO UNDO)))
-                (COND
-                   ((NULL SELECTION)                         (* add a new text element with these 
-                                                             characters.)
+                (CL:UNLESS SELECTION                         (* ; 
+                                                      "add a new text element with these characters.")
                     (STATUSPRINT SKW "
 " "Indicate the position the typing should go with the left button.")
-                    (RETURN)))
+                    (RETURN))
                 (SKED.CLEAR.SELECTION SKW NIL T)
                 (SKED.REMOVE.OTHER.SELECTIONS SKW)
-                [COND
-                   ((AND (OR (EQ (CAR CHARCODES)
-                                 (CHARCODE EOL))
-                             (EQ (CAR CHARCODES)
-                                 (CHARCODE LINEFEED)))
-                         (KEYDOWNP 'CTRL))
-          
-          (* user hit control CR. create a new text or textbox.)
-
-                    (SKED.CREATE.NEW.TEXTBOX [COND
-                                                ((NEW.TEXT.SELECTIONP SELECTION)
-                                                 NIL)
-                                                (T (fetch (SCREENELT INDIVIDUALGLOBALPART)
-                                                      of (fetch (TEXTELTSELECTION SKTEXTELT)
-                                                            of SELECTION]
+                (CL:WHEN (AND (MEMB (CAR CHARCODES)
+                                    (CHARCODE (EOL LINEFEED)))
+                              (KEYDOWNP 'CTRL))              (* ; 
+                                                "user hit control CR.  create a new text or textbox.")
+                    (SKED.CREATE.NEW.TEXTBOX (CL:UNLESS (NEW.TEXT.SELECTIONP SELECTION)
+                                                 (fetch (SCREENELT INDIVIDUALGLOBALPART)
+                                                    of (fetch (TEXTELTSELECTION SKTEXTELT)
+                                                          of SELECTION)))
                            SKW
                            (CDR CHARCODES))
                     (RETURN))
-                   [(NEW.TEXT.SELECTIONP SELECTION)
-          
-          (* selection is in open space, create a new text element.)
-                                                             (* merge the characters into strings 
-                                                             of each line.)
+                [COND
+                   [(NEW.TEXT.SELECTIONP SELECTION)          (* ; 
+                                             "selection is in open space, create a new text element.")
+                                                             (* ; 
+                                                    "merge the characters into strings of each line.")
                     (SETQ ELTTYPE 'TEXT)
-                    (SETQ CONTROLCHARTAIL (\SKED.INSERT.CHARS.TO.STR CHARCODES NIL SKW))
+                    (SETQ CONTROLCHARTAIL (\SKED.INSERT.CHARS.TO.STR CHARCODES NIL SKW SELECTION))
                     (COND
-                       ((OR NEWSTRS STRPIECE)
-          
-          (* if there are any new characters, add a new text element.)
-          
-          (* save the selection that marked the spot where the new text goes and add the 
-          text but not in a way that puts an event on the history list.
-          this is done during clean up.)
+                       ((OR NEWSTRS STRPIECE)                (* ; 
+                                           "if there are any new characters, add a new text element.")
+
+                        (* ;; "save the selection that marked the spot where the new text goes and add the text but not in a way that puts an event on the history list.  this is done during clean up.")
 
                         (WINDOWPROP SKW 'CHANGEDTEXTELT SELECTION)
                         (SETQ NEWELT (SK.ADD.ELEMENT (CREATE.TEXT.ELEMENT
                                                       (SETQ NEWSTRS (NCONC1 NEWSTRS STRPIECE))
                                                       (SK.MAP.INPUT.PT.TO.GLOBAL (create INPUTPT
-                                                                                        INPUT.ONGRID? 
+                                                                                        INPUT.ONGRID?
                                                                                         _ NIL
                                                                                         
-                                                                                       INPUT.POSITION 
+                                                                                       INPUT.POSITION
                                                                                         _
                                                                                         (
                                                                                    SELECTION.POSITION
@@ -913,20 +881,15 @@
                                                          of (fetch (SKETCHCONTEXT SKETCHBRUSH)
                                                                of SKCONTEXT)))
                                             SKW T)))
-                       (CONTROLCHARTAIL 
-          
-          (* user typed control return to get textbox in the middle of no where.)
-
+                       (CONTROLCHARTAIL                      (* ; 
+                                "user typed control return to get textbox in the middle of no where.")
                               (SKED.CREATE.NEW.TEXTBOX NIL SKW (CDR CONTROLCHARTAIL)
                                      ATSCALE)
                               (RETURN))
-                       (T 
-          
-          (* user typed backspace, etc. when no text exists.
-          Put caret back in same place.)
-
+                       (T                                    (* ; 
+                    "user typed backspace, etc.  when no text exists.  Put caret back in same place.")
                           (SKED.SET.SELECTION SELECTION SKW)
-                          (RETURN)))                         (* put selection marker at the end.)
+                          (RETURN)))                         (* ; "put selection marker at the end.")
                     (SETQ NEWLINE# (LENGTH NEWSTRS))
                     (SETQ NEWCHAR# (NCHARS (CAR (LAST NEWSTRS]
                    (T [SETQ GTEXTELT (fetch (SCREENELT INDIVIDUALGLOBALPART)
@@ -935,8 +898,8 @@
                       (SETQ ELTTYPE (fetch (INDIVIDUALGLOBALPART GTYPE) of GTEXTELT))
                       (SETQ STRLST (fetch (LOCALTEXT LOCALLISTOFCHARACTERS)
                                       of (fetch (SCREENELT LOCALPART) of TEXTELT)))
-                                                             (* set up points to beginning and end 
-                                                             of selection.)
+                                                             (* ; 
+                                                   "set up points to beginning and end of selection.")
                       [COND
                          [(NULL EXTENSION)
                           (SETQ LASTCHAR# (SETQ FIRSTCHAR# (fetch (TEXTELTSELECTION SKCHAR#)
@@ -948,9 +911,8 @@
                           (SETQ FIRSTCHAR# (fetch (TEXTELTSELECTION SKCHAR#) of SELECTION))
                           (SETQ LASTLINE# (fetch (TEXTELTSELECTION SKLINE#) of EXTENSION))
                           (SETQ LASTCHAR# (fetch (TEXTELTSELECTION SKCHAR#) of EXTENSION))
-          
-          (* make SELECTION be the candidate for the selection after the deletion.)
-
+                                                             (* ; 
+                              "make SELECTION be the candidate for the selection after the deletion.")
                           (SETQ SELECTION EXTENSION))
                          (T (SETQ FIRSTLINE# (fetch (TEXTELTSELECTION SKLINE#) of EXTENSION))
                             (SETQ FIRSTCHAR# (fetch (TEXTELTSELECTION SKCHAR#) of EXTENSION))
@@ -958,37 +920,34 @@
                             (SETQ LASTCHAR# (fetch (TEXTELTSELECTION SKCHAR#) of SELECTION]
                       [for STR in STRLST as LINE# from 1
                          do [COND
-                               ((ILESSP LINE# FIRSTLINE#)    (* before the first, copy across)
+                               ((ILESSP LINE# FIRSTLINE#)    (* ; "before the first, copy across")
                                 (SETQ NEWSTRS (NCONC1 NEWSTRS STR)))
-                               ((IGREATERP LINE# LASTLINE#)  (* After the last, copy across)
+                               ((IGREATERP LINE# LASTLINE#)  (* ; "After the last, copy across")
                                 (SETQ NEWSTRS (NCONC1 NEWSTRS STR)))
-                               ((EQ LINE# FIRSTLINE#)        (* on the first, save the part before.)
+                               ((EQ LINE# FIRSTLINE#)        (* ; 
+                                                             "on the first, save the part before.")
                                 (SETQ STRPIECE (SUBSTRING STR 1 FIRSTCHAR#))
-                                                             (* insert new text.)
+                                                             (* ; "insert new text.")
                                 (COND
                                    [CHARCODES (SETQ CONTROLCHARTAIL (\SKED.INSERT.CHARS.TO.STR
                                                                      CHARCODES
                                                                      (EQ ELTTYPE 'TEXTBOX)
-                                                                     SKW))
-                                          (SETQ NEWCHAR# (COND
-                                                            (STRPIECE (NCHARS STRPIECE))
-                                                            (T 0)))
+                                                                     SKW SELECTION))
+                                          (SETQ NEWCHAR# (CL:IF STRPIECE
+                                                             (NCHARS STRPIECE)
+                                                             0))
                                           (SETQ NEWLINE# (ADD1 (LENGTH NEWSTRS]
                                    (T (SETQ NEWCHAR# FIRSTCHAR#)
                                       (SETQ NEWLINE# FIRSTLINE#]
-                            (COND
-                               ((EQ LINE# LASTLINE#)
-          
-          (* on the last, copy the part before and the part after as one)
-
+                            (CL:WHEN (EQ LINE# LASTLINE#)    (* ; 
+                                        "on the last, copy the part before and the part after as one")
                                 (SETQ NEWSTRS (COND
                                                  [STRPIECE (NCONC1
                                                             NEWSTRS
                                                             (COND
                                                                ((EQ LASTCHAR# (NCHARS STR))
-          
-          (* special check because SUBSTRING returns NIL rather than the empty string.)
-
+                                                             (* ; 
+                          "special check because SUBSTRING returns NIL rather than the empty string.")
                                                                 STRPIECE)
                                                                (T (CONCAT STRPIECE
                                                                          (SUBSTRING STR (ADD1 
@@ -996,53 +955,43 @@
                                                                                               ]
                                                  [(NEQ LASTCHAR# (NCHARS STR))
                                                   (NCONC1 NEWSTRS (SUBSTRING STR (ADD1 LASTCHAR#]
-                                                 (T NEWSTRS]
-          
-          (* any other windows that had this selection have had it deleted already so 
-          this doesn't do anything for them.)
+                                                 (T NEWSTRS))))]
 
-                      [COND
-                         ((IGREATERP NEWLINE# (LENGTH NEWSTRS))
-          
-          (* this corresponds to deleting every thing in a line.
-          Make sure that if it is the last line that the selection is reset)
+                      (* ;; "any other windows that had this selection have had it deleted already so this doesn't do anything for them.")
 
-                          (COND
+                      (CL:WHEN (IGREATERP NEWLINE# (LENGTH NEWSTRS))
+
+                          (* ;; "this corresponds to deleting every thing in a line.  Make sure that if it is the last line that the selection is reset")
+
+                          [COND
                              ((EQ (SETQ NEWLINE# (LENGTH NEWSTRS))
                                   0)
                               (SETQ NEWCHAR# 0)
                               (COND
                                  ((EQ ELTTYPE 'TEXT)
-          
-          (* deleted everything in a text element, delete the text element and set the 
-          selection to new text cursor.)
+
+                                  (* ;; "deleted everything in a text element, delete the text element and set the selection to new text cursor.")
 
                                   (COND
                                      [(WINDOWPROP SKW 'CHANGEDTEXTELT)
-          
-          (* make the history event for this edit so that it will restore the original 
-          text element)
-
-                                      (PROG ((INITSELECTION (WINDOWPROP SKW 'CHANGEDTEXTELT NIL)))
-                                            (COND
-                                               ((POSITIONP INITSELECTION)
-          
-          (* this text element was typing that was never officially added, don't record 
-          the deletion either.)
-
-                                                (SK.DELETE.ELEMENT (LIST TEXTELT)
-                                                       SKW
-                                                       'DON'T))
-                                               (T 
-          
-          (* selection was existing text, record this as a delete event.)
-
-                                                  (SK.DELETE.ELEMENT
-                                                   (LIST TEXTELT)
-                                                   SKW
-                                                   (LIST (fetch (SCREENELT GLOBALPART)
-                                                            of (fetch (TEXTELTSELECTION SKTEXTELT)
-                                                                  of INITSELECTION]
+                                                             (* ; 
+             "make the history event for this edit so that it will restore the original text element")
+                                      (LET ((INITSELECTION (WINDOWPROP SKW 'CHANGEDTEXTELT NIL)))
+                                           (COND
+                                              ((POSITIONP INITSELECTION)
+                                                             (* ; 
+    "this text element was typing that was never officially added, don't record the deletion either.")
+                                               (SK.DELETE.ELEMENT (LIST TEXTELT)
+                                                      SKW
+                                                      'DON'T))
+                                              (T             (* ; 
+                                        "selection was existing text, record this as a delete event.")
+                                                 (SK.DELETE.ELEMENT (LIST TEXTELT)
+                                                        SKW
+                                                        (LIST (fetch (SCREENELT GLOBALPART)
+                                                                 of (fetch (TEXTELTSELECTION 
+                                                                                  SKTEXTELT)
+                                                                       of INITSELECTION]
                                      (T (SK.DELETE.ELEMENT (LIST TEXTELT)
                                                SKW)))
                                   (SKED.SET.SELECTION (SK.SCALE.POSITION.INTO.VIEWER
@@ -1052,16 +1001,14 @@
                                                        (VIEWER.SCALE SKW))
                                          SKW)
                                   (RETURN NIL))
-                                 ((EQ ELTTYPE 'TEXTBOX)      (* deleted everything in a textbox)
+                                 ((EQ ELTTYPE 'TEXTBOX)      (* ; "deleted everything in a textbox")
                                   NIL)))
-                             (T (SETQ NEWCHAR# (NCHARS (CAR (LAST NEWSTRS]
+                             (T (SETQ NEWCHAR# (NCHARS (CAR (LAST NEWSTRS])
                       (SETQ PTRCHAR# (SKED.CHARACTERPOSITION NEWSTRS NEWLINE# NEWCHAR#))
                       (COND
                          ((WINDOWPROP SKW 'CHANGEDTEXTELT)
-          
-          (* this is not the first change to the text element.
-          Collect the changes so that only one element is put on the undo stack, not one 
-          for each character.)
+
+                          (* ;; "this is not the first change to the text element.  Collect the changes so that only one element is put on the undo stack, not one for each character.")
 
                           (SETQ NEWELT (SK.UPDATE.ELEMENT (fetch (SCREENELT GLOBALPART) of TEXTELT)
                                               (SK.REPLACE.TEXT.IN.ELEMENT (fetch (SCREENELT 
@@ -1070,12 +1017,10 @@
                                                      NEWSTRS)
                                               SKW T)))
                          ((AND CONTROLCHARTAIL (NEQ CONTROLCHARTAIL 'UNDO))
-          
-          (* user typed a character command to create a new text box.
-          Create it and put the remaining characters in it and set the cursor there.)
-          
-          (* this is done here so that no undo event is created for the textbox that the 
-          user was in when all they did was type a control-cr.)
+
+                          (* ;; "user typed a character command to create a new text box.  Create it and put the remaining characters in it and set the cursor there.")
+
+                          (* ;; "this is done here so that no undo event is created for the textbox that the user was in when all they did was type a control-cr.")
 
                           (SKED.CREATE.NEW.TEXTBOX (fetch (SCREENELT INDIVIDUALGLOBALPART)
                                                       of NEWELT)
@@ -1083,9 +1028,7 @@
                                  (CDR CONTROLCHARTAIL))
                           (RETURN))
                          (T 
-          
-          (* this is the first edit change to a new element, call the PREEDITFN and save 
-          old text element so undo event can be constructed when the selection changes.)
+                            (* ;; "this is the first edit change to a new element, call the PREEDITFN and save old text element so undo event can be constructed when the selection changes.")
 
                             (OR (SK.CHECK.PREEDITFN SKW (fetch (SCREENELT GLOBALPART) of TEXTELT))
                                 (RETURN NIL))
@@ -1096,9 +1039,8 @@
                                                        NEWSTRS)
                                                 SKW))
                             (WINDOWPROP SKW 'CHANGEDTEXTELT SELECTION)))
-          
-          (* recalculate the line %# and char %# of the insertion point as the textboxes 
-          at least do justification.)
+
+                      (* ;; "recalculate the line # and char # of the insertion point as the textboxes at least do justification.")
 
                       [SETQ NEWCHAR# (CDR (SETQ NEWLINE# (SKED.LINE.AND.CHAR#
                                                           (fetch (LOCALTEXTBOX LOCALLISTOFCHARACTERS)
@@ -1106,62 +1048,22 @@
                                                                    of NEWELT))
                                                           PTRCHAR#]
                       (SETQ NEWLINE# (CAR NEWLINE#]
-            UNDO
-                (COND
-                   ((NULL CONTROLCHARTAIL)
-          
-          (* set the selection to where the characters were just inserted.)
 
+           (* ;; "Cleanup")
+
+                (COND
+                   ((NULL CONTROLCHARTAIL)                   (* ; 
+                                      "set the selection to where the characters were just inserted.")
                     (SKED.SET.SELECTION (CREATE.TEXT.SELECTION NEWELT NEWLINE# NEWCHAR# NIL NIL
                                                (WINDOWPROP SKW 'DSP))
                            SKW))
-                   [(EQ CONTROLCHARTAIL 'UNDO)
-          
-          (* user types in an undo after some characters or while selection was in the 
-          middle of text.)
-
-                    (PROG (INITSELECTION EDITEDELT)
-                          (COND
-                             ((SETQ INITSELECTION (WINDOWPROP SKW 'CHANGEDTEXTELT NIL))
-                                                             (* in the middle of editing, undo 
-                                                             these edits.)
-                              [SETQ EDITEDELT (fetch (SCREENELT GLOBALPART)
-                                                 of (OR NEWELT (fetch (TEXTELTSELECTION SKTEXTELT)
-                                                                  of (OR SELECTION (ERROR 
-                                                                  "NO SELECTION WHEN THERE SHOULD BE"
-                                                                                          ]
-          
-          (* add event to history list so the undo can be undone.)
-
-                              (COND
-                                 ((POSITIONP INITSELECTION)
-          
-          (* add an ADD event because previously there was nothing here.)
-
-                                  (SK.ADD.HISTEVENT 'ADD (LIST EDITEDELT)
-                                         SKW)
-                                  (SK.CHECK.END.INITIAL.EDIT SKW EDITEDELT))
-                                 (T (SK.ENTER.EDIT.CHANGE SKW (fetch (SCREENELT GLOBALPART)
-                                                                 of (fetch (TEXTELTSELECTION 
-                                                                                  SKTEXTELT)
-                                                                       of INITSELECTION))
-                                           EDITEDELT)))
-                              (SK.UNDO.LAST SKW)
-                              (SKED.SET.SELECTION INITSELECTION SKW))
-                             (T 
-          
-          (* haven't edited any characters in the current element, just undo the last 
-          thing.)
-
-                                (SK.UNDO.LAST SKW]
+                   ((EQ CONTROLCHARTAIL 'UNDO)               (* ; 
+          "user types in an undo after some characters or while selection was in the middle of text.")
+                    (\SKED.INSERT.UNDO NEWELT SELECTION))
                    (T 
-          
-          (* user typed a character command to create a new text box.
-          Create it and put the remaining characters in it and set the cursor there.)
-          
-          (* set the selection so that adding the new text box will create an undo event 
-          for the character change that took place in this text box before the control-cr 
-          was typed.)
+                      (* ;; "user typed a character command to create a new text box.  Create it and put the remaining characters in it and set the cursor there.")
+
+                      (* ;; "set the selection so that adding the new text box will create an undo event for the character change that took place in this text box before the control-cr was typed.")
 
                       (SKED.SET.SELECTION (CREATE.TEXT.SELECTION NEWELT NEWLINE# NEWCHAR# NIL NIL
                                                  (WINDOWPROP SKW 'DSP))
@@ -1170,6 +1072,96 @@
                              SKW
                              (CDR CONTROLCHARTAIL])
 
+(\SKED.ARROWKEYS
+  [LAMBDA (ACTION SKW SELECTION)                             (* ; "Edited  2-Dec-2025 10:03 by rmk")
+
+    (* ;; "Move the caret left/right/up/down according to the arrow keys")
+
+    (CL:UNLESS SELECTION
+        (SETQ SELECTION (WINDOWPROP SKW 'SELECTION)))
+    (CL:WHEN (AND SELECTION (NOT (POSITIONP SELECTION)))
+        (LET* [(CHAR# (fetch (TEXTELTSELECTION SKCHAR#) of SELECTION))
+               (LINE# (fetch (TEXTELTSELECTION SKLINE#) of SELECTION))
+               (TEXTELT (fetch (TEXTELTSELECTION SKTEXTELT) of SELECTION))
+               (SKLEFT (fetch (TEXTELTSELECTION SKLEFT) of SELECTION))
+               (LINES (fetch (TEXT LISTOFCHARACTERS) of (fetch (SCREENELT INDIVIDUALGLOBALPART)
+                                                           of TEXTELT]
+              (SELECTQ ACTION
+                  (:ONECHAR.BACKWARD 
+                       (if (EQ CHAR# 0)
+                           then (add LINE# -1)
+                                [SETQ CHAR# (NCHARS (CAR (NTH LINES LINE#]
+                         else (add CHAR# -1)))
+                  (:ONECHAR.FORWARD 
+                       (if [EQ CHAR# (NCHARS (CAR (NTH LINES LINE#]
+                           then (add LINE# 1)
+                                (SETQ CHAR# 1)
+                         else (add CHAR# 1)))
+                  (:LINE.UP (add LINE# -1)
+                            (CL:UNLESS (ILESSP LINE# 1)
+                                (SETQ CHAR# (CLOSEST.CHAR SKLEFT LINE# TEXTELT SKW))))
+                  (:LINE.DOWN (add LINE# 1)
+                              (CL:UNLESS (IGREATERP LINE# (LENGTH LINES))
+                                  (SETQ CHAR# (CLOSEST.CHAR SKLEFT LINE# TEXTELT SKW))))
+                  (SHOULDNT))
+              (CL:WHEN (<= 1 LINE# (LENGTH LINES))
+                  (SKED.SELECTION.FEEDBACK SKW)
+                  (SKED.SET.SELECTION (create TEXTELTSELECTION
+                                         using SELECTION SKCHAR# _ CHAR# SKLINE# _ LINE# SKLEFT _
+                                               (CHAR.BEGIN CHAR# LINE# (fetch (TEXTELTSELECTION
+                                                                               SKTEXTELT)
+                                                                          of SELECTION)
+                                                      SKW)
+                                               SKBOTTOM _ (LINE.BEGIN LINE# TEXTELT))
+                         SKW))))])
+
+(\SKED.INSERT.ACTION
+  [LAMBDA (CHARCODES SKW)                                    (* ; "Edited  1-Dec-2025 22:28 by rmk")
+    (LET [(ACTION (SK.GETSYNTAX (CAR CHARCODES]
+         (SELECTQ ACTION
+             (:UNDO (\SKED.INSERT.UNDO SKW)
+                    T)
+             ((:ONECHAR.BACKWARD :ONECHAR.FORWARD :LINE.UP :LINE.DOWN) 
+                  (\SKED.ARROWKEYS ACTION SKW)
+                  T)
+             NIL])
+
+(\SKED.INSERT.UNDO
+  [LAMBDA (SKW NEWELT SELECTION)                             (* ; "Edited  1-Dec-2025 23:21 by rmk")
+                                                             (* ; "Edited  1-Dec-2025 12:56 by rmk")
+                                                             (* ; "Edited  1-Dec-2025 12:48 by rmk")
+    (CL:UNLESS SELECTION
+        (SETQ SELECTION (WINDOWPROP SKW 'SELECTION)))
+    (PROG (INITSELECTION EDITEDELT)
+          (COND
+             ((SETQ INITSELECTION (WINDOWPROP SKW 'CHANGEDTEXTELT NIL))
+                                                             (* ; 
+                                                        "in the middle of editing, undo these edits.")
+              [SETQ EDITEDELT (fetch (SCREENELT GLOBALPART) of (OR NEWELT (fetch (TEXTELTSELECTION
+                                                                                  SKTEXTELT)
+                                                                             of (OR SELECTION
+                                                                                    (ERROR 
+                                                                  "NO SELECTION WHEN THERE SHOULD BE"
+                                                                                           ]
+                                                             (* ; 
+                                               "add event to history list so the undo can be undone.")
+              (COND
+                 ((POSITIONP INITSELECTION)                  (* ; 
+                                        "add an ADD event because previously there was nothing here.")
+                  (SK.ADD.HISTEVENT 'ADD (LIST EDITEDELT)
+                         SKW)
+                  (SK.CHECK.END.INITIAL.EDIT SKW EDITEDELT))
+                 (T (SK.ENTER.EDIT.CHANGE SKW (fetch (SCREENELT GLOBALPART)
+                                                 of (fetch (TEXTELTSELECTION SKTEXTELT) of 
+                                                                                        INITSELECTION
+                                                           ))
+                           EDITEDELT)))
+              (SK.UNDO.LAST SKW)
+              (SKED.SET.SELECTION INITSELECTION SKW))
+             (T                                              (* ; 
+                    "haven't edited any characters in the current element, just undo the last thing.")
+                (SK.UNDO.LAST SKW])
+
 (FIRST.N.ELEMENTS
   [LAMBDA (LST N)                                            (* rrb "20-Jan-86 18:05")
           
@@ -1332,164 +1324,140 @@
                            (NCHARS (CAR (LAST STRLST])
 
 (\SKED.DELETE.WORD.FROM.STRING
-  [LAMBDA (STRING)                                           (* rrb "11-Jul-86 17:17")
-          
-          (* returns a string that has the last word of STRING deleted.)
+  [LAMBDA (STRING)                                           (* ; "Edited 30-Nov-2025 08:06 by rmk")
+                                                             (* rrb "11-Jul-86 17:17")
+
+    (* ;; "returns a string that has the last word of STRING deleted.")
 
     (PROG ((END (NCHARS STRING))
            CLASS)
       SKBLANKS
           (COND
-             ((EQ END 0)                                     (* ran out of characters.)
+             ((EQ END 0)                                     (* ; "ran out of characters.")
               (RETURN))
-             ((EQ (SETQ CLASS (SK.WORD.BREAK.CLASS (NTHCHARCODE STRING END)))
+             ((EQ (SETQ CLASS (TEDIT.WORDGET (NTHCHARCODE STRING END)))
                   22)
               (SETQ END (SUB1 END))
-              (GO SKBLANKS)))
-          
-          (* now skip characters that have the same class as the first one encountered.)
-
+              (GO SKBLANKS)))                                (* ; 
+                         "now skip characters that have the same class as the first one encountered.")
       SKSAME
           (SETQ END (SUB1 END))
           (COND
-             ((EQ END 0)                                     (* ran out of characters.)
+             ((EQ END 0)                                     (* ; "ran out of characters.")
               (RETURN))
-             ((EQ (SK.WORD.BREAK.CLASS (NTHCHARCODE STRING END))
+             ((EQ (TEDIT.WORDGET (NTHCHARCODE STRING END))
                   CLASS)
               (GO SKSAME))
              (T (RETURN (SUBSTRING STRING 1 END])
 
 (\SKED.INSERT.CHARS.TO.STR
-  [LAMBDA (CHARCODES INCLUDECR SKW)                          (* rrb "11-Jul-86 17:18")
+  [LAMBDA (CHARCODES INCLUDECR SKW SELECTION)                (* ; "Edited  1-Dec-2025 00:42 by rmk")
+                                                             (* ; "Edited 24-Nov-2025 08:40 by rmk")
+                                                             (* ; "Edited 12-Nov-2025 14:50 by rmk")
+                                                             (* ; "Edited 10-Nov-2025 16:35 by rmk")
+                                                             (* rrb "11-Jul-86 17:18")
     (DECLARE (SPECVARS NEWSTRS STRPIECE))
-          
-          (* takes a list of characters and makes it into strings on the free variable 
-          NEWSTRS. The variable STRPIECE is set to the last line of characters.
-          NEWSTRS is a list of the strings that precede this one which is used in the 
-          case of backspace onto the previous line.)
 
-    (PROG (LINELST THISLINE REMAININGCHARS CLASS)
-          [for CHAR in CHARCODES
+    (* ;; "takes a list of characters and makes it into strings on the free variable NEWSTRS.  The variable STRPIECE is set to the last line of characters.  NEWSTRS is a list of the strings that precede this one which is used in the case of backspace onto the previous line.")
+
+    (* ;; "SELECTION is for the actions that move the type-in")
+
+    (PROG (LINELST THISLINE REMAININGCHARS)
+          (for CHAR in CHARCODES
              do (SELECTQ (SK.GETSYNTAX CHAR)
-                    (CHARDELETE                              (* delete the previous character.)
-                                [COND
-                                   (THISLINE                 (* easy case of deleting type in.)
-                                          (SETQ THISLINE (CDR THISLINE)))
-                                   (LINELST                  (* deleting a typed in CR.)
-                                          (SETQ THISLINE (CAR LINELST))
-                                          (SETQ LINELST (CDR LINELST)))
-                                   [STRPIECE                 (* remove the previous character from 
-                                                             the current string.)
-                                          (COND
-                                             ((EQ (NCHARS STRPIECE)
-                                                  1)
-                                              (SETQ STRPIECE NIL))
-                                             (T (SETQ STRPIECE (SUBSTRING STRPIECE 1 -2]
-                                   [NEWSTRS (SETQ STRPIECE (CAR (LAST NEWSTRS)))
-                                          (SETQ NEWSTRS (BUTLAST NEWSTRS))
-                                          (COND
-                                             ((EQ (NTHCHARCODE STRPIECE -1)
-                                                  (CHARCODE EOL))
-                                                             (* remove previous eol)
-                                              (COND
-                                                 ((EQ (NCHARS STRPIECE)
-                                                      1)
-                                                  (SETQ STRPIECE NIL))
-                                                 (T (SETQ STRPIECE (SUBSTRING STRPIECE 1 -2]
-                                   (T                        (* no characters to delete)
-                                      (FLASHW (TTYDISPLAYSTREAM])
-                    (WORDDELETE                              (* delete the previous word)
-          
-          (* use the TEdit word bounding readtable.
-          Code are%: character = 21 -
-          space = 22 -
-          punctuation = 20)
+                    (NIL                                     (* ; "Ordinary characters:  just insert")
+                         (COND
+                            [(MEMB CHAR (CHARCODE (EOL LINEFEED)))
+                                                             (* ; "eol")
+                             (COND
+                                ((KEYDOWNP 'CTRL)            (* ; 
+                        "user entered control return, save remaining characters and return indicator")
+                                 (SETQ REMAININGCHARS (MEMB CHAR CHARCODES))
+                                 (RETURN))
+                                (T (push LINELST (COND
+                                                    (INCLUDECR 
+                                                             (* ; 
+                                                           "text boxes need to have the CRs left in.")
+                                                           (CONS (CHARCODE EOL)
+                                                                 THISLINE))
+                                                    (T THISLINE)))
+                                   (SETQ THISLINE NIL]
+                            (T 
+                               (* ;; "add this character onto the front of this line;  reversal will happen before conversion to string and return.")
 
-                                [COND
-                                   [[OR THISLINE (PROG1 (SETQ THISLINE (CAR LINELST))
-                                                        (SETQ LINELST (CDR LINELST]
-                                                             (* easy case of deleting type in.)
-          
-          (* if this line was empty, skip the cr that created it as part of the white 
-          space before the word.)
-                                                             (* skip any whitespace)
-                                    (COND
-                                       ([NULL (SETQ THISLINE (for TAIL on THISLINE
-                                                                while (EQ (SK.WORD.BREAK.CLASS
-                                                                           (CAR TAIL))
-                                                                          22)
-                                                                finally (RETURN TAIL]
-          
-          (* the whitespace backed up to the beginning of a line.
-          quit there.)
+                               (push THISLINE CHAR))))
+                    (:CHARDELETE.BACKWARD                    (* ; "delete the previous character.")
+                         [COND
+                            (THISLINE                        (* ; "easy case of deleting type in.")
+                                   (SETQ THISLINE (CDR THISLINE)))
+                            (LINELST                         (* ; "deleting a typed in CR.")
+                                   (SETQ THISLINE (pop LINELST)))
+                            (STRPIECE                        (* ; 
+                                             "remove the previous character from the current string.")
+                                   (SETQ STRPIECE (SUBSTRING STRPIECE 1 -2)))
+                            [NEWSTRS (SETQ STRPIECE (CAR (LAST NEWSTRS)))
+                                   (SETQ NEWSTRS (BUTLAST NEWSTRS))
+                                   (CL:WHEN (EQ (NTHCHARCODE STRPIECE -1)
+                                                (CHARCODE EOL))
+                                                             (* ; "remove previous eol")
+                                       (SETQ STRPIECE (SUBSTRING STRPIECE 1 -2)))]
+                            (T                               (* ; "no characters to delete")
+                               (FLASHW (TTYDISPLAYSTREAM])
+                    (:WORDDELETE.BACKWARD                    (* ; "delete the previous word. Tedit binds DEL to CHARDELETE.FORWARD, sketch used DEL to delete the word")
+                         
+                         (* ;; "use the TEdit word bounding readtable.  Code are: character = 21 --- space = 22 --- punctuation = 20")
 
-                                        NIL)
-                                       (T (SETQ CLASS (SK.WORD.BREAK.CLASS (CAR THISLINE)))
-          
-          (* skip all things of the same class as the first character before the 
-          whitespace)
+                         [COND
+                            [(OR THISLINE (SETQ THISLINE (pop LINELST)))
+                                                             (* ; "easy case of deleting type in.")
+                                                             (* ; 
+    "if this line was empty, skip the cr that created it as part of the white space before the word.")
+                                                             (* ; "skip any whitespace")
+                             (CL:WHEN (SETQ THISLINE (find TAIL on THISLINE
+                                                        suchthat (NEQ (TEDIT.WORDGET (CAR TAIL))
+                                                                      22)))
+                                                             (* ; 
+                       "the whitespace didn't backed up to the beginning of a line, something to do.")
+                                                             (* ; 
+                     "skip all things of the same class as the first character before the whitespace")
+                                 (SETQ THISLINE (find TAIL (CLASS _ (TEDIT.WORDGET (CAR THISLINE)))
+                                                   on THISLINE
+                                                   suchthat (NEQ (TEDIT.WORDGET (CAR TAIL))
+                                                                 CLASS))))]
+                            (STRPIECE                        (* ; 
+                                             "remove the previous character from the current string.")
+                                   (SETQ STRPIECE (\SKED.DELETE.WORD.FROM.STRING STRPIECE)))
+                            (NEWSTRS [SETQ STRPIECE (\SKED.DELETE.WORD.FROM.STRING
+                                                     (CAR (LAST NEWSTRS]
+                                   (SETQ NEWSTRS (BUTLAST NEWSTRS)))
+                            (T                               (* ; "no characters to delete")
+                               (FLASHW (TTYDISPLAYSTREAM])
+                    ((:WORDDELETE.FORWARD :CHARDELETE.FORWARD) 
+                                                             (* ; "Not implemented, no-ops")
+                         NIL)
+                    (:DELETE                                 (* ; 
+                                          "delete selection.  Here that means don't insert anything."))
+                    (:UNDO 
+                           (* ;; "Undo in the middle of the charcodes. By side effect this flushes any characters typed after the undo but it's not clear where they should go anyway.")
 
-                                          (SETQ THISLINE (for TAIL on THISLINE
-                                                            until (NEQ (SK.WORD.BREAK.CLASS
-                                                                        (CAR TAIL))
-                                                                       CLASS)
-                                                            finally (RETURN TAIL]
-                                   (STRPIECE                 (* remove the previous character from 
-                                                             the current string.)
-                                          (SETQ STRPIECE (\SKED.DELETE.WORD.FROM.STRING STRPIECE)))
-                                   (NEWSTRS [SETQ STRPIECE (\SKED.DELETE.WORD.FROM.STRING
-                                                            (CAR (LAST NEWSTRS]
-                                          (SETQ NEWSTRS (BUTLAST NEWSTRS)))
-                                   (T                        (* no characters to delete)
-                                      (FLASHW (TTYDISPLAYSTREAM])
-                    (DELETE                                  (* delete selection.
-                                                             Here that means don't insert anything.))
-                    (UNDO 
-          
-          (* by side effect this flushes any characters typed after the undo but it's not 
-          clear where they should go anyway.)
-
-                          (RETURN 'UNDO))
-                    ((REDO FN CMD) 
+                           (RETURN 'UNDO))
+                    ((:REDO :CMD)                            (* ; "There are many more Tedit actions that we don't deal with here, these were called out when Sketch was using \TEDIT.GETSYNTAX or GETSYNTAX.  Not clear we need this message, just fall through and treat REDO/CMD like other actions, as ordinary characters")
                          (STATUSPRINT SKW "
 " "Not implemented in this editor. Sorry."))
-                    (COND
-                       [(OR (EQ CHAR (CHARCODE EOL))
-                            (EQ CHAR (CHARCODE LINEFEED)))   (* eol)
-                        (COND
-                           ((KEYDOWNP 'CTRL)
-          
-          (* user entered control return, save remaining characters and return indicator)
-
-                            (SETQ REMAININGCHARS (MEMB CHAR CHARCODES))
-                            (RETURN))
-                           (T (SETQ LINELST (CONS (COND
-                                                     (INCLUDECR 
-                                                             (* text boxes need to have the CRs 
-                                                             left in.)
-                                                            (CONS (CHARCODE EOL)
-                                                                  THISLINE))
-                                                     (T THISLINE))
-                                                  LINELST))
-                              (SETQ THISLINE NIL]
-                       (T 
-          
-          (* add this character onto the front of this line;
-          reversal will happen before conversion to string and return.)
-
-                          (SETQ THISLINE (CONS CHAR THISLINE]
+                    (PROGN                                   (* ; "All other actions")
+                           NIL)))
           (COND
-             [LINELST                                        (* had a cr in the character set.)
+             [LINELST                                        (* ; "had a cr in the character set.")
                     [SETQ NEWSTRS (NCONC NEWSTRS [CONS (JOINCHARS STRPIECE (REVERSE
                                                                             (CAR (LAST LINELST]
                                          (for CHLST in (REVERSE (BUTLAST LINELST))
                                             collect (STRINGFROMCHARACTERS (REVERSE CHLST]
                     (SETQ STRPIECE (STRINGFROMCHARACTERS (REVERSE THISLINE]
-             [THISLINE                                       (* no new lines, add these characters 
-                                                             onto STRPIECE)
+             [THISLINE                                       (* ; 
+                                                   "no new lines, add these characters onto STRPIECE")
                     (SETQ STRPIECE (JOINCHARS STRPIECE (REVERSE THISLINE]
-             (T                                              (* no new lines, or characters, leave 
-                                                             STRPIECE alone.)
+             (T                                              (* ; 
+                                                 "no new lines, or characters, leave STRPIECE alone.")
                 NIL))
           (RETURN REMAININGCHARS])
 
@@ -1557,7 +1525,7 @@
 
 
 
-(* line adding functions)
+(* ; "line adding functions")
 
 (DEFINEQ
 
@@ -1916,7 +1884,7 @@
     (WINDOWPROP SKW 'INPUTLINE NIL])
 )
 
-                                                             (* Was MODERNIZE loaded before?)
+                                                             (* ; "Was MODERNIZE loaded before?")
 
 (CL:WHEN (GETD 'MODERNWINDOW.SETUP)
     (MODERNWINDOW.SETUP 'WB.BUTTON.HANDLER))
@@ -1953,26 +1921,27 @@
            YCOORD _ (LASTMOUSEY WIN])
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (2425 39533 (BUTLAST 2435 . 2783) (CHAR.BEGIN 2785 . 4710) (CLOSEST.CHAR 4712 . 8935) (
-CLOSEST.LINE 8937 . 9499) (FLASHW 9501 . 9658) (HILITE.LINE 9660 . 10479) (HILITE.TEXT 10481 . 12129) 
-(IN.TEXT.EXTEND 12131 . 15404) (INIMAGEOBJ 15406 . 15911) (INTEXT 15913 . 16410) (NEW.TEXT.EXTEND 
-16412 . 18631) (NEW.TEXT.SELECTIONP 18633 . 18813) (NTHCHARWIDTH 18815 . 19072) (NTHLOCALREGION 19074
- . 19312) (ONCHAR 19314 . 19709) (SHOW.EXTENDED.SELECTION.FEEDBACK 19711 . 20646) (SHOW.FEEDBACK 20648
- . 21138) (SHOW.FEEDBACK.BOX 21140 . 22194) (SELECTION.POSITION 22196 . 22988) (SKED.CLEAR.SELECTION 
-22990 . 23513) (SKETCH.CLEANUP 23515 . 25429) (SK.ENTER.EDIT.CHANGE 25431 . 26976) (
-SKED.REMOVE.OTHER.SELECTIONS 26978 . 27405) (SKED.EXTEND.SELECTION 27407 . 28872) (SKED.MOVE.SELECTION
- 28874 . 34035) (CREATE.TEXT.SELECTION 34037 . 34553) (SKED.SELECTION.FEEDBACK 34555 . 36211) (
-SKED.SET.EXTENDSELECTION 36213 . 36530) (SKED.SET.SELECTION 36532 . 36932) (LINE.BEGIN 36934 . 37488) 
-(SELECTION.GREATERP 37490 . 38285) (SK.WORD.BREAK.CLASS 38287 . 39127) (SK.GETSYNTAX 39129 . 39531)) (
-40375 86109 (WB.EDITOR 40385 . 41710) (SK.TTYENTRYFN 41712 . 41990) (SK.TTYEXITFN 41992 . 42261) (
-SKED.INSERT 42263 . 42691) (\SKED.INSERT 42693 . 63815) (FIRST.N.ELEMENTS 63817 . 64084) (
-SKED.CREATE.NEW.TEXTBOX 64086 . 70615) (SKED.CHARACTERPOSITION 70617 . 71404) (SKED.LINE.AND.CHAR# 
-71406 . 73037) (\SKED.DELETE.WORD.FROM.STRING 73039 . 74078) (\SKED.INSERT.CHARS.TO.STR 74080 . 82491)
- (JOINCHARS 82493 . 82880) (STRINGFROMCHARACTERS 82882 . 83207) (GETALLCHARS 83209 . 83550) (
-CLEANUP.EDIT 83552 . 84004) (SKED.NEW.TEXTELT 84006 . 86107)) (86144 107152 (
-MAP.SCREEN.POSITION.ONTO.GRID 86154 . 87603) (NEAREST.ON.GRID 87605 . 88149) (SK.MIDDLE.TITLEFN 88151
- . 90094) (WB.BUTTON.HANDLER 90096 . 97918) (WB.ADD.NEW.POINT 97920 . 101249) (WB.DRAWLINE 101251 . 
-105485) (WB.RUBBERBAND.POSITION 105487 . 106404) (SK.RUBBERBAND.FEEDBACKFN 106406 . 106910) (
-RESET.LINE.BEING.INPUT 106912 . 107150)) (107334 108575 (NEAREST.EXISTING.POSITION 107344 . 107546) (
-WB.NEARPT 107548 . 108433) (LASTMOUSEPOSITION 108435 . 108573)))))
+  (FILEMAP (NIL (2849 39635 (BUTLAST 2859 . 3207) (CHAR.BEGIN 3209 . 5332) (CLOSEST.CHAR 5334 . 9557) (
+CLOSEST.LINE 9559 . 10121) (FLASHW 10123 . 10280) (HILITE.LINE 10282 . 11101) (HILITE.TEXT 11103 . 
+12751) (IN.TEXT.EXTEND 12753 . 16026) (INIMAGEOBJ 16028 . 16533) (INTEXT 16535 . 17032) (
+NEW.TEXT.EXTEND 17034 . 19253) (NEW.TEXT.SELECTIONP 19255 . 19435) (NTHCHARWIDTH 19437 . 19694) (
+NTHLOCALREGION 19696 . 19934) (ONCHAR 19936 . 20331) (SHOW.EXTENDED.SELECTION.FEEDBACK 20333 . 21268) 
+(SHOW.FEEDBACK 21270 . 21760) (SHOW.FEEDBACK.BOX 21762 . 22816) (SELECTION.POSITION 22818 . 23610) (
+SKED.CLEAR.SELECTION 23612 . 24135) (SKETCH.CLEANUP 24137 . 26051) (SK.ENTER.EDIT.CHANGE 26053 . 27598
+) (SKED.REMOVE.OTHER.SELECTIONS 27600 . 28027) (SKED.EXTEND.SELECTION 28029 . 29494) (
+SKED.MOVE.SELECTION 29496 . 34566) (CREATE.TEXT.SELECTION 34568 . 35084) (SKED.SELECTION.FEEDBACK 
+35086 . 36742) (SKED.SET.EXTENDSELECTION 36744 . 37061) (SKED.SET.SELECTION 37063 . 37463) (LINE.BEGIN
+ 37465 . 38019) (SELECTION.GREATERP 38021 . 38816) (SK.GETSYNTAX 38818 . 39633)) (40480 91009 (
+WB.EDITOR 40490 . 41871) (SK.TTYENTRYFN 41873 . 42413) (SK.TTYEXITFN 42415 . 42941) (SKED.INSERT 42943
+ . 43371) (\SKED.INSERT 43373 . 62845) (\SKED.ARROWKEYS 62847 . 65442) (\SKED.INSERT.ACTION 65444 . 
+65888) (\SKED.INSERT.UNDO 65890 . 68431) (FIRST.N.ELEMENTS 68433 . 68700) (SKED.CREATE.NEW.TEXTBOX 
+68702 . 75231) (SKED.CHARACTERPOSITION 75233 . 76020) (SKED.LINE.AND.CHAR# 76022 . 77653) (
+\SKED.DELETE.WORD.FROM.STRING 77655 . 78819) (\SKED.INSERT.CHARS.TO.STR 78821 . 87391) (JOINCHARS 
+87393 . 87780) (STRINGFROMCHARACTERS 87782 . 88107) (GETALLCHARS 88109 . 88450) (CLEANUP.EDIT 88452 . 
+88904) (SKED.NEW.TEXTELT 88906 . 91007)) (91048 112056 (MAP.SCREEN.POSITION.ONTO.GRID 91058 . 92507) (
+NEAREST.ON.GRID 92509 . 93053) (SK.MIDDLE.TITLEFN 93055 . 94998) (WB.BUTTON.HANDLER 95000 . 102822) (
+WB.ADD.NEW.POINT 102824 . 106153) (WB.DRAWLINE 106155 . 110389) (WB.RUBBERBAND.POSITION 110391 . 
+111308) (SK.RUBBERBAND.FEEDBACKFN 111310 . 111814) (RESET.LINE.BEING.INPUT 111816 . 112054)) (112242 
+113483 (NEAREST.EXISTING.POSITION 112252 . 112454) (WB.NEARPT 112456 . 113341) (LASTMOUSEPOSITION 
+113343 . 113481)))))
 STOP
diff --git a/library/sketch/SKETCH-EDIT.LCOM b/library/sketch/SKETCH-EDIT.LCOM
index 91cd662b..9f6a8cd7 100644
Binary files a/library/sketch/SKETCH-EDIT.LCOM and b/library/sketch/SKETCH-EDIT.LCOM differ
diff --git a/library/sketch/SKETCH-ELEMENTS b/library/sketch/SKETCH-ELEMENTS
index ca3acf54..5e56caa3 100644
--- a/library/sketch/SKETCH-ELEMENTS
+++ b/library/sketch/SKETCH-ELEMENTS
@@ -1,14 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 5-Dec-2023 00:16:52" {WMEDLEY}<library>sketch>SKETCH-ELEMENTS.;1 554138 
+(FILECREATED "30-Nov-2025 10:57:24" {WMEDLEY}<library>SKETCH>SKETCH-ELEMENTS.;25 545903 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (RECORDS LOCALCIRCLE CIRCLE LOCALELLIPSE ELLIPSE KNOTELT LOCALCURVE OPENCURVE 
-                         CLOSEDCURVE LOCALCLOSEDCURVE LOCALCLOSEDWIRE LOCALWIRE WIRE CLOSEDWIRE TEXT
-                         LOCALTEXT LOCALTEXTBOX TEXTBOX BOX LOCALBOX ARC LOCALARC)
+      :CHANGES-TO (FNS SK.CHANGE.TEXT SK.CHANGE.FONT)
 
-      :PREVIOUS-DATE " 4-Aug-2022 09:57:43" {WMEDLEY}<library>sketch>SKETCHELEMENTS.;2)
+      :PREVIOUS-DATE " 8-Nov-2025 14:02:38" {WMEDLEY}<library>SKETCH>SKETCH-ELEMENTS.;24)
 
 
 (PRETTYCOMPRINT SKETCH-ELEMENTSCOMS)
@@ -122,9 +120,8 @@
                    READ.TEXT TEXT.POSITION.AND.CREATE CREATE.TEXT.ELEMENT SK.UPDATE.TEXT.AFTER.CHANGE
                    SK.TEXT.FROM.TEXTBOX TEXT.SET.GLOBAL.REGIONS TEXT.REGIONFN TEXT.GLOBALREGIONFN 
                    TEXT.TRANSLATEFN TEXT.TRANSFORMFN TEXT.TRANSLATEPTSFN TEXT.UPDATEFN SK.CHANGE.TEXT
-                   TEXT.SET.SCALES BREAK.AT.CARRIAGE.RETURNS)
-              (FNS ADD.KNOWN.SKETCH.FONT SK.PICK.FONT SK.CHOOSE.TEXT.FONT SK.NEXTSIZEFONT 
-                   SK.DECREASING.FONT.LIST SK.GUESS.FONTSAVAILABLE)
+                   SK.CHANGE.FONT TEXT.SET.SCALES BREAK.AT.CARRIAGE.RETURNS)
+              (FNS SK.PICK.FONT SK.CHOOSE.TEXT.FONT SK.NEXTSIZEFONT SK.DECREASING.FONT.LIST)
               (INITVARS (\KNOWN.SKETCH.FONTSIZES))
               (GLOBALVARS \KNOWN.SKETCH.FONTSIZES)
               (DECLARE%: DONTCOPY (RECORDS TEXT LOCALTEXT))
@@ -136,7 +133,6 @@
               (VARS INDICATE.TEXT.SHADE)
               [INITVARS (SK.DEFAULT.FONT)
                      (SK.DEFAULT.TEXT.ALIGNMENT '(CENTER BASELINE]
-              (INITVARS \FONTSONFILE)
               (ADDVARS (SK.HORIZONTAL.STYLES LEFT RIGHT CENTER)
                      (SK.VERTICAL.STYLES TOP CENTER BASELINE BOTTOM))
               (VARS (SKETCH.TERMTABLE (CREATE.SKETCH.TERMTABLE)))
@@ -4575,10 +4571,13 @@ Click outside the window to stop.")
           (RETURN (AND VAL (LIST COMMAND VAL])
 
 (\SK.READ.FONT.SIZE1
-  [LAMBDA (SELECTEDELTS SKETCHW NEWFAMILY)                   (* rrb "14-Jul-86 13:43")
-          
-          (* reads a font size from the user. If NEWFONT is NIL, use the one of the first 
-          selected element.)
+  [LAMBDA (SELECTEDELTS SKETCHW NEWFAMILY)                   (* ; "Edited  6-Nov-2025 22:35 by rmk")
+                                                             (* rrb "14-Jul-86 13:43")
+                                                             (* ; 
+    "reads a font size from the user.  If NEWFONT is NIL, use the one of the first selected element.")
+
+         (* reads a font size from the user. If NEWFONT is NIL, use the one of the first 
+         selected element.)
 
     (PROG (FIRSTTEXTELT NEWSIZE NOWFONT NEWFONT)
           (OR (SETQ FIRSTTEXTELT (for SCRNELT inside SELECTEDELTS
@@ -4606,7 +4605,7 @@ Click outside the window to stop.")
                       (STATUSPRINT SKETCHW NEWFAMILY NEWSIZE " not found.")
                       NIL)
                      (T (CLOSE.PROMPT.WINDOW SKETCHW)
-                        (SK.FONTNAMELIST NEWFONT])
+                        (FONTPROP NEWFONT 'SPEC])
 
 (SK.TEXT.ELT.WITH.SAME.FIELDS
   [LAMBDA (NEWONE ORGONE)                                    (* rrb "18-Jul-85 14:16")
@@ -4635,26 +4634,33 @@ Click outside the window to stop.")
         NIL])
 
 (SK.READFONTFAMILY
-  [LAMBDA (SKW TITLE)                                        (* rrb "21-Nov-85 11:28")
-                                                             (* reads a font family name.)
-    (PROG ([KNOWNFAMILIES (UNION (for X in \FONTSONFILE collect (CAR X))
-                                 (for X in \FONTSINCORE collect (CAR X]
-           FAMILY)                                           (* offers a menu of possible choices.)
-          (COND
-             ((AND KNOWNFAMILIES (NEQ (SETQ FAMILY (\CURSOR.IN.MIDDLE.MENU
-                                                    (create MENU
-                                                           ITEMS _
-                                                           (APPEND '(("other" 'OTHER 
+  [LAMBDA (SKW TITLE)                                        (* ; "Edited  4-Nov-2025 15:08 by rmk")
+                                                             (* rrb "21-Nov-85 11:28")
+
+    (* ;; "Offers a menu of existing DISPLAY font families, with Other has a way for the user to type one in.  Other makes sense only if there are file fonts that are not yet known to Sketch.")
+
+    (* ;; "RMK: Sketch used to keep its own family-by-device cache, separate from \FONTSINCORE.  But the way it was set up, those fonts were created in core when they were identified, so FONTSAVAILABLE would find them them on \FONTSINCORE.  Here we scan all devices, not just display, to catch whatever might have shown up for a nondisplay device.  So this simulates that behavior.")
+
+    (* ;; "But for a user interaction like this, isn't it only DISPLAY families that matter, the descending-font lists for other devices are not relevant.  So maybe we really want only DISPLAY here.")
+
+    (LET (KNOWNFAMILIES FAMILY)
+         (for FS in (FONTSAVAILABLE '* '* NIL NIL '*) do (pushnew KNOWNFAMILIES (fetch (FONTSPEC
+                                                                                        FSFAMILY)
+                                                                                   of FS)))
+         (if (AND KNOWNFAMILIES (NEQ (SETQ FAMILY (\CURSOR.IN.MIDDLE.MENU
+                                                   (create MENU
+                                                          ITEMS _ [APPEND
+                                                                   (SORT KNOWNFAMILIES)
+                                                                   '(("other" 'OTHER 
                                                               "prompts for a family not on the menu."
-                                                                            )) KNOWNFAMILIES)
-                                                           TITLE _ (OR TITLE "Choose font")
-                                                           CENTERFLG _ T)))
-                                      'OTHER))
-              (RETURN FAMILY))
-             (T                                              (* grab the tty.)
-                (TTY.PROCESS (THIS.PROCESS))
-                (RETURN (CAR (ERSETQ (MKATOM (U-CASE (PROMPTFORWORD "New family: " NIL NIL
-                                                            (GETPROMPTWINDOW SKW])
+                                                                            ]
+                                                          TITLE _ (OR TITLE "Choose font")
+                                                          CENTERFLG _ T)))
+                                     'OTHER))
+             then FAMILY
+           else (CAR (ERSETQ (MKATOM (U-CASE (TTYINPROMPTFORWORD "New family: " NIL NIL (
+                                                                                      GETPROMPTWINDOW
+                                                                                         SKW])
 
 (CLOSE.PROMPT.WINDOW
   [LAMBDA (WINDOW)                                           (* rrb "28-Oct-84 14:14")
@@ -5189,44 +5195,36 @@ Click outside the window to stop.")
               (RETURN NEWSCREENELT])
 
 (SK.CHANGE.TEXT
-  [LAMBDA (ELTWITHTEXT HOW SKW)                              (* ; "Edited  7-Apr-87 13:41 by rrb")
+  [LAMBDA (ELTWITHTEXT HOW SKW)                              (* ; "Edited 30-Nov-2025 10:55 by rmk")
+                                                             (* ; "Edited  8-Nov-2025 14:02 by rmk")
+                                                             (* ; "Edited  7-Nov-2025 09:05 by rmk")
+                                                             (* ; "Edited  7-Apr-87 13:41 by rrb")
     (PROG ((COMMAND (CADR HOW))
            (PROPERTY 'FONT)
-           NEWVALUE GINDTEXTELT NEWGTEXT OLDVALUE OLDFACE GTYPE)
-          (OR HOW (RETURN))                                  (* take down the caret before any 
-                                                             change.)
+           NEWVALUE GINDTEXTELT NEWGTEXT OLDFONT GTYPE)
+          (CL:UNLESS HOW (RETURN))                           (* ; 
+                                                             "take down the caret before any change.")
           (SKED.CLEAR.SELECTION SKW)
-          (COND
-             ((MEMB (SETQ GTYPE (fetch (GLOBALPART GTYPE) of ELTWITHTEXT))
-                    '(TEXTBOX TEXT))
+          (CL:WHEN (MEMB (SETQ GTYPE (fetch (GLOBALPART GTYPE) of ELTWITHTEXT))
+                         '(TEXTBOX TEXT))
               (SETQ GINDTEXTELT (fetch (GLOBALPART INDIVIDUALGLOBALPART) of ELTWITHTEXT))
-          
-          (* set the old value to the old font. In the case where the thing that changes 
-          is the justification, this will get re-set)
-
-              (SETQ OLDVALUE (fetch (TEXT FONT) of GINDTEXTELT))
+              (SETQ OLDFONT (fetch (TEXT FONT) of GINDTEXTELT))
               (SETQ NEWGTEXT
                (SELECTQ (CAR HOW)
                    (TEXT (SELECTQ COMMAND
-                             ((SMALLER LARGER)               (* change the font)
+                             ((SMALLER LARGER)               (* ; "change the font")
                                   [COND
-                                     [[SETQ NEWVALUE (SK.NEXTSIZEFONT COMMAND
-                                                            (LIST (FONTPROP OLDVALUE 'FAMILY)
-                                                                  (FONTPROP OLDVALUE 'SIZE]
-                                                             (* if there is an appropriate size 
-                                                             font, use it.)
-                                      [SETQ NEWVALUE (LIST (FONTPROP NEWVALUE 'FAMILY)
-                                                           (FONTPROP NEWVALUE 'SIZE)
-                                                           (FONTPROP OLDVALUE 'FACE]
-                                      (COND
-                                         ((EQ GTYPE 'TEXT)
-                                          (create TEXT using GINDTEXTELT FONT _ NEWVALUE))
-                                         (T (create TEXTBOX using GINDTEXTELT FONT _ NEWVALUE]
-                                     (T                      (* otherwise just scale the area some.)
-                                        (SETQ NEWVALUE (FTIMES (SETQ OLDVALUE (fetch (TEXT 
+                                     ((SETQ NEWVALUE (SK.NEXTSIZEFONT COMMAND OLDFONT))
+                                                             (* ; 
+                                                      "if there is an appropriate size font, use it.")
+                                      (OR (SK.CHANGE.FONT SKW ELTWITHTEXT NEWVALUE NIL)
+                                          (RETURN)))
+                                     (T                      (* ; 
+                                                             "otherwise just scale the area some.")
+                                        (SETQ NEWVALUE (FTIMES (SETQ OLDFONT (fetch (TEXT 
                                                                                          INITIALSCALE
-                                                                                           )
-                                                                                 of GINDTEXTELT))
+                                                                                          )
+                                                                                of GINDTEXTELT))
                                                               (SELECTQ COMMAND
                                                                   (LARGER 1.4)
                                                                   0.7142858)))
@@ -5236,18 +5234,18 @@ Click outside the window to stop.")
                                             (create TEXT using GINDTEXTELT INITIALSCALE _ NEWVALUE))
                                            (T (create TEXTBOX using GINDTEXTELT INITIALSCALE _ 
                                                                     NEWVALUE])
-                             ((CENTER LEFT RIGHT)            (* change the horizontal justification)
-                                  [SETQ NEWVALUE (LIST COMMAND (CADR (SETQ OLDVALUE
-                                                                      (fetch (TEXT TEXTSTYLE)
-                                                                         of GINDTEXTELT]
+                             ((CENTER LEFT RIGHT)            (* ; 
+                                                             "change the horizontal justification")
+                                  (SETQ OLDFONT (fetch (TEXT TEXTSTYLE) of GINDTEXTELT))
+                                  (SETQ NEWVALUE (LIST COMMAND (CADR OLDFONT)))
                                   (SETQ PROPERTY 'JUSTIFICATION)
                                   (COND
                                      ((EQ GTYPE 'TEXT)
                                       (create TEXT using GINDTEXTELT TEXTSTYLE _ NEWVALUE))
                                      (T (create TEXTBOX using GINDTEXTELT TEXTSTYLE _ NEWVALUE))))
-                             ((TOP BOTTOM MIDDLE BASELINE)   (* change the vertical justification)
-                                  [SETQ NEWVALUE (LIST (CAR (SETQ OLDVALUE (fetch (TEXT TEXTSTYLE)
-                                                                              of GINDTEXTELT)))
+                             ((TOP BOTTOM MIDDLE BASELINE)   (* ; "change the vertical justification")
+                                  (SETQ OLDFONT (fetch (TEXT TEXTSTYLE) of GINDTEXTELT))
+                                  [SETQ NEWVALUE (LIST (CAR OLDFONT)
                                                        (COND
                                                           ((EQ COMMAND 'MIDDLE)
                                                            'CENTER)
@@ -5257,28 +5255,27 @@ Click outside the window to stop.")
                                      ((EQ GTYPE 'TEXT)
                                       (create TEXT using GINDTEXTELT TEXTSTYLE _ NEWVALUE))
                                      (T (create TEXTBOX using GINDTEXTELT TEXTSTYLE _ NEWVALUE))))
-                             ((BOLD UNBOLD ITALIC UNITALIC)  (* change the face)
-                                  (SETQ OLDFACE (FONTPROP OLDVALUE 'FACE))
-                                  [SETQ NEWVALUE (LIST (FONTPROP OLDVALUE 'FAMILY)
-                                                       (FONTPROP OLDVALUE 'SIZE)
-                                                       (LIST (SELECTQ COMMAND
-                                                                 (BOLD 'BOLD)
-                                                                 (UNBOLD 'MEDIUM)
-                                                                 (CAR OLDFACE))
-                                                             (SELECTQ COMMAND
-                                                                 (ITALIC 'ITALIC)
-                                                                 (UNITALIC 'REGULAR)
-                                                                 (CADR OLDFACE))
-                                                             (CADDR OLDFACE]
-                                  (COND
-                                     ((EQ GTYPE 'TEXT)
-                                      (create TEXT using GINDTEXTELT FONT _ NEWVALUE))
-                                     (T (create TEXTBOX using GINDTEXTELT FONT _ NEWVALUE))))
-                             (BOX                            (* if it is a text element, BOX it)
+                             ((BOLD UNBOLD ITALIC UNITALIC)  (* ; "change the face")
+                                  (OR [SK.CHANGE.FONT SKW ELTWITHTEXT NIL NIL
+                                             (MAKEFONTFACE (SELECTQ COMMAND
+                                                               (BOLD 'BOLD)
+                                                               (UNBOLD 'MEDIUM)
+                                                               NIL)
+                                                    (SELECTQ COMMAND
+                                                        (ITALIC 'ITALIC)
+                                                        (UNITALIC 'REGULAR)
+                                                        NIL)
+                                                    NIL
+                                                    (FONTPROP (fetch (TEXT FONT) of GINDTEXTELT)
+                                                           'FACE]
+                                      (RETURN)))
+                             (BOX                            (* ; 
+                                                             "RMK 2025:  RETURN MEANS NO HISTORY?")
+                                                             (* ; "if it is a text element, BOX it")
                                   [COND
                                      ((EQ GTYPE 'TEXT)
                                       (RETURN (SK.TEXTBOX.FROM.TEXT ELTWITHTEXT SKW])
-                             (UNBOX                          (* if it is a text box, unbox it.)
+                             (UNBOX                          (* ; "if it is a text box, unbox it.")
                                     [COND
                                        ((EQ GTYPE 'TEXTBOX)
                                         (RETURN (SK.TEXT.FROM.TEXTBOX ELTWITHTEXT SKW])
@@ -5286,72 +5283,32 @@ Click outside the window to stop.")
                                               ((EQ GTYPE 'TEXT)
                                                (RETURN (SK.LOOKEDSTRING.FROM.TEXT ELTWITHTEXT SKW])
                              (SHOULDNT)))
-                   (SETSIZE (SETQ NEWVALUE COMMAND)
-                            (COND
-                               [(EQ (FONTPROP NEWVALUE 'FAMILY)
-                                    (FONTPROP OLDVALUE 'FAMILY))
-          
-          (* if the families are the same, change them, otherwise don't as it isn't known 
-          whether or not this family has the right size.)
+                   (SETSIZE 
+                            (* ;; "if the families are the same, change them, otherwise don't as it isn't known whether or not this family has the right size.")
 
-                                (COND
-                                   [(EQ GTYPE 'TEXT)
-                                    (create TEXT using GINDTEXTELT FONT _ (LIST (FONTPROP
-                                                                                 OLDVALUE
-                                                                                 'FAMILY)
-                                                                                (FONTPROP
-                                                                                 NEWVALUE
-                                                                                 'SIZE)
-                                                                                (FONTPROP
-                                                                                 OLDVALUE
-                                                                                 'FACE]
-                                   (T (create TEXTBOX using GINDTEXTELT FONT _
-                                                            (LIST (FONTPROP OLDVALUE 'FAMILY)
-                                                                  (FONTPROP NEWVALUE 'SIZE)
-                                                                  (FONTPROP OLDVALUE 'FACE]
-                               (T (RETURN))))
-                   (NEWFONT                                  (* set the font family)
-                            [SETQ NEWVALUE (LIST COMMAND (FONTPROP OLDVALUE 'SIZE)
-                                                 (FONTPROP OLDVALUE 'FACE]
-                            (COND
-                               ((NULL (FONTCREATE NEWVALUE NIL NIL NIL NIL T))
-                                (STATUSPRINT SKW "  Couldn't find " (CAR NEWVALUE)
-                                       " in size "
-                                       (CADR NEWVALUE))
-                                (RETURN)))
-                            (COND
-                               ((EQ GTYPE 'TEXT)
-                                (create TEXT using GINDTEXTELT FONT _ NEWVALUE))
-                               (T (create TEXTBOX using GINDTEXTELT FONT _ NEWVALUE))))
-                   (FAMILY&SIZE                              (* set the font family and size)
-                                [SETQ NEWVALUE (LIST (CAR COMMAND)
-                                                     (CADR COMMAND)
-                                                     (FONTPROP (fetch (TEXT FONT) of GINDTEXTELT)
-                                                            'FACE]
-                                (COND
-                                   ((EQ GTYPE 'TEXT)
-                                    (create TEXT using GINDTEXTELT FONT _ NEWVALUE))
-                                   (T (create TEXTBOX using GINDTEXTELT FONT _ NEWVALUE))))
-                   (SAME 
-          
-          (* set all of the font characteristics from the first selected one.)
-          
-          (* set the variables to cause the right things to go into the change spec 
-          event.)
-
-                         (SETQ OLDVALUE ELTWITHTEXT)
+                            [AND (EQ (FONTPROP COMMAND 'FAMILY)
+                                     (FONTPROP OLDFONT 'FAMILY))
+                                 (SK.CHANGE.FONT SKW ELTWITHTEXT NIL (FONTPROP COMMAND 'SIZE])
+                   (NEWFONT                                  (* ; "set the font family")
+                            (SK.CHANGE.FONT SKW ELTWITHTEXT COMMAND))
+                   (FAMILY&SIZE                              (* ; "set the font family and size")
+                                (SK.CHANGE.FONT SKW ELTWITHTEXT (CAR COMMAND)
+                                       (CADR COMMAND)))
+                   (SAME                                     (* ; 
+                                   "set all of the font characteristics from the first selected one.")
+                                                             (* ; 
+                      "set the variables to cause the right things to go into the change spec event.")
+                         (SETQ OLDFONT ELTWITHTEXT)
                          (SETQ PROPERTY 'LOOKSAME)
                          (SETQ NEWVALUE (SK.TEXT.ELT.WITH.SAME.FIELDS (fetch (GLOBALPART 
                                                                                  INDIVIDUALGLOBALPART
                                                                                     ) of COMMAND)
                                                GINDTEXTELT)))
                    (SHOULDNT)))
+              (CL:UNLESS NEWGTEXT (RETURN))
               [SETQ NEWGTEXT (COND
-                                [(EQ GTYPE 'TEXT)
-          
-          (* adjust the scales at which this appears because font or scale may have 
-          changed.)
-
+                                [(EQ GTYPE 'TEXT)            (* ; 
+                    "adjust the scales at which this appears because font or scale may have changed.")
                                  (TEXT.SET.SCALES (create GLOBALPART
                                                          COMMONGLOBALPART _ (fetch (GLOBALPART 
                                                                                      COMMONGLOBALPART
@@ -5360,11 +5317,8 @@ Click outside the window to stop.")
                                                          INDIVIDUALGLOBALPART _ (
                                                                               TEXT.SET.GLOBAL.REGIONS
                                                                                  NEWGTEXT]
-                                (T 
-          
-          (* scaling for text boxes depends on the box size which can't change in this 
-          function.)
-
+                                (T                           (* ; 
+                "scaling for text boxes depends on the box size which can't change in this function.")
                                    (create GLOBALPART
                                           COMMONGLOBALPART _ (fetch (GLOBALPART COMMONGLOBALPART)
                                                                 of ELTWITHTEXT)
@@ -5375,7 +5329,32 @@ Click outside the window to stop.")
                              OLDELT _ ELTWITHTEXT
                              PROPERTY _ PROPERTY
                              NEWVALUE _ NEWVALUE
-                             OLDVALUE _ OLDVALUE])
+                             OLDVALUE _ OLDFONT)))])
+
+(SK.CHANGE.FONT
+  [LAMBDA (SKW ELTWITHTEXT FAMILY SIZE FACE)                 (* ; "Edited 30-Nov-2025 10:50 by rmk")
+                                                             (* ; "Edited  7-Nov-2025 09:09 by rmk")
+    (LET (NEWFS)
+         [if (FONTP FAMILY)
+             then (SETQ NEWFS (FONTPROP FAMILY 'SPEC))
+           else [SETQ NEWFS (OR (LISTP FAMILY)
+                                (MAKEFONTSPEC FAMILY SIZE FACE NIL NIL (fetch (TEXT FONT)
+                                                                          of (fetch (GLOBALPART
+                                                                                     
+                                                                                 INDIVIDUALGLOBALPART
+                                                                                     ) of ELTWITHTEXT
+                                                                                    ]
+                (CL:UNLESS (FONTCREATE NEWFS NIL NIL NIL NIL T)
+                    (STATUSPRINT SKW "  Couldn't find " (fetch (FONTSPEC FSFAMILY) of NEWFS)
+                           " in size "
+                           (fetch (FONTSPEC FSSIZE) of NEWFS)))]
+         (CL:WHEN NEWFS
+             (if (EQ (fetch (GLOBALPART GTYPE) of ELTWITHTEXT)
+                     'TEXT)
+                 then (create TEXT using (fetch (GLOBALPART INDIVIDUALGLOBALPART) of ELTWITHTEXT)
+                                         FONT _ NEWFS)
+               else (create TEXTBOX using (fetch (GLOBALPART INDIVIDUALGLOBALPART) of ELTWITHTEXT)
+                                          FONT _ NEWFS)))])
 
 (TEXT.SET.SCALES
   [LAMBDA (GTEXTELT)                                         (* rrb "12-May-85 16:29")
@@ -5418,321 +5397,188 @@ Click outside the window to stop.")
 )
 (DEFINEQ
 
-(ADD.KNOWN.SKETCH.FONT
-  [LAMBDA (FAMILY WID DEVICE FONT)                           (* ; "Edited 10-May-93 16:49 by rmk:")
-                                                             (* ; "Edited 21-Feb-89 15:06 by snow")
-
-    (* ;; "add to the globally cached font list")
-
-    (DECLARE (GLOBALVARS \KNOWN.SKETCH.FONTSIZES))
-    [LET ((CACHE (ASSOC FAMILY \KNOWN.SKETCH.FONTSIZES))
-          (CACHED))
-         (COND
-            [(NULL CACHE)
-             (if \KNOWN.SKETCH.FONTSIZES
-                 then [NCONC1 \KNOWN.SKETCH.FONTSIZES (LIST FAMILY (LIST DEVICE (CONS WID FONT]
-               else (SETQ \KNOWN.SKETCH.FONTSIZES (LIST (LIST FAMILY (LIST DEVICE
-                                                                               (CONS WID FONT]
-            (T (COND
-                  ((SETQ CACHED (ASSOC DEVICE CACHE))
-                   (NCONC1 CACHED (CONS WID FONT)))
-                  (T (NCONC1 CACHE (CONS DEVICE (CONS WID FONT]
-    FONT])
-
 (SK.PICK.FONT
-  [LAMBDA (WID STRING DEVICE DISPLAYGFONT)                   (* ; "Edited 10-May-93 17:11 by rmk:")
-                                                             (* ; "Edited 22-Feb-89 07:53 by snow")
+  [LAMBDA (WID STRING DEVICE DISPLAYFONT)                    (* ; "Edited  6-Nov-2025 10:41 by rmk")
+                                                             (* ; "Edited  1-Sep-2025 13:02 by rmk")
+                                                             (* ; "Edited 10-May-93 17:11 by rmk:")
+                                                             (* ; "Edited 22-Feb-89 07:53 by snow")
 
-    (* ;; "returns the font in FAMILY that text should be printed in to have the text STRING fit into a region WID points wide")
+    (* ;; "RMK 2025:  This is weird, and I'm not sure that the original ever worked.  It is called from only one place (SK.CHOOSE.TEXT.FONT), with one constant STRING.  I believe it is trying to associate with DISPLAYFONT's family a corresponding DEVICE font for which the width of that string would be closest to WID without being larger than that.  It caches that font for WID, since that really is just a constant.")
+
+    (* ;; "Returns the font in DISPLAYFONT's  family that text should be printed in to have the text STRING fit into a region WID points wide.  The value can also be the atom SHADE, if there is no font small enough for STRING.")
 
     (DECLARE (GLOBALVARS \KNOWN.SKETCH.FONTSIZES))
-    (LET
-     [STARTFONT FONTWIDTH SCALE CACHEDFONT SIZE (FAMILY (FONTPROP DISPLAYGFONT 'FAMILY]
-     (IF [SETQ CACHEDFONT (ASSOC WID (ASSOC DEVICE (ASSOC FAMILY \KNOWN.SKETCH.FONTSIZES]
-         THEN (CDR CACHEDFONT)
-       ELSE (SETQ STARTFONT (FONTCOPY DISPLAYGFONT 'DEVICE DEVICE))
-             NIL
-             (SETQ SCALE (FONTPROP STARTFONT 'SCALE))
-             (SETQ SIZE (FONTPROP STARTFONT 'SIZE))
-             [SETQ FONTWIDTH (COND
-                                (SCALE 
-                                       (* ;; "IF THERE IS A SCALE, YOU MUST SCALE THE WIDTH.")
+    (LET ((FAMILY (FONTPROP DISPLAYFONT 'FAMILY))
+          STARTFONT FONTWIDTH SCALE CACHEDFONT AVAIL TOOSMALL)
+         (if (SGETMULTI \KNOWN.SKETCH.FONTSIZES FAMILY DEVICE WID (FONTPROP DISPLAYFONT 'FACE))
+           else (SETQ STARTFONT (FONTCOPY DISPLAYFONT 'DEVICE DEVICE))
+                (SETQ SCALE (FONTPROP STARTFONT 'SCALE))
+                (SETQ FONTWIDTH (STRINGWIDTH STRING STARTFONT))
+                (CL:IF SCALE
+                    (SETQ FONTWIDTH (FIXR (QUOTIENT FONTWIDTH SCALE))))
+                (if (IEQP FONTWIDTH WID)
+                    then (PUTMULTI \KNOWN.SKETCH.FONTSIZES FAMILY DEVICE WID STARTFONT)
+                  else 
+                       (* ;; "FONTSAVAILABLE sorts in increasing size order, so our first guess is either after or before the position of STARTFONT in the list.  This assumes that the widths are proportional to font sizes.")
 
-                                       (FIXR (QUOTIENT (STRINGWIDTH STRING STARTFONT)
-                                                    SCALE)))
-                                (T (STRINGWIDTH STRING STARTFONT]
-             [SETQ CACHEDFONT
-              (IF (IGREATERP FONTWIDTH WID)
-                  THEN 
+                       (SETQ TOOSMALL (ILESSP FONTWIDTH WID))
+                       (SETQ AVAIL (FONTSAVAILABLE (create FONTSPEC using (FONTPROP STARTFONT
+                                                                                 'SPEC)
+                                                                          FSSIZE _ '*)
+                                          NIL NIL NIL NIL T)) 
 
-                        (* ;; "Font width was too big, try smaller fonts in decreasing size.")
+                       (* ;; 
+  "If STARTFONT width is too big, try smaller fonts, otherwise bigger ones.  CDR skips the STARTFONT")
 
-                        [FOR FONT IN [CDR (FIND F
-                                                     ON [SORT (FONTSAVAILABLE FAMILY '*
-                                                                         'MRR 0 DEVICE T)
-                                                                  (FUNCTION (LAMBDA (F1 F2)
-                                                                              (IGREATERP (CADR F1)
-                                                                                     (CADR F2]
-                                                     SUCHTHAT (EQ SIZE (CADR F]
-                           WHEN (ILESSP [SETQ FONTWIDTH (COND
-                                                               (SCALE 
-                                                                      (* ;; 
-                                                   "IF THERE IS A SCALE, YOU MUST SCALE THE WIDTH.")
+                       (for FS FONT (PREVFONT _ STARTFONT)
+                            (PREVWIDTH _ FONTWIDTH) in [CDR (MEMBER (FONTPROP STARTFONT 'SPEC)
+                                                                   (CL:IF TOOSMALL
+                                                                       AVAIL
+                                                                       (REVERSE AVAIL))]
+                          eachtime (SETQ FONT (FONTCREATE FS))
+                                (SETQ FONTWIDTH (STRINGWIDTH STRING FONT))
+                                (CL:IF SCALE
+                                    (SETQ FONTWIDTH (FIXR (QUOTIENT FONTWIDTH SCALE))))
+                          until (CL:IF TOOSMALL
+                                    (IGREATERP FONTWIDTH WID)
+                                    (ILESSP FONTWIDTH WID)) do (SETQ PREVFONT FONT)
+                                                               (SETQ PREVWIDTH FONTWIDTH)
+                          finally 
 
-                                                                      (FIXR (QUOTIENT (STRINGWIDTH
-                                                                                       STRING FONT)
-                                                                                   SCALE)))
-                                                               (T (STRINGWIDTH STRING FONT]
-                                           WID) DO (RETURN (ADD.KNOWN.SKETCH.FONT FAMILY WID
-                                                                      DEVICE FONT))
-                           FINALLY (RETURN (ADD.KNOWN.SKETCH.FONT
-                                                FAMILY WID DEVICE
-                                                (IF (GREATERP FONTWIDTH (TIMES 1.5 WID))
-                                                    THEN 'SHADE
-                                                  ELSEIF (OR FONT STARTFONT]
-                ELSEIF (IEQP FONTWIDTH WID)
-                  THEN (ADD.KNOWN.SKETCH.FONT FAMILY WID DEVICE STARTFONT)
-                ELSE 
+                                (* ;; "We ran over, return the previous")
 
-                      (* ;; "FONT width was too small, try bigger fonts.")
-
-                      (FOR FONT PREVFONT
-                         IN [CDR (FIND F ON [SORT (FONTSAVAILABLE FAMILY '* 'MRR 0 DEVICE
-                                                                     T)
-                                                              (FUNCTION (LAMBDA (F1 F2)
-                                                                          (ILESSP (CADR F1)
-                                                                                 (CADR F2]
-                                        SUCHTHAT (EQ SIZE (CADR F]
-                         DO (IF (IGREATERP (COND
-                                                      (SCALE 
-                                                             (* ;; 
-                                                   "IF THERE IS A SCALE, YOU MUST SCALE THE WIDTH.")
-
-                                                             (FIXR (QUOTIENT (STRINGWIDTH STRING FONT
-                                                                                    )
-                                                                          SCALE)))
-                                                      (T (STRINGWIDTH STRING FONT)))
-                                               WID)
-                                    THEN (RETURN (ADD.KNOWN.SKETCH.FONT FAMILY WID DEVICE 
-                                                            PREVFONT)))
-                               (SETQ PREVFONT FONT) FINALLY (RETURN (ADD.KNOWN.SKETCH.FONT
-                                                                         FAMILY WID DEVICE
-                                                                         (OR FONT PREVFONT STARTFONT]
-             (IF (FONTP CACHEDFONT)
-                 THEN                                    (* ; "Could be SHADE")
-                       (FONTCOPY CACHEDFONT 'FACE (FONTPROP DISPLAYGFONT 'FACE))
-               ELSE CACHEDFONT])
+                                (CL:UNLESS TOOSMALL
+                                    (CL:WHEN (GREATERP PREVWIDTH (TIMES 1.5 WID))
+                                                             (* ; "If we get too small, return SHADE")
+                                        (SETQ PREVFONT 'SHADE)))
+                                (SPUTMULTI \KNOWN.SKETCH.FONTSIZES FAMILY DEVICE WID
+                                       (FONTPROP DISPLAYFONT 'FACE)
+                                       PREVFONT)
+                                (RETURN PREVFONT])
 
 (SK.CHOOSE.TEXT.FONT
-  [LAMBDA (GTEXT SCALE VIEWER)                               (* ; "Edited 10-May-93 16:18 by rmk:")
-                                                             (* ; "Edited  1-Nov-91 16:56 by jds")
+  [LAMBDA (GTEXT SCALE VIEWER)                               (* ; "Edited  6-Nov-2025 00:08 by rmk")
+                                                             (* ; "Edited 10-May-93 16:18 by rmk:")
+                                                             (* ; "Edited  1-Nov-91 16:56 by jds")
 
-    (* ;; "returns the font that text in the individual global part of a text or textbox element GTEXT should be displayed in when shown in VIEWER.")
+    (* ;; "returns the font that text in the individual global part of a text or textbox element GTEXT should be displayed in when shown in VIEWER.")
 
     (PROG ([VIEWERFONTCACHE (OR (AND (WINDOWP VIEWER)
                                      (WINDOWPROP VIEWER 'PICKFONTCACHE))
                                 (AND (STREAMP VIEWER)
                                      (STREAMPROP VIEWER 'PICKFONTCACHE]
            (GFONT (fetch (TEXT FONT) of GTEXT))
-           LOCALFONT)
+           (CANONICALTESTSTR "AWIaiw")
+           LOCALFONT CANONICALWIDTH DEVICE DISPLAYGFONT)
+          (CL:WHEN (SETQ LOCALFONT (SASSOC GFONT VIEWERFONTCACHE))
+                                                             (* ; "look in the viewer's font cache.")
+              (RETURN (CDR LOCALFONT)))
+          [SETQ DEVICE (COND
+                          ((STREAMP VIEWER)
+                           (fetch (IMAGEOPS IMAGETYPE) of (fetch (STREAM IMAGEOPS) of VIEWER)))
+                          (T 'DISPLAY]
           [COND
-             ((SETQ LOCALFONT (SASSOC GFONT VIEWERFONTCACHE))(* ; 
-                                                           "look in the viewer's font cache.")
-              (RETURN (CDR LOCALFONT]
-          (RETURN (PROG ((CANONICALTESTSTR "AWIaiw")
-                         CANONICALWIDTH DEVICE DISPLAYGFONT)
-                        [SETQ DEVICE (COND
-                                        ((STREAMP VIEWER)
-                                         (fetch (IMAGEOPS IMFONTCREATE)
-                                            of (fetch (STREAM IMAGEOPS) of VIEWER)))
-                                        (T 'DISPLAY]
-                        [COND
-                           ((EQUAL (TIMES SCALE (DSPSCALE NIL VIEWER))
-                                   (fetch (TEXT INITIALSCALE) of GTEXT))
+             ((EQUAL (TIMES SCALE (DSPSCALE NIL VIEWER))
+                     (fetch (TEXT INITIALSCALE) of GTEXT))
 
-                            (* ;; "special case scales being the same so there is not a large delay when first character is typed and to avoid font look up problems when hardcopying at scale 1")
+              (* ;; "special case scales being the same so there is not a large delay when first character is typed and to avoid font look up problems when hardcopying at scale 1")
 
-                            (SETQ LOCALFONT (FONTCREATE GFONT NIL NIL NIL DEVICE)))
-                           (T 
-                              (* ;; "use a canonical string to determine the font size so that all strings of a given font at a given scale look the same.  If font is determined by the width of the particular string, two different string will appear in different fonts.  In particular, the string may change fonts as the user is typing into it.")
+              (SETQ LOCALFONT (FONTCREATE GFONT NIL NIL NIL DEVICE)))
+             (T 
+                (* ;; "Use a canonical string to determine the font size so that all strings of a given font at a given scale look the same.  If font is determined by the width of the particular string, two different strings will appear in different fonts.  In particular, the string may change fonts as the user is typing into it.")
 
-                              (* ;; "don't use the face information when determining string width because in some cases HELVETICA 10, the bold is smaller than the regular.")
+                (* ;; "The canonical width here is the natural font width having somehow taken into account the scale of the viewer and the initialscale of the text.")
 
-                              (SETQ DISPLAYGFONT (FONTCREATE GFONT NIL NIL NIL 'DISPLAY))
-                              [SETQ CANONICALWIDTH
-                               (FIXR (QUOTIENT (TIMES [STRINGWIDTH CANONICALTESTSTR
-                                                             (LIST (FONTPROP DISPLAYGFONT
-                                                                          'FAMILY)
-                                                                   (FONTPROP DISPLAYGFONT
-                                                                          'SIZE]
-                                                      (fetch (TEXT INITIALSCALE) of GTEXT))
-                                            (TIMES SCALE (DSPSCALE NIL VIEWER]
-                                                             (* ; "calculate the local font.")
-                              (SETQ LOCALFONT (SK.PICK.FONT CANONICALWIDTH CANONICALTESTSTR 
-                                                     DEVICE DISPLAYGFONT]
-                        [COND
-                           ((WINDOWP VIEWER)
-                            (WINDOWPROP VIEWER 'PICKFONTCACHE (CONS (CONS GFONT LOCALFONT)
-                                                                    VIEWERFONTCACHE)))
-                           ((STREAMP VIEWER)
-                            (STREAMPROP VIEWER 'PICKFONTCACHE (CONS (CONS GFONT LOCALFONT)
-                                                                    VIEWERFONTCACHE]
-                        (RETURN LOCALFONT])
+                (SETQ DISPLAYGFONT (FONTCREATE GFONT NIL NIL NIL 'DISPLAY))
+                [SETQ CANONICALWIDTH
+                 (FIXR (QUOTIENT (TIMES (STRINGWIDTH CANONICALTESTSTR
+                                               (if NIL
+                                                   then (create FONTSPEC using (FONTPROP DISPLAYGFONT
+                                                                                      'SPEC)
+                                                                               FSFACE _
+                                                                               (MAKEFONTFACE
+                                                                                'MEDIUM
+                                                                                'REGULAR
+                                                                                'REGULAR))
+                                                 else 
+
+                                 (* ;; "Original code didn't use the face information when determining string width because, it said, that in some cases HELVETICA 10, the bold is smaller than the regular. ")
+
+                                                      DISPLAYGFONT))
+                                        (fetch (TEXT INITIALSCALE) of GTEXT))
+                              (TIMES SCALE (DSPSCALE NIL VIEWER]
+                                                             (* ; "calculate the local font.")
+                (SETQ LOCALFONT (SK.PICK.FONT CANONICALWIDTH CANONICALTESTSTR DEVICE DISPLAYGFONT]
+          [COND
+             ((WINDOWP VIEWER)
+              (WINDOWPROP VIEWER 'PICKFONTCACHE (CONS (CONS GFONT LOCALFONT)
+                                                      VIEWERFONTCACHE)))
+             ((STREAMP VIEWER)
+              (STREAMPROP VIEWER 'PICKFONTCACHE (CONS (CONS GFONT LOCALFONT)
+                                                      VIEWERFONTCACHE]
+          (RETURN LOCALFONT])
 
 (SK.NEXTSIZEFONT
-  [LAMBDA (WHICHDIR NOWFONT)                                 (* rrb "14-Jul-86 13:43")
-          
-          (* returns the next sized font either SMALLER or LARGER that on of size FONT.)
+  [LAMBDA (WHICHDIR NOWFONT)                                 (* ; "Edited  6-Nov-2025 22:52 by rmk")
+                                                             (* rrb "14-Jul-86 13:43")
 
-    (PROG [(NOWSIZE (FONTPROP NOWFONT 'HEIGHT))
-           (DECREASEFONTLST (SK.DECREASING.FONT.LIST (CAR NOWFONT)
-                                   'DISPLAY]
-          (RETURN (COND
-                     [(EQ WHICHDIR 'LARGER)
-                      (COND
-                         ((IGEQ NOWSIZE (FONTPROP (CAR DECREASEFONTLST)
-                                               'HEIGHT))     (* nothing larger)
-                          NIL)
-                         (T (for FONTTAIL on DECREASEFONTLST
-                               when [AND (CDR FONTTAIL)
-                                         (IGEQ NOWSIZE (FONTPROP (CADR FONTTAIL)
-                                                              'HEIGHT]
-                               do (RETURN (SK.FONTNAMELIST (CAR FONTTAIL]
-                     (T (for FONT in DECREASEFONTLST when (LESSP (FONTPROP FONT 'HEIGHT)
-                                                                 NOWSIZE)
-                           do (RETURN (SK.FONTNAMELIST FONT])
+    (* ;; "Returns the next sized font either SMALLER or LARGER that on of size FONT. This returns FONTSPEC, not font descriptor")
+
+    (* ;; "RMK 2025:  The original code tested HEIGHT, but SK.DECREASING.FONT.LIST orders according to SIZE.  Presumably correlated, but if they ever got out of whack, this would be wrong.  So changed to SIZE.")
+
+    (* ;; "Also, this returns a FONTSPEC, not the font descriptor.")
+
+    (LET [(NOWSIZE (FONTPROP NOWFONT 'SIZE))
+          (DECREASEFONTLST (SK.DECREASING.FONT.LIST (FONTPROP NOWFONT 'FAMILY)
+                                  'DISPLAY]
+         (COND
+            [(EQ WHICHDIR 'LARGER)
+             (CL:WHEN (ILESSP NOWSIZE (FONTPROP (CAR DECREASEFONTLST)
+                                             'SIZE))         (* ; "Otherwise, nothing larger")
+                 [for FONTTAIL on DECREASEFONTLST when [AND (CDR FONTTAIL)
+                                                            (IGEQ NOWSIZE (FONTPROP (CADR FONTTAIL)
+                                                                                 'SIZE]
+                    do (RETURN (FONTPROP (CAR FONTTAIL)
+                                      'SPEC])]
+            (T (for FONT in DECREASEFONTLST when (LESSP (FONTPROP FONT 'SIZE)
+                                                        NOWSIZE)
+                  do (RETURN (FONTPROP FONT 'SPEC])
 
 (SK.DECREASING.FONT.LIST
-  [LAMBDA (FAMILY DEVICETYPE)                 (* ; 
-                                                "Edited 12-Oct-92 12:39 by sybalsky:mv:envos")
+  [LAMBDA (FAMILY DEVICE)                                    (* ; "Edited  6-Nov-2025 17:40 by rmk")
+                                                             (* ; "Edited  4-Nov-2025 15:34 by rmk")
+                                                             (* ; 
+                                                        "Edited 12-Oct-92 12:39 by sybalsky:mv:envos")
 
-    (* ;; "returns a list of fonts of family FAMILY which work on device DEVICETYPE")
+    (* ;; "This is used to find the best font for FAMILY on DEVICE that will allow a string to fit in a box, or to find the next larger/smaller font while editing.   ")
 
-    [COND
-       ((NULL FAMILY)
-        (SETQ FAMILY 'MODERN]
+    (* ;; "RMK 2025: The original code anticipated the coercions of the PRESS/INTERPRESS/POSTSCRIPT devices, building in e.g. that HELVETICA maps to MODERN on INTERPRESS and not even looking to see if there are any INTERPRESS HELVETICA fonts available or if e.g. INTERPRESS TERMINAL would coerce to MODERN for other sizes.  ")
 
-    (* ;; "convert to families that exist on the known devices.")
+    (* ;; "That is, if FAMILY is TERMINAL for INTERPRESS, this would only return fonts for sizes 6 8 10 12 even though coercions to MODERN might give smaller and bigger sizes.")
 
-(* ;;; "NOTE: this is a very bad way to convert the family.  It HARDCODES in the conversions for PRESS and INTERPRESS  and does nothing for new device types.  I have added the conversion for POSTSCRIPT that does things a little cleaner, but it should really look at a property of the device (fontconversions or some such animal.)  --was 2/19/89")
+    (* ;; "This code looks up all of the possible coercions of the given family to get all possible coerceable sizes, then relies on the related coercions in FONTCREATE to produce FAMILY fonts possibly constructed from data in the files for some other font.  E.g. TERMINAL 14 will have the data from MODERN 14.")
 
-    (LET ((CONVERSION))
-         [COND
-            [(EQ DEVICETYPE 'PRESS)
-             (COND
-                ((EQ FAMILY 'MODERN)
-                 (SETQ FAMILY 'HELVETICA))
-                ((EQ FAMILY 'CLASSIC)
-                 (SETQ FAMILY 'TIMESROMAN))
-                ((EQ FAMILY 'TERMINAL)
-                 (SETQ FAMILY 'GACHA]
-            [(EQ DEVICETYPE 'INTERPRESS)
-             (COND
-                ((EQ FAMILY 'HELVETICA)
-                 (SETQ FAMILY 'MODERN))
-                ((EQ FAMILY 'TIMESROMAN)
-                 (SETQ FAMILY 'CLASSIC))
-                ((EQ FAMILY 'GACHA)
-                 (SETQ FAMILY 'TERMINAL]
-            ((EQ DEVICETYPE 'POSTSCRIPT)
-             (if (SETQ CONVERSION (ASSOC FAMILY POSTSCRIPT.FONT.ALIST))
-                 then 
+    (* ;; "This is also device independent:  should work for HTML (whether or not HTML specifies any CHARCOERCIONS).")
 
-                       (* ;; 
-                  "convert the family here for postscript as well as the other well known devices.")
+    (* ;; "Note that FONTSAVAILABLE caches its file lookups and FONTCREATE caches its fonts.")
 
-                       (SETQ FAMILY (CDR CONVERSION]
-         (for FONT in (SK.GUESS.FONTSAVAILABLE FAMILY DEVICETYPE)
-            collect (FONTCOPY FONT 'DEVICE DEVICETYPE])
+    (CL:UNLESS FAMILY
+        (SETQ FAMILY 'MODERN))
+    (LET ((FAMSPEC (create FONTSPEC
+                          FSFAMILY _ FAMILY
+                          FSSIZE _ '*
+                          FSDEVICE _ DEVICE)))
 
-(SK.GUESS.FONTSAVAILABLE
-  [LAMBDA (FAMILY HDCPYTYPE)                                 (* rrb " 9-Oct-85 16:10")
-          
-          (* returns a list of all fonts of a FAMILY in decreasing order.)
+         (* ;; "Run through all sizes for all the fonts for FAMILY or any of its coercions on DEVICE.  This gives us all the possible sizes for FAMILY, we ask FONTCREATE to create a FAMILY font for each of those sizes.")
 
-    (PROG (FILEFONTS CACHE DISPLAYFONTSIZES)
-          (SETQ HDCPYTYPE (COND
-                             ((NULL HDCPYTYPE)
-                              (PRINTERTYPE))
-                             ((NLISTP HDCPYTYPE)
-                              HDCPYTYPE)
-                             (T HDCPYTYPE)))                 (* cache the file fonts.)
-          [COND
-             [[SETQ FILEFONTS (ASSOC HDCPYTYPE (CDR (ASSOC FAMILY \FONTSONFILE]
-          
-          (* note if a cache has been calculated. Use it even if it is NIL)
-          
-          (* \FONTSONFILE seems to group things such as CLASSICTHIN under CLASSIC so make 
-          sure to remove anything that has the wrong family.)
-
-              (SETQ FILEFONTS (SUBSET (CDR FILEFONTS)
-                                     (FUNCTION (LAMBDA (X)
-                                                 (EQ (CAR X)
-                                                     FAMILY]
-             (T (RESETFORM (CURSOR WAITINGCURSOR)
-                       (SETQ FILEFONTS (FONTSAVAILABLE FAMILY '* '(MEDIUM REGULAR REGULAR) NIL 
-                                              HDCPYTYPE T))
-          
-          (* Since there is no way to determine the real sizes for PRESS fonts with size 
-          of 0 {meaning the widths scale}, guess that they are available in 10)
-
-                       [COND
-                          [(EQ HDCPYTYPE 'PRESS)
-          
-          (* make sure to look for anything that has a display font.)
-
-                           (SETQ DISPLAYFONTSIZES (for FONT
-                                                     in (FONTSAVAILABLE FAMILY '*
-                                                               '(MEDIUM REGULAR REGULAR) NIL
-                                                               'DISPLAY) collect (CADR FONT)))
-                           (SETQ FILEFONTS
-                            (for FONT in FILEFONTS
-                               join (COND
-                                       [(EQ (CADR FONT)
-                                            0)
-                                        (for SIZE
-                                           in (UNION DISPLAYFONTSIZES
-                                                     '(36 30 24 18 14 12 10 8 6))
-                                           when (FONTCREATE (CAR FONT)
-                                                       SIZE NIL NIL 'DISPLAY T)
-                                           collect (CONS (CAR FONT)
-                                                         (CONS SIZE (CDDR FONT]
-                                       (T (CONS FONT]
-                          ((EQ HDCPYTYPE 'DISPLAY)
-          
-          (* patch around the bug in FONTSAVAILABLE.
-          Remove after J release.)
-
-                           (SETQ FILEFONTS (SUBSET FILEFONTS (FUNCTION (LAMBDA (FONT)
-                                                                         (EQUAL (CADDR FONT)
-                                                                                '(MEDIUM REGULAR 
-                                                                                        REGULAR]
-                                                             (* remove duplicates and sort)
-                       [SETQ FILEFONTS (SORT (INTERSECTION FILEFONTS FILEFONTS)
-                                             (FUNCTION (LAMBDA (A B)
-                                                         (GREATERP (CADR A)
-                                                                (CADR B]
-                       (COND
-                          ((NULL (SETQ CACHE (ASSOC FAMILY \FONTSONFILE)))
-                           (SETQ \FONTSONFILE (CONS (LIST FAMILY (CONS HDCPYTYPE FILEFONTS))
-                                                    \FONTSONFILE)))
-                          (T (NCONC1 CACHE (CONS HDCPYTYPE FILEFONTS]
-          
-          (* reget the fonts in core since they may have changed since last time.)
-
-          (RETURN (SORT (UNION (FONTSAVAILABLE FAMILY '* NIL NIL HDCPYTYPE)
-                               FILEFONTS)
-                        (FUNCTION (LAMBDA (A B)
-                                    (COND
-                                       ((EQ (CADR A)
-                                            (CADR B))
-          
-          (* in case both TIMESROMAN and TIMESROMAND for example make it in.)
-
-                                        (ALPHORDER (CADR A)
-                                               (CADR B)))
-                                       (T (GREATERP (CADR A)
-                                                 (CADR B])
+         (for FS SIZES in (for FS in [CONS FAMSPEC (COERCEFONTSPEC FAMSPEC (FONTDEVICEPROP
+                                                                            DEVICE
+                                                                            'CHARCOERCIONS]
+                             join (FONTSAVAILABLE FS NIL NIL NIL NIL T))
+            do (pushnew SIZES (fetch (FONTSPEC FSSIZE) of FS))
+            finally (RETURN (for S in [SORT SIZES (FUNCTION (LAMBDA (S1 S2)
+                                                              (IGREATERP S1 S2]
+                               collect (FONTCREATE FAMILY S NIL NIL DEVICE])
 )
 
 (RPAQ? \KNOWN.SKETCH.FONTSIZES )
@@ -5753,37 +5599,28 @@ Click outside the window to stop.")
 (DEFINEQ
 
 (SK.SET.FONT
-  [LAMBDA (W NEWFONT)                                        (* rrb " 2-Oct-85 14:55")
-          
-          (* sets the entire default font. Used when a sketch stream is created.
-          or any of the defaults are changed. NEWFONT is a list of
-          (FAMILY SIZE FACE))
+  [LAMBDA (W NEWFONT)                                        (* ; "Edited  4-Nov-2025 13:06 by rmk")
+                                                             (* rrb " 2-Oct-85 14:55")
 
-    (COND
-       (NEWFONT (COND
-                   ((FONTCREATE NEWFONT NIL NIL NIL NIL T)
-          
-          (* clear the cache of looked up fonts. This provides the user a way of clearing 
-          the cache that shouldn't happen too much and is documented.)
+    (* ;; "Sets the  default font.  Used when a sketch stream is created.  or any of the defaults are changed.  NEWFONT is a fontspec")
 
-                    (AND (FASSOC (CAR NEWFONT)
-                                \FONTSONFILE)
-                         (SETQ \FONTSONFILE (for BUCKET in \FONTSONFILE
-                                               when (NEQ (CAR BUCKET)
-                                                         (CAR NEWFONT)) collect BUCKET)))
-                    (replace (SKETCHCONTEXT SKETCHFONT) of (WINDOWPROP W 'SKETCHCONTEXT) with NEWFONT
-                           ))
-                   (T (STATUSPRINT W (CAR NEWFONT)
-                             " "
-                             (CADR NEWFONT)
-                             " "
-                             (SELECTQ (CAR (CADDR NEWFONT))
-                                 (BOLD 'BOLD)
-                                 "")
-                             (SELECTQ (CADR (CADDR NEWFONT))
-                                 (ITALIC 'ITALIC)
-                                 "")
-                             " not found"])
+    (CL:WHEN NEWFONT
+        (if (FONTCREATE NEWFONT NIL NIL NIL NIL T)
+            then 
+                 (* ;; "Tests to make sure the font exists, but stores the fontspec.")
+
+                 (replace (SKETCHCONTEXT SKETCHFONT) of (WINDOWPROP W 'SKETCHCONTEXT) with NEWFONT)
+          else (STATUSPRINT W (fetch (FONTSPEC FSFAMILY) of NEWFONT)
+                      " "
+                      (fetch (FONTSPEC FSSIZE) of NEWFONT)
+                      " "
+                      (SELECTQ (fetch (FONTFACE WEIGHT) of (fetch (FONTSPEC FSFACE) of NEWFONT))
+                          (BOLD 'BOLD)
+                          "")
+                      (SELECTQ (fetch (FONTFACE SLOPE) of (fetch (FONTSPEC FSFACE) of NEWFONT))
+                          (ITALIC 'ITALIC)
+                          "")
+                      " not found")))])
 
 (SK.SET.TEXT.FONT
   [LAMBDA (W)                                                (* rrb " 4-Oct-85 16:21")
@@ -5838,90 +5675,51 @@ Click outside the window to stop.")
                                                              of SKCONTEXT])
 
 (SK.READFONTSIZE
-  [LAMBDA (TITLE FONTFAMILY SKW)                             (* rrb " 6-Nov-85 09:51")
-          
-          (* * gets a legal known font size from the user.)
-          
-          (* this should have MENUROWS _ 1 when title height bug in menu package gets 
-          fixed.)
+  [LAMBDA (TITLE FONTFAMILY SKW)                             (* ; "Edited  4-Nov-2025 20:12 by rmk")
+                                                             (* rrb " 6-Nov-85 09:51")
 
-    (PROG ((FONTSIZES (SK.COLLECT.FONT.SIZES FONTFAMILY))
-           NEWSIZE)
-          (COND
-             ((NULL FONTSIZES)
-              (GO MORE)))
-          (SETQ NEWSIZE (\CURSOR.IN.MIDDLE.MENU (create MENU
-                                                       TITLE _ (COND
-                                                                  (TITLE)
-                                                                  (FONTFAMILY (CONCAT "new " 
-                                                                                     FONTFAMILY 
-                                                                                     " size?"))
-                                                                  (T "New font size?"))
-                                                       ITEMS _ (CONS '(More 'MORE 
-                                                  "will look on font directories to find more sizes."
-                                                                            ) FONTSIZES)
-                                                       CENTERFLG _ T)))
-          (COND
-             ((NEQ NEWSIZE 'MORE)
-              (RETURN NEWSIZE)))
-      MORE
-                                                             (* do longer search of files)
-          (SETQ NEWSIZE (SK.COLLECT.FONT.SIZES FONTFAMILY T))
-          (COND
-             ((NULL NEWSIZE)                                 (* could not find any fonts of that 
-                                                             family)
-              (RETURN NIL))
-             ((EQUAL NEWSIZE FONTSIZES)                      (* not new ones found)
-              (STATUSPRINT SKW "
-No more font sizes found.")))
-          (RETURN (MENU (create MENU
-                               TITLE _ (OR TITLE "New font size?")
-                               ITEMS _ NEWSIZE
-                               CENTERFLG _ T])
+    (* ;; "Gets a legal known font size from the user.")
+                                                             (* ; "this should have MENUROWS _ 1 when title height bug in menu package gets fixed. RMK 2025:  Is this still an issue?")
+    (CL:UNLESS TITLE
+        (SETQ TITLE (CONCAT "New " (OR FONTFAMILY "font")
+                           " size?")))
+    (LET ((FONTSIZES (SK.COLLECT.FONT.SIZES FONTFAMILY))
+          (NEWSIZE 'MORE))
+         (CL:WHEN FONTSIZES
+             (SETQ NEWSIZE (\CURSOR.IN.MIDDLE.MENU (create MENU
+                                                          TITLE _ TITLE
+                                                          ITEMS _ (NCONC1 FONTSIZES
+                                                                         '(More 'MORE 
+                                                   "Look on font-file directories to find more sizes"
+                                                                                ))
+                                                          CENTERFLG _ T))))
+         (CL:WHEN (EQ NEWSIZE 'MORE)                         (* ; "do longer search of files")
+             (SETQ FONTSIZES (LDIFFERENCE (SK.COLLECT.FONT.SIZES FONTFAMILY 'ONLY)
+                                    FONTSIZES))
+             (SETQ NEWSIZE
+              (if FONTSIZES
+                  then (MENU (create MENU
+                                    TITLE _ TITLE
+                                    ITEMS _ FONTSIZES
+                                    CENTERFLG _ T))
+                else (STATUSPRINT SKW "
+No more font sizes found.")
+                     NIL)))
+         NEWSIZE])
 
 (SK.COLLECT.FONT.SIZES
-  [LAMBDA (FAMILY FILESTOOFLG)                               (* rrb " 2-Oct-85 10:43")
-          
-          (* collects all of the sizes that are known.
-          If FAMILY is given, gets just those sizes.)
+  [LAMBDA (FAMILY FILESTOOFLG)                               (* ; "Edited  4-Nov-2025 20:02 by rmk")
+                                                             (* rrb " 2-Oct-85 10:43")
 
-    (PROG (INCORESIZES FILESIZES)
-          [COND
-             [FAMILY (for TYPEBUCKET in (CDR (FASSOC FAMILY \FONTSONFILE))
-                        do (for FFONT in (CDR TYPEBUCKET) do (OR (MEMB (CADR FFONT)
-                                                                       INCORESIZES)
-                                                                 (SETQ INCORESIZES
-                                                                  (CONS (CADR FFONT)
-                                                                        INCORESIZES]
-             (T                                              (* look at all fonts)
-                (for FAMILYBUCKET in \FONTSONFILE
-                   do (for TYPEBUCKET in (CDR FAMILYBUCKET)
-                         do (for FFONT in (CDR TYPEBUCKET) do (OR (MEMB (CADR FFONT)
-                                                                        INCORESIZES)
-                                                                  (SETQ INCORESIZES
-                                                                   (CONS (CADR FFONT)
-                                                                         INCORESIZES]
-          (RETURN (SORT (UNION INCORESIZES
-                               (COND
-                                  [FILESTOOFLG
-          
-          (* wants those on files too, Flip the cursor to note wait.)
+    (* ;; "Collects all of the sizes that are known.  If FAMILY is given, gets just those sizes.")
 
-                                   (RESETFORM (CURSOR WAITINGCURSOR)
-                                          (bind SIZES for FONT
-                                             in (FONTSAVAILABLE (OR FAMILY '*)
-                                                       '* NIL NIL 'DISPLAY T)
-                                             do (OR (MEMB (FONTPROP FONT 'SIZE)
-                                                          SIZES)
-                                                    (SETQ SIZES (CONS (FONTPROP FONT 'SIZE)
-                                                                      SIZES)))
-                                             finally (RETURN SIZES]
-                                  (T (bind SIZES for FONT in (FONTSAVAILABLE (OR FAMILY '*)
-                                                                    '* NIL NIL 'DISPLAY FILESTOOFLG)
-                                        do (OR (MEMB (FONTPROP FONT 'SIZE)
-                                                     SIZES)
-                                               (SETQ SIZES (CONS (FONTPROP FONT 'SIZE)
-                                                                 SIZES))) finally (RETURN SIZES])
+    (* ;; "RMK:  Original code seemed confused.  The \FONTSONFILE variable (set originally only by SK.GUESS.FONTSAVAILBLE in the call from SK.DECREASING.FONT.LIST) maintained a cache just of the fonts that had already been looked up for particular families and particular devices.  But then it called FONTSAVAILABLE only for the DISPLAY device.")
+
+    (for FS SIZES in (FONTSAVAILABLE (OR FAMILY '*)
+                            '* NIL NIL 'DISPLAY FILESTOOFLG) do (pushnew SIZES (fetch (FONTSPEC
+                                                                                       FSSIZE)
+                                                                                  of FS))
+       finally (RETURN (SORT SIZES])
 
 (SK.SET.TEXT.VERT.ALIGN
   [LAMBDA (SKW NEWALIGN)                                     (* rrb " 6-Nov-85 09:52")
@@ -6058,8 +5856,6 @@ No more font sizes found.")))
 
 (RPAQ? SK.DEFAULT.TEXT.ALIGNMENT '(CENTER BASELINE))
 
-(RPAQ? \FONTSONFILE NIL)
-
 (ADDTOVAR SK.HORIZONTAL.STYLES LEFT RIGHT CENTER)
 
 (ADDTOVAR SK.VERTICAL.STYLES TOP CENTER BASELINE BOTTOM)
@@ -9280,137 +9076,136 @@ No more font sizes found.")))
            (fetch (REGION TOP) of REGION])
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (14510 24920 (INIT.SKETCH.ELEMENTS 14520 . 22083) (CREATE.SKETCH.ELEMENT.TYPE 22085 . 
-23607) (SKETCH.ELEMENT.TYPEP 23609 . 23997) (SKETCH.ELEMENT.NAMEP 23999 . 24262) (
-\CURSOR.IN.MIDDLE.MENU 24264 . 24918)) (24961 25638 (SKETCHINCOLORP 24971 . 25291) (READ.COLOR.CHANGE 
-25293 . 25636)) (26147 28926 (SK.CREATE.DEFAULT.FILLING 26157 . 26458) (SKFILLINGP 26460 . 27093) (
-SK.INSURE.FILLING 27095 . 28523) (SK.INSURE.COLOR 28525 . 28924)) (28927 34537 (SK.TRANSLATE.MODE 
-28937 . 29719) (SK.CHANGE.FILLING.MODE 29721 . 33304) (READ.FILLING.MODE 33306 . 34535)) (34538 65212 
-(SKETCH.CREATE.CIRCLE 34548 . 35360) (CIRCLE.EXPANDFN 35362 . 38734) (CIRCLE.DRAWFN 38736 . 41737) (
-\CIRCLE.DRAWFN1 41739 . 44334) (CIRCLE.INPUTFN 44336 . 46185) (SK.UPDATE.CIRCLE.AFTER.CHANGE 46187 . 
-46546) (SK.READ.CIRCLE.POINT 46548 . 47019) (SK.SHOW.CIRCLE 47021 . 47667) (CIRCLE.INSIDEFN 47669 . 
-47934) (CIRCLE.REGIONFN 47936 . 49617) (CIRCLE.GLOBALREGIONFN 49619 . 51137) (CIRCLE.TRANSLATE 51139
- . 53000) (CIRCLE.READCHANGEFN 53002 . 57618) (CIRCLE.TRANSFORMFN 57620 . 59473) (CIRCLE.TRANSLATEPTS 
-59475 . 61089) (SK.CIRCLE.CREATE 61091 . 61934) (SET.CIRCLE.SCALE 61936 . 62702) (SK.BRUSH.READCHANGE 
-62704 . 65210)) (65213 65942 (SK.INSURE.BRUSH 65223 . 65617) (SK.INSURE.DASHING 65619 . 65940)) (67156
- 96650 (SKETCH.CREATE.ELLIPSE 67166 . 67765) (ELLIPSE.EXPANDFN 67767 . 71379) (ELLIPSE.DRAWFN 71381 . 
-75558) (ELLIPSE.INPUTFN 75560 . 78000) (SK.READ.ELLIPSE.MAJOR.PT 78002 . 78581) (
-SK.SHOW.ELLIPSE.MAJOR.RADIUS 78583 . 79338) (SK.READ.ELLIPSE.MINOR.PT 79340 . 80033) (
-SK.SHOW.ELLIPSE.MINOR.RADIUS 80035 . 80867) (ELLIPSE.INSIDEFN 80869 . 81139) (ELLIPSE.CREATE 81141 . 
-82516) (SK.UPDATE.ELLIPSE.AFTER.CHANGE 82518 . 82886) (ELLIPSE.REGIONFN 82888 . 85088) (
-ELLIPSE.GLOBALREGIONFN 85090 . 86903) (ELLIPSE.TRANSLATEFN 86905 . 89451) (ELLIPSE.TRANSFORMFN 89453
- . 90730) (ELLIPSE.TRANSLATEPTS 90732 . 92773) (MARK.SPOT 92775 . 94026) (DISTANCEBETWEEN 94028 . 
-94623) (SK.DISTANCE.TO 94625 . 95010) (SQUARE 95012 . 95054) (COMPUTE.ELLIPSE.ORIENTATION 95056 . 
-95775) (SK.COMPUTE.ELLIPSE.MINOR.RADIUS.PT 95777 . 96648)) (97763 138819 (SKETCH.CREATE.OPEN.CURVE 
-97773 . 98326) (OPENCURVE.INPUTFN 98328 . 99196) (SK.CURVE.CREATE 99198 . 100943) (MAXXEXTENT 100945
- . 101804) (MAXYEXTENT 101806 . 102666) (KNOT.SET.SCALE.FIELD 102668 . 103470) (OPENCURVE.DRAWFN 
-103472 . 104603) (OPENCURVE.EXPANDFN 104605 . 107920) (OPENCURVE.READCHANGEFN 107922 . 111124) (
-OPENCURVE.TRANSFORMFN 111126 . 113624) (OPENCURVE.TRANSLATEFN 113626 . 114048) (
-OPENCURVE.TRANSLATEPTSFN 114050 . 115431) (SKETCH.CREATE.CLOSED.CURVE 115433 . 115939) (
-CLOSEDCURVE.DRAWFN 115941 . 116725) (CLOSEDCURVE.EXPANDFN 116727 . 119840) (CLOSEDCURVE.REGIONFN 
-119842 . 120639) (CLOSEDCURVE.GLOBALREGIONFN 120641 . 122074) (READ.LIST.OF.POINTS 122076 . 124055) (
-CLOSEDCURVE.INPUTFN 124057 . 124702) (CLOSEDCURVE.READCHANGEFN 124704 . 127599) (
-CLOSEDCURVE.TRANSFORMFN 127601 . 129401) (CLOSEDCURVE.TRANSLATEPTSFN 129403 . 130748) (INVISIBLEPARTP 
-130750 . 131103) (SHOWSKETCHPOINT 131105 . 131410) (SHOWSKETCHXY 131412 . 131930) (KNOTS.REGIONFN 
-131932 . 132833) (OPENWIRE.GLOBALREGIONFN 132835 . 133699) (CURVE.REGIONFN 133701 . 134642) (
-OPENCURVE.GLOBALREGIONFN 134644 . 136051) (KNOTS.TRANSLATEFN 136053 . 137096) (REGION.CONTAINING.PTS 
-137098 . 138817)) (138820 161096 (CHANGE.ELTS.BRUSH.SIZE 138830 . 139440) (CHANGE.ELTS.BRUSH 139442 . 
-139959) (CHANGE.ELTS.BRUSH.SHAPE 139961 . 140362) (SK.CHANGE.BRUSH.SHAPE 140364 . 143876) (
-SK.CHANGE.BRUSH.COLOR 143878 . 148324) (SK.CHANGE.BRUSH.SIZE 148326 . 153284) (SK.CHANGE.ANGLE 153286
- . 156266) (SK.CHANGE.ARC.DIRECTION 156268 . 158647) (SK.SET.DEFAULT.BRUSH.SIZE 158649 . 159348) (
-READSIZECHANGE 159350 . 161094)) (161097 162716 (SK.CHANGE.ELEMENT.KNOTS 161107 . 162714)) (162717 
-163364 (SK.INSURE.POINT.LIST 162727 . 163180) (SK.INSURE.POSITION 163182 . 163362)) (164732 197055 (
-SKETCH.CREATE.WIRE 164742 . 165232) (CLOSEDWIRE.EXPANDFN 165234 . 167922) (KNOTS.INSIDEFN 167924 . 
-168645) (OPEN.WIRE.DRAWFN 168647 . 169239) (WIRE.EXPANDFN 169241 . 172488) (
-SK.UPDATE.WIRE.ELT.AFTER.CHANGE 172490 . 173011) (OPENWIRE.READCHANGEFN 173013 . 175506) (
-OPENWIRE.TRANSFORMFN 175508 . 177631) (OPENWIRE.TRANSLATEFN 177633 . 178057) (OPENWIRE.TRANSLATEPTSFN 
-178059 . 179338) (WIRE.INPUTFN 179340 . 180971) (SK.READ.WIRE.POINTS 180973 . 181504) (
-SK.READ.POINTS.WITH.FEEDBACK 181506 . 184273) (OPENWIRE.FEEDBACKFN 184275 . 185029) (
-CLOSEDWIRE.FEEDBACKFN 185031 . 186387) (CLOSEDWIRE.REGIONFN 186389 . 187374) (
-CLOSEDWIRE.GLOBALREGIONFN 187376 . 188428) (SK.WIRE.CREATE 188430 . 190193) (WIRE.ADD.POINT.TO.END 
-190195 . 191111) (READ.ARROW.CHANGE 191113 . 196589) (CHANGE.ELTS.ARROWHEADS 196591 . 197053)) (197056
- 208062 (SKETCH.CREATE.CLOSED.WIRE 197066 . 197627) (CLOSED.WIRE.INPUTFN 197629 . 197984) (
-CLOSED.WIRE.DRAWFN 197986 . 200031) (CLOSEDWIRE.READCHANGEFN 200033 . 204938) (CLOSEDWIRE.TRANSFORMFN 
-204940 . 206734) (CLOSEDWIRE.TRANSLATEPTSFN 206736 . 208060)) (208063 260769 (SK.EXPAND.ARROWHEADS 
-208073 . 208423) (SK.COMPUTE.ARC.ARROWHEAD.POINTS 208425 . 209806) (ARC.ARROWHEAD.POINTS 209808 . 
-211031) (SET.ARC.ARROWHEAD.POINTS 211033 . 212014) (SET.OPENCURVE.ARROWHEAD.POINTS 212016 . 212917) (
-SK.COMPUTE.CURVE.ARROWHEAD.POINTS 212919 . 214189) (SET.WIRE.ARROWHEAD.POINTS 214191 . 214944) (
-SK.COMPUTE.WIRE.ARROWHEAD.POINTS 214946 . 216211) (SK.EXPAND.ARROWHEAD 216213 . 217396) (CHANGED.ARROW
- 217398 . 220570) (SK.CHANGE.ARROWHEAD 220572 . 221025) (SK.CHANGE.ARROWHEAD1 221027 . 226282) (
-SK.CREATE.ARROWHEAD 226284 . 226804) (SK.ARROWHEAD.CREATE 226806 . 228380) (SK.ARROWHEAD.END.TEST 
-228382 . 229306) (READ.ARROWHEAD.END 229308 . 231333) (ARROW.HEAD.POSITIONS 231335 . 233175) (
-ARROWHEAD.POINTS.LIST 233177 . 237149) (CURVE.ARROWHEAD.POINTS 237151 . 238014) (LEFT.MOST.IS.BEGINP 
-238016 . 238897) (WIRE.ARROWHEAD.POINTS 238899 . 240425) (DRAWARROWHEADS 240427 . 242797) (
-\SK.DRAW.TRIANGLE.ARROWHEAD 242799 . 244459) (\SK.ENDPT.OF.ARROW 244461 . 246718) (
-\SK.ADJUST.FOR.ARROWHEADS 246720 . 249225) (SK.SET.ARROWHEAD.LENGTH 249227 . 250371) (
-SK.SET.ARROWHEAD.ANGLE 250373 . 251469) (SK.SET.ARROWHEAD.TYPE 251471 . 254760) (SK.SET.LINE.ARROWHEAD
- 254762 . 257175) (SK.UPDATE.ARROWHEAD.FORMAT 257177 . 259287) (SK.SET.LINE.LENGTH.MODE 259289 . 
-260767)) (260770 262571 (SK.INSURE.ARROWHEADS 260780 . 261962) (SK.ARROWHEADP 261964 . 262569)) (
-265368 327694 (SKETCH.CREATE.TEXT 265378 . 265892) (TEXT.CHANGEFN 265894 . 266286) (TEXT.READCHANGEFN 
-266288 . 274359) (\SK.READ.FONT.SIZE1 274361 . 276257) (SK.TEXT.ELT.WITH.SAME.FIELDS 276259 . 277899) 
-(SK.READFONTFAMILY 277901 . 279447) (CLOSE.PROMPT.WINDOW 279449 . 279873) (TEXT.DRAWFN 279875 . 280596
-) (TEXT.DRAWFN1 280598 . 284100) (TEXT.INSIDEFN 284102 . 284491) (TEXT.EXPANDFN 284493 . 286618) (
-SK.TEXT.LINE.REGIONS 286620 . 288494) (TEXT.UPDATE.GLOBAL.REGIONS 288496 . 289728) (REL.MOVE.REGION 
-289730 . 290267) (LTEXT.LINE.REGIONS 290269 . 293687) (TEXT.INPUTFN 293689 . 294199) (READ.TEXT 294201
- . 294949) (TEXT.POSITION.AND.CREATE 294951 . 297262) (CREATE.TEXT.ELEMENT 297264 . 298082) (
-SK.UPDATE.TEXT.AFTER.CHANGE 298084 . 298486) (SK.TEXT.FROM.TEXTBOX 298488 . 302294) (
-TEXT.SET.GLOBAL.REGIONS 302296 . 303589) (TEXT.REGIONFN 303591 . 304361) (TEXT.GLOBALREGIONFN 304363
- . 305051) (TEXT.TRANSLATEFN 305053 . 306368) (TEXT.TRANSFORMFN 306370 . 307493) (TEXT.TRANSLATEPTSFN 
-307495 . 308012) (TEXT.UPDATEFN 308014 . 312670) (SK.CHANGE.TEXT 312672 . 325760) (TEXT.SET.SCALES 
-325762 . 326730) (BREAK.AT.CARRIAGE.RETURNS 326732 . 327692)) (327695 346219 (ADD.KNOWN.SKETCH.FONT 
-327705 . 328696) (SK.PICK.FONT 328698 . 334230) (SK.CHOOSE.TEXT.FONT 334232 . 338180) (SK.NEXTSIZEFONT
- 338182 . 339449) (SK.DECREASING.FONT.LIST 339451 . 341324) (SK.GUESS.FONTSAVAILABLE 341326 . 346217))
- (346638 360781 (SK.SET.FONT 346648 . 348215) (SK.SET.TEXT.FONT 348217 . 349219) (SK.SET.TEXT.SIZE 
-349221 . 349908) (SK.SET.TEXT.HORIZ.ALIGN 349910 . 351484) (SK.READFONTSIZE 351486 . 353716) (
-SK.COLLECT.FONT.SIZES 353718 . 356636) (SK.SET.TEXT.VERT.ALIGN 356638 . 358680) (SK.SET.TEXT.LOOKS 
-358682 . 360139) (SK.SET.DEFAULT.TEXT.FACE 360141 . 360779)) (360782 361368 (CREATE.SKETCH.TERMTABLE 
-360792 . 361366)) (361369 363135 (SK.FONT.LIST 361379 . 361705) (SK.INSURE.FONT 361707 . 362229) (
-SK.INSURE.STYLE 362231 . 362749) (SK.INSURE.TEXT 362751 . 363133)) (363705 420998 (
-SKETCH.CREATE.TEXTBOX 363715 . 365357) (SK.COMPUTE.TEXTBOX.REGION.FOR.STRING 365359 . 367436) (
-SK.BREAK.INTO.LINES 367438 . 378624) (SK.BRUSH.SIZE 378626 . 379007) (SK.TEXTBOX.CREATE 379009 . 
-379806) (SK.TEXTBOX.CREATE1 379808 . 380872) (SK.UPDATE.TEXTBOX.AFTER.CHANGE 380874 . 381414) (
-SK.TEXTBOX.POSITION.IN.BOX 381416 . 383327) (TEXTBOX.CHANGEFN 383329 . 383803) (TEXTBOX.DRAWFN 383805
- . 385841) (SK.TEXTURE.AROUND.REGIONS 385843 . 391916) (ALL.EMPTY.REGIONS 391918 . 392408) (
-TEXTBOX.EXPANDFN 392410 . 399566) (TEXTBOX.INPUTFN 399568 . 401181) (TEXTBOX.INSIDEFN 401183 . 401596)
- (TEXTBOX.REGIONFN 401598 . 402452) (TEXTBOX.GLOBALREGIONFN 402454 . 402782) (
-TEXTBOX.SET.GLOBAL.REGIONS 402784 . 404115) (TEXTBOX.TRANSLATEFN 404117 . 405958) (
-TEXTBOX.TRANSLATEPTSFN 405960 . 408743) (TEXTBOX.TRANSFORMFN 408745 . 410413) (TEXTBOX.UPDATEFN 410415
- . 412308) (TEXTBOX.READCHANGEFN 412310 . 417199) (SK.TEXTBOX.TEXT.POSITION 417201 . 417622) (
-SK.TEXTBOX.FROM.TEXT 417624 . 420229) (ADD.EOLS 420231 . 420996)) (421527 425028 (
-SK.SET.TEXTBOX.VERT.ALIGN 421537 . 423417) (SK.SET.TEXTBOX.HORIZ.ALIGN 423419 . 425026)) (425411 
-469886 (SKETCH.CREATE.BOX 425421 . 425904) (SK.BOX.DRAWFN 425906 . 427065) (BOX.DRAWFN1 427067 . 
-429906) (KNOTS.OF.REGION 429908 . 431142) (SK.DRAWAREABOX 431144 . 437745) (SK.DRAWBOX 437747 . 438936
-) (SK.BOX.EXPANDFN 438938 . 442686) (SK.BOX.GETREGIONFN 442688 . 443874) (BOX.SET.SCALES 443876 . 
-445116) (SK.BOX.INPUTFN 445118 . 447051) (SK.BOX.CREATE 447053 . 447754) (SK.UPDATE.BOX.AFTER.CHANGE 
-447756 . 448267) (SK.BOX.INSIDEFN 448269 . 448659) (SK.BOX.REGIONFN 448661 . 449374) (
-SK.BOX.GLOBALREGIONFN 449376 . 450114) (SK.BOX.READCHANGEFN 450116 . 453837) (SK.CHANGE.FILLING 453839
- . 457787) (SK.CHANGE.FILLING.COLOR 457789 . 461445) (SK.BOX.TRANSLATEFN 461447 . 462626) (
-SK.BOX.TRANSFORMFN 462628 . 463573) (SK.BOX.TRANSLATEPTSFN 463575 . 465943) (UNSCALE.REGION.TO.GRID 
-465945 . 466870) (INCREASEREGION 466872 . 467463) (INSUREREGIONSIZE 467465 . 468636) (EXPANDREGION 
-468638 . 469518) (REGION.FROM.COORDINATES 469520 . 469884)) (470422 496777 (SKETCH.CREATE.ARC 470432
- . 471241) (ARC.DRAWFN 471243 . 472970) (ARC.EXPANDFN 472972 . 475305) (ARC.INPUTFN 475307 . 479525) (
-SK.INVERT.CIRCLE 479527 . 480387) (SK.READ.ARC.ANGLE.POINT 480389 . 480896) (SK.SHOW.ARC 480898 . 
-481508) (ARC.CREATE 481510 . 482865) (SK.UPDATE.ARC.AFTER.CHANGE 482867 . 483207) (ARC.MOVEFN 483209
- . 484792) (ARC.TRANSLATEPTS 484794 . 486679) (ARC.INSIDEFN 486681 . 486931) (ARC.REGIONFN 486933 . 
-488069) (ARC.GLOBALREGIONFN 488071 . 489793) (ARC.TRANSLATE 489795 . 490777) (ARC.TRANSFORMFN 490779
- . 493729) (ARC.READCHANGEFN 493731 . 496775)) (496778 505857 (SK.COMPUTE.ARC.ANGLE.PT 496788 . 497714
-) (SK.COMPUTE.ARC.ANGLE.PT.FROM.ANGLE 497716 . 498709) (SK.COMPUTE.ARC.PTS 498711 . 502283) (
-SK.SET.ARC.DIRECTION 502285 . 502859) (SK.SET.ARC.DIRECTION.CW 502861 . 503035) (
-SK.SET.ARC.DIRECTION.CCW 503037 . 503310) (SK.COMPUTE.SLOPE.OF.LINE 503312 . 503804) (
-SK.CREATE.ARC.USING 503806 . 505043) (SET.ARC.SCALES 505045 . 505855)) (505858 506303 (
-SK.INSURE.DIRECTION 505868 . 506301)) (507674 553533 (GETSKETCHELEMENTPROP 507684 . 508992) (
-\SK.GET.ARC.ANGLEPT 508994 . 509555) (\GETSKETCHELEMENTPROP1 509557 . 509811) (\SK.GET.BRUSH 509813 . 
-510737) (\SK.GET.FILLING 510739 . 511837) (\SK.GET.ARROWHEADS 511839 . 512618) (\SK.GET.FONT 512620 . 
-513100) (\SK.GET.JUSTIFICATION 513102 . 513626) (\SK.GET.DIRECTION 513628 . 514105) (\SK.GET.DASHING 
-514107 . 515126) (PUTSKETCHELEMENTPROP 515128 . 517397) (\SK.PUT.FILLING 517399 . 518669) (
-ADDSKETCHELEMENTPROP 518671 . 519476) (REMOVESKETCHELEMENTPROP 519478 . 520267) (\SK.PUT.FONT 520269
- . 521083) (\SK.PUT.JUSTIFICATION 521085 . 522096) (\SK.PUT.DIRECTION 522098 . 522705) (
-\SK.PUT.DASHING 522707 . 524042) (\SK.PUT.BRUSH 524044 . 525963) (\SK.PUT.ARROWHEADS 525965 . 527931) 
-(SK.COPY.ELEMENT.PROPERTY.LIST 527933 . 528509) (SKETCH.UPDATE 528511 . 529241) (SKETCH.UPDATE1 529243
- . 530531) (\SKELT.GET.SCALE 530533 . 531521) (\SKELT.PUT.SCALE 531523 . 532830) (\SKELT.PUT.DATA 
-532832 . 534629) (SK.REPLACE.TEXT.IN.ELEMENT 534631 . 535584) (\SKELT.GET.DATA 535586 . 536653) (
-\SK.GET.1STCONTROLPT 536655 . 538167) (\SK.PUT.1STCONTROLPT 538169 . 543642) (\SK.GET.2NDCONTROLPT 
-543644 . 544559) (\SK.PUT.2NDCONTROLPT 544561 . 548749) (\SK.GET.3RDCONTROLPT 548751 . 549629) (
-\SK.PUT.3RDCONTROLPT 549631 . 553531)) (553534 554115 (LOWERLEFTCORNER 553544 . 553790) (
-UPPERRIGHTCORNER 553792 . 554113)))))
+  (FILEMAP (NIL (14197 24607 (INIT.SKETCH.ELEMENTS 14207 . 21770) (CREATE.SKETCH.ELEMENT.TYPE 21772 . 
+23294) (SKETCH.ELEMENT.TYPEP 23296 . 23684) (SKETCH.ELEMENT.NAMEP 23686 . 23949) (
+\CURSOR.IN.MIDDLE.MENU 23951 . 24605)) (24648 25325 (SKETCHINCOLORP 24658 . 24978) (READ.COLOR.CHANGE 
+24980 . 25323)) (25834 28613 (SK.CREATE.DEFAULT.FILLING 25844 . 26145) (SKFILLINGP 26147 . 26780) (
+SK.INSURE.FILLING 26782 . 28210) (SK.INSURE.COLOR 28212 . 28611)) (28614 34224 (SK.TRANSLATE.MODE 
+28624 . 29406) (SK.CHANGE.FILLING.MODE 29408 . 32991) (READ.FILLING.MODE 32993 . 34222)) (34225 64899 
+(SKETCH.CREATE.CIRCLE 34235 . 35047) (CIRCLE.EXPANDFN 35049 . 38421) (CIRCLE.DRAWFN 38423 . 41424) (
+\CIRCLE.DRAWFN1 41426 . 44021) (CIRCLE.INPUTFN 44023 . 45872) (SK.UPDATE.CIRCLE.AFTER.CHANGE 45874 . 
+46233) (SK.READ.CIRCLE.POINT 46235 . 46706) (SK.SHOW.CIRCLE 46708 . 47354) (CIRCLE.INSIDEFN 47356 . 
+47621) (CIRCLE.REGIONFN 47623 . 49304) (CIRCLE.GLOBALREGIONFN 49306 . 50824) (CIRCLE.TRANSLATE 50826
+ . 52687) (CIRCLE.READCHANGEFN 52689 . 57305) (CIRCLE.TRANSFORMFN 57307 . 59160) (CIRCLE.TRANSLATEPTS 
+59162 . 60776) (SK.CIRCLE.CREATE 60778 . 61621) (SET.CIRCLE.SCALE 61623 . 62389) (SK.BRUSH.READCHANGE 
+62391 . 64897)) (64900 65629 (SK.INSURE.BRUSH 64910 . 65304) (SK.INSURE.DASHING 65306 . 65627)) (66843
+ 96337 (SKETCH.CREATE.ELLIPSE 66853 . 67452) (ELLIPSE.EXPANDFN 67454 . 71066) (ELLIPSE.DRAWFN 71068 . 
+75245) (ELLIPSE.INPUTFN 75247 . 77687) (SK.READ.ELLIPSE.MAJOR.PT 77689 . 78268) (
+SK.SHOW.ELLIPSE.MAJOR.RADIUS 78270 . 79025) (SK.READ.ELLIPSE.MINOR.PT 79027 . 79720) (
+SK.SHOW.ELLIPSE.MINOR.RADIUS 79722 . 80554) (ELLIPSE.INSIDEFN 80556 . 80826) (ELLIPSE.CREATE 80828 . 
+82203) (SK.UPDATE.ELLIPSE.AFTER.CHANGE 82205 . 82573) (ELLIPSE.REGIONFN 82575 . 84775) (
+ELLIPSE.GLOBALREGIONFN 84777 . 86590) (ELLIPSE.TRANSLATEFN 86592 . 89138) (ELLIPSE.TRANSFORMFN 89140
+ . 90417) (ELLIPSE.TRANSLATEPTS 90419 . 92460) (MARK.SPOT 92462 . 93713) (DISTANCEBETWEEN 93715 . 
+94310) (SK.DISTANCE.TO 94312 . 94697) (SQUARE 94699 . 94741) (COMPUTE.ELLIPSE.ORIENTATION 94743 . 
+95462) (SK.COMPUTE.ELLIPSE.MINOR.RADIUS.PT 95464 . 96335)) (97450 138506 (SKETCH.CREATE.OPEN.CURVE 
+97460 . 98013) (OPENCURVE.INPUTFN 98015 . 98883) (SK.CURVE.CREATE 98885 . 100630) (MAXXEXTENT 100632
+ . 101491) (MAXYEXTENT 101493 . 102353) (KNOT.SET.SCALE.FIELD 102355 . 103157) (OPENCURVE.DRAWFN 
+103159 . 104290) (OPENCURVE.EXPANDFN 104292 . 107607) (OPENCURVE.READCHANGEFN 107609 . 110811) (
+OPENCURVE.TRANSFORMFN 110813 . 113311) (OPENCURVE.TRANSLATEFN 113313 . 113735) (
+OPENCURVE.TRANSLATEPTSFN 113737 . 115118) (SKETCH.CREATE.CLOSED.CURVE 115120 . 115626) (
+CLOSEDCURVE.DRAWFN 115628 . 116412) (CLOSEDCURVE.EXPANDFN 116414 . 119527) (CLOSEDCURVE.REGIONFN 
+119529 . 120326) (CLOSEDCURVE.GLOBALREGIONFN 120328 . 121761) (READ.LIST.OF.POINTS 121763 . 123742) (
+CLOSEDCURVE.INPUTFN 123744 . 124389) (CLOSEDCURVE.READCHANGEFN 124391 . 127286) (
+CLOSEDCURVE.TRANSFORMFN 127288 . 129088) (CLOSEDCURVE.TRANSLATEPTSFN 129090 . 130435) (INVISIBLEPARTP 
+130437 . 130790) (SHOWSKETCHPOINT 130792 . 131097) (SHOWSKETCHXY 131099 . 131617) (KNOTS.REGIONFN 
+131619 . 132520) (OPENWIRE.GLOBALREGIONFN 132522 . 133386) (CURVE.REGIONFN 133388 . 134329) (
+OPENCURVE.GLOBALREGIONFN 134331 . 135738) (KNOTS.TRANSLATEFN 135740 . 136783) (REGION.CONTAINING.PTS 
+136785 . 138504)) (138507 160783 (CHANGE.ELTS.BRUSH.SIZE 138517 . 139127) (CHANGE.ELTS.BRUSH 139129 . 
+139646) (CHANGE.ELTS.BRUSH.SHAPE 139648 . 140049) (SK.CHANGE.BRUSH.SHAPE 140051 . 143563) (
+SK.CHANGE.BRUSH.COLOR 143565 . 148011) (SK.CHANGE.BRUSH.SIZE 148013 . 152971) (SK.CHANGE.ANGLE 152973
+ . 155953) (SK.CHANGE.ARC.DIRECTION 155955 . 158334) (SK.SET.DEFAULT.BRUSH.SIZE 158336 . 159035) (
+READSIZECHANGE 159037 . 160781)) (160784 162403 (SK.CHANGE.ELEMENT.KNOTS 160794 . 162401)) (162404 
+163051 (SK.INSURE.POINT.LIST 162414 . 162867) (SK.INSURE.POSITION 162869 . 163049)) (164419 196742 (
+SKETCH.CREATE.WIRE 164429 . 164919) (CLOSEDWIRE.EXPANDFN 164921 . 167609) (KNOTS.INSIDEFN 167611 . 
+168332) (OPEN.WIRE.DRAWFN 168334 . 168926) (WIRE.EXPANDFN 168928 . 172175) (
+SK.UPDATE.WIRE.ELT.AFTER.CHANGE 172177 . 172698) (OPENWIRE.READCHANGEFN 172700 . 175193) (
+OPENWIRE.TRANSFORMFN 175195 . 177318) (OPENWIRE.TRANSLATEFN 177320 . 177744) (OPENWIRE.TRANSLATEPTSFN 
+177746 . 179025) (WIRE.INPUTFN 179027 . 180658) (SK.READ.WIRE.POINTS 180660 . 181191) (
+SK.READ.POINTS.WITH.FEEDBACK 181193 . 183960) (OPENWIRE.FEEDBACKFN 183962 . 184716) (
+CLOSEDWIRE.FEEDBACKFN 184718 . 186074) (CLOSEDWIRE.REGIONFN 186076 . 187061) (
+CLOSEDWIRE.GLOBALREGIONFN 187063 . 188115) (SK.WIRE.CREATE 188117 . 189880) (WIRE.ADD.POINT.TO.END 
+189882 . 190798) (READ.ARROW.CHANGE 190800 . 196276) (CHANGE.ELTS.ARROWHEADS 196278 . 196740)) (196743
+ 207749 (SKETCH.CREATE.CLOSED.WIRE 196753 . 197314) (CLOSED.WIRE.INPUTFN 197316 . 197671) (
+CLOSED.WIRE.DRAWFN 197673 . 199718) (CLOSEDWIRE.READCHANGEFN 199720 . 204625) (CLOSEDWIRE.TRANSFORMFN 
+204627 . 206421) (CLOSEDWIRE.TRANSLATEPTSFN 206423 . 207747)) (207750 260456 (SK.EXPAND.ARROWHEADS 
+207760 . 208110) (SK.COMPUTE.ARC.ARROWHEAD.POINTS 208112 . 209493) (ARC.ARROWHEAD.POINTS 209495 . 
+210718) (SET.ARC.ARROWHEAD.POINTS 210720 . 211701) (SET.OPENCURVE.ARROWHEAD.POINTS 211703 . 212604) (
+SK.COMPUTE.CURVE.ARROWHEAD.POINTS 212606 . 213876) (SET.WIRE.ARROWHEAD.POINTS 213878 . 214631) (
+SK.COMPUTE.WIRE.ARROWHEAD.POINTS 214633 . 215898) (SK.EXPAND.ARROWHEAD 215900 . 217083) (CHANGED.ARROW
+ 217085 . 220257) (SK.CHANGE.ARROWHEAD 220259 . 220712) (SK.CHANGE.ARROWHEAD1 220714 . 225969) (
+SK.CREATE.ARROWHEAD 225971 . 226491) (SK.ARROWHEAD.CREATE 226493 . 228067) (SK.ARROWHEAD.END.TEST 
+228069 . 228993) (READ.ARROWHEAD.END 228995 . 231020) (ARROW.HEAD.POSITIONS 231022 . 232862) (
+ARROWHEAD.POINTS.LIST 232864 . 236836) (CURVE.ARROWHEAD.POINTS 236838 . 237701) (LEFT.MOST.IS.BEGINP 
+237703 . 238584) (WIRE.ARROWHEAD.POINTS 238586 . 240112) (DRAWARROWHEADS 240114 . 242484) (
+\SK.DRAW.TRIANGLE.ARROWHEAD 242486 . 244146) (\SK.ENDPT.OF.ARROW 244148 . 246405) (
+\SK.ADJUST.FOR.ARROWHEADS 246407 . 248912) (SK.SET.ARROWHEAD.LENGTH 248914 . 250058) (
+SK.SET.ARROWHEAD.ANGLE 250060 . 251156) (SK.SET.ARROWHEAD.TYPE 251158 . 254447) (SK.SET.LINE.ARROWHEAD
+ 254449 . 256862) (SK.UPDATE.ARROWHEAD.FORMAT 256864 . 258974) (SK.SET.LINE.LENGTH.MODE 258976 . 
+260454)) (260457 262258 (SK.INSURE.ARROWHEADS 260467 . 261649) (SK.ARROWHEADP 261651 . 262256)) (
+265055 327497 (SKETCH.CREATE.TEXT 265065 . 265579) (TEXT.CHANGEFN 265581 . 265973) (TEXT.READCHANGEFN 
+265975 . 274046) (\SK.READ.FONT.SIZE1 274048 . 276214) (SK.TEXT.ELT.WITH.SAME.FIELDS 276216 . 277856) 
+(SK.READFONTFAMILY 277858 . 280328) (CLOSE.PROMPT.WINDOW 280330 . 280754) (TEXT.DRAWFN 280756 . 281477
+) (TEXT.DRAWFN1 281479 . 284981) (TEXT.INSIDEFN 284983 . 285372) (TEXT.EXPANDFN 285374 . 287499) (
+SK.TEXT.LINE.REGIONS 287501 . 289375) (TEXT.UPDATE.GLOBAL.REGIONS 289377 . 290609) (REL.MOVE.REGION 
+290611 . 291148) (LTEXT.LINE.REGIONS 291150 . 294568) (TEXT.INPUTFN 294570 . 295080) (READ.TEXT 295082
+ . 295830) (TEXT.POSITION.AND.CREATE 295832 . 298143) (CREATE.TEXT.ELEMENT 298145 . 298963) (
+SK.UPDATE.TEXT.AFTER.CHANGE 298965 . 299367) (SK.TEXT.FROM.TEXTBOX 299369 . 303175) (
+TEXT.SET.GLOBAL.REGIONS 303177 . 304470) (TEXT.REGIONFN 304472 . 305242) (TEXT.GLOBALREGIONFN 305244
+ . 305932) (TEXT.TRANSLATEFN 305934 . 307249) (TEXT.TRANSFORMFN 307251 . 308374) (TEXT.TRANSLATEPTSFN 
+308376 . 308893) (TEXT.UPDATEFN 308895 . 313551) (SK.CHANGE.TEXT 313553 . 323831) (SK.CHANGE.FONT 
+323833 . 325563) (TEXT.SET.SCALES 325565 . 326533) (BREAK.AT.CARRIAGE.RETURNS 326535 . 327495)) (
+327498 340483 (SK.PICK.FONT 327508 . 331780) (SK.CHOOSE.TEXT.FONT 331782 . 336053) (SK.NEXTSIZEFONT 
+336055 . 337687) (SK.DECREASING.FONT.LIST 337689 . 340481)) (340902 352576 (SK.SET.FONT 340912 . 
+342179) (SK.SET.TEXT.FONT 342181 . 343183) (SK.SET.TEXT.SIZE 343185 . 343872) (SK.SET.TEXT.HORIZ.ALIGN
+ 343874 . 345448) (SK.READFONTSIZE 345450 . 347348) (SK.COLLECT.FONT.SIZES 347350 . 348431) (
+SK.SET.TEXT.VERT.ALIGN 348433 . 350475) (SK.SET.TEXT.LOOKS 350477 . 351934) (SK.SET.DEFAULT.TEXT.FACE 
+351936 . 352574)) (352577 353163 (CREATE.SKETCH.TERMTABLE 352587 . 353161)) (353164 354930 (
+SK.FONT.LIST 353174 . 353500) (SK.INSURE.FONT 353502 . 354024) (SK.INSURE.STYLE 354026 . 354544) (
+SK.INSURE.TEXT 354546 . 354928)) (355470 412763 (SKETCH.CREATE.TEXTBOX 355480 . 357122) (
+SK.COMPUTE.TEXTBOX.REGION.FOR.STRING 357124 . 359201) (SK.BREAK.INTO.LINES 359203 . 370389) (
+SK.BRUSH.SIZE 370391 . 370772) (SK.TEXTBOX.CREATE 370774 . 371571) (SK.TEXTBOX.CREATE1 371573 . 372637
+) (SK.UPDATE.TEXTBOX.AFTER.CHANGE 372639 . 373179) (SK.TEXTBOX.POSITION.IN.BOX 373181 . 375092) (
+TEXTBOX.CHANGEFN 375094 . 375568) (TEXTBOX.DRAWFN 375570 . 377606) (SK.TEXTURE.AROUND.REGIONS 377608
+ . 383681) (ALL.EMPTY.REGIONS 383683 . 384173) (TEXTBOX.EXPANDFN 384175 . 391331) (TEXTBOX.INPUTFN 
+391333 . 392946) (TEXTBOX.INSIDEFN 392948 . 393361) (TEXTBOX.REGIONFN 393363 . 394217) (
+TEXTBOX.GLOBALREGIONFN 394219 . 394547) (TEXTBOX.SET.GLOBAL.REGIONS 394549 . 395880) (
+TEXTBOX.TRANSLATEFN 395882 . 397723) (TEXTBOX.TRANSLATEPTSFN 397725 . 400508) (TEXTBOX.TRANSFORMFN 
+400510 . 402178) (TEXTBOX.UPDATEFN 402180 . 404073) (TEXTBOX.READCHANGEFN 404075 . 408964) (
+SK.TEXTBOX.TEXT.POSITION 408966 . 409387) (SK.TEXTBOX.FROM.TEXT 409389 . 411994) (ADD.EOLS 411996 . 
+412761)) (413292 416793 (SK.SET.TEXTBOX.VERT.ALIGN 413302 . 415182) (SK.SET.TEXTBOX.HORIZ.ALIGN 415184
+ . 416791)) (417176 461651 (SKETCH.CREATE.BOX 417186 . 417669) (SK.BOX.DRAWFN 417671 . 418830) (
+BOX.DRAWFN1 418832 . 421671) (KNOTS.OF.REGION 421673 . 422907) (SK.DRAWAREABOX 422909 . 429510) (
+SK.DRAWBOX 429512 . 430701) (SK.BOX.EXPANDFN 430703 . 434451) (SK.BOX.GETREGIONFN 434453 . 435639) (
+BOX.SET.SCALES 435641 . 436881) (SK.BOX.INPUTFN 436883 . 438816) (SK.BOX.CREATE 438818 . 439519) (
+SK.UPDATE.BOX.AFTER.CHANGE 439521 . 440032) (SK.BOX.INSIDEFN 440034 . 440424) (SK.BOX.REGIONFN 440426
+ . 441139) (SK.BOX.GLOBALREGIONFN 441141 . 441879) (SK.BOX.READCHANGEFN 441881 . 445602) (
+SK.CHANGE.FILLING 445604 . 449552) (SK.CHANGE.FILLING.COLOR 449554 . 453210) (SK.BOX.TRANSLATEFN 
+453212 . 454391) (SK.BOX.TRANSFORMFN 454393 . 455338) (SK.BOX.TRANSLATEPTSFN 455340 . 457708) (
+UNSCALE.REGION.TO.GRID 457710 . 458635) (INCREASEREGION 458637 . 459228) (INSUREREGIONSIZE 459230 . 
+460401) (EXPANDREGION 460403 . 461283) (REGION.FROM.COORDINATES 461285 . 461649)) (462187 488542 (
+SKETCH.CREATE.ARC 462197 . 463006) (ARC.DRAWFN 463008 . 464735) (ARC.EXPANDFN 464737 . 467070) (
+ARC.INPUTFN 467072 . 471290) (SK.INVERT.CIRCLE 471292 . 472152) (SK.READ.ARC.ANGLE.POINT 472154 . 
+472661) (SK.SHOW.ARC 472663 . 473273) (ARC.CREATE 473275 . 474630) (SK.UPDATE.ARC.AFTER.CHANGE 474632
+ . 474972) (ARC.MOVEFN 474974 . 476557) (ARC.TRANSLATEPTS 476559 . 478444) (ARC.INSIDEFN 478446 . 
+478696) (ARC.REGIONFN 478698 . 479834) (ARC.GLOBALREGIONFN 479836 . 481558) (ARC.TRANSLATE 481560 . 
+482542) (ARC.TRANSFORMFN 482544 . 485494) (ARC.READCHANGEFN 485496 . 488540)) (488543 497622 (
+SK.COMPUTE.ARC.ANGLE.PT 488553 . 489479) (SK.COMPUTE.ARC.ANGLE.PT.FROM.ANGLE 489481 . 490474) (
+SK.COMPUTE.ARC.PTS 490476 . 494048) (SK.SET.ARC.DIRECTION 494050 . 494624) (SK.SET.ARC.DIRECTION.CW 
+494626 . 494800) (SK.SET.ARC.DIRECTION.CCW 494802 . 495075) (SK.COMPUTE.SLOPE.OF.LINE 495077 . 495569)
+ (SK.CREATE.ARC.USING 495571 . 496808) (SET.ARC.SCALES 496810 . 497620)) (497623 498068 (
+SK.INSURE.DIRECTION 497633 . 498066)) (499439 545298 (GETSKETCHELEMENTPROP 499449 . 500757) (
+\SK.GET.ARC.ANGLEPT 500759 . 501320) (\GETSKETCHELEMENTPROP1 501322 . 501576) (\SK.GET.BRUSH 501578 . 
+502502) (\SK.GET.FILLING 502504 . 503602) (\SK.GET.ARROWHEADS 503604 . 504383) (\SK.GET.FONT 504385 . 
+504865) (\SK.GET.JUSTIFICATION 504867 . 505391) (\SK.GET.DIRECTION 505393 . 505870) (\SK.GET.DASHING 
+505872 . 506891) (PUTSKETCHELEMENTPROP 506893 . 509162) (\SK.PUT.FILLING 509164 . 510434) (
+ADDSKETCHELEMENTPROP 510436 . 511241) (REMOVESKETCHELEMENTPROP 511243 . 512032) (\SK.PUT.FONT 512034
+ . 512848) (\SK.PUT.JUSTIFICATION 512850 . 513861) (\SK.PUT.DIRECTION 513863 . 514470) (
+\SK.PUT.DASHING 514472 . 515807) (\SK.PUT.BRUSH 515809 . 517728) (\SK.PUT.ARROWHEADS 517730 . 519696) 
+(SK.COPY.ELEMENT.PROPERTY.LIST 519698 . 520274) (SKETCH.UPDATE 520276 . 521006) (SKETCH.UPDATE1 521008
+ . 522296) (\SKELT.GET.SCALE 522298 . 523286) (\SKELT.PUT.SCALE 523288 . 524595) (\SKELT.PUT.DATA 
+524597 . 526394) (SK.REPLACE.TEXT.IN.ELEMENT 526396 . 527349) (\SKELT.GET.DATA 527351 . 528418) (
+\SK.GET.1STCONTROLPT 528420 . 529932) (\SK.PUT.1STCONTROLPT 529934 . 535407) (\SK.GET.2NDCONTROLPT 
+535409 . 536324) (\SK.PUT.2NDCONTROLPT 536326 . 540514) (\SK.GET.3RDCONTROLPT 540516 . 541394) (
+\SK.PUT.3RDCONTROLPT 541396 . 545296)) (545299 545880 (LOWERLEFTCORNER 545309 . 545555) (
+UPPERRIGHTCORNER 545557 . 545878)))))
 STOP
diff --git a/library/sketch/SKETCH-ELEMENTS.LCOM b/library/sketch/SKETCH-ELEMENTS.LCOM
index 14b7a802..0f9dd78a 100644
Binary files a/library/sketch/SKETCH-ELEMENTS.LCOM and b/library/sketch/SKETCH-ELEMENTS.LCOM differ
diff --git a/library/sketch/SKETCH.LCOM b/library/sketch/SKETCH.LCOM
index 841eab4c..81c0d2b7 100644
Binary files a/library/sketch/SKETCH.LCOM and b/library/sketch/SKETCH.LCOM differ
diff --git a/library/tedit/TEDIT-COMMAND b/library/tedit/TEDIT-COMMAND
index 3211d03f..96aa3adf 100644
--- a/library/tedit/TEDIT-COMMAND
+++ b/library/tedit/TEDIT-COMMAND
@@ -1,14 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "17-Jul-2025 00:24:49" 
-{DSK}<Users>kaplan>Local>medley3.5>working-medley>library>tedit>TEDIT-COMMAND.;165 19015  
+(FILECREATED " 8-Nov-2025 10:03:19" {WMEDLEY}<library>TEDIT>TEDIT-COMMAND.;166 19030  
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS \TEDIT.COMMAND.RESET.SETUP)
+      :CHANGES-TO (FNS \TEDIT.COMMAND.FUNCTION?)
 
-      :PREVIOUS-DATE "23-Mar-2025 15:27:20" 
-{DSK}<Users>kaplan>Local>medley3.5>working-medley>library>tedit>TEDIT-COMMAND.;163)
+      :PREVIOUS-DATE "17-Jul-2025 00:24:49" {WMEDLEY}<library>TEDIT>TEDIT-COMMAND.;165)
 
 
 (PRETTYCOMPRINT TEDIT-COMMANDCOMS)
@@ -137,7 +135,8 @@
                (FSETTOBJ TEXTOBJ EDITOPACTIVE NIL)))])
 
 (\TEDIT.COMMAND.FUNCTION?
-  [LAMBDA (TSTREAM CHARCODE)                                 (* ; "Edited 23-Mar-2025 15:27 by rmk")
+  [LAMBDA (TSTREAM CHARCODE)                                 (* ; "Edited  8-Nov-2025 10:00 by rmk")
+                                                             (* ; "Edited 23-Mar-2025 15:27 by rmk")
     (DECLARE (SPECVARS TSTREAM CHARCODE))
 
     (* ;; "If CHARCODE is a function in TSTREAM's read table, execute the function.")
@@ -145,7 +144,7 @@
     (LET ((TEXTOBJ (GETTSTR TSTREAM TEXTOBJ))
           FN)
          (DECLARE (SPECVARS TEXTOBJ))
-         (CL:WHEN [AND (EQ (\TEDIT.TTC FUNCTIONCALL)
+         (CL:WHEN [AND (EQ (\TEDIT.TTC FN)
                            (\SYNCODE (fetch READSA of (FGETTOBJ TEXTOBJ TXTRTBL))
                                   CHARCODE))
                        (SETQ FN (CAR (fetch MACROFN of (GETHASH CHARCODE (fetch READMACRODEFS
@@ -303,7 +302,7 @@
 (GLOBALVARS || TEDIT.INTERRUPTS)
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (2709 10263 (\TEDIT.COMMAND.LOOP 2719 . 9060) (\TEDIT.COMMAND.FUNCTION? 9062 . 10261)) (
-10264 18725 (\TEDIT.INTERRUPT.SETUP 10274 . 11921) (\TEDIT.MARKACTIVE 11923 . 12252) (
-\TEDIT.MARKINACTIVE 12254 . 12470) (\TEDIT.COMMAND.RESET.SETUP 12472 . 18723)))))
+  (FILEMAP (NIL (2625 10278 (\TEDIT.COMMAND.LOOP 2635 . 8976) (\TEDIT.COMMAND.FUNCTION? 8978 . 10276)) (
+10279 18740 (\TEDIT.INTERRUPT.SETUP 10289 . 11936) (\TEDIT.MARKACTIVE 11938 . 12267) (
+\TEDIT.MARKINACTIVE 12269 . 12485) (\TEDIT.COMMAND.RESET.SETUP 12487 . 18738)))))
 STOP
diff --git a/library/tedit/TEDIT-COMMAND.LCOM b/library/tedit/TEDIT-COMMAND.LCOM
index 583d13aa..cf5bdabb 100644
Binary files a/library/tedit/TEDIT-COMMAND.LCOM and b/library/tedit/TEDIT-COMMAND.LCOM differ
diff --git a/library/tedit/TEDIT-FNKEYS b/library/tedit/TEDIT-FNKEYS
index d9da38e1..850b43ba 100644
--- a/library/tedit/TEDIT-FNKEYS
+++ b/library/tedit/TEDIT-FNKEYS
@@ -1,18 +1,18 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 7-Aug-2025 15:00:51" {WMEDLEY}<library>TEDIT>TEDIT-FNKEYS.;294 106161 
+(FILECREATED "24-Nov-2025 08:40:56" {WMEDLEY}<library>TEDIT>TEDIT-FNKEYS.;317 109076 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (VARS TEDIT-FNKEYSCOMS)
+      :CHANGES-TO (VARS TEDIT.BASIC.CHARBINDINGS)
 
-      :PREVIOUS-DATE " 6-Aug-2025 08:59:59" {WMEDLEY}<library>TEDIT>TEDIT-FNKEYS.;293)
+      :PREVIOUS-DATE "24-Nov-2025 00:38:18" {WMEDLEY}<library>TEDIT>TEDIT-FNKEYS.;316)
 
 
 (PRETTYCOMPRINT TEDIT-FNKEYSCOMS)
 
 (RPAQQ TEDIT-FNKEYSCOMS
-       ((COMS                                                (* ; 
+       [(COMS                                                (* ; 
                                                              "Public functions (binding data  below)")
               (FNS TEDIT.INSTALL.CHARBINDINGS TEDIT.CLEAR.CHARBINDINGS TEDIT.GET.CHARACTION 
                    TEDIT.GET.CHARBINDING TEDIT.GET.ALL.CHARBINDINGS TEDIT.CHARBINDINGS.INVERT 
@@ -30,7 +30,7 @@
         (FNS \TEDIT.ONECHAR.BACKWARD \TEDIT.ONECHAR.FORWARD \TEDIT.ONELINE.UP \TEDIT.ONELINE.DOWN 
              \TEDIT.ONELINE.MOVE \TEDIT.ONEWORD.BACKWARD \TEDIT.ONEWORD.FORWARD \TEDIT.LINE.BEGIN 
              \TEDIT.LINE.END \TEDIT.DOCUMENT.BEGIN \TEDIT.DOCUMENT.END)
-        (FNS \TEDIT.LINEDELETE.FORWARD \TEDIT.LINEDELETE.BACKWARD)
+        (FNS \TEDIT.LINEDELETE.FORWARD \TEDIT.LINEDELETE.BACKWARD \TEDIT.LINEDELETE)
         (FNS \TEDIT.KEY.NEST)
         (FNS \TEDIT.KEY.WRAP)
                                                              (* ; "From TEDITDORADOKEYS")
@@ -47,21 +47,39 @@
               (FNS \TEDIT.READTABLE \TEDIT.WORDBOUND.READTABLE TEDIT.GETSYNTAX TEDIT.SETSYNTAX 
                    TEDIT.GETFUNCTION TEDIT.SETFUNCTION TEDIT.WORDGET TEDIT.WORDSET 
                    TEDIT.ATOMBOUND.READTABLE))
-                                                             (* ; "Keybindings")
-        (DECLARE%: EVAL@COMPILE DONTCOPY (EXPORT (CONSTANTS \TEDIT.TTCCODES)
-                                                (MACROS \TEDIT.TTC)))
-        (VARS TEDIT.CHARACTIONS TEDIT.BASIC.CHARBINDINGS TEDIT.DORADO.CHARBINDINGS
-              (TEDIT.CHARBINDINGS (APPEND TEDIT.BASIC.CHARBINDINGS TEDIT.DORADO.CHARBINDINGS)))
-                                                             (* ; "Installation")
-        [DECLARE%: DONTEVAL@LOAD DOCOPY (VARS (TEDIT.READTABLE (\TEDIT.READTABLE))
-                                              (TEDIT.WORDBOUND.READTABLE (\TEDIT.WORDBOUND.READTABLE]
         
         (* ;; "On-screen formatting buttons (TEDIT.BUTTONS.BUILD) creates the default button menu")
 
-        (VARS TEDIT.BUTTONS.SPEC)
         (FNS TEDIT.BUTTONS.BUILD TEDIT.BUTTONBITMAP.FILL)
-        (INITVARS (TEDIT.BUTTONS.WINDOW NIL))
-        (VARS TEDIT.BUTTONBITMAP)))
+        (INITVARS TEDIT.BUTTONS.WINDOW)
+        (VARS TEDIT.BUTTONBITMAP)
+        [INITVARS (TEDIT.BUTTONS.SPEC '((Bold :BOLD.ON :BOLD.OFF)
+                                        (Italic :ITALIC.ON :ITALIC.OFF)
+                                        (Case :UCASE :LCASE)
+                                        ((Strike- out)
+                                         :STRIKEOUT.ON :STRIKEOUT.OFF)
+                                        ((Under- line)
+                                         :UNDERLINE.ON :UNDERLINE.OFF)
+                                        ((Super/ Sub)
+                                         :SUPERSCRIPT :SUBSCRIPT)
+                                        ((Larger Smaller)
+                                         :LARGER :SMALLER)
+                                        (Justify :QUAD)
+                                        (Defaults :DEFAULTS)
+                                        (Show :SHOW.CHARLOOKS)
+                                        (Redo :REDO]
+                                                             (* ; "Keybindings")
+        (DECLARE%: EVAL@COMPILE DONTCOPY (EXPORT (CONSTANTS \TEDIT.TTCCODES)
+                                                (MACROS \TEDIT.TTC)))
+        (FNS \TEDIT.TTCCLASS)
+        (VARS ORIG.TEDIT.CHARACTIONS)
+        (INITVARS (TEDIT.CHARACTIONS (APPEND ORIG.TEDIT.CHARACTIONS)))
+        (VARS TEDIT.BASIC.CHARBINDINGS TEDIT.DORADO.CHARBINDINGS)
+        (INITVARS (TEDIT.CHARBINDINGS (APPEND TEDIT.BASIC.CHARBINDINGS TEDIT.DORADO.CHARBINDINGS)))
+        (GLOBALVARS TEDIT.CHARBINDINGS TEDIT.CHARACTIONS)
+                                                             (* ; "Installation")
+        (DECLARE%: DONTEVAL@LOAD DOCOPY (VARS (TEDIT.READTABLE (\TEDIT.READTABLE))
+                                              (TEDIT.WORDBOUND.READTABLE (\TEDIT.WORDBOUND.READTABLE])
 
 
 
@@ -70,7 +88,9 @@
 (DEFINEQ
 
 (TEDIT.INSTALL.CHARBINDINGS
-  [LAMBDA (CHARBINDINGS RDTBL CHARACTIONS)                   (* ; "Edited  7-Apr-2025 20:01 by rmk")
+  [LAMBDA (CHARBINDINGS RDTBL CHARACTIONS)                   (* ; "Edited 24-Nov-2025 00:10 by rmk")
+                                                             (* ; "Edited 10-Nov-2025 16:47 by rmk")
+                                                             (* ; "Edited  7-Apr-2025 20:01 by rmk")
                                                              (* ; "Edited  5-Apr-2025 11:36 by rmk")
                                                              (* ; "Edited  1-Apr-2025 00:19 by rmk")
                                                              (* ; "Edited 18-Mar-2025 11:15 by rmk")
@@ -86,6 +106,7 @@
     (CL:UNLESS CHARBINDINGS (SETQ CHARBINDINGS TEDIT.CHARBINDINGS))
     (CL:UNLESS (LISTP CHARBINDINGS)
            (\ILLEGAL.ARG CHARBINDINGS))
+    (CL:UNLESS CHARACTIONS (SETQ CHARACTIONS TEDIT.CHARACTIONS))
     (CL:UNLESS (READTABLEP RDTBL)
         (SETQ RDTBL (if (NULL RDTBL)
                         then TEDIT.READTABLE
@@ -94,37 +115,21 @@
                                         TXTRTBL)
                                  TEDIT.READTABLE)
                       else (\ILLEGAL.ARG RDTBL))))
-    (CL:UNLESS CHARACTIONS (SETQ CHARACTIONS TEDIT.CHARACTIONS))
     (TEDIT.CONFLICTING.CHARBINDINGS (APPEND CHARBINDINGS (TEDIT.GET.ALL.CHARBINDINGS RDTBL)))
-    [for CB A ACTION in CHARBINDINGS first (TEDIT.CONFLICTING.CHARBINDINGS (APPEND CHARBINDINGS
-                                                                                  (
-                                                                           TEDIT.GET.ALL.CHARBINDINGS
-                                                                                   RDTBL)))
-       when (LISTP CB) unless (EQ '* (CAR CB)) when (AND [SETQ ACTION
-                                                          (find PAIR in CHARACTIONS
-                                                             suchthat 
-
-                                                                   (* ;; 
-                                                                  "An ASSOC that allows synonym keys")
-
-                                                                   (EQMEMB (CAR CB)
-                                                                          (CAR PAIR]
-                                                         (SETQ A (CADR ACTION)))
-       do (for CHAR in (CDR CB) do (CL:UNLESS (CHARCODEP CHAR)
-                                       (SETQ CHAR (CHARCODE.DECODE CHAR)))
-                                   (TEDIT.SETFUNCTION CHAR A RDTBL) 
+    (for CB ACTION in CHARBINDINGS when (LISTP CB) unless (EQ '* (CAR CB))
+       when (SETQ ACTION (CADR (ASSOC (CAR CB)
+                                      CHARACTIONS))) do (for CHAR in (CDR CB)
+                                                           do (CL:UNLESS (CHARCODEP CHAR)
+                                                                  (SETQ CHAR (CHARCODE.DECODE CHAR)))
+                                                              (TEDIT.SETFUNCTION CHAR ACTION RDTBL)))
                                                              (* ; "Set the method")
-                                   (CL:WHEN NIL
-                                       (ASSOC (CAR ACTION)
-                                              \TEDIT.TTCCODES)
-                                                             (* ; 
-                                                   "A tag like NEXT, UNDO. Setup the termtable FWIW ")
-                                       (TEDIT.SETSYNTAX CHAR (CAR ACTION)
-                                              RDTBL))]
     RDTBL])
 
 (TEDIT.CLEAR.CHARBINDINGS
-  [LAMBDA (RDTBL BINDINGS)                                   (* ; "Edited  5-Apr-2025 11:36 by rmk")
+  [LAMBDA (RDTBL BINDINGS)                                   (* ; "Edited 12-Nov-2025 14:44 by rmk")
+                                                             (* ; "Edited 10-Nov-2025 14:22 by rmk")
+                                                             (* ; "Edited  8-Nov-2025 10:00 by rmk")
+                                                             (* ; "Edited  5-Apr-2025 11:36 by rmk")
                                                              (* ; "Edited 18-Mar-2025 11:10 by rmk")
                                                              (* ; "Edited 15-Mar-2025 12:02 by rmk")
 
@@ -142,28 +147,31 @@
         [if (EQ BINDINGS T)
             then [MAPHASH (fetch READMACRODEFS of RDTBL)
                         (FUNCTION (LAMBDA (VAL CHARCODE)
-                                    (CL:WHEN (EQ (\TEDIT.TTC FUNCTIONCALL)
+                                    (CL:WHEN (EQ (\TEDIT.TTC FN)
                                                  (\SYNCODE (fetch READSA of RDTBL)
                                                         CHARCODE))
                                         (TEDIT.SETFUNCTION CHARCODE NIL RDTBL)
-                                        (CL:WHEN (ASSOC CHARCODE \TEDIT.TTCCODES)
+                                        (CL:WHEN (\TEDIT.TTCCLASS CHARCODE)
                                                              (* ; 
-                                                   "A tag like NEXT, UNDO. Setup the termtable FWIW ")
-                                            (TEDIT.SETSYNTAX CHARCODE CHARCODE RDTBL)))]
+                                     "A tag like NEXT, UNDO. Normalize and setup the termtable FWIW ")
+                                            (TEDIT.SETSYNTAX (\TEDIT.TTCCLASS CHARCODE)
+                                                   CHARCODE RDTBL)))]
                  BINDINGS
           else (for CB in BINDINGS when (LISTP CB) unless (EQ '* (CAR CB))
                   do (for CHARCODE in (CDR CB) do (CL:UNLESS (CHARCODEP CHARCODE)
                                                       (SETQ CHARCODE (CHARCODE.DECODE CHARCODE)))
                                                   (TEDIT.SETFUNCTION CHARCODE NIL RDTBL)
-                                                  (CL:WHEN (ASSOC (CAR CB)
-                                                                  \TEDIT.TTCCODES)
+                                                  (CL:WHEN (\TEDIT.TTCCLASS (CAR CB))
                                                              (* ; 
-                                                   "A tag like NEXT, UNDO. Setup the termtable FWIW ")
-                                                      (TEDIT.SETSYNTAX CHARCODE (CAR CB)
-                                                             RDTBL))])])
+                                     "A tag like NEXT, UNDO. Normalize and setup the termtable FWIW ")
+                                                      (TEDIT.SETSYNTAX (\TEDIT.TTCCLASS (CAR CB))
+                                                             CHARCODE RDTBL))])])
 
 (TEDIT.GET.CHARACTION
-  [LAMBDA (CHARCODE BINDINGS)                                (* ; "Edited  5-Apr-2025 11:36 by rmk")
+  [LAMBDA (CHARCODE BINDINGS)                                (* ; "Edited 12-Nov-2025 14:44 by rmk")
+                                                             (* ; "Edited 10-Nov-2025 15:55 by rmk")
+                                                             (* ; "Edited  8-Nov-2025 10:00 by rmk")
+                                                             (* ; "Edited  5-Apr-2025 11:36 by rmk")
                                                              (* ; "Edited 19-Mar-2025 14:51 by rmk")
                                                              (* ; "Edited 18-Mar-2025 11:07 by rmk")
                                                              (* ; "Edited 17-Mar-2025 09:43 by rmk")
@@ -184,39 +192,6 @@
                                        (RETURN (CL:IF (CDR $$VAL)
                                                    $$VAL
                                                    (CAR $$VAL))]
-      else (LET [(RDTBL (if (NULL BINDINGS)
-                            then TEDIT.READTABLE
-                          elseif (TEXTSTREAM BINDINGS T)
-                            then (OR (GETTOBJ (TEXTOBJ BINDINGS)
-                                            TXTRTBL)
-                                     TEDIT.READTABLE)
-                          elseif (READTABLEP BINDINGS)
-                          else (\ILLEGAL.ARG BINDINGS]
-                [MAPHASH (fetch READMACRODEFS of RDTBL)
-                       (FUNCTION (LAMBDA (VAL CCODE)
-                                   (CL:WHEN (AND (EQ CCODE CHARCODE)
-                                                 (EQ (\TEDIT.TTC FUNCTIONCALL)
-                                                     (\SYNCODE (fetch READSA of RDTBL)
-                                                            CHARCODE)))
-                                       (for CA in TEDIT.CHARACTIONS when (EQUAL (CADR CA)
-                                                                                (CADR VAL))
-                                          do (RETFROM (FUNCTION TEDIT.GET.CHARACTION)
-                                                    (CAR CA))))]
-                NIL])
-
-(TEDIT.GET.CHARBINDING
-  [LAMBDA (ACTION BINDINGS RETURNCODES)                      (* ; "Edited 23-Apr-2025 10:11 by rmk")
-                                                             (* ; "Edited  5-Apr-2025 11:37 by rmk")
-                                                             (* ; "Edited 18-Mar-2025 20:40 by rmk")
-
-    (* ;; "Returns the bindings for ACTION in BINDINGS, a binding list or a read-table specification. If BINDINGS is a readtable, looks at all currently installed bindings in that readtable.  If NIL, uses TEDIT.READTABLE.")
-
-    (if (LISTP BINDINGS)
-        then (for CB in BINDINGS when (EQ ACTION (CAR CB)) join 
-                                                                (* ;; 
-                                                  "Allow for duplicate bindings for the same action?")
-
-                                                                (APPEND (CDR CB)))
       else (LET ((RDTBL (if (NULL BINDINGS)
                             then TEDIT.READTABLE
                           elseif (TEXTSTREAM BINDINGS T)
@@ -225,25 +200,56 @@
                                      TEDIT.READTABLE)
                           elseif (READTABLEP BINDINGS)
                           else (\ILLEGAL.ARG BINDINGS)))
-                 [IMPL (CADR (find CA in TEDIT.CHARACTIONS suchthat (EQMEMB ACTION (CAR CA]
+                 VAL)
+                (CL:WHEN [AND (EQ (\TEDIT.TTC FN)
+                                  (\SYNCODE (fetch READSA of RDTBL)
+                                         CHARCODE))
+                              (SETQ VAL (fetch MACROFN of (GETHASH CHARCODE (fetch READMACRODEFS
+                                                                               of RDTBL]
+                    [CAR (find ACTION in TEDIT.CHARACTIONS suchthat (EQUAL VAL (CDR ACTION])])
+
+(TEDIT.GET.CHARBINDING
+  [LAMBDA (ACTION BINDINGS RETURNCODES)                      (* ; "Edited 10-Nov-2025 12:49 by rmk")
+                                                             (* ; "Edited  9-Nov-2025 10:10 by rmk")
+                                                             (* ; "Edited 23-Apr-2025 10:11 by rmk")
+                                                             (* ; "Edited  5-Apr-2025 11:37 by rmk")
+                                                             (* ; "Edited 18-Mar-2025 20:40 by rmk")
+
+    (* ;; "Returns the character bindings for ACTION in BINDINGS, a binding list or a read-table specification. If BINDINGS is a readtable, looks at all currently installed bindings in that readtable.  If NIL, uses TEDIT.READTABLE.")
+
+    (if (LISTP BINDINGS)
+        then (APPEND (CADR (ASSOC ACTION BINDINGS)))
+      else (LET ((RDTBL (if (NULL BINDINGS)
+                            then TEDIT.READTABLE
+                          elseif (TEXTSTREAM BINDINGS T)
+                            then (OR (GETTOBJ (TEXTOBJ BINDINGS)
+                                            TXTRTBL)
+                                     TEDIT.READTABLE)
+                          elseif (READTABLEP BINDINGS)
+                          else (\ILLEGAL.ARG BINDINGS)))
+                 (IMPL (CADR (ASSOC ACTION TEDIT.CHARACTIONS)))
                  CHARS)
-                (CL:WHEN IMPL
+                (CL:WHEN IMPL                                (* ; 
+                               "The hashtable doesn't have the action names, just the implementation")
                     [MAPHASH (fetch READMACRODEFS of RDTBL)
                            (FUNCTION (LAMBDA (VAL CCODE)
                                        (CL:WHEN (EQUAL IMPL (CADR VAL))
                                                              (* ; "charcode, not charname")
                                            (push CHARS (CL:IF RETURNCODES
                                                            CCODE
-                                                           (CHARCODE.ENCODE CCODE))))]
+                                                           (CHARCODE.ENCODE CCODE))))]
                     CHARS)])
 
 (TEDIT.GET.ALL.CHARBINDINGS
-  [LAMBDA (RDTBL RETURNCODES)                                (* ; "Edited 23-Apr-2025 10:11 by rmk")
+  [LAMBDA (RDTBL RETURNCODES)                                (* ; "Edited 12-Nov-2025 14:44 by rmk")
+                                                             (* ; "Edited 10-Nov-2025 13:07 by rmk")
+                                                             (* ; "Edited  8-Nov-2025 10:00 by rmk")
+                                                             (* ; "Edited 23-Apr-2025 10:11 by rmk")
                                                              (* ; "Edited  7-Apr-2025 22:11 by rmk")
                                                              (* ; "Edited  5-Apr-2025 11:37 by rmk")
                                                              (* ; "Edited 18-Mar-2025 20:51 by rmk")
 
-    (* ;; "Returns the charbindings instantiated in RDTBL, in the form of TEDIT.CHARBINDINGS:  (action . chars)")
+    (* ;; "Returns the character bindings instantiated in RDTBL, in the form of TEDIT.CHARBINDINGS:  (action . chars/codes)")
 
     (CL:UNLESS (READTABLEP RDTBL)
         (SETQ RDTBL (if (NULL RDTBL)
@@ -256,27 +262,28 @@
     (LET (ACTIONS)
          [MAPHASH (fetch READMACRODEFS of RDTBL)
                 (FUNCTION (LAMBDA (VAL CCODE)
-                            (CL:WHEN (EQ (\TEDIT.TTC FUNCTIONCALL)
+                            (CL:WHEN (EQ (\TEDIT.TTC FN)
                                          (\SYNCODE (fetch READSA of RDTBL)
                                                 CCODE))
                                 (for CA ANAME in TEDIT.CHARACTIONS when (LISTP CA)
                                    unless (EQ '* (CAR CA)) when (EQUAL (CADR CA)
                                                                        (CADR VAL))
-                                   do (SETQ ANAME (CAR (CL:IF (LISTP (CAR CA))
-                                                           (CAR CA)
-                                                           CA)))
-                                      (PUSH [CDR (OR (ASSOC ANAME ACTIONS)
-                                                     (CAR (PUSH ACTIONS (CONS ANAME]
-                                            CCODE)))]
+                                   do 
+                                      (* ;; "Same implementation")
+
+                                      (SETQ ANAME (CAR CA))
+                                      (PUSHMULTI ACTIONS (CAR CA)
+                                             CCODE)))]
          (SORT ACTIONS T)
          [for A S in ACTIONS do (SETQ S (SORT (CDR A)))
                                 (RPLACD A (CL:IF RETURNCODES
                                               S
-                                              (CHARCODE.ENCODE S))]
+                                              (CHARCODE.ENCODE S))]
          ACTIONS])
 
 (TEDIT.CHARBINDINGS.INVERT
-  [LAMBDA (CHARBINDINGS RETURNCODES)                         (* ; "Edited 23-Apr-2025 10:11 by rmk")
+  [LAMBDA (CHARBINDINGS RETURNCODES)                         (* ; "Edited 10-Nov-2025 16:21 by rmk")
+                                                             (* ; "Edited 23-Apr-2025 10:11 by rmk")
                                                              (* ; "Edited  7-Apr-2025 22:39 by rmk")
                                                              (* ; "Edited  4-Apr-2025 09:58 by rmk")
                                                              (* ; "Edited  1-Apr-2025 15:09 by rmk")
@@ -284,25 +291,24 @@
     (* ;; "Inverts CHARBINDINGS to return a list of (char/code . actions), usually a single action unless there is a conflict.. ")
 
     (for CB ACTIONSPERCHAR CA in CHARBINDINGS when (CDR (LISTP CB)) unless (EQ '* (CAR CB))
-       do [for CHAR CODE CACTIONS in (CDR CB) do (SETQ CODE (CHARCODE.DECODE CHAR))
-                                                 (SETQ CACTIONS (ASSOC CODE ACTIONSPERCHAR))
-                                                 (CL:UNLESS CACTIONS
-                                                     (push ACTIONSPERCHAR (SETQ CACTIONS (CONS CODE))
-                                                           ))
-                                                 (CL:UNLESS (MEMB (CAR CB)
-                                                                  (CDR CACTIONS))
-                                                     (push (CDR CACTIONS)
-                                                           (CAR CB)))]
+       do (for CHAR CODE CACTIONS in (CDR CB) eachtime (SETQ CODE (CHARCODE.DECODE CHAR))
+             do (PUSHMULTI-NEW ACTIONSPERCHAR CODE (CAR CB)))
        finally (SORT ACTIONSPERCHAR T)
              (CL:UNLESS RETURNCODES
                  (for APC in ACTIONSPERCHAR do (change (CAR APC)
-                                                      (CHARCODE.ENCODE DATUM))))
-             (RETURN ACTIONSPERCHAR])
+                                                      (CHARCODE.ENCODE DATUM))))
+             (RETURN (SORT ACTIONSPERCHAR T])
 
 (TEDIT.GET.ALL.CHARACTIONS
-  [LAMBDA (RDTBL RETURNCODES)                                (* ; "Edited 23-Apr-2025 10:11 by rmk")
+  [LAMBDA (RDTBL RETURNCODES)                                (* ; "Edited 12-Nov-2025 14:44 by rmk")
+                                                             (* ; "Edited 10-Nov-2025 13:37 by rmk")
+                                                             (* ; "Edited  8-Nov-2025 10:00 by rmk")
+                                                             (* ; "Edited 23-Apr-2025 10:11 by rmk")
                                                              (* ; "Edited  5-Apr-2025 11:37 by rmk")
                                                              (* ; "Edited 18-Mar-2025 20:51 by rmk")
+
+    (* ;; "Returns an alist containing all of the (character action) bindings in RDTBL.")
+
     (CL:UNLESS (READTABLEP RDTBL)
         (SETQ RDTBL (if (NULL RDTBL)
                         then TEDIT.READTABLE
@@ -311,27 +317,24 @@
                                         TXTRTBL)
                                  TEDIT.READTABLE)
                       else (\ILLEGAL.ARG RDTBL))))
-    (LET (ACTIONS)
+    (LET (BINDINGS)
          [MAPHASH (fetch READMACRODEFS of RDTBL)
                 (FUNCTION (LAMBDA (VAL CCODE)
-                            (CL:WHEN (EQ (\TEDIT.TTC FUNCTIONCALL)
+                            (CL:WHEN (EQ (\TEDIT.TTC FN)
                                          (\SYNCODE (fetch READSA of RDTBL)
                                                 CCODE))
                                 (for CA ANAME in TEDIT.CHARACTIONS when (LISTP CA)
                                    unless (EQ '* (CAR CA)) when (EQUAL (CADR CA)
                                                                        (CADR VAL))
-                                   do (SETQ ANAME (CAR (CL:IF (LISTP (CAR CA))
-                                                           (CAR CA)
-                                                           CA)))
-                                      (PUSH [CDR (OR (ASSOC ANAME ACTIONS)
-                                                     (CAR (PUSH ACTIONS (CONS ANAME]
-                                            CCODE)))]
-         (SORT ACTIONS T)
-         [for A S in ACTIONS do (SETQ S (SORT (CDR A)))
-                                (RPLACD A (CL:IF RETURNCODES
-                                              S
-                                              (CHARCODE.ENCODE S))]
-         ACTIONS])
+                                   do                        (* ; "Match on implementation")
+                                      (PUSHMULTI BINDINGS (CL:IF RETURNCODES
+                                                              CCODE
+                                                              (CHARCODE.ENCODE CCODE))
+                                             (CAR CA))))]
+         (SORT BINDINGS T)
+         (for B in BINDINGS do (change (CDR B)
+                                      (SORT DATUM)))
+         BINDINGS])
 
 (TEDIT.CONFLICTING.CHARBINDINGS
   [LAMBDA (CHARBINDINGS NOERROR)                             (* ; "Edited  7-Apr-2025 22:40 by rmk")
@@ -846,7 +849,8 @@
 (DEFINEQ
 
 (\TEDIT.LINEDELETE.FORWARD
-  [LAMBDA (TSTREAM TEXTOBJ SEL)                              (* ; "Edited  6-Apr-2025 14:41 by rmk")
+  [LAMBDA (TSTREAM TEXTOBJ SEL)                              (* ; "Edited 12-Nov-2025 16:14 by rmk")
+                                                             (* ; "Edited  6-Apr-2025 14:41 by rmk")
                                                              (* ; "Edited 15-Mar-2025 23:02 by rmk")
                                                              (* ; "Edited  9-Mar-2025 22:11 by rmk")
                                                              (* ; "Edited  4-Mar-2025 17:22 by rmk")
@@ -861,10 +865,11 @@
              (\TEDIT.NOSEL TSTREAM)
              (\TEDIT.UPDATE.SEL SEL HERE (IDIFFERENCE (FGETLD LINE LCHARLIM)
                                                 HERE))
-             (TEDIT.DELETE TSTREAM SEL))])
+             (\TEDIT.DELETE TSTREAM SEL))])
 
 (\TEDIT.LINEDELETE.BACKWARD
-  [LAMBDA (TSTREAM TEXTOBJ SEL)                              (* ; "Edited  6-Apr-2025 14:41 by rmk")
+  [LAMBDA (TSTREAM TEXTOBJ SEL)                              (* ; "Edited 12-Nov-2025 16:13 by rmk")
+                                                             (* ; "Edited  6-Apr-2025 14:41 by rmk")
                                                              (* ; "Edited 15-Mar-2025 23:02 by rmk")
                                                              (* ; "Edited  9-Mar-2025 22:11 by rmk")
                                                              (* ; "Edited  4-Mar-2025 17:22 by rmk")
@@ -880,7 +885,24 @@
              (\TEDIT.NOSEL TSTREAM)
              (\TEDIT.UPDATE.SEL SEL HERE (IDIFFERENCE (FGETLD LINE LCHAR1)
                                                 HERE))
-             (TEDIT.DELETE TEXTOBJ SEL))])
+             (\TEDIT.DELETE TSTREAM SEL))])
+
+(\TEDIT.LINEDELETE
+  [LAMBDA (TSTREAM TEXTOBJ SEL)                              (* ; "Edited 12-Nov-2025 16:14 by rmk")
+                                                             (* ; "Edited  6-Apr-2025 14:41 by rmk")
+                                                             (* ; "Edited 15-Mar-2025 23:02 by rmk")
+                                                             (* ; "Edited  9-Mar-2025 22:11 by rmk")
+                                                             (* ; "Edited  4-Mar-2025 17:22 by rmk")
+                                                             (* gbn "13-Dec-84 11:56")
+
+    (* ;; "Deletes from the beginning of the caret's line to the end of the caret's line.  Line must be visible in the selpane.")
+
+    (LET ((LINE (\TEDIT.SEL.L1 SEL NIL TEXTOBJ)))
+         (CL:WHEN LINE
+             (\TEDIT.NOSEL TSTREAM)
+             (\TEDIT.UPDATE.SEL SEL (FGETLD LINE LCHAR1)
+                    (FGETLD LINE LNCH))
+             (\TEDIT.DELETE TSTREAM SEL))])
 )
 (DEFINEQ
 
@@ -1268,7 +1290,8 @@
          RTBL])
 
 (\TEDIT.WORDBOUND.READTABLE
-  [LAMBDA NIL                                                (* ; "Edited  2-Aug-2025 22:06 by rmk")
+  [LAMBDA NIL                                                (* ; "Edited 12-Nov-2025 14:44 by rmk")
+                                                             (* ; "Edited  2-Aug-2025 22:06 by rmk")
                                                              (* ; "Edited 15-Mar-2025 12:00 by rmk")
                                                              (* ; "Edited 13-Mar-2025 22:24 by rmk")
                                                              (* ; "Edited 22-May-92 15:10 by jds")
@@ -1308,27 +1331,31 @@
           RTBL])
 
 (TEDIT.GETSYNTAX
-  [LAMBDA (CH TABLE)                                         (* ; "Edited 29-May-2025 16:20 by rmk")
+  [LAMBDA (CH TABLE)                                         (* ; "Edited 12-Nov-2025 14:46 by rmk")
+                                                             (* ; "Edited 10-Nov-2025 13:36 by rmk")
+                                                             (* ; "Edited  8-Nov-2025 13:32 by rmk")
+                                                             (* ; "Edited 29-May-2025 16:20 by rmk")
                                                              (* ; "Edited 12-Mar-2025 12:55 by rmk")
                                                              (* ; "Edited 24-Dec-2023 09:47 by rmk")
                                                              (* ; "Edited 31-Mar-87 10:01 by jds")
 
-    (* ;; "Find TEdit's interpretation of a given character")
+    (* ;; "Map back to documented syntax-class names just for those defined classes, otherwise FN, for compatibility with documentation and history.  ")
 
-    (CAR (find TTC (SYNCODE _ (\SYNCODE (fetch READSA of (if (NULL TABLE)
-                                                             then TEDIT.READTABLE
-                                                           elseif (TEXTSTREAM TABLE T)
-                                                             then (OR (GETTOBJ (TEXTOBJ TABLE)
-                                                                             TXTRTBL)
-                                                                      TEDIT.READTABLE)
-                                                           else TABLE))
-                                     (CL:IF (OR (LITATOM CH)
-                                                (STRINGP CH))
-                                         (CHARCODE.DECODE CH)
-                                         CH))) in \TEDIT.TTCCODES suchthat (EQ SYNCODE (CADR TTC])
+    (SELECTQ (TEDIT.GET.CHARACTION CH TABLE)
+        (:CHARDELETE.BACKWARD 
+             'CHARDELETE)
+        (:WORDDELETE.BACKWARD 
+             'WORDDELETE)
+        (:DELETE 'DELETE)
+        (:UNDO 'UNDO)
+        (:REDO 'REDO)
+        (:NEXT 'NEXT)
+        (NIL 'NONE)
+        'FN])
 
 (TEDIT.SETSYNTAX
-  [LAMBDA (CHAR CLASS RDTBL)                                 (* ; "Edited 13-Mar-2025 21:52 by rmk")
+  [LAMBDA (CHAR CLASS RDTBL)                                 (* ; "Edited 12-Nov-2025 14:44 by rmk")
+                                                             (* ; "Edited 13-Mar-2025 21:52 by rmk")
                                                              (* ; "Edited 24-Dec-2023 09:17 by rmk")
                                                              (* ; "Edited 31-Mar-87 10:00 by jds")
                                                              (* ; 
@@ -1351,7 +1378,9 @@
                    (\TEDIT.TTC NONE))))])
 
 (TEDIT.GETFUNCTION
-  [LAMBDA (CHARCODE RDTBL)                                   (* ; "Edited  5-Apr-2025 11:37 by rmk")
+  [LAMBDA (CHARCODE RDTBL)                                   (* ; "Edited 12-Nov-2025 14:44 by rmk")
+                                                             (* ; "Edited  8-Nov-2025 11:13 by rmk")
+                                                             (* ; "Edited  5-Apr-2025 11:37 by rmk")
                                                              (* ; "Edited 13-Mar-2025 22:56 by rmk")
                                                              (* ; "Edited  7-Mar-2025 12:02 by rmk")
                                                              (* jds "19-Sep-85 17:06")
@@ -1368,14 +1397,17 @@
                              TEDIT.READTABLE)
                   else RDTBL))
     (CL:WHEN (AND (READTABLEP RDTBL)
-                  (EQ (\TEDIT.TTC FUNCTIONCALL)
+                  (EQ (\TEDIT.TTC FN)
                       (\SYNCODE (fetch READSA of RDTBL)
                              CHARCODE))
                   (fetch READMACRODEFS of RDTBL))
         [CAR (FETCH MACROFN OF (GETHASH CHARCODE (fetch READMACRODEFS of RDTBL])])
 
 (TEDIT.SETFUNCTION
-  [LAMBDA (CHARCODE FN RDTBL)                                (* ; "Edited 13-Mar-2025 22:51 by rmk")
+  [LAMBDA (CHARCODE FN RDTBL)                                (* ; "Edited 24-Nov-2025 00:36 by rmk")
+                                                             (* ; "Edited 12-Nov-2025 14:44 by rmk")
+                                                             (* ; "Edited  8-Nov-2025 10:02 by rmk")
+                                                             (* ; "Edited 13-Mar-2025 22:51 by rmk")
                                                              (* ; "Edited  7-Mar-2025 12:03 by rmk")
                                                              (* ; "Edited 31-Mar-87 10:58 by jds")
                                                              (* ; 
@@ -1391,12 +1423,11 @@
                     then (OR (GETTOBJ (TEXTOBJ RDTBL)
                                     TXTRTBL)
                              TEDIT.READTABLE)
-                  else RDTBL))                               (* ; 
-                                                          "Mark the character as invoking a function")
+                  else RDTBL))
     (\SETSYNCODE (fetch READSA of RDTBL)
            CHARCODE
            (CL:IF FN
-               (\TEDIT.TTC FUNCTIONCALL)
+               (\TEDIT.TTC FN)
                (\TEDIT.TTC NONE)))
     (CL:UNLESS (fetch READMACRODEFS of RDTBL)
         (replace READMACRODEFS of RDTBL with (HARRAY 50)))   (* ; 
@@ -1414,7 +1445,8 @@
               (T (CHCON1 CH])
 
 (TEDIT.WORDSET
-  [LAMBDA (CHARCODE CLASS TABLE)                             (* ; "Edited 13-Mar-2025 21:43 by rmk")
+  [LAMBDA (CHARCODE CLASS TABLE)                             (* ; "Edited 12-Nov-2025 14:45 by rmk")
+                                                             (* ; "Edited 13-Mar-2025 21:43 by rmk")
                                                              (* jds " 1-JUN-83 12:23")
 
     (* ;; "Sets Tedit syntax bits in a termtable. ")
@@ -1450,389 +1482,8 @@
 
 
 
-(* ; "Keybindings")
-
-(DECLARE%: EVAL@COMPILE DONTCOPY 
-(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE 
-
-(RPAQQ \TEDIT.TTCCODES
-       ((NONE 0)
-        (CHARDELETE 1)
-        (WORDDELETE 2)
-        (DELETE 3)
-        (FUNCTIONCALL 4)
-        (REDO 5)
-        (UNDO 6)
-        (CMD 7)
-        (NEXT 8)
-        (EXPAND 9)
-        (CHARDELETE.FORWARD 10)
-        (WORDDELETE.FORWARD 11)
-        (PUNCT 20)
-        (TEXT 21)
-        (WHITESPACE 22)))
-
-
-(CONSTANTS \TEDIT.TTCCODES)
-)
-(DECLARE%: EVAL@COMPILE 
-
-(PUTPROPS \TEDIT.TTC MACRO [(CLASS)
-                            (CONSTANT (CADR (ASSOC 'CLASS \TEDIT.TTCCODES])
-)
-
-(* "END EXPORTED DEFINITIONS")
-
-)
-
-(RPAQQ TEDIT.CHARACTIONS
-       ((TEDIT-PF PF-TEDIT-FROM-TEXT)
-        
-        (* ;; "This defines the implementation of the named actions.  They are activated by keybinding specifications given to TEDIT.INSTALL.KEYBINDINGS.")
-
-        
-        (* ;; "")
-
-        
-        (* ;; "History")
-
-        (UNDO (TEDIT.UNDO TSTREAM))
-        (UNDO.UNDO \TEDIT.UNDO.UNDO)
-                                                             (* ; "CHECK")
-        (REDO TEDIT.REDO)
-        
-        (* ;; "")
-
-        
-        (* ;; "Find")
-
-        ((FIND.FORWARD FIND)
-         (\TEDIT.KEY.FIND TSTREAM))
-        (FIND.BACKWARD (\TEDIT.KEY.FIND TSTREAM NIL T))
-        (FIND.FORWARD-AGAIN (\TEDIT.KEY.FIND TSTREAM T))
-        (FIND.BACKWARD-AGAIN (\TEDIT.KEY.FIND TSTREAM T T))
-        (SUBSTITUTE \TEDIT.KEY.SUBSTITUTE)
-        (NEXT TEDIT.NEXT)
-        
-        (* ;; "")
-
-        
-        (* ;; "Character looks")
-
-        (BOLD.ON (\TEDIT.KEY.CHARLOOKS TSTREAM 'BOLD 'ON))
-        (BOLD.OFF (\TEDIT.KEY.CHARLOOKS TSTREAM 'BOLD 'OFF))
-        (BOLD.TOGGLE (\TEDIT.KEY.CHARLOOKS TSTREAM 'BOLD 'TOGGLE))
-        (ITALIC.ON (\TEDIT.KEY.CHARLOOKS TSTREAM 'ITALIC 'ON))
-        (ITALIC.OFF (\TEDIT.KEY.CHARLOOKS TSTREAM 'ITALIC 'OFF))
-        (ITALIC.TOGGLE (\TEDIT.KEY.CHARLOOKS TSTREAM 'ITALIC 'TOGGLE))
-        (UCASE (\TEDIT.KEY.TRANSFORM TSTREAM (FUNCTION U-CASECODE)))
-        (LCASE (\TEDIT.KEY.TRANSFORM TSTREAM (FUNCTION L-CASECODE)))
-        (INITIALCAP (\TEDIT.KEY.TRANSFORM TSTREAM (FUNCTION CAP-CASECODE)))
-        (STRIKEOUT.ON (\TEDIT.KEY.CHARLOOKS TSTREAM 'STRIKEOUT 'ON))
-        (STRIKEOUT.OFF (\TEDIT.KEY.CHARLOOKS TSTREAM 'STRIKEOUT 'OFF))
-        (STRIKEOUT.TOGGLE (\TEDIT.KEY.CHARLOOKS TSTREAM 'STRIKEOUT 'TOGGLE))
-        (UNDERLINE.ON (\TEDIT.KEY.CHARLOOKS TSTREAM 'UNDERLINE 'ON))
-        (UNDERLINE.OFF (\TEDIT.KEY.CHARLOOKS TSTREAM 'UNDERLINE 'OFF))
-        (UNDERLINE.TOGGLE (\TEDIT.KEY.CHARLOOKS TSTREAM 'UNDERLINE 'TOGGLE))
-        (OVERLINE.ON (\TEDIT.KEY.CHARLOOKS TSTREAM 'OVERLINE 'ON))
-        (OVERLINE.OFF (\TEDIT.KEY.CHARLOOKS TSTREAM 'OVERLINE 'OFF))
-        (OVERLINE.TOGGLE (\TEDIT.KEY.CHARLOOKS TSTREAM 'OVERLINE 'TOGGLE))
-        (UNBREAKABLE.ON (\TEDIT.KEY.CHARLOOKS TSTREAM 'UNBREAKABLE 'ON))
-        (UNBREAKABLE.OFF (\TEDIT.KEY.CHARLOOKS TSTREAM 'UNBREAKABLE 'OFF))
-        (UNBREAKABLE.TOGGLE (\TEDIT.KEY.CHARLOOKS TSTREAM 'UNBREAKABLE 'TOGGLE))
-        (SUBSCRIPT \TEDIT.SUBSCRIPTSEL)
-        (SUPERSCRIPT \TEDIT.SUPERSCRIPTSEL)
-        (SMALLER (\TEDIT.KEY.SIZE TSTREAM '-))
-        (LARGER (\TEDIT.KEY.SIZE TSTREAM '+))
-        (FAMILYN (\TEDIT.KEY.FAMILYN TSTREAM CHARCODE))
-        (DEFAULTS \TEDIT.DEFAULTSSEL)
-        (SHOW.CHARLOOKS \TEDIT.SHOWCARETLOOKS)
-        
-        (* ;; "")
-
-        
-        (* ;; "Paragraph looks")
-
-        (NEST (\TEDIT.KEY.NEST TSTREAM))
-        (UNNEST (\TEDIT.KEY.NEST TSTREAM T))
-        ((QUAD CENTER)
-         (\TEDIT.KEY.QUAD TSTREAM))
-        (QUAD.REVERSE (\TEDIT.KEY.QUAD TSTREAM T))
-        
-        (* ;; "")
-
-        
-        (* ;; "Cursor/selection")
-
-        (ONECHAR.BACKWARD \TEDIT.ONECHAR.BACKWARD)
-        (ONECHAR.FORWARD \TEDIT.ONECHAR.FORWARD)
-        (LINE.UP \TEDIT.ONELINE.UP)
-        (LINE.DOWN \TEDIT.ONELINE.DOWN)
-        (ONEWORD.FORWARD \TEDIT.ONEWORD.FORWARD)
-        (ONEWORD.BACKWARD \TEDIT.ONEWORD.BACKWARD)
-        (LINE.BEGIN \TEDIT.LINE.BEGIN)
-        (LINE.END \TEDIT.LINE.END)
-        (DOCUMENT.BEGIN \TEDIT.DOCUMENT.BEGIN)
-        (DOCUMENT.END \TEDIT.DOCUMENT.END)
-        (ALL \TEDIT.SELECT.ALL)
-        
-        (* ;; "")
-
-        
-        (* ;; "Deletion ")
-
-        ((CHARDELETE CHARDELETE.BACKWORD)
-         (\TEDIT.CHARDELETE TSTREAM))
-        (CHARDELETE.FORWARD (\TEDIT.CHARDELETE TSTREAM T))
-        (WORDDELELETE \TEDIT.WORDDELETE)
-        (WORDDELETE.FORWARD \TEDIT.WORDDELETE.FORWARD)
-        (LINEDELETE.FORWARD \TEDIT.LINEDELETE.FORWARD)
-        (LINEDELETE.BACKWARD \TEDIT.LINEDELETE.BACKWARD)
-        
-        (* ;; "")
-
-        
-        (* ;; "Miscellaneous")
-
-        (MANPAGE \TEDIT.MANPAGE)
-        (OPEN.SEDIT \TEDIT.CALL.ED)
-        (PRINT.MENU \TEDIT.PRINT.MENU)
-        (EXPAND \TEDIT.ABBREV.EXPAND)
-        (GET.OBJECT GET.OBJ.FROM.USER)
-        (OPENLINE \TEDIT.KEY.OPENLINE)
-        
-        (* ;; "")
-
-        
-        (* ;; "From TEDITDORADOKEYS")
-
-        (WRAP.PARENS (\TEDIT.KEY.WRAP TSTREAM "(" ")"))
-        (WRAP.NEUTRAL.DOUBLEQUOTES (\TEDIT.KEY.WRAP TSTREAM "%"" "%""))
-        [WRAP.REAL.DOUBLEQUOTES (\TEDIT.KEY.WRAP TSTREAM (CHARACTER (CHARCODE LEFT-DOUBLEQUOTE))
-                                       (CHARACTER (CHARCODE RIGHT-DOUBLEQUOTE]
-        
-        (* ;; "")
-
-        
-        (* ;; "Clipboard")
-
-        (CLIPBOARD-PASTE PASTEFROMCLIPBOARD)
-        (CLIPBOARD-COPY \TEDIT.COPYTOCLIPBOARD)
-        (CLIPBOARD-EXTRACT \TEDIT.EXTRACTTOCLIPBOARD)
-        
-        (* ;; "")
-
-        
-        (* ;; "Wheelscroll")
-
-        (WHEELSCROLL-UP (WHEELSCROLL 'VERTICAL T))
-        (WHEELSCROLL-DOWN (WHEELSCROLL 'VERTICAL))
-        (WHEELSCROLL-LEFT (WHEELSCROLL 'HORIZONTAL))
-        (WHEELSCROLL-RIGHT (WHEELSCROLL 'HORIZONTAL T))))
-
-(RPAQQ TEDIT.BASIC.CHARBINDINGS
-       (
-        (* ;; "Establishes key bindings for particular Tedit key actions. Function,xxx roughly correspond to Koto release notes, but this preserves the immediately preceding assignments if those drifted away from the Koto notes. There is no obvious way of typing Function.  Maybe Meta,^xxx instead, as in DORADO.KEYBINDINGS.  (But CTRL collapses upper and lower case).")
-
-        
-        (* ;; "")
-
-        
-        (* ;; "History")
-
-        (UNDO "Meta,u" "Meta,z" "Function,4" "Function,44")
-        (UNDO.UNDO "Meta,U" "Meta,Z")
-        (REDO "Meta,r" "Meta,R" "Function,10" "Function,50")
-        
-        (* ;; "")
-
-        
-        (* ;; "Find")
-
-        (FIND.FORWARD "Meta,f" "Function,3" "Function,43")
-        (FIND.BACKWARD "Meta,F")
-        (FIND.FORWARD-AGAIN "Meta,g")
-        (FIND.BACKWARD-AGAIN "Meta,G")
-        (SUBSTITUTE "Meta,s" "Meta,S")
-        (NEXT "Meta,N" "Meta,n" "Function,22")
-        
-        (* ;; "")
-
-        
-        (* ;; "Character looks")
-
-        (BOLD.ON "Function,102")
-        (BOLD.OFF "Function,142")
-        (BOLD.TOGGLE)
-        (ITALIC.ON "Function,103")
-        (ITALIC.OFF "Function,143")
-        (ITALIC.TOGGLE)
-        (UCASE "Function,104")
-        (LCASE "Function,144")
-        (STRIKEOUT.ON "Function,105")
-        (STRIKEOUT.OFF "Function,145")
-        (STRIKEOUT.TOGGLE)
-        (UNDERLINE.ON "Function,106")
-        (UNDERLINE.OFF "Function,146")
-        (UNDERLINE.TOGGLE)
-        (OVERLINE.ON)
-        (OVERLINE.OFF)
-        (OVERLINE.TOGGLE)
-        (SUBSCRIPT "Function,114")
-        (SUPERSCRIPT "Function,113")
-        (SMALLER "Function,110")
-        (LARGER "Function,150")
-        (FAMILYN "Meta,One" "Meta,Two" "Meta,Three" "Meta,Four" "Meta,Five" "Meta,Six")
-        (DEFAULTS "Function,115" "Function,155")
-        (SHOW.CHARLOOKS "Function,1")
-        
-        (* ;; "")
-
-        
-        (* ;; "Paragraph looks")
-
-        (QUAD "Function,101")
-        (NEST "Meta,[")
-        (UNNEST "Meta,]")
-        
-        (* ;; "")
-
-        
-        (* ;; "Cursor/selection")
-
-        (ONECHAR.BACKWARD "Meta,<" "Meta,,")
-                                                             (* ; "From arrows")
-        (ONECHAR.FORWARD "Meta,>" "Meta,.")
-        (LINE.UP "Meta,^")
-        (LINE.DOWN "Meta,LF")
-        (ONEWORD.FORWARD)
-        (ONEWORD.BACKWARD)
-        (LINE.BEGIN)
-        (LINE.END)
-        (ALL "Meta,a" "Meta,A")
-        
-        (* ;; "")
-
-        
-        (* ;; "Deletion")
-
-        (CHARDELETE "BS" "^A")
-                                                             (* ; "CHARDELETE/WORDDELETE are TTC")
-        (CHARDELETE.FORWARD "^W" "^U")
-                                                             (* ; "keyactions for DEL key ??")
-        (WORDDELELETE)
-        (WORDDELETE.FORWARD)
-                                                             (* ; "^W is used for chardelete forward")
-        (LINEDELETE.FORWARD)
-        (LINEDELETE.BACKWARD)
-        
-        (* ;; "")
-
-        
-        (* ;; "Miscellaneous")
-
-        (MANPAGE "Meta,D" "Meta,d")
-        (OPEN.SEDIT "Meta,O" "Meta,o")
-        (PRINT.MENU "Meta,P" "Meta,p")
-        (EXPAND "^X")
-        (GET.OBJECT "^O")
-        
-        (* ;; "")
-
-        
-        (* ;; "Wheelscroll  ")
-
-        (WHEELSCROLL-UP "WHEELSCROLL-UP")
-        (WHEELSCROLL-DOWN "WHEELSCROLL-DOWN")
-        (WHEELSCROLL-LEFT "WHEELSCROLL-LEFT")
-        (WHEELSCROLL-RIGHT "WHEELSCROLL-RIGHT")
-        
-        (* ;; "")
-
-        
-        (* ;; "Clipboard")
-
-        (CLIPBOARD-PASTE "Meta,V" "Meta,v")
-        (CLIPBOARD-COPY "Meta,C" "Meta,c")
-        (CLIPBOARD-EXTRACT "Meta,X" "Meta,x")))
-
-(RPAQQ TEDIT.DORADO.CHARBINDINGS
-       (
-        (* ;; "Taken from lispusers>TKDORADO, these make the indicated Tedit commands available from the Dorado keyboard.")
-
-        (DEFAULTS "Meta,^V")
-        (BOLD.ON "Meta,^B" "Meta,b")
-        (BOLD.OFF "Meta,^N" "Meta,B")
-        (ITALIC.ON "Meta,^I")
-        (ITALIC.OFF "Meta,^O")
-        (OVERLINE.ON "Meta,^D")
-        (OVERLINE.OFF "Meta,^F")
-        (STRIKEOUT.ON "Meta,^G")
-        (STRIKEOUT.OFF "Meta,^H")
-        (* (UNDERLINE.ON "Meta,^J")
-           conflicts with LINE.DOWN)
-        (UNDERLINE.OFF "Meta,^K")
-        (SMALLER "Meta,^[")
-        (LARGER "Meta,^^]")
-        (SUBSCRIPT "Meta,^^")
-        (SUPERSCRIPT "Meta,^_")
-        (QUAD "Meta,^C")
-        
-        (* ;; "Mappings from lispusers>TEDITDORADOKEYS")
-
-        (* ("Meta,c" QUAD)
-           ("Meta,C" QUAD)
-           ("Meta,x" EXPAND)
-           ("Meta,X" EXPAND)
-           conflict with clipboard)
-        (* ("Meta,^" SUBSCRIPT)
-           conflicts with LINE.UP)
-        (BOLD.ON "Meta,b")
-        (BOLD.OFF "Meta,B")
-        (ITALIC.ON "Meta,i")
-        (ITALIC.OFF "Meta,I")
-        (STRIKEOUT.ON "Meta,=")
-        (STRIKEOUT.OFF "Meta,+")
-        (UNDERLINE.ON "Meta,-")
-        (UNDERLINE.OFF "Meta,_")
-        (WRAP.PARENS "Meta,(" "Meta,Nine")
-        (WRAP.NEUTRAL.DOUBLEQUOTES "Meta,%"")
-        (WRAP.REAL.DOUBLEQUOTES "Meta,'")))
-
-(RPAQ TEDIT.CHARBINDINGS (APPEND TEDIT.BASIC.CHARBINDINGS TEDIT.DORADO.CHARBINDINGS))
-
-
-
-(* ; "Installation")
-
-(DECLARE%: DONTEVAL@LOAD DOCOPY 
-
-(RPAQ TEDIT.READTABLE (\TEDIT.READTABLE))
-
-(RPAQ TEDIT.WORDBOUND.READTABLE (\TEDIT.WORDBOUND.READTABLE))
-)
-
-
-
 (* ;; "On-screen formatting buttons (TEDIT.BUTTONS.BUILD) creates the default button menu")
 
-
-(RPAQQ TEDIT.BUTTONS.SPEC
-       ((Bold BOLD.ON BOLD.OFF)
-        (Italic ITALIC.ON ITALIC.OFF)
-        (Case UCASE LCASE)
-        ((Strike- out)
-         STRIKEOUT.ON STRIKEOUT.OFF)
-        ((Under- line)
-         UNDERLINE.ON UNDERLINE.OFF)
-        ((Super/ Sub)
-         SUPERSCRIPT SUBSCRIPT)
-        ((Larger Smaller)
-         LARGER SMALLER)
-        (Justify QUAD)
-        (Defaults DEFAULTS)
-        (Show SHOW.CHARLOOKS)
-        (Redo REDO)))
 (DEFINEQ
 
 (TEDIT.BUTTONS.BUILD
@@ -1938,30 +1589,427 @@
 
 (RPAQQ TEDIT.BUTTONBITMAP #*(78 48)OOOOOOOOOOOOOOOOOOOLON@@@@@@@@@@@@@@@AOLO@@@@@@@@@@@@@@@@@CLO@@@@@@@@@@@@@@@@@CLMH@@@@@@@@@@@@@@@@DLNLGOOOOOOOOOOOOOOHHLMFL@@@@@@@@@@@@@@M@LJK@@@@@@@@@@@@@@@B@DMF@@@@@@@@@@@@@@@A@DJN@@@@@@@@@@@@@@@AHDMD@@@@@@@@@@@@@@@@HDJL@@@@@@@@@@@@@@@@HDMD@@@@@@@@@@@@@@@@HDJL@@@@@@@@@@@@@@@@HDMD@@@@@@@@@@@@@@@@HDJL@@@@@@@@@@@@@@@@HDMD@@@@@@@@@@@@@@@@HDJL@@@@@@@@@@@@@@@@HDMD@@@@@@@@@@@@@@@@HDJL@@@@@@@@@@@@@@@@HDMD@@@@@@@@@@@@@@@@HDJL@@@@@@@@@@@@@@@@HDMD@@@@@@@@@@@@@@@@HDJL@@@@@@@@@@@@@@@@HDMD@@@@@@@@@@@@@@@@HDJL@@@@@@@@@@@@@@@@HDMD@@@@@@@@@@@@@@@@HDJL@@@@@@@@@@@@@@@@HDMD@@@@@@@@@@@@@@@@HDJL@@@@@@@@@@@@@@@@HDMD@@@@@@@@@@@@@@@@HDJL@@@@@@@@@@@@@@@@HDMD@@@@@@@@@@@@@@@@HDJL@@@@@@@@@@@@@@@@HDMD@@@@@@@@@@@@@@@@HDJL@@@@@@@@@@@@@@@@HDMD@@@@@@@@@@@@@@@@HDJL@@@@@@@@@@@@@@@@HDMF@@@@@@@@@@@@@@@AHDJJ@@@@@@@@@@@@@@@A@DMG@@@@@@@@@@@@@@@B@DNEL@@@@@@@@@@@@@@O@LLIGOOOOOOOOOOOOOOMHLOBBJJJJJJJJJJJJJJJLLNDEEEEEEEEEEEEEEEEGLOHJJJJJJJJJJJJJJJJKLOLEEEEEEEEEEEEEEEEOLOOOOOOOOOOOOOOOOOOOL
 )
+
+(RPAQ? TEDIT.BUTTONS.SPEC
+       '((Bold :BOLD.ON :BOLD.OFF)
+         (Italic :ITALIC.ON :ITALIC.OFF)
+         (Case :UCASE :LCASE)
+         ((Strike- out)
+          :STRIKEOUT.ON :STRIKEOUT.OFF)
+         ((Under- line)
+          :UNDERLINE.ON :UNDERLINE.OFF)
+         ((Super/ Sub)
+          :SUPERSCRIPT :SUBSCRIPT)
+         ((Larger Smaller)
+          :LARGER :SMALLER)
+         (Justify :QUAD)
+         (Defaults :DEFAULTS)
+         (Show :SHOW.CHARLOOKS)
+         (Redo :REDO)))
+
+
+
+(* ; "Keybindings")
+
+(DECLARE%: EVAL@COMPILE DONTCOPY 
+(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE 
+
+(RPAQQ \TEDIT.TTCCODES
+       ((NONE . 0)
+        (CHARDELETE . 1)
+        (:CHARDELETE.BACKWARD . 1)
+        (WORDDELETE . 2)
+        (:WORDDELETE.BACKWORD . 2)
+        (DELETE . 3)
+        (:DELETE . 3)
+        (FN . 4)
+        (REDO . 5)
+        (:REDO . 5)
+        (UNDO . 6)
+        (:UNDO . 6)
+        (CMD . 7)
+        (:CMD . 7)
+        (NEXT . 8)
+        (:NEXT . 8)
+        (EXPAND . 9)
+        (:EXPAND . 9)
+        (CHARDELETE.FORWARD . 10)
+        (:CHARDELETE.FORWARD . 10)
+        (:WORDDELETE.FORWARD . 11)
+        (PUNCT . 20)
+        (TEXT . 21)
+        (WHITESPACE . 22)))
+
+
+(CONSTANTS \TEDIT.TTCCODES)
+)
+(DECLARE%: EVAL@COMPILE 
+
+(PUTPROPS \TEDIT.TTC MACRO [(ACTION)
+                            (CONSTANT (GETMULTI \TEDIT.TTCCODES 'ACTION])
+)
+
+(* "END EXPORTED DEFINITIONS")
+
+)
+(DEFINEQ
+
+(\TEDIT.TTCCLASS
+  [LAMBDA (CODE/CLASS)                                       (* ; "Edited 12-Nov-2025 13:51 by rmk")
+                                                             (* ; "Edited 10-Nov-2025 14:34 by rmk")
+
+    (* ;; "Class gets the (normalized) class for a CODE (or class atom).")
+
+    (CAR (find TTC in \TEDIT.TTCCODES suchthat (if (FIXP CODE/CLASS)
+                                                   then (EQ CODE/CLASS (CDR TTC))
+                                                 elseif (EQ CODE/CLASS (CAR TTC])
+)
+
+(RPAQQ ORIG.TEDIT.CHARACTIONS
+       (
+        (* ;; "This defines Tedit's implementation of the named actions.  They are activated by keybinding specifications given to TEDIT.INSTALL.KEYBINDINGS.")
+
+        
+        (* ;; "")
+
+        
+        (* ;; "History")
+
+        (:UNDO (TEDIT.UNDO TSTREAM))
+        (:UNDO.UNDO \TEDIT.UNDO.UNDO)
+                                                             (* ; "CHECK")
+        (:REDO TEDIT.REDO)
+        
+        (* ;; "")
+
+        
+        (* ;; "Find")
+
+        (:FIND.FORWARD (\TEDIT.KEY.FIND TSTREAM))
+        (:FIND.BACKWARD (\TEDIT.KEY.FIND TSTREAM NIL T))
+        (:FIND.FORWARD-AGAIN (\TEDIT.KEY.FIND TSTREAM T))
+        (:FIND.BACKWARD-AGAIN (\TEDIT.KEY.FIND TSTREAM T T))
+        (:SUBSTITUTE \TEDIT.KEY.SUBSTITUTE)
+        (:NEXT TEDIT.NEXT)
+        
+        (* ;; "")
+
+        
+        (* ;; "Character looks")
+
+        (:BOLD.ON (\TEDIT.KEY.CHARLOOKS TSTREAM 'BOLD 'ON))
+        (:BOLD.OFF (\TEDIT.KEY.CHARLOOKS TSTREAM 'BOLD 'OFF))
+        (:BOLD.TOGGLE (\TEDIT.KEY.CHARLOOKS TSTREAM 'BOLD 'TOGGLE))
+        (:ITALIC.ON (\TEDIT.KEY.CHARLOOKS TSTREAM 'ITALIC 'ON))
+        (:ITALIC.OFF (\TEDIT.KEY.CHARLOOKS TSTREAM 'ITALIC 'OFF))
+        (:ITALIC.TOGGLE (\TEDIT.KEY.CHARLOOKS TSTREAM 'ITALIC 'TOGGLE))
+        (:UCASE (\TEDIT.KEY.TRANSFORM TSTREAM (FUNCTION U-CASECODE)))
+        (:LCASE (\TEDIT.KEY.TRANSFORM TSTREAM (FUNCTION L-CASECODE)))
+        (:INITIALCAP (\TEDIT.KEY.TRANSFORM TSTREAM (FUNCTION CAP-CASECODE)))
+        (:STRIKEOUT.ON (\TEDIT.KEY.CHARLOOKS TSTREAM 'STRIKEOUT 'ON))
+        (:STRIKEOUT.OFF (\TEDIT.KEY.CHARLOOKS TSTREAM 'STRIKEOUT 'OFF))
+        (:STRIKEOUT.TOGGLE (\TEDIT.KEY.CHARLOOKS TSTREAM 'STRIKEOUT 'TOGGLE))
+        (:UNDERLINE.ON (\TEDIT.KEY.CHARLOOKS TSTREAM 'UNDERLINE 'ON))
+        (:UNDERLINE.OFF (\TEDIT.KEY.CHARLOOKS TSTREAM 'UNDERLINE 'OFF))
+        (:UNDERLINE.TOGGLE (\TEDIT.KEY.CHARLOOKS TSTREAM 'UNDERLINE 'TOGGLE))
+        (:OVERLINE.ON (\TEDIT.KEY.CHARLOOKS TSTREAM 'OVERLINE 'ON))
+        (:OVERLINE.OFF (\TEDIT.KEY.CHARLOOKS TSTREAM 'OVERLINE 'OFF))
+        (:OVERLINE.TOGGLE (\TEDIT.KEY.CHARLOOKS TSTREAM 'OVERLINE 'TOGGLE))
+        (:UNBREAKABLE.ON (\TEDIT.KEY.CHARLOOKS TSTREAM 'UNBREAKABLE 'ON))
+        (:UNBREAKABLE.OFF (\TEDIT.KEY.CHARLOOKS TSTREAM 'UNBREAKABLE 'OFF))
+        (:UNBREAKABLE.TOGGLE (\TEDIT.KEY.CHARLOOKS TSTREAM 'UNBREAKABLE 'TOGGLE))
+        (:SUBSCRIPT \TEDIT.SUBSCRIPTSEL)
+        (:SUPERSCRIPT \TEDIT.SUPERSCRIPTSEL)
+        (:SMALLER (\TEDIT.KEY.SIZE TSTREAM '-))
+        (:LARGER (\TEDIT.KEY.SIZE TSTREAM '+))
+        (:FAMILYN (\TEDIT.KEY.FAMILYN TSTREAM CHARCODE))
+        (:DEFAULTS \TEDIT.DEFAULTSSEL)
+        (:SHOW.CHARLOOKS \TEDIT.SHOWCARETLOOKS)
+        
+        (* ;; "")
+
+        
+        (* ;; "Paragraph looks")
+
+        (:NEST (\TEDIT.KEY.NEST TSTREAM))
+        (:UNNEST (\TEDIT.KEY.NEST TSTREAM T))
+        (:QUAD (\TEDIT.KEY.QUAD TSTREAM))
+        (:QUAD.REVERSE (\TEDIT.KEY.QUAD TSTREAM T))
+        
+        (* ;; "")
+
+        
+        (* ;; "Cursor/selection")
+
+        (:ONECHAR.BACKWARD \TEDIT.ONECHAR.BACKWARD)
+        (:ONECHAR.FORWARD \TEDIT.ONECHAR.FORWARD)
+        (:LINE.UP \TEDIT.ONELINE.UP)
+        (:LINE.DOWN \TEDIT.ONELINE.DOWN)
+        (:ONEWORD.FORWARD \TEDIT.ONEWORD.FORWARD)
+        (:ONEWORD.BACKWARD \TEDIT.ONEWORD.BACKWARD)
+        (:LINE.BEGIN \TEDIT.LINE.BEGIN)
+        (:LINE.END \TEDIT.LINE.END)
+        (:DOCUMENT.BEGIN \TEDIT.DOCUMENT.BEGIN)
+        (:DOCUMENT.END \TEDIT.DOCUMENT.END)
+        (:ALL \TEDIT.SELECT.ALL)
+        
+        (* ;; "")
+
+        
+        (* ;; "Deletion ")
+
+        (:CHARDELETE.BACKWARD (\TEDIT.CHARDELETE TSTREAM))
+        (:CHARDELETE.FORWARD (\TEDIT.CHARDELETE TSTREAM T))
+        (:WORDDELETE.BACKWARD \TEDIT.WORDDELETE)
+        (:WORDDELETE.FORWARD \TEDIT.WORDDELETE.FORWARD)
+        (:LINEDELETE.FORWARD \TEDIT.LINEDELETE.FORWARD)
+        (:LINEDELETE.BACKWARD \TEDIT.LINEDELETE.BACKWARD)
+        (:LINEDELETE \TEDIT.LINEDELETE)
+        
+        (* ;; "")
+
+        
+        (* ;; "Miscellaneous")
+
+        (:MANPAGE \TEDIT.MANPAGE)
+        (:OPEN.SEDIT \TEDIT.CALL.ED)
+        (:PRINT.MENU \TEDIT.PRINT.MENU)
+        (:EXPAND \TEDIT.ABBREV.EXPAND)
+        (:GET.OBJECT GET.OBJ.FROM.USER)
+        (:OPENLINE \TEDIT.KEY.OPENLINE)
+        
+        (* ;; "")
+
+        
+        (* ;; "From TEDITDORADOKEYS")
+
+        (:WRAP.PARENS (\TEDIT.KEY.WRAP TSTREAM "(" ")"))
+        (:WRAP.NEUTRAL.DOUBLEQUOTES (\TEDIT.KEY.WRAP TSTREAM "%"" "%""))
+        [:WRAP.REAL.DOUBLEQUOTES (\TEDIT.KEY.WRAP TSTREAM (CHARACTER (CHARCODE LEFT-DOUBLEQUOTE))
+                                        (CHARACTER (CHARCODE RIGHT-DOUBLEQUOTE]
+        
+        (* ;; "")
+
+        
+        (* ;; "Clipboard")
+
+        (:CLIPBOARD-PASTE PASTEFROMCLIPBOARD)
+        (:CLIPBOARD-COPY \TEDIT.COPYTOCLIPBOARD)
+        (:CLIPBOARD-EXTRACT \TEDIT.EXTRACTTOCLIPBOARD)
+        
+        (* ;; "")
+
+        
+        (* ;; "Wheelscroll")
+
+        (:WHEELSCROLL-UP (WHEELSCROLL 'VERTICAL T))
+        (:WHEELSCROLL-DOWN (WHEELSCROLL 'VERTICAL))
+        (:WHEELSCROLL-LEFT (WHEELSCROLL 'HORIZONTAL))
+        (:WHEELSCROLL-RIGHT (WHEELSCROLL 'HORIZONTAL T))))
+
+(RPAQ? TEDIT.CHARACTIONS (APPEND ORIG.TEDIT.CHARACTIONS))
+
+(RPAQQ TEDIT.BASIC.CHARBINDINGS
+       (
+        (* ;; "Establishes key bindings for particular Tedit key actions. Function,xxx roughly correspond to Koto release notes, but this preserves the immediately preceding assignments if those drifted away from the Koto notes. There is no obvious way of typing Function.  Maybe Meta,^xxx instead, as in DORADO.KEYBINDINGS.  (But CTRL collapses upper and lower case).")
+
+        
+        (* ;; "")
+
+        
+        (* ;; "History")
+
+        (:UNDO "Meta,u" "Meta,z" "Function,4" "Function,44")
+        (:UNDO.UNDO "Meta,U" "Meta,Z")
+        (:REDO "Meta,r" "Meta,R" "Function,10" "Function,50")
+        
+        (* ;; "")
+
+        
+        (* ;; "Find")
+
+        (:FIND.FORWARD "Meta,f" "Function,3" "Function,43")
+        (:FIND.BACKWARD "Meta,F")
+        (:FIND.FORWARD-AGAIN "Meta,g")
+        (:FIND.BACKWARD-AGAIN "Meta,G")
+        (:SUBSTITUTE "Meta,s" "Meta,S")
+        (:NEXT "Meta,N" "Meta,n" "Function,22")
+        
+        (* ;; "")
+
+        
+        (* ;; "Character looks")
+
+        (:BOLD.ON "Function,102")
+        (:BOLD.OFF "Function,142")
+        (:BOLD.TOGGLE)
+        (:ITALIC.ON "Function,103")
+        (:ITALIC.OFF "Function,143")
+        (:ITALIC.TOGGLE)
+        (:UCASE "Function,104")
+        (:LCASE "Function,144")
+        (:STRIKEOUT.ON "Function,105")
+        (:STRIKEOUT.OFF "Function,145")
+        (:STRIKEOUT.TOGGLE)
+        (:UNDERLINE.ON "Function,106")
+        (:UNDERLINE.OFF "Function,146")
+        (:UNDERLINE.TOGGLE)
+        (:OVERLINE.ON)
+        (:OVERLINE.OFF)
+        (:OVERLINE.TOGGLE)
+        (:SUBSCRIPT "Function,114")
+        (:SUPERSCRIPT "Function,113")
+        (:SMALLER "Function,110")
+        (:LARGER "Function,150")
+        (:FAMILYN "Meta,One" "Meta,Two" "Meta,Three" "Meta,Four" "Meta,Five" "Meta,Six")
+        (:DEFAULTS "Function,115" "Function,155")
+        (:SHOW.CHARLOOKS "Function,1")
+        
+        (* ;; "")
+
+        
+        (* ;; "Paragraph looks")
+
+        (:QUAD "Function,101")
+        (:NEST "Meta,[")
+        (:UNNEST "Meta,]")
+        
+        (* ;; "")
+
+        
+        (* ;; "Cursor/selection")
+
+        (:ONECHAR.BACKWARD "Meta,<" "Meta,,")
+                                                             (* ; "From arrows")
+        (:ONECHAR.FORWARD "Meta,>" "Meta,.")
+        (:LINE.UP "Meta,^")
+        (:LINE.DOWN "Meta,LF")
+        (:ONEWORD.FORWARD)
+        (:ONEWORD.BACKWARD)
+        (:LINE.BEGIN)
+        (:LINE.END)
+        (:ALL "Meta,a" "Meta,A")
+        
+        (* ;; "")
+
+        
+        (* ;; "Deletion")
+
+        (:CHARDELETE.BACKWARD "BS" "^A")
+        (:CHARDELETE.FORWARD RUBOUT)
+        (:WORDDELETE.BACKWARD "^W")
+        (:WORDDELETE.FORWARD "^U")
+        (:LINEDELETE.FORWARD)
+        (:LINEDELETE.BACKWARD)
+        (:LINEDELETE)
+        
+        (* ;; "")
+
+        
+        (* ;; "Miscellaneous")
+
+        (:MANPAGE "Meta,D" "Meta,d")
+        (:OPEN.SEDIT "Meta,O" "Meta,o")
+        (:PRINT.MENU "Meta,P" "Meta,p")
+        (:EXPAND "^X")
+        (:GET.OBJECT "^O")
+        
+        (* ;; "")
+
+        
+        (* ;; "Wheelscroll  ")
+
+        (:WHEELSCROLL-UP "WHEELSCROLL-UP")
+        (:WHEELSCROLL-DOWN "WHEELSCROLL-DOWN")
+        (:WHEELSCROLL-LEFT "WHEELSCROLL-LEFT")
+        (:WHEELSCROLL-RIGHT "WHEELSCROLL-RIGHT")
+        
+        (* ;; "")
+
+        
+        (* ;; "Clipboard")
+
+        (:CLIPBOARD-PASTE "Meta,V" "Meta,v")
+        (:CLIPBOARD-COPY "Meta,C" "Meta,c")
+        (:CLIPBOARD-EXTRACT "Meta,X" "Meta,x")))
+
+(RPAQQ TEDIT.DORADO.CHARBINDINGS
+       (
+        (* ;; "Taken from lispusers>TKDORADO, these make the indicated Tedit commands available from the Dorado keyboard.")
+
+        (:DEFAULTS "Meta,^V")
+        (:BOLD.ON "Meta,^B" "Meta,b")
+        (:BOLD.OFF "Meta,^N" "Meta,B")
+        (:ITALIC.ON "Meta,^I" "Meta,i")
+        (:ITALIC.OFF "Meta,^O" "Meta,I")
+        (:OVERLINE.ON "Meta,^D")
+        (:OVERLINE.OFF "Meta,^F")
+        (:STRIKEOUT.ON "Meta,^G" "Meta,=")
+        (:STRIKEOUT.OFF "Meta,^H" "Meta,+")
+        (* (UNDERLINE.ON "Meta,^J")
+           conflicts with :LINE.DOWN)
+        (:UNDERLINE.ON "Meta,-")
+        (:UNDERLINE.OFF "Meta,^K" "Meta,_")
+        (:SMALLER "Meta,^[")
+        (:LARGER "Meta,^^]")
+        (:SUBSCRIPT "Meta,^^")
+        (:SUPERSCRIPT "Meta,^_")
+        (:QUAD "Meta,^C")
+        
+        (* ;; "Mappings from lispusers>TEDITDORADOKEYS")
+
+        (* ("Meta,c" QUAD)
+           ("Meta,C" QUAD)
+           ("Meta,x" EXPAND)
+           ("Meta,X" EXPAND)
+           conflict with clipboard)
+        (* ("Meta,^" SUBSCRIPT)
+           conflicts with LINE.UP)
+        (:WRAP.PARENS "Meta,(" "Meta,Nine")
+        (:WRAP.NEUTRAL.DOUBLEQUOTES "Meta,%"")
+        (:WRAP.REAL.DOUBLEQUOTES "Meta,'")))
+
+(RPAQ? TEDIT.CHARBINDINGS (APPEND TEDIT.BASIC.CHARBINDINGS TEDIT.DORADO.CHARBINDINGS))
+(DECLARE%: DOEVAL@COMPILE DONTCOPY
+
+(GLOBALVARS TEDIT.CHARBINDINGS TEDIT.CHARACTIONS)
+)
+
+
+
+(* ; "Installation")
+
+(DECLARE%: DONTEVAL@LOAD DOCOPY 
+
+(RPAQ TEDIT.READTABLE (\TEDIT.READTABLE))
+
+(RPAQ TEDIT.WORDBOUND.READTABLE (\TEDIT.WORDBOUND.READTABLE))
+)
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (3941 22863 (TEDIT.INSTALL.CHARBINDINGS 3951 . 7842) (TEDIT.CLEAR.CHARBINDINGS 7844 . 
-10522) (TEDIT.GET.CHARACTION 10524 . 13270) (TEDIT.GET.CHARBINDING 13272 . 15411) (
-TEDIT.GET.ALL.CHARBINDINGS 15413 . 17729) (TEDIT.CHARBINDINGS.INVERT 17731 . 19461) (
-TEDIT.GET.ALL.CHARACTIONS 19463 . 21549) (TEDIT.CONFLICTING.CHARBINDINGS 21551 . 22861)) (22923 32978 
-(\TEDIT.KEY.CHARLOOKS 22933 . 24125) (\TEDIT.KEY.QUAD 24127 . 26220) (\TEDIT.DEFAULTSSEL 26222 . 26833
-) (\TEDIT.SETDEFAULT.FROM.SEL 26835 . 27512) (\TEDIT.KEY.SIZE 27514 . 28710) (\TEDIT.SUBSCRIPTSEL 
-28712 . 28915) (\TEDIT.SUPERSCRIPTSEL 28917 . 29121) (\TEDIT.KEY.TRANSFORM 29123 . 31120) (
-\TEDIT.KEY.OPENLINE 31122 . 31576) (\TEDIT.KEY.FAMILYN 31578 . 32976)) (32979 33268 (CAP-CASECODE 
-32989 . 33266)) (33302 36734 (\TEDIT.SHOWCARETLOOKS 33312 . 35827) (\TEDIT.DESCRIBEFONT 35829 . 36732)
-) (36765 51738 (\TEDIT.ONECHAR.BACKWARD 36775 . 37922) (\TEDIT.ONECHAR.FORWARD 37924 . 39160) (
-\TEDIT.ONELINE.UP 39162 . 42123) (\TEDIT.ONELINE.DOWN 42125 . 43782) (\TEDIT.ONELINE.MOVE 43784 . 
-46071) (\TEDIT.ONEWORD.BACKWARD 46073 . 47261) (\TEDIT.ONEWORD.FORWARD 47263 . 48450) (
-\TEDIT.LINE.BEGIN 48452 . 49531) (\TEDIT.LINE.END 49533 . 50770) (\TEDIT.DOCUMENT.BEGIN 50772 . 51131)
- (\TEDIT.DOCUMENT.END 51133 . 51736)) (51739 53781 (\TEDIT.LINEDELETE.FORWARD 51749 . 52748) (
-\TEDIT.LINEDELETE.BACKWARD 52750 . 53779)) (53782 56310 (\TEDIT.KEY.NEST 53792 . 56308)) (56311 57593 
-(\TEDIT.KEY.WRAP 56321 . 57591)) (57684 65732 (\TEDIT.KEY.FIND 57694 . 62872) (
-\TEDIT.KEY.FIND.SEARCHSTRING 62874 . 64014) (\TEDIT.GET.TARGET.STRING 64016 . 65730)) (65763 68395 (
-\TEDIT.KEY.SUBSTITUTE 65773 . 65994) (\TEDIT.MANPAGE 65996 . 67243) (\TEDIT.CALL.ED 67245 . 68075) (
-\TEDIT.SELECT.ALL 68077 . 68393)) (68422 74112 (\TEDIT.CLIPBOARD 68432 . 70187) (
-\TEDIT.COPYTOCLIPBOARD 70189 . 70969) (\TEDIT.EXTRACTTOCLIPBOARD 70971 . 71166) (\TEDIT.WRITE.SEL 
-71168 . 74110)) (74278 86280 (\TEDIT.READTABLE 74288 . 75224) (\TEDIT.WORDBOUND.READTABLE 75226 . 
-78165) (TEDIT.GETSYNTAX 78167 . 79596) (TEDIT.SETSYNTAX 79598 . 80803) (TEDIT.GETFUNCTION 80805 . 
-82070) (TEDIT.SETFUNCTION 82072 . 84058) (TEDIT.WORDGET 84060 . 84321) (TEDIT.WORDSET 84323 . 84954) (
-TEDIT.ATOMBOUND.READTABLE 84956 . 86278)) (98109 105097 (TEDIT.BUTTONS.BUILD 98119 . 103365) (
-TEDIT.BUTTONBITMAP.FILL 103367 . 105095)))))
+  (FILEMAP (NIL (5031 23296 (TEDIT.INSTALL.CHARBINDINGS 5041 . 7892) (TEDIT.CLEAR.CHARBINDINGS 7894 . 
+10914) (TEDIT.GET.CHARACTION 10916 . 13697) (TEDIT.GET.CHARBINDING 13699 . 15876) (
+TEDIT.GET.ALL.CHARBINDINGS 15878 . 18377) (TEDIT.CHARBINDINGS.INVERT 18379 . 19658) (
+TEDIT.GET.ALL.CHARACTIONS 19660 . 21982) (TEDIT.CONFLICTING.CHARBINDINGS 21984 . 23294)) (23356 33411 
+(\TEDIT.KEY.CHARLOOKS 23366 . 24558) (\TEDIT.KEY.QUAD 24560 . 26653) (\TEDIT.DEFAULTSSEL 26655 . 27266
+) (\TEDIT.SETDEFAULT.FROM.SEL 27268 . 27945) (\TEDIT.KEY.SIZE 27947 . 29143) (\TEDIT.SUBSCRIPTSEL 
+29145 . 29348) (\TEDIT.SUPERSCRIPTSEL 29350 . 29554) (\TEDIT.KEY.TRANSFORM 29556 . 31553) (
+\TEDIT.KEY.OPENLINE 31555 . 32009) (\TEDIT.KEY.FAMILYN 32011 . 33409)) (33412 33701 (CAP-CASECODE 
+33422 . 33699)) (33735 37167 (\TEDIT.SHOWCARETLOOKS 33745 . 36260) (\TEDIT.DESCRIBEFONT 36262 . 37165)
+) (37198 52171 (\TEDIT.ONECHAR.BACKWARD 37208 . 38355) (\TEDIT.ONECHAR.FORWARD 38357 . 39593) (
+\TEDIT.ONELINE.UP 39595 . 42556) (\TEDIT.ONELINE.DOWN 42558 . 44215) (\TEDIT.ONELINE.MOVE 44217 . 
+46504) (\TEDIT.ONEWORD.BACKWARD 46506 . 47694) (\TEDIT.ONEWORD.FORWARD 47696 . 48883) (
+\TEDIT.LINE.BEGIN 48885 . 49964) (\TEDIT.LINE.END 49966 . 51203) (\TEDIT.DOCUMENT.BEGIN 51205 . 51564)
+ (\TEDIT.DOCUMENT.END 51566 . 52169)) (52172 55480 (\TEDIT.LINEDELETE.FORWARD 52182 . 53291) (
+\TEDIT.LINEDELETE.BACKWARD 53293 . 54432) (\TEDIT.LINEDELETE 54434 . 55478)) (55481 58009 (
+\TEDIT.KEY.NEST 55491 . 58007)) (58010 59292 (\TEDIT.KEY.WRAP 58020 . 59290)) (59383 67431 (
+\TEDIT.KEY.FIND 59393 . 64571) (\TEDIT.KEY.FIND.SEARCHSTRING 64573 . 65713) (\TEDIT.GET.TARGET.STRING 
+65715 . 67429)) (67462 70094 (\TEDIT.KEY.SUBSTITUTE 67472 . 67693) (\TEDIT.MANPAGE 67695 . 68942) (
+\TEDIT.CALL.ED 68944 . 69774) (\TEDIT.SELECT.ALL 69776 . 70092)) (70121 75811 (\TEDIT.CLIPBOARD 70131
+ . 71886) (\TEDIT.COPYTOCLIPBOARD 71888 . 72668) (\TEDIT.EXTRACTTOCLIPBOARD 72670 . 72865) (
+\TEDIT.WRITE.SEL 72867 . 75809)) (75977 88484 (\TEDIT.READTABLE 75987 . 76923) (
+\TEDIT.WORDBOUND.READTABLE 76925 . 79973) (TEDIT.GETSYNTAX 79975 . 81204) (TEDIT.SETSYNTAX 81206 . 
+82520) (TEDIT.GETFUNCTION 82522 . 83995) (TEDIT.SETFUNCTION 83997 . 86153) (TEDIT.WORDGET 86155 . 
+86416) (TEDIT.WORDSET 86418 . 87158) (TEDIT.ATOMBOUND.READTABLE 87160 . 88482)) (88585 95573 (
+TEDIT.BUTTONS.BUILD 88595 . 93841) (TEDIT.BUTTONBITMAP.FILL 93843 . 95571)) (98038 98626 (
+\TEDIT.TTCCLASS 98048 . 98624)))))
 STOP
diff --git a/library/tedit/TEDIT-FNKEYS.LCOM b/library/tedit/TEDIT-FNKEYS.LCOM
index 3682e535..1e667aff 100644
Binary files a/library/tedit/TEDIT-FNKEYS.LCOM and b/library/tedit/TEDIT-FNKEYS.LCOM differ
diff --git a/library/tedit/TEDIT-RELEASENOTES.TEDIT b/library/tedit/TEDIT-RELEASENOTES.TEDIT
index de72aa2a..319e68a5 100644
Binary files a/library/tedit/TEDIT-RELEASENOTES.TEDIT and b/library/tedit/TEDIT-RELEASENOTES.TEDIT differ
diff --git a/lispusers/TEDIT-PF-SEE b/lispusers/TEDIT-PF-SEE
index fef23770..89637de6 100644
--- a/lispusers/TEDIT-PF-SEE
+++ b/lispusers/TEDIT-PF-SEE
@@ -1,25 +1,23 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "29-Jul-2025 22:01:56" 
-{DSK}<Users>kaplan>Local>medley3.5>working-medley>lispusers>TEDIT-PF-SEE.;150 11962  
+(FILECREATED "12-Nov-2025 15:49:07" {WMEDLEY}<lispusers>TEDIT-PF-SEE.;156 13422  
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS PF-TEDIT)
+      :CHANGES-TO (VARS TEDIT-PF-SEECOMS)
 
-      :PREVIOUS-DATE "29-Jul-2025 18:07:48" 
-{DSK}<Users>kaplan>Local>medley3.5>working-medley>lispusers>TEDIT-PF-SEE.;149)
+      :PREVIOUS-DATE "26-Sep-2025 22:53:59" {WMEDLEY}<lispusers>TEDIT-PF-SEE.;155)
 
 
 (PRETTYCOMPRINT TEDIT-PF-SEECOMS)
 
 (RPAQQ TEDIT-PF-SEECOMS
        [(FNS PF-TEDIT PF-TEDIT-FROM-TEXT)
-        (COMMANDS ts tf)
+        (COMMANDS ts tf tc tv tr)
         (FILES (SYSLOAD)
                REGIONMANAGER VERSIONDEFS)
-        (ALISTS (TEDIT.CHARACTIONS TEDIT-PF)
-               (TEDIT.CHARBINDINGS TEDIT-PF))
+        (ALISTS (TEDIT.CHARACTIONS :TEDIT-PF)
+               (TEDIT.CHARBINDINGS :TEDIT-PF))
         (P (MOVD? 'PFCOPYBYTES 'PFI.MAYBE.PP.DEFINITION)
            (MOVD? 'NILL (FUNCTION TEDIT.SETFUNCTION))
            (TEDIT.INSTALL.CHARBINDINGS))
@@ -29,7 +27,9 @@
 (DEFINEQ
 
 (PF-TEDIT
-  [LAMBDA (FN IFILES VERSION REPRINT)                        (* ; "Edited 29-Jul-2025 22:01 by rmk")
+  [LAMBDA (ITEM IFILES VERSION REPRINT TYPE)                 (* ; "Edited 23-Sep-2025 11:24 by rmk")
+                                                             (* ; "Edited 20-Sep-2025 08:56 by rmk")
+                                                             (* ; "Edited 29-Jul-2025 22:01 by rmk")
                                                              (* ; "Edited 29-Jun-2025 16:18 by rmk")
                                                              (* ; "Edited 14-Apr-2025 22:00 by rmk")
                                                              (* ; "Edited 26-Mar-2025 10:08 by rmk")
@@ -46,24 +46,24 @@
                                                              (* ; "Edited 12-Jan-2022 13:15 by rmk")
                                                              (* ; "Edited 30-Dec-2021 23:17 by rmk")
 
-    (* ;; "PF* to a read-only TEDIT window.  First argument is the function name, second if given is the input file.")
+    (* ;; "Shows ITEM of type TYPE in a scrollable read-only TEDIT window.  First argument is the item name, second if given is the input file.")
 
-    (* ;; "This uses PFCOPYBYTES so we see what it looks like on the file.  But some functions were not prettyprinted, so they appear as useless garbage.")
-
-    (* ;; "In that case, calling again with REPRINT=T will read and reprint.  And, invoking tf again with no arguments at all will also reprint the last function in the same window")
+    (* ;; "Calling again with REPRINT=T  (or ITEM=T) will read and reprint the same item.  And, calling again with no arguments at all will also reprint the last item in the same window")
 
     (SETQ IFILES (MKLIST IFILES))
-    (CL:WHEN (LISTP FN)
-        (SETQ FN (CAR FN)))
-    (SELECTQ FN
+    (CL:WHEN (INTERSECTION TYPE '(FNS FUNCTIONS))
+           (SETQ TYPE NIL))
+    (CL:WHEN (INTERSECTION TYPE '(FNS FUNCTIONS))
+           (SETQ TYPE NIL))
+    (SELECTQ ITEM
         ((t T NIL) 
              (SETQ REPRINT T)
-             (SETQ FN LASTWORD))
-        (if (VERSIONP FN)
-            then (SETQ IFILES (CONS FN))
-                 (SETQ FN LASTWORD)
-          else (SETQ LASTWORD FN)))
-    (CL:UNLESS FN (ERROR "No function to print"))
+             (SETQ ITEM LASTWORD))
+        (if (VERSIONP ITEM)
+            then (SETQ IFILES (CONS ITEM))
+                 (SETQ ITEM LASTWORD)
+          else (SETQ LASTWORD ITEM)))
+    (CL:UNLESS ITEM (ERROR "No function to print"))
     (CL:WHEN (AND (VERSIONP IFILES)
                   (NULL VERSION))
         (SETQ VERSION IFILES)
@@ -73,91 +73,107 @@
         (SETQ REPRINT T)
         [SETQ IFILES (LDIFFERENCE IFILES '(t T])
     (CL:UNLESS IFILES
-        (SETQ IFILES (WHEREIS FN '(FNS FUNCTIONS)
-                            T)))
+        [SETQ IFILES (OR (WHEREIS ITEM TYPE T)
+                         (AND (NULL TYPE)
+                              (WHEREIS ITEM 'MACROS T])
     (if IFILES
-        then                                                 (* ; "skip compiled files")
+        then (for IFILE TSTREAM DEF TFPROP WINDOW inside IFILES
+                eachtime (SETQ IFILE (if (CL:IF (VERSIONP IFILE)
+                                             (FINDFILEVERSION (CAR (WHEREIS ITEM TYPE T))
+                                                    IFILE)
+                                             (FINDFILE IFILE T))
+                                       else (printout T "file " IFILE " not found." T)
+                                            (GO $$ITERATE))) unless (MEMB (FILENAMEFIELD IFILE
+                                                                                 'EXTENSION)
+                                                                          *COMPILED-EXTENSIONS*)
+                do (CL:UNLESS [SETQ DEF (CL:IF TYPE
+                                            (GETDEF ITEM TYPE IFILE 'NOERROR)
+                                            (OR (GETDEF ITEM 'FNS IFILE 'NOERROR)
+                                                (GETDEF ITEM 'FUNCTIONS IFILE 'NOERROR)
+                                                (GETDEF ITEM 'MACROS IFILE 'NOERROR)))]
+                       (printout T ITEM " not found on " IFILE "." T)
+                       (GO $$ITERATE)) 
 
-        (* ;; "Since we are creating readonly Tedits, try to keep the TTY where it is.")
+                   (* ;; "We found ITEM of TYPE on IFILE")
 
-        (for IFILE LOC TSTREAM ENV EXPR TFPROP WINDOW inside IFILES
-           eachtime (CL:IF (VERSIONP IFILE)
-                        (SETQ IFILE (FINDFILEVERSION (CAR (WHEREIS FN NIL T))
-                                           IFILE))) unless (MEMB (FILENAMEFIELD IFILE 'EXTENSION)
-                                                                 *COMPILED-EXTENSIONS*)
-           do
-           (SETQ LOC (FINDFNDEF FN IFILE))
-           (if (LISTP LOC)
-               then (SETQ TFPROP (LIST FN (CAR LOC)))
-                    [SETQ WINDOW (find W in (OPENWINDOWS)
-                                    suchthat (AND (EQUAL TFPROP (WINDOWPROP W 'TF))
-                                                  (TEXTSTREAM W T]
-                    [if (AND WINDOW (NOT REPRINT))
-                        then 
-                             (* ;; 
-               "If already an open PF window on this function in this file, just raise it to the top")
+                   (SETQ TFPROP (LIST ITEM TYPE IFILE))
+                   [SETQ WINDOW (find W in (OPENWINDOWS)
+                                   suchthat (AND (EQUAL TFPROP (WINDOWPROP W 'TF))
+                                                 (TEXTSTREAM W T]
+                   (CL:WHEN (AND WINDOW (NOT REPRINT))
 
-                             (TOTOPW WINDOW)
-                             (RETURN)
-                      else (CL:WITH-OPEN-FILE
-                            (ISTREAM (POP LOC)
-                                   :DIRECTION :INPUT)
-                            (SETQ ENV (LISPSOURCEFILEP ISTREAM))
-                            (SETFILEINFO ISTREAM 'FORMAT ENV)
-                            [SETQ TSTREAM (OPENTEXTSTREAM
-                                           NIL NIL `(PARABREAKCHARS NIL OPENWIDTH
-                                                           ,(TIMES TEDIT.SOURCE.LINELENGTH
-                                                                   (CHARWIDTH (CHARCODE SPACE)
-                                                                          DEFAULTFONT]
-                            (DSPFONT DEFAULTFONT TSTREAM)
-                            (PRINTOUT TSTREAM 5 "[From " (FULLNAME ISTREAM)
-                                   "]" T)
-                            (PRINT-READER-ENVIRONMENT ENV TSTREAM)
-                            (if REPRINT
-                                then (SETFILEPTR ISTREAM (POP LOC))
-                                     (SETQ EXPR (WITH-READER-ENVIRONMENT ENV (READ ISTREAM)))
-                                     (WITH-READER-ENVIRONMENT ENV
-                                         (if (EQ FN (CAR EXPR))
-                                             then (DSPFONT BOLDFONT TSTREAM)
-                                                  (PRINT FN TSTREAM)
-                                                  (DSPFONT DEFAULTFONT TSTREAM)
-                                                  (SETQ EXPR (CADR EXPR))
-                                                  (PRINTDEF EXPR 3 T NIL NIL TSTREAM)
-                                           elseif (EQ FN (CADR EXPR))
-                                             then 
-                                                  (* ;; 
-                                              "Presumably a DEFUN.  Print the CAR, boldface the cadr")
+                       (* ;; 
+                     "If already an open  window on this item in this file, just raise it to the top")
 
-                                                  (PRINTOUT TSTREAM "(" .P2 (CAR EXPR)
-                                                         " " .FONT BOLDFONT .P2 (CADR EXPR)
-                                                         .FONT DEFAULTFONT " " .P2 (CADDR EXPR)
-                                                         T 3)
-                                                  (PRINTDEF (CDDDR EXPR)
-                                                         3 T T NIL TSTREAM)
-                                                  (PRIN3 ")" TSTREAM)
-                                           else (PRINTDEF EXPR 3 NIL NIL NIL TSTREAM)))
-                              else (PFI.MAYBE.PP.DEFINITION ISTREAM TSTREAM (POP LOC)
-                                          (POP LOC)))
-                            (TERPRI TSTREAM)
-                            [TEDIT TSTREAM (OR WINDOW 'TF)
-                                   NIL
-                                   `(READONLY T TITLE ,(CONCAT FN "  from " (FULLNAME ISTREAM))
-                                           ITEM-NAME
-                                           ,FN BOUNDTABLE ,(TEDIT.ATOMBOUND.READTABLE *READTABLE*]
+                       (TOTOPW WINDOW)
+                       (RETURN))
+                   [SETQ TSTREAM (OPENTEXTSTREAM NIL NIL
+                                        `(PARABREAKCHARS NIL OPENWIDTH
+                                                ,(TIMES TEDIT.SOURCE.LINELENGTH (CHARWIDTH
+                                                                                 (CHARCODE SPACE)
+                                                                                 DEFAULTFONT]
+                   (CL:WITH-OPEN-FILE (ISTREAM IFILE :DIRECTION :INPUT)
+                                                             (* ; "Print the reader environment")
+                          (PRINTOUT TSTREAM .FONT DEFAULTFONT 5)
+                          (PRINT-READER-ENVIRONMENT (LISPSOURCEFILEP ISTREAM)
+                                 TSTREAM))
+                   (DSPFONT DEFAULTFONT TSTREAM)
+                   [if (FNTYP DEF)
+                       then (PRINTOUT TSTREAM "(" .FONT BOLDFONT .P2 ITEM " " .FONT DEFAULTFONT)
+                            (PRINTDEF DEF 3 T NIL NIL TSTREAM)
+                            (PRIN3 ")" TSTREAM)
+                     elseif (SELECTQ (CAR DEF)
+                                ((CL:DEFUN DEFMACRO)         (* ; "Could look at :DEFINITION-NAME for definers in general, but we still have to pick out the arguments here (CADDR).")
+                                     (PRINTOUT TSTREAM "(" .P2 (CAR DEF)
+                                            " " .FONT BOLDFONT .P2 (CADR DEF)
+                                            .FONT DEFAULTFONT " " .P2 (CADDR DEF))
+                                     (PRINTDEF (CDDDR DEF)
+                                            3 T T NIL TSTREAM)
+                                     (PRIN3 ")" TSTREAM))
+                                (if (EQ ITEM (CAR DEF))
+                                    then (PRINTOUT TSTREAM "(" .FONT BOLDFONT .P2 ITEM .FONT 
+                                                DEFAULTFONT)
+                                         (PRINTDEF (CADR DEF)
+                                                3
+                                                (NOT TYPE)
+                                                NIL NIL TSTREAM)
+                                         (PRIN3 ")" TSTREAM)
+                                  elseif (EQ ITEM (CADR DEF))
+                                    then (PRINTOUT TSTREAM "(" .P2 (CAR DEF)
+                                                " " .FONT BOLDFONT .P2 ITEM .FONT DEFAULTFONT)
+                                         (PRINTDEF (CDDR DEF)
+                                                3
+                                                (NEQ TYPE 'VARS)
+                                                T NIL TSTREAM)
+                                         (PRIN3 ")" TSTREAM)
+                                  else (PRINTOUT TSTREAM .FONT BOLDFONT .P2 ITEM ":" .FONT 
+                                              DEFAULTFONT)
+                                       (PRINTDEF DEF 3 (NOT TYPE)
+                                              NIL NIL TSTREAM]
+                   (TERPRI TSTREAM) 
 
-                            (* ;; "The windowprop allows for reprinting as a window action, or reprinting from a command that can find and reuse the previous (presumably unprettied) window.")
+                   (* ;; "Since we are creating readonly Tedits, try to keep the TTY where it is.")
 
-                            (WINDOWPROP (WFROMDS TSTREAM)
-                                   'TF TFPROP)
-                            (TOTOPW (WFROMDS TSTREAM]
-             elseif (EQ LOC 'FILE.NOT.FOUND)
-               then (printout T "file " IFILE " not found." T)
-             else (printout T FN " not found on " LOC "." T)))
-        (SETQ *LAST-DF* FN)
-      else (PRINTOUT T FN " has no function definition" T])
+                   [TEDIT TSTREAM (OR WINDOW 'TF)
+                          NIL
+                          `(READONLY T TITLE ,(CONCAT ITEM "  from " IFILE)
+                                  ITEM-NAME
+                                  ,ITEM BOUNDTABLE ,(TEDIT.ATOMBOUND.READTABLE *READTABLE*] 
+
+                   (* ;; "The windowprop allows for reprinting as a window action, or reprinting from a command that can find and reuse the previous (presumably unprettied) window.")
+
+                   (WINDOWPROP (WFROMDS TSTREAM)
+                          'TF TFPROP)
+                   (TOTOPW (WFROMDS TSTREAM)))
+             (SETQ *LAST-DF* ITEM)
+      else (PRINTOUT T ITEM " has no " (CL:IF TYPE
+                                           (L-CASE TYPE)
+                                           "function")
+                  " definition" T])
 
 (PF-TEDIT-FROM-TEXT
-  [LAMBDA (TSTREAM TEXTOBJ SEL)                              (* ; "Edited 14-Apr-2025 21:59 by rmk")
+  [LAMBDA (TSTREAM TEXTOBJ SEL)                              (* ; "Edited 23-Sep-2025 23:28 by rmk")
+                                                             (* ; "Edited 14-Apr-2025 21:59 by rmk")
                                                              (* ; "Edited  7-Apr-2025 23:03 by rmk")
                                                              (* ; "Edited  5-Dec-2024 22:20 by rmk")
                                                              (* ; "Edited 26-Aug-2024 23:13 by rmk")
@@ -175,7 +191,7 @@
           ALLFILES)
          (if (EQ 0 (NCHARS FN))
              then (TEDIT.PROMPTPRINT TSTREAM "Please select a function to display" T)
-           elseif (SETQ ALLFILES (WHEREIS FN '(FNS FUNCTIONS)
+           elseif (SETQ ALLFILES (WHEREIS FN '(FNS FUNCTIONS MACROS)
                                         T))
              then (PF-TEDIT FN (CAR (OR (MEMB (FILENAMEFIELD THISFILE)
                                               ALLFILES)
@@ -197,12 +213,19 @@
 
 (DEFCOMMAND tf (FN FILE VERSION) (PF-TEDIT FN FILE VERSION))
 
+(DEFCOMMAND tc (ITEM FILE VERSION) (PF-TEDIT (FILECOMS ITEM)
+                                          FILE VERSION T 'VARS))
+
+(DEFCOMMAND tv (ITEM FILE VERSION) (PF-TEDIT ITEM FILE VERSION T 'VARS))
+
+(DEFCOMMAND tr (ITEM FILE VERSION) (PF-TEDIT ITEM FILE VERSION T 'RECORDS))
+
 (FILESLOAD (SYSLOAD)
        REGIONMANAGER VERSIONDEFS)
 
-(ADDTOVAR TEDIT.CHARACTIONS (TEDIT-PF PF-TEDIT-FROM-TEXT))
+(ADDTOVAR TEDIT.CHARACTIONS (:TEDIT-PF PF-TEDIT-FROM-TEXT))
 
-(ADDTOVAR TEDIT.CHARBINDINGS (TEDIT-PF "Meta,t" "Meta,T"))
+(ADDTOVAR TEDIT.CHARBINDINGS (:TEDIT-PF "Meta,t" "Meta,T"))
 
 (MOVD? 'PFCOPYBYTES 'PFI.MAYBE.PP.DEFINITION)
 
@@ -218,5 +241,5 @@
 (ADDTOVAR LAMA )
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (1080 10900 (PF-TEDIT 1090 . 9166) (PF-TEDIT-FROM-TEXT 9168 . 10898)))))
+  (FILEMAP (NIL (1018 12068 (PF-TEDIT 1028 . 10218) (PF-TEDIT-FROM-TEXT 10220 . 12066)))))
 STOP
diff --git a/lispusers/TEDIT-PF-SEE.LCOM b/lispusers/TEDIT-PF-SEE.LCOM
index e8009bfc..71170a2a 100644
Binary files a/lispusers/TEDIT-PF-SEE.LCOM and b/lispusers/TEDIT-PF-SEE.LCOM differ
diff --git a/sources/AINTERRUPT b/sources/AINTERRUPT
index ce480721..83ca8e6f 100644
--- a/sources/AINTERRUPT
+++ b/sources/AINTERRUPT
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10)
 
-(FILECREATED "31-Mar-2024 09:38:10" |{DSK}<home>larry>il>medley>sources>AINTERRUPT.;7| 41133  
+(FILECREATED "12-Nov-2025 11:10:44" |{WMEDLEY}<sources>AINTERRUPT.;4| 41235  
 
-      :EDIT-BY "lmm"
+      :EDIT-BY |rmk|
 
       :CHANGES-TO (VARS AINTERRUPTCOMS)
 
-      :PREVIOUS-DATE "31-Mar-2024 09:27:57" |{DSK}<home>larry>il>medley>sources>AINTERRUPT.;5|)
+      :PREVIOUS-DATE "31-Mar-2024 09:38:10" |{WMEDLEY}<sources>AINTERRUPT.;3|)
 
 
 (PRETTYCOMPRINT AINTERRUPTCOMS)
@@ -22,8 +22,8 @@
                                            (5 ERROR MOUSE)
                                            (7 HELP T)
                                            (16 PRINTLEVEL)
-                                           (20 (CONTROL-T))
-                                           (127 RUBOUT T)))))
+                                           (20 (CONTROL-T))))))
+                                                             (* \; "RMK2025:  Removed (127 RUBOUT T)")
         (GLOBALVARS LISPINTERRUPTS)
         (COMS 
               (* |;;| "^T this is actually not very useful any more, and the percentages are wrong")
@@ -538,14 +538,17 @@
     (prog1 \\interruptable (setq \\interruptable flag))))
 )
 
-(RPAQ? LISPINTERRUPTS
-       '((LISPINTERRUPTS (2 BREAK MOUSE)
-                (4 RESET MOUSE)
-                (5 ERROR MOUSE)
-                (7 HELP T)
-                (16 PRINTLEVEL)
-                (20 (CONTROL-T))
-                (127 RUBOUT T))))
+(RPAQ? LISPINTERRUPTS '((LISPINTERRUPTS (2 BREAK MOUSE)
+                               (4 RESET MOUSE)
+                               (5 ERROR MOUSE)
+                               (7 HELP T)
+                               (16 PRINTLEVEL)
+                               (20 (CONTROL-T)))))
+
+
+
+(* \; "RMK2025:  Removed (127 RUBOUT T)")
+
 (DECLARE\: DOEVAL@COMPILE DONTCOPY
 
 (GLOBALVARS LISPINTERRUPTS)
@@ -803,10 +806,10 @@ DONTCOPY
 (INTCHAR T)
 )
 (DECLARE\: DONTCOPY
-  (FILEMAP (NIL (2924 29142 (INTCHAR 2934 . 7957) (INTERRUPTCHAR 7959 . 8233) (INTERRUPTED 8235 . 15814)
- (LISPINTERRUPTS 15816 . 16343) (\\DOHELPINTERRUPT 16345 . 17243) (\\DOHELPINTERRUPT1 17245 . 18643) (
-\\DOINTERRUPTHERE 18645 . 19825) (\\PROC.FINDREALFRAME 19827 . 20631) (\\SETPRINTLEVEL 20633 . 22585) 
-(\\SETRECLAIMMIN 22587 . 23460) (GETINTERRUPT 23462 . 24818) (CURRENTINTERRUPTS 24820 . 25030) (
-SETINTERRUPT 25032 . 27010) (RESET.INTERRUPTS 27012 . 28969) (INTERRUPTABLE 28971 . 29140)) (29562 
-35546 (CONTROL-T 29572 . 35013) (\\CONTROL-T.PRINTRATIO 35015 . 35544)))))
+  (FILEMAP (NIL (2939 29157 (INTCHAR 2949 . 7972) (INTERRUPTCHAR 7974 . 8248) (INTERRUPTED 8250 . 15829)
+ (LISPINTERRUPTS 15831 . 16358) (\\DOHELPINTERRUPT 16360 . 17258) (\\DOHELPINTERRUPT1 17260 . 18658) (
+\\DOINTERRUPTHERE 18660 . 19840) (\\PROC.FINDREALFRAME 19842 . 20646) (\\SETPRINTLEVEL 20648 . 22600) 
+(\\SETRECLAIMMIN 22602 . 23475) (GETINTERRUPT 23477 . 24833) (CURRENTINTERRUPTS 24835 . 25045) (
+SETINTERRUPT 25047 . 27025) (RESET.INTERRUPTS 27027 . 28984) (INTERRUPTABLE 28986 . 29155)) (29664 
+35648 (CONTROL-T 29674 . 35115) (\\CONTROL-T.PRINTRATIO 35117 . 35646)))))
 STOP
diff --git a/sources/AINTERRUPT.LCOM b/sources/AINTERRUPT.LCOM
index 49635ec4..0f244ef7 100644
Binary files a/sources/AINTERRUPT.LCOM and b/sources/AINTERRUPT.LCOM differ
diff --git a/sources/LLKEY b/sources/LLKEY
index 032f719b..c45b64c8 100644
--- a/sources/LLKEY
+++ b/sources/LLKEY
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 5-May-2025 20:57:08" {WMEDLEY}<sources>LLKEY.;15 199508 
+(FILECREATED "12-Nov-2025 16:40:50" {WMEDLEY}<sources>LLKEY.;18 199501 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (VARS \MAIKOKEYACTIONS \KEYNAMES)
+      :CHANGES-TO (VARS \ORIGKEYACTIONS)
 
-      :PREVIOUS-DATE " 4-Apr-2025 17:10:10" {WMEDLEY}<sources>LLKEY.;11)
+      :PREVIOUS-DATE "12-Nov-2025 15:56:25" {WMEDLEY}<sources>LLKEY.;17)
 
 
 (PRETTYCOMPRINT LLKEYCOMS)
@@ -1591,7 +1591,7 @@
         (12 ("/" "?" NOLOCKSHIFT))
         (13 ("\" "|" NOLOCKSHIFT))
         (14 ("LF" "`" NOLOCKSHIFT))
-        (15 ("Bs" "Bs" NOLOCKSHIFT))
+        (15 ("Bs" "^W" NOLOCKSHIFT))
         (16 ("3" "#" NOLOCKSHIFT))
         (17 ("2" "@" NOLOCKSHIFT))
         (18 ("w" "W" LOCKSHIFT))
@@ -1771,7 +1771,7 @@
         (66 ("Function,G" "Function,g" NOLOCKSHIFT))
         (104 ("Function,H" "Function,h" NOLOCKSHIFT))
         (80 ("Function,I" "Function,i" NOLOCKSHIFT))
-        (13 ("^W" "^U" NOLOCKSHIFT))
+        (13 (RUBOUT "^U" NOLOCKSHIFT))
         (33 ("Esc" "Esc" NOLOCKSHIFT))
         (65 ("Esc" "Esc" NOLOCKSHIFT))
         (2 ("6" "^" NOLOCKSHIFT))
@@ -1851,9 +1851,9 @@
         (4 ("7" "'" NOLOCKSHIFT))
         (8 ("0" "0" NOLOCKSHIFT))
         (10 ("\" "_" NOLOCKSHIFT))
-        (13 ("^W" "^U" NOLOCKSHIFT))
+        (13 (RUBOUT "^U" NOLOCKSHIFT))
         (14 METADOWN . METAUP)
-        (15 ("Bs" "Bs" NOLOCKSHIFT))
+        (15 ("Bs" "^W" NOLOCKSHIFT))
         (17 ("2" "%"" NOLOCKSHIFT))
         (22 ("9" ")" NOLOCKSHIFT))
         (28 (":" "*" NOLOCKSHIFT))
@@ -3916,33 +3916,33 @@
 (ADDTOVAR LAMA CURSORPROP METASHIFT MOUSECHORDWAIT)
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (14602 21918 (BKSYSCHARCODE 14612 . 14961) (\CLEARSYSBUF 14963 . 15521) (\GETKEY 15523
- . 16698) (\NSYSBUFCHARS 16700 . 17442) (\SAVESYSBUF 17444 . 19053) (\SYSBUFP 19055 . 19359) (
-\GETSYSBUF 19361 . 19541) (\PUTSYSBUF 19543 . 20756) (\PEEKSYSBUF 20758 . 21916)) (23203 60761 (
-\KEYBOARDINIT 23213 . 24933) (\KEYBOARDEVENTFN 24935 . 29635) (\ALLOCLOCKED 29637 . 30227) (
-\SETIOPOINTERS 30229 . 34765) (\KEYBOARDOFF 34767 . 35181) (\KEYBOARDON 35183 . 35562) (\KEYHANDLER 
-35564 . 35695) (\KEYHANDLER1 35697 . 43143) (\RESETKEYBOARD 43145 . 44793) (\DOMOUSECHORDING 44795 . 
-48615) (\DOTRANSITIONS 48617 . 49294) (\DECODETRANSITION 49296 . 56709) (MOUSECHORDWAIT 56711 . 57375)
- (\TRACKCURSOR 57377 . 60759)) (95227 117100 (KEYACTION 95237 . 96090) (KEYACTIONTABLE 96092 . 97274) 
-(KEYBOARDTYPE 97276 . 98378) (RESETKEYACTION 98380 . 100139) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS 
-100141 . 102043) (\KEYACTION1 102045 . 112161) (KEYDOWNP 112163 . 112498) (KEYNUMBERP 112500 . 112698)
- (\KEYNAMETONUMBER 112700 . 113394) (\KEYNUMBERTONAME 113396 . 113586) (MODIFY.KEYACTIONS 113588 . 
-114449) (METASHIFT 114451 . 115395) (SHIFTDOWNP 115397 . 117098)) (117163 117459 (
-SETUP.OFFICE.KEYBOARD 117173 . 117457)) (120438 122150 (\INIT.KEYBOARD.STREAM 120448 . 122148)) (
-122415 138792 (\DOBUFFEREDTRANSITIONS 122425 . 137855) (\TIMER.INTERRUPTFRAME 137857 . 138582) (
-\PERIODIC.INTERRUPTFRAME 138584 . 138790)) (139046 143123 (\HARDCURSORUP 139056 . 140938) (
-\HARDCURSORPOSITION 140940 . 142976) (\HARDCURSORDOWN 142978 . 143121)) (143124 167184 (CURSOR.INIT 
-143134 . 146834) (\CURSORDESTINATION 146836 . 149154) (\SOFTCURSORUP 149156 . 154410) (
-\SOFTCURSORUPCURRENT 154412 . 161448) (\SOFTCURSORPOSITION 161450 . 162215) (\SOFTCURSORDOWN 162217 . 
-162925) (CURSORPROP 162927 . 163269) (GETCURSORPROP 163271 . 163459) (PUTCURSORPROP 163461 . 164616) (
-\CURSORBITSPERPIXEL 164618 . 166734) (\CURSORIMAGEPROPNAME 166736 . 166960) (\CURSORMASKPROPNAME 
-166962 . 167182)) (167185 185135 (CURSORCREATE 167195 . 169870) (CURSOR 169872 . 171684) (
-\CURSOR-VALID-P 171686 . 172773) (\CURSORUP 172775 . 174490) (\CURSORPOSITION 174492 . 177020) (
-\CURSORDOWN 177022 . 177255) (ADJUSTCURSORPOSITION 177257 . 177835) (CURSORPOSITION 177837 . 179379) (
-CURSORSCREEN 179381 . 180037) (CURSOREXIT 180039 . 181430) (FLIPCURSOR 181432 . 182558) (FLIPCURSORBAR
- 182560 . 183540) (LASTMOUSEX 183542 . 183796) (LASTMOUSEY 183798 . 184052) (CREATEPOSITION 184054 . 
-184260) (POSITIONP 184262 . 184546) (CURSORHOTSPOT 184548 . 185133)) (186373 187921 (GETMOUSESTATE 
-186383 . 187042) (\EVENTKEYS 187044 . 187919)) (194120 194916 (MACHINETYPE 194130 . 194530) (
-SETMAINTPANEL 194532 . 194914)) (194946 196085 (BEEPON 194956 . 195609) (BEEPOFF 195611 . 196083)) (
-196536 196799 (WITHOUT-INTERRUPTS 196546 . 196797)))))
+  (FILEMAP (NIL (14591 21907 (BKSYSCHARCODE 14601 . 14950) (\CLEARSYSBUF 14952 . 15510) (\GETKEY 15512
+ . 16687) (\NSYSBUFCHARS 16689 . 17431) (\SAVESYSBUF 17433 . 19042) (\SYSBUFP 19044 . 19348) (
+\GETSYSBUF 19350 . 19530) (\PUTSYSBUF 19532 . 20745) (\PEEKSYSBUF 20747 . 21905)) (23192 60750 (
+\KEYBOARDINIT 23202 . 24922) (\KEYBOARDEVENTFN 24924 . 29624) (\ALLOCLOCKED 29626 . 30216) (
+\SETIOPOINTERS 30218 . 34754) (\KEYBOARDOFF 34756 . 35170) (\KEYBOARDON 35172 . 35551) (\KEYHANDLER 
+35553 . 35684) (\KEYHANDLER1 35686 . 43132) (\RESETKEYBOARD 43134 . 44782) (\DOMOUSECHORDING 44784 . 
+48604) (\DOTRANSITIONS 48606 . 49283) (\DECODETRANSITION 49285 . 56698) (MOUSECHORDWAIT 56700 . 57364)
+ (\TRACKCURSOR 57366 . 60748)) (95220 117093 (KEYACTION 95230 . 96083) (KEYACTIONTABLE 96085 . 97267) 
+(KEYBOARDTYPE 97269 . 98371) (RESETKEYACTION 98373 . 100132) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS 
+100134 . 102036) (\KEYACTION1 102038 . 112154) (KEYDOWNP 112156 . 112491) (KEYNUMBERP 112493 . 112691)
+ (\KEYNAMETONUMBER 112693 . 113387) (\KEYNUMBERTONAME 113389 . 113579) (MODIFY.KEYACTIONS 113581 . 
+114442) (METASHIFT 114444 . 115388) (SHIFTDOWNP 115390 . 117091)) (117156 117452 (
+SETUP.OFFICE.KEYBOARD 117166 . 117450)) (120431 122143 (\INIT.KEYBOARD.STREAM 120441 . 122141)) (
+122408 138785 (\DOBUFFEREDTRANSITIONS 122418 . 137848) (\TIMER.INTERRUPTFRAME 137850 . 138575) (
+\PERIODIC.INTERRUPTFRAME 138577 . 138783)) (139039 143116 (\HARDCURSORUP 139049 . 140931) (
+\HARDCURSORPOSITION 140933 . 142969) (\HARDCURSORDOWN 142971 . 143114)) (143117 167177 (CURSOR.INIT 
+143127 . 146827) (\CURSORDESTINATION 146829 . 149147) (\SOFTCURSORUP 149149 . 154403) (
+\SOFTCURSORUPCURRENT 154405 . 161441) (\SOFTCURSORPOSITION 161443 . 162208) (\SOFTCURSORDOWN 162210 . 
+162918) (CURSORPROP 162920 . 163262) (GETCURSORPROP 163264 . 163452) (PUTCURSORPROP 163454 . 164609) (
+\CURSORBITSPERPIXEL 164611 . 166727) (\CURSORIMAGEPROPNAME 166729 . 166953) (\CURSORMASKPROPNAME 
+166955 . 167175)) (167178 185128 (CURSORCREATE 167188 . 169863) (CURSOR 169865 . 171677) (
+\CURSOR-VALID-P 171679 . 172766) (\CURSORUP 172768 . 174483) (\CURSORPOSITION 174485 . 177013) (
+\CURSORDOWN 177015 . 177248) (ADJUSTCURSORPOSITION 177250 . 177828) (CURSORPOSITION 177830 . 179372) (
+CURSORSCREEN 179374 . 180030) (CURSOREXIT 180032 . 181423) (FLIPCURSOR 181425 . 182551) (FLIPCURSORBAR
+ 182553 . 183533) (LASTMOUSEX 183535 . 183789) (LASTMOUSEY 183791 . 184045) (CREATEPOSITION 184047 . 
+184253) (POSITIONP 184255 . 184539) (CURSORHOTSPOT 184541 . 185126)) (186366 187914 (GETMOUSESTATE 
+186376 . 187035) (\EVENTKEYS 187037 . 187912)) (194113 194909 (MACHINETYPE 194123 . 194523) (
+SETMAINTPANEL 194525 . 194907)) (194939 196078 (BEEPON 194949 . 195602) (BEEPOFF 195604 . 196076)) (
+196529 196792 (WITHOUT-INTERRUPTS 196539 . 196790)))))
 STOP
diff --git a/sources/LLKEY.LCOM b/sources/LLKEY.LCOM
index aba3cfe8..23744f5f 100644
Binary files a/sources/LLKEY.LCOM and b/sources/LLKEY.LCOM differ
diff --git a/sources/SEDIT-COMMANDS b/sources/SEDIT-COMMANDS
index 873ddfa0..1a35d083 100644
--- a/sources/SEDIT-COMMANDS
+++ b/sources/SEDIT-COMMANDS
@@ -1,14 +1,13 @@
 (DEFINE-FILE-INFO PACKAGE (DEFPACKAGE SEDIT (USE LISP XCL)) READTABLE "XCL" BASE 10)
-(IL:FILECREATED "15-Aug-2021 21:22:22" 
-IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;7| 125181 
 
-      IL:|changes| IL:|to:|  (IL:VARS IL:SEDIT-COMMANDSCOMS)
+(IL:FILECREATED "13-Nov-2025 00:19:24" IL:|{WMEDLEY}<sources>SEDIT-COMMANDS.;5| 124301 
 
-      IL:|previous| IL:|date:| "14-Aug-2021 12:59:29" 
-IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
+      :EDIT-BY IL:|rmk|
 
+      :CHANGES-TO (IL:VARIABLES COMMAND-TABLE-SPEC)
+
+      :PREVIOUS-DATE "13-Nov-2025 00:14:31" IL:|{WMEDLEY}<sources>SEDIT-COMMANDS.;4|)
 
-; Copyright (c) 1986-1988, 1990-1991, 2018, 2021 by Venue & Xerox Corporation.
 
 (IL:PRETTYCOMPRINT IL:SEDIT-COMMANDSCOMS)
 
@@ -30,18 +29,18 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                                                                IL:\; < > IL:\.))))
            (IL:FUNCTIONS 
 
-                  (IL:* IL:|;;| "pseudo-selections")
+                  (IL:* IL:|;;| "pseudo-selections")
 
                   PSEUDO-SELECTION-FROM-SELECTION COMPOSE-PSEUDO-SELECTION DECOMPOSE-PSEUDO-SELECTION
                   SELECTION-FROM-PSEUDO-SELECTION SELECT-PSEUDO-SEGMENT)
            
-           (IL:* IL:|;;| "user interface to adding new commands")
+           (IL:* IL:|;;| "user interface to adding new commands")
 
            (IL:FUNCTIONS ADD-COMMAND GET-SELECTION REPLACE-SELECTION RESET-COMMANDS DEFAULT-COMMANDS)
            (IL:VARIABLES DEFAULT-COMMAND-TABLE-SPEC FIRST-ADD-COMMAND FIRST-ADD-COMMAND-MENU-ENTRY)
            (IL:FUNCTIONS 
 
-                  (IL:* IL:|;;| "building help menu")
+                  (IL:* IL:|;;| "building help menu")
 
                   EQUALIZE-STRING-WIDTHS MINIMUM-STRING-WIDTH MAXIMUM-STRING-WIDTH)
            (IL:FUNCTIONS FIND-AND-DISPLAY-STRUCTURE FIND-AND-DISPLAY-STRUCTURE-BACKWARDS 
@@ -65,8 +64,8 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 (IL:PUTPROPS IL:SEDIT-COMMANDS IL:FILETYPE :COMPILE-FILE)
 
 (IL:PUTPROPS IL:SEDIT-COMMANDS IL:MAKEFILE-ENVIRONMENT (:READTABLE "XCL" :PACKAGE
-                                                                      (DEFPACKAGE IL:SEDIT
-                                                                             (:USE IL:LISP IL:XCL))))
+                                                              (DEFPACKAGE IL:SEDIT (:USE IL:LISP 
+                                                                                         IL:XCL))))
 (IL:DECLARE\: IL:DOEVAL@COMPILE IL:DONTCOPY
 
 (IL:LOCALVARS . T)
@@ -78,10 +77,10 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFPARAMETER COMMAND-TABLE-SPEC
 
-(IL:* IL:|;;;| "each entry in the COMMAND-TABLE-SPEC should be of the form: (<fn> <help menu entry> <normalize?> <key>+) where <fn> is an atom function name or a list whose car is the function name and the rest are the extra arguments (beyond context and charcode), <help menu entry> is a list of strings for the name, key-name, and help-string, <normalize?> is T if the caret should be normalized after this command, and <key>+ is one or more key specifier which can be passed to charcode (if non-list) or whose car is a termtable syntax (if a list).")
+(IL:* IL:|;;;| "each entry in the COMMAND-TABLE-SPEC should be of the form: (<fn> <help menu entry> <normalize?> <key>+) where <fn> is an atom function name or a list whose car is the function name and the rest are the extra arguments (beyond context and charcode), <help menu entry> is a list of strings for the name, key-name, and help-string, <normalize?> is T if the caret should be normalized after this command, and <key>+ is one or more key specifier which can be passed to charcode (if non-list) or whose car is a termtable syntax (if a list).")
 
    '(
-     (IL:* IL:|;;| "STRUCTURE CONTROL")
+     (IL:* IL:|;;| "STRUCTURE CONTROL")
 
      (INSERT-NULL-LIST NIL T (IL:LEFTPAREN))
      (CLOSE-LIST NIL NIL (IL:RIGHTPAREN))
@@ -104,7 +103,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
      ((INPUT-QUOTE COMMA-AT)
       NIL NIL "@")
 
-     (IL:* IL:|;;| "EDIT CONTROL")
+     (IL:* IL:|;;| "EDIT CONTROL")
 
      (DELETE-SELECTION NIL T IL:DEL)
      (BACKSPACE NIL T IL:BS "^A")
@@ -114,7 +113,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
      ((VERIFY-STRUCTURE NIL T NIL)
       NIL NIL "Meta,^L")
 
-     (IL:* IL:|;;| "COMPLETION")
+     (IL:* IL:|;;| "COMPLETION")
 
      ((COMPLETE :ABORT NIL)
       ("Abort" "M-A" "Complete this edit without installing changes.")
@@ -134,14 +133,14 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
       ("Done, Compile, & Close" "C-M-C" "Complete this edit, compile, and close the window.")
       NIL "Meta,^C")
 
-     (IL:* IL:|;;| "COMMANDS")
+     (IL:* IL:|;;| "COMMANDS")
 
      (NULL ("" "" "")
            NIL 0)
      (UNDO ("Undo" "M-U" "Undo the last change made.")
-            NIL "Meta,U" "Meta,u" "Function,^D" (UNDO))
+           NIL "Meta,U" "Meta,u" "Function,^D" (UNDO))
      (REDO ("Redo" "M-R" "Redo the last change undone.")
-            NIL "Meta,R" "Meta,r" "Function,Bs" (REDO))
+           NIL "Meta,R" "Meta,r" "Function,Bs" (REDO))
      (NULL ("" "" "")
            NIL 0)
      (FIND-OBJ ("Find" "M-F" "Find the current selection, or prompt for structure to Find.")
@@ -161,7 +160,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
      (EDIT-HELP ("Arglist" "M-H" "Show the argument list for the selected function.")
             NIL "Meta,H" "Meta,h" "Function,^A" (ARGLIST))
      (CONVERT-COMMENT ("Convert Comment" "M-;" 
-                                 "Convert the old style comments in the current selection.")
+                             "Convert the old style comments in the current selection.")
             NIL "Meta,;")
      (COMMENT-OUT-SELECTION NIL NIL "Meta,^;")
      (EDIT-SELECTION ("Edit" "M-O" "Edit the definition of the current selection.")
@@ -173,13 +172,13 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
             NIL "Meta,E" "Meta,e" (EVAL))
      (EXPAND ("Expand" "M-X" "Replace the current selection with its definition.")
             NIL "Meta,X" "Meta,x" IL:ESC "Function,^T" (EXPAND))
-     (EXTRACT-CURRENT-SELECTION ("Extract" "M-/" 
-                                           "Extract one level of structure: unquote or unlist.")
+     (EXTRACT-CURRENT-SELECTION ("Extract" "M-/" "Extract one level of structure: unquote or unlist."
+                                       )
             NIL "Meta,/" (EXTRACT))
      (INSPECT-SELECTION ("Inspect" "M-I" "Inspect the current selection.")
             NIL "Meta,I" "Meta,i" (INSPECT))
      (JOIN ("Join" "M-J" "Join selected items together.")
-            NIL "Meta,J" "Meta,j" (JOIN))
+           NIL "Meta,J" "Meta,j" (JOIN))
      (MUTATE ("Mutate" "M-Z" "Prompt for a function to operate on the current selection.")
             NIL "Meta,Z" "Meta,z")
      ((PARENTHESIZE-CURRENT-SELECTION NIL)
@@ -209,7 +208,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
      (ADD-MENU ("Attach Menu" "M-M" "Attach a command menu.")
             NIL "Meta,M" "Meta,m")
 
-     (IL:* IL:|;;| "RANDOM: tells Meta-Space or Meta-Return to scroll to the selection, using the auto-scroller for free.")
+     (IL:* IL:|;;| "RANDOM: tells Meta-Space or Meta-Return to scroll to the selection, using the auto-scroller for free.")
 
      (TRUE NIL T "Meta, " "Meta,CR")))
 
@@ -269,19 +268,18 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 (IL:RPAQ? MENUS NIL)
 (IL:DECLARE\: IL:EVAL@COMPILE 
 
-(IL:RPAQ WORD-DELIM-CHARS (IL:CHARCODE (IL:SPACE IL:CR IL:TAB - IL:{ IL:} IL:[ IL:] IL:\; < > 
-                                                  IL:\.)))
+(IL:RPAQ WORD-DELIM-CHARS (IL:CHARCODE (IL:SPACE IL:CR IL:TAB - IL:{ IL:} IL:[ IL:] IL:\; < > IL:\.)))
 
 
-(IL:CONSTANTS (WORD-DELIM-CHARS (IL:CHARCODE (IL:SPACE IL:CR IL:TAB - IL:{ IL:} IL:[ IL:] IL:\; <
-                                                    > IL:\.))))
+(IL:CONSTANTS (WORD-DELIM-CHARS (IL:CHARCODE (IL:SPACE IL:CR IL:TAB - IL:{ IL:} IL:[ IL:] IL:\; < > 
+                                                    IL:\.))))
 )
 
 (DEFUN PSEUDO-SELECTION-FROM-SELECTION (SEL)
 
-(IL:* IL:|;;;| "A pseudo-selection is either a node or a list of a node and two integers.  It's interpreted as the select-node, select-start, and select-end fields of a selection.")
+(IL:* IL:|;;;| "A pseudo-selection is either a node or a list of a node and two integers.  It's interpreted as the select-node, select-start, and select-end fields of a selection.")
 
-(IL:* IL:|;;;| "This function takes a selection and creates a pseudo selection from it.")
+(IL:* IL:|;;;| "This function takes a selection and creates a pseudo selection from it.")
 
    (COMPOSE-PSEUDO-SELECTION (IL:FETCH SELECT-NODE IL:OF SEL)
           (IL:FETCH SELECT-START IL:OF SEL)
@@ -290,9 +288,9 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN COMPOSE-PSEUDO-SELECTION (NODE &OPTIONAL START END)
 
-(IL:* IL:|;;;| "A pseudo-selection is either a node or a list of a node and two integers.  It's interpreted as the select-node, select-start, and select-end fields of a selection.")
+(IL:* IL:|;;;| "A pseudo-selection is either a node or a list of a node and two integers.  It's interpreted as the select-node, select-start, and select-end fields of a selection.")
 
-(IL:* IL:|;;;| "This function takes the fields of a pseudo selection and hands back one.")
+(IL:* IL:|;;;| "This function takes the fields of a pseudo selection and hands back one.")
 
    (COND
       ((LISTP NODE)
@@ -308,9 +306,9 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN DECOMPOSE-PSEUDO-SELECTION (PSEL)
 
-(IL:* IL:|;;;| "A pseudo-selection is either a node or a list of a node and two integers.  It's interpreted as the select-node, select-start, and select-end fields of a selection.")
+(IL:* IL:|;;;| "A pseudo-selection is either a node or a list of a node and two integers.  It's interpreted as the select-node, select-start, and select-end fields of a selection.")
 
-(IL:* IL:|;;;| "This function takes a pseudo selection and hands its fields back as values.")
+(IL:* IL:|;;;| "This function takes a pseudo selection and hands its fields back as values.")
 
    (IF (LISTP PSEL)
        (VALUES (FIRST PSEL)
@@ -322,9 +320,9 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN SELECTION-FROM-PSEUDO-SELECTION (PSEL &OPTIONAL SEL)
 
-(IL:* IL:|;;;| "A pseudo-selection is either a node or a list of a node and two integers.  It's interpreted as the select-node, select-start, and select-end fields of a selection.")
+(IL:* IL:|;;;| "A pseudo-selection is either a node or a list of a node and two integers.  It's interpreted as the select-node, select-start, and select-end fields of a selection.")
 
-(IL:* IL:|;;;| "This function takes a pseudo-selection and constructs the corresponding selection.  If you don't hand it a selection structure, it conses one.")
+(IL:* IL:|;;;| "This function takes a pseudo-selection and constructs the corresponding selection.  If you don't hand it a selection structure, it conses one.")
 
    (UNLESS SEL
        (SETF SEL (IL:CREATE EDIT-SELECTION)))
@@ -350,13 +348,13 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 (DEFUN ADD-COMMAND (KEY-CODE FORM &OPTIONAL SCROLL? KEY-NAME COMMAND-NAME HELP-STRING)
    (WHEN FIRST-ADD-COMMAND
 
-       (IL:* IL:|;;| "cache the command-table-spec so the user can undo this!")
+       (IL:* IL:|;;| "cache the command-table-spec so the user can undo this!")
 
        (SETQ DEFAULT-COMMAND-TABLE-SPEC (COPY-TREE COMMAND-TABLE-SPEC))
        (SETQ FIRST-ADD-COMMAND NIL))
    (WHEN (AND KEY-NAME COMMAND-NAME FIRST-ADD-COMMAND-MENU-ENTRY)
 
-       (IL:* IL:|;;| "add another separation line to the help menu.")
+       (IL:* IL:|;;| "add another separation line to the help menu.")
 
        (NCONC COMMAND-TABLE-SPEC (LIST (LIST 'NULL (LIST "-----" "" "")
                                              NIL 0)))
@@ -366,8 +364,8 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                                          SCROLL? KEY-CODE)))
    (OR COMMAND-NAME FORM))
 
-(DEFUN GET-SELECTION (CONTEXT)               (IL:* IL:\; "Edited 23-Apr-2018 18:11 by rmk:")
-                                                     (IL:* IL:\; "Edited 22-Apr-2018 16:48 by rmk:")
+(DEFUN GET-SELECTION (CONTEXT)                       (IL:* IL:\; "Edited 23-Apr-2018 18:11 by rmk:")
+                                                     (IL:* IL:\; "Edited 22-Apr-2018 16:48 by rmk:")
    (LET* ((SELECTION (IL:FETCH SELECTION IL:OF CONTEXT))
           (NODE (IL:FETCH SELECT-NODE IL:OF SELECTION))
           (CHARS (IL:FETCH STRUCTURE IL:OF NODE))
@@ -377,7 +375,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
           (TYPE (IL:FETCH SELECT-TYPE IL:OF SELECTION))
           NOT-ALL-SELECTED)
 
-         (IL:* IL:|;;| "All except NODE are needed for the atom/string cases")
+         (IL:* IL:|;;| "All except NODE are needed for the atom/string cases")
 
          (COND
             ((NULL NODE)
@@ -388,7 +386,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                        (START :SUB-LIST)
                        (T T))))
             (T 
-               (IL:* IL:|;;| "RMK: a single character-atom or a substring of characters in an atom or string. Full multicharacter atoms are structures.  Code copies from COPY-SELECTION-LITATOM")
+               (IL:* IL:|;;| "RMK: a single character-atom or a substring of characters in an atom or string. Full multicharacter atoms are structures.  Code copies from COPY-SELECTION-LITATOM")
 
                (WHEN (IL:TYPE? BROKEN-ATOM CHARS)
                    (IL:SETQ CHARS (IL:FETCH ATOM-CHARS IL:OF CHARS)))
@@ -396,7 +394,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                                            (IL:NCHARS STRING))
                                     (IL:NEQ START 1)))
 
-                   (IL:* IL:|;;| "some subset of the atom/string has been selected")
+                   (IL:* IL:|;;| "some subset of the atom/string has been selected")
 
                    (IL:SETQ NOT-ALL-SELECTED T))
                (VALUES (IL:MKSTRING (IF NOT-ALL-SELECTED
@@ -428,16 +426,14 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
          (PENDING-DELETE POINT SELECTION)
          (INSERT POINT CONTEXT (COPY-LIST NEW-NODES))
 
-         (IL:* IL:|;;| "try to select the stuff that was just inserted.")
+         (IL:* IL:|;;| "try to select the stuff that was just inserted.")
 
          (SELECT-PSEUDO-SEGMENT CONTEXT (COMPOSE-PSEUDO-SELECTION NEW-NODES))))
 
 (DEFUN RESET-COMMANDS ()
    (LET ((COMMANDS (CREATE-COMMAND-TABLE COMMAND-TABLE-SPEC)))
-        (IL:REPLACE (EDIT-ENV COMMAND-TABLE) IL:OF LISP-EDIT-ENVIRONMENT IL:WITH
-                                                                                 (FIRST COMMANDS))
-        (IL:REPLACE (EDIT-ENV HELP-MENU) IL:OF LISP-EDIT-ENVIRONMENT IL:WITH (SECOND
-                                                                                          COMMANDS)))
+        (IL:REPLACE (EDIT-ENV COMMAND-TABLE) IL:OF LISP-EDIT-ENVIRONMENT IL:WITH (FIRST COMMANDS))
+        (IL:REPLACE (EDIT-ENV HELP-MENU) IL:OF LISP-EDIT-ENVIRONMENT IL:WITH (SECOND COMMANDS)))
    T)
 
 (DEFUN DEFAULT-COMMANDS ()
@@ -456,13 +452,12 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
    "Used in Add-Command to signal the first time a new command is added to the middle button menu, so that the user entries can be separated from the default entries"
 )
 
-(DEFUN EQUALIZE-STRING-WIDTHS (STRING-LIST FONT &OPTIONAL PRIN2? (DESIRED-WIDTH (
-                                                                               MAXIMUM-STRING-WIDTH
-                                                                                     STRING-LIST FONT
-                                                                                     PRIN2?))
-                                         (PAD-CHAR #\Space))
+(DEFUN EQUALIZE-STRING-WIDTHS (STRING-LIST FONT &OPTIONAL PRIN2? (DESIRED-WIDTH (MAXIMUM-STRING-WIDTH
+                                                                                 STRING-LIST FONT 
+                                                                                 PRIN2?))
+                                     (PAD-CHAR #\Space))
 
-(IL:* IL:|;;;| "Increase the width of all the strings in STRING-LIST to DESIRED-WIDTH by padding them on the right with PAD-CHAR.")
+(IL:* IL:|;;;| "Increase the width of all the strings in STRING-LIST to DESIRED-WIDTH by padding them on the right with PAD-CHAR.")
 
    (DO ((PAD-CHAR-WIDTH (IL:CHARWIDTH (CHAR-CODE PAD-CHAR)
                                FONT))
@@ -488,7 +483,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN FIND-AND-DISPLAY-STRUCTURE (CONTEXT STR &OPTIONAL SCOPE START WRAP?)
 
-(IL:* IL:|;;;| "Find structure and display it by selecting it (point after) and normalizing the selection in the window.  SCOPE defaults to the root structure of the CONTEXT.  The WRAP? flag says to wrap failing searches around and try them again (i.e., ignore start and try again).")
+(IL:* IL:|;;;| "Find structure and display it by selecting it (point after) and normalizing the selection in the window.  SCOPE defaults to the root structure of the CONTEXT.  The WRAP? flag says to wrap failing searches around and try them again (i.e., ignore start and try again).")
 
    (LET* ((PROMPTWINDOW (GET-PROMPT-WINDOW CONTEXT))
           (TOP (SUBNODE 1 (IL:FETCH ROOT IL:OF CONTEXT)))
@@ -503,7 +498,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN FIND-AND-DISPLAY-STRUCTURE-BACKWARDS (CONTEXT STR &OPTIONAL SCOPE END WRAP?)
 
-(IL:* IL:|;;;| "Like find-and-display-structure, but searches backwards")
+(IL:* IL:|;;;| "Like find-and-display-structure, but searches backwards")
 
    (LET* ((PROMPTWINDOW (GET-PROMPT-WINDOW CONTEXT))
           (TOP (SUBNODE 1 (IL:FETCH ROOT IL:OF CONTEXT)))
@@ -518,7 +513,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN FIND-AND-DISPLAY-SUBSTRUCTURE (CONTEXT STR &OPTIONAL SCOPE START WRAP?)
 
-(IL:* IL:|;;;| "Find substructure and display it by selecting it (pending delete) and normalizing the selection in the window.  SCOPE defaults to the root structure of the CONTEXT.  The WRAP? flag says to wrap failing searches around and try them again (i.e., ignore start and try again).")
+(IL:* IL:|;;;| "Find substructure and display it by selecting it (pending delete) and normalizing the selection in the window.  SCOPE defaults to the root structure of the CONTEXT.  The WRAP? flag says to wrap failing searches around and try them again (i.e., ignore start and try again).")
 
    (LET* ((PROMPTWINDOW (GET-PROMPT-WINDOW CONTEXT))
           (TOP (SUBNODE 1 (IL:FETCH ROOT IL:OF CONTEXT)))
@@ -533,7 +528,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN FIND-AND-DISPLAY-SUBSTRUCTURE-BACKWARDS (CONTEXT STR &OPTIONAL SCOPE END WRAP?)
 
-(IL:* IL:|;;;| "Like find-and-display-substructure but searches backwards")
+(IL:* IL:|;;;| "Like find-and-display-substructure but searches backwards")
 
    (LET* ((PROMPTWINDOW (GET-PROMPT-WINDOW CONTEXT))
           (TOP (SUBNODE 1 (IL:FETCH ROOT IL:OF CONTEXT)))
@@ -548,7 +543,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN FIND-NTH-STRUCTURE (CONTEXT CHARCODE STRUCTURE N)
 
-(IL:* IL:|;;;| "Find the Nth occurance of Structure in this edit, always starting from the beginning.  This function is used as an external command to set the selection to a desired structure.  Find, select, and normalize.")
+(IL:* IL:|;;;| "Find the Nth occurance of Structure in this edit, always starting from the beginning.  This function is used as an external command to set the selection to a desired structure.  Find, select, and normalize.")
 
    (LET ((TOP (SUBNODE 1 (IL:FETCH ROOT IL:OF CONTEXT))))
         (DO ((M 1 (+ M 1))
@@ -561,13 +556,13 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN FIND-NODE-SUBSTRUCTURE (STR STRLEN NODE &OPTIONAL START END CONTINUATION?)
 
-(IL:* IL:|;;;| "STR is a list of structures of length STRLEN.  NODE, together with START and END (which are subnode indices), is taken to indicate a subtree.  We return a pseudo-selection which selects the first sequence of sibling nodes in that subtree whose successive structures match the successive elements of STR.")
+(IL:* IL:|;;;| "STR is a list of structures of length STRLEN.  NODE, together with START and END (which are subnode indices), is taken to indicate a subtree.  We return a pseudo-selection which selects the first sequence of sibling nodes in that subtree whose successive structures match the successive elements of STR.")
 
-(IL:* IL:|;;;| "\"First\" here is taken to mean \"first in linearization order\", so we have to do a careful recursion which: (1a) recursively checks the subtree rooted at the START subnode of NODE (default the first), (1b) checks if the START subnode starts a matching sibling sequence, (2a) recursively checks the subtree rooted at the START+1 subnode of NODE,  (2b) checks if the START+1 subnode starts a matching sibling sequence, . . ., (Na) recusively checks the subtree rooted at the END subnode of NODE (default the last), (Nb) checks if the END subnode starts a matching sibling sequence [note that such a sequence could be only 1 node long since END is the right end of the subtree being checked].")
+(IL:* IL:|;;;| "\"First\" here is taken to mean \"first in linearization order\", so we have to do a careful recursion which: (1a) recursively checks the subtree rooted at the START subnode of NODE (default the first), (1b) checks if the START subnode starts a matching sibling sequence, (2a) recursively checks the subtree rooted at the START+1 subnode of NODE,  (2b) checks if the START+1 subnode starts a matching sibling sequence, . . ., (Na) recusively checks the subtree rooted at the END subnode of NODE (default the last), (Nb) checks if the END subnode starts a matching sibling sequence [note that such a sequence could be only 1 node long since END is the right end of the subtree being checked].")
 
-(IL:* IL:|;;;| "N.B. It might seem that, to get true linearization order, we should check to see if a node starts a matching sibling sequence before we check its subtree.  But since node structures can not be circular, we know that if a match is found in the subtree  below a node then that node could not have started a matching sequence.")
+(IL:* IL:|;;;| "N.B. It might seem that, to get true linearization order, we should check to see if a node starts a matching sibling sequence before we check its subtree.  But since node structures can not be circular, we know that if a match is found in the subtree  below a node then that node could not have started a matching sequence.")
 
-(IL:* IL:|;;;| "The CONTINUATION? flag means that we are continuing a search that has already recursively checked the START subnode, so we skip that particular recursion.  This generally happens when we are working our way up and to the right in some subtree which has already been partially checked.")
+(IL:* IL:|;;;| "The CONTINUATION? flag means that we are continuing a search that has already recursively checked the START subnode, so we skip that particular recursion.  This generally happens when we are working our way up and to the right in some subtree which has already been partially checked.")
 
    (SETF START (OR START 1))
    (LET* ((SUBNODES (IL:FETCH SUB-NODES IL:OF NODE))
@@ -593,7 +588,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN FIND-NODE-SUBSTRUCTURE-BACKWARDS (STR STRLEN NODE &OPTIONAL START END CONTINUATION?)
 
-(IL:* IL:|;;;| "Like find-node-substructure but searches in reverse linearization order.")
+(IL:* IL:|;;;| "Like find-node-substructure but searches in reverse linearization order.")
 
    (LET* ((SUBNODES (IL:FETCH SUB-NODES IL:OF NODE))
           (SUBLENGTH (FIRST SUBNODES)))
@@ -610,8 +605,8 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
              ((OR (NULL SUBS)
                   (AND START (< INDEX START)))
               NIL)
-           (WHEN (AND DOSUBS? (SETF MATCH (FIND-NODE-SUBSTRUCTURE-BACKWARDS STR STRLEN
-                                                 (FIRST SUBS))))
+           (WHEN (AND DOSUBS? (SETF MATCH (FIND-NODE-SUBSTRUCTURE-BACKWARDS STR STRLEN (FIRST SUBS)))
+                      )
                  (RETURN MATCH))
            (UNLESS (OR (< STARTINDEX 1)
                        (MISMATCH STR SUBS :END2 STRLEN :TEST
@@ -621,7 +616,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN FIND-OBJ (CONTEXT &OPTIONAL CHARCODE FIND-STRING BACKWARDS?)
 
-(IL:* IL:|;;;| "Find either the passed structure, the selected structure, or a prompted-for structure.  The search direction is forward unless BACKWARDS? is specified.")
+(IL:* IL:|;;;| "Find either the passed structure, the selected structure, or a prompted-for structure.  The search direction is forward unless BACKWARDS? is specified.")
 
    (CLOSE-OPEN-NODE CONTEXT)
    (LET ((SELECTION (IL:|fetch| SELECTION IL:|of| CONTEXT))
@@ -632,7 +627,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                  (EQ (IL:|fetch| SELECT-TYPE IL:|of| SELECTION)
                      'STRUCTURE))
 
-            (IL:* IL:|;;| "there is a non-string selection")
+            (IL:* IL:|;;| "there is a non-string selection")
 
             (IF BACKWARDS?
                 (FIND-SELECTION-BACKWARDS CONTEXT WRAP?)
@@ -644,7 +639,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN FIND-SELECTION (CONTEXT &OPTIONAL WRAP?)
 
-(IL:* IL:|;;;| "Find the next match of the current selection and display it.")
+(IL:* IL:|;;;| "Find the next match of the current selection and display it.")
 
    (LET* ((PROMPTWINDOW (GET-PROMPT-WINDOW CONTEXT))
           (SELECTION (IL:|fetch| SELECTION IL:|of| CONTEXT))
@@ -652,32 +647,31 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
           (START (IL:|fetch| SELECT-START IL:|of| SELECTION)))
          (IF START
 
-             (IL:* IL:|;;| "a sibling sequence is selected, look for a matching sequence after it")
+             (IL:* IL:|;;| "a sibling sequence is selected, look for a matching sequence after it")
 
              (FIND-AND-DISPLAY-SUBSTRUCTURE CONTEXT (STRUCTURE-FROM-SELECTION SELECTION)
                     NIL
                     (LIST NODE (1+ START))
                     WRAP?)
 
-             (IL:* IL:|;;| "a node is selected, look for a matching node ")
+             (IL:* IL:|;;| "a node is selected, look for a matching node ")
 
              (IF (SETF START (NEXT-NODE NODE T))
 
-                 (IL:* IL:|;;| "start the search with the following node")
+                 (IL:* IL:|;;| "start the search with the following node")
 
                  (FIND-AND-DISPLAY-STRUCTURE CONTEXT (STRUCTURE-FROM-SELECTION SELECTION)
                         NIL START WRAP?)
 
-                 (IL:* IL:|;;| "there are no more nodes, either wrap or give up")
+                 (IL:* IL:|;;| "there are no more nodes, either wrap or give up")
 
                  (IF WRAP?
-                     (FIND-AND-DISPLAY-STRUCTURE CONTEXT (STRUCTURE-FROM-SELECTION SELECTION)
-                            )
+                     (FIND-AND-DISPLAY-STRUCTURE CONTEXT (STRUCTURE-FROM-SELECTION SELECTION))
                      (FORMAT PROMPTWINDOW "~%At end; no more structure to search."))))))
 
 (DEFUN FIND-SELECTION-BACKWARDS (CONTEXT &OPTIONAL WRAP?)
 
-(IL:* IL:|;;;| "Find the previous match of the current selection and display it.")
+(IL:* IL:|;;;| "Find the previous match of the current selection and display it.")
 
    (LET* ((PROMPTWINDOW (GET-PROMPT-WINDOW CONTEXT))
           (SELECTION (IL:|fetch| SELECTION IL:|of| CONTEXT))
@@ -686,36 +680,34 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                    (IL:|fetch| SELECT-END IL:|of| SELECTION))))
          (IF END
 
-             (IL:* IL:|;;| "a sibling sequence is selected, look for a matching sequence before it")
+             (IL:* IL:|;;| "a sibling sequence is selected, look for a matching sequence before it")
 
-             (FIND-AND-DISPLAY-SUBSTRUCTURE-BACKWARDS CONTEXT (STRUCTURE-FROM-SELECTION
-                                                                   SELECTION)
+             (FIND-AND-DISPLAY-SUBSTRUCTURE-BACKWARDS CONTEXT (STRUCTURE-FROM-SELECTION SELECTION)
                     NIL
                     (LIST NODE (1- END))
                     WRAP?)
 
-             (IL:* IL:|;;| "a node is selected, look for a matching node ")
+             (IL:* IL:|;;| "a node is selected, look for a matching node ")
 
              (IF (SETF END (PREV-NODE NODE T))
 
-                 (IL:* IL:|;;| "start the search with the previous node")
+                 (IL:* IL:|;;| "start the search with the previous node")
 
-                 (FIND-AND-DISPLAY-STRUCTURE-BACKWARDS CONTEXT (STRUCTURE-FROM-SELECTION
-                                                                    SELECTION)
+                 (FIND-AND-DISPLAY-STRUCTURE-BACKWARDS CONTEXT (STRUCTURE-FROM-SELECTION SELECTION)
                         NIL END WRAP?)
 
-                 (IL:* IL:|;;| "there are no more nodes, either wrap or give up")
+                 (IL:* IL:|;;| "there are no more nodes, either wrap or give up")
 
                  (IF WRAP?
-                     (FIND-AND-DISPLAY-STRUCTURE-BACKWARDS CONTEXT (STRUCTURE-FROM-SELECTION
-                                                                        SELECTION))
+                     (FIND-AND-DISPLAY-STRUCTURE-BACKWARDS CONTEXT (STRUCTURE-FROM-SELECTION 
+                                                                          SELECTION))
                      (FORMAT PROMPTWINDOW "~%At beginning; no more structure to search."))))))
 
 (DEFUN FIND-STRUCTURE (STR SCOPE &OPTIONAL START)
 
-(IL:* IL:|;;;| "Search forward in linearization order for a node whose structure matches STR.  The search is bounded by SCOPE (a pseudo-selection taken to indicate a subtree) and starts at START (a pseudo-selection taken to indicate its left-most node).  START defaults to SCOPE.    The return value is the first node in SCOPE at or after START whose structure is IL:EQUAL to STR.")
+(IL:* IL:|;;;| "Search forward in linearization order for a node whose structure matches STR.  The search is bounded by SCOPE (a pseudo-selection taken to indicate a subtree) and starts at START (a pseudo-selection taken to indicate its left-most node).  START defaults to SCOPE.    The return value is the first node in SCOPE at or after START whose structure is IL:EQUAL to STR.")
 
-(IL:* IL:|;;;| "N.B. Since node structures can not be circular, no subnode of a node can have structure matching that node.  Thus looking for a matching node in pre-order is the same as looking for one in linearization order.  So we do a pre-order search here.")
+(IL:* IL:|;;;| "N.B. Since node structures can not be circular, no subnode of a node can have structure matching that node.  Thus looking for a matching node in pre-order is the same as looking for one in linearization order.  So we do a pre-order search here.")
 
    (MULTIPLE-VALUE-BIND (SCOPE-NODE SCOPE-START SCOPE-END)
           (DECOMPOSE-PSEUDO-SELECTION SCOPE)
@@ -727,11 +719,11 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                                      (EQ START-NODE SCOPE-NODE)))
                             (IL:EQUAL STR (IL:FETCH STRUCTURE IL:OF SCOPE-NODE)))
 
-                     (IL:* IL:|;;| "special case: the scope includes its root node, we're starting at the root of the scope, and the root of the scope matches the passed structure.")
+                     (IL:* IL:|;;| "special case: the scope includes its root node, we're starting at the root of the scope, and the root of the scope matches the passed structure.")
 
                      (RETURN-FROM FIND-STRUCTURE SCOPE-NODE))
 
-                 (IL:* IL:|;;| "normal case: check all the nodes in the scope subtree in preorder.")
+                 (IL:* IL:|;;| "normal case: check all the nodes in the scope subtree in preorder.")
 
                  (DO* ((MIN-DEPTH (1+ (IL:FETCH DEPTH IL:OF SCOPE-NODE)))
                        (NODE (OR (IF START-START
@@ -755,7 +747,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN FIND-STRUCTURE-BACKWARDS (STR SCOPE &OPTIONAL END)
 
-(IL:* IL:|;;;| "like find-structure but searches in reverse linearization order.  Actually we search in postorder rather than reverse linearization order but this works just as well for the same reasons that preorder matches linearization order.")
+(IL:* IL:|;;;| "like find-structure but searches in reverse linearization order.  Actually we search in postorder rather than reverse linearization order but this works just as well for the same reasons that preorder matches linearization order.")
 
    (MULTIPLE-VALUE-BIND (SCOPE-NODE SCOPE-START SCOPE-END)
           (DECOMPOSE-PSEUDO-SELECTION SCOPE)
@@ -767,12 +759,11 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                                      (EQ END-NODE SCOPE-NODE)))
                             (IL:EQUAL STR (IL:FETCH STRUCTURE IL:OF SCOPE-NODE)))
 
-                     (IL:* IL:|;;| "special case: the scope includes its root node, we're ending at the root of the scope, and the root of the scope matches the passed structure.")
+                     (IL:* IL:|;;| "special case: the scope includes its root node, we're ending at the root of the scope, and the root of the scope matches the passed structure.")
 
                      (RETURN-FROM FIND-STRUCTURE-BACKWARDS SCOPE-NODE))
 
-                 (IL:* IL:|;;| 
-               "normal case: check all the nodes in the scope subtree in postorder.")
+                 (IL:* IL:|;;| "normal case: check all the nodes in the scope subtree in postorder.")
 
                  (DO* ((MIN-DEPTH (1+ (IL:FETCH DEPTH IL:OF SCOPE-NODE)))
                        (NODE (OR (IF END-END
@@ -796,9 +787,9 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN FIND-SUBSTRUCTURE (STR SCOPE &OPTIONAL START)
 
-(IL:* IL:|;;;| "Search forward in linearization order for a sequence of nodes whose successive structures match the successive elements of STR.  The search is bounded by SCOPE (a pseudo-selection taken to indicate a subtree) and starts at START (a pseudo-selection taken to indicate the left edge of a subtree).  START defauts to SCOPE.  The return value is a pseudo-selection indicating the sibling sequence of nodes in SCOPE at or to the right of START whose successive node structures are IL:EQUAL to the successive members of STR.")
+(IL:* IL:|;;;| "Search forward in linearization order for a sequence of nodes whose successive structures match the successive elements of STR.  The search is bounded by SCOPE (a pseudo-selection taken to indicate a subtree) and starts at START (a pseudo-selection taken to indicate the left edge of a subtree).  START defauts to SCOPE.  The return value is a pseudo-selection indicating the sibling sequence of nodes in SCOPE at or to the right of START whose successive node structures are IL:EQUAL to the successive members of STR.")
 
-(IL:* IL:|;;;| "N.B. For a sequence of sibling nodes, first in linearization order can not be found by doing a preorder search.  See find-node-substructure for details about the correct search method.")
+(IL:* IL:|;;;| "N.B. For a sequence of sibling nodes, first in linearization order can not be found by doing a preorder search.  See find-node-substructure for details about the correct search method.")
 
    (MULTIPLE-VALUE-BIND (SCOPE-NODE SCOPE-START SCOPE-END)
           (DECOMPOSE-PSEUDO-SELECTION SCOPE)
@@ -807,18 +798,18 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                  (COND
                     ((NULL START-NODE)
 
-                     (IL:* IL:|;;| "just check the entire scope")
+                     (IL:* IL:|;;| "just check the entire scope")
 
                      (FIND-NODE-SUBSTRUCTURE STR (LENGTH STR)
                             SCOPE-NODE SCOPE-START SCOPE-END))
                     ((EQ START-NODE SCOPE-NODE)
 
-                     (IL:* IL:|;;| "just check a terminal subtree of the scope")
+                     (IL:* IL:|;;| "just check a terminal subtree of the scope")
 
                      (FIND-NODE-SUBSTRUCTURE STR (LENGTH STR)
                             SCOPE-NODE START-START SCOPE-END))
                     (T 
-                       (IL:* IL:|;;| "check each node from the start subtree up and to the right in the scope subtree.  We carefully resume the recursion that would have happened if we had started from the root of the subtree.  This means checking remaining structure in super-nodes on our way from the start node back up the subtree.")
+                       (IL:* IL:|;;| "check each node from the start subtree up and to the right in the scope subtree.  We carefully resume the recursion that would have happened if we had started from the root of the subtree.  This means checking remaining structure in super-nodes on our way from the start node back up the subtree.")
 
                        (DO ((NODE START-NODE SUPER-NODE)
                             (SUPER-NODE (IL:FETCH SUPER-NODE IL:OF START-NODE)
@@ -839,7 +830,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN FIND-SUBSTRUCTURE-BACKWARDS (STR SCOPE &OPTIONAL END)
 
-(IL:* IL:|;;;| "Like find-substructure but searches in reverse linearization order.")
+(IL:* IL:|;;;| "Like find-substructure but searches in reverse linearization order.")
 
    (MULTIPLE-VALUE-BIND (SCOPE-NODE SCOPE-START SCOPE-END)
           (DECOMPOSE-PSEUDO-SELECTION SCOPE)
@@ -848,18 +839,18 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                  (COND
                     ((NULL END-NODE)
 
-                     (IL:* IL:|;;| "just check the entire scope")
+                     (IL:* IL:|;;| "just check the entire scope")
 
                      (FIND-NODE-SUBSTRUCTURE-BACKWARDS STR (LENGTH STR)
                             SCOPE-NODE SCOPE-START SCOPE-END))
                     ((EQ END-NODE SCOPE-NODE)
 
-                     (IL:* IL:|;;| "just check an initial subtree of the scope")
+                     (IL:* IL:|;;| "just check an initial subtree of the scope")
 
                      (FIND-NODE-SUBSTRUCTURE-BACKWARDS STR (LENGTH STR)
                             SCOPE-NODE SCOPE-START END-END))
                     (T 
-                       (IL:* IL:|;;| "check each node in the initial subtree of scope terminated by the end subtree.  We carefully resume the recursion that would have happened if we had started from the root of the scope subtree.  This means checking remaining structure in super-nodes on our way from the end node back up the subtree.")
+                       (IL:* IL:|;;| "check each node in the initial subtree of scope terminated by the end subtree.  We carefully resume the recursion that would have happened if we had started from the root of the scope subtree.  This means checking remaining structure in super-nodes on our way from the end node back up the subtree.")
 
                        (DO ((NODE END-NODE SUPER-NODE)
                             (SUPER-NODE (IL:FETCH SUPER-NODE IL:OF END-NODE)
@@ -873,8 +864,8 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                             (STRLEN (LENGTH STR))
                             MATCH)
                            ((OR (NULL NODE)
-                                (SETF MATCH (FIND-NODE-SUBSTRUCTURE-BACKWARDS STR STRLEN NODE 
-                                                   START END CONTINUATION?))
+                                (SETF MATCH (FIND-NODE-SUBSTRUCTURE-BACKWARDS STR STRLEN NODE START 
+                                                   END CONTINUATION?))
                                 (EQ NODE SCOPE-NODE))
                             MATCH)))))))
 
@@ -885,15 +876,14 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN SEARCH-OBJ (CONTEXT &OPTIONAL SEARCH-STRING WRAP?)
 
-(IL:* IL:|;;;| "Search for the the structure(s) in the string SEARCH-OBJ and display them.  The search starts just after the current point  or selection, if any.")
+(IL:* IL:|;;;| "Search for the the structure(s) in the string SEARCH-OBJ and display them.  The search starts just after the current point  or selection, if any.")
 
    (MULTIPLE-VALUE-BIND (STR STRLEN)
           (STRUCTURE-FROM-STRING (OR SEARCH-STRING (SETF SEARCH-STRING
-                                                             (GET-USER-STRING CONTEXT "Find: "
-                                                                    (OR (IL:|fetch| 
-                                                                               FIND-CANDIDATE
-                                                                           IL:|of| CONTEXT)
-                                                                        FIND-CANDIDATE)))))
+                                                         (GET-USER-STRING CONTEXT "Find: "
+                                                                (OR (IL:|fetch| FIND-CANDIDATE
+                                                                       IL:|of| CONTEXT)
+                                                                    FIND-CANDIDATE)))))
           (COND
              ((< STRLEN 0)
               (FORMAT (GET-PROMPT-WINDOW CONTEXT)
@@ -904,12 +894,12 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                      "-- aborted.")
               (RETURN-FROM SEARCH-OBJ)))
 
-          (IL:* IL:|;;| "update the remembered defaults")
+          (IL:* IL:|;;| "update the remembered defaults")
 
-          (IL:|replace| FIND-CANDIDATE IL:|of| CONTEXT IL:|with| (IL:SETQ FIND-CANDIDATE
-                                                                              SEARCH-STRING))
+          (IL:|replace| FIND-CANDIDATE IL:|of| CONTEXT IL:|with| (IL:SETQ FIND-CANDIDATE 
+                                                                  SEARCH-STRING))
 
-          (IL:* IL:|;;| "figure out where to search and where to start")
+          (IL:* IL:|;;| "figure out where to search and where to start")
 
           (LET* ((SCOPE (SUBNODE 1 (IL:FETCH ROOT IL:OF CONTEXT)))
                  (START (LET* ((POINT (IL:|fetch| CARET-POINT IL:|of| CONTEXT))
@@ -933,36 +923,35 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                                  (T SCOPE)))))
                 (UNLESS (OR WRAP? START)
 
-                    (IL:* IL:|;;| "Nothing left to search, and we're not supposed to wrap")
+                    (IL:* IL:|;;| "Nothing left to search, and we're not supposed to wrap")
 
                     (FORMAT (GET-PROMPT-WINDOW CONTEXT)
                            "~%At end; no more structure to search.")
                     (RETURN-FROM SEARCH-OBJ))
 
-                (IL:* IL:|;;| "do the search")
+                (IL:* IL:|;;| "do the search")
 
                 (IF (> STRLEN 1)
 
-                    (IL:* IL:|;;| "substructure search")
+                    (IL:* IL:|;;| "substructure search")
 
                     (FIND-AND-DISPLAY-SUBSTRUCTURE CONTEXT STR SCOPE START WRAP?)
 
-                    (IL:* IL:|;;| "structure search")
+                    (IL:* IL:|;;| "structure search")
 
                     (FIND-AND-DISPLAY-STRUCTURE CONTEXT (FIRST STR)
                            SCOPE START WRAP?)))))
 
 (DEFUN SEARCH-OBJ-BACKWARDS (CONTEXT &OPTIONAL SEARCH-STRING WRAP?)
 
-(IL:* IL:|;;;| "Like search-obj but searches backwards.")
+(IL:* IL:|;;;| "Like search-obj but searches backwards.")
 
    (MULTIPLE-VALUE-BIND (STR STRLEN)
           (STRUCTURE-FROM-STRING (OR SEARCH-STRING (SETF SEARCH-STRING
-                                                             (GET-USER-STRING CONTEXT "Find: "
-                                                                    (OR (IL:|fetch| 
-                                                                               FIND-CANDIDATE
-                                                                           IL:|of| CONTEXT)
-                                                                        FIND-CANDIDATE)))))
+                                                         (GET-USER-STRING CONTEXT "Find: "
+                                                                (OR (IL:|fetch| FIND-CANDIDATE
+                                                                       IL:|of| CONTEXT)
+                                                                    FIND-CANDIDATE)))))
           (COND
              ((< STRLEN 0)
               (FORMAT (GET-PROMPT-WINDOW CONTEXT)
@@ -973,12 +962,12 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                      "-- aborted.")
               (RETURN-FROM SEARCH-OBJ-BACKWARDS)))
 
-          (IL:* IL:|;;| "update the remembered defaults")
+          (IL:* IL:|;;| "update the remembered defaults")
 
-          (IL:|replace| FIND-CANDIDATE IL:|of| CONTEXT IL:|with| (IL:SETQ FIND-CANDIDATE
-                                                                              SEARCH-STRING))
+          (IL:|replace| FIND-CANDIDATE IL:|of| CONTEXT IL:|with| (IL:SETQ FIND-CANDIDATE 
+                                                                  SEARCH-STRING))
 
-          (IL:* IL:|;;| "figure out where to search and where to start")
+          (IL:* IL:|;;| "figure out where to search and where to start")
 
           (LET* ((SCOPE (SUBNODE 1 (IL:FETCH ROOT IL:OF CONTEXT)))
                  (END (LET* ((POINT (IL:|fetch| CARET-POINT IL:|of| CONTEXT))
@@ -1002,30 +991,30 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                                (T SCOPE)))))
                 (UNLESS (OR WRAP? END)
 
-                    (IL:* IL:|;;| "Nothing left to search, and we're not supposed to wrap")
+                    (IL:* IL:|;;| "Nothing left to search, and we're not supposed to wrap")
 
                     (FORMAT (GET-PROMPT-WINDOW CONTEXT)
                            "~%At beginning; no more structure to search.")
                     (RETURN-FROM SEARCH-OBJ-BACKWARDS))
 
-                (IL:* IL:|;;| "do the search")
+                (IL:* IL:|;;| "do the search")
 
                 (IF (> STRLEN 1)
 
-                    (IL:* IL:|;;| "substructure search")
+                    (IL:* IL:|;;| "substructure search")
 
                     (FIND-AND-DISPLAY-SUBSTRUCTURE-BACKWARDS CONTEXT STR SCOPE END WRAP?)
 
-                    (IL:* IL:|;;| "structure search")
+                    (IL:* IL:|;;| "structure search")
 
                     (FIND-AND-DISPLAY-STRUCTURE-BACKWARDS CONTEXT (FIRST STR)
                            SCOPE END WRAP?)))))
 
 (DEFUN SUBSTITUTE-OBJ (CONTEXT &OPTIONAL CHARCODE OLDSTR NEWSTR REMOVE?)
 
-(IL:* IL:|;;;| "OLDSTR and NEWSTR are strings.  In the scope of the selection, replace every occurence of structure matching OLDSTR by structure parsed from NEWSTR.  If REMOVE? is specified, just remove structure matching OLD.")
+(IL:* IL:|;;;| "OLDSTR and NEWSTR are strings.  In the scope of the selection, replace every occurence of structure matching OLDSTR by structure parsed from NEWSTR.  If REMOVE? is specified, just remove structure matching OLD.")
 
-(IL:* IL:|;;;| "We preserve the selection as best we can.  Point gets thrown away.")
+(IL:* IL:|;;;| "We preserve the selection as best we can.  Point gets thrown away.")
 
    (CLOSE-OPEN-NODE CONTEXT)
    (LET* ((PROMPTWINDOW (GET-PROMPT-WINDOW CONTEXT))
@@ -1033,7 +1022,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
           (SCOPE NIL)
           (TYPE (IF REMOVE?
                     "delet"
-                    "substitut")))                           (IL:* IL:\; "hack!!!")
+                    "substitut")))                           (IL:* IL:\; "hack!!!")
          (UNLESS (AND (IL:|fetch| SELECT-NODE IL:|of| SELECTION)
                       (EQ (IL:|fetch| SELECT-TYPE IL:|of| SELECTION)
                           'STRUCTURE))
@@ -1041,14 +1030,13 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
              (RETURN-FROM SUBSTITUTE-OBJ T))
          (SETQ SCOPE (PSEUDO-SELECTION-FROM-SELECTION SELECTION))
          (MULTIPLE-VALUE-BIND (OLD OLDLEN)
-                (STRUCTURE-FROM-STRING (OR OLDSTR (SETF OLDSTR
-                                                            (GET-USER-STRING CONTEXT
-                                                                   (IF REMOVE?
-                                                                       "Delete form: "
-                                                                       "Replace old form: ")
-                                                                   (OR (IL:|fetch| FIND-CANDIDATE
-                                                                          IL:|of| CONTEXT)
-                                                                       FIND-CANDIDATE)))))
+                (STRUCTURE-FROM-STRING (OR OLDSTR (SETF OLDSTR (GET-USER-STRING CONTEXT
+                                                                      (IF REMOVE?
+                                                                          "Delete form: "
+                                                                          "Replace old form: ")
+                                                                      (OR (IL:|fetch| FIND-CANDIDATE
+                                                                             IL:|of| CONTEXT)
+                                                                          FIND-CANDIDATE)))))
                 (COND
                    ((< OLDLEN 0)
                     (FORMAT PROMPTWINDOW " -- Invalid structure.")
@@ -1060,13 +1048,13 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                        (IF REMOVE?
                            (VALUES NIL 0)
                            (STRUCTURE-FROM-STRING (OR NEWSTR
-                                                          (SETF NEWSTR
-                                                                (GET-USER-STRING
-                                                                 CONTEXT "with new form: "
-                                                                 (OR (IL:|fetch| 
-                                                                            SUBSTITUTE-CANDIDATE
-                                                                        IL:|of| CONTEXT)
-                                                                     SUBSTITUTE-CANDIDATE))))))
+                                                      (SETF NEWSTR
+                                                            (GET-USER-STRING CONTEXT 
+                                                                   "with new form: "
+                                                                   (OR (IL:|fetch| 
+                                                                              SUBSTITUTE-CANDIDATE
+                                                                          IL:|of| CONTEXT)
+                                                                       SUBSTITUTE-CANDIDATE))))))
                        (COND
                           ((< NEWLEN 0)
                            (FORMAT PROMPTWINDOW " -- Invalid structure.")
@@ -1076,16 +1064,16 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                            (FORMAT PROMPTWINDOW "-- aborted.")
                            (RETURN-FROM SUBSTITUTE-OBJ T)))
 
-                       (IL:* IL:|;;| "update defaults ")
+                       (IL:* IL:|;;| "update defaults ")
 
-                       (IL:|replace| FIND-CANDIDATE IL:|of| CONTEXT IL:|with| (IL:SETQ 
-                                                                                       FIND-CANDIDATE
-                                                                                           OLDSTR))
+                       (IL:|replace| FIND-CANDIDATE IL:|of| CONTEXT IL:|with| (IL:SETQ FIND-CANDIDATE
+                                                                               OLDSTR))
                        (UNLESS REMOVE?
-                           (IL:|replace| SUBSTITUTE-CANDIDATE IL:|of| CONTEXT
-                              IL:|with| (IL:SETQ SUBSTITUTE-CANDIDATE NEWSTR)))
+                           (IL:|replace| SUBSTITUTE-CANDIDATE IL:|of| CONTEXT IL:|with| (IL:SETQ 
+                                                                                 SUBSTITUTE-CANDIDATE
+                                                                                         NEWSTR)))
 
-                       (IL:* IL:|;;| "do the substitution, report, and reselect.")
+                       (IL:* IL:|;;| "do the substitution, report, and reselect.")
 
                        (MULTIPLE-VALUE-BIND (NEW-SCOPE SUBCOUNT)
                               (IF (> OLDLEN 1)
@@ -1101,14 +1089,14 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN SUBSTITUTE-STRUCTURE (CONTEXT OLD NEW SCOPE &OPTIONAL REMOVE?)
 
-(IL:* IL:|;;;| "Inside SCOPE, replace any node with structure OLD by nodes gotten from parsing NEW.  If REMOVE? is given, just delete the old nodes.  Returns two values: the final scope after all substitutions are made, and the number of substitutions/deletions made.")
+(IL:* IL:|;;;| "Inside SCOPE, replace any node with structure OLD by nodes gotten from parsing NEW.  If REMOVE? is given, just delete the old nodes.  Returns two values: the final scope after all substitutions are made, and the number of substitutions/deletions made.")
 
-(IL:* IL:|;;;| "The substitution is done as a single undoable operation, and the current selection and point are thrown away.")
+(IL:* IL:|;;;| "The substitution is done as a single undoable operation, and the current selection and point are thrown away.")
 
    (MULTIPLE-VALUE-BIND (SCOPE-NODE SCOPE-START SCOPE-END)
           (DECOMPOSE-PSEUDO-SELECTION SCOPE)
-          (LET* ((ROOT (IL:FETCH ROOT IL:OF CONTEXT))(IL:* IL:\; 
-                                                           "substituting for root is special")
+          (LET* ((ROOT (IL:FETCH ROOT IL:OF CONTEXT))        (IL:* IL:\; 
+                                                             "substituting for root is special")
                  (POINT (IL:FETCH CARET-POINT IL:OF CONTEXT))
                  (SELECTION (IL:FETCH SELECTION IL:OF CONTEXT))
                  (NEWLEN (IF REMOVE?
@@ -1139,14 +1127,14 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                       (SET-SELECTION-NOWHERE SELECTION)
                       (VALUES SCOPE NUMSUBS))
 
-                   (IL:* IL:|;;| "replace the target ")
+                   (IL:* IL:|;;| "replace the target ")
 
                    (SELECT-NODE CONTEXT TARGET)
                    (COND
                       (REMOVE? (COND
                                   ((EQ TARGET-SUPER ROOT)
 
-                                   (IL:* IL:|;;| "\"delete\" the root structure by making it nil")
+                                   (IL:* IL:|;;| "\"delete\" the root structure by making it nil")
 
                                    (PENDING-DELETE POINT SELECTION)
                                    (INSERT-NULL-LIST CONTEXT))
@@ -1154,19 +1142,19 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                       (T (PENDING-DELETE POINT SELECTION)
                          (INSERT POINT CONTEXT (COPY-LIST NEW-NODES))))
 
-                   (IL:* IL:|;;| "fix up the scope, if necessary")
+                   (IL:* IL:|;;| "fix up the scope, if necessary")
 
                    (COND
                       ((EQ TARGET SCOPE-NODE)
 
-                       (IL:* IL:|;;| "matched the scope, so we're done")
+                       (IL:* IL:|;;| "matched the scope, so we're done")
 
                        (COND
                           (REMOVE? (SETF SCOPE NIL))
                           ((= NEWLEN 1)
                            (SETF SCOPE (SUBNODE TARGET-INDEX TARGET-SUPER)))
                           (T 
-                             (IL:* IL:|;;| "replacing the root structure with multiple nodes inserts a new level of list between the root (target-super) and the multiple nodes inserted.  In this case, make the scope node be the new list node instead of the root itself.")
+                             (IL:* IL:|;;| "replacing the root structure with multiple nodes inserts a new level of list between the root (target-super) and the multiple nodes inserted.  In this case, make the scope node be the new list node instead of the root itself.")
 
                              (SETF SCOPE (LIST (IF (EQ TARGET-SUPER ROOT)
                                                    (SUBNODE 1 ROOT)
@@ -1176,7 +1164,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                        (SETF RESUME NIL))
                       ((AND SCOPE-START (EQ TARGET-SUPER SCOPE-NODE))
 
-                       (IL:* IL:|;;| "matched a direct subnode of an extended scope")
+                       (IL:* IL:|;;| "matched a direct subnode of an extended scope")
 
                        (WHEN (= TARGET-INDEX SCOPE-END)
                              (SETF RESUME NIL))
@@ -1185,9 +1173,9 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN SUBSTITUTE-SUBSTRUCTURE (CONTEXT OLD NEW SCOPE &OPTIONAL REMOVE?)
 
-(IL:* IL:|;;;| "Inside SCOPE, replace any sequences of nodes whose structures sequentially match the elements of OLD by nodes gotten from parsing NEW.  If REMOVE? is given, just delete the old sequences.  Returns two values: the final scope after all substitutions are made, and the number of substitutions/deletions made.")
+(IL:* IL:|;;;| "Inside SCOPE, replace any sequences of nodes whose structures sequentially match the elements of OLD by nodes gotten from parsing NEW.  If REMOVE? is given, just delete the old sequences.  Returns two values: the final scope after all substitutions are made, and the number of substitutions/deletions made.")
 
-(IL:* IL:|;;;| "The substitution is done as a single undoable operation, and the current selection and point are thrown away.")
+(IL:* IL:|;;;| "The substitution is done as a single undoable operation, and the current selection and point are thrown away.")
 
    (MULTIPLE-VALUE-BIND (SCOPE-NODE SCOPE-START SCOPE-END)
           (DECOMPOSE-PSEUDO-SELECTION SCOPE)
@@ -1218,7 +1206,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                    (MULTIPLE-VALUE-BIND (TNODE TSTART TEND)
                           (DECOMPOSE-PSEUDO-SELECTION TARGET)
 
-                          (IL:* IL:|;;| "replace the target ")
+                          (IL:* IL:|;;| "replace the target ")
 
                           (SELECT-PSEUDO-SEGMENT CONTEXT TARGET)
                           (COND
@@ -1226,13 +1214,12 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                              (T (PENDING-DELETE POINT SELECTION)
                                 (INSERT POINT CONTEXT (COPY-LIST NEW-NODES))))
 
-                          (IL:* IL:|;;| 
-                        "fix up the scope, if necessary, and figure where to resume")
+                          (IL:* IL:|;;| "fix up the scope, if necessary, and figure where to resume")
 
                           (COND
                              ((AND SCOPE-START (EQ TNODE SCOPE-NODE))
 
-                              (IL:* IL:|;;| "matched direct subnodes of an extended scope")
+                              (IL:* IL:|;;| "matched direct subnodes of an extended scope")
 
                               (IF (= TEND SCOPE-END)
                                   (SETF RESUME NIL)
@@ -1243,7 +1230,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN STRUCTURE-FROM-SELECTION (SELECTION)
 
-(IL:* IL:|;;;| "selection must be a structure selection.  Return the structure encompassed by selection, which if the selection is a node is the structure of that node, and if the selection is a segment a list of the structures of the nodes in that segment.")
+(IL:* IL:|;;;| "selection must be a structure selection.  Return the structure encompassed by selection, which if the selection is a node is the structure of that node, and if the selection is a segment a list of the structures of the nodes in that segment.")
 
    (LET* ((NODE (IL:FETCH SELECT-NODE IL:OF SELECTION))
           (START (IL:FETCH SELECT-START IL:OF SELECTION))
@@ -1263,7 +1250,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN STRUCTURE-FROM-STRING (STR)
 
-(IL:* IL:|;;;| "return all the structures that can be read from string as a list.  return a second value saying how many structures there were.  If an error is encountered, a second value of -1 is returned. ")
+(IL:* IL:|;;;| "return all the structures that can be read from string as a list.  return a second value saying how many structures there were.  If an error is encountered, a second value of -1 is returned. ")
 
    (COND
       ((NULL STR)
@@ -1285,7 +1272,7 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 
 (DEFUN COMMENT-OUT-SELECTION (CONTEXT CHARCODE)
 
-(IL:* IL:|;;;| "given a sequence of whole structure selections, build a 5 level comment node and replace the nodes with the comment.")
+(IL:* IL:|;;;| "given a sequence of whole structure selections, build a 5 level comment node and replace the nodes with the comment.")
 
    (LET* ((SELECTION (IL:FETCH SELECTION IL:OF CONTEXT))
           (POINT (IL:FETCH CARET-POINT IL:OF CONTEXT))
@@ -1301,14 +1288,14 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
                   (START (WITH-OUTPUT-TO-STRING (S)
                                 (IL:BIND BLANK-BEFORE IL:FOR I IL:FROM START
                                    IL:TO (OR (IL:FETCH SELECT-END IL:OF SELECTION)
-                                                 START) IL:AS X
+                                             START) IL:AS X
                                    IL:ON (CDR (IL:NTH (IL:FETCH SUB-NODES IL:OF NODE)
-                                                         START))
-                                   IL:DO (IF BLANK-BEFORE
-                                                 (WRITE-CHAR #\Space S)
-                                                 (SETQ BLANK-BEFORE T))
-                                         (PRIN1 (IL:FETCH STRUCTURE IL:OF (CAR X))
-                                                S))))
+                                                     START)) IL:DO (IF BLANK-BEFORE
+                                                                       (WRITE-CHAR #\Space S)
+                                                                       (SETQ BLANK-BEFORE T))
+                                                                   (PRIN1 (IL:FETCH STRUCTURE
+                                                                             IL:OF (CAR X))
+                                                                          S))))
                   (T (FORMAT NIL "~S" (IL:FETCH STRUCTURE IL:OF NODE))))))
          (WHEN STR
              (LET ((NEW-NODE (PARSE-NEW (LIST 'IL:* 'IL:\| STR)
@@ -1585,42 +1572,40 @@ IL:|{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>SEDIT-COMMANDS.;6|)
 (il:lambda (context node subnodes) (il:* il:\; "Edited  7-Jul-87 09:39 by DCB") (il:* il:|;;;| "sticks subnodes back into node and revives them.  ") (rplacd (il:fetch sub-nodes il:of node) subnodes) (il:for subnode il:in subnodes il:as index il:from 1 il:do (il:replace super-node il:of subnode il:with node) (il:replace sub-node-index il:of subnode il:with index) (detach-node subnode) (revive-node subnode (il:fetch depth il:of node))) (il:* il:|;;| "used to reparse here.  now if we simply note the change, the format types, format values, and linear forms will be recomputed.") (note-change node context))
 )
 )
-(IL:PUTPROPS IL:SEDIT-COMMANDS IL:COPYRIGHT ("Venue & Xerox Corporation" 1986 1987 1988 1990 1991 2018
- 2021))
 (IL:DECLARE\: IL:DONTCOPY
-  (IL:FILEMAP (NIL (13643 14213 (PSEUDO-SELECTION-FROM-SELECTION 13643 . 14213)) (14215 14969 (
-COMPOSE-PSEUDO-SELECTION 14215 . 14969)) (14971 15510 (DECOMPOSE-PSEUDO-SELECTION 14971 . 15510)) (
-15512 16309 (SELECTION-FROM-PSEUDO-SELECTION 15512 . 16309)) (16311 16614 (SELECT-PSEUDO-SEGMENT 16311
- . 16614)) (16679 17569 (ADD-COMMAND 16679 . 17569)) (17571 19734 (GET-SELECTION 17571 . 19734)) (
-19736 20916 (REPLACE-SELECTION 19736 . 20916)) (20918 21410 (RESET-COMMANDS 20918 . 21410)) (21412 
-21581 (DEFAULT-COMMANDS 21412 . 21581)) (22059 23162 (EQUALIZE-STRING-WIDTHS 22059 . 23162)) (23164 
-23362 (MINIMUM-STRING-WIDTH 23164 . 23362)) (23364 23562 (MAXIMUM-STRING-WIDTH 23364 . 23562)) (23564 
-24435 (FIND-AND-DISPLAY-STRUCTURE 23564 . 24435)) (24437 25121 (FIND-AND-DISPLAY-STRUCTURE-BACKWARDS 
-24437 . 25121)) (25123 26027 (FIND-AND-DISPLAY-SUBSTRUCTURE 25123 . 26027)) (26029 26732 (
-FIND-AND-DISPLAY-SUBSTRUCTURE-BACKWARDS 26029 . 26732)) (26734 27375 (FIND-NTH-STRUCTURE 26734 . 27375
-)) (27377 30107 (FIND-NODE-SUBSTRUCTURE 27377 . 30107)) (30109 31362 (FIND-NODE-SUBSTRUCTURE-BACKWARDS
- 30109 . 31362)) (31364 32343 (FIND-OBJ 31364 . 32343)) (32345 33745 (FIND-SELECTION 32345 . 33745)) (
-33747 35439 (FIND-SELECTION-BACKWARDS 33747 . 35439)) (35441 38170 (FIND-STRUCTURE 35441 . 38170)) (
-38172 40519 (FIND-STRUCTURE-BACKWARDS 38172 . 40519)) (40521 43450 (FIND-SUBSTRUCTURE 40521 . 43450)) 
-(43452 45752 (FIND-SUBSTRUCTURE-BACKWARDS 43452 . 45752)) (45754 45990 (GET-USER-STRING 45754 . 45990)
-) (45992 49700 (SEARCH-OBJ 45992 . 49700)) (49702 53367 (SEARCH-OBJ-BACKWARDS 49702 . 53367)) (53369 
-58195 (SUBSTITUTE-OBJ 53369 . 58195)) (58197 62853 (SUBSTITUTE-STRUCTURE 58197 . 62853)) (62855 66027 
-(SUBSTITUTE-SUBSTRUCTURE 62855 . 66027)) (66029 67191 (STRUCTURE-FROM-SELECTION 66029 . 67191)) (67193
- 68036 (STRUCTURE-FROM-STRING 67193 . 68036)) (68038 70179 (COMMENT-OUT-SELECTION 68038 . 70179)) (
-70180 125041 (ADD-MENU 70193 . 70856) (BACKSPACE 70858 . 71837) (CHANGE-PACKAGE 71839 . 74639) (
-CHANGE-PRINTBASE 74641 . 76823) (CHANGE-QUOTE 76825 . 77180) (CONVERT-COMMENT 77182 . 78942) (
-CONVERT-COMMENT-STRUCTURE 78944 . 80247) (CONVERT-COMMENT-TAIL 80249 . 81649) (CREATE-COMMAND-TABLE 
-81651 . 83629) (DEFAULT-EDIT-FN 83631 . 83768) (DELETE-SELECTION 83770 . 84452) (DELETE-WORD 84454 . 
-86555) (DO-MUTATION 86557 . 87105) (EDIT-SELECTION 87107 . 87555) (EVAL-SELECTION 87557 . 89426) (
-EXPAND 89428 . 90557) (EXTRACT-CURRENT-SELECTION 90559 . 92927) (FIND-COMMENT 92929 . 93623) (GET-MENU
- 93625 . 94002) (EDIT-HELP 94004 . 95079) (HELPMENU 95081 . 97870) (INPUT-DOT 97872 . 100004) (
-INPUT-ESCAPE 100006 . 100254) (INPUT-NORMAL-CHAR 100256 . 102289) (INPUT-QUOTE 102291 . 105373) (
-INPUT-SQUARE-BRACKET 105375 . 105726) (INPUT-STRINGDELIM 105728 . 107127) (INPUT-TOKENDELIM 107129 . 
-108109) (INSERT-MULTI-ESCAPE 108111 . 109239) (INSERT-SPECIAL-CHARACTER 109241 . 110501) (
-INSPECT-SELECTION 110503 . 111038) (JOIN 111040 . 114710) (MENU-CLOSEFN 114712 . 114930) (
-MENU-FIND-SELECTEDFN 114932 . 115632) (MENU-INIT-STATE 115634 . 116441) (MENU-PACKAGE-SELECTEDFN 
-116443 . 117494) (MENU-PRINTBASE-SELECTEDFN 117496 . 118372) (MENU-SELECTEDFN 118374 . 118800) (
-MENU-SUBSTITUTE-SELECTEDFN 118802 . 119762) (MUTATE 119764 . 120874) (QUOTE-CURRENT-SELECTION 120876
- . 121643) (REDISPLAY 121645 . 121884) (REDO 121886 . 122380) (SELECTED-FN-NAME 122382 . 122827) (
-SKIP-TO-GAP 122829 . 123606) (UNDO 123608 . 124408) (UNDO-EXTRACT 124410 . 125039)))))
+  (IL:FILEMAP (NIL (13440 14010 (PSEUDO-SELECTION-FROM-SELECTION 13440 . 14010)) (14012 14766 (
+COMPOSE-PSEUDO-SELECTION 14012 . 14766)) (14768 15307 (DECOMPOSE-PSEUDO-SELECTION 14768 . 15307)) (
+15309 16106 (SELECTION-FROM-PSEUDO-SELECTION 15309 . 16106)) (16108 16411 (SELECT-PSEUDO-SEGMENT 16108
+ . 16411)) (16476 17366 (ADD-COMMAND 16476 . 17366)) (17368 19539 (GET-SELECTION 17368 . 19539)) (
+19541 20721 (REPLACE-SELECTION 19541 . 20721)) (20723 21044 (RESET-COMMANDS 20723 . 21044)) (21046 
+21215 (DEFAULT-COMMANDS 21046 . 21215)) (21693 22701 (EQUALIZE-STRING-WIDTHS 21693 . 22701)) (22703 
+22901 (MINIMUM-STRING-WIDTH 22703 . 22901)) (22903 23101 (MAXIMUM-STRING-WIDTH 22903 . 23101)) (23103 
+23974 (FIND-AND-DISPLAY-STRUCTURE 23103 . 23974)) (23976 24660 (FIND-AND-DISPLAY-STRUCTURE-BACKWARDS 
+23976 . 24660)) (24662 25566 (FIND-AND-DISPLAY-SUBSTRUCTURE 24662 . 25566)) (25568 26271 (
+FIND-AND-DISPLAY-SUBSTRUCTURE-BACKWARDS 25568 . 26271)) (26273 26914 (FIND-NTH-STRUCTURE 26273 . 26914
+)) (26916 29646 (FIND-NODE-SUBSTRUCTURE 26916 . 29646)) (29648 30875 (FIND-NODE-SUBSTRUCTURE-BACKWARDS
+ 29648 . 30875)) (30877 31856 (FIND-OBJ 30877 . 31856)) (31858 33229 (FIND-SELECTION 31858 . 33229)) (
+33231 34791 (FIND-SELECTION-BACKWARDS 33231 . 34791)) (34793 37522 (FIND-STRUCTURE 34793 . 37522)) (
+37524 39851 (FIND-STRUCTURE-BACKWARDS 37524 . 39851)) (39853 42782 (FIND-SUBSTRUCTURE 39853 . 42782)) 
+(42784 45084 (FIND-SUBSTRUCTURE-BACKWARDS 42784 . 45084)) (45086 45322 (GET-USER-STRING 45086 . 45322)
+) (45324 48925 (SEARCH-OBJ 45324 . 48925)) (48927 52485 (SEARCH-OBJ-BACKWARDS 48927 . 52485)) (52487 
+57315 (SUBSTITUTE-OBJ 52487 . 57315)) (57317 61983 (SUBSTITUTE-STRUCTURE 57317 . 61983)) (61985 65128 
+(SUBSTITUTE-SUBSTRUCTURE 61985 . 65128)) (65130 66292 (STRUCTURE-FROM-SELECTION 65130 . 66292)) (66294
+ 67137 (STRUCTURE-FROM-STRING 66294 . 67137)) (67139 69410 (COMMENT-OUT-SELECTION 67139 . 69410)) (
+69411 124272 (ADD-MENU 69424 . 70087) (BACKSPACE 70089 . 71068) (CHANGE-PACKAGE 71070 . 73870) (
+CHANGE-PRINTBASE 73872 . 76054) (CHANGE-QUOTE 76056 . 76411) (CONVERT-COMMENT 76413 . 78173) (
+CONVERT-COMMENT-STRUCTURE 78175 . 79478) (CONVERT-COMMENT-TAIL 79480 . 80880) (CREATE-COMMAND-TABLE 
+80882 . 82860) (DEFAULT-EDIT-FN 82862 . 82999) (DELETE-SELECTION 83001 . 83683) (DELETE-WORD 83685 . 
+85786) (DO-MUTATION 85788 . 86336) (EDIT-SELECTION 86338 . 86786) (EVAL-SELECTION 86788 . 88657) (
+EXPAND 88659 . 89788) (EXTRACT-CURRENT-SELECTION 89790 . 92158) (FIND-COMMENT 92160 . 92854) (GET-MENU
+ 92856 . 93233) (EDIT-HELP 93235 . 94310) (HELPMENU 94312 . 97101) (INPUT-DOT 97103 . 99235) (
+INPUT-ESCAPE 99237 . 99485) (INPUT-NORMAL-CHAR 99487 . 101520) (INPUT-QUOTE 101522 . 104604) (
+INPUT-SQUARE-BRACKET 104606 . 104957) (INPUT-STRINGDELIM 104959 . 106358) (INPUT-TOKENDELIM 106360 . 
+107340) (INSERT-MULTI-ESCAPE 107342 . 108470) (INSERT-SPECIAL-CHARACTER 108472 . 109732) (
+INSPECT-SELECTION 109734 . 110269) (JOIN 110271 . 113941) (MENU-CLOSEFN 113943 . 114161) (
+MENU-FIND-SELECTEDFN 114163 . 114863) (MENU-INIT-STATE 114865 . 115672) (MENU-PACKAGE-SELECTEDFN 
+115674 . 116725) (MENU-PRINTBASE-SELECTEDFN 116727 . 117603) (MENU-SELECTEDFN 117605 . 118031) (
+MENU-SUBSTITUTE-SELECTEDFN 118033 . 118993) (MUTATE 118995 . 120105) (QUOTE-CURRENT-SELECTION 120107
+ . 120874) (REDISPLAY 120876 . 121115) (REDO 121117 . 121611) (SELECTED-FN-NAME 121613 . 122058) (
+SKIP-TO-GAP 122060 . 122837) (UNDO 122839 . 123639) (UNDO-EXTRACT 123641 . 124270)))))
 IL:STOP
diff --git a/sources/SEDIT-COMMANDS.DFASL b/sources/SEDIT-COMMANDS.DFASL
index 490401d3..1940a761 100644
Binary files a/sources/SEDIT-COMMANDS.DFASL and b/sources/SEDIT-COMMANDS.DFASL differ
