diff --git a/library/tedit/TEDIT-SCREEN b/library/tedit/TEDIT-SCREEN index f24afffdc..4d74e214e 100644 --- a/library/tedit/TEDIT-SCREEN +++ b/library/tedit/TEDIT-SCREEN @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "20-Mar-2024 11:07:35" {WMEDLEY}tedit>TEDIT-SCREEN.;645 189050 +(FILECREATED "20-Apr-2024 22:13:48" {WMEDLEY}tedit>TEDIT-SCREEN.;653 189725 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.DISPLAYLINE \TEDIT.RAISE.LINES) + :CHANGES-TO (FNS \TEDIT.LINES.ABOVE \TEDIT.VALID.LINES) - :PREVIOUS-DATE "20-Mar-2024 07:27:05" {WMEDLEY}tedit>TEDIT-SCREEN.;644) + :PREVIOUS-DATE " 9-Apr-2024 10:25:33" {WMEDLEY}tedit>TEDIT-SCREEN.;652) (PRETTYCOMPRINT TEDIT-SCREENCOMS) @@ -2442,7 +2442,9 @@ (FGETLD FIRSTDIRTYLINE LCHAR1))))]) (\TEDIT.LINES.BELOW - [LAMBDA (PREVLINE LASTCHAR PANE TEXTOBJ DONTDISPLAY) (* ; "Edited 15-Mar-2024 19:22 by rmk") + [LAMBDA (PREVLINE LASTCHAR PANE TEXTOBJ DONTDISPLAY VBOTTOM) + (* ; "Edited 9-Apr-2024 10:13 by rmk") + (* ; "Edited 15-Mar-2024 19:22 by rmk") (* ; "Edited 23-Dec-2023 23:38 by rmk") (* ; "Edited 17-Dec-2023 15:56 by rmk") (* ; "Edited 14-Dec-2023 12:46 by rmk") @@ -2456,6 +2458,8 @@ (* ;; "Also displays the lines, unless DONTDISPLAY. This is an optimization: THISLINE caches the just formatted line, doesn't have to be formatted again if it is immediately displayed. Calling it with DONTDISPLAY NIL followed by DONTDISPLAY T gives exactly the same result as calling it once with DONTDISPLAY T.") (CL:WHEN PREVLINE + (CL:UNLESS VBOTTOM + (SETQ VBOTTOM (\TEDIT.ONSCREEN? PANE 'BOTTOM))) (SETQ LASTCHAR (CL:IF LASTCHAR (IMIN LASTCHAR (FGETTOBJ TEXTOBJ TEXTLEN)) (FGETTOBJ TEXTOBJ TEXTLEN))) @@ -2467,10 +2471,9 @@ (SUB1 (FGETLD (FGETLD PREVLINE NEXTLINE) LCHAR1)) (FGETLD PREVLINE LCHARLIM))) - (YBOT _ (FGETLD PREVLINE YBOT)) - (PBOTTOM _ (fetch (REGION BOTTOM) of (DSPCLIPPINGREGION NIL PANE))) inlines PREVLINE + (YBOT _ (FGETLD PREVLINE YBOT)) inlines PREVLINE first (CL:WHEN (OR (IGREATERP LCHARLIM LASTCHAR) - (ILEQ YBOT PBOTTOM)) + (ILEQ YBOT VBOTTOM)) (FSETLD PREVLINE NEXTLINE NIL) (* ; "Eliminate dangling garbage") (RETURN PREVLINE)) while (SETQ NEXT (\TEDIT.FORMATLINE TEXTOBJ (ADD1 LCHARLIM))) do @@ -2481,7 +2484,7 @@ (SETQ YBOT (\TEDIT.LINE.BOTTOM NEXT)) (* ; "Link needed for Y position") (SETQ LCHARLIM (FGETLD NEXT LCHARLIM)) (CL:WHEN (OR (IGREATERP LCHARLIM LASTCHAR) - (ILEQ YBOT PBOTTOM)) + (ILEQ YBOT VBOTTOM)) (FSETLD L NEXTLINE NIL) (* ; "Overshot, flush link") (RETURN L)) (CL:UNLESS DONTDISPLAY (* ; @@ -2546,7 +2549,8 @@ (RETURN LASTVALID]) (\TEDIT.LOWER.LINES - [LAMBDA (NEXTVALID LASTVALID PANE TEXTOBJ) (* ; "Edited 15-Mar-2024 14:40 by rmk") + [LAMBDA (NEXTVALID LASTVALID PANE TEXTOBJ) (* ; "Edited 9-Apr-2024 10:25 by rmk") + (* ; "Edited 15-Mar-2024 14:40 by rmk") (* ; "Edited 20-Jan-2024 23:15 by rmk") (* ; "Edited 2-Jan-2024 00:26 by rmk") (* ; "Edited 4-Dec-2023 11:25 by rmk") @@ -2560,9 +2564,9 @@ (* ;; "If PANE has been moved so that it is not entirely within the screen, then don't try to find the relevant bits, just repaint the whole window.") - (CL:UNLESS (\TEDIT.OFFSCREEN.SCROLL TEXTOBJ PANE 'VERTICAL) + (CL:UNLESS (\TEDIT.OFFSCREEN.SCROLL TEXTOBJ PANE 'TOP) - (* ;; "Completely on screen, we can take advantage of screen bitmap.") + (* ;; "Top is on screen, take advantage of screen bitmap. ") [PROG ((NEWTOP (GETLD LASTVALID YBOT)) (PREG (DSPCLIPPINGREGION NIL PANE)) @@ -2575,10 +2579,10 @@ (* ;; "Make the YPOS of the lowered lines consistent with the intended positions of their images. LASTVISIBLE is the last line that was previously visible (and whose image will be lowered). ") - (for L (PBOTTOM _ (fetch BOTTOM of PREG)) inlines NEXTVALID + (for L (VBOTTOM _ (\TEDIT.ONSCREEN? PANE 'BOTTOM)) inlines NEXTVALID while (IGEQ (IDIFFERENCE (FGETLD L YBOT) LOWER) - PBOTTOM) do (SETQ LASTVISIBLE L)) + VBOTTOM) do (SETQ LASTVISIBLE L)) (* ;; "") @@ -2675,7 +2679,9 @@ (RETURN))]) (\TEDIT.VALID.LINES - [LAMBDA (TEXTOBJ FIRSTCHANGEDCHNO NCHARSCHANGED REASON) (* ; "Edited 20-Mar-2024 06:46 by rmk") + [LAMBDA (TEXTOBJ FIRSTCHANGEDCHNO NCHARSCHANGED REASON) (* ; "Edited 20-Apr-2024 22:11 by rmk") + (* ; "Edited 2-Apr-2024 10:43 by rmk") + (* ; "Edited 20-Mar-2024 06:46 by rmk") (* ; "Edited 15-Mar-2024 19:44 by rmk") (* ; "Edited 22-Feb-2024 01:05 by rmk") (* ; "Edited 3-Nov-2023 12:07 by rmk") @@ -2751,7 +2757,8 @@ (SETQ LASTVALIDLINE (find L backlines (FGETLD FIRSTCHANGEDLINE PREVLINE) suchthat (FGETLD L FORCED-END))) (CL:WHEN (AND (EQ LASTVALIDLINE PLINES) - (IGREATERP (FGETLD FIRSTCHANGEDLINE LCHAR1) + (IGREATERP (FGETLD (FGETLD LASTVALIDLINE NEXTLINE) + LCHAR1) 1)) (* ;; "We ran back to the top of the pane without finding a forced-end. If it's not the beginning of the document, we need to insert a new line with the proper LCHARLIM and YBOT just above the pane. ") @@ -2765,7 +2772,7 @@ (* ;; "The next valid must be somewhere after the last changed line, and after a stable line break. But we will run out of lines if there is no visible paragraph break: the change reached the bottom, or the paragraph break after the change is below the pane, or the document ended. In that case the last line in the chain is not valid and presumably the gap filler will fill to the end of the window. ") - [SETQ NEXTVALIDLINE (for L inlines LASTCHANGEDLINE + [SETQ NEXTVALIDLINE (for L inlines (FGETLD LASTCHANGEDLINE NEXTLINE) when (OR (FGETLD L FORCED-END) (GETLD L LSTLN)) do (RETURN (FGETLD L NEXTLINE] @@ -2939,9 +2946,10 @@ NEWYBOT]) (\TEDIT.NCONC.LINES - [LAMBDA (HEADLINE TAILLINE HEADYTOP LASTBOTTOM) (* ; "Edited 1-Dec-2023 11:45 by rmk") + [LAMBDA (HEADLINE TAILLINE HEADYTOP LASTBOTTOM) (* ; "Edited 8-Apr-2024 22:43 by rmk") + (* ; "Edited 1-Dec-2023 11:45 by rmk") - (* ;; "The lines headed by HEADLINE and TAILLINE are linked in a single chain, and their Y positions are adjusted so that the top of HEADLINE is at HEADYTOP (if given) and it and all other lines are positioned relative to that, based on their LHEIGHTs. If LASTBOTTOM is provided, then lines below it will be chopped off. Returns the last line in the chain.") + (* ;; "Links the lines headed by HEADLINE and TAILLINE into a single chain, and their Y positions are adjusted so that the top of HEADLINE is at HEADYTOP (if given) and it and all other lines are positioned relative to that, based on their LHEIGHTs. If LASTBOTTOM is provided, then lines below it will be chopped off. Returns the last line in the chain.") (CL:WHEN HEADLINE (CL:UNLESS HEADYTOP @@ -2975,13 +2983,13 @@ \TEDIT.LINES.ABOVE 109664 . 111913)) (112032 114453 (\CLEARTHISLINE 112042 . 112711) (\TLVALIDATE 112713 . 114451)) (114647 134704 (\TEDIT.DISPLAYLINE 114657 . 126997) (\TEDIT.DISPLAYLINE.TABS 126999 . 129622) (\TEDIT.LINECACHE 129624 . 130352) (\TEDIT.CREATE.LINECACHE 130354 . 131190) ( -\TEDIT.BLTCHAR 131192 . 133819) (\TEDIT.DIACRITIC.SHIFT 133821 . 134702)) (135319 189027 ( +\TEDIT.BLTCHAR 131192 . 133819) (\TEDIT.DIACRITIC.SHIFT 133821 . 134702)) (135319 189702 ( \TEDIT.UPDATE.SCREEN 135329 . 137153) (\TEDIT.BACKFORMAT 137155 . 139197) (\TEDIT.PREVIOUS.LINEBREAK 139199 . 141502) (\TEDIT.FILLPANE 141504 . 144053) (\TEDIT.UPDATE.LINES 144055 . 149043) ( \TEDIT.CREATEPLINE 149045 . 150888) (\TEDIT.FIND.DIRTYCHARS 150890 . 152902) (\TEDIT.LINES.BELOW -152904 . 156386) (\FORMAT.GAP.LINES 156388 . 160379) (\TEDIT.LOWER.LINES 160381 . 164748) ( -\TEDIT.RAISE.LINES 164750 . 168177) (\TEDIT.VALID.LINES 168179 . 177573) (\TEDIT.CLEARPANE.BELOW.LINE -177575 . 178893) (\TEDIT.INSERTLINE 178895 . 180153) (\TEDIT.INSURE.TRAILING.LINE 180155 . 181470) ( -\TEDIT.MARK.LINES.DIRTY 181472 . 184183) (\TEDIT.LINE.BOTTOM 184185 . 187025) (\TEDIT.NCONC.LINES -187027 . 189025))))) +152904 . 156556) (\FORMAT.GAP.LINES 156558 . 160549) (\TEDIT.LOWER.LINES 160551 . 165013) ( +\TEDIT.RAISE.LINES 165015 . 168442) (\TEDIT.VALID.LINES 168444 . 178142) (\TEDIT.CLEARPANE.BELOW.LINE +178144 . 179462) (\TEDIT.INSERTLINE 179464 . 180722) (\TEDIT.INSURE.TRAILING.LINE 180724 . 182039) ( +\TEDIT.MARK.LINES.DIRTY 182041 . 184752) (\TEDIT.LINE.BOTTOM 184754 . 187594) (\TEDIT.NCONC.LINES +187596 . 189700))))) STOP diff --git a/library/tedit/TEDIT-SCREEN.LCOM b/library/tedit/TEDIT-SCREEN.LCOM index 888b2eddf..56866a318 100644 Binary files a/library/tedit/TEDIT-SCREEN.LCOM and b/library/tedit/TEDIT-SCREEN.LCOM differ diff --git a/library/tedit/TEDIT-WINDOW b/library/tedit/TEDIT-WINDOW index ae2d8e494..e8de07ace 100644 --- a/library/tedit/TEDIT-WINDOW +++ b/library/tedit/TEDIT-WINDOW @@ -1,12 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "27-Mar-2024 15:23:52" {WMEDLEY}tedit>TEDIT-WINDOW.;407 201953 +(FILECREATED "19-Apr-2024 15:11:03" {WMEDLEY}tedit>TEDIT-WINDOW.;418 202132 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.PROCEXITFN \TEDIT.BUTTONEVENTFN) + :CHANGES-TO (VARS TEDIT-WINDOWCOMS) + (FNS \TEDIT.COPYINSERTFN) - :PREVIOUS-DATE "21-Mar-2024 21:27:34" {WMEDLEY}TEDIT>TEDIT-WINDOW.;405) + :PREVIOUS-DATE "10-Apr-2024 23:23:48" {WMEDLEY}tedit>TEDIT-WINDOW.;417) (PRETTYCOMPRINT TEDIT-WINDOWCOMS) @@ -24,7 +25,7 @@ \TEDIT.SHRINK.ICONCREATE \TEDIT.SHRINKFN \TEDIT.PANEREGION) (FNS \TEDIT.BUTTONEVENTFN \TEDIT.DO.SELOPERATION \TEDIT.TTY.TEXTOBJP \TEDIT.BUTTONEVENTFN.SELOPERATION \TEDIT.BUTTONEVENTFN.INACTIVE - \TEDIT.BUTTONEVENTFN.INTITLE \TEDIT.COPYINSERT) + \TEDIT.BUTTONEVENTFN.INTITLE \TEDIT.COPYINSERTFN) (P (MOVD? 'NILL '\TEDIT.COPYINSERT)) (FNS \TEDIT.PANE.SPLIT \TEDIT.SPLITW \TEDIT.UNSPLITW) (P (MOVD? 'NILL 'GRAB-TYPED-REGION) @@ -52,7 +53,7 @@ \TEDIT.UPDATE.TITLE)) (COMS (* ; "Screen updating utilities") (FNS TEDIT.DEACTIVATE.WINDOW \TEDIT.REPAINTFN \TEDIT.AFTERMOVEFN OFFSCREENP - \TEDIT.RESHAPEFN \TEDIT.PANEWITHINSCREEN?) + \TEDIT.RESHAPEFN) (FNS \TEDIT.SCROLLFN \TEDIT.SCROLLFLOAT \TEDIT.SCROLLUP \TEDIT.SCROLL.SHOWSEL \TEDIT.SCROLLDOWN \TEDIT.OFFSCREEN.SCROLL \TEDIT.WHERE.SEL \TEDIT.WHERE.SEL1) (FNS \TEDIT.ONSCREEN \TEDIT.ONSCREEN? \TEDIT.PANE.SCREENREGION)) @@ -854,7 +855,8 @@ (DEFINEQ (\TEDIT.BUTTONEVENTFN - [LAMBDA (PANE) (* ; "Edited 27-Mar-2024 12:25 by rmk") + [LAMBDA (PANE) (* ; "Edited 10-Apr-2024 23:23 by rmk") + (* ; "Edited 27-Mar-2024 12:25 by rmk") (* ; "Edited 20-Mar-2024 11:01 by rmk") (* ; "Edited 16-Mar-2024 00:22 by rmk") (* ; "Edited 9-Mar-2024 11:59 by rmk") @@ -880,7 +882,6 @@ (RESETLST [PROG ((TEXTOBJ (fetch (TEXTWINDOW WTEXTOBJ) of PANE)) - (DS (WINDOWPROP PANE 'DSP)) (X (LASTMOUSEX PANE)) (Y (LASTMOUSEY PANE)) SOURCESEL SELOPERATION SELFN) @@ -913,7 +914,8 @@ (* ;; "Polling loop, track the mouse until the buttons/keys come up.") (SETQ SELOPERATION (\TEDIT.BUTTONEVENTFN.SELOPERATION TEXTOBJ)) - (bind (OSELOP _ SELOPERATION) + (bind (DS _ (WINDOWPROP PANE 'DSP)) + (OSELOP _ SELOPERATION) (OLDX _ MIN.SMALLP) (OLDY _ MIN.SMALLP) (PREG _ (DSPCLIPPINGREGION NIL PANE)) @@ -1220,7 +1222,7 @@ (ADD.PROCESS (LIST USERFN (KWOTE PANE))))] T)]) -(\TEDIT.COPYINSERT +(\TEDIT.COPYINSERTFN [LAMBDA (TTYW SOURCESEL) (* ; "Edited 17-Feb-2024 12:52 by rmk") (* ;; "Inserts the information in SOURCESEL into the TTY window.") @@ -2083,29 +2085,6 @@  "Fix up the selection to account for the line shuffling") (\TEDIT.SHOWSEL (FGETTOBJ TEXTOBJ SEL) T]) - -(\TEDIT.PANEWITHINSCREEN? - [LAMBDA (PANE) (* ; "Edited 20-Nov-2023 13:43 by rmk") - (* ; "Edited 10-May-2023 23:37 by rmk") - - (* ;; "True if PANE is completely within the screen and therefore that it is safe to reuse image-bits that were previously displayed anywhere within PANE's clipping region.") - - (* ;; " \TEDIT.AFTERMOVEFN should record this as a property on the PANE. Also, if this is false after a move, then the aftermovefn should force a redisplay. ") - - (* ;; - "Since TEDIT doesn't (yet) support horizontal scrolling), we only test the vertical dimension") - - (* ;; " ") - - (LET [(PANEREG (WINDOWPROP PANE 'REGION] - (AND (IGEQ (fetch (REGION BOTTOM) of PANEREG) - 0) - (OR T (IGEQ (fetch (REGION LEFT) of PANEREG) - 0)) - (ILEQ (fetch (REGION PTOP) of PANEREG) - SCREENHEIGHT) - (OR T (ILEQ (fetch (REGION PRIGHT) of PANEREG) - SCREENWIDTH]) ) (DEFINEQ @@ -2234,7 +2213,8 @@ (\TEDIT.SHOWSEL SEL T PANE))]) (\TEDIT.SCROLLUP - [LAMBDA (TEXTOBJ PANE DY) (* ; "Edited 20-Mar-2024 06:43 by rmk") + [LAMBDA (TEXTOBJ PANE DY) (* ; "Edited 9-Apr-2024 10:14 by rmk") + (* ; "Edited 20-Mar-2024 06:43 by rmk") (* ; "Edited 15-Mar-2024 19:23 by rmk") (* ; "Edited 14-Dec-2023 00:00 by rmk") (* ; "Edited 4-Dec-2023 20:49 by rmk") @@ -2243,18 +2223,16 @@ (* ; "Edited 28-Apr-2023 08:55 by rmk") (* ; "Edited 24-Apr-2023 23:48 by rmk") + (* ;; "VBOTTOM is the bottom of the visible region of the pane, in pane coordinates. Positive if the bottom is off-screen, 0 otherwise.") + (* ;; "Scrolling up, with positive integer DY. We first have to find a line that is or would be DY below the top of the pane, then we move that line to the top and fill in beneath.") - (PROG ((PREG (DSPCLIPPINGREGION NIL PANE)) + (PROG ((VBOTTOM (\TEDIT.ONSCREEN? PANE 'BOTTOM)) + (PREG (DSPCLIPPINGREGION NIL PANE)) (TEXTLEN (FGETTOBJ TEXTOBJ TEXTLEN)) - PBOTTOM PHEIGHT PLINES OLDTOPLINE NEWTOPLINE LASTVISIBLE WHERESEL DELTA) + PHEIGHT PLINES OLDTOPLINE NEWTOPLINE LASTVISIBLE WHERESEL DELTA) (SETQ PHEIGHT (fetch HEIGHT of PREG)) (* ; "Height of the pane") - (SETQ PBOTTOM (\TEDIT.ONSCREEN? PANE 'BOTTOM)) (* ; "Effective bottom") - (SETQ PLINES (fetch (TEXTWINDOW PLINES) of PANE)) - (CL:WHEN (IGREATERP (GETLD (GETLD PLINES NEXTLINE) - LCHARLIM) - TEXTLEN) - (HELP 'TOP)) (* ; "Currently formatted PANE lines") + (SETQ PLINES (fetch (TEXTWINDOW PLINES) of PANE)) (* ; "Currently formatted PANE lines") (* ;; "Find the first line at least DY below the top of the pane. ") @@ -2271,7 +2249,7 @@ (* ;; "") - (SETQ WHERESEL (\TEDIT.WHERE.SEL TEXTOBJ OLDTOPLINE PANE)) + (SETQ WHERESEL (\TEDIT.WHERE.SEL TEXTOBJ OLDTOPLINE PANE VBOTTOM)) (* ;; "") @@ -2323,7 +2301,7 @@ (* ;; "") (CL:UNLESS (IGEQ (GETLD NEWTOPLINE YBOT) - PBOTTOM) (* ; + VBOTTOM) (* ;  "Not visible, SUB1 to display not quite at the top, then raise") (\TEDIT.LINE.BOTTOM NEWTOPLINE) (\TEDIT.DISPLAYLINE TEXTOBJ NEWTOPLINE PANE)) @@ -2334,14 +2312,14 @@ (SETQ DELTA (IDIFFERENCE PHEIGHT (FGETLD NEWTOPLINE YTOP))) (for L inlines NEWTOPLINE while (IGEQ (FGETLD L YBOT) - PBOTTOM) do (SETYPOS L (IPLUS DELTA (FGETLD L YBOT))) + VBOTTOM) do (SETYPOS L (IPLUS DELTA (FGETLD L YBOT))) (SETQ LASTVISIBLE L)) (* ;; "") (* ;; "The effective PBOTTOM is the bottom of the clipping region that is onscreen") - (BITBLT PANE 0 PBOTTOM PANE 0 (IPLUS PBOTTOM DELTA) + (BITBLT PANE 0 VBOTTOM PANE 0 (IPLUS VBOTTOM DELTA) (fetch WIDTH of PREG) (FGETLD NEWTOPLINE YTOP) 'INPUT @@ -2353,16 +2331,14 @@ (BLTSHADE WHITESHADE PANE 0 0 (fetch WIDTH of PREG) (FGETLD LASTVISIBLE YBOT) 'REPLACE) - (\TEDIT.LINES.BELOW LASTVISIBLE NIL PANE TEXTOBJ)) + (\TEDIT.LINES.BELOW LASTVISIBLE NIL PANE TEXTOBJ NIL VBOTTOM)) (\TEDIT.SCROLL.SHOWSEL 'UP WHERESEL PANE TEXTOBJ LASTVISIBLE]) (\TEDIT.SCROLL.SHOWSEL - [LAMBDA (DIRECTION WHERESEL PANE TEXTOBJ VISIBLELINE) (* ; "Edited 15-Mar-2024 13:36 by rmk") + [LAMBDA (DIRECTION WHERESEL PANE TEXTOBJ VISIBLELINE) (* ; "Edited 9-Apr-2024 10:08 by rmk") + (* ; "Edited 15-Mar-2024 13:36 by rmk") (* ; "Edited 18-Feb-2024 15:24 by rmk") (* ; "Edited 28-Nov-2023 22:58 by rmk") - - (* ;; "This synchronizes the selection hilighting and caret to correspond to lines that up- or down-scrolling has newly revealed. It assumes that the hilighting of previously and still visible lines have been carried along with BITBLT. VISIBLELINE is the last visible line (above or below) that bounds the region that needs to be redisplayed.") - (CL:WHEN WHERESEL (* ; "SEL was on, but now off.") (LET ((SEL (FGETTOBJ TEXTOBJ SEL))) (if (OR (EQ 'BELOW (CAR WHERESEL)) @@ -2401,7 +2377,8 @@ (\TEDIT.SETCARET SEL PANE TEXTOBJ T))))]) (\TEDIT.SCROLLDOWN - [LAMBDA (TEXTOBJ PANE DY) (* ; "Edited 19-Mar-2024 23:34 by rmk") + [LAMBDA (TEXTOBJ PANE DY) (* ; "Edited 10-Apr-2024 08:20 by rmk") + (* ; "Edited 19-Mar-2024 23:34 by rmk") (* ; "Edited 15-Mar-2024 22:02 by rmk") (* ; "Edited 20-Jan-2024 23:13 by rmk") (* ; "Edited 2-Jan-2024 00:25 by rmk") @@ -2413,29 +2390,30 @@ (* ;; "Add new lines that fill DYat the top of PANE. The needed lines are first constructed, then pushed in front of any old lines. The NEWTOPLINE is positioned at the top of the window, and all other lines are then positioned relative to it. The current Y positions of all lines are ignored, new positions are determined based on LHEIGHTs.") - (* ;; "The bitmap corresponding to the old-line positions are moved so that they correlate with their new positions, and resulting garbage at the bottom of the window is cleared, and then the newlines are displayed to fill the space at the top.") + (* ;; "The bitmap corresponding to the old-line positions are moved so that they correlate with their new positions, resulting garbage at the bottom of the window is cleared, and then the newlines are displayed to fill the space at the top.") (* ;; " ") (SETQ DY (IMINUS DY)) (* ; "Now positive") (PROG ((PREG (DSPCLIPPINGREGION NIL PANE)) (VBOTTOM (\TEDIT.ONSCREEN? PANE 'BOTTOM)) + [VTOP (ADD1 (\TEDIT.ONSCREEN? PANE 'TOP] (PLINES (fetch (TEXTWINDOW PLINES) of PANE)) - PHEIGHT PBOTTOM OLDTOPLINE TOPOFOLD NEWTOPLINE WHERESEL LASTVISIBLE) - (SETQ PHEIGHT (fetch HEIGHT of PREG)) (* ; - "Height of the pane. Presumably there are no old lines above it, but...") + OLDTOPLINE TOPOFOLD NEWTOPLINE WHERESEL LASTVISIBLE PBOTTOM DELTA) + + (* ;; "There could be left-over lines above the pane> Or it could be that the top of the pane is off the screen, in which case VTOP (in the window's coordinate system) gets the last onscreen line. Either way, OLDTOPLINE is the line at the top of the visible bitmap.") + (SETQ PBOTTOM (fetch BOTTOM of PREG)) (SETQ OLDTOPLINE (find L inlines (GETLD PLINES NEXTLINE) suchthat (ILESSP (FGETLD L YBOT) - PHEIGHT))) - - (* ;; - "Look backwards from the line before OLDTOP. IMAX and HEIGHT+1 to scroll at least one line") - + VTOP))) (CL:WHEN (AND OLDTOPLINE (ILEQ (GETLD OLDTOPLINE LCHAR1) 1)) (RETURN)) + (* ;; + "Look backwards from the line before OLDTOP. IMAX and HEIGHT+1 to scroll at least one line") + (* ;; "") (SETQ NEWTOPLINE (if OLDTOPLINE @@ -2451,39 +2429,41 @@ (\TEDIT.BACKFORMAT TEXTOBJ DY (FGETTOBJ TEXTOBJ TEXTLEN) 0))) (CL:UNLESS NEWTOPLINE (RETURN)) - (SETQ WHERESEL (\TEDIT.WHERE.SEL TEXTOBJ OLDTOPLINE PANE)) + (SETQ WHERESEL (\TEDIT.WHERE.SEL TEXTOBJ OLDTOPLINE PANE PBOTTOM)) - (* ;; "NEWTOPLINE is at least one new line in front of OLDTOPLINE. We concatenate them into a single chain with Ypositions adjusted so that the top of NEWTOPLINE is at PHEIGHT. ") + (* ;; "NEWTOPLINE is at least one new line in front of OLDTOPLINE. We concatenate them into a single chain with Ypositions adjusted so that the top of NEWTOPLINE is at VHEIGHT. LASTVISIBLE is the line at the bottom of the window.") - (SETQ LASTVISIBLE (\TEDIT.NCONC.LINES NEWTOPLINE OLDTOPLINE PHEIGHT PBOTTOM)) + (SETQ LASTVISIBLE (\TEDIT.NCONC.LINES NEWTOPLINE OLDTOPLINE VTOP VBOTTOM)) (LINKLD PLINES NEWTOPLINE) - (* ;; "All the needed lines have been constructed, linked, and positioned; some trailing lines may have been chopped. We now try to be clever and flicker-free about updating the display, although at this point a simple repaint will give the proper display. ") + (* ;; "All the needed lines have been constructed, linked, and positioned in the window's coordinate system. Some trailing lines may have been chopped. We now try to be clever and flicker-free about updating the display, although at this point a simple repaint will give the proper display. ") + + (* ;; "We have to operate in the bitmap's coordinate system, which may be partially offscreen") - (CL:UNLESS (\TEDIT.OFFSCREEN.SCROLL TEXTOBJ PANE 'TOP) - (CL:WHEN (AND OLDTOPLINE (IGEQ (FGETLD OLDTOPLINE YBOT) - (FGETLD LASTVISIBLE YBOT))) + (CL:WHEN (AND OLDTOPLINE (IGEQ (FGETLD OLDTOPLINE YBOT) + (FGETLD LASTVISIBLE YBOT))) - (* ;; "The images for at least OLDTOPLINE and any lines below are currently in the bitmap. Move it down. ") + (* ;; "The images for at least OLDTOPLINE and any lines below are currently in the bitmap. Move it down. ") - (BITBLT PANE 0 (IPLUS VBOTTOM (IDIFFERENCE TOPOFOLD (FGETLD OLDTOPLINE YTOP))) - PANE 0 VBOTTOM (fetch WIDTH of PREG) - PHEIGHT - 'INPUT - 'REPLACE)) - (CL:WHEN LASTVISIBLE (* ; + (SETQ DELTA (IDIFFERENCE TOPOFOLD (FGETLD OLDTOPLINE YTOP))) + + (* ;; "If VBOTTOM isn't 0, then the bottom is off the screen--no bitmap.") + + (BITBLT PANE 0 VBOTTOM PANE 0 (IDIFFERENCE VBOTTOM DELTA) + (fetch WIDTH of PREG) + TOPOFOLD + 'INPUT + 'REPLACE)) + (CL:WHEN LASTVISIBLE (* ;  "Clear out any cruft in the bitmap that lowering might have produced.") - (BLTSHADE WHITESHADE PANE 0 PBOTTOM (fetch WIDTH of PREG) - (FGETLD LASTVISIBLE YBOT) - 'REPLACE)) + (BLTSHADE WHITESHADE PANE 0 PBOTTOM (fetch WIDTH of PREG) + (FGETLD LASTVISIBLE YBOT) + 'REPLACE)) - (* ;; - "Display the new lines. No need to clear the rectangle first, \DISPLAYLINE fills the bitmap") + (* ;; "Display the new lines. No need to clear the rectangle first, \DISPLAYLINE fills the bitmap. We are starting from the line at the top of the on-screen region of the pane (top of the pane unless it is offscreen). The OLDTOPLINE may also not be displayed, so we keep going until we get to the top of what is now the visible (onscreen) region.") - (for L inlines NEWTOPLINE until (EQ L OLDTOPLINE) do (\TEDIT.DISPLAYLINE TEXTOBJ L PANE - )) - (\TEDIT.SCROLL.SHOWSEL 'DOWN WHERESEL PANE TEXTOBJ OLDTOPLINE))) - NIL]) + (for L inlines NEWTOPLINE until (EQ L OLDTOPLINE) do (\TEDIT.DISPLAYLINE TEXTOBJ L PANE)) + (\TEDIT.SCROLL.SHOWSEL 'DOWN WHERESEL PANE TEXTOBJ OLDTOPLINE]) (\TEDIT.OFFSCREEN.SCROLL [LAMBDA (TEXTOBJ PANE BOUNDARY) (* ; "Edited 19-Mar-2024 23:34 by rmk") @@ -2519,7 +2499,8 @@ T)]) (\TEDIT.WHERE.SEL - [LAMBDA (TEXTOBJ TOPLINE PANE) (* ; "Edited 20-Jan-2024 22:17 by rmk") + [LAMBDA (TEXTOBJ TOPLINE PANE VBOTTOM) (* ; "Edited 8-Apr-2024 23:27 by rmk") + (* ; "Edited 20-Jan-2024 22:17 by rmk") (* ; "Edited 28-Nov-2023 11:48 by rmk") (* ; "Edited 25-Nov-2023 15:47 by rmk") (* ; "Edited 24-Nov-2023 12:47 by rmk") @@ -2530,7 +2511,7 @@ (LET (WHERESEL (SEL (FGETTOBJ TEXTOBJ SEL))) (CL:WHEN (AND (FGETSEL SEL SET) (FGETSEL SEL ONFLG)) - (SETQ WHERESEL (\TEDIT.WHERE.SEL1 SEL TOPLINE PANE)) + (SETQ WHERESEL (\TEDIT.WHERE.SEL1 SEL TOPLINE VBOTTOM)) (CL:UNLESS (OR (EQ 'BELOW (CAR WHERESEL)) (EQ 'ABOVE (CDR WHERESEL))) @@ -2541,10 +2522,11 @@ WHERESEL)))]) (\TEDIT.WHERE.SEL1 - [LAMBDA (SEL TOPLINE PANE) (* ; "Edited 24-Nov-2023 12:49 by rmk") + [LAMBDA (SEL TOPLINE VBOTTOM) (* ; "Edited 8-Apr-2024 23:25 by rmk") + (* ; "Edited 24-Nov-2023 12:49 by rmk") (* ; "Edited 18-Nov-2023 23:52 by rmk") - (* ;; "Determines the relationship of the start end end of SEL to the lines that are visible PANE. This assumes that TOPLINE is the first currently visible line. We search PANE for the last selected line, since we don't trust LN.") + (* ;; "Determines the relationship of the start and end of SEL to the lines that are visible in a pane. This assumes that TOPLINE is the first currently visible line, and VBOTTOM is the bottom of the visible region of thepane (0 if the bottom of the pane is onscreen, otherwise positive). We search for the last selected line, since we don't trust LN.") (* ;; "The value is a pair (ABOVE/IN/BELOW, indicating whether the start/end of the selection is above, in, or below the pane.") @@ -2558,13 +2540,12 @@ (* ;; "If we stop at the last SEL line, we will determine that the it is not BELOW") - [SETQ LASTVISIBLE (for L (CHLAST _ (SUB1 (FGETSEL SEL CHLIM))) - (PBOTTOM _ (fetch BOTTOM of (DSPCLIPPINGREGION NIL PANE))) - inlines TOPLINE do (CL:WHEN (WITHINLINEP CHLAST L) - (RETURN L)) - (CL:WHEN (ILESSP (FGETLD L YBOT) - PBOTTOM) - (RETURN (OR $$PREVLINE TOPLINE))) + [SETQ LASTVISIBLE (for L (CHLAST _ (SUB1 (FGETSEL SEL CHLIM))) inlines TOPLINE + do (CL:WHEN (WITHINLINEP CHLAST L) + (RETURN L)) + (CL:WHEN (ILESSP (FGETLD L YBOT) + VBOTTOM) + (RETURN (OR $$PREVLINE TOPLINE))) finally (RETURN (OR $$PREVLINE TOPLINE] (* ;; "(Don't put comment between ifs--they go into the CONS)") @@ -2631,11 +2612,12 @@ (IDIFFERENCE SCREENHEIGHT YOFFSET]) (\TEDIT.ONSCREEN? - [LAMBDA (PANE PROP) (* ; "Edited 29-Nov-2023 23:39 by rmk") + [LAMBDA (PANE PROP) (* ; "Edited 9-Apr-2024 16:57 by rmk") + (* ; "Edited 29-Nov-2023 23:39 by rmk") (* ;; "If the PROP of PANE is on screen, returns that property of its clipping region (equivalent to (fetch PROP of (DSPCLIPPINGREGION NIL PANE).") - (* ;; " But if that property is off screen, the value gives the position in the clipping region that is still visible. E.g. if the bottom is below the screen by N points (REG's bottom is -N), the return will be the clipping regions bottom _N.") + (* ;; " But if that property is off screen, the value gives the position in clipping region coordinates that is still visible. E.g. if the bottom is below the screen by N points (PREG's bottom is -N), the return is the clipping regions bottom -N.") (LET [VAL (PREG (DSPCLIPPINGREGION NIL PANE)) (BORDER (OR 0 (WINDOWPROP PANE 'BORDER] @@ -2663,6 +2645,11 @@ (IDIFFERENCE VAL SCREENWIDTH)) (WINDOWPROP PANE 'BORDER)) else (fetch RIGHT of PREG))) + (HEIGHT (* ; "Height of the onscreen subregion") + [ADD1 (IDIFFERENCE (\TEDIT.ONSCREEN? PANE 'TOP) + (\TEDIT.ONSCREEN? PANE 'BOTTOM]) + (WIDTH [ADD1 (IDIFFERENCE (\TEDIT.ONSCREEN? PANE 'RIGHT) + (\TEDIT.ONSCREEN? PANE 'LEFT]) (SHOULDNT]) (\TEDIT.PANE.SCREENREGION @@ -2815,7 +2802,8 @@ (DSPYPOSITION Y (ffetch (TEDITCARET TCCARETDS) of CARET)))]) (TEDIT.NORMALIZECARET - [LAMBDA (TSTREAM SEL EVEN.IF.VISIBLE) (* ; "Edited 21-Mar-2024 21:27 by rmk") + [LAMBDA (TSTREAM SEL EVEN.IF.VISIBLE) (* ; "Edited 9-Apr-2024 19:31 by rmk") + (* ; "Edited 21-Mar-2024 21:27 by rmk") (* ; "Edited 20-Mar-2024 06:46 by rmk") (* ; "Edited 15-Mar-2024 22:00 by rmk") (* ; "Edited 9-Mar-2024 23:39 by rmk") @@ -2841,20 +2829,19 @@ (* ;; "This is essentially %"find selpane in panes%" and the corresponding L1/LN in SEL. SELPANE is the pane of the last selection") - (for PANE CH# CARETYBOT TOPLINE PREG PHEIGHT PBOTTOM (SELPANE _ - (OR (FGETTOBJ TEXTOBJ - SELPANE) - (\TEDIT.PRIMARYW - TEXTOBJ))) - inpanes TEXTOBJ as L1 inside (FGETSEL SEL L1) as LN inside (FGETSEL SEL LN) + (for PANE CH# CARETYBOT TOPLINE VTOP VBOTTOM (SELPANE _ (OR (FGETTOBJ TEXTOBJ + SELPANE) + (\TEDIT.PRIMARYW TEXTOBJ + ))) inpanes + TEXTOBJ + as L1 inside (FGETSEL SEL L1) as LN inside (FGETSEL SEL LN) first (CL:UNLESS SELPANE (RETURN)) when (EQ PANE SELPANE) do (* ;;  "Find the YBOT in SELPANE of the line with the selected character, if known.") - (SETQ PREG (DSPCLIPPINGREGION NIL PANE)) - (SETQ PHEIGHT (fetch PTOP of PREG)) - (SETQ PBOTTOM (fetch BOTTOM of PREG)) + (SETQ VTOP (\TEDIT.ONSCREEN? PANE 'TOP)) + (SETQ VBOTTOM (\TEDIT.ONSCREEN? PANE 'BOTTOM)) (* ;;  "Find the selected character either at the beginning or end of the selection.") @@ -2873,14 +2860,14 @@  "We don't want to jump around if the caret is already visible in SELPANE, unless EVEN.IF.VISIBLE ") (CL:WHEN (OR EVEN.IF.VISIBLE (NOT CARETYBOT) - (IGEQ CARETYBOT PHEIGHT) - (ILESSP CARETYBOT PBOTTOM)) + (IGEQ CARETYBOT VTOP) + (ILESSP CARETYBOT VBOTTOM)) (* ;; "Not visible, work to do: Make sure the line containing CH# is linked in and scrolled to the top of the pane. This should be replaceable by \TEDIT.SCROLLFN, with the appropriate DY.") (\TEDIT.SHOWSEL SEL NIL SELPANE TEXTOBJ) - (SETQ TOPLINE (CADR (\TEDIT.LINES.ABOVE TEXTOBJ CH# PHEIGHT))) - (SETYPOS TOPLINE (IDIFFERENCE PHEIGHT (GETLD TOPLINE LHEIGHT))) + (SETQ TOPLINE (CADR (\TEDIT.LINES.ABOVE TEXTOBJ CH# VTOP))) + (SETYPOS TOPLINE (IDIFFERENCE VTOP (GETLD TOPLINE LHEIGHT))) (LINKLD (fetch (TEXTWINDOW PLINES) of SELPANE) TOPLINE) @@ -3147,7 +3134,8 @@ (T NIL]) (\TEDIT.CREATEMENU - [LAMBDA (ITEMS) (* ; "Edited 16-Oct-87 14:21 by jds") + [LAMBDA (ITEMS) (* ; "Edited 3-Apr-2024 13:30 by rmk") + (* ; "Edited 16-Oct-87 14:21 by jds") (* ;; "Create a TEdit command menu, given a list of menu items.") @@ -3155,8 +3143,8 @@ ITEMS _ ITEMS CENTERFLG _ T MENUFONT _ (FONTCREATE 'HELVETICA 10 'BOLD) - WHENHELDFN _ '\TEDIT.MENU.WHENHELDFN - WHENSELECTEDFN _ '\TEDIT.MENU.WHENSELECTEDFN]) + WHENHELDFN _ (FUNCTION \TEDIT.MENU.WHENHELDFN) + WHENSELECTEDFN _ (FUNCTION \TEDIT.MENU.WHENSELECTEDFN]) (\TEDIT.MENU.WHENHELDFN [LAMBDA (ITEM MENU BUTTON) (* ; "Edited 4-Oct-2022 09:17 by rmk") @@ -3234,28 +3222,27 @@ \TEDIT.ACTIVE.WINDOWP 37238 . 38289) (\TEDIT.EXPANDFN 38291 . 38854) (\TEDIT.MAINW 38856 . 40996) ( \TEDIT.PRIMARYW 40998 . 41638) (\TEDIT.NEWREGIONFN 41640 . 44156) (\TEDIT.SET.WINDOW.EXTENT 44158 . 49021) (\TEDIT.SHRINK.ICONCREATE 49023 . 51563) (\TEDIT.SHRINKFN 51565 . 51974) (\TEDIT.PANEREGION -51976 . 54067)) (54070 78734 (\TEDIT.BUTTONEVENTFN 54080 . 69847) (\TEDIT.DO.SELOPERATION 69849 . -72131) (\TEDIT.TTY.TEXTOBJP 72133 . 72557) (\TEDIT.BUTTONEVENTFN.SELOPERATION 72559 . 73948) ( -\TEDIT.BUTTONEVENTFN.INACTIVE 73950 . 76163) (\TEDIT.BUTTONEVENTFN.INTITLE 76165 . 77684) ( -\TEDIT.COPYINSERT 77686 . 78732)) (78769 93880 (\TEDIT.PANE.SPLIT 78779 . 82999) (\TEDIT.SPLITW 83001 - . 89562) (\TEDIT.UNSPLITW 89564 . 93878)) (95236 96021 (TEDITWINDOWP 95246 . 96019)) (96058 99046 ( -TEDIT.GETINPUT 96068 . 98511) (\TEDIT.MAKEFILENAME 98513 . 99044)) (99095 107084 (TEDIT.PROMPTWINDOW -99105 . 99419) (TEDIT.PROMPTPRINT 99421 . 101857) (TEDIT.PROMPTCLEAR 101859 . 103578) ( -TEDIT.PROMPTFLASH 103580 . 105512) (\TEDIT.PROMPT.PAGEFULLFN 105514 . 107082)) (107322 115201 ( -\TEXTSTREAM.TITLE 107332 . 108022) (\TEDIT.DEFAULT.TITLE 108024 . 110403) (\TEDIT.WINDOW.TITLE 110405 - . 112462) (\TEXTSTREAM.FILENAME 112464 . 114134) (\TEDIT.UPDATE.TITLE 114136 . 115199)) (115244 -131492 (TEDIT.DEACTIVATE.WINDOW 115254 . 121837) (\TEDIT.REPAINTFN 121839 . 123638) ( -\TEDIT.AFTERMOVEFN 123640 . 124394) (OFFSCREENP 124396 . 126003) (\TEDIT.RESHAPEFN 126005 . 130314) ( -\TEDIT.PANEWITHINSCREEN? 130316 . 131490)) (131493 160656 (\TEDIT.SCROLLFN 131503 . 133408) ( -\TEDIT.SCROLLFLOAT 133410 . 138238) (\TEDIT.SCROLLUP 138240 . 145938) (\TEDIT.SCROLL.SHOWSEL 145940 . -148691) (\TEDIT.SCROLLDOWN 148693 . 154301) (\TEDIT.OFFSCREEN.SCROLL 154303 . 156647) ( -\TEDIT.WHERE.SEL 156649 . 157869) (\TEDIT.WHERE.SEL1 157871 . 160654)) (160657 165779 (\TEDIT.ONSCREEN - 160667 . 162122) (\TEDIT.ONSCREEN? 162124 . 164437) (\TEDIT.PANE.SCREENREGION 164439 . 165777)) ( -165821 168438 (\TEDIT.PROCIDLEFN 165831 . 167368) (\TEDIT.PROCENTRYFN 167370 . 167815) ( -\TEDIT.PROCEXITFN 167817 . 168436)) (168517 182211 (\TEDIT.DOWNCARET 168527 . 169320) ( -\TEDIT.FLASHCARET 169322 . 171139) (\TEDIT.UPCARET 171141 . 172245) (TEDIT.NORMALIZECARET 172247 . -177942) (\TEDIT.SETCARET 177944 . 181784) (\TEDIT.CARET 181786 . 182209)) (182245 195923 ( -TEDIT.ADD.MENUITEM 182255 . 184546) (TEDIT.DEFAULT.MENUFN 184548 . 193263) (TEDIT.REMOVE.MENUITEM -193265 . 194262) (\TEDIT.CREATEMENU 194264 . 194701) (\TEDIT.MENU.WHENHELDFN 194703 . 195608) ( -\TEDIT.MENU.WHENSELECTEDFN 195610 . 195921))))) +51976 . 54067)) (54070 78852 (\TEDIT.BUTTONEVENTFN 54080 . 69963) (\TEDIT.DO.SELOPERATION 69965 . +72247) (\TEDIT.TTY.TEXTOBJP 72249 . 72673) (\TEDIT.BUTTONEVENTFN.SELOPERATION 72675 . 74064) ( +\TEDIT.BUTTONEVENTFN.INACTIVE 74066 . 76279) (\TEDIT.BUTTONEVENTFN.INTITLE 76281 . 77800) ( +\TEDIT.COPYINSERTFN 77802 . 78850)) (78887 93998 (\TEDIT.PANE.SPLIT 78897 . 83117) (\TEDIT.SPLITW +83119 . 89680) (\TEDIT.UNSPLITW 89682 . 93996)) (95354 96139 (TEDITWINDOWP 95364 . 96137)) (96176 +99164 (TEDIT.GETINPUT 96186 . 98629) (\TEDIT.MAKEFILENAME 98631 . 99162)) (99213 107202 ( +TEDIT.PROMPTWINDOW 99223 . 99537) (TEDIT.PROMPTPRINT 99539 . 101975) (TEDIT.PROMPTCLEAR 101977 . +103696) (TEDIT.PROMPTFLASH 103698 . 105630) (\TEDIT.PROMPT.PAGEFULLFN 105632 . 107200)) (107440 115319 + (\TEXTSTREAM.TITLE 107450 . 108140) (\TEDIT.DEFAULT.TITLE 108142 . 110521) (\TEDIT.WINDOW.TITLE +110523 . 112580) (\TEXTSTREAM.FILENAME 112582 . 114252) (\TEDIT.UPDATE.TITLE 114254 . 115317)) (115362 + 130434 (TEDIT.DEACTIVATE.WINDOW 115372 . 121955) (\TEDIT.REPAINTFN 121957 . 123756) ( +\TEDIT.AFTERMOVEFN 123758 . 124512) (OFFSCREENP 124514 . 126121) (\TEDIT.RESHAPEFN 126123 . 130432)) ( +130435 160162 (\TEDIT.SCROLLFN 130445 . 132350) (\TEDIT.SCROLLFLOAT 132352 . 137180) (\TEDIT.SCROLLUP +137182 . 144909) (\TEDIT.SCROLL.SHOWSEL 144911 . 147414) (\TEDIT.SCROLLDOWN 147416 . 153627) ( +\TEDIT.OFFSCREEN.SCROLL 153629 . 155973) (\TEDIT.WHERE.SEL 155975 . 157307) (\TEDIT.WHERE.SEL1 157309 + . 160160)) (160163 165790 (\TEDIT.ONSCREEN 160173 . 161628) (\TEDIT.ONSCREEN? 161630 . 164448) ( +\TEDIT.PANE.SCREENREGION 164450 . 165788)) (165832 168449 (\TEDIT.PROCIDLEFN 165842 . 167379) ( +\TEDIT.PROCENTRYFN 167381 . 167826) (\TEDIT.PROCEXITFN 167828 . 168447)) (168528 182262 ( +\TEDIT.DOWNCARET 168538 . 169331) (\TEDIT.FLASHCARET 169333 . 171150) (\TEDIT.UPCARET 171152 . 172256) + (TEDIT.NORMALIZECARET 172258 . 177993) (\TEDIT.SETCARET 177995 . 181835) (\TEDIT.CARET 181837 . +182260)) (182296 196102 (TEDIT.ADD.MENUITEM 182306 . 184597) (TEDIT.DEFAULT.MENUFN 184599 . 193314) ( +TEDIT.REMOVE.MENUITEM 193316 . 194313) (\TEDIT.CREATEMENU 194315 . 194880) (\TEDIT.MENU.WHENHELDFN +194882 . 195787) (\TEDIT.MENU.WHENSELECTEDFN 195789 . 196100))))) STOP diff --git a/library/tedit/TEDIT-WINDOW.LCOM b/library/tedit/TEDIT-WINDOW.LCOM index 250b4c907..575bfcbcf 100644 Binary files a/library/tedit/TEDIT-WINDOW.LCOM and b/library/tedit/TEDIT-WINDOW.LCOM differ