diff --git a/library/sketch/SKETCH-EDIT b/library/sketch/SKETCH-EDIT
index f2c6716e..f910a3ce 100644
--- a/library/sketch/SKETCH-EDIT
+++ b/library/sketch/SKETCH-EDIT
@@ -1,20 +1,20 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "30-Nov-2025 08:45:15" {WMEDLEY}<library>sketch>SKETCH-EDIT.;17 110086 
+(FILECREATED " 1-Dec-2025 23:22:35" {WMEDLEY}<library>SKETCH>SKETCH-EDIT.;20 113366 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS \SKED.INSERT.CHARS.TO.STR SK.GETSYNTAX SK.WORD.BREAK.CLASS 
-                       \SKED.DELETE.WORD.FROM.STRING \SKED.INSERT)
+      :CHANGES-TO (FNS \SKED.INSERT.UNDO \SKED.INSERT.ACTION \SKED.INSERT.CHARS.TO.STR \SKED.INSERT 
+                       CHAR.BEGIN \SKED.ARROWKEYS)
                   (VARS SKETCH-EDITCOMS)
 
-      :PREVIOUS-DATE "29-Nov-2025 17:19:43" {WMEDLEY}<library>sketch>SKETCH-EDIT.;8)
+      :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 
@@ -28,23 +28,24 @@
                      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
 
@@ -61,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)
@@ -74,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])
 
@@ -745,7 +744,7 @@
 
 
 
-(* editting functions)
+(* ; "editing functions")
 
 (DEFINEQ
 
@@ -808,7 +807,7 @@
            (\SKED.INSERT CHARCODES SKW ATSCALE])
 
 (\SKED.INSERT
-  [LAMBDA (CHARCODES SKW ATSCALE)                            (* ; "Edited 29-Nov-2025 21:41 by rmk")
+  [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")
@@ -822,46 +821,36 @@
                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)                         (* ; 
+                (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 (MEMB (CAR CHARCODES)
-                               (CHARCODE (EOL LINEFEED)))
-                         (KEYDOWNP 'CTRL))                   (* ; 
+                (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 [COND
-                                                ((NEW.TEXT.SELECTIONP SELECTION)
-                                                 NIL)
-                                                (T (fetch (SCREENELT INDIVIDUALGLOBALPART)
-                                                      of (fetch (TEXTELTSELECTION SKTEXTELT)
-                                                            of SELECTION]
+                    (SKED.CREATE.NEW.TEXTBOX (CL:UNLESS (NEW.TEXT.SELECTIONP SELECTION)
+                                                 (fetch (SCREENELT INDIVIDUALGLOBALPART)
+                                                    of (fetch (TEXTELTSELECTION SKTEXTELT)
+                                                          of SELECTION)))
                            SKW
                            (CDR CHARCODES))
                     (RETURN))
+                [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.")
@@ -943,15 +932,14 @@
                                    [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#)         (* ; 
+                            (CL:WHEN (EQ LINE# LASTLINE#)    (* ; 
                                         "on the last, copy the part before and the part after as one")
                                 (SETQ NEWSTRS (COND
                                                  [STRPIECE (NCONC1
@@ -967,16 +955,15 @@
                                                                                               ]
                                                  [(NEQ LASTCHAR# (NCHARS STR))
                                                   (NCONC1 NEWSTRS (SUBSTRING STR (ADD1 LASTCHAR#]
-                                                 (T NEWSTRS]
+                                                 (T NEWSTRS))))]
 
                       (* ;; "any other windows that had this selection have had it deleted already so this doesn't do anything for them.")
 
-                      [COND
-                         ((IGREATERP NEWLINE# (LENGTH NEWSTRS))
+                      (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
+                          [COND
                              ((EQ (SETQ NEWLINE# (LENGTH NEWSTRS))
                                   0)
                               (SETQ NEWCHAR# 0)
@@ -989,22 +976,22 @@
                                      [(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)
+                                      (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            (* ; 
+                                               (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]
+                                                 (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
@@ -1016,7 +1003,7 @@
                                   (RETURN NIL))
                                  ((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)
@@ -1061,43 +1048,18 @@
                                                                    of NEWELT))
                                                           PTRCHAR#]
                       (SETQ NEWLINE# (CAR NEWLINE#]
-            UNDO
+
+           (* ;; "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)               (* ; 
+                   ((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]
+                    (\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.")
 
@@ -1110,6 +1072,94 @@
                              SKW
                              (CDR CONTROLCHARTAIL])
 
+(\SKED.ARROWKEYS
+  [LAMBDA (ACTION SKW SELECTION)                             (* ; "Edited  1-Dec-2025 22:24 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)
+                            (SETQ CHAR# (CLOSEST.CHAR SKLEFT LINE# TEXTELT SKW)))
+                  (:LINE.DOWN (add LINE# 1)
+                              (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")
           
@@ -1299,7 +1349,7 @@
              (T (RETURN (SUBSTRING STRING 1 END])
 
 (\SKED.INSERT.CHARS.TO.STR
-  [LAMBDA (CHARCODES INCLUDECR SKW)                          (* ; "Edited 30-Nov-2025 08:43 by rmk")
+  [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")
@@ -1308,6 +1358,8 @@
 
     (* ;; "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)
@@ -1381,9 +1433,6 @@
                     ((:WORDDELETE.FORWARD :CHARDELETE.FORWARD) 
                                                              (* ; "Not implemented, no-ops")
                          NIL)
-                    ((:ONECHAR.BACKWARD :ONECHAR.FORWARD :LINE.UP :LINE.DOWN) 
-                                                             (* ; "Arrow keys: not implemented")
-                         NIL)
                     (:DELETE                                 (* ; 
                                           "delete selection.  Here that means don't insert anything."))
                     (:UNDO 
@@ -1474,7 +1523,7 @@
 
 
 
-(* line adding functions)
+(* ; "line adding functions")
 
 (DEFINEQ
 
@@ -1833,7 +1882,7 @@
     (WINDOWPROP SKW 'INPUTLINE NIL])
 )
 
-                                                             (* Was MODERNIZE loaded before?)
+                                                             (* ; "Was MODERNIZE loaded before?")
 
 (CL:WHEN (GETD 'MODERNWINDOW.SETUP)
     (MODERNWINDOW.SETUP 'WB.BUTTON.HANDLER))
@@ -1870,26 +1919,27 @@
            YCOORD _ (LASTMOUSEY WIN])
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (2553 39141 (BUTLAST 2563 . 2911) (CHAR.BEGIN 2913 . 4838) (CLOSEST.CHAR 4840 . 9063) (
-CLOSEST.LINE 9065 . 9627) (FLASHW 9629 . 9786) (HILITE.LINE 9788 . 10607) (HILITE.TEXT 10609 . 12257) 
-(IN.TEXT.EXTEND 12259 . 15532) (INIMAGEOBJ 15534 . 16039) (INTEXT 16041 . 16538) (NEW.TEXT.EXTEND 
-16540 . 18759) (NEW.TEXT.SELECTIONP 18761 . 18941) (NTHCHARWIDTH 18943 . 19200) (NTHLOCALREGION 19202
- . 19440) (ONCHAR 19442 . 19837) (SHOW.EXTENDED.SELECTION.FEEDBACK 19839 . 20774) (SHOW.FEEDBACK 20776
- . 21266) (SHOW.FEEDBACK.BOX 21268 . 22322) (SELECTION.POSITION 22324 . 23116) (SKED.CLEAR.SELECTION 
-23118 . 23641) (SKETCH.CLEANUP 23643 . 25557) (SK.ENTER.EDIT.CHANGE 25559 . 27104) (
-SKED.REMOVE.OTHER.SELECTIONS 27106 . 27533) (SKED.EXTEND.SELECTION 27535 . 29000) (SKED.MOVE.SELECTION
- 29002 . 34072) (CREATE.TEXT.SELECTION 34074 . 34590) (SKED.SELECTION.FEEDBACK 34592 . 36248) (
-SKED.SET.EXTENDSELECTION 36250 . 36567) (SKED.SET.SELECTION 36569 . 36969) (LINE.BEGIN 36971 . 37525) 
-(SELECTION.GREATERP 37527 . 38322) (SK.GETSYNTAX 38324 . 39139)) (39983 87597 (WB.EDITOR 39993 . 41374
-) (SK.TTYENTRYFN 41376 . 41916) (SK.TTYEXITFN 41918 . 42444) (SKED.INSERT 42446 . 42874) (\SKED.INSERT
- 42876 . 64878) (FIRST.N.ELEMENTS 64880 . 65147) (SKED.CREATE.NEW.TEXTBOX 65149 . 71678) (
-SKED.CHARACTERPOSITION 71680 . 72467) (SKED.LINE.AND.CHAR# 72469 . 74100) (
-\SKED.DELETE.WORD.FROM.STRING 74102 . 75266) (\SKED.INSERT.CHARS.TO.STR 75268 . 83979) (JOINCHARS 
-83981 . 84368) (STRINGFROMCHARACTERS 84370 . 84695) (GETALLCHARS 84697 . 85038) (CLEANUP.EDIT 85040 . 
-85492) (SKED.NEW.TEXTELT 85494 . 87595)) (87632 108640 (MAP.SCREEN.POSITION.ONTO.GRID 87642 . 89091) (
-NEAREST.ON.GRID 89093 . 89637) (SK.MIDDLE.TITLEFN 89639 . 91582) (WB.BUTTON.HANDLER 91584 . 99406) (
-WB.ADD.NEW.POINT 99408 . 102737) (WB.DRAWLINE 102739 . 106973) (WB.RUBBERBAND.POSITION 106975 . 107892
-) (SK.RUBBERBAND.FEEDBACKFN 107894 . 108398) (RESET.LINE.BEING.INPUT 108400 . 108638)) (108822 110063 
-(NEAREST.EXISTING.POSITION 108832 . 109034) (WB.NEARPT 109036 . 109921) (LASTMOUSEPOSITION 109923 . 
-110061)))))
+  (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 90869 (
+WB.EDITOR 40490 . 41871) (SK.TTYENTRYFN 41873 . 42413) (SK.TTYEXITFN 42415 . 42941) (SKED.INSERT 42943
+ . 43371) (\SKED.INSERT 43373 . 62845) (\SKED.ARROWKEYS 62847 . 65302) (\SKED.INSERT.ACTION 65304 . 
+65748) (\SKED.INSERT.UNDO 65750 . 68291) (FIRST.N.ELEMENTS 68293 . 68560) (SKED.CREATE.NEW.TEXTBOX 
+68562 . 75091) (SKED.CHARACTERPOSITION 75093 . 75880) (SKED.LINE.AND.CHAR# 75882 . 77513) (
+\SKED.DELETE.WORD.FROM.STRING 77515 . 78679) (\SKED.INSERT.CHARS.TO.STR 78681 . 87251) (JOINCHARS 
+87253 . 87640) (STRINGFROMCHARACTERS 87642 . 87967) (GETALLCHARS 87969 . 88310) (CLEANUP.EDIT 88312 . 
+88764) (SKED.NEW.TEXTELT 88766 . 90867)) (90908 111916 (MAP.SCREEN.POSITION.ONTO.GRID 90918 . 92367) (
+NEAREST.ON.GRID 92369 . 92913) (SK.MIDDLE.TITLEFN 92915 . 94858) (WB.BUTTON.HANDLER 94860 . 102682) (
+WB.ADD.NEW.POINT 102684 . 106013) (WB.DRAWLINE 106015 . 110249) (WB.RUBBERBAND.POSITION 110251 . 
+111168) (SK.RUBBERBAND.FEEDBACKFN 111170 . 111674) (RESET.LINE.BEING.INPUT 111676 . 111914)) (112102 
+113343 (NEAREST.EXISTING.POSITION 112112 . 112314) (WB.NEARPT 112316 . 113201) (LASTMOUSEPOSITION 
+113203 . 113341)))))
 STOP
diff --git a/library/sketch/SKETCH-EDIT.LCOM b/library/sketch/SKETCH-EDIT.LCOM
index 9fd7edc7..b4a6f2dd 100644
Binary files a/library/sketch/SKETCH-EDIT.LCOM and b/library/sketch/SKETCH-EDIT.LCOM differ
