From 59e2aaec10372c8276d0a960142aeb1457a9e34f Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Wed, 12 Nov 2025 23:14:12 -0800 Subject: [PATCH] TEDIT-FNKEYS: uses keywords for action names, bind ^W, RUBOUT, and ^U --- library/tedit/TEDIT-FNKEYS | 1160 ++++++++++++------------ library/tedit/TEDIT-FNKEYS.LCOM | Bin 39242 -> 39595 bytes library/tedit/TEDIT-RELEASENOTES.TEDIT | Bin 40457 -> 41868 bytes 3 files changed, 592 insertions(+), 568 deletions(-) diff --git a/library/tedit/TEDIT-FNKEYS b/library/tedit/TEDIT-FNKEYS index 09529635..063e5b12 100644 --- a/library/tedit/TEDIT-FNKEYS +++ b/library/tedit/TEDIT-FNKEYS @@ -1,21 +1,18 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 8-Nov-2025 13:32:36" {WMEDLEY}TEDIT>TEDIT-FNKEYS.;299 107884 +(FILECREATED "12-Nov-2025 16:24:23" {WMEDLEY}tedit>TEDIT-FNKEYS.;315 109327 :EDIT-BY rmk - :CHANGES-TO (FNS TEDIT.GETSYNTAX TEDIT.GETFUNCTION TEDIT.CLEAR.CHARBINDINGS - TEDIT.GET.CHARACTION TEDIT.GET.ALL.CHARBINDINGS TEDIT.GET.ALL.CHARACTIONS - TEDIT.SETFUNCTION) - (VARS TEDIT.BASIC.CHARBINDINGS \TEDIT.TTCCODES) + :CHANGES-TO (VARS ORIG.TEDIT.CHARACTIONS) - :PREVIOUS-DATE " 7-Aug-2025 15:00:51" {WMEDLEY}TEDIT>TEDIT-FNKEYS.;294) + :PREVIOUS-DATE "12-Nov-2025 16:14:42" {WMEDLEY}tedit>TEDIT-FNKEYS.;314) (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 @@ -33,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") @@ -50,21 +47,38 @@ (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 TEDIT.BASIC.CHARBINDINGS TEDIT.DORADO.CHARBINDINGS) + (INITVARS (TEDIT.CHARBINDINGS (APPEND TEDIT.BASIC.CHARBINDINGS TEDIT.DORADO.CHARBINDINGS)) + (TEDIT.CHARACTIONS (APPEND ORIG.TEDIT.CHARACTIONS))) + (GLOBALVARS TEDIT.CHARBINDINGS TEDIT.CHARACTIONS) + (* ; "Installation") + (DECLARE%: DONTEVAL@LOAD DOCOPY (VARS (TEDIT.READTABLE (\TEDIT.READTABLE)) + (TEDIT.WORDBOUND.READTABLE (\TEDIT.WORDBOUND.READTABLE]) @@ -73,7 +87,8 @@ (DEFINEQ (TEDIT.INSTALL.CHARBINDINGS - [LAMBDA (CHARBINDINGS RDTBL CHARACTIONS) (* ; "Edited 7-Apr-2025 20:01 by rmk") + [LAMBDA (CHARBINDINGS RDTBL CHARACTIONS) (* ; "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") @@ -89,6 +104,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 @@ -97,37 +113,25 @@ 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 - ( + (for CB 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) + RDTBL))) + when (LISTP CB) unless (EQ '* (CAR CB)) when (SETQ ACTION (CADR (ASSOC (CAR CB) + CHARACTIONS))) + do (CL:WHEN (EQ (CAR CB) + 'WORDDELETE.BACKWARD)) + (for CHAR in (CDR CB) do (CL:UNLESS (CHARCODEP CHAR) (SETQ CHAR (CHARCODE.DECODE CHAR))) - (TEDIT.SETFUNCTION CHAR A RDTBL) + (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 8-Nov-2025 10:00 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") @@ -150,24 +154,26 @@ (\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 8-Nov-2025 10:00 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") @@ -189,39 +195,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 FN) - (\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) @@ -230,26 +203,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 8-Nov-2025 10:00 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) @@ -268,12 +271,12 @@ (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 @@ -282,7 +285,8 @@ 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") @@ -290,26 +294,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 8-Nov-2025 10:00 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 @@ -318,7 +320,7 @@ 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 FN) @@ -327,18 +329,15 @@ (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") @@ -853,7 +852,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") @@ -868,10 +868,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") @@ -887,7 +888,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 @@ -1275,7 +1293,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") @@ -1315,44 +1334,31 @@ RTBL]) (TEDIT.GETSYNTAX - [LAMBDA (CH TABLE) (* ; "Edited 8-Nov-2025 13:32 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") - (* ;; "SKETCH uses this function.") + (* ;; "Map back to documented syntax-class names just for those defined classes, otherwise FN, for compatibility with documentation and history. ") - (LET - ((ACTION (TEDIT.GET.CHARACTION CH TABLE))) - (if ACTION - then - (* ;; "Map back to syntax-class names just for those defined classes, otherwise FN, for compatibility with documentation and history. But (OR (CAR (MKLIST ACTION)) 'NONE) would be simpler and more informative") - - (OR (find CLASS in '(CHARDELETE WORDDELETE DELETE UNDO REDO NEXT) - suchthat (OR (EQ CLASS ACTION) - (MEMB CLASS ACTION))) - 'FN) - else - (* ;; - "Old code: actions associated with particular class names--really now just picks out NONE") - - (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") (* ; @@ -1375,7 +1381,8 @@ (\TEDIT.TTC NONE))))]) (TEDIT.GETFUNCTION - [LAMBDA (CHARCODE RDTBL) (* ; "Edited 8-Nov-2025 11:13 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") @@ -1400,7 +1407,8 @@ [CAR (FETCH MACROFN OF (GETHASH CHARCODE (fetch READMACRODEFS of RDTBL])]) (TEDIT.SETFUNCTION - [LAMBDA (CHARCODE FN RDTBL) (* ; "Edited 8-Nov-2025 10:02 by rmk") + [LAMBDA (CHARCODE FN RDTBL) (* ; "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") @@ -1440,7 +1448,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. ") @@ -1476,390 +1485,8 @@ -(* ; "Keybindings") - -(DECLARE%: EVAL@COMPILE DONTCOPY -(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE - -(RPAQQ \TEDIT.TTCCODES - ((NONE 0) - (CHARDELETE 1) - (WORDDELETE 2) - (DELETE 3) - (FN 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 DELETE) - "^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 @@ -1965,30 +1592,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)))) + +(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) + (:LINEDELETE.FORWARD) + (:LINEDELETE.BACKWARD) + (:LINEDELETE "^U") + + (* ;; "") + + + (* ;; "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" "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)) + +(RPAQ? TEDIT.CHARACTIONS (APPEND ORIG.TEDIT.CHARACTIONS)) +(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 (4188 23498 (TEDIT.INSTALL.CHARBINDINGS 4198 . 8089) (TEDIT.CLEAR.CHARBINDINGS 8091 . -10868) (TEDIT.GET.CHARACTION 10870 . 13715) (TEDIT.GET.CHARBINDING 13717 . 15856) ( -TEDIT.GET.ALL.CHARBINDINGS 15858 . 18269) (TEDIT.CHARBINDINGS.INVERT 18271 . 20001) ( -TEDIT.GET.ALL.CHARACTIONS 20003 . 22184) (TEDIT.CONFLICTING.CHARBINDINGS 22186 . 23496)) (23558 33613 -(\TEDIT.KEY.CHARLOOKS 23568 . 24760) (\TEDIT.KEY.QUAD 24762 . 26855) (\TEDIT.DEFAULTSSEL 26857 . 27468 -) (\TEDIT.SETDEFAULT.FROM.SEL 27470 . 28147) (\TEDIT.KEY.SIZE 28149 . 29345) (\TEDIT.SUBSCRIPTSEL -29347 . 29550) (\TEDIT.SUPERSCRIPTSEL 29552 . 29756) (\TEDIT.KEY.TRANSFORM 29758 . 31755) ( -\TEDIT.KEY.OPENLINE 31757 . 32211) (\TEDIT.KEY.FAMILYN 32213 . 33611)) (33614 33903 (CAP-CASECODE -33624 . 33901)) (33937 37369 (\TEDIT.SHOWCARETLOOKS 33947 . 36462) (\TEDIT.DESCRIBEFONT 36464 . 37367) -) (37400 52373 (\TEDIT.ONECHAR.BACKWARD 37410 . 38557) (\TEDIT.ONECHAR.FORWARD 38559 . 39795) ( -\TEDIT.ONELINE.UP 39797 . 42758) (\TEDIT.ONELINE.DOWN 42760 . 44417) (\TEDIT.ONELINE.MOVE 44419 . -46706) (\TEDIT.ONEWORD.BACKWARD 46708 . 47896) (\TEDIT.ONEWORD.FORWARD 47898 . 49085) ( -\TEDIT.LINE.BEGIN 49087 . 50166) (\TEDIT.LINE.END 50168 . 51405) (\TEDIT.DOCUMENT.BEGIN 51407 . 51766) - (\TEDIT.DOCUMENT.END 51768 . 52371)) (52374 54416 (\TEDIT.LINEDELETE.FORWARD 52384 . 53383) ( -\TEDIT.LINEDELETE.BACKWARD 53385 . 54414)) (54417 56945 (\TEDIT.KEY.NEST 54427 . 56943)) (56946 58228 -(\TEDIT.KEY.WRAP 56956 . 58226)) (58319 66367 (\TEDIT.KEY.FIND 58329 . 63507) ( -\TEDIT.KEY.FIND.SEARCHSTRING 63509 . 64649) (\TEDIT.GET.TARGET.STRING 64651 . 66365)) (66398 69030 ( -\TEDIT.KEY.SUBSTITUTE 66408 . 66629) (\TEDIT.MANPAGE 66631 . 67878) (\TEDIT.CALL.ED 67880 . 68710) ( -\TEDIT.SELECT.ALL 68712 . 69028)) (69057 74747 (\TEDIT.CLIPBOARD 69067 . 70822) ( -\TEDIT.COPYTOCLIPBOARD 70824 . 71604) (\TEDIT.EXTRACTTOCLIPBOARD 71606 . 71801) (\TEDIT.WRITE.SEL -71803 . 74745)) (74913 87995 (\TEDIT.READTABLE 74923 . 75859) (\TEDIT.WORDBOUND.READTABLE 75861 . -78800) (TEDIT.GETSYNTAX 78802 . 81113) (TEDIT.SETSYNTAX 81115 . 82320) (TEDIT.GETFUNCTION 82322 . -83686) (TEDIT.SETFUNCTION 83688 . 85773) (TEDIT.WORDGET 85775 . 86036) (TEDIT.WORDSET 86038 . 86669) ( -TEDIT.ATOMBOUND.READTABLE 86671 . 87993)) (99832 106820 (TEDIT.BUTTONS.BUILD 99842 . 105088) ( -TEDIT.BUTTONBITMAP.FILL 105090 . 106818))))) + (FILEMAP (NIL (5010 23527 (TEDIT.INSTALL.CHARBINDINGS 5020 . 8123) (TEDIT.CLEAR.CHARBINDINGS 8125 . +11145) (TEDIT.GET.CHARACTION 11147 . 13928) (TEDIT.GET.CHARBINDING 13930 . 16107) ( +TEDIT.GET.ALL.CHARBINDINGS 16109 . 18608) (TEDIT.CHARBINDINGS.INVERT 18610 . 19889) ( +TEDIT.GET.ALL.CHARACTIONS 19891 . 22213) (TEDIT.CONFLICTING.CHARBINDINGS 22215 . 23525)) (23587 33642 +(\TEDIT.KEY.CHARLOOKS 23597 . 24789) (\TEDIT.KEY.QUAD 24791 . 26884) (\TEDIT.DEFAULTSSEL 26886 . 27497 +) (\TEDIT.SETDEFAULT.FROM.SEL 27499 . 28176) (\TEDIT.KEY.SIZE 28178 . 29374) (\TEDIT.SUBSCRIPTSEL +29376 . 29579) (\TEDIT.SUPERSCRIPTSEL 29581 . 29785) (\TEDIT.KEY.TRANSFORM 29787 . 31784) ( +\TEDIT.KEY.OPENLINE 31786 . 32240) (\TEDIT.KEY.FAMILYN 32242 . 33640)) (33643 33932 (CAP-CASECODE +33653 . 33930)) (33966 37398 (\TEDIT.SHOWCARETLOOKS 33976 . 36491) (\TEDIT.DESCRIBEFONT 36493 . 37396) +) (37429 52402 (\TEDIT.ONECHAR.BACKWARD 37439 . 38586) (\TEDIT.ONECHAR.FORWARD 38588 . 39824) ( +\TEDIT.ONELINE.UP 39826 . 42787) (\TEDIT.ONELINE.DOWN 42789 . 44446) (\TEDIT.ONELINE.MOVE 44448 . +46735) (\TEDIT.ONEWORD.BACKWARD 46737 . 47925) (\TEDIT.ONEWORD.FORWARD 47927 . 49114) ( +\TEDIT.LINE.BEGIN 49116 . 50195) (\TEDIT.LINE.END 50197 . 51434) (\TEDIT.DOCUMENT.BEGIN 51436 . 51795) + (\TEDIT.DOCUMENT.END 51797 . 52400)) (52403 55711 (\TEDIT.LINEDELETE.FORWARD 52413 . 53522) ( +\TEDIT.LINEDELETE.BACKWARD 53524 . 54663) (\TEDIT.LINEDELETE 54665 . 55709)) (55712 58240 ( +\TEDIT.KEY.NEST 55722 . 58238)) (58241 59523 (\TEDIT.KEY.WRAP 58251 . 59521)) (59614 67662 ( +\TEDIT.KEY.FIND 59624 . 64802) (\TEDIT.KEY.FIND.SEARCHSTRING 64804 . 65944) (\TEDIT.GET.TARGET.STRING +65946 . 67660)) (67693 70325 (\TEDIT.KEY.SUBSTITUTE 67703 . 67924) (\TEDIT.MANPAGE 67926 . 69173) ( +\TEDIT.CALL.ED 69175 . 70005) (\TEDIT.SELECT.ALL 70007 . 70323)) (70352 76042 (\TEDIT.CLIPBOARD 70362 + . 72117) (\TEDIT.COPYTOCLIPBOARD 72119 . 72899) (\TEDIT.EXTRACTTOCLIPBOARD 72901 . 73096) ( +\TEDIT.WRITE.SEL 73098 . 76040)) (76208 88753 (\TEDIT.READTABLE 76218 . 77154) ( +\TEDIT.WORDBOUND.READTABLE 77156 . 80204) (TEDIT.GETSYNTAX 80206 . 81435) (TEDIT.SETSYNTAX 81437 . +82751) (TEDIT.GETFUNCTION 82753 . 84226) (TEDIT.SETFUNCTION 84228 . 86422) (TEDIT.WORDGET 86424 . +86685) (TEDIT.WORDSET 86687 . 87427) (TEDIT.ATOMBOUND.READTABLE 87429 . 88751)) (88854 95842 ( +TEDIT.BUTTONS.BUILD 88864 . 94110) (TEDIT.BUTTONBITMAP.FILL 94112 . 95840)) (98307 98895 ( +\TEDIT.TTCCLASS 98317 . 98893))))) STOP diff --git a/library/tedit/TEDIT-FNKEYS.LCOM b/library/tedit/TEDIT-FNKEYS.LCOM index 65c4bc51809ab96e4361bf542ed9da7d492fc580..a9e1e641f4f436fe7c4cd753f1946d64850be116 100644 GIT binary patch delta 8227 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 delta 7544 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 delta 783 zcmeA<&eXYwX+kcSV?j}7j)IYak?H1k7872^xXpV6Et!DSH{s=6ljq2lZswE!&m`sS z;TYuN>f;*Xs-xiM>F1*7<{uOe6w*=H?5LE>G_T<|tx|2CoH76UZHgo#928Spl z=A|fXKByYTv{^#qC*x!xEw#y(S_+e+v{WZIXo(2Lg)1p2#f2(q{{PRw$orpxQ)BaT zt@#2RPX0bFdj5V2lLM?JwLC){eLS5(To}vE4WYp~u{c#hA=KG1*i~WjbZa@@;E*6s zZ&&}&5Ri_|N2~)~8AT?GH<@hqY7}6e+}HAyxq%^ka#^dKxu$}jrwR=OYAR?1xVWK;ZQk1|#>iaF5H#7nT^5%izWy$*L4L?aAc<%) za7{kgssb~^7>7fUbU>Yf5SiTDo(S~U`*z969UZch^E)^gg(mBDsDMcgpv=M!)5#k< z6vYG?7#R3~n1LBYFfcK214*69{qsd9|LqXn{G;;^3*-99U;CcP*n;Fis<=Q5HXvpK zF+d_blLIG6O%|MRR#h1!#0bQ!AZZXo15;#j{Y*(lmdUacb%a?!vLLg7>LF&aO^%sp z%lKk)+$5>VTPEI9l>sBxRu2faY%gGU*1Jxdf&X3=we*5nZqWGPC$N X1zj9NT&=P~ICn5Glxs8nui6Cwm(RLr