PSL Manual 7 February 1983 EDITOR
section 16.0 page 16.1
CHAPTER 16
CHAPTER 16
CHAPTER 16
EDITORS
EDITORS
EDITORS
16.1. A Mini-Structure Editor . . . . . . . . . . . 16.1
16.2. The EMODE Screen Editor . . . . . . . . . . . 16.3
16.2.1. Windows and Buffers in Emode . . . . . . . 16.5
16.3. Introduction to the Full Structure Editor . . . . . 16.6
16.4. User Entry to Editor . . . . . . . . . . . . 16.6
16.5. Editor Command Reference . . . . . . . . . . . 16.8
16.1. A Mini Structure-Editor
16.1. A Mini Structure-Editor
16.1. A Mini Structure-Editor
PSL and RLISP provide a fairly simple structure editor, essentially a
subset of the structure editor described below in section
FULL-STRUCTURE-EDITOR. This mini editor is usually resident in PSL and
RLISP, or can be LOADed. It is useful for correcting errors in input,
often via the E option in the BREAK loop. Do HELP(EDITOR) for more
information.
Edit
Edit
To edit an expression, call the function Edit with the expression as an
argument. The edited copy is returned. To edit the definition of a
EditF
EditF
function, call EditF with the function name as an argument.
In the editor, the following commands are available (N indicates a
_______
non-negative integer):
P
P ____
P edit
Prints the subexpression under consideration. On entry, this is
the entire expression. This only prints down PLEVEL levels,
replacing all edited subexpressions by ***. PLEVEL is initially
3.
PL
PL _ ____
PL (N) edit
_
Changes PLEVEL to N.
____ _______
____ _______
____ _______
N edit-command
N _______ edit-command
N:integer edit-command
Sets the subexpression under consideration to be the nth
subexpression of the current one. That is, walk down to the nth
subexpression.
EDITOR 7 February 1983 PSL Manual
page 16.2 section 16.1
____ _______
____ _______
____ _______
-N edit-command
-N _______ edit-command
-N:integer edit-command
Cdr
Cdr
Sets the current subexpression to be the nth Cdr of the current
one.
UP
UP ____
UP edit
Go to the subexpression you were in just before this one.
T
T ____
T edit
Go to the top of the original expression.
F
F _ ____
F (S) edit
_
Find the first occurrence of the S-expression S. The test is
Equal Eq
Equal Eq
performed by Equal, not Eq. The current level is set to the
_
first level in which S was found.
____ _______
____ _______
____ _______
N edit-command
N _______ edit-command
(N:integer) edit-command
Delete the Nth element of the current expression.
____ _______
____ _______
____ _______
N edit-command
N _______ ___ edit-command
(N:integer [ARG]) edit-command
___
Replace the Nth element by ARGs.
____ _______
____ _______
____ _______
-N edit-command
-N _______ ___ edit-command
(-N:integer [ARG]) edit-command
___
Insert the elements ARGs before the nth element.
R
R __ __ ____
(R S1 S2) edit
Replace all occurrences of S1 (in the tree you are placed at) by
S2.
B
B ____
B edit
Break
Break
Enter a Break loop under the editor.
PSL Manual 7 February 1983 EDITOR
section 16.1 page 16.3
OK
OK ____
OK edit
Leave the editor, returning the edited expression.
HELP
HELP ____
HELP edit
Print an explanatory message.
Break
Break
If the editor is called from a Break loop, the edited value is assigned
back to ERRORFORM!*.
16.2. The EMODE Screen Editor
16.2. The EMODE Screen Editor
16.2. The EMODE Screen Editor
EMODE is an EMACS-like screen editor, written entirely in PSL. To invoke
EMODE, call the function EMODE after LOADing the EMODE module. EMODE is
modeled after EMACS, so use that fact as a guide.
After starting up EMODE, you can use one of the following commands to
exit.
<Ctrl-X Ctrl-Z>
"quits" to the EXEC (you can continue or start again).
<Ctrl-Z Ctrl-Z>
goes back into "normal" I/O mode.
EMODE is built to run on a Teleray terminal as the default. To use some
other terminal you must LOAD in a set of different driver functions after
loading EMODE. The following drivers are currently available:
- HP2648A
- TELERAY
- VT100
- VT52
- AAA [Ann Arbor Ambassador]
The sources for these files are on <PSL.EMODE> (logical name PE:). It
should be quite easy to modify one of these files for other terminals. See
the file PE:TERMINAL-DRIVERS.TXT for some more information on how this
works.
An important (but currently somewhat bug-ridden) feature of EMODE is the
ability to evaluate expressions that are in your buffer. Use <Meta-E> to
evaluate the expression starting on the current line. <Meta-E> (normally)
automatically enters two window mode if anything is "printed" to the
OUT_WINDOW buffer, which is shown in the lower window. If you don't want
EDITOR 7 February 1983 PSL Manual
page 16.4 section 16.2
to see things being printed to the output window, you can set the variable
!*OUTWINDOW to NIL. (Or use the RLISP command "OFF OUTWINDOW;".) This
prevents EMODE from automatically going into two window mode if something
is printed to OUT_WINDOW. You must still use the "<Ctrl-X> 1" command to
enter one window mode initially.
You may also find the <Ctrl-Meta-Y> command useful. This inserts into
the current buffer the text printed as a result of the last <Meta-E>.
The function "PrintAllDispatch" prints out the current dispatch table.
You must call EMODE before this table is set up.
While in EMODE, the <Meta-?> (meta-question mark) character asks for a
command character and tries to print information about it.
The basic dispatch table is (roughly) as follows:
Character Function Comments
<Ctrl-@> SETMARK
<Ctrl-A> !$BEGINNINGOFLINE
<Ctrl-B> !$BACKWARDCHARACTER
<Ctrl-D> !$DELETEFORWARDCHARACTER
<Ctrl-E> !$ENDOFLINE
<Ctrl-F> !$FORWARDCHARACTER
Linefeed !$CRLF Acts like carriage return
<Ctrl-K> KILL_LINE
<Ctrl-L> FULLREFRESH
Return !$CRLF
<Ctrl-N> !$FORWARDLINE
<Ctrl-O> OPENLINE
<Ctrl-P> !$BACKWARDLINE
<Ctrl-R> Backward search for string, type
a carriage return to terminate
the string
<Ctrl-S> Forward search for string
<Ctrl-U> Repeat a command. Asks for
count (terminate with a carriage
return), then it asks for the
command character
<Ctrl-V> DOWNWINDOW
<Ctrl-W> KILL_REGION
<Ctrl-X> !$DOCNTRLX As in EMACS, <Ctrl-X> is a
prefix for "fancier" commands
<Ctrl-Y> INSERT_KILL_BUFFER Yanks back killed text
<Ctrl-Z> DOCONTROLMETA As in EMACS, acts like
<Ctrl-Meta->
escape ESCAPEASMETA As in EMACS, escape acts like
the <Meta-> key
rubout !$DELETEBACKWARDCHARACTER
<Ctrl-Meta-B> BACKWARD_SEXPR
PSL Manual 7 February 1983 EDITOR
section 16.2 page 16.5
<Ctrl-Meta-F> FORWARD_SEXPR
<Ctrl-Meta-K> KILL_FORWARD_SEXPR
<Ctrl-Meta-Y> INSERT_LAST_EXPRESSION Insert the last "expression"
typed as the result of a
<Meta-E>
<Ctrl-Meta-Z> OLDFACE Leave EMODE, go back to
"regular" RLISP
<Meta-Ctrl-rubout> KILL_BACKWARD_SEXPR
<Meta-<> !$BEGINNINGOFBUFFER As in EMACS, move to beginning
of buffer
<Meta->> !$ENDOFBUFFER As in EMACS, move to end of
buffer
<Meta-?> !$HELPDISPATCH Asks for a character, tries to
print information about it
<Meta-B> BACKWARD_WORD
<Meta-D> KILL_FORWARD_WORD
<Meta-E> Evaluate an expression
<Meta-V> UPWINDOW As in EMACS, move up a window
<Meta-W> COPY_REGION
<Meta-X> !$DOMETAX As in EMACS, <Meta-X> is another
prefix for "fancy" stuff
<Meta-Y> UNKILL_PREVIOUS As in EMACS
<Meta-Rubout> KILL_BACKWARD_WORD
<Ctrl-X> <Ctrl-B> PRINTBUFFERNAMES Prints a list of buffers
<Ctrl-X> <Ctrl-R> CNTRLXREAD Read a file into the buffer
<Ctrl-X> <Ctrl-W> CNTRLXWRITE Write the buffer out to a file
<Ctrl-X> <Ctrl-X> EXCHANGEPOINTANDMARK
<Ctrl-X> <Ctrl-Z> As in EMACS, exits to the EXEC
<Ctrl-X> 1 ONEWINDOW Go into one window mode
<Ctrl-X> 2 TWOWINDOWS Go into two window mode
<Ctrl-X> B CHOOSEBUFFER EMODE asks for a buffer name,
and then puts you in that buffer
<Ctrl-X> O OTHERWINDOW Select other window
<Ctrl-X> P WRITESCREENPHOTO Write a "photograph" of the
screen to a file
16.2.1. Windows and Buffers in Emode
16.2.1. Windows and Buffers in Emode
16.2.1. Windows and Buffers in Emode
[??? This section to be completed at a later date. ???]
[??? This section to be completed at a later date. ???]
[??? This section to be completed at a later date. ???]
16.3. Introduction to the Full Structure Editor
16.3. Introduction to the Full Structure Editor
16.3. Introduction to the Full Structure Editor
1
PSL also provides an extremely powerful form-oriented editor . This
_______________
1
This version of the UCI LISP editor was translated to to Standard LISP
by Tryg Ager and Jim MacDonald of IMSSS, Stanford, and adapted to PSL by
E. Benson. The UCI LISP editor is derived from the INTERLISP editor.
EDITOR 7 February 1983 PSL Manual
page 16.6 section 16.3
facility allows the user to easily alter function definitions, variable
values and property list entries. It thereby makes it entirely unnecessary
for the user to employ a conventional text editor in the maintenance of
programs. This document is a guide to using the editor. Certain features
of the UCI LISP editor have not been incorporated in the translated editor,
and we have tried to mark all such differences.
16.3.1. Starting the Structure Editor
16.3.1. Starting the Structure Editor
16.3.1. Starting the Structure Editor
EditF
EditF
This section describes normal user entry to the editor (with the EditF,
EditP EditV
EditP EditV
EditP and EditV fuunctions) and the editing commands which are available.
This section is by no means complete. In particular, material covering
programmed calls to the editor routines is not treated. Consult the UCI
LISP manual for further details.
To edit a function named FOO do
*(EDITF FOO)
To edit the value of an atom named BAZ do
*(EDITV BAZ)
To edit the property list of an atom named FOOBAZ do
*(EDITP FOOBAZ)
These functions are described later in the chapter.
Warning: Editing the property list of an atom may position pointers at
unprintable structures. It is best to use the F (find) command before
trying to print property lists. This editor capability is variable from
implementation to implementation.
The editor prompts with
-E-
*
You can then input any editor command. The input scanner is not very
smart. It terminates its scan and begins processing when it sees a
printable character immediately followed by a carriage return. Do not use
escape to terminate an editor command. If the editor seems to be
PSL Manual 7 February 1983 EDITOR
section 16.3 page 16.7
repeatedly requesting input type P<ret> (print the current expression) or
some other command that ordinarily does no damage, but terminates the input
solicitation.
The following set of topics makes a good "first glance" at the editor.
Entering the editor: EDITF, EDITV.
Leaving the editor: OK.
Editor's attention: CURRENT-EXP.
Changing attention: POS-INTEGER, NEG-INTEGER, 0, ^, NX, BK.
Printing: P, PP.
Modification: POS-INTEGER, NEG-INTEGER, A, B, :, N.
Changing parens: BI, BO.
Undoing changes: UNDO.
For the more discriminating user, the next topics might be some of the
following.
Searches: PATTERN, F, BF.
Complex commands: R, SW, XTR, MBD, MOVE.
Changing parens: LI, LO, RI, RO.
Undoing changes: TEST, UNBLOCK, !UNDO.
Other features should be skimmed but not studied until it appears that
they may be useful.
16.3.2. Structure Editor Commands
16.3.2. Structure Editor Commands
16.3.2. Structure Editor Commands
Note that arguments contained in angle brackets <> are optional.
A
A ___ ____
A ([ARG]) edit
___ _
This command inserts the ARGs (arbitrary LISP expressions) After
UP
UP
the current expression. This is accomplished by doing an UP and
a (-2 exp1 exp2 ... expn) or an (N exp1 exp2 ... expn), as
appropriate. Note the way in which the current expression is
UP
UP
changed by the UP.
B
B ___ ____
B ([ARG]) edit
___ _
This command inserts the ARGs (arbitrary LISP forms) Before the
UP
UP
current expression. This is accomplished by doing an UP followed
by a (-1 exp1 exp2 ... expn). Note the way in which the current
UP
UP
expression is changed by the UP.
EDITOR 7 February 1983 PSL Manual
page 16.8 section 16.3
BELOW
BELOW ___ _ ____
BELOW (COM, <N>) edit
This command changes the current expression in the following
___ ___
manner. The edit command COM is executed. If COM is not a
___
recognized command, then (_ COM) is executed instead. Note that
___
COM should cause ascent in the edit chain (i.e. should be
BELOW
BELOW
equivalent to some number of zeros). BELOW then evaluates
(note!) N and descends N links in the resulting edit chain. That
BELOW
BELOW
is, BELOW ascends the edit chain (does repeated 0s) looking for
___
the link specified by COM and stops N links below that (backs off
N 0s). If N is not given, 1 is assumed.
BF
BF ___ ___ ____
BF (PAT, <FLG>) edit
Also can be used as:
BF PAT
_ _ ___
This command performs a Backwards Find, searching for PAT (an
edit pattern). Search begins with the expression immediately
before the current expression and proceeds in reverse print
order. (If the current expression is the top level expression,
the entire expression is searched in reverse print order.)
Search begins at the end of each list, and descends into each
element before attempting to match that element. If the match
fails, proceed to the previous element, etc. until the front of
BF
BF
the list is reached. At that point, BF ascends and backs up,
etc.
The search algorithm may be slightly modified by use of a second
___
argument. Possible FLGs and their meanings are as follows.
T begins search with the current expression rather than
with the preceding expression at this level.
BF
BF ___
NIL or missing - same as BF PAT.
NOTE: if the variable UPFINDFLG is non-NIL, the editor does an
UP
UP ___
UP after the expression matching PAT is located. Thus, doing a
BF
BF
BF for a function name yields a current expression which is the
entire function call. If this is not desired, UPFINDFLG may be
set to NIL. UPFINDFLG is initially T.
BF
BF
BF is protected from circular searches by the variable MAXLEVEL.
Car Cdr
Car Cdr
If the total number of Cars and Cdrs descended into reaches
MAXLEVEL (initially 300), search of that tail or element is
abandoned exactly as though a complete search had failed.
PSL Manual 7 February 1983 EDITOR
section 16.3 page 16.9
BI
BI __ __ ____
BI (N1, N2) edit
This command inserts a pair of parentheses in the current
_ _
expression; i.e. it is a Balanced Insert. (Note that parentheses
are ALWAYS balanced, and hence must be added or removed in
pairs.) A left parenthesis is inserted before element N1 of the
current expression. A right parenthesis is inserted after
element N2 of the current expression. Both N1 and N2 are usually
integers, and element N2 must be to the right of element N1.
(BI n1) is equivalent to (BI n1 n1).
NTH
NTH
The NTH command is used in the search, so that N1 and N2 may be
any location specifications. The expressions used are the first
element of the current expression in which the specified form is
found at any level.
BIND
BIND ___ ____
BIND ([COM]) edit
This command provides the user with temporary variables for use
during the execution of the sequence of edit commands coms.
There are three variables available: #1, #2 and #3. The binding
BIND
BIND
is recursive and BIND may be executed recursively if necessary.
All variables are initialized to NIL. This feature is useful
chiefly in defining edit macros.
BK
BK ____
BK edit
The current expression becomes the expression immediately
_ _
preceding the present current expression; i.e. Back Up. This
command generates an error if the current expression is the first
expression in the list.
BO
BO _ ____
BO (N) edit
BO
BO
The BO command removes a pair of parentheses from the Nth element
_ _
of the current expression; i.e. it is a Balanced Remove. The
NTH
NTH
parameter N is usually an integer. The NTH command is used in
the search, however, so that any location specification may be
used. The expression referred to is the first element of the
current expression in which the specified form is found at any
level.
CHANGE
CHANGE ___ __ ___ ____
(CHANGE LOC To [ARG]) edit
This command replaces the current expression after executing the
___ ___
location specification LOC by ARGs.
EDITOR 7 February 1983 PSL Manual
page 16.10 section 16.3
COMS
COMS ___ ____
(COMS [ARG]) edit
___
This command evaluates its ARGs and executes them as edit
commands.
COMSQ
COMSQ ___ ____
(COMSQ [ARG]) edit
___
This command executes each ARG as an edit command.
At any given time, the attention of the editor is focused on a single
expression or form. We call that form the current expression. Editor
commands may be divided into two broad classes. Those commands which
change the current expression are called attention- changing commands.
Those commands which modify structure are called structure modification
commands.
DELETE
DELETE ____
DELETE edit
This command deletes the current expression. If the current
expression is a tail, only the first element is deleted. This
command is equivalent to (:).
E
E ____ _ ____
(E FORM <T>) edit
____
This command evaluates FORM. This may also be typed in as:
E FORM
but is valid only if typed in from the TTY. (E FORM) evaluates
____
FORM and prints the value on the terminal. The form (E FORM T)
____
evaluates FORM but does not print the result.
EditF
EditF __ __ ___ ____
(EditF FN:id): any expr
__
This function initiates editing of the function whose name is FN.
EditFns
EditFns __ ____ __ ____ ____ ____ ___ _____
(EditFns FN-LIST:id-list, COMS:form): NIL fexpr
____
This function applies the sequence of editor commands, COMS, to
__ ____
each of several functions. The argument FN-LIST is evaluated,
____
and should evaluate to a list of function names. COMS is applied
__ ____
to each function in FN-LIST, in turn. Errors in editing one
function do not affect editing of others. The editor call is via
EditF
EditF
EditF, so that values may also be edited in this way.
PSL Manual 7 February 1983 EDITOR
section 16.3 page 16.11
EditP
EditP __ __ ____ ____ ____ ___ _____
(EditP AT:id, COMS:form-list): any fexpr
This function initiates editing of the property list of the atom
____
whose name is at. The argument COMS is a possibly null sequence
of edit commands which is executed before calling for input from
the terminal.
EditV
EditV __ __ ____ _____ ____ ___ _____
(EditV AT:id, COMS:forms-list): NIL fexpr
This function initiates editing of the value of the atom whose
__ ____
name is AT. The argument COMS is a possibly null sequence of
edit commands which is executed before calling for input from the
terminal.
EMBED
EMBED ___ __ ___ ____
(EMBED LOC In ARG) edit
This command replaces the expression which would be current after
___
executing the location specification LOC by another expression
which has that expression as a sub-expression. The manner in
which the transformation is carried out depends on the form of
___ ___ ____
ARG. If ARG is a list, then each occurrence of the atom '*' in
___
ARG is replaced by the expression which would be current after
___
doing LOC. (NOTE: a fresh copy is used for each substitution.)
___
If ARG is atomic, the result is equivalent to:
(EMBED loc IN (arg *))
A call of the form
(EMBED loc IN exp1 exp2 ... expn)
is equivalent to:
(EMBED loc IN (exp1 exp2 ... expn *))
EMBED
___ EMBED
If the expression after doing LOC is a tail, EMBED behaves as
though the expression were the first element of that tail.
EXTRACT
EXTRACT ____ ____ ____ ____
(EXTRACT LOC1 From LOC2) edit
This command replaces the expression which would be current after
____
doing the location specification LOC2 by the expression which
____
would be current after doing LOC1. The expression specified by
EDITOR 7 February 1983 PSL Manual
page 16.12 section 16.3
____ ____
LOC1 must be a sub-expression of that specified by LOC2.
F
F ___ ___ ____
(F PAT <FLG>) edit
Also can be used as:
F PAT
___
This command causes the next command, PAT, to be interpreted as a
pattern. The current expression is searched for the next
___ _ ___
occurrence of PAT; i.e. Find. If PAT is a top level element of
___
the current expression, then PAT matches that top level
occurrence and a full recursive search is not attempted.
Otherwise, the search proceeds in print order. Recursion is done
Car Cdr
Car Cdr
first in the Car and then in the Cdr direction.
The form (F PAT FLG) of the command may be used to modify the
___
search algorithm according to the value of FLG. Possible values
and their actions are:
N suppresses the top-level check. That is, finds the
___
next print order occurrence of PAT regardless of any
top level occurrences.
T like N, but may succeed without changing the current
expression. That is, succeeds even if the current
___
expression itself is the only occurrence of PAT.
positive integer
___
finds the nth place at which PAT is matched. This is
equivalent to (F PAT T) followed by n-1 (F PAT N)s. If
n occurrences are not found, the current expression is
unchanged.
NIL or missing
Only searches top level elements of the current
expression. May succeed without changing the current
expression.
NOTE: If the variable UPFINDFLG is non-NIL, F does an UP after
locating a match. This ensures that F fn, in which fn is a
function name, results in a current expression which is the
entire function call. If this is undesirable, set UPFINDFLG to
NIL. Its initial value is T.
As protection against searching circular lists, the search is
Car-Cdr
Car-Cdr
abandoned if the total number of Car-Cdr descents exceeds the
PSL Manual 7 February 1983 EDITOR
section 16.3 page 16.13
value of the variable MAXLEVEL. (The initial value is 300.) The
search fails just as if the entire element had been
unsuccessfully searched.
FS
FS ___ ____
(FS [PAT]) edit
FS
FS _ _
The FS command does sequential finds; i.e. Find Sequential. That
___
is, it searches (in print order) first for the first PAT, then
___
for the second PAT, etc. If any search fails, the current
expression is left at that form which matched in the last
successful search. This command is, therefore, equivalent to a
F
F
sequence of F commands.
F=
F= ___ ___ ____
(F= EXP FLG) edit
Eq
_ Eq
This command is equivalent to (F (== exp) flg); i.e. Find Eq.
___
That is, it searches, in the manner specified by FLG, for a form
Eq
Eq ___
which is Eq to EXP. Note that for keyboard type-ins, this always
___
fails unless EXP is atomic.
HELP
HELP ____
HELP edit
This command provides an easy way of invoking the HELP system
from the editor.
I
I ___ ___ ____
(I COM [ARG]) edit
___ ___
This command evaluates the ARGs and executes COM on the resulting
values. This command is thus equivalent to: (com val1 val2 ...
valn), Each vali is equal to (EVAL argi).
IF
IF ___ ____
(IF ARG) edit
This command, useful in edit macros, conditionally causes an
editor error. If (EVAL arg) is NIL (or if evaluation of arg
IF
IF
causes a LISP error), then IF generates an editor error.
INSERT
INSERT ___ ____
(INSERT [EXP ARG LOC]) edit
INSERT A B :
INSERT A B :
The INSERT command provides equivalents of the A, B and :
___ ___
commands incorporating a location specification, LOC. ARG can be
___
AFTER, BEFORE, or FOR. This command inserts EXPs AFTER, BEFORE
or FOR (in place of) the expression which is current after
___
executing LOC. Note, however, that the current expression is not
changed.
EDITOR 7 February 1983 PSL Manual
page 16.14 section 16.3
LC
LC ___ ____
(LC LOC) edit
This command, which takes as an argument a location
specification, explicitly invokes the location specification
_ _
search; i.e. Locate. The current expression is changed to that
___
which is current after executing LOC.
___
See LOC-SPEC for details on the definition of LOC and the search
method in question.
LCL
LCL ___ ____
(LCL LOC) edit
This command, which takes as an argument a location
specification, explicitly invokes the location specification
search. However, the search is limited to the current expression
_ _ _
itself; i.e. Locate Limited. The current expression is changed
___
to that which is current after executing LOC.
LI
LI _ ____
(LI N) edit
This command inserts a left parenthesis (and, of course, a
_ _
matching right parenthesis); i.e. Left Parenthesis Insert. The
left parenthesis is inserted before the Nth element of the
current expression and the right parenthesis at the end of the
current expression. Thus, this command is equivalent to (BI n
-1).
NTH
NTH
The NTH command is used in the search, so that N, which is
usually an integer, may be any location specification. The
expression referred to is the first element of the current
expression which contains the form specified at any level.
LO
LO _ ____
(LO N) edit
This command removes a left parenthesis (and a matching right
parenthesis, of course) from the Nth element of the current
_ _
expression; i.e. Left Parenthesis Remove. All elements after
the Nth are deleted.
NTH
NTH
The command uses the NTH command for the search. The parameter
N, which is usually an integer, may be any location
specification. The expression actually referred to is the first
element of the current expression which contains the specified
form at any depth.
Many of the more complex edit commands take as an argument a location
___
specification (abbreviated LOC throughout this document). A location
specification is a list of edit commands, which are, with two exceptions,
executed in the normal way. Any command not recognized by the editor is
PSL Manual 7 February 1983 EDITOR
section 16.3 page 16.15
F
F
treated as though it were preceded by F. Furthermore, if one of the
commands causes an error and the current expression has been changed by
prior commands, the location operation continues rather than aborting.
This is a sort of back-up operation. For example, suppose the location
Cond
Cond
specification is (COND 2 3), and the first clause of the first Cond has
only 2 forms. The location operation proceeds by searching for the next
Cond
Cond
Cond and trying again. If a point were reached in which there were no more
Cond
Cond
Conds, the location operation would then fail.
LP
LP ____ ____
(LP COMS) edit
____
This command, useful in macros, repeatedly executes COMS (a
sequence of edit commands) until an editor error occurs; i.e.
LP
_ _ LP
Loop. As LP exits, it prints the number of OCCURRENCES; that is,
____
the number of times COMS was successfully executed. After
execution of the command, the current expression is left at what
____
it was after the last complete successful execution of COMS.
The command terminates if the number of iterations exceeds the
value of the variable MAXLOOP (initially 30).
LPQ
LPQ ____ ____
(LPQ COMS) edit
____
This command, useful in macros, repeatedly executes COMS (a
sequence of edit commands) until an editor error occurs; i.e.
_ _ _
Loop Quietly. After execution of the command, the current
expression is left at what it was after the last complete
____
successful execution of COMS.
The command terminates if the number of iterations exceeds the
value of the variable MAXLOOP (initially 30).
LP
LP
This command is equivalent to LP, except that OCCURRENCES is not
printed.
M
M ___ ___ ____
(M (NAM) ([EXP) COMS)]) edit
This can also be used as:
(M NAM COMS)
or as:
(M (NAM) ARG COMS)
EDITOR 7 February 1983 PSL Manual
page 16.16 section 16.3
_
The editor provides the user with a macro facility; i.e. M. The
user may define frequently used command sequences to be edit
macros, which may then be invoked simply by giving the macro name
M
M
as an edit command. The M command provides the user with a
method of defining edit macros.
The first alternate form of the command defines an atomic command
___
which takes no arguments. The argument NAM is the atomic name of
___
the macro. This defines NAM to be an edit macro equivalent to
____ ___
the sequence of edit commands COMS. If NAM previously had a
definition as an edit macro, the new definition replaces the old.
NOTE: Edit command names take precedence over macros. It is not
possible to redefine edit command names.
The main form of the M command as given above defines a list
command, which takes a fixed number of arguments. In this case,
___
NAM is defined to be an edit macro equivalent to the sequence of
____
edit commands COMS. However, as (nam exp1 exp2 ... expn) is
executed, the expi are substituted for the corresponding argi in
____ ____
COMS before COMS are executed.
The second alternate form of the M command defines a list command
which may take an arbitrary number of arguments. Execution of
___
the macro NAM is accomplished by substituting (exp1 exp2 ...
Cdr
Cdr
expn) (that is, the Cdr of the macro call (nam exp1 exp2 ...
___ ____
expn)) for all occurrences of the atom ARG in COMS, and then
____
executing COMS.
MAKEFN
MAKEFN ___ ____ ____ __ __ ____
(MAKEFN (NAM VARS) ARGS N1 <N2>) edit
This command defines a portion of the current expression as a
function and replaces that portion of the expression by a call to
____ _ _ ___ ____
the function; i.e. Make Function. The form (NAM VARS) is the
__ __
call which replaces the N1st through N2nd elements of the current
___
expression. Thus, NAM is the name of the function to be defined.
____
VARS is a sequence of local variables (in the current
____
expression), and ARGS is a list of dummy variables. The function
definition is formed by replacing each occurrence of an element
Cdr
Cdr ___ ____
in vars (the Cdr of (NAM VARS)) by the corresponding element of
____ ____
ARGS. Thus, ARGS are the names of the formal parameters in the
newly defined function.
__ __
If N2 is omitted, it is assumed to be equal to N1.
MARK
MARK ____
MARK edit
This command saves the current position within the form in such a
way that it can later be returned to. The return is accomplished
via _ or __.
PSL Manual 7 February 1983 EDITOR
section 16.3 page 16.17
MBD
MBD ___ ____
MBD (ARG) edit
This command replaces the current expression by some form which
___
has the current expression as a sub-expression. If ARG is a
MBD
____ MBD
list, MBD substitutes a fresh copy of the current expression for
___ ___
each occurrence of the atom '*' in ARG. If ARG is a sequence of
expressions, as:
(MBD exp1 exp2 ... expn)
then the call is equivalent to one of the form:
(MBD (exp1 exp2 ... expn *))
The same is true if arg is atomic:
(MBD atom) = (MBD (atom *))
MOVE
MOVE ____ __ ___ ____ ____
(MOVE <LOC1> To COM <LOC2>) edit
MOVE
MOVE ____
The MOVE command allows the user to Move a structure from one
point to another. The user may specify the form to be moved (via
____
LOC1, the first location specification), the position to which it
____
is to be moved (via LOC2, the second location specification) and
___ ___
the action to be performed there (via COM). The argument COM may
be BEFORE, AFTER or the name of a list command (e.g. :, N, etc.).
This command performs in the following manner. Take the current
____
expression after executing LOC1 (or its first element, if it is a
____
tail); call it expr. Execute LOC2 (beginning at the current
expression AS OF ENTRY TO MOVE -- NOT the expression which would
____ ___
be current after execution of LOC1), and then execute (COM expr).
Now go back and delete expr from its original position. The
current expression is not changed by this command.
____
If LOC1 is NIL (that is, missing), the current expression is
moved. In this case, the current expression becomes the result
___
of the execution of (COM expr).
____
If LOC2 is NIL (that is missing) or HERE, then the current
____
expression specifies the point to which the form given by LOC2 is
to be moved.
EDITOR 7 February 1983 PSL Manual
page 16.18 section 16.3
N
N ___ ____
(N [EXP]) edit
___
This command adds the EXPs to the end of the current expression;
_
i.e. Add at End. This compensates for the fact that the negative
integer command does not allow insertion after the last element.
____ _______
____ _______
____ _______
-N:integer edit-command
-N:integer ___ edit-command
(-N:integer [EXP]) edit-command
Also can be used as:
-N
This is really two separate commands. The atomic form is an
attention changing command. The current expression becomes the
nth form from the end of the old current expression; i.e. Add
_
Before End. That is, -1 specifies the last element, -2 the
second from last, etc.
The list form of the command is a structure modification command.
This command inserts exp1 through expn (at least one expi must be
present) before the nth element (counting from the BEGINNING) of
the current expression. That is, -1 inserts before the first
element, -2 before the second, etc.
NEX
NEX ___ ____
(NEX COM) edit
Also can be used as:
NEX
BELOW NX
BELOW ___ NX
This command is equivalent to (BELOW COM) followed by NX. That
is, it does repeated 0s until a current expression matching com
NX
NX
is found. It then backs off by one 0 and does a NX.
The atomic form of the command is equivalent to (NEX _). This is
MARK
MARK
useful if the user is doing repeated (NEX x)s. He can MARK at x
and then use the atomic form.
NTH
NTH ___ ____
(NTH LOC) edit
LCL BELOW UP
LCL ___ BELOW UP
This command effectively performs (LCL LOC), (BELOW <), UP. The
net effect is to search the current expression only for the form
___
specified by the location specification LOC. From there, return
to the initial level and set the current expression to be the
PSL Manual 7 February 1983 EDITOR
section 16.3 page 16.19
___
tail whose first element contains the form specified by LOC at
any level.
NX
NX _ ____
(NX N) edit
Also can be used as:
NX
The atomic form of this command makes the current expression the
expression following the present current expression (at the same
_ _
level); i.e. Next.
The list form of the command is equivalent to n (an integer
NX
NX
number) repetitions of NX. If an error occurs (e.g. if there are
_
not N expressions following the current expression), the current
expression is unchanged.
OK
OK ____
OK edit
This command causes normal exit from the editor.
The state of the edit is saved on property LASTVALUE of the atom
EDIT. If the next form edited is the same, the edit is restored.
That is, it is (with the exception of a BLOCK on the undo-list)
as though the editor had never been exited.
It is possible to save edit states for more than one form by
SAVE
SAVE
exiting from the editor via the SAVE command.
ORF
ORF ___ ____
(ORF [PAT]) edit
This command searches the current expression, in print order, for
___
the first occurrence of any form which matches one of the PATs;
UP
__ _ UP
i.e. Print Order Final. If found, an UP is executed, and the
current expression becomes the expression so specified. This
command is equivalent to (F (*ANY* pat1 pat2 ... patn) N). Note
that the top level check is not performed.
ORR
ORR ____ ____
(ORR [COMS]) edit
____
This command operates in the following manner. Each COMS is a
ORR
ORR ____
list of edit commands. ORR first executes the first COMS. If no
ORR
ORR
error occurs, ORR terminates, leaving the current expression as
____
it was at the end of executing COMS. Otherwise, it restores the
current expression to what it was on entry and repeats this
EDITOR 7 February 1983 PSL Manual
page 16.20 section 16.3
____ ____
operation on the second COMS, etc. If no COMS is successfully
ORR
ORR
executed without error, ORR generates an error and the current
expression is unchanged.
P
P __ __ ____
(P N1 <N2>) edit
Also can be used as:
P
_
This command prints the current expression; i.e. Print. The
atomic form of the command prints the current expression to a
depth of 2. More deeply nested forms are printed as &.
__
The form (P N1) prints the N1st element of the current expression
__
to a depth of 2. The argument N1 need not be an integer. It may
NTH
NTH
be a general location specification. The NTH command is used in
the search, so that the expression printed is the first element
of the current expression which contains the desired form at any
level.
__
The third form of the command prints the N1st element of the
__ __
current expression to a depth of N2. Again, N1 may be a general
location specification.
__
If N1 is 0, the current expression is printed.
Many of the editor commands, particularly those which search,
___
take as an argument a pattern (abbreviated PAT). A pattern may
be any combination of literal list structure and special pattern
elements.
The special elements are as follows.
& this matches any single element.
*ANY* if (CAR pat) is the atom *ANY*, then (CDR pat) must be
___
a list of patterns. PAT matches any form which matches
Cdr
Cdr ___
any of the patterns in (Cdr PAT).
@ if an element of pat is a literal atom whose last
character is @, then that element matches any literal
atom whose initial characters match the initial
characters of the element. That is, VER matches
VERYLONGATOM.
-- this matches any tail of a list or any interior segment
of a list.
PSL Manual 7 February 1983 EDITOR
section 16.3 page 16.21
Car Cdr
Car ___ ___ Cdr ___
== if (Car PAT) is ==, then PAT matches X iff (Cdr PAT) is
Eq
Eq
Eq to X.
Cdr
___ Cdr ___
::: if PAT begins with :::, the Cdr of PAT is matched
against tails of the expression.
____ _______
____ _______
____ _______
N:integer edit-command
N:integer ___ edit-command
(N:integer [EXP]) edit-command
Also can be used as:
N:integer
This command, a strictly positive integer N, is really two
commands. The atomic form of the command is an
attention-changing command. The current expression becomes the
nth element of the current expression.
The list form of the command is a structure modification command.
It replaces the Nth element of the current expression by the
___
forms EXP. If no forms are given, then the Nth element of the
current expression is deleted.
PP
PP ____
PP edit
_ _
This command Pretty-Prints the current expression.
R
R ____ ____ ____
(R EXP1 EXP2) edit
_ ____ ____
This command Replaces all occurrences of EXP1 by EXP2 in the
current expression.
____
Note that EXP1 may be either the literal s-expression to be
replaced, or it may be an edit pattern. If a pattern is given,
the form which first matches that pattern is replaced throughout.
All forms which match the pattern are NOT replaced.
REPACK
REPACK ___ ____
(REPACK LOC) edit
Also can be used as:
REPACK
This command allows the editing of long strings (or atom names)
EDITOR 7 February 1983 PSL Manual
page 16.22 section 16.3
REPACK
REPACK
one character at a time. REPACK calls the editor recursively on
UNPACK
UNPACK
UNPACK of the specified atom. (In the atomic form of the
command, the current expression is used unless it is a list;
then, the first element is used. In the list form of the
command, the form specified by the location specification is
OK
OK
treated in the same way.) If the lower editor is exited via OK,
STOP
STOP
the result is repacked and replaces the original atom. If STOP
is used, no replacement is done. The new atom is always printed.
RI
RI __ __ ____
(RI N1 N2) edit
This command moves a right parenthesis. The parenthesis is moved
__
from the end of the the N1st element of the current expression to
__ __ _
after the N2nd element of the N1st element; i.e. Right
_ __
Parenthesis Insert. Remaining elements of the N1st element are
raised to the top level of the current expression.
__ __
The arguments, N1 and N2, are normally integers. However,
NTH
NTH
because the NTH command is used in the search, they may be any
location specifications. The expressions referred to are the
first element of the current expression in which the specified
form is found at any level, and the first element of that
__
expression in which the form specified by N2 is found at any
level.
RO
RO _ ____
(RO N) edit
This command moves the right parenthesis from the end of the nth
element of the current expression to the end of the current
_ _
expression; i.e. Right Parenthesis Remove. All elements
following the Nth are moved inside the nth element.
NTH
NTH _
Because the NTH command is used for the search, the argument N,
which is normally an integer, may be any location specification.
The expression referred to is the first element of the current
expression in which the specified form is found at any depth.
S
S ___ ___ ____
(S VAR LOC) edit
SetQ
_ SetQ ___
This command Sets (via SetQ) the variable whose name is VAR to
the current expression after executing the location specification
___
LOC. The current expression is not changed.
SAVE
SAVE ____
SAVE edit
This command exits normally from the editor. The state of the
edit is saved on the property EDIT-SAVE of the atom being edited.
When the same atom is next edited, the state of the edit is
PSL Manual 7 February 1983 EDITOR
section 16.3 page 16.23
restored and (with the exception of a BLOCK on the undo-list) it
is as if the editor had never been exited. It is not necessary
SAVE
SAVE
to use the SAVE command if only a single atom is being edited.
OK
OK
See the OK command.
SECOND
SECOND ___ ____
(SECOND LOC) edit
This command changes the current expression to what it would be
___
after the location specification LOC is executed twice. The
___
current expression is unchanged if either execution of LOC fails.
STOP
STOP ____
STOP edit
____
This command exits abnormally from the editor; i.e. Stop Editing.
TTY:
TTY:
This command is useful mainly in conjunction with TTY: commands
which the user wishes to abort. For example, if the user is
executing
(MOVE 3 TO AFTER COND TTY:)
OK MOVE
OK MOVE
and he exits from the lower editor via OK, the MOVE command
completes its operation. If, on the other hand, the user exits
STOP TTY: MOVE
STOP TTY: MOVE
via STOP, TTY: produces an error and MOVE aborts.
SW
SW __ __ ____
(SW N1 N2) edit
__ __ __
This command Swaps the N1st and N2nd elements of the current
expression. The arguments are normally but not necessarily
SW NTH
SW NTH
integers. SW uses NTH to perform the search, so that any
location specifications may be used. In each case, the first
element of the current expression which contains the specified
form at any depth is used.
TEST
TEST ____
TEST edit
This command adds an undo-block to the undo-list. This block
UNDO !UNDO
UNDO !UNDO
limits the scope of UNDO and !UNDO commands to changes made after
UNBLOCK
UNBLOCK
the block was inserted. The block may be removed via UNBLOCK.
THIRD
THIRD ___ ____
(THIRD LOC) edit
This command executes the location specification loc three times.
LC
LC ___
It is equivalent to three repetitions of (LC LOC). Note,
however, that if any of the executions causes an editor error,
the current expression remains unchanged.
EDITOR 7 February 1983 PSL Manual
page 16.24 section 16.3
THROUGH
____ THROUGH ____ ____
(LOC1 THROUGH LOC2) edit
This command makes the current expression the segment from the
____
form specified by LOC1 through (including) the form specified by
LC UP BI
____ LC ____ UP BI ____
LOC2. It is equivalent to (LC LOC1), UP, (BI 1 LOC2), 1. Thus,
it makes a single element of the specified elements and makes
that the current expression.
This command is meant for use in the location specifications
DELETE, EMBED, EXTRACT REPLACE
DELETE, EMBED, EXTRACT REPLACE
given to the DELETE, EMBED, EXTRACT and REPLACE commands, and is
THROUGH
THROUGH
not particularly useful by itself. Use of THROUGH with these
commands sets a special flag so that the editor removes the extra
THROUGH
THROUGH
set of parens added by THROUGH.
TO
____ TO ____ ____
(LOC1 TO LOC2) edit
This command makes the current expression the segment from the
____
form specified by LOC1 up to (but not including) the form
LC UP BI
____ LC ____ UP BI
specified by LOC2. It is equivalent to (LC LOC1), UP, (BI 1
RI
RI
loc), (RI 1 -2), 1. Thus, it makes a single element of the
specified elements and makes that the current expression.
This command is meant for use in the location specifications
DELETE, EMBED, EXTRACT REPLACE
DELETE, EMBED, EXTRACT REPLACE
given to the DELETE, EMBED, EXTRACT and REPLACE commands, and is
TO
TO
not particularly useful by itself. Use of TO with these commands
sets a special flag so that the editor removes the extra set of
TO
TO
parens added by TO.
TTY:
TTY: ____
TTY: edit
This command calls the editor recursively, invoking a 'lower
editor.' The user may execute any and all edit commands in this
TTY:
TTY:
lower editor. The TTY: command terminates when the lower editor
OK STOP
OK STOP
is exited via OK or STOP.
The form being edited in the lower editor is the same as that
being edited in the upper editor. Upon entry, the current
expression in the lower is the same as that in the upper editor.
UNBLOCK
UNBLOCK ____
UNBLOCK edit
This command removes an undo-block from the undo-list, allowing
UNDO !UNDO
UNDO !UNDO
UNDO and !UNDO to operate on changes which were made before the
block was inserted.
TEST
TEST
Blocks may be inserted by exiting from the editor and by the TEST
command.
PSL Manual 7 February 1983 EDITOR
section 16.3 page 16.25
UNDO
UNDO ___ ____
UNDO (COM) edit
Also can use as:
UNDO
This command undoes editing changes. All editing changes are
undoable, provided that the information is available to the
editor. (The necessary information is always available unless
SAVE
SAVE
several forms are being edited and the SAVE command is not used.)
Changes made in the current editing session are ALWAYS undoable.
The short form of the command undoes the most recent change.
UNDO !UNDO
UNDO !UNDO
Note, however, that UNDO and !UNDO changes are skipped, even
though they are themselves undoable.
The long form of the command allows the user to undo an arbitrary
UNDO !UNDO
UNDO !UNDO
command, not necessarily the most recent. UNDO and !UNDO may
also be undone in this manner.
UP
UP ____
UP edit
If the current expression is a tail of the next higher
UP
UP
expression, UP has no effect. Otherwise the current expression
becomes the form whose first element is the old current
expression.
XTR
XTR ___ ____
(XTR LOC) edit
This command replaces the current expression by one of its
___
subexpressions. The location specification, LOC, gives the form
to be used. Note that only the current expression is searched.
If the current expression is a tail, the command operates on the
first element of the tail.
____ _______
____ _______
____ _______
edit-command
edit-command
0 edit-command
This command makes the current expression the next higher
expression. This usually, but not always, corresponds to
returning to the next higher left parenthesis. This command is,
in some sense, the inverse of the POS-INTEGER and NEG- INTEGER
atomic commands.
_____ ____ _______
_____ ____ _______
_____ ____ _______
## fexpr, edit-command
## ___ ____ ___ fexpr, edit-command
## ([COM:form]): any fexpr, edit-command
EDITOR 7 February 1983 PSL Manual
page 16.26 section 16.3
The value of this fexpr, useful mainly in macros, is the
___
expression which would be current after executing all of the COMs
in sequence. The current expression is not changed.
CHANGE INSERT
CHANGE INSERT
Commands in which this fexpr might be used (e.g. CHANGE, INSERT, and
REPLACE
REPLACE
REPLACE) make special checks and use a copy of the expression returned.
____ _______
____ _______
____ _______
^ edit-command
^ edit-command
^ edit-command
This command makes the top level expression the current
expression.
____ _______
____ _______
____ _______
? edit-command
? edit-command
? edit-command
This command prints the current expression to a level of 100. It
is equivalent to (P 0 100).
____ _______
____ _______
____ _______
?? edit-command
?? edit-command
?? edit-command
This command displays the entries on the undo-list.
____ _______
____ _______
____ _______
_ edit-command
_ edit-command
_ edit-command
This command returns to the position indicated by the most recent
MARK MARK
MARK MARK
MARK command. The MARK is not removed.
____ _______
____ _______
____ _______
_ edit-command
_ ___ edit-command
(_ PAT) edit-command
This command ascends (does repeated 0s), testing the current
___
expression at each ascent for a match with PAT. The current
expression becomes the first form to match. If pattern is
atomic, it is matched with the first element of each expression;
otherwise, it is matched against the entire form.
____ _______
____ _______
____ _______
__ edit-command
__ edit-command
__ edit-command
This command returns to the position indicated by the most recent
MARK MARK
MARK MARK
MARK command and removes the MARK.
PSL Manual 7 February 1983 EDITOR
section 16.3 page 16.27
____ _______
____ _______
____ _______
: edit-command
: ___ edit-command
(: [EXP]) edit-command
Also can be used as:
(:)
___
This command replaces the current expression by the forms EXP.
If no forms are given (as in the second form of the command), the
current expression is deleted.
____ _______
____ _______
____ _______
:: edit-command
___ :: ___ edit-command
(PAT :: LOC) edit-command
This command sets the current expression to the first form (in
___
print order) which matches PAT and contains the form specified by
___
the location specification LOC at any level. The command is
F LCL
F ___ LCL ___ ___
equivalent to (F PAT N), (LCL LOC), (_ PAT).
____ _______
____ _______
____ _______
\ edit-command
\ edit-command
\ edit-command
This command returns to the expression which was current before
the last 'big jump.' Big jumps are caused by these commands: ^,
_, __, !NX, all commands which perform a search or use a location
specification, \ itself, and \P. NOTE: \ is shift-L on a
teletype.
____ _______
____ _______
____ _______
\P edit-command
\P edit-command
\P edit-command
This command returns to the expression which was current before
the last print operation (P, PP or ?). Only the two most recent
locations are saved. NOTE: \ is shift-L on a teletype.
____ _______
____ _______
____ _______
!NX edit-command
!NX edit-command
!NX edit-command
This command makes the next expression at a higher level the
current expression. That is, it goes through any number of right
parentheses to get to the next expression.
____ _______
____ _______
____ _______
!UNDO edit-command
!UNDO edit-command
!UNDO edit-command
EDITOR 7 February 1983 PSL Manual
page 16.28 section 16.3
This command undoes all changes made in the current editing
session (back to the most recent block). All changes are
undoable.
TEST
TEST
Blocks may be inserted by exiting the editor or by the TEST
UNBLOCK
UNBLOCK
command. They may be removed with the UNBLOCK command.
____ _______
____ _______
____ _______
!0 edit-command
!0 edit-command
!0 edit-command
This command does repeated 0s until it reaches an expression
which is not a tail of the next higher expression. That
expression becomes the new current expression. That is, this
command returns to the next higher left parenthesis, regardless
of intervening tails.