;;;> ;;;> ***************************************************************************************** ;;;> ** (c) Copyright 1993-1991 Symbolics, Inc. All rights reserved. ;;;> ** Portions of font library Copyright (c) 1984 Bitstream, Inc. All Rights Reserved. ;;;> ;;;> The software, data, and information contained herein are proprietary ;;;> to, and comprise valuable trade secrets of, Symbolics, Inc., which intends ;;;> to keep such software, data, and information confidential and to preserve ;;;> them as trade secrets. They are given in confidence by Symbolics pursuant ;;;> to a written license agreement, and may be used, copied, transmitted, and ;;;> stored only in accordance with the terms of such license. ;;;> ;;;> Symbolics, Symbolics 3600, Symbolics 3670 (R), Symbolics 3675 (R), Symbolics ;;;> 3630, Symbolics 3640, Symbolics 3645 (R), Symbolics 3650 (R), Symbolics 3653, ;;;> Symbolics 3620 (R), Symbolics 3610 (R), Symbolics Common Lisp (R), ;;;> Symbolics-Lisp (R), Zetalisp (R), Genera (R), Wheels (R), Dynamic Windows (R), ;;;> SmartStore (R), Semanticue (R), Frame-Up (R), Firewall (R), Document Examiner (R), ;;;> Delivery Document Examiner, "Your Next Step in Computing" (R), Ivory, MacIvory, ;;;> MacIvory model 1, MacIvory model 2, MacIvory model 3, XL400, XL1200, XL1201, ;;;> Symbolics UX400S, Symbolics UX1200S, NXP1000, Symbolics C, Symbolics Pascal (R), ;;;> Symbolics Prolog, Symbolics Fortran (R), CLOE (R), CLOE Application Generator, ;;;> CLOE Developer, CLOE Runtime, Common Lisp Developer, Symbolics Concordia, Joshua, ;;;> Statice (R), and Minima are trademarks of Symbolics, Inc. ;;;> ;;;> RESTRICTED RIGHTS LEGEND ;;;> Use, duplication, and disclosure by the Government are subject to restrictions ;;;> as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data and Computer ;;;> Software Clause at DFAR 52.227-7013. ;;;> ;;;> Symbolics, Inc. ;;;> 6 Concord Farms ;;;> 555 Virginia Road ;;;> Concord, Massachusetts 01742-2727 ;;;> United States of America ;;;> 508-287-1000 ;;;> ;;;> ***************************************************************************************** ;;;> The function time:parse-universal-time accepts many fascinating variations of time specifications. For example: (time:parse-universal-time "ten minutes from now") (time:parse-universal-time "my birthday") (The second example works if your birthday is in the namespace database.)  In Zmacs, m-X Edit Zmacs Command finds the source for any Zmacs command.  Set Screen Options customizes many status line features. But not all! To remove the square brackets around the time in the status line: (setq tv:*wholine-clock-delimiters* nil)  Compiled Lisp runs much faster than interpreted Lisp and is just as easy to debug. Always compile your buffers.  When writing Lisp code, be careful not to modify quoted list structure with rplaca, rplacd, or setf. That quoted list structure is a permanent part of your program; changing it will permanently change your program and might even cause an error. Use copy-list or copy-tree to make a new copy of the list before modifying it.  In Document Examiner, use the Show Candidates command just as you would look in the index of a book.  Wishing for new functionality? Explore screens with your mouse, watching for mouse-sensitive boxes. Keep an eye on the mouse documentation line. You may be surprised.  Programs (or init files) can "execute" CP commands by using cp:execute-command. For example: (cp:execute-command "Show file" "P:>project>plans.text")  For any command processor command, m-COMPLETE brings up a form with all its arguments and options to fill in.  When the cursor is on or after a function name, c-sh-A shows the argument list for the function.  When the cursor is on or after a function name, m-sh-A shows all the documentation for the function.  If your display is messed up, FUNCTION REFRESH often straightens it out.  The CP command Create FEP File is useful for creating new paging files when you are getting low on address space.  Did you know you can put keywords on Zmail messages?  In Zmacs or any dynamic window, you can click m-Left on a definition name in order to edit it.  In Document Examiner, try Show Candidates with the word help as an argument to find out about all the documentation on finding help.  In Zmacs, c-m-L selects the previously selected buffer. In Zmail, c-m-L selects the previous mail collection. In Document Examiner, c-m-L selects the previous viewer.  c-m-sh-Y searches through your command history for commands containing some string of characters.  Logging out reminds you if you have forgotten to save some files.  Never assume that your environment is really intact after warm-booting. It is most prudent to save your files and mail, then cold-boot.  Do you like black on white or white on black for your screen? Use the Set Screen Options command in the CP or try the variations on FUNCTION C (shown by FUNCTION HELP).  You can customize many Zmail settings and options. Click on [Profile] in the Zmail menu to explore the possibilities.  Prevent empty collections in Zmail by putting this in your init file: (setq zwei:*query-before-selecting-empty-sequence* t)  Ever wondered how to type special characters? SYMBOL-HELP shows a chart of all of them.  Keep a FEP file of about 5000 pages called something like extra-tank.page. That way you always have an emergency source of pages if you are running out of address space.  If you can remember part of a CP command name, type in the part you remember, then press c-/ to get a list of commands containing what you've typed.  You can resort a directory listing with various sort parameters. Position the mouse cursor over the listing and click s-sh-Middle.  In a dynamic window, you can use s-S and s-R to search for strings in the output history.  Search commands in dynamic windows can be terminated with ABORT, END, or c-G, which all have different effects.  In a dynamic window, you can mark a region of the screen with c-Left and then copy it to the kill ring with m-W.  Press LOCAL-B and LOCAL-D to brighten and dim your console's screen.  Press LOCAL-L and LOCAL-Q to make your console's volume louder and quieter.  LOCAL-1 LOCAL-C through LOCAL-4 LOCAL-C change the contrast on your console.  You can customize various aspects of how your screen looks. Set Screen Options gives you a menu of options.  The Command Processor prompt is kept in the variable si:*cp-prompt*. Its value can be either a string or a function that draws some icon. For example: (setq si:*cp-prompt* 'si:arrow-prompt)  Zmail can indent the messages that you forward. Use the profile option called "Indent text of forwarded messages".  In the CP, command names in a help display are mouse-sensitive. Clicking middle on a name in the display shows the documentation for the command.  Did you see a HackSaw you liked? The Find Hacksaw command can find it again. Give it a word or words that might be in the HackSaw. Example: Find HackSaw zmacs, CP  Use the Show Hacksaw command to learn interesting hints about using the system.  You can enable autorepeat for all keys on the keyboard: (setf si:*kbd-auto-repeat-enabled-p* t) Look at its documentation for more options.  The COMPLETE key can be used to complete pathnames in commands, even pathnames for FEP files.  You don't need to abort a command if you can't quite remember a pathname. Just use c-/ or c-? to ask for help.  When you're being prompted for a pathname, press c-? to get a directory listing of everything that matches what you've typed so far. You can type a pathname with wildcards (*) in it, press c-? to see what matches, and then rubout the wildcards and type the whole pathname, or click on what c-? typed out.  You can use tv:unexpected-select-delay and tv:*notification-deliver-timeout* to customize notifications by changing the time before the notification pops up.  You can customize the appearance of the prompt strings within CP commands. For example: (setf si:*noise-string-character-style* (si:parse-character-style '(nil :italic nil)))  The clock in the status line can be customized in ways beyond what Set Screen Options provides: tv:*wholine-clock-delimiters*: nil No delimiters around time T [] around the time 0 spaces around the time tv:*wholine-clock-24hour-p*: T 24 hour time nil 12 hour time  Usually, a process has to wait until its window is exposed in order to display output on it. You can change this manually with FUNCTION 4 T or FUNCTION 5 T, or by using Lisp: (send D,#TD1PsT[Begin using 006 escapes](1 0 (NIL 0) (NIL :ITALIC NIL) "CPTFONTI")window0 :set-deexposed-typeout-action :permit)  You can create a new copy of an activity by using the CONTROL key when you select it. For example, to create a new editor, press SELECT c-E.  You can debug by running code that is conditional on the position of the mode-lock key. For example: (dbg:when-mode-lock (break))  In Zmacs, m-\ closes up any whitespace surrounding the cursor.  In Zmacs, you can get smart indenting of the current line with the TAB key. The indenting used depends on the editing mode.  In Zmacs, use c-TAB to get different indenting of the current line. It cycles through a set of plausible places to put the beginning of the line.  In Zmacs, use LINE at the end of a line instead of RETURN to get smart indentation while entering Lisp code.  In Zmacs, use c-m-Q to get smart indenting of whole Lisp forms while entering code in Lisp mode.  In Zmacs, use c-m-\ to reindent regions of code or text.  Create a new Lisp form, ready for typing, using the Zmacs command Make (), usually bound to m-(. It creates a pair of delimiters, ready for typing between. It inserts the pair of delimiters that match the command it is bound to; m-< inserts balanced angle brackets for example.  Some word-oriented Zmacs commands (like m-C and m-J) do their work without moving the cursor when you call them with a negative argument.  Zmacs registers can store either buffer locations or text. c-X S A saves the current cursor location in register A. c-X J A jumps the cursor to the location saved in register A.  Zmacs registers can store either text or buffer locations. c-X X A saves the region in register A. c-X G A yanks back the saved text from register A.  In Zmacs, m-^ joins the current line to the end of the previous one, with appropriate whitespace.  If you have trouble reading a file into Zmacs, try reading it with m-X Find File In Fundamental Mode instead.  Using † C is a good way to explore Zmacs functionality.  You can use c-Q to insert things like CLEAR-INPUT in a Zmacs buffer.  To insert a lozenged character into a Zmacs buffer, use the write-char function. For example, the FUNCTION character: c-U m-X Evaluate into Buffer (write-char #\function)  Did you know about m-$ for correcting spelling errors in Zmacs?  Did you know about Word Abbrev Mode in Zmacs? Its documentation is in Document Examiner.  In Zmacs Lisp mode, you move the cursor to the beginning of a form with c-m-U or c-m-(. (This is the opposite of c-m-D.)  In Zmacs Lisp mode, you move the cursor down one level of list structure with c-m-D. (This is the opposite of c-m-U.)  In Zmacs Lisp mode, you move the cursor forward one level of list structure with c-m-). This is like c-m-(.  In Zmacs, you can "bring back" region marking with c-X c-X.  Press SELECT = to change SELECT key assignments.  In Zmacs two-window mode, you can scroll the "other" (non-selected) window forward and backward with c-m-V and c-m-sh-V.  In Zmail, you can scroll the summary window forward and backward with c-m-V and c-m-sh-V.  In Zmacs, you can install any editor command on the key of your choice for the current boot session. Use the m-X Set key command.  You can evaluate a Lisp form in a Zmacs buffer using c-sh-E.  You can compile a Lisp form in a Zmacs buffer using c-sh-C.  In Zmacs, you can protect the contents of sensitive files using Encrypt Buffer and Decrypt Buffer.  In Zmail, you can protect sensitive messages from unintended readers using Encrypt Message and Decrypt Message. Of course, you have to let the recipient know the encryption key so they can read it!  Zmacs provides string searching for patterns. Put the command Extended String Search on a handy key, like c-m-S, using the Set Key command. Then press c-m-S HELP c-H HELP to see how it works.  In Zmacs, m-X Edit CP Command finds the source for any CP command.  In Zmacs, m-X Occur gives you a mouse-sensitive list of all the lines in the rest of the buffer where a string occurs. Click on one of the lines to move the cursor to it.  The variable zwei:*mouse-click-always-selects* controls what happens when you click left on another editor window in Zmacs. Some people like to set this to T so that the cursor moves to where you clicked while selecting the window.  You can change the default mode for Zmacs buffers to Text mode with this form in your init file: (setf zwei:*default-major-mode* :text)  You can change the fill column used by Auto Fill Mode in Text Mode Zmacs buffers: zwei:(send (major-mode-from-keyword :text) :set-variable-value '*fill-column* 465)  You can make text mode buffers do line wrapping automatically while you are typing: (setf zwei:text-mode-hook 'zwei:auto-fill-if-appropriate)  You can have your init file preload mail files so they're waiting for you when you select Zmail in a new session. For example: (zwei:preload-zmail '(:edit-mail-file 1"host:>home-dir>mail-file"0))  In Zmacs, you can point at a piece of text (such as a word, a function name, or an expression) with the mouse and copy it to the cursor location by clicking c-Middle.  In the CP, your typing is handled by an input editor that uses a subset of Zmacs commands. Use c-HELP to see the input editor commands.  When you create a new Lisp mode buffer in Zmacs, use m-X Update Attribute List to see the package, syntax, and base that Zmacs will use as you edit in the buffer.  If you edit the attribute line in a file, none of the changes takes effect in the environment until you use m-X Reparse Attribute List.  Many Zmacs commands accept numeric arguments that alter their behavior in some way. You enter a numeric argument by holding down a modifier key (CONTROL, META, SUPER, or HYPER) while you type a number.  If you accidentally type a character at a Zmacs buffer, and don't know whether it had been modified previously, you can recover by pressing c-sh-U; the character(s) will go away and if the buffer had been unmodified it will stay that way.  In Zmacs, you can undo any commands that changed the buffer using c-sh-U and redo them again with c-sh-R.  Useful paragraph commands in Zmacs include m-[ and m-] (move the cursor to the beginning or end of paragraph) and m-H (mark paragraph).  Useful marking commands in Zmacs include c-m-H (mark definition), c-X H (mark buffer), and c-< and c-> (mark from the cursor to the beginning or end of the buffer).  In Zmacs, the m-X Print Modifications command shows all the lines in a buffer that have been changed. The lines are mouse-sensitive so you can easily move to a changed line.  In Zmacs, m-X List Changed Definitions Of Buffer shows the names of all the definitions in the buffer that have changed. The names are mouse-sensitive.  Some people like regions in Zmacs marked with reverse video instead of underlining: (setf zwei:*region-marking-mode* :reverse-video)  In any application based on a dynamic window, the ESCAPE key shows an input history for the window (mouse-sensitive, of course!)  Zmacs keeps a history of some recent cursor locations. c-0 c-SPACE displays that history, which is mouse-sensitive.  The Zmacs command Kill Backward Up List removes the expression around the current one. (Try binding it to an unused key.) Naturally, c-sh-U will undo the kill.  In Zmacs, you can clean up excess file versions with the Reap command. You can also protect specific older versions of a file against deletion by giving them a Dont-Reap property. (Use the $ command in m-X Dired.)  If you have a file that you want in your editor every time you log in, your init file can automatically read it in for you: (zwei:load-file-into-zmacs "home:>your-name>your-notes.text")  The Zmacs commands that set buffer attributes (like the package) normally ask if you want to change the attribute list. If you always want to answer "yes": (setf zwei:*set-attribute-updates-list* t) ; default is :ASK  m-H marks a paragraph in Zmacs. So m-H m-$ checks the spelling of a paragraph.  To help track down Chaosnet routing problems try this: (chaos:describe-route-to 'wombat)  Zmacs keeps a buffer selection history that you can access with c-0 c-m-L. The buffer names are mouse-sensitive.  You can find out what day of the week a particular date falls on, using a form like the following: (time:print-universal-date (time:parse-universal-time "January 1, 1989"))  In Zmacs, c-L with a numeric argument specifies where to put the line with the cursor. So c-0 c-L puts it at the top. Negative numbers count up from the bottom of the window. This interface is equivalent to using the scroll bar to reposition the window.  In typing LMFS pathnames, you can use "<" to mean "up a level" relative to the default. So if the default is dv:>a>b>foo.text, typing in specifies dv:>a>c>foo.text.  Zmail can automatically mark duplicate messages as deleted while it is processing new mail: (setf zwei:*insert-inbox-hooks* '(:delete-duplicates-new))  In Zmacs, c-X c-X always switches the cursor location with the last saved cursor location ("the mark"). Because regions use the mark, this means c-X c-X moves the cursor to the other end of the region.  FUNCTION S selects the most recently selected window. Use FUNCTION HELP to see other options for FUNCTION S.  In Zmacs, you can insert multiple copies of characters without counting because numeric arguments apply to ordinary characters. For example, c-2 c-0 SPACE inserts 20 spaces.  Completion saves keystrokes in many places. See the documentation on completion and try out the COMPLETE key when you are typing in commands and arguments.  Command name completion works automatically (without the COMPLETE key). Watch what happens as you type S S M to the Command Processor.  Even FEP commands use completion and pathname merging.  Clicking Right on a mouse-sensitive item brings up a menu of the possible operations on the item.  Most windows keep histories of commands. Use c-0 c-m-Y to see the whole mouse-sensitive history. Or use c-m-Y followed by m-Y to bring back previous commands.  Ever use m-Y once too often, going past the item you wanted? You can back it up by using the minus sign as an argument: m-- m-Y.  When you end up in the Cold Load Stream, nothing has been lost; the window system is just confused. Read the proceed options carefully. Usually they get you out of trouble (unless the problem is due to your own program).  If Lisp stops itself, use the Show Status command in the FEP to find out what happened. Even when you are back in Genera, you can find out what happened with the CP command Show Crash Data or the Zmacs command Insert Crash Data. This works as long as the FEP has not been reset since the crash.  In Zmacs, the Clean Directory command deletes excess file versions, keeping a specified number.  In Zmacs, c-U c-SPACE moves the cursor back to the last location that is being remembered in the location history.  In Zmail, the command Add File Reference Field adds a pathname to a message. That pathname (called "the referenced file") then serves as a default for file-related commands for the person reading the message. The names of referenced files are mouse-sensitive.  Normally your machine refuses remote-login requests when you are already logged in. You can enable remote-login by using net:remote-login-on. This means that you (or anyone else) can now log in to your machine from a terminal or another machine on the network.  Usually a pop-up notification disappears after 15 minutes. You can change how long the pop-up window stays exposed. For example: (setq tv:*notification-pop-down-delay* (* 60 (time:parse-interval-or-never "30 minutes")))  Zmacs can be smart about putting spaces around text that you yank back. This is particularly useful for word-oriented editing as it keeps words from running together. Put this in your init file: (setf zwei:*kill-interval-smarts* t)  In Zmacs, you can assign any command to a key, using the Set Key command.  Zmacs lets you define keyboard macros, which are collections of commands that Zmacs can replay to automate some kinds of editing. See the documentation on keyboard macros.  "Click left and hold" anywhere in a scroll bar scrolls through the following screens. "Click right and hold" anywhere in a scroll bar scrolls through the previous screens. Moving the mouse changes the scrolling speed.  When you need to scroll through text in a typeout window, it is sometimes easier to first use SUSPEND to select the typeout window.  In the CP, sometimes you have to use TAB instead of SPACE to finish one argument and move on to the next. This can happen, for example, with the Show Documentation command when a number of topics start the same way and SPACE would cause unwanted completion.  When the CP is prompting for keyword arguments, pressing m-COMPLETE gets you a menu showing all of the possible keyword arguments and their current values.  The variable *print-pretty* controls the format used for printing Lisp expressions. Some people find the value :data produces more readable displays than the default :code.  You can make your own permanent custom key assignments in Zmacs. A form in your init file does custom key assignments that go away on logout. For example: zwei:(set-comtab-return-undo *standard-comtab* '(#\c-m-S com-extended-search #\c-tab com-indent-differently))  Setting tv:mouse-double-click-time to nil disables double-clicking (shifted clicks work instead) and speeds up system response to all mouse clicks.  Some people find it more convenient to have scroll bars on the right than on the left. This goes in your init file: (dw::set-default-scroll-bar-margin :right)  You can get any process or function to direct its output to an editor buffer by using an editor stream. Example: (zwei:with-editor-stream (somewhere :buffer-name "example" :create-p t) (format somewhere "Message: ~A" "Hi there"))  You can scroll the typeout window that goes with a window without first selecting the typeout window. c-m-SCROLL makes the typeout window visible; c-SCROLL and c-m-SCROLL work as SCROLL and m-SCROLL do for normal windows.  When you are very low on address space, you can run the GC for just a few areas. See the documentation for the command Start GC :Immediately By Area.  In Zmacs or the input editor, completion is available while you are typing symbol names. Use either COMPLETE and c-?. This completion is available for all symbols that are names of definitions currently in editor buffers.  In Zmacs, you can see many of the parameters that control editing with m-X List Variables. You can set a value for the current session with m-X Set Variable or set it permanently in your init file: (zwei:set-zwei-variable "History Menu Length" 30)  Some people find it frustrating that c-X c-F creates a new file if it can't find the one requested. They use this: (setf zwei:*find-file-not-found-is-an-error* T) It prevents new files being created as the result of a typo. To create a new file, use c-U c-X c-F.