SYSTEM-ACCESS These files alter the way the System Menu and System-keys interact with the systems on the Explorer. This code changes the whole purpose and functionality of a few functions related to the System Menu and the system-keys and alters the DEFSYSTEMs of every system on the System Menu -- beware: this could cause problems for those who alter the defsystems of any such software. Below I document the new capabilities you will find by loading these files, the many changes you as a programmer should be aware of, and how to load and use this code. NEW CAPABILITIES ---------------- THE SYSTEM MENU: Notice in the mouse documentation line that you now have two choices when selecting a system. Pressing left will act like pressing SYSTEM-, whereas pressing middle will act like pressing SYSTEM-CONTROL-. The former will find an instance of the system, and the latter will create a new instance. You will be able to add systems to the menu, take systems off of it, and change the column in which systems appear (see below, PROFILE). You can even go so far as to add systems to the menu that haven't been loaded yet -- they will be loaded automatically if you select them. THE SYSTEM-KEYS: You will be able to assign system keys to any available systems, including systems not yet loaded. Almost any keystroke can be used for a system key. Only the following cannot be used: , , , ‘, †, ?, and CONTROL-characters (META, HYPER, and SUPER can all be used; CONTROL means to create). SYSTEM-† will look a little different. In addition to the format, the documentation strings will be identical to the mouse-documentation strings used for the System Menu. Both SYSTEM-† and the System Menu now get their doc-strings from the systems' defsystems. PROFILE: Under "Important Variables" there is now a variable W:*SYSTEM-ACCESS- SPECS* whose value is written as simply "System Access Menu". Selecting this will bring up a menu of all currently available systems, their print-names, and the system menu column and system-key from which each is accessible. Each field starts with the default values from the defsystems. Each field can be edited and the new settings saved through Profile (beware if you decide to store options through Profile -- you must load these files before loading your login-init; see below). At any time you can abort your changes (via ‘ or the "Abort" margin-choice) or accept your changes (via ” or the "Do It" margin- choice). There is also one other margin-choice: "Update" which will look on SYS:SITE; for systems that you can load and add them to your menu of available systems. Before doing this it must first either save or abort any changes you may have already made and will ask you which you want done. Note that since this has been set up as a Profile variable, you can at any time ask to restore either the system defaults or the user defaults originally loaded from your login-init. This is done via the margin choices provided by Profile. OTHER: A few other useful functions are provided simply because I needed them: POP-UP-EDIT-STRING (STRING &KEY ...) puts up STRING in a small pop-up window and allows the user to edit it. It prevents the user from making the string too long or inserting "illegal" characters (you specify). The user has several editing capabilities, as well as the ability to ‘, returning the original string, or ”, returning the new string. READ-CHAR-WHILE (WINDOW &REST STATUS-LIST) READ-ANY-WHILE (WINDOW &REST STATUS-LIST) are very useful for people creating their own pop-up type windows or menus. Instead of locking up like READ-CHAR or READ-ANY if the window is deexposed, these functions return NIL. STATUS-LIST is a list of the window statuses in which it should continue waiting for input. If the window ceases to be in one of these states, this function will quit waiting for input and return NIL. WARNINGS -------- DEFSYSTEMs: I redefine the DEFSYSTEMs of every system on the System Menu. If you do anything with these DEFSYSTEMs we may clobber each other. Further, if you are defining your own system that you want to access from either the system menu or system-keys, you need to add some keywords to your DEFSYSTEM: :DOCUMENTATION, :DEFAULT-MENU-COLUMN, :DEFAULT-SYSTEM-KEY, :INSTANCE-TYPE, :INSTANCE-FINDER, and :INSTANCE-CREATOR. ADD-SYSTEM-KEY and ADD-TO-SYSTEM-MENU-COLUMN These functions are obsolete, but will act as they did previously. However, if you use these functions (or if you use a system that does), the assignments will not be editable via this facility. If you want a system to put itself on the system menu or system-keys, you should use MODIFY-SYSTEM-ACCESS-SPECS. THIS IS NOT A PATCH Because I would be patching so much, this has not yet been made a patch, therefore if you have problems while using a function I have edited or written, META-. may not help. Therefore, for reference (if problems occur or you're trying to do something) I have listed the functions I wrote or changed at the end of this file. USING THIS CODE --------------- TO LOAD IT: Simply (load "sys:public.system-access;system-access.lisp"). This file will load all of the others. IF YOU "STORE OPTIONS" IN PROFILE: The above file must be loaded before you load your login-init and you must login before you can load this file. You have two options: 1) (login 'name 'lm t) (load "sys:public.system-access;system-access.lisp") (login 'name 'lm) 2) Put the load form above into your login-init BEFORE Profile's PROGN. If you later have problems and want to quit using this software, go into your login-init and remove the profile-setq form for the W:*SYSTEM-ACCESS-SPECS* variable. Also remove the load form if you opted for option two above. NOTE: This file and these instructions assume SYS = MR-X. BORING, DO NOT READ ------------------- If you have problems with any of the following, its my function: (P = PROFILE:, SYS = SYS:, OTHERWISE W:) SYS *ACCESS-PROPERTIES* P *ACCESS-SPECS-BUF* ADD-OBSOLETE-SYSTEM-MENU-ENTRIES (New) ADD-SYSTEM-ACCESS-SPEC (New) ADD-TO-SITE-CONTENTS (New) ADD-TO-SYSTEM-KEYS (New) ADD-TO-SYSTEM-MENU (New) ADD-TO-SYSTEM-MENU-COLUMN ADD-TO-SYSTEM-MENU-WINDOWS-COLUMN ADD-SYSTEM-KEY ANY-SYSTEM-KEY-CHAR SYS CREATE-SYSTEM-INSTANCE (New) P CVV-CALL-SAM (New) SYS DEFSYSTEM SYS DEFSYSTEM-1 DELETE-FROM-SYSTEM-MENU-COLUMN P EDIT-COLUMN (New) P EDIT-KEY (New) P EDIT-NAME (New) FIND-SYSTEM-KEY (New) P GET-NEW-COLUMN (New) P GET-NEW-KEY (New) P GET-NEW-NAME (New) SYS GET-SYSTEM-ACCESS-LIST SYS FIND-SYSTEM-INSTANCE (New) SYS FIND-SYSTEM-NAMED KBD-SYS KBD-SYS-1 KBD-SYS-HELP MAKE-NEW-SITE-CONTENTS (New) P MAKE-SAM-ROOT (New) P MAKE-SAM-WINDOW (New) MAKE-SITE-CONTENTS (New) SYS MAKE-SYSTEM MODIFY-SYSTEM-ACCESS-SPEC (New) SYS NOTIFY-CANNOT-CREATE (New) OBSOLETE-ADD-TO-SYSTEM-MENU-COLUMN (New) OBSOLETE-KBD-SYS-1 (New) *OBSOLETE-SYSTEM-KEYS* (New) P OBSOLETE-SYSTEM-KEYS-LIST-ITEM (New) *OBSOLETE-SYSTEM-MENU-COLUMN* (New) POP-UP-EDIT-STRING (New) POP-UP-LINE-INPUT-WINDOW (New) POP-UP-PROMPT-AND-READ-CHAR (New) P PRINT-ACCESSIBLE-SYSTEMS (New) PURGE-SYSTEM-ACCESS-SPECS (New) READ-ANY-WHILE (New) READ-CHAR-WHILE (New) READ-FROM-SITE-CONTENTS (New) READ-SITE-CONTENTS (New) REMOVE-FROM-SYSTEM-KEYS (New) REMOVE-FROM-SYSTEM-MENU (New) REMOVE-SYSTEM-ACCESS-SPEC (New) REMOVE-SYSTEM-KEY S-A-SPEC->SCROLL-ITEM (New) P SAM-WINDOW (New) P SAM-WINDOW-FLAVOR (New) SYS SET-SYSTEM-ACCESS-LIST (New) SET-SYSTEM-ACCESS-SPECS (New) SYS SET-SYSTEM-MADE-P (New) *SITE-CONTENTS-PATHNAME* (New) *SYSTEM-ACCESS-SPECS* (New) P SYSTEM-ACCESS-MENU P SYSTEM-ACCESS-MENU-HANDLER *SYSTEM-KEYS* SYS SYSTEM-MADE-P (New) UPDATE-SYSTEM-ACCESS-SPECS (New) P VERIFY-THAT-SYSTEM-IS-LOADED (New)