From 81ce9354e27855a37229dc6cccead136e0e7e457 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Tue, 23 Feb 2021 10:21:37 -0800 Subject: [PATCH] MODERNIZE: initial push This is the rename of MACINTERFACE, including a doc file MODERNIZE.TXT. When ready to install it in a loadup, replace MACINTERFACE with MODERNIZE in sources/LOADUP-FULL. --- lispusers/MODERNIZE | 1 + lispusers/MODERNIZE.LCOM | Bin 0 -> 7748 bytes lispusers/MODERNIZE.TXT | 76 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 lispusers/MODERNIZE create mode 100644 lispusers/MODERNIZE.LCOM create mode 100644 lispusers/MODERNIZE.TXT diff --git a/lispusers/MODERNIZE b/lispusers/MODERNIZE new file mode 100644 index 00000000..37ff459a --- /dev/null +++ b/lispusers/MODERNIZE @@ -0,0 +1 @@ +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "22-Feb-2021 16:47:48"  {DSK}kaplan>Local>medley3.5>git-medley>lispusers>MODERNIZE.;8 20161 changes to%: (VARS MODERNIZECOMS) (FNS MODERNWINDOW MODERNWINDOW.SETUP UNMODERNWINDOW MODERNWINDOW.UNSETUP MODERNWINDOW.BUTTONEVENTFN MODERN-ADD-EXEC MODERN-SNAPW TEDIT.MODERNIZE TOTOPW.MODERNIZE MODERNWINDOW.BUTTONEVENTFN.ANYWHERE MACWINDOW.BUTTONEVENTFN.ANYWHERE MACINT-ADD-EXEC TEDIT.MACINTERFACE TOTOPW.MACINTERFACE MACWINDOW.BUTTONEVENTFN INCORNER.REGION) previous date%: "22-Feb-2021 13:55:51" {DSK}kaplan>lisp>MACINTERFACE.;2) (PRETTYCOMPRINT MODERNIZECOMS) (RPAQQ MODERNIZECOMS [ (* ;; "Externals") (COMS (FNS MODERNWINDOW MODERNWINDOW.SETUP UNMODERNWINDOW MODERNWINDOW.UNSETUP) (INITVARS (MODERN-WINDOW-MARGIN 25))) (* ;; "Internals") [COMS (FNS MODERNWINDOW.BUTTONEVENTFN MODERNWINDOW.BUTTONEVENTFN.ANYWHERE NEARTOP NEARESTCORNER INCORNER.REGION) (* ;; "Behavior for some known window creators") (FNS MODERN-ADD-EXEC MODERN-SNAPW TOTOPW.MODERNIZE) (* ;; "Add some Meta commands") (FNS TEDIT.MODERNIZE TEDIT.SELECTALL) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (TEDIT.MODERNIZE) (* ;; "Inspector") (MODERNWINDOW.SETUP '\ITEM.WINDOW.BUTTON.HANDLER) (* ;; "Commonlisp array inspector. If you move the main window, the little attached window doesn't move. But if you move the attached window, it all works. Needs a special definition. Shaping doesn't work either") (* (MODERNWINDOW.SETUP 'ONEDINSPECT.BUTTONEVENTFN)) (MODERNWINDOW.SETUP 'ICMLARRAY.TITLECOMMANDFN) (* ;; "Freemenu") (MODERNWINDOW.SETUP '\FM.BUTTONEVENTFN) (* ;; "SEDIT") (MODERNWINDOW.SETUP 'SEDIT::BUTTONEVENTFN) (* ;; "Debugger") (MODERNWINDOW.SETUP 'DBG::DEBUGGER-BUTTON-EVENT) (* ;; "Snap") (MODERNWINDOW.SETUP 'SNAPW 'MODERN-SNAPW) (* ;; "New execs") (MODERNWINDOW.SETUP 'ADD-EXEC 'MODERN-ADD-EXEC) (* ;; "Existing exec of the load") (MODERNWINDOW (PROCESSPROP (TTY.PROCESS) 'WINDOW)) (* ;; "Table browser (for filebrowser)") (MODERNWINDOW.SETUP 'TB.BUTTONEVENTFN) (* ;; "Grapher") (MODERNWINDOW.SETUP 'APPLYTOSELECTEDNODE) (* ;; "Promptwindow") (MODERNWINDOW PROMPTWINDOW T] (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA MODERN-ADD-EXEC]) (* ;; "Externals") (DEFINEQ (MODERNWINDOW [LAMBDA (WINDOW ANYWHERE) (* ; "Edited 22-Feb-2021 16:44 by rmk:") (* ;; "This can be applied to windows that have been created with an unknown or unmodifiable buttoneventfn.") (CL:UNLESS (WINDOWPROP WINDOW 'PREMODERN-BUTTONEVENTFN) (WINDOWPROP WINDOW 'PREMODERN-BUTTONEVENTFN (WINDOWPROP WINDOW 'BUTTONEVENTFN)) (WINDOWPROP WINDOW 'BUTTONEVENTFN (IF ANYWHERE THEN (FUNCTION MODERNWINDOW.BUTTONEVENTFN.ANYWHERE) ELSE (FUNCTION MODERNWINDOW.BUTTONEVENTFN)))) WINDOW]) (MODERNWINDOW.SETUP [LAMBDA (ORIGFN MODERNWINDOWFN ANYWHERE) (* ; "Edited 22-Feb-2021 16:42 by rmk:") (* ;; "ORIGFN is either a function that creates windows of a given type (e.g. SNAPW or ADD-EXEC) or the known BUTTONEVENTFN of a class of windows.") (* ;; "Moves ORIGNFN to a new name, prefixed with MODERNORIG-.") (* ;; "If MODERNWINDOWFN is given, then that replaces the original definition of ORIGFN, and presumably knows how to call the renamed ORIGFN under the right circumstances. This is typically the case where ORIGFN is a window creator.") (* ;; "Otherwise, ORIGFN is taken to be the BUTTONEVENTFN for a class of windows, and its new definition is defaulted to one that maps left-clicks in appropriate areas into modern window operations. If not in appropriate areas, then the renamed ORIGNFN is called to give the original button behavior.") (* ;; "If ANYWHERE, moving will happen for any click not in one of the shaping corners.") (* ;; "The renamed function has arguments in addition to WINDOW: the new name for the original function, if MODERNWINDOFN is provided, and the value specified here for ANYWHERE.") (LET [RENAMEDORIG (PKGNAME (CL:PACKAGE-NAME (CL:SYMBOL-PACKAGE ORIGFN] (* ;; "The renamed version of XCL symbols go into Interlisp, so there is less confusion about accessing it") (CL:WHEN (STREQUAL PKGNAME "XEROX-COMMON-LISP") (SETQ PKGNAME "INTERLISP")) (SETQ RENAMEDORIG (CL:INTERN (CONCAT 'MODERN-ORIG- ORIGFN) PKGNAME)) (MOVD? ORIGFN RENAMEDORIG) (IF MODERNWINDOWFN THEN (MOVD MODERNWINDOWFN ORIGFN) ELSE (PUTD ORIGFN `(LAMBDA (WINDOW) (MODERNWINDOW.BUTTONEVENTFN WINDOW (FUNCTION ,RENAMEDORIG) ,ANYWHERE]) (UNMODERNWINDOW [LAMBDA (WINDOW) (* ; "Edited 22-Feb-2021 16:44 by rmk:") (* ;; "Restores original window behavior") (CL:WHEN (WINDOWPROP WINDOW 'PREMODERN-BUTTONEVENTFN) (WINDOWPROP WINDOW 'BUTTONEVENTFN (WINDOWPROP WINDOW 'PREMODERN-BUTTONEVENTFN)) (WINDOWPROP WINDOW 'PREMODERN-BUTTONEVENTFN NIL)) WINDOW]) (MODERNWINDOW.UNSETUP [LAMBDA (ORIGFN) (* ; "Edited 22-Feb-2021 16:45 by rmk:") (* ; "Edited 24-Jun-2020 15:09 by rmk:") (* ;; "Moves the renamed original function back to its original name") (LET [RENAMEDORIG (PKGNAME (CL:PACKAGE-NAME (CL:SYMBOL-PACKAGE ORIGFN] (* ;; "The renamed version of XCL symbols go into Interlisp, so there is less confusion about accessing it") (CL:WHEN (STREQUAL PKGNAME "XEROX-COMMON-LISP") (SETQ PKGNAME "INTERLISP")) (SETQ RENAMEDORIG (CL:INTERN (CONCAT 'MODERN-ORIG- ORIGFN) PKGNAME)) (CL:WHEN (GETD RENAMEDORIG) (MOVD RENAMEDORIG ORIGFN]) ) (RPAQ? MODERN-WINDOW-MARGIN 25) (* ;; "Internals") (DEFINEQ (MODERNWINDOW.BUTTONEVENTFN [LAMBDA (WINDOW ORIGFUNCTION ANYWHERE) (* ; "Edited 22-Feb-2021 16:44 by rmk:") (IF (AND (MOUSESTATE (ONLY LEFT)) (EQ LASTKEYBOARD 0)) THEN (TOTOPW WINDOW) (LET [CORNER TOPMARGIN (MAINREGION (WINDOWPROP WINDOW 'REGION)) (ATTACHEDREGION (WINDOWREGION WINDOW 'SHAPEW] (* ;; "If the window has a TOPMARGIN property, that tells us that it does not have a canonical title but may still have a title-like attached window just above the main window. The TOPMARGIN should be 0 in that case.") (* ;; "This is particularly the case of FILEBROWSER windows, where the the modified ATTACHEDWINDOWTOTOPFN drives the click here. ") (SETQ TOPMARGIN (IF (WINDOWPROP WINDOW 'TOPMARGIN) ELSEIF (WINDOWPROP WINDOW 'TITLE) THEN (FONTPROP WindowTitleDisplayStream 'HEIGHT) ELSE MODERN-WINDOW-MARGIN)) (SETQ CORNER (INCORNER.REGION MAINREGION TOPMARGIN)) (IF CORNER THEN (* ;;  "The upper corners may be in the title bar, near the side, so test corners before titlebar.") (* ;; "We are in the corner of the main window, so we are reshaping. But the ghost region should include all of the attached windows, and the starting cursor should be positioned at the corner closest to the selected corner of the main window.") (* ;; "WINDOWREGION includes the attached windows") (LET ((LEFT (FETCH LEFT OF ATTACHEDREGION)) (RIGHT (FETCH RIGHT OF ATTACHEDREGION)) (TOP (FETCH TOP OF ATTACHEDREGION)) (BOTTOM (FETCH BOTTOM OF ATTACHEDREGION)) STARTINGREGION) (* ;; "\CURSORPOSITION moves the mouse to the tracking corner of the ghost region, in screen coordinates, so that the mouse starts out at the tracking corner of the ghost region, even if there are attached windows (as in the filebrowser) that overhang the corner and the initiating click was at the corner of the mainwindow.") (CL:UNLESS (EQ 'DON'T (WINDOWPROP WINDOW 'RESHAPEFN)) [SETQ STARTINGREGION (GETREGION NIL NIL NIL NIL NIL (SELECTQ CORNER (RIGHTBOTTOM (\CURSORPOSITION RIGHT BOTTOM) (GETMOUSESTATE) (LIST LEFT TOP RIGHT BOTTOM)) (LEFTBOTTOM (\CURSORPOSITION LEFT BOTTOM) (GETMOUSESTATE) (LIST RIGHT TOP LEFT BOTTOM)) (RIGHTTOP (\CURSORPOSITION RIGHT TOP) (GETMOUSESTATE) (LIST LEFT BOTTOM RIGHT TOP)) (LEFTTOP (\CURSORPOSITION LEFT TOP) (GETMOUSESTATE) (LIST RIGHT BOTTOM LEFT TOP)) (SHOULDNT]) (SHAPEW WINDOW STARTINGREGION)) T ELSEIF (OR ANYWHERE (NEARTOP MAINREGION TOPMARGIN)) THEN (NEARESTCORNER ATTACHEDREGION) (MOVEW WINDOW) T ELSEIF [OR ORIGFUNCTION (SETQ ORIGFUNCTION (WINDOWPROP WINDOW 'PREMODERN-BUTTONEVENTFN] THEN (APPLY* ORIGFUNCTION WINDOW))) ELSEIF [OR ORIGFUNCTION (SETQ ORIGFUNCTION (WINDOWPROP WINDOW 'PREMODERN-BUTTONEVENTFN] THEN (APPLY* ORIGFUNCTION WINDOW]) (MODERNWINDOW.BUTTONEVENTFN.ANYWHERE [LAMBDA (WINDOW) (* ; "Edited 22-Feb-2021 16:31 by rmk:") (* ; "Edited 24-Jun-2020 13:24 by rmk:") (* ;; "Move if left-click anywhere, not just titlebar") (MODERNWINDOW.BUTTONEVENTFN WINDOW NIL T]) (NEARTOP [LAMBDA (MAINREGION TOPMARGIN) (* ; "Edited 12-Feb-2021 23:19 by rmk:") (* ;; "True if the MOUSEY is near the top of MAINREGION. That means in the title bar for titled windows, otherwise a short distance below the top of the window. (Could be in the border?)") (IGREATERP LASTMOUSEY (IDIFFERENCE (FETCH TOP OF MAINREGION) TOPMARGIN]) (NEARESTCORNER [LAMBDA (REGION) (* ; "Edited 14-Feb-2021 21:46 by rmk:") (* ;; "Moves the cursor to the corner of REGION that is closest to the current LASTMOUSEX AND LASTMOUSEY") (\CURSORPOSITION (CL:IF (ILESSP (IDIFFERENCE LASTMOUSEX (FETCH LEFT OF REGION)) (IDIFFERENCE (FETCH RIGHT OF REGION) LASTMOUSEX)) (FETCH LEFT OF REGION) (FETCH RIGHT OF REGION)) (CL:IF (ILESSP (IDIFFERENCE LASTMOUSEY (FETCH BOTTOM OF REGION)) (IDIFFERENCE (FETCH TOP OF REGION) LASTMOUSEY)) (FETCH BOTTOM OF REGION) (FETCH TOP OF REGION))]) (INCORNER.REGION [LAMBDA (MAINREGION TOPMARGIN) (* ; "Edited 22-Feb-2021 16:27 by rmk:") (* ;; "MAINREGION, LASTMOUSEX, LASTMOUSEY in screen coordinates.") (* ;; "TOPMARGIN is the height of the titlebar for titled windows, otherwise the margin at the top of the window's content that we regard as the top. ") (IF (ILEQ (IABS (IDIFFERENCE LASTMOUSEX (FETCH LEFT OF MAINREGION))) MODERN-WINDOW-MARGIN) THEN (IF (NEARTOP MAINREGION TOPMARGIN) THEN 'LEFTTOP ELSEIF (ILEQ LASTMOUSEY (IPLUS MODERN-WINDOW-MARGIN (FETCH BOTTOM OF MAINREGION))) THEN 'LEFTBOTTOM) ELSEIF (ILEQ (IABS (IDIFFERENCE LASTMOUSEX (FETCH RIGHT OF MAINREGION))) MODERN-WINDOW-MARGIN) THEN (IF (NEARTOP MAINREGION TOPMARGIN) THEN 'RIGHTTOP ELSEIF (ILEQ LASTMOUSEY (IPLUS MODERN-WINDOW-MARGIN (FETCH BOTTOM OF MAINREGION))) THEN 'RIGHTBOTTOM]) ) (* ;; "Behavior for some known window creators") (DEFINEQ (MODERN-ADD-EXEC [LAMBDA U (* ; "Edited 22-Feb-2021 16:41 by rmk:") (LET [(PROC (APPLY (FUNCTION MODERN-ORIG-ADD-EXEC) (FOR N FROM 1 TO U COLLECT (ARG U N] (* ;; "For some reason, the window may not be there immediately") (DISMISS 100) (MODERNWINDOW (PROCESSPROP PROC 'WINDOW)) PROC]) (MODERN-SNAPW [LAMBDA NIL (* ; "Edited 22-Feb-2021 16:41 by rmk:") (* ;; "No point in shaping a snap window, just move it.;;") (* ;; "This changes the creation function (SNAPW), since snap windows otherwise don't have a BUTTONEVENTN") (LET ((W (MODERN-ORIG-SNAPW))) [WINDOWPROP W 'BUTTONEVENTFN (FUNCTION (LAMBDA (W) (TOTOPW W) (MOVEW W] W]) (TOTOPW.MODERNIZE [LAMBDA (WINDOW) (* ; "Edited 22-Feb-2021 16:31 by rmk:") (* ;; "This replaces the TOTOPW BUTTONEVENTFN on an attached window where the click is then directed to the MAINWINDOW.") (TOTOPW WINDOW) (LET ((MAIN (MAINWINDOW WINDOW T))) (CL:WHEN MAIN (MODERNWINDOW.BUTTONEVENTFN MAIN (WINDOWPROP MAIN 'BUTTONEVENTFN)))]) ) (* ;; "Add some Meta commands") (DEFINEQ (TEDIT.MODERNIZE [LAMBDA NIL (* ; "Edited 22-Feb-2021 16:28 by rmk:") (CL:WHEN (GETD '\TEDIT.BUTTONEVENTFN) (MODERNWINDOW.SETUP '\TEDIT.BUTTONEVENTFN) (* ;; "All") (TEDIT.SETFUNCTION (CHARCODE "1,a") (FUNCTION TEDIT.SELECTALL) TEDIT.READTABLE) (TEDIT.SETFUNCTION (CHARCODE "1,A") (FUNCTION TEDIT.SELECTALL) TEDIT.READTABLE) (* ;; "Quit") (TEDIT.SETFUNCTION (CHARCODE "1,q") (FUNCTION TEDIT.QUIT) TEDIT.READTABLE) (TEDIT.SETFUNCTION (CHARCODE "1,Q") (FUNCTION TEDIT.QUIT) TEDIT.READTABLE))]) (TEDIT.SELECTALL [LAMBDA (STREAM TEXTOBJ SEL) (* ; "Edited 3-May-2020 17:29 by rmk:") (LET [(TEXTSTREAM (TEXTSTREAM (TTY.PROCESS] (CL:WHEN TEXTSTREAM (TEDIT.SETSEL TEXTSTREAM 0 (ADD1 (fetch TEXTLEN of (TEXTOBJ TEXTSTREAM))) 'LEFT))]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (TEDIT.MODERNIZE) (* ;; "Inspector") (MODERNWINDOW.SETUP '\ITEM.WINDOW.BUTTON.HANDLER) (* ;; "Commonlisp array inspector. If you move the main window, the little attached window doesn't move. But if you move the attached window, it all works. Needs a special definition. Shaping doesn't work either") (* (MODERNWINDOW.SETUP  (QUOTE ONEDINSPECT.BUTTONEVENTFN))) (MODERNWINDOW.SETUP 'ICMLARRAY.TITLECOMMANDFN) (* ;; "Freemenu") (MODERNWINDOW.SETUP '\FM.BUTTONEVENTFN) (* ;; "SEDIT") (MODERNWINDOW.SETUP 'SEDIT::BUTTONEVENTFN) (* ;; "Debugger") (MODERNWINDOW.SETUP 'DBG::DEBUGGER-BUTTON-EVENT) (* ;; "Snap") (MODERNWINDOW.SETUP 'SNAPW 'MODERN-SNAPW) (* ;; "New execs") (MODERNWINDOW.SETUP 'ADD-EXEC 'MODERN-ADD-EXEC) (* ;; "Existing exec of the load") (MODERNWINDOW (PROCESSPROP (TTY.PROCESS) 'WINDOW)) (* ;; "Table browser (for filebrowser)") (MODERNWINDOW.SETUP 'TB.BUTTONEVENTFN) (* ;; "Grapher") (MODERNWINDOW.SETUP 'APPLYTOSELECTEDNODE) (* ;; "Promptwindow") (MODERNWINDOW PROMPTWINDOW T) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA MODERN-ADD-EXEC) ) (DECLARE%: DONTCOPY (FILEMAP (NIL (4575 8401 (MODERNWINDOW 4585 . 5243) (MODERNWINDOW.SETUP 5245 . 7189) (UNMODERNWINDOW 7191 . 7585) (MODERNWINDOW.UNSETUP 7587 . 8399)) (8466 16070 (MODERNWINDOW.BUTTONEVENTFN 8476 . 13078) (MODERNWINDOW.BUTTONEVENTFN.ANYWHERE 13080 . 13451) (NEARTOP 13453 . 13889) (NEARESTCORNER 13891 . 14770) (INCORNER.REGION 14772 . 16068)) (16128 17546 (MODERN-ADD-EXEC 16138 . 16569) (MODERN-SNAPW 16571 . 17114) (TOTOPW.MODERNIZE 17116 . 17544)) (17587 18670 (TEDIT.MODERNIZE 17597 . 18339) ( TEDIT.SELECTALL 18341 . 18668))))) STOP \ No newline at end of file diff --git a/lispusers/MODERNIZE.LCOM b/lispusers/MODERNIZE.LCOM new file mode 100644 index 0000000000000000000000000000000000000000..dd9ee7b19a9fe657b7ca48bee61fe80eb830cebd GIT binary patch literal 7748 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 IyLmI=e>mHm-~a#s literal 0 HcmV?d00001 diff --git a/lispusers/MODERNIZE.TXT b/lispusers/MODERNIZE.TXT new file mode 100644 index 00000000..50138230 --- /dev/null +++ b/lispusers/MODERNIZE.TXT @@ -0,0 +1,76 @@ +MODERNIZE documentation + + Ron Kaplan, February 2021 + +[A renaming of an earlier MACINTERFACE package] + +MODERNIZE is a simple Lispusers package that changes the mouse actions on Medley windows so that moving and shaping can be done in a way that approximates the behavior of windows on modern platforms, Mac, Windows, etc. It also adds some meta keys to also emulate more conventional behavior. + +Thus, for a window that has been created or transformed in this way, you can move the window by left-clicking in the title bar and dragging the window's ghost region. Or you can reshape by clicking in a corner of the title bar or near the bottom of the window to drag out the ghost region by that corner. + +The menu behavior for other buttons or buttons clicked in other positions is unchanged. + + +For bottom corners, "near" means inside the window within MODERN-WINDOW-MARGIN (initially 25) pixels above or to the left/right of the corner. + +For top corners, "near" means within the title bar and within the margin from the left/right edges. + +(Windows that don't have a title-bar, like Snap windows, can be set up so that moving can happen by clicking anywhere, and shaping at the top is determined by the margin inside the window region.) + +When the package is loaded, this behavior is installed for the following kinds of windows: + + Tedit + Debugger/break + Sedit + Inspector + Snap + Exec + File Browser + Grapher + +The function MODERNWINDOW.SETUP establishes the new behavior for classes of windows: + +(MODERNWINDOW.SETUP ORIGFN MODERNWINDOWFN ANYWHERE) + +ORIGFN is either the name of the BUTTONEVENTFN for a class of windows (e.g. \TEDIT.BUTTONEVENTFN for Tedit windows) or it is a function that creates windows of a particulate kind (e.g. SNAPW or ADD-EXEC). + +MODERNWINDOW.SETUP moves the definition of ORIGFN to the name (PACK* 'MODERN-ORIG- ORIGFN), and then provides a new definition for ORIGFN that does the moving or reshaping for clicks in the triggering locations, and otherwise passes control through to the original definition. + +If ORIGNFN is a button event function, then MODERNWINDOWFN should not be specified. In that case a new definition for ORIGFN is constructed to provide the desired windowing behavior. + +Otherwise, if ORIGFN is the function that creates windows of a class (e.g. SNAPW), then a MODERNWINDOWFN should be provided to create such windows (by calling (PACK* MODERN-ORIG- ORIGFN)). The definition of MODERNWINDOWFN replaces the original definition of ORIGFN. + +If the flag ANYWHERE is non-NIL, especially for windows without a title bar, then the moving behavior is triggered by a click anywhere in the window (except the corners). + +Because this works by redefining existing functions, it is important that the MODERNIZE package be loaded AFTER Tedit and Sedit, if those are not already in the sysout. And it should be called to upgrade the proper functions for other window classes that might later be added. + +Provided these capabilities are already loaded, the following window classes are "modernized" when MODERNIZE is loaded are: + + TEDIT + SEDIT + INSPECTOR + SNAP + DEBUGGER + EXEC + TABLEBROWSER + FILEBROWSER + FREEMENU + GRAPHER + PROMPTWINDOW + +If it is not known or it is inconvenient to systematically upgrade a button function or a window-creation function, the new behavior can be provided after a particular window has been created, by invoking + +(MODERNWINDOW WINDOW ANYWHERE) + +This saves the windows existing BUTTONEVENTFN as a window property PREMODERN-BUTTONEVENTFN, and installs a simple stub function in its place. + +If things go awry: + +(UNMODERN.SETUP ORIGFN) is provided to restore the original behavior for windows whose buttonevent function is ORIGIN. + +(UNMODERNWINDOW WINDOW) restores a modernized window (via MACWINDOW) to its original state. + +Known issue: Clicking at the bottom-right corner of Tedit windows sometimes doesn't catch the new behavior--there seems to be a conflict with Tedit's window-splitting conventions. Clicking a little further into the window seems more reliable. + + +