user contributed document first distributed with 4.3BSD
authorKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Sat, 31 May 1986 09:49:13 +0000 (01:49 -0800)
committerKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Sat, 31 May 1986 09:49:13 +0000 (01:49 -0800)
SCCS-vsn: contrib/jove-4.14.6/USD.doc/jove.1 6.1
SCCS-vsn: contrib/jove-4.14.6/USD.doc/jove.2 6.1
SCCS-vsn: contrib/jove-4.14.6/USD.doc/jove.3 6.1
SCCS-vsn: contrib/jove-4.14.6/USD.doc/jove.4 6.1

usr/src/contrib/jove-4.14.6/USD.doc/jove.1 [new file with mode: 0644]
usr/src/contrib/jove-4.14.6/USD.doc/jove.2 [new file with mode: 0644]
usr/src/contrib/jove-4.14.6/USD.doc/jove.3 [new file with mode: 0644]
usr/src/contrib/jove-4.14.6/USD.doc/jove.4 [new file with mode: 0644]

diff --git a/usr/src/contrib/jove-4.14.6/USD.doc/jove.1 b/usr/src/contrib/jove-4.14.6/USD.doc/jove.1
new file mode 100644 (file)
index 0000000..9c3e022
--- /dev/null
@@ -0,0 +1,1159 @@
+.\"    @(#)jove.1      6.1 (Berkeley) %G%
+.\"
+.\" ditroff -ms
+.de IQ
+\\fI\\$1\\fP
+..
+.de dc
+.NH 2
+\\$1
+.if '\\$2'(variable)' (variable)
+.if !'\\$2'(variable)' (\\$2)
+.LP
+..
+.nr LL 6.5i
+.nr LT 6.5i
+.EH 'USD:17-%''JOVE Manual for UNIX Users'
+.OH 'JOVE Manual for UNIX Users''USD:17-%'
+.LP
+.TL
+JOVE Manual for UNIX Users
+.AU
+Jonathan Payne
+(revised for 4.3BSD by Doug Kingston and Mark Seiden)
+.AI
+.AB no
+.AE
+.NH 1
+Introduction
+.XS \n(PN
+\*(SN Introduction
+.XE
+.LP
+\s-2JOVE\s0*
+.FS
+*\s-2JOVE\s0 stands for Jonathan's Own Version of Emacs.
+.FE
+is an advanced, self-documenting, customizable real-time display editor.
+It (and this tutorial introduction) are based on the original EMACS editor and user 
+manual written at M.I.T. by Richard Stallman+.
+.FS
++Although \s-2JOVE\s0 is meant to be compatible with EMACS,
+and indeed many of the basic commands are very similar,
+there are some major differences between the two editors,
+and you should not rely on their behaving identically.
+.FE
+.LP
+\s-2JOVE\s0 is considered a
+.I display 
+editor because normally the text being
+edited is visible on the screen and is updated automatically as you
+type your commands.
+.LP
+It's considered a
+.I real-time 
+editor because the display is updated very
+frequently, usually after each character or pair of characters you type.
+This minimizes the amount of information you must keep in your
+head as you edit.
+.LP
+\s-2JOVE\s0 is 
+.I advanced 
+because it provides facilities that go beyond
+simple insertion and deletion:
+filling of text;
+automatic indentations of programs;
+view more than one file at once;
+and dealing in terms of characters, words, lines, sentences and paragraphs.
+It is much easier
+to type one command meaning "go to the end of the paragraph" than to
+find the desired spot with repetition of simpler commands.
+.LP
+.I Self-documenting 
+means that at almost any time you can easily
+find out what a command does,
+or to find all the commands that pertain to a topic.
+.LP
+.I Customizable
+means that you can change the definition of \s-2JOVE\s0 commands
+in little ways.
+For example, you can rearrange the command set;
+if you prefer to use arrow keys for the four basic cursor motion commands
+(up, down, left and right), you can.
+Another sort of customization is
+writing new commands by combining built in commands.
+.NH 1
+The Organization of the Screen
+.XS \n(PN
+\*(SN The Organization of the Screen
+.XE
+.LP
+\s-2JOVE\s0 divides the screen up into several sections.
+The biggest of these sections is used to display the text you are editing.
+The terminal's cursor shows the position of \fIpoint\fP,
+the location at which editing takes place.
+While the cursor appears to point \fIat\fP a character,
+point should be thought of as between characters;
+it points \fIbefore\fP the character that the cursor appears on top of.
+Terminals have only one cursor,
+and when output is in progress it must appear where the typing is being done.
+This doesn't mean that point is moving;
+it is only that \s-2JOVE\s0 has no way of
+showing you the location of point except when the terminal is idle.
+.LP
+The lines of the screen are usually available for displaying text but
+sometimes are pre-empted by typeout from certain commands (such as a
+listing of all the editor commands).
+Most of the time,
+output from commands like these is only desired for a short period of time,
+usually just long enough to glance at it.
+When you have finished looking at the output,
+you can type Space to make your text reappear.
+(Usually a Space that you type inserts itself, but when there is typeout on
+the screen, it does nothing but get rid of that).
+Any other command executes normally,
+.I after
+redrawing your text.
+.NH 2
+The Message Line
+.XS \n(PN 5n
+\*(SN The Message Line
+.XE
+.LP
+The bottom line on the screen, called the
+\fImessage line\fP,
+is reserved for printing messages and for accepting input from the user,
+such as filenames or search strings.
+When
+\s-2JOVE\s0 
+prompts for input,
+the cursor will temporarily appear on the bottom line, waiting for you
+to type a string.
+When you have finished typing your input, you can
+type a Return to send it to \s-2JOVE\s0.
+If you change your mind about running the command that is waiting for input,
+you can type Control-G to abort,
+and you can continue with your editing.
+.LP
+When \s-2JOVE\s0 is prompting for a filename,
+all the usual editing facilities can be used to fix typos and such;
+in addition, \s-2JOVE\s0 has the following extra functions:
+.IP "^N"
+Insert the next filename from the argument list.
+.IP "^P"
+Insert the previous filename from the argument list.
+.IP "^R"
+Insert the full pathname of the file in the current buffer.
+.LP
+Sometimes you will see \fB--more--\fP on the message line.
+This happens when typeout from a command is too long to fit in the screen.
+It means that if you type a Space the next screenful of typeout will be
+printed.
+If you are not interested,
+typing anything but a Space will cause the rest of the output to be discarded.
+Typing C-G will discard the output and print \fIAborted\fP where the \fB--more--\fP was.
+Typing any other command will discard the rest of the output and
+also execute the command.
+.LP
+The message line and the list of filenames from the shell command that
+invoked \s-2JOVE\s0 are kept in a special buffer called
+\fIMinibuf\fP that can be edited like any other buffer.
+.NH 2
+The Mode Line
+.XS \n(PN 5n
+\*(SN The Mode Line
+.XE
+.LP
+At the bottom of the screen, but above the message line, is the
+\fImode line\fP.  The mode line format looks like this:
+.DS I
+\fBJOVE (major minor)   Buffer: bufr  "file" *\fP
+.DE
+\fImajor\fP is the name of the current \fImajor mode\fP.
+At any time, \s-2JOVE\s0 can be in only one major mode at a time.
+Currently there are only four major modes: \fIFundamental\fP,
+\fIText\fP, \fILisp\fP and \fIC\fP.
+.LP
+\fIminor\fP is a list of the minor modes that are turned on.
+\fBAbbrev\fP means that \fIWord Abbrev\fP mode is on;
+\fBAI\fP means that \fIAuto Indent\fP mode is on;
+\fBFill\fP means that \fIAuto Fill\fP mode is on;
+\fBOvrWt\fP means that \fIOver Write\fP mode is on.
+\fBDef\fP means that you are in the process of defining a keyboard macro.
+This is not really a mode,
+but it's useful to be reminded about it.
+The meanings of these modes are described later in this document.
+.LP
+\fIbufr\fP is the name of the currently selected \fIbuffer\fP.
+Each buffer has its own name and holds a file being edited;
+this is how \s-2JOVE\s0 can hold several files at once.
+But at any given time you are editing only one of them,
+the \fIselected\fP buffer.
+When we speak of what some command does to "the buffer",
+we are talking about the currently selected buffer.
+Multiple buffers makes it easy to switch around between several files,
+and then it is very useful that
+the mode line tells you which one you are editing at any time.  (You
+will see later that it is possible to divide the
+screen into multiple \fIwindows\fP, each showing a different buffer.  If you
+do this, there is a mode line beneath each window.)
+.LP
+\fIfile\fP is the name of the file that you are editing.
+This is the default filename for commands that expect a filename as input.
+.LP
+The asterisk at the end of the mode line means that there are changes in
+the buffer that have not been saved in the file.
+If the file has not been changed since it was read in or saved,
+there is no asterisk.
+.NH 1
+Command Input Conventions
+.XS \n(PN
+\*(SN Command Input Conventions
+.XE
+.LP
+.NH 2
+Notational Conventions for ASCII Characters
+.XS \n(PN 5n
+\*(SN Notational Conventions for ASCII Characters
+.XE
+.LP
+In this manual,
+"Control" characters
+(that is, characters that are typed with the Control key
+and some other key at the same time)
+are represented by "C-" followed by another character.
+Thus,
+C-A is the character you get when you type A with the Control key
+(sometimes labeled CTRL) down.
+Most control characters when present in the \s-2JOVE\s0
+buffer are displayed with a caret; thus, ^A for C-A.
+Rubout (or DEL) is displayed as ^?, escape as ^[.
+.NH 2
+Command and Filename Completion
+.XS \n(PN 5n
+\*(SN Command and Filename Completion
+.XE
+.LP
+When you are typing the name of a \s-2JOVE\s0 command, you need type only
+enough letters to make the name unambiguous.  At any point in the course of
+typing the name, you can type question mark (?) to see a list of all the
+commands whose names begin with the characters you've already typed; you can
+type Space to have \s-2JOVE\s0 supply as many characters as it can; or you
+can type Return to complete the command if there is only one possibility.
+For example, if you have typed the letters "\fIau\fP" and you then type a
+question mark, you will see the list
+.DS I
+   auto-execute-command
+   auto-execute-macro
+   auto-fill-mode
+   auto-indent-mode
+.DE
+If you type a Return at this point, \s-2JOVE\s0 will complain by ringing
+the bell, because the letters you've typed do not unambiguously specify a
+single command.  But if you type Space, \s-2JOVE\s0 will supply the
+characters "\fIto-\fP" because all commands that begin "\fIau\fP" also
+begin "\fIauto-\fP".  You could then type the letter "\fIf\fP" followed
+by either Space or Return, and \s-2JOVE\s0 would complete the entire
+command.
+.LP
+Whenever \s-2JOVE\s0 is prompting you for a filename,
+say in the \fIfind-file\fP command,
+you also need only type enough of the name to make it unambiguous with
+respect to files that already exist.  In this case, question mark and
+Space work just as they do in command completion, but Return always
+accepts the name just as you've typed it, because you might want to
+create a new file with a name similar to that of an existing file.
+.NH 1
+Commands and Variables
+.XS \n(PN
+\*(SN Commands and Variables
+.XE
+.LP
+\s-2JOVE\s0 is composed of \fIcommands\fP
+which have long names such as
+\fInext-line\fP.
+Then \fIkeys\fP such as C-N are connected to
+commands through the \fIcommand dispatch table\fP.
+When we say that C-N moves the cursor down a line,
+we are glossing over a distinction which is unimportant for ordinary use,
+but essential for simple customization:
+it is the command \fInext-line\fP which knows how to move a down line,
+and C-N moves down a line because it is connected to that command.
+The name for this connection is a \fIbinding\fP; we say that the key
+C-N \fIis bound to\fP the command \fInext-line\fP.
+.LP
+Not all commands are bound to keys.  To invoke a command that isn't bound
+to a key, you can type the sequence ESC X, which is bound to the command
+\fIexecute-named-command\fP.  You will then be able to type the name of
+whatever command you want to execute on the message line.
+.LP
+Sometimes the description of a command will say
+"to change this, set the variable \fImumble\-foo\fP".
+A variable is a name used to remember a value.
+\s-2JOVE\s0 contains variables which are there so that you can change
+them if you want to customize.
+The variable's value is examined by some command,
+and changing that value makes the command behave differently.
+Until you are interesting in customizing \s-2JOVE\s0,
+you can ignore this information.
+.NH 2
+Prefix Characters
+.XS \n(PN 5n
+\*(SN Prefix Characters
+.XE
+.LP
+Because there are more command names than keys,
+\s-2JOVE\s0 provides
+\fIprefix characters\fP to increase the number of commands that can
+be invoked quickly and easily.
+When you type a prefix character \s-2JOVE\s0 will wait
+for another character before deciding what to do.
+If you wait more than a second or so,
+\s-2JOVE\s0 will print the prefix character on the
+message line as a reminder and leave the cursor down there until you type your next
+character.
+There are two prefix characters built into \s-2JOVE\s0:
+Escape and Control-X.
+How the next character is interpreted depends on which
+prefix character you typed.
+For example,
+if you type Escape followed by B you'll run \fIbackward-word\fP,
+but if you type Control-X followed by B you'll run \fIselect-buffer\fP.
+Elsewhere in this manual, the Escape key is indicated as "ESC", which is
+also what \s-2JOVE\s0 displays on the message line for Escape.
+.NH 2
+Help
+.XS \n(PN
+\*(SN Help
+.XE
+.LP
+To get a list of keys and their associated commands,
+you type ESC X \fIdescribe-bindings\fP.
+If you want to describe a single key,
+ESC X \fIdescribe-key\fP will work.  A description of an
+individual command is available by using ESC X \fIdescribe-command\fP,
+and descriptions of variables by using  ESC X \fIdescribe-variable\fP.
+If you can't remember the name of the thing you want to know about,
+ESC X \fIapropos\fP will tell you if a command or variable has a given
+string in its name.  For example, ESC X \fIapropos describe\fP will
+list the names of the four describe commands mentioned briefly in this
+section.
+.NH 1
+Basic Editing Commands
+.XS \n(PN
+\*(SN Basic Editing Commands
+.XE
+.LP
+.NH 2
+Inserting Text
+.XS \n(PN 5n
+\*(SN Inserting Text
+.XE
+.LP
+To insert printing characters into the text you are editing,
+just type them.
+All printing characters you type are inserted into the text at
+the cursor (that is, at \fIpoint\fP),
+and the cursor moves forward.
+Any characters after the cursor move forward too.
+If the text in the buffer is FOOBAR,
+with the cursor before the B,
+then if you type XX,
+you get FOOXXBAR,
+with the cursor still before the B.
+.LP
+To correct text you have just inserted,
+you can use Rubout.
+Rubout deletes the character \fIbefore\fP the cursor (not the one that the
+cursor is on top of or under; that is the character \fIafter\fP the
+cursor).
+The cursor and all characters after it move backwards.
+Therefore,
+if you typing a printing character and then type Rubout,
+they cancel out.
+.LP
+To end a line and start typing a new one,
+type Return.
+Return operates by inserting a \fIline-separator\fP,
+so if you type Return in
+the middle of a line,
+you break the line in two.
+Because a line-separator is just a single character,
+you can type Rubout at the
+beginning of a line to delete the line-separator and join it with the
+preceding line.
+.LP
+As a special case, if you type Return at the end of a line and there are
+two or more empty lines just below it, \s-2JOVE\s0 does not insert a
+line-separator but instead merely moves to the next (empty) line.  This
+behavior is convenient when you want to add several lines of text in the
+middle of a buffer.  You can use the Control-O (\fInewline-and-backup\fP)
+command to "open" several empty lines at once; then you can insert the new
+text, filling up these empty lines.  The advantage is that \s-2JOVE\s0 does
+not have to redraw the bottom part of the screen for each Return you type,
+as it would ordinarily.  That "redisplay" can be both slow and distracting.
+.LP
+If you add too many characters to one line,
+without breaking it with Return,
+the line will grow too long to display on one screen line.
+When this happens,
+\s-2JOVE\s0 puts an "!" at the extreme right margin,
+and doesn't bother to display the rest of the line unless the
+cursor happens to be in it.
+The "!" is not part of your text;
+conversely,
+even though you can't see the rest of your line,
+it's still there,
+and if you break the line,
+the "!" will go away.
+.LP
+Direct insertion works for printing characters and space,
+but other
+characters act as editing commands and do not insert themselves.
+If you need to insert a control character,
+Escape,
+or Rubout,
+you must first \fIquote\fP it by typing the Control-Q command first.
+.NH 2
+Moving the Cursor
+.XS \n(PN 5n
+\*(SN Moving the Cursor
+.XE
+.LP
+To do more than insert characters,
+you have to know how to move the cursor.
+Here are a few of the commands for doing that.
+.IP "C-A" 15n
+Move to the beginning of the line.
+.IP "C-E" 15n
+Move to the end of the line.
+.IP "C-F" 15n
+Move forward over one character.
+.IP "C-B" 15n
+Move backward over one character.
+.IP "C-N" 15n
+Move down one line,
+vertically.
+If you start in the middle of one line,
+you end in the middle of the next.
+.IP "C-P" 15n
+Move up one line,
+vertically.
+.IP "ESC <" 15n
+Move to the beginning of the entire buffer.
+.IP "ESC >" 15n
+Move to the end of the entire buffer.
+.IP "ESC ," 15n
+Move to the beginning of the visible window.
+.IP "ESC ." 15n
+Move to the end of the visible window.
+.NH 2
+Erasing Text
+.XS \n(PN 5n
+\*(SN Erasing Text
+.XE
+.LP
+.IP "Rubout" 15n
+Delete the character before the cursor.
+.IP "C-D" 15n
+Delete the character after the cursor.
+.IP "C-K" 15n
+Kill to the end of the line.
+.LP
+You already know about the Rubout command which deletes the character
+before the cursor.
+Another command,
+Control-D,
+deletes the character
+after the cursor,
+causing the rest of the text on the line to shift left.
+If Control-D is typed at the end of a line,
+that line and the next line are joined together.
+.LP
+To erase a larger amount of text,
+use the Control-K command,
+which kills a line at a time.
+If Control-K is done at the beginning or
+middle of a line,
+it kills all the text up to the end of the line.
+If Control-K is done at the end of a line,
+it joins that line and the next line.
+If Control-K is done twice, it kills the rest of the line and the line
+separator also.
+.NH 2
+Files \(em Saving Your Work
+.XS \n(PN 5n
+\*(SN Files \(em Saving Your Work
+.XE
+.LP
+The commands above are sufficient for creating text in the \s-2JOVE\s0 buffer.
+The more advanced \s-2JOVE\s0 commands just make things easier.
+But to keep any text permanently you must put it in a \fIfile\fP.
+Files are the objects which
+.UX
+uses for storing data for a length of time.
+To tell \s-2JOVE\s0 to read text into a file,
+choose a filename,
+such as \fIfoo.bar\fP,
+and type C-X C-R \fIfoo.bar\fP<return>.
+This reads the file \fIfoo.bar\fP so that its contents appear on the screen
+for editing.
+You can make changes,
+and then save the file by typing C-X C-S (save-file).
+This makes the changes permanent and actually changes the file \fIfoo.bar\fP.
+Until then,
+the changes are only inside \s-2JOVE\s0,
+and the file \fIfoo.bar\fP is not really changed.
+If the file \fIfoo.bar\fP doesn't exist,
+and you want to create it,
+read it as if it did exist.
+When you save your text with C-X C-S the file will be created.
+.NH 2
+Exiting and Pausing \(em Leaving \s-2JOVE\s0
+.XS \n(PN 5n
+\*(SN Exiting and Pausing \(em Leaving \s-2JOVE\s0
+.XE
+.LP
+The command C-X C-C (\fIexit-jove\fP) will terminate the \s-2JOVE\s0
+session and return to the shell.  If there are modified but 
+unsaved buffers, \s-2JOVE\s0 will ask you for confirmation, and you
+can abort the command, look at what buffers are
+modified but unsaved using C-X C-B (\fIlist-buffers\fP), save the 
+valuable ones, and then exit.  If what you want to do, on the other hand,
+is \fIpreserve\fP the editing session but return to the shell temporarily
+you can (under Berkeley 
+.UX
+only) issue the command ESC S (\fIpause-jove\fP), do your 
+.UX 
+work within the c-shell, then return to \s-2JOVE\s0 using the 
+\fIfg\fP command to resume editing at the point where you paused.
+For this sort of situation you might consider using an \fIinteractive
+shell\fP (that is, a shell in a \s-2JOVE\s0 window) which lets you use
+editor commands to manipulate your 
+.UX 
+commands (and their output) while never leaving the editor.
+(The interactive shell feature is described below.)
+.NH 2
+Giving Numeric Arguments to \s-2JOVE\s0 Commands
+.XS \n(PN 5n
+\*(SN Giving Numeric Arguments to \s-2JOVE\s0 Commands
+.XE
+.LP
+Any \s-2JOVE\s0 command can be given a \fInumeric argument\fP.
+Some commands interpret the argument as a repetition count.
+For example,
+giving an argument of ten to the C-F command (forward-character) moves forward
+ten characters.
+With these commands,
+no argument is equivalent to an argument of 1.
+.LP
+Some commands use the value of the argument,
+but do something peculiar (or nothing) when there is no argument.
+For example,
+ESC G (\fIgoto-line\fP) with an argument \fBn\fP
+goes to the beginning of the \fBn\fP'th line.
+But ESC G with no argument doesn't do anything.
+Similarly, C-K with an argument kills that many lines, including their line
+separators.  Without an argument, C-K when there is text on the line to the
+right of
+the cursor kills that text; when there is no text after the cursor, C-K
+deletes the line separator.
+.LP
+The fundamental way of specifying an argument is to use ESC followed
+by the digits of the argument, for example, ESC 123 ESC G to go to line
+123. Negative arguments are allowed,
+although not all of the commands know what to do with one.
+.LP
+Typing C-U means do the next command four times.
+Two such C-U's multiply the next command by sixteen.
+Thus,
+C-U C-U C-F moves forward sixteen characters.
+This is a good way to move forward quickly,
+since it moves about 1/4 of a line on most terminals.
+Other useful combinations are:
+C-U C-U C-N (move down a good fraction of the screen),
+C-U C-U C-O (make "a lot" of blank lines),
+and C-U C-K (kill four lines \(em note that typing C-K four times
+would kill 2 lines).
+.LP
+There are other,
+terminal-dependent ways of specifying arguments.
+They have the same effect but may be easier to type.
+If your terminal
+has a numeric keypad which sends something recognizably different from
+the ordinary digits,
+it is possible to program \s-2JOVE\s0 to to allow use of
+the numeric keypad for specifying arguments.
+.NH 2
+The Mark and the Region
+.XS \n(PN 5n
+\*(SN The Mark and the Region
+.XE
+.LP
+In general,
+a command that processes an arbitrary part of the buffer
+must know where to start and where to stop.
+In \s-2JOVE\s0,
+such commands usually operate on the text between point and \fIthe mark\fP.
+This body of text is called \fIthe region\fP.
+To specify a region,
+you set point to one end of it and mark at the other.
+It doesn't matter which one comes earlier in the text.
+.IP "C-@" 15n
+Set the mark where point is.
+.IP "C-X C-X" 15n
+Interchange mark and point.
+.LP
+For example,
+if you wish to convert part of the buffer to all upper-case,
+you can use the C-X C-U command,
+which operates on the text in the region.
+You can first go to the beginning of the text to be capitalized,
+put the mark there, move to the end, and then type C-X C-U.
+Or,
+you can set the mark at the end of the text,
+move to the beginning,
+and then type C-X C-U.
+C-X C-U runs the command \fIcase-region-upper\fP,
+whose name signifies that the region,
+or everything between point and mark,
+is to be capitalized.
+.LP
+The way to set the mark is with the C-@ command or (on some
+terminals) the C-Space command.
+They set the mark where point is.
+Then you can move point away,
+leaving mark behind.  When the mark is set, "[Point pushed]" is printed on
+the message line.
+.LP
+Since terminals have only one cursor,
+there is no way for \s-2JOVE\s0 to show you where the mark is located.
+You have to remember.
+The usual solution to this problem is to set the mark and then use it soon,
+before you forget where it is.
+But you can see where the mark is with
+the command C-X C-X which puts the mark where point was and point
+where mark was.
+The extent of the region is unchanged,
+but the cursor and point are now at the previous location of the mark.
+.NH 2
+The Ring of Marks
+.XS \n(PN 5n
+\*(SN The Ring of Marks
+.XE
+.LP
+Aside from delimiting the region,
+the mark is also useful for remembering a spot that you may want to go back to.
+To make this feature more useful,
+\s-2JOVE\s0 remembers 16 previous locations of the mark.
+Most commands that set the mark push the old mark onto this stack.
+To return to a marked location, use C-U C-@.
+This moves point to where the mark was,
+and restores the mark from the stack of former marks.
+So repeated use of this command moves point to all of the old
+marks on the stack,
+one by one.
+Since the stack is actually a ring,
+enough uses of C-U C-@ bring point back to where it was originally.
+.LP
+Some commands whose primary purpose is to move point a great distance
+take advantage of the stack of marks to give you a way to undo the
+command.
+The best example is ESC <,
+which moves to the beginning of the buffer.
+If there are more than 22 lines between the beginning of
+the buffer and point,
+ESC < sets the mark first,
+so that you can use C-U C-@ or C-X C-X to go back to where you were.
+You can change the number of lines from 22 since it is kept in the variable \fImark-threshold\fP.
+By setting it to 0,
+you can make these commands always set the mark.
+By setting it to a very large number you can prevent these commands from ever
+setting the mark.
+If a command decides to set the mark,
+it prints the message \fI[Point pushed]\fP.
+.NH 2
+Killing and Moving Text
+.XS \n(PN 5n
+\*(SN Killing and Moving Text
+.XE
+.LP
+The most common way of moving or copying text with \s-2JOVE\s0 is to kill it,
+and get it back again in one or more places.
+This is very safe
+because the last several pieces of killed text are all remembered,
+and it is versatile,
+because the many commands for killing syntactic units
+can also be used for moving those units.
+There are also other ways of moving text for special purposes.
+.NH 2
+Deletion and Killing
+.XS \n(PN 5n
+\*(SN Deletion and Killing
+.XE
+.LP
+Most commands which erase text from the buffer save it so that you can
+get it back if you change your mind,
+or move or copy it to other parts of the buffer.
+These commands are known as \fIkill\fP commands.
+The rest of the commands that erase text do not save it;
+they are known as \fIdelete\fP commands.
+The delete commands include C-D and Rubout,
+which delete only one character at a time,
+and those commands that delete only spaces or line separators.
+Commands that can destroy significant amounts of nontrivial data generally kill.
+A command's
+name and description will use the words \fIkill\fP or \fIdelete\fP to
+say which one it does.
+.IP "C-D" 20n
+Delete next character.
+.IP "Rubout" 20n
+Delete previous character.
+.IP "ESC \\\\\\\\" 20n
+Delete spaces and tabs around point.
+.IP "C-X C-O" 20n
+Delete blank lines around the current line.
+.IP "C-K" 20n
+Kill rest of line or one or more lines.
+.IP "C-W" 20n
+Kill region (from point to the mark).
+.IP "ESC D" 20n
+Kill word.
+.IP "ESC Rubout" 20n
+Kill word backwards.
+.IP "ESC K" 20n
+Kill to end of sentence.
+.IP "C-X Rubout" 20n
+Kill to beginning of sentence.
+.NH 2
+Deletion
+.XS \n(PN 5n
+\*(SN Deletion
+.XE
+.LP
+The most basic delete commands are C-D and Rubout.
+C-D deletes the character after the cursor,
+the one the cursor is "on top of" or "underneath".
+The cursor doesn't move.
+Rubout deletes the character before the cursor,
+and moves the cursor back.
+Line separators act like normal characters when deleted.
+Actually,
+C-D and Rubout aren't always \fIdelete\fP commands;
+if you give an argument,
+they \fIkill\fP instead.
+This prevents you from losing a great deal of text by typing a large
+argument to a C-D or Rubout.
+.LP
+The other delete commands are those which delete only formatting
+characters:
+spaces,
+tabs,
+and line separators.
+ESC \\ (\fIdelete-white-space\fP)
+deletes all the spaces and tab characters before and after point.
+C-X C-O (\fIdelete-blank-lines\fP) deletes all blank lines after the current line,
+and if the current line is blank deletes all the blank
+lines preceding the current line as well
+(leaving one blank line, the current line).
+.NH 2
+Killing by Lines
+.XS \n(PN 5n
+\*(SN Killing by Lines
+.XE
+.LP
+The simplest kill command is the C-K command.
+If issued at the beginning of a line,
+it kills all the text on the line,
+leaving it blank.
+If given on a line containing only white space (blanks and tabs)
+the line disappears.
+As a consequence,
+if you go to the front of a non-blank line and type two C-K's,
+the line disappears completely.
+.LP
+More generally,
+C-K kills from point up to the end of the line,
+unless it is at the end of a line.
+In that case,
+it kills the line separator following the line,
+thus merging the next line into the current one.
+Invisible spaces and tabs at the end of the line are ignored when
+deciding which case applies,
+so if point appears to be at the end of the line,
+you can be sure the line separator will be killed.
+.LP
+C-K with an argument of zero kills all the text before
+point on the current line.
+.NH 2
+Other Kill Commands
+.XS \n(PN 5n
+\*(SN Other Kill Commands
+.XE
+.LP
+A kill command which is very general is C-W (\fIkill-region\fP),
+which kills everything between point and the mark.*
+.FS
+*Often users switch this binding from C-W to C-X C-K because it is too
+easy to hit C-W accidentally.
+.FE
+With this command,
+you can kill and save contiguous characters,
+if you first set the mark at one end of them and go to the other end.
+.LP
+Other syntactic units can be killed, too;
+words,
+with ESC Rubout and ESC D;
+and, sentences,
+with ESC K and C-X Rubout.
+.NH 2
+Un-killing
+.XS \n(PN 5n
+\*(SN Un-killing (Yanking)
+.XE
+.LP
+Un-killing (yanking) is getting back text which was killed.
+The usual way to
+move or copy text is to kill it and then un-kill it one or more times.
+.IP "C-Y" 10n
+Yank (re-insert) last killed text.
+.IP "ESC Y" 10n
+Replace re-inserted killed text with the previously killed text.
+.IP "ESC W" 10n
+Save region as last killed text without killing.
+.LP
+Killed text is pushed onto a \fIring buffer\fP called the \fIkill
+ring\fP that remembers the last 10 blocks of text that were killed.
+(Why it is called a ring buffer will be explained below).
+The command C-Y (\fIyank\fP) reinserts the text of the most recent kill.
+It leaves the cursor at the end of the text,
+and puts the mark at the beginning.
+Thus,
+a single C-Y undoes the C-W.
+.LP
+If you wish to copy a block of text,
+you might want to use ESC W (\fIcopy-region\fP),
+which copies the region into the kill ring without removing it from the buffer.
+This is approximately equivalent to C-W followed by C-Y,
+except that ESC W does not mark the buffer as
+"changed" and does not cause the screen to be rewritten.
+.LP
+There is only one kill ring shared among all the buffers.
+After visiting a new file,
+whatever was last killed in the previous file is still on top of the kill ring.
+This is important for moving text between files.
+.NH 2
+Appending Kills
+.XS \n(PN 5n
+\*(SN Appending Kills
+.XE
+.LP
+Normally,
+each kill command pushes a new block onto the kill ring.
+However,
+two or more kill commands immediately in a row (without any other
+intervening commands) combine their text into a
+single entry on the ring,
+so that a single C-Y command gets it all back as it was before it was killed.
+This means that you don't have to kill all the text in one command;
+you can keep killing line after line,
+or word after word,
+until you have killed it all,
+and you can still get it all back at once.
+.LP
+Commands that kill forward from 
+.I point 
+add onto the end of the previous
+killed text.
+Commands that kill backward from 
+.I point
+add onto the beginning.
+This way,
+any sequence of mixed forward and backward kill
+commands puts all the killed text into one entry without needing rearrangement.
+.NH 2
+Un-killing Earlier Kills
+.XS \n(PN 5n
+\*(SN Un-killing Earlier Kills
+.XE
+.LP
+To recover killed text that is no longer the most recent kill,
+you need the ESC Y (\fIyank-pop\fP) command.
+The ESC Y command can be used
+only after a C-Y (yank) command or another ESC Y.
+It takes the un-killed
+text inserted by the C-Y and replaces it with the text from an earlier
+kill.
+So,
+to recover the text of the next-to-the-last kill,
+you first use C-Y to recover the last kill,
+and then discard it by use of ESC Y to move back to the previous kill.
+.LP
+You can think of all the last few kills as living on a ring.
+After a C-Y command,
+the text at the front of the ring is also present in the buffer.
+ESC Y "rotates" the ring bringing the previous string of text to the front
+and this text replaces the other text in the buffer as well.
+Enough ESC Y commands can rotate any part of the ring to the front,
+so you can get at any killed text so long as it is recent enough
+to be still in the ring.
+Eventually the ring rotates all the way
+around and the most recently killed text comes to the front
+(and into the buffer) again.
+ESC Y with a negative argument rotates the ring backwards.
+.LP
+When the text you are looking for is brought into the buffer,
+you can stop doing ESC Y's and the text will stay there.
+It's really just a copy of what's at the front of the ring,
+so editing it does not change what's in the ring.
+And the ring,
+once rotated,
+stays rotated,
+so that doing another C-Y gets another copy of what you rotated to the
+front with ESC Y.
+.LP
+If you change your
+mind about un-killing,
+C-W gets rid of the un-killed text, even
+after any number of ESC Y's.
+.NH 1
+Searching
+.XS \n(PN
+\*(SN Searching
+.XE
+.LP
+The search commands are useful for finding and moving to arbitrary
+positions in the buffer in one swift motion.
+For example,
+if you just ran the spell program on a paper
+and you want to correct some word,
+you can use the search commands to move directly to that word.  There are
+two flavors of search: \fIstring search\fP and \fIincremental search\fP.
+The former is the default flavor\(emif you want to use incremental search
+you must rearrange the key bindings (see below).
+.NH 2
+Conventional Search
+.XS \n(PN 5n
+\*(SN Conventional Search
+.XE
+.LP
+.IP "C-S" 15n
+Search forward.
+.IP "C-R" 15n
+Search backward.
+.LP
+To search for the string "FOO" you type "C-S FOO<return>".
+If \s-2JOVE\s0 finds
+FOO it moves point to the end of it; otherwise \s-2JOVE\s0 prints an error
+message and leaves point unchanged.
+C-S searches forward from point
+so only occurrences of FOO after point are found.
+To search in the other direction use C-R.
+It is exactly the same as C-S except it searches in the opposite direction,
+and if it finds the string,
+it leaves point at the beginning of it,
+not at the end as in C-S.
+.LP
+While \s-2JOVE\s0 is searching it prints the search string on the message line.
+This is so you know what \s-2JOVE\s0 is doing.
+When the system is heavily loaded and
+editing in exceptionally large buffers,
+searches can take several (sometimes many) seconds.
+.LP
+\s-2JOVE\s0 remembers the last search string you used,
+so if you want to search for the same string you can type "C-S <return>".
+If you mistyped the last search string,
+you can type C-S followed by C-R.
+C-R,
+as usual,
+inserts the default search string into the minibuffer,
+and then you can fix it up.
+.NH 2
+Incremental Search
+.XS \n(PN 5n
+\*(SN Incremental Search
+.XE
+.LP
+This search command is unusual in that is is \fIincremental\fP;
+it begins to search before you have typed the complete search string.
+As you type in the search string,
+\s-2JOVE\s0 shows you where it would be found.
+When you have typed enough characters to identify the place you want,
+you can stop.
+Depending on what you will do next,
+you may or may not need to terminate the search explicitly with a Return first.
+.LP
+The command to search is C-S (\fIi-search-forward\fP).
+C-S reads in characters and positions the cursor at the first
+occurrence of the characters that you have typed so far.
+If you type C-S and then F,
+the cursor moves in the text just after the next "F".
+Type an "O",
+and see the cursor move to after the next "FO".
+After another "O",
+the cursor is after the next "FOO".
+At the same time,
+the "FOO" has echoed on the message line.
+.LP
+If you type a mistaken character,
+you can rub it out.
+After the FOO,
+typing a Rubout makes the "O" disappear from the message line,
+leaving only "FO".
+The cursor moves back in the buffer to the "FO".
+Rubbing out the "O" and "F" moves the cursor back to where you
+started the search.
+.LP
+When you are satisfied with the place you have reached,
+you can type a Return,
+which stops searching,
+leaving the cursor where the search brought it.
+Also,
+any command not specially meaningful in searches stops
+the searching and is then executed.
+Thus,
+typing C-A would exit the search and then move to the beginning of the line.
+Return is necessary only if the next character you want to type is a printing
+character,
+Rubout,
+Return,
+or another search command,
+since those are the characters that have special meanings inside the search.
+.LP
+Sometimes you search for "FOO" and find it,
+but not the one you hoped to find.
+Perhaps there is a second FOO that you forgot about,
+after the one you just found.
+Then type another C-S and the cursor will find the next FOO.
+This can be done any number of times.
+If you overshoot,
+you can return to previous finds by rubbing out the C-S's.
+.LP
+After you exit a search,
+you can search for the same string again by typing just C-S C-S:
+one C-S command to start the search and then
+another C-S to mean "search again for the same string".
+.LP
+If your string is not found at all,
+the message line says "Failing I-search".
+The cursor is after the place where \s-2JOVE\s0 found as much of
+your string as it could.
+Thus,
+if you search for FOOT and there is no FOOT,
+you might see the cursor after the FOO in FOOL.
+At this point there are several things you can do.
+If your string was mistyped,
+you can rub some of it out and correct it.
+If you like the place you have found,
+you can type Return or some other \s-2JOVE\s0 command
+to "accept what the search offered".
+Or you can type C-G,
+which undoes the search altogether and positions you back where you started
+the search.
+.LP
+You can also type C-R at any time to start searching backwards.
+If a search fails because the place you started was too late in the file,
+you should do this.
+Repeated C-R's keep looking backward for more occurrences of the last search string.
+A C-S starts going forward again.
+C-R's can be rubbed out just like anything else.
+.NH 2
+Searching with Regular Expressions
+.XS \n(PN 5n
+\*(SN Searching with Regular Expressions
+.XE
+.LP
+In addition to the searching facilities described above,
+\s-2JOVE\s0
+can search for patterns using regular expressions.
+The handling of regular expressions in \s-2JOVE\s0 is like that of \fIed(1)\fP
+or \fIvi(1)\fP, but with some notable additions.
+The extra metacharacters understood by \s-2JOVE\s0 are \e<,
+\e>,
+\e\|| and \e\|{.
+The first two of these match the beginnings and endings of words;
+Thus the search pattern,
+"\|\e<Exec" would match all words beginning with the letters "Exec".
+.LP
+An \e\|| signals the beginning of an alternative \(em that is, the
+pattern "foo\e\||bar" would match either "foo" or "bar".  The "curly
+brace" is a way of introducing several sub-alternatives into a pattern.
+It parallels the [] construct of regular expressions, except it specifies
+a list of alternative words instead of just alternative characters.  So
+the pattern "foo\e\|{bar,baz\e\|}bie" matches "foobarbie" or "foobazbie".
+.LP
+\s-2JOVE\s0 only regards metacharacters as special if the variable
+\fImatch-regular-expressions\fP is set to "on".
+The ability to have \s-2JOVE\s0 ignore these characters is useful if
+you're editing a document about patterns and regular expressions or
+when a novice is learning \s-2JOVE\s0.
+.LP
+Another variable that affects searching is \fIcase-ignore-search\fP.  If
+this variable is set to "on" then upper case and lower case letters are
+considered equal.
+.NH 1
+Replacement Commands
+.XS \n(PN
+\*(SN Replacement Commands
+.XE
+.LP
+Global search-and-replace operations are not needed as often in \s-2JOVE\s0
+as they are in other editors,
+but they are available.
+In addition to
+the simple Replace operation which is like that found in most editors,
+there is a Query Replace operation which asks,
+for each occurrence of the pattern,
+whether to replace it.
+.NH 2
+Global replacement
+.XS \n(PN 5n
+\*(SN Global Replacement
+.XE
+.LP
+To replace every occurrence of FOO after point with BAR,
+you can do, e.g., "ESC R FOO<return>BAR" as the \fIreplace-string\fP command
+is bound to the ESC R.
+Replacement takes place only between point and the end of the buffer
+so if you want to cover the whole buffer you must go to the beginning first.
+.NH 2
+Query Replace
+.XS \n(PN 5n
+\*(SN Query Replace
+.XE
+.LP
+If you want to change only some of the occurrences of FOO,
+not all,
+then the global \fIreplace-string\fP is inappropriate;
+Instead,
+use, e.g., "ESC Q FOO<return>BAR", to run the command \fIquery-replace-string\fP.
+This displays each occurrence of FOO and waits for you to say whether
+to replace it with a BAR.
+The things you can type when you are shown an occurrence of FOO are:
+.IP "Space" 15n
+to replace the FOO.
+.IP "Rubout" 15n
+to skip to the next FOO without replacing this one.
+.IP "Return" 15n
+to stop without doing any more replacements.
+.IP "Period" 15n
+to replace this FOO and then stop.
+.IP "! or P" 15n
+to replace all remaining FOO's without asking.
+.IP "C-R or R" 15n
+to enter a recursive editing level,
+in case the FOO needs to be edited rather than just replaced with a BAR.
+When you are done,
+exit the recursive editing level with C-X C-C and the next FOO will
+be displayed.
+.IP "C-W" 15n
+to delete the FOO, and then start editing the buffer.
+When you are finished editing whatever is to replace the FOO,
+exit the recursive editing level with C-X C-C
+and the next FOO will be displayed.
+.IP "U" 15n
+move to the last replacement and undo it.
+.LP
+Another alternative is using \fIreplace-in-region\fP which is just like
+\fIreplace-string\fP except it searches only within the region.
+.LP
diff --git a/usr/src/contrib/jove-4.14.6/USD.doc/jove.2 b/usr/src/contrib/jove-4.14.6/USD.doc/jove.2
new file mode 100644 (file)
index 0000000..159de46
--- /dev/null
@@ -0,0 +1,1125 @@
+.\"    @(#)jove.2      6.1 (Berkeley) %G%
+.\"
+.NH 1
+Commands for English Text
+.XS \n(PN
+\*(SN Commands for English Text
+.XE
+.LP
+\s-2JOVE\s0 has many commands that work on the basic units of English text:
+words, sentences and paragraphs.
+.NH 2
+Word Commands
+.XS \n(PN 5n
+\*(SN Word Commands
+.XE
+.LP
+\s-2JOVE\s0 has commands for moving over or operating on words.
+By convention,
+they are all ESC commands.
+.IP "ESC F" 20n
+Move Forward over a word.
+.IP "ESC B" 20n
+Move Backward over a word.
+.IP "ESC D" 20n
+Kill forward to the end of a word.
+.IP "ESC Rubout" 20n
+Kill backward to the beginning of a word.
+.LP
+Notice how these commands form a group that parallels the character-
+based commands,
+C-F,
+C-B,
+C-D,
+and Rubout.
+.LP
+The commands ESC F and ESC B move forward and backward over words.
+They are thus analogous to Control-F and Control-B,
+which move over single characters.
+Like their Control- analogues,
+ESC F and ESC B move several words if given an argument.
+ESC F with a negative argument moves backward like ESC B,
+and ESC B with a negative argument moves forward.
+Forward motion stops right after the last letter of the word,
+while backward motion stops right before the first letter.
+.LP
+It is easy to kill a word at a time.
+ESC D kills the word after point.
+To be precise,
+it kills everything from point to the place ESC F would move to.
+Thus,
+if point is in the middle of a word,
+only the part after point is killed.
+If some punctuation comes after point,
+and before the next word,
+it is killed along with the word.
+If you wish to kill only the next word but not the punctuation,
+simply do ESC F to get to the end,
+and kill the word backwards with ESC Rubout.
+ESC D takes arguments just like ESC F.
+.LP
+ESC Rubout kills the word before point.
+It kills everything from point back to where ESC B would move to.
+If point is after the space in "FOO, BAR",
+then "FOO, " is killed.
+If you wish to kill just "FOO",
+then do a ESC B and a ESC D instead of a ESC Rubout.
+.NH 2
+Sentence Commands
+.XS \n(PN 5n
+\*(SN Sentence Commands
+.XE
+.LP
+The \s-2JOVE\s0 commands for manipulating sentences and paragraphs are
+mostly ESC commands,
+so as to resemble the word-handling commands.
+.IP "ESC A" 20n
+Move back to the beginning of the sentence.
+.IP "ESC E" 20n
+Move forward to the end of the sentence.
+.IP "ESC K" 20n
+Kill forward to the end of the sentence.
+.IP "C-X Rubout" 20n
+Kill back to the beginning of the sentence.
+.LP
+The commands ESC A and ESC E move to the beginning and end of the
+current sentence,
+respectively.
+They were chosen to resemble
+Control-A and Control-E,
+which move to the beginning and end of a line.
+Unlike them,
+ESC A and ESC E if repeated or given numeric arguments
+move over successive sentences.
+\s-2JOVE\s0 considers a sentence to end wherever there is a ".",
+"?", or "!" followed by the end of a line
+or by one or more spaces.
+Neither ESC A nor ESC E moves past the
+end of the line or spaces which delimit the sentence.
+.LP
+Just as C-A and C-E have a kill command,
+C-K,
+to go with them,
+so ESC A and ESC E have a corresponding kill command ESC K which kills from
+point to the end of the sentence.
+With minus one as an argument it
+kills back to the beginning of the sentence.
+Positive arguments serve as a repeat count.
+.LP
+There is a special command,
+C-X Rubout for killing back to the beginning of a sentence,
+because this is useful when you change your
+mind in the middle of composing text.
+.NH 2
+Paragraph Commands
+.XS \n(PN 5n
+\*(SN Paragraph Commands
+.XE
+.LP
+The \s-2JOVE\s0 commands for handling paragraphs are
+.IP "ESC [" 20n
+Move back to previous paragraph beginning.
+.IP "ESC ]" 20n
+Move forward to next paragraph end.
+.LP
+ESC [ moves to the beginning of the current or previous paragraph, while
+ESC ] moves to the end of the current or next paragraph.  Paragraphs are
+delimited by lines of differing indent, or lines with text formatter
+commands, or blank lines.  \s-2JOVE\s0 knows how to deal with most indented
+paragraphs correctly, although it can get confused by one- or two-line
+paragraphs delimited only by indentation.
+.NH 2
+Text Indentation Commands
+.XS \n(PN 5n
+\*(SN Text Indentation Commands
+.XE
+.LP
+.IP "Tab" 20n
+Indent "appropriately" in a mode-dependent fashion.
+.IP "LineFeed" 20n
+Is the same as Return,
+except it copies the indent of the line you just left.
+.IP "ESC M" 20n
+Moves to the line's first non-blank character.
+.LP
+.LP
+The way to request indentation is with the Tab command.
+Its precise effect depends on the major mode.
+In \fIText\fP mode,
+it indents to the next tab stop.
+In \fIC\fP mode,
+it indents to the "right" position for C programs.
+.LP
+To move over the indentation on a line,
+do ESC M (\fIfirst-non-blank\fP).
+This command,
+given anywhere on a line,
+positions the cursor at the first non-blank, non-tab character on the line.
+.NH 2
+Text Filling
+.XS \n(PN 5n
+\*(SN Text Filling
+.XE
+.LP
+\fIAuto Fill\fP mode causes text to be \fIfilled\fP
+(broken up into lines that fit in a specified width)
+automatically as you type it in.
+If you alter existing text so that it is no longer properly filled,
+\s-2JOVE\s0 can fill it again if you ask.
+.LP
+Entering \fIAuto Fill\fP mode is done with ESC X \fIauto-fill-mode\fP.
+From then on,
+lines are broken automatically at spaces when they get longer than the
+desired width.
+To leave \fIAuto Fill\fP mode,
+once again execute ESC X \fIauto-fill-mode\fP.
+When \fIAuto Fill\fP mode is in effect,
+the word \fBFill\fP appears in the mode line.
+.LP
+If you edit the middle of a paragraph,
+it may no longer correctly be filled.
+To refill a paragraph,
+use the command ESC J (\fIfill-paragraph\fP).
+It causes the paragraph that point is inside to be filled.
+All the line breaks are removed and new ones inserted where necessary.
+.LP
+The maximum line width for filling is in the variable \fIright-margin\fP.
+Both ESC J and auto-fill make sure that no line exceeds this width.
+The value of \fIright-margin\fP is initially 72.
+.LP
+Normally ESC J figures out the indent of the paragraph and uses that same
+indent when filling.  If you want to change the indent of a paragraph you
+set \fIleft-margin\fP to the new position and type C-U\ ESC\ J.
+\fIfill-paragraph\fP, when supplied a numeric argument, uses the value of
+\fIleft-margin\fP.
+.LP
+If you know where you want to set the right margin but you don't know the
+actual value, move to where you want to set the value and use the
+\fIright-margin-here\fP command.  \fIleft-margin-here\fP does the same
+for the \fIleft-margin\fP variable.
+.NH 2
+Case Conversion Commands
+.XS \n(PN 5n
+\*(SN Case Conversion Commands
+.XE
+.LP
+.IP "ESC L" 15n
+Convert following word to lower case.
+.IP "ESC U" 15n
+Convert following word to upper case.
+.IP "ESC C" 15n
+Capitalize the following word.
+.LP
+.LP
+The word conversion commands are most useful.
+ESC L converts the word after point to lower case,
+moving past it.
+Thus,
+successive ESC L's convert successive words.
+ESC U converts to all capitals instead,
+while ESC C puts the first letter of the word into upper case and the
+rest into lower case.
+All these commands convert several words at once if given an argument.
+They are especially convenient for
+converting a large amount of text from all upper case to mixed case,
+because you can move through the test using ESC L,
+ESC U or ESC C on each word as appropriate.
+.LP
+When given a negative argument,
+the word case conversion commands apply to
+the appropriate number of words before point,
+but do not move point.
+This is convenient when you have just typed a word in the wrong case.
+You can give the case conversion command and continue typing.
+.LP
+If a word case conversion command is given in the middle of a word,
+it applies only to the part of the word which follows the cursor,
+treating it as a whole word.
+.LP
+The other case conversion functions are \fIcase-region-upper\fP and
+\fIcase-region-lower\fP,
+which convert everything between point and mark to the specified case.
+Point and mark remain unchanged.
+.NH 2
+Commands for Fixing Typos
+.XS \n(PN 5n
+\*(SN Commands for Fixing Typos
+.XE
+.LP
+In this section we describe the commands that are especially useful
+for the times when you catch a mistake on your text after you have made it,
+or change your mind while composing text on line.
+.IP "Rubout" 25n
+Delete last character.
+.IP "ESC Rubout" 25n
+Kill last word.
+.IP "C-X Rubout" 25n
+Kill to beginning of sentence.
+.IP "C-T" 25n
+Transpose two characters.
+.IP "C-X C-T" 25n
+Transpose two lines.
+.IP "ESC Minus ESC L" 25n
+Convert last word to lower case.
+.IP "ESC Minus ESC U" 25n
+Convert last word to upper case.
+.IP "ESC Minus ESC C" 25n
+Convert last word to lower case with capital initial.
+.LP
+.NH 2
+Killing Your Mistakes
+.XS \n(PN 5n
+\*(SN Killing Your Mistakes
+.XE
+.LP
+The Rubout command is the most important correction command.
+When used among printing (self-inserting) characters,
+it can be thought of as canceling the last character typed.
+.LP
+When your mistake is longer than a couple of characters,
+it might be more convenient to use ESC Rubout or C-X Rubout.
+ESC Rubout kills back to the start of the last word,
+and C-X Rubout kills back to the start of the last sentence.
+C-X Rubout is particularly useful when
+you are thinking of what to write as you type it,
+in case you change your mind about phrasing.
+ESC Rubout and C-X Rubout save the killed text for C-Y and ESC Y to retrieve.
+.LP
+ESC Rubout is often useful even when you have typed only a few
+characters wrong,
+if you know you are confused in your typing and aren't sure what you typed.
+At such a time,
+you cannot correct with
+Rubout except by looking at the screen to see what you did.
+It requires less thought to kill the whole word and start over again,
+especially if the system is heavily loaded.
+.LP
+If you were typing a command or command parameters, C-G will abort the
+command with no further processing.
+.NH 2
+Transposition
+.XS \n(PN 5n
+\*(SN Transposition
+.XE
+.LP
+The common error of transposing two characters can be fixed
+with the C-T (\fItranspose-characters\fP) command.
+Normally,
+C-T transposes the two characters on either side of the cursor
+and moves the cursor forward one character.  Repeating the command
+several times "drags" a character to the right.
+(Remember that \fIpoint\fP is considered to be between two characters,
+even though the visible cursor in your terminal is on only one of them.)
+When given at the end of a line,
+rather than switching the last character of the line with the line separator,
+which would be useless,
+C-T transposes the last two characters on the line.
+So,
+if you catch your transposition error right away,
+you can fix it with just a C-T.
+If you don't catch it so fast,
+you must move the cursor back to between the two characters.
+.LP
+To transpose two lines,
+use the C-X C-T (\fItranspose-lines\fP) command.  The line containing the
+cursor is exchanged with the line above it; the cursor is left at the
+beginning of the line following its original position.
+.NH 2
+Checking and Correcting Spelling
+.XS \n(PN 5n
+\*(SN Checking and Correcting Spelling
+.XE
+.LP
+When you write a paper,
+you should correct its spelling at some point close to finishing it.
+To correct the entire buffer,
+do ESC X \fIspell-buffer\fP.
+This invokes the
+.UX
+.I spell
+program,
+which prints a list of all the misspelled words.
+\s-2JOVE\s0 catches the list and places it in a
+\s-2JOVE\s0 buffer called \fBSpell\fP.
+You are given an opportunity to delete from that buffer any words that
+aren't really errors;
+then \s-2JOVE\s0 looks up each misspelled word and
+remembers where it is in the buffer being corrected.
+Then you can go forward to each misspelled word with C-X C-N (\fInext-error\fP)
+and backward with C-X C-P (\fIprevious-error\fP).
+See the section entitled \fIError Message Parsing\fP.
+.NH 1
+File Handling
+.XS \n(PN
+\*(SN File Handling
+.XE
+.LP
+The basic unit of stored data is the file.
+Each program,
+each paper,
+lives usually in its own file.
+To edit a program or paper,
+the editor must be told the name of the file that contains it.
+This is called \fIvisiting\fP a file.
+To make your changes to the file permanent on disk,
+you must \fIsave\fP the file.
+.NH 2
+Visiting Files
+.XS \n(PN 5n
+\*(SN Visiting Files
+.XE
+.LP
+.IP "C-X C-V" 15n
+Visit a file.
+.IP "C-X C-R" 15n
+Same as C-X C-V.
+.IP "C-X C-S" 15n
+Save the visited file.
+.IP "ESC ~" 15n
+Tell \s-2JOVE\s0 to forget that the buffer has been changed.
+.LP
+.LP
+\fIVisiting\fP a file means copying its contents into \s-2JOVE\s0 where you
+can edit them.
+\s-2JOVE\s0 remembers the name of the file you visited.
+Unless you use the multiple buffer feature of \s-2JOVE\s0,
+you can only be visiting one file at a time.
+The name of the current selected buffer is visible in the mode line.
+.LP
+The changes you make with \s-2JOVE\s0 are made in a copy inside \s-2JOVE\s0.
+The file itself is not changed.
+The changed text is not permanent until you \fIsave\fP it in a file.
+The first time you change the text,
+an asterisk appears at the end of the mode line; this indicates that the text
+contains fresh changes which will be lost unless you save them.
+.LP
+To visit a file,
+use the command C-X C-V.
+Follow the command with the name of the file you wish to visit,
+terminated by a Return.
+You can abort the command by typing C-G,
+or edit the filename with many of the standard \s-2JOVE\s0 commands
+(e.g., C-A, C-E, C-F, ESC F, ESC Rubout).
+If the filename you wish to visit is similar to the filename in the
+mode line (the default filename),
+you can type C-R to insert the default and then edit it.
+If you do type a Return to finish the command,
+the new file's text appears on the screen,
+and its name appears in the mode line.
+In addition,
+its name becomes the new default filename.
+.LP
+If you wish to save the file and make your changes permanent,
+type C-X C-S.
+After the save is finished,
+C-X C-S prints the filename and the
+number of characters and lines that it wrote to the file.
+If there are no changes to save (no asterisk at the end of the mode line),
+the file is not saved;
+otherwise the changes saved and the asterisk at the end of
+the mode line will disappear.
+.LP
+What if you want to create a file?  Just visit it.
+\s-2JOVE\s0 prints
+\fI(New file)\fP but aside from that behaves as if you had visited an existing
+empty file.
+If you make any changes and save them,
+the file is created.
+If you visit a nonexistent file unintentionally
+(because you typed the wrong filename),
+go ahead and visit the file you meant.
+If you don't save the unwanted file,
+it is not created.
+.LP
+If you alter one file and then visit another in the same buffer,
+\s-2JOVE\s0 offers to save the old one.
+If you answer YES,
+the old file is saved;
+if you answer NO,
+all the changes you have made to it since the last save are lost.
+You should not type ahead after a file visiting
+command,
+because your type-ahead might answer an unexpected question
+in a way that you would regret.
+.LP
+Sometimes you will change a buffer by accident.
+Even if you undo the effect of the change by editing,
+\s-2JOVE\s0 still knows that "the buffer has been changed".
+You can tell \s-2JOVE\s0 to pretend that there have been no changes with the
+ESC \s+2~\s0 command (\fImake-buffer-unmodified\fP).
+This command simply clears the "modified" flag which
+says that the buffer contains changes which need to be saved.
+Even if
+the buffer really \fIis\fP changed \s-2JOVE\s0 will still act as if it were not.
+.LP
+If \s-2JOVE\s0 is about to save a file and sees that the date of the version
+on disk does not match what \s-2JOVE\s0 last read or wrote,
+\s-2JOVE\s0 notifies you of this fact,
+and asks what to do, because this probably means that something is wrong.
+For example,
+somebody else may have been editing the same file.
+If this is so,
+there is a good chance that your work
+or his work will be lost if you don't take the proper steps.
+You should first find out exactly what is going on.
+If you determine that somebody else has modified the file,
+save your file under a different filename and then DIFF the two files
+to merge the two sets of changes.  (The "patch" command is useful for
+applying the results of context diffs directly).
+Also get in touch with the other person so that the files don't diverge
+any further.
+.NH 2
+How to Undo Drastic Changes to a File
+.XS \n(PN 5n
+\*(SN How to Undo Drastic Changes to a File
+.XE
+.LP
+If you have made several extensive changes to a file and then change
+your mind about them,
+and you haven't yet saved them,
+you can get rid of them by reading in the previous version of the file.
+You can do this with the C-X C-V command,
+to visit the unsaved version of the file.
+.NH 2
+Recovering from system/editor crashes
+.XS \n(PN 5n
+\*(SN Recovering from system/editor crashes
+.XE
+.LP
+JOVE does not have \fIAuto Save\fP mode, but it does provide a way to
+recover your work in the event of a system or editor crash.  JOVE saves
+information about the files you're editing every so many changes to a
+buffer to make recovery possible.  Since a relatively small amount of
+information is involved it's hardly even noticeable when JOVE does this.  The
+variable "sync-frequency" says how often to save the necessary
+information, and the default is every 50 changes.  50 is a very
+reasonable number: if you are writing a paper you will not lose more than
+the last 50 characters you typed, which is less than the average length
+of a line.
+.NH 2
+Miscellaneous File Operations
+.XS \n(PN 5n
+\*(SN Miscellaneous File Operations
+.XE
+.LP
+.LP
+ESC X \fIwrite-file\fP <file><return> writes the contents of the buffer
+into the file <file>,
+and then visits that file.
+It can be thought of as a way of "changing the name" of
+the file you are visiting.
+Unlike C-X C-S,
+\fIwrite-file\fP saves even if the buffer has not been changed.
+C-X C-W is another way of getting this command.
+.LP
+ESC X \fIinsert-file\fP <file><return> inserts the contents of <file> into the
+buffer at point,
+leaving point unchanged before the contents.
+You can also use C-X C-I to get this command.
+.LP
+ESC X \fIwrite-region\fP <file><return> writes the region (the text between
+point and mark) to the specified file.
+It does not set the visited filename.
+The buffer is not changed.
+.LP
+ESC X \fIappend-region\fP <file><return> appends the region to <file>.
+The text is added to the end of <file>.
+.NH 1
+Using Multiple Buffers
+.XS \n(PN
+\*(SN Using Multiple Buffers
+.XE
+.LP
+When we speak of "the buffer",
+which contains the text you are editing,
+we have given the impression that there is only one.
+In fact,
+there may be many of them,
+each with its own body of text.
+At any time only one buffer can be \fIselected\fP and available for editing,
+but it isn't hard to switch to a different one.
+Each buffer individually remembers which file it is visiting,
+what modes are in effect,
+and whether there are any changes that need saving.
+.IP "C-X B" 15n
+Select or create a buffer.
+.IP "C-X C-F" 15n
+Visit a file in its own buffer.
+.IP "C-X C-B" 15n
+List the existing buffers.
+.IP "C-X K" 15n
+Kill a buffer.
+.LP
+Each buffer in \s-2JOVE\s0 has a single name,
+which normally doesn't change.
+A buffer's name can be any length.
+The name of the currently selected buffer
+and the name of the file visited in it
+are visible in the mode line when you are at top level.
+A newly started \s-2JOVE\s0 has only one buffer,
+named \fBMain\fP, unless you specified files to edit in the
+shell command that started \s-2JOVE\s0.
+.NH 2
+Creating and Selecting Buffers
+.XS \n(PN 5n
+\*(SN Creating and Selecting Buffers
+.XE
+.LP
+To create a new buffer,
+you need only think of a name for it (say, FOO)
+and then do C-X B FOO<return>,
+which is the command C-X B (\fIselect-buffer\fP) followed by the name.
+This makes a new,
+empty buffer (if one by that name didn't previously exist) 
+and selects it for editing.
+The new buffer is not visiting any file,
+so if you try to save it you will be asked for the filename to use.
+Each buffer has its own major mode;
+the new buffer's major mode is \fIText\fP mode by default.
+.LP
+To return to buffer FOO later after having switched to another,
+the same command C-X B FOO<return> is used,
+since C-X B can tell whether a buffer named FOO exists already or not.
+C-X B Main<return> reselects the buffer Main that \s-2JOVE\s0 started out with.
+Just C-X B<return> reselects the previous buffer.
+Repeated C-X B<return>'s alternate between the last two buffers selected.
+.LP
+You can also read a file into its own newly created buffer,
+all with one command: C-X C-F (\fIfind-file\fP),
+followed by the filename.
+The name of the buffer is the last element of the file's pathname.
+C-F stands for "Find",
+because if the specified file already resides in a buffer in your \s-2JOVE\s0,
+that buffer is reselected.
+So you need not remember whether you have brought the file in already or not.
+A buffer created by C-X C-F can be reselected later with C-X B or C-X C-F,
+whichever you find more convenient.
+Nonexistent files can be created with C-X C-F just as they can with C-X C-V.
+.NH 2
+Using Existing Buffers
+.XS \n(PN 5n
+\*(SN Using Existing Buffers
+.XE
+.LP
+To get a list of all the buffers that exist,
+do C-X C-B (\fIlist-buffers\fP).
+Each buffer's type,
+name,
+and visited filename is printed.
+An asterisk before the buffer name indicates a
+buffer which contains changes that have not been saved. The number
+that appears at the beginning of a line in a C-X C-B listing is that
+buffer's \fIbuffer number\fP.
+You can select a buffer by typing its number in place of its name.
+If a buffer with that number doesn't already exist,
+a new buffer is created with that number as its name.
+.LP
+If several buffers have modified text in them,
+you should save some of them with C-X C-M (\fIwrite-modified-files\fP).
+This finds all the buffers that need saving and then saves them.
+Saving the buffers this way is much
+easier and more efficient (but more dangerous)
+than selecting each one and typing C-X C-S.
+If you give C-X C-M an argument, \s-2JOVE\s0 will ask for confirmation
+before saving each buffer.
+.LP
+ESC X \fIrename-buffer\fP <new name><return> changes the name of the currently
+selected buffer.
+.LP
+ESC X \fIerase-buffer\fP <buffer name><return> erases the contents of the
+<buffer name> without deleting the buffer entirely.
+.NH 2
+Killing Buffers
+.XS \n(PN 5n
+\*(SN Killing Buffers
+.XE
+.LP
+After you use a \s-2JOVE\s0 for a while,
+it may fill up with buffers which you no longer need.
+Eventually you can reach a point where trying to
+create any more results in an "out of memory" or "out of lines"
+error.
+When this happens you will want to kill some buffers with the
+C-X K (\fIdelete-buffer\fP) command.
+You can kill the buffer FOO by doing C-X K FOO<return>.
+If you type C-X K <return> JOVE will kill the previously selected buffer.
+If you try to kill a buffer that needs saving \s-2JOVE\s0
+will ask you to confirm it.
+.LP
+If you need to kill several buffers, use the command \fIkill-some-buffers\fP.
+This prompts you with the name of each buffer and asks for confirmation
+before killing that buffer.
+.NH 1
+Controlling the Display
+.XS \n(PN
+\*(SN Controlling the Display
+.XE
+.LP
+Since only part of a large file will fit on the screen,
+\s-2JOVE\s0 tries to show the part that is likely to be interesting.
+The display control commands allow you to see a different part of the file.
+.IP "C-L" 15n
+Reposition point at a specified vertical position,
+OR clear and redraw the screen with point in the same place.
+.IP "C-V" 15n
+Scroll forwards (a screen or a few lines).
+.IP "ESC V" 15n
+Scroll backwards.
+.IP "C-Z" 15n
+Scroll forward some lines.
+.IP "ESC Z" 15n
+Scroll backwards some lines.
+.LP
+.LP
+The terminal screen is rarely large enough to display all of your
+file.
+If the whole buffer doesn't fit on the screen,
+\s-2JOVE\s0 shows a contiguous portion of it,
+containing 
+.I point.
+It continues to show approximately the same portion
+until point moves outside of what is displayed;
+then \s-2JOVE\s0 chooses a new portion centered around the new 
+.I point.
+This is \s-2JOVE\s0's guess as to what you are most interested in seeing,
+but if the guess is wrong,
+you can use the display control commands to see a different portion.
+The available screen area through which you can see part of
+the buffer is called \fIthe window\fP,
+and the choice of where in the
+buffer to start displaying is also called \fIthe window\fP.  (When 
+there is only one window, it plus the mode line and the input line take
+up the whole screen).
+.LP
+First we describe how \s-2JOVE\s0 chooses a new window position on its own.
+The goal is usually to place 
+.I point 
+half way down the window.
+This is controlled by the variable \fIscroll-step\fP,
+whose value is the number of
+lines above the bottom or below the top of the window that the line
+containing point is placed.
+A value of 0 (the initial value) means center 
+.I point
+in the window.
+.LP
+The basic display control command is C-L (\fIredraw-display\fP).
+In its simplest form,
+with no argument,
+it tells \s-2JOVE\s0 to choose a new window position,
+centering point half way from the top as usual.
+.LP
+C-L with a positive argument chooses a new window so as to put point
+that many lines from the top.
+An argument of zero puts point on the very top line.
+Point does not move with respect to the text; rather,
+the text and point move rigidly on the screen.
+.LP
+If point stays on the same line,
+the window is first cleared and then redrawn.
+Thus,
+two C-L's in a row are guaranteed to clear the current window.
+ESC C-L will clear and redraw the entire screen.
+.LP
+The \fIscrolling\fP commands C-V,
+ESC V,
+C-Z,
+and ESC Z,
+let you move the whole display up or down a few lines.
+C-V (\fInext-page\fP) with an
+argument shows you that many more lines at the bottom of the screen,
+moving the text and point up together as C-L might.
+C-V with a
+negative argument shows you more lines at the top of the screen,
+as does ESC V (\fIprevious-page\fP) with a positive argument.
+.LP
+To read the buffer a window at a time,
+use the C-V command with no argument.
+It takes the last line at the bottom of the window and puts
+it at the top,
+followed by nearly a whole window of lines not visible before.
+Point is put at the top of the window.
+Thus, each C-V shows the "next page of text",
+except for one line of overlap to provide context.
+To move backward,
+use ESC V without an argument,
+which moves a whole window backwards (again with a line of overlap).
+.LP
+C-Z and ESC Z scroll one line forward and one line backward,
+respectively.
+These are convenient for moving in units of lines
+without having to type a numeric argument.
+.NH 2
+Multiple Windows
+.XS \n(PN 5n
+\*(SN Multiple Windows
+.XE
+.LP
+\s-2JOVE\s0 allows you to split the screen into two or more \fIwindows\fP and
+use them to display parts of different files,
+or different parts of the same file.
+.IP "C-X 2" 15n
+Divide the current window into two smaller ones.
+.IP "C-X 1" 15n
+Delete all windows but the current one.
+.IP "C-X D" 15n
+Delete current window.
+.IP "C-X N" 15n
+Switch to the next window.
+.IP "C-X P" 15n
+Switch to the previous window.
+.IP "C-X O" 15n
+Same as C-X P.
+.IP "C-X ^" 15n
+Make this window bigger.
+.IP "ESC C-V" 15n
+Scroll the other window.
+.LP
+.LP
+When using \fImultiple window\fP mode,
+the text portion of the screen
+is divided into separate parts called \fIwindows\fP,
+which can display different pieces of text.
+Each window can display different files,
+or parts of the same file.
+Only one of the windows is 
+.I active; 
+that is
+the window which the cursor is in.
+Editing normally takes place in that window alone.
+To edit in another window,
+you would give a command to move the cursor to the other window,
+and then edit there.
+.LP
+Each window displays a mode line for the buffer it's displaying.
+This is useful to keep track of which window corresponds with which
+file.  In addition, the mode line serves as a separator between windows.
+By setting the variable \fImode-line-should-standout\fP to "on" you can
+have \s-2JOVE\s0 display the mode-line in reverse video (assuming your
+particular terminal has the reverse video capability).
+.LP
+The command C-X 2 (\fIsplit-current-window\fP) enters multiple window mode.
+A new mode line appears across the middle of the screen,
+dividing the text display area into two halves.
+Both windows contain the same buffer and display the same position in it,
+namely where point was at the time you issued the command.
+The cursor moves to the second window.
+.LP
+To return to viewing only one window,
+use the command C-X 1 (\fIdelete-other-windows\fP).
+The current window expands to fill the whole screen,
+and the other windows disappear until the next C-X 2.
+(The buffers and their contents are unaffected by any of the
+window operations).
+.LP
+While there is more than one window,
+you can use C-X N (\fInext-window\fP) to switch to the next window,
+and C-X P (\fIprevious-window\fP) to switch to the previous one.
+If you are in the bottom window and you type C-X N,
+you will be placed in the top window,
+and the same kind of thing happens when you type C-X P in the top window,
+namely you will be placed in the bottom window.
+C-X O is the same as C-X P.
+It stands for "other window" because when there are only two windows,
+repeated use of this command will switch between the two windows.
+.LP
+Often you will be editing one window while using the other just for reference.
+Then,
+the command ESC C-V (\fIpage-next-window\fP) is very useful.
+It scrolls the next window,
+as if you switched to the next window,
+typed C-V,
+and switched back,
+without your having to do all that.
+With a negative argument,
+ESC C-V will do an ESC V in the next window.
+.LP
+When a window splits,
+both halves are approximately the same size.
+You can redistribute the screen space between the windows with
+the C-X ^ (\fIgrow-window\fP) command.
+It makes the currently selected window grow one line bigger,
+or as many lines as is specified with a numeric argument.
+Use ESC X \fIshrink-window\fP to make the current window smaller.
+.NH 2
+Multiple Windows and Multiple Buffers
+.XS \n(PN 5n
+\*(SN Multiple Windows and Multiple Buffers
+.XE
+.LP
+Buffers can be selected independently in each window.
+The C-X B command selects a new buffer in whichever window contains
+the cursor.
+Other windows' buffers do not change.
+.LP
+You can view the same buffer in more than one window.
+Although the same buffer appears in both windows,
+they have different values of point,
+so you can move around in one window while the other window
+continues to show the same text.
+Then,
+having found one place you wish to refer to, you can go back into the
+other window with C-X O or C-X P to make your changes.
+.LP
+If you have the same buffer in both windows,
+you must beware of trying to visit a different file in one of
+the windows with C-X C-V,
+because if you bring a new file into this buffer,
+it will replaced the old file in \fIboth\fP windows.
+To view different files in different windows,
+you must switch buffers in one of the windows first
+(with C-X B or C-X C-F, perhaps).
+.LP
+A convenient "combination" command for viewing something in another
+window is C-X 4 (\fIwindow-find\fP).
+With this command you can ask to see any specified buffer,
+file or tag in the other window.
+Follow the C-X 4 with either B and a buffer name,
+F and a filename,
+or T and a tag name.
+This switches to the other window and finds there what you specified.
+If you were previously in one-window mode,
+multiple-window mode is entered.
+C-X 4 B is similar to C-X 2 C-X B.
+C-X 4 F is similar to C-X 2 C-X C-F.
+C-X 4 T is similar to C-X 2 C-X
+T.
+The difference is one of efficiency,
+and also that C-X 4 works equally well if you are already using two windows.
+.NH 1
+Processes Under \s-2JOVE\s0
+.XS \n(PN
+\*(SN Processes Under \s-2JOVE\s0
+.XE
+.LP
+Another feature in \s-2JOVE\s0 is its ability to interact with
+.UX
+in a useful way.
+You can run other
+.UX
+commands from \s-2JOVE\s0 and catch their output in \s-2JOVE\s0 buffers.
+In this chapter we will discuss the different
+ways to run and interact with
+.UX
+commands.
+.NH 2
+Non-interactive
+.UX
+commands
+.XS \n(PN 5n
+\*(SN Non-interactive
+.XE
+.LP
+To run a
+.UX
+command from \s-2JOVE\s0 just type "C-X !" followed by the name
+of the command terminated with Return.
+For example,
+to get a list of all the users on the system,
+you do:
+.DS I
+C-X ! who<return>
+.DE
+Then \s-2JOVE\s0 picks a reasonable buffer in which the output from the
+command will be placed.
+E.g.,
+"who" uses a buffer called \fBwho\fP;
+"ps alx" uses \fBps\fP;
+and "fgrep -n foo *.c" uses \fBfgrep\fP.
+If \s-2JOVE\s0
+wants to use a buffer that already exists it first erases the old contents.
+If the buffer it selects holds a file,
+not output from a previous shell command,
+you must first delete that buffer with C-X K.
+.LP
+Once \s-2JOVE\s0 has picked a buffer it puts that buffer in a window so you
+can see the command's output as it is running.
+If there is only one window \s-2JOVE\s0 will automatically make another one.
+Otherwise,
+\s-2JOVE\s0
+tries to pick the most convenient window which isn't the current one.
+.LP
+It's not a good idea to type anything while the command is running.
+There are two reasons for this:
+.IP (i)
+\s-2JOVE\s0 won't see the characters (thus won't execute them) until the
+command finishes,
+so you may forget what you've typed.
+.IP (ii)
+Although \s-2JOVE\s0 won't know what you've typed,
+it 
+.I will
+know that you've typed something,
+and then it will try to be "smart" and not update the
+display until it's interpreted what you've typed.
+But,
+of course,
+\s-2JOVE\s0 won't interpret what you type until the
+.UX
+command completes,
+so you're left with the uneasy feeling you get when you
+don't know what the hell the computer is doing*.
+.FS
+*This is a bug and should be fixed,
+but probably won't be for a while.
+.FE
+.LP
+If you want to interrupt the command for some reason (perhaps you
+mistyped it, or you changed your mind) you can type C-].
+Typing this
+inside \s-2JOVE\s0 while a process is running is the same as typing C-C when
+you are outside \s-2JOVE\s0,
+namely the process stops in a hurry.
+.LP
+When the command finishes, \s-2JOVE\s0 puts you back in the window in which 
+you started.
+Then it prints a message indicating whether or not the command
+completed successfully in its (the command's) opinion.
+That is,
+if the command had what it considers an error
+(or you interrupt it with C-])
+\s-2JOVE\s0 will print an appropriate message.
+
+.NH 2
+Limitations of Non-Interactive Processes
+.XS \n(PN 5n
+\*(SN Limitations of Non-Interactive Processes
+.XE
+.LP
+The reason these are called non-interactive processes is that you
+can't type any input to them; you can't interact with them; they can't
+ask you questions because there is no way for you to answer.
+For example,
+you can't run a command interpreter (a shell), or 
+.I mail
+or 
+.I crypt
+with C-X ! because there is no way to provide it with input.
+Remember that \s-2JOVE\s0 (not the process in the window)
+is listening to your keyboard,
+and \s-2JOVE\s0 waits until the process dies before it looks at
+what you type.
+.LP
+C-X ! is useful for running commands that do some output and then exit.
+For example,
+it's very useful to use with the C compiler to
+catch compilation error messages (see Compiling C Programs),
+or with the \fIgrep\fP commands.
+.NH 2
+Interactive Processes \(em Run a Shell in a Window
+.XS \n(PN 5n
+\*(SN Interactive Processes \(em Run a Shell in a Window
+.XE
+.LP
+Some versions of \s-2JOVE\s0\(dg
+.FS
+\(dg For example, the version provided with 4.3BSD.
+.FE
+have the capability of running interactive
+processes.
+This is more useful than non-interactive processes for
+certain types of jobs:
+.IP (i)
+You can go off and do some editing while the command is running.
+This is useful for commands that do sporadic output and run for fairly long
+periods of time.
+.IP (ii)
+Unlike non-interactive processes,
+you can type input to these.
+In addition,
+you can edit what you type with the power of all the \s-2JOVE\s0
+commands \fIbefore\fP you send the input to the process.
+This is a really important feature,
+and is especially useful for running a shell in a window.
+.IP (iii)
+Because you can continue with normal editing while one of the
+processes is running,
+you can create a bunch of contexts and manage them
+(select them, delete them, or temporarily put them aside)
+with \s-2JOVE\s0's window and buffer mechanisms.
+.LP
+Although we may have given an image of processes being attached to 
+.I windows,
+in fact they are attached to 
+.I buffers.
+Therefore,
+once an \fIi-process\fP is running you can select another buffer into that window,
+or if you wish you can delete the window altogether.
+If you reselect that buffer later it will be up to date.
+That is,
+even though the
+buffer wasn't visible it was still receiving output from the process.
+You don't have to worry about missing anything when the buffer isn't visible.
+.NH 2
+Advantages of Running Processes in \s-2JOVE\s0 Windows.
+.XS \n(PN 5n
+\*(SN Advantages of Running Processes in \s-2JOVE\s0 Windows.
+.XE
+.LP
+There are several advantages to running a shell in a window.
+What you type isn't seen immediately by the process;
+instead \s-2JOVE\s0 waits until
+you type an entire line before passing it on to the process to read.
+This means that before you type <return>
+all of \s-2JOVE\s0's editing
+capabilities are available for fixing errors on your input line.
+If you discover an error at the beginning of the line,
+rather than erasing the whole line and starting over,
+you can simply move to the error,
+correct it,
+move back and continue typing.
+.LP
+Another feature is that you have the entire history of your session in
+a \s-2JOVE\s0 buffer.
+You don't have to worry about output from a command
+moving past the top of the screen.
+If you missed some output you can
+move back through it with ESC V and other commands.
+In addition,
+you can save yourself retyping a command (or a similar one) by sending
+edited versions of previous commands, or edit the output of one command
+to become a list of commands to be executed ("immediate shell scripts").
+.NH 2
+Differences between Normal and I-process Buffers
+.XS \n(PN 5n
+\*(SN Differences between Normal and I-process Buffers
+.XE
+.LP
+\s-2JOVE\s0 behaves differently in several ways when you are in an \fIi-process\fP
+buffer.
+Most obviously, <return> does different things
+depending on both your position in the buffer and on the state of the process.
+In the normal case,
+when point is at the end of the buffer,
+Return does what you'd expect: it inserts a line-separator and then
+sends the line to the process.
+If you are somewhere else in the buffer,
+possibly positioned at a previous command that you want to edit,
+Return will place a copy of that line
+(with the prompt discarded if there is one)
+at the end of the buffer and move you there.
+Then you can edit the line and type Return as in the normal case.
+If the process has died for some reason,
+Return does nothing.
+It doesn't even insert itself.
+If that happens unexpectedly,
+you should type ESC X \fIlist-processes\fP<return>
+to get a list of each process and its state.
+If your process died abnormally,
+\fIlist-processes\fP may help you figure out why.
+.NH 2
+How to Run a Shell in a Window
+.XS \n(PN 5n
+\*(SN How to Run a Shell in a Window
+.XE
+.LP
+Type ESC X \fIi-shell\fP<return> to start up a shell.
+As with C-X !,
+\s-2JOVE\s0 will
+create a buffer,
+called \fBshell\-1\fP,
+and select a window for this new buffer.
+But unlike C-X ! you will be left in the new window.
+Now,
+the shell process is said to be attached to \fBshell\-1\fP,
+and it is considered an \fIi-process\fP buffer.
diff --git a/usr/src/contrib/jove-4.14.6/USD.doc/jove.3 b/usr/src/contrib/jove-4.14.6/USD.doc/jove.3
new file mode 100644 (file)
index 0000000..830957e
--- /dev/null
@@ -0,0 +1,408 @@
+.\"    @(#)jove.3      6.1 (Berkeley) %G%
+.\"
+.NH 1
+Directory Handling
+.XS \n(PN
+\*(SN Directory Handling
+.XE
+.LP
+To save having to use absolute pathnames when you want to edit a nearby file
+\s-2JOVE\s0 allows you to move around the
+.UX
+filesystem just as the c-shell does.
+These commands are:
+.IP "cd dir" 15n
+Change to the specified directory.
+.IP "pushd [dir]"
+Like \fIcd\fP, but save the old directory on the directory stack.
+With no directory argument, simply exchange the top two directories
+on the stack and \fIcd\fP to the new top.
+.IP "popd"
+Take the current directory off the stack and \fIcd\fP to the directory now
+at the top.
+.IP "dirs"
+Display the contents of the directory stack.
+.LP
+The names and behavior of these commands were chosen to mimic those in the c-shell.
+.NH 1
+Editing C Programs
+.XS \n(PN
+\*(SN Editing C Programs
+.XE
+.LP
+This section details the support provided by \s-2JOVE\s0
+for working on C programs.
+.NH 2
+Indentation Commands
+.XS \n(PN 5n
+\*(SN Indentation Commands
+.XE
+.LP
+To save having to lay out C programs "by hand", \s-2JOVE\s0
+has an idea of the correct indentation of a line,
+based on the surrounding context.
+When you are in C Mode, \s-2JOVE\s0 treats tabs specially \(em
+typing a tab at the beginning of a new line means "indent to
+the right place".
+Closing braces are also handled specially, and are indented
+to match the corresponding open brace.
+.NH 2
+Parenthesis and Brace Matching
+.XS \n(PN 5n
+\*(SN Parenthesis and Brace Matching
+.XE
+.LP
+To check that parentheses and braces match the way you think they do,
+turn on \fIShow Match\fP mode (ESC X show-match-mode).  Then, whenever
+you type a close brace or parenthesis, the cursor moves momentarily to
+the matching opener, if it's currently visible.  If it's not visible,
+\s-2JOVE\s0 displays the line containing the matching opener on the message
+line.
+.NH 2
+C Tags
+.XS \n(PN 5n
+\*(SN C Tags
+.XE
+.LP
+Often when you are editing a C program,
+especially someone else's code,
+you see a function call and wonder what that function does.
+You then search for the function within the current file and if you're
+lucky find
+the definition, finally returning to the original spot when you are done.
+However, if are unlucky, the function turns out to be external
+(defined in another file) and
+you have to suspend the edit,
+\fIgrep\fP for the function name in every .c that might contain it,
+and finally visit the appropriate file.
+.LP
+To avoid this diversion or the need to remember which
+function is defined in which file,
+Berkeley 
+.UX
+has a program called \fIctags(1)\fP, which
+takes a set of source files and looks for function
+definitions, producing a file called \fItags\fP as its output.
+.LP
+\s-2JOVE\s0 has a command called C-X T (\fIfind-tag\fP)
+that prompts you for the name of a function (a \fItag\fP), looks up
+the tag reference in the previously constructed tags file, 
+then visits the file containing that tag in a new buffer,
+with point positioned at the definition of the function.
+There is another version of this command, namely \fIfind-tag-at-point\fP,
+that uses the identifier at 
+.I point.
+.LP
+So, when you've added new functions to a module, or moved some old
+ones around, run the \fIctags\fP program to regenerate the \fItags\fP file.
+\s-2JOVE\s0 looks in the file specified in the \fItag-file\fP variable.  The
+default is "./tags", that is, the tag file in the current directory.  If you
+wish to use an alternate tag file, you use C-U\ C-X\ T, and \s-2JOVE\s0 will
+prompt for a file name.  If you find yourself specifying the same file again
+and again, you can set \fItag-file\fP to that file, and run
+\fIfind-tag\fP with no numeric argument.
+.LP
+To begin an editing session looking for a particular tag, use
+the \fI\-t tag\fP command line option to \s-2JOVE\s0.
+For example, say you wanted to look at the file containing the tag
+\fISkipChar\fP, you would invoke \s-2JOVE\s0 as:
+.DS I
+.I
+% jove \-t SkipChar
+.R
+.DE
+.NH 2
+Compiling Your Program
+.XS \n(PN 5n
+\*(SN Compiling Your Program
+.XE
+.LP
+You've typed in a program or altered an existing one and now you
+want to run it through the compiler to check for errors.
+To save having to suspend the edit,
+run the compiler,
+scribble down error messages, and then resume the edit,
+\s-2JOVE\s0 allows you to compile your code while in the editor.
+This is done with the C-X C-E (\fIcompile-it\fP) command.
+If you run \fIcompile-it\fP with no argument
+it runs the
+.UX
+\fImake\fP
+program into a buffer;
+If you need a special command or want to pass arguments to \fImake\fP,
+run \fIcompile-it\fP with any argument (C-U is good enough) and you
+will be prompted for the command to execute.
+.LP
+If any error messages are produced, they are treated specially by \s-2JOVE\s0.
+That treatment is the subject of the next section.
+.NH 2
+Error Message Parsing and Spelling Checking
+.XS \n(PN
+\*(SN Error Message Parsing
+\*(SN Spelling Checking
+.XE
+.LP
+\s-2JOVE\s0 knows how to interpret the error messages from many
+.UX
+commands;
+In particular,
+the messages from \fIcc\fP,
+\fIgrep\fP and \fIlint\fP can be understood.
+After running the \fIcompile-it\fP command,
+the \fIparse-errors\fP command is automatically executed,
+and any errors found are displayed in a new buffer.
+The files whose names are found in parsing the error messages are each
+brought into \s-2JOVE\s0 buffers and the point is positioned at the first error
+in the first file.
+The commands \fIcurrent-error\fP, C-X C-N (\fInext-error\fP), and
+C-X C-P (\fIprevious-error\fP)
+can be used to traverse the list of errors.
+.LP
+If you already have a file called
+\fIerrs\fP containing, say, c compiler messages then you can get \s-2JOVE\s0 to interpret the messages by
+invoking it as:
+.DS I
+.I
+% jove \-p errs
+.R
+.DE
+.LP
+\s-2JOVE\s0 has a special mechanism for checking the the spelling of a document;
+It runs the
+.UX
+spell program into a buffer.
+You then delete from this buffer all those words that are not spelling
+errors and then \s-2JOVE\s0 runs the \fIparse-spelling-errors\fP command to
+yield a list of errors just as in the last section.
+.NH 1
+Simple Customization
+.XS \n(PN
+\*(SN Simple Customization
+.XE
+.LP
+.NH 2
+Major Modes
+.XS \n(PN 5n
+\*(SN Major Modes
+.XE
+.LP
+To help with editing particular types of file, say a paper or a C program,
+\s-2JOVE\s0 has several \fImajor modes\fP.
+These are as follows:
+.NH 3
+Text mode
+.XS \n(PN 10n
+\*(SN Text mode
+.XE
+.LP
+This is the default major mode.  Nothing special is done.
+.NH 3
+C mode
+.XS \n(PN 10n
+\*(SN C mode
+.XE
+.LP
+This mode affects the behavior of the tab and parentheses characters.
+Instead of just inserting the tab, \s-2JOVE\s0 determines
+where the text "ought" to line up for the C language and tabs to that position
+instead.  The same thing happens with the close brace and close parenthesis;
+they are tabbed to the "right" place and then inserted.
+Using the \fIauto-execute-command\fP command, you can make \s-2JOVE\s0 enter
+\fIC Mode\fP whenever you edit a file whose name ends in \fI.c\fP.
+.NH 3
+Lisp mode
+.XS \n(PN 10n
+\*(SN Lisp mode
+.XE
+.LP
+This mode is analogous to \fIC Mode\fP,
+but performs the indentation needed to lay out Lisp programs properly.
+Note also the \fIgrind-s-expr\fP command that prettyprints an
+\fIs-expression\fP and the \fIkill-mode-expression\fP command.
+.NH 2
+Minor Modes
+.XS \n(PN 5n
+\*(SN Minor Modes
+.XE
+.LP
+In addition to the major modes,
+\s-2JOVE\s0 has a set of minor modes.
+These are as follows:
+.NH 3
+Auto Indent
+.XS \n(PN 10n
+\*(SN Auto Indent
+.XE
+.LP
+In this mode,
+\s-2JOVE\s0 indents each line the same way as that above it.  That is,
+the Return key in this mode acts as the Linefeed key ordinarily does.
+.NH 3
+Show Match
+.XS \n(PN 10n
+\*(SN Show Match
+.XE
+.LP
+Move the cursor momentarily to the matching opening parenthesis when a closing
+parenthesis is typed.
+.NH 3
+Auto Fill
+.XS \n(PN 10n
+\*(SN Auto Fill
+.XE
+.LP
+In \fIAuto Fill\fP mode,
+a newline is automatically inserted when the line length
+exceeds the right margin.
+This way,
+you can type a whole paper without having to use the Return key.
+.NH 3
+Over Write
+.XS \n(PN 10n
+\*(SN Over Write
+.XE
+.LP
+In this mode,
+any text typed in will replace the previous contents.
+(The default is for new text to be inserted and "push" the old along.)
+This is useful for editing an already-formatted diagram in which you
+want to change some things without moving other things around on the
+screen.
+.NH 3
+Word Abbrev
+.XS \n(PN 10n
+\*(SN Word Abbrev
+.XE
+.LP
+In this mode, every word you type is compared to a list of word
+abbreviations; whenever you type an abbreviation, it is replaced
+by the text that it abbreviates.
+This can save typing if a particular word or phrase must be entered
+many times.
+The abbreviations and their expansions are held in a file that looks like:
+.DS I
+abbrev:phrase
+.DE
+This file can be set up in your \fI~/.\|joverc\fP with the \fIread-word-abbrev-file\fP command.
+Then, whenever you are editing a buffer in \fIWord Abbrev\fP mode,
+\s-2JOVE\s0 checks for the abbreviations you've given.
+See also the commands
+\fIread-word-abbrev-file\fP,
+\fIwrite-word-abbrev-file\fP,
+\fIedit-word-abbrevs\fP,
+\fIdefine-global-word-abbrev\fP,
+\fIdefine-mode-word-abbrev\fP,
+and \fIbind-macro-to-word-abbrev\fP,
+and the variable \fIauto-case-abbrev\fP.
+.NH 2
+Variables
+.XS \n(PN 5n
+\*(SN Variables
+.XE
+.LP
+\s-2JOVE\s0 can be tailored to suit your needs by changing the
+values of variables.
+A \s-2JOVE\s0 variable can be given a value with the \fIset\fP command,
+and its value displayed with the \fIprint\fP command.
+.LP
+The variables \s-2JOVE\s0 understands are listed along with the commands
+in the alphabetical list at the end of this document.
+.NH 2
+Key Re-binding
+.XS \n(PN 5n
+\*(SN Key Re-binding
+.XE
+.LP
+Many of the commands built into \s-2JOVE\s0 are not bound to
+specific keys.
+The command handler in
+\s-2JOVE\s0 is used to invoke these commands and is activated
+by the \fIexecute-extended-command\fP command (ESC X).
+When the name of a command typed in is unambiguous,
+that command will be executed.
+Since it is very slow to have
+to type in the name of each command every time it is needed,
+\s-2JOVE\s0 makes it possible to \fIbind\fP commands to keys.
+When a command is
+\fIbound\fP to a key any future hits on that key will invoke that command.
+All the printing characters are initially bound to the
+command \fIself-insert\fP.
+Thus, typing any printing character causes it to be inserted into the text.
+Any of the existing commands can be bound to any key.
+(A \fIkey\fP may actually be a \fIcontrol character\fP
+or an \fIescape sequence\fP as explained previously under
+\fICommand Input Conventions\fP).
+.LP
+Since there are more commands than there are keys,
+two keys are treated as \fIprefix\fP commands.
+When a key bound to one of the prefix commands is typed,
+the next character
+typed is interpreted on the basis that it was preceded by one of the
+prefix keys.
+Initially ^X and ESC are the prefix keys and
+many of the built in commands are initially bound to these "two stroke" keys.
+(For historical reasons, the Escape key is often referred to as "Meta").
+.NH 2
+Keyboard Macros
+.XS \n(PN 5n
+\*(SN Keyboard Macros
+.XE
+.LP
+Although \s-2JOVE\s0 has many powerful commands,
+you often find that you have a task that no individual command can do.
+\s-2JOVE\s0 allows you to define your own commands from sequences
+of existing ones "by example";
+Such a sequence is termed a \fImacro\fP.
+The procedure is as follows:
+First you type the \fIstart-remembering\fP command,
+usually bound to C-X (.
+Next you "perform" the commands which as they are being executed are
+also 
+remembered, which will constitute the body of the macro.
+Then you give the \fIstop-remembering\fP command, usually bound to
+C-X ).
+You now have a \fIkeyboard macro\fP.
+To run this command sequence again,
+use the command \fIexecute-keyboard-macro\fP, usually bound to
+C-X E.
+You may find this bothersome to type and re-type,
+so there is a way to bind the macro to a key.
+First,
+you must give the keyboard macro a name using the
+\fIname-keyboard-macro\fP command.
+Then the binding is made with the \fIbind-macro-to-key\fP command.
+We're still not finished because all this hard work will be lost
+if you leave \s-2JOVE\s0.
+What you do is to save your macros into a file
+with the \fIwrite-macros-to-file\fP command.
+There is a corresponding \fIread-macros-from-file\fP command to retrieve
+your macros in the next editing session.
+.NH 2
+Initialization Files
+.XS \n(PN 5n
+\*(SN Initialization Files
+.XE
+.LP
+Users will likely want to modify the default key bindings to their liking.
+Since it would be quite annoying to have to set up the bindings
+each time \s-2JOVE\s0 is started up,
+\s-2JOVE\s0 has the ability to read in a "startup" file.
+Whenever \s-2JOVE\s0 is started,
+it reads commands from the file \fI.\|joverc\fP in the user's home directory.
+These commands are read as
+if they were typed to the command handler (ESC X) during an edit.
+There can be only one command per line in the startup file.
+If there is a file \fI/usr/lib/jove/joverc\fP,
+then this file will be read before the user's
+.I .\|joverc
+file.
+This can be used to set up a system-wide default startup mode for
+\s-2JOVE\s0
+that is tailored to the needs of that system.
+.LP
+The \fIsource\fP command can be used to read commands from a specified file
+at any time during an editing session,
+even from inside the \fI.\|joverc\fP file.
+This means that a macro can be used to change the key bindings,
+e.g., to enter a mode,
+by reading from a specified file which contains all the necessary bindings.
diff --git a/usr/src/contrib/jove-4.14.6/USD.doc/jove.4 b/usr/src/contrib/jove-4.14.6/USD.doc/jove.4
new file mode 100644 (file)
index 0000000..769efb8
--- /dev/null
@@ -0,0 +1,1444 @@
+.\"    @(#)jove.4      6.1 (Berkeley) %G%
+.\"
+.bp
+.NH 1
+Alphabetical List of Commands and Variables
+.dc "Prefix-1" "Escape"
+This reads the next character and runs a command based on the character
+typed.  If you wait for more than a second or so before typing the next
+character, the message "ESC" will be printed on the message line to
+remind you that \s-2JOVE\s0 is waiting for another character.
+.dc "Prefix-2" "C-X"
+This reads the next character and runs a command based on the character
+typed.  If you wait for more than a second or so before typing another
+character, the message "C-X" will be printed on the message line to
+remind you that \s-2JOVE\s0 is waiting for another character.
+.dc "Prefix-3" "Not Bound"
+This reads the next character and runs a command based on the character
+typed.  If you wait for more than a second or so before typing the next
+character, the character that invoked Prefix-3 will be printed on the
+message line to remind you that \s-2JOVE\s0 is waiting for another one.
+.dc "allow-^S-and-^Q" "(variable)"
+This variable, when set, tells \s-2JOVE\s0 that your terminal does not need
+to use the characters C-S and C-Q for flow control, and that it is
+okay to bind things to them.  This variable should be set depending
+upon what kind of terminal you have.
+.dc "allow-bad-filenames" "(variable)"
+If set, this variable permits filenames to contain "bad" characters
+such as those from the set *&%!"`[]{}.  These files are harder to deal
+with, because the characters mean something to the shell.  The default
+value is "off".
+.dc "append-region" "Not Bound"
+This appends the region to a specified file.  If the file does not
+already exist it is created.
+.dc "apropos" "Not Bound"
+This types out all the commands, variables and macros with the specific
+keyword in their names.  For each command and macro that contains the
+string, the key sequence that can be used to execute the command or macro is
+printed; with variables, the current value is printed.  So, to find all the
+commands that are related to windows, you type
+.DS
+ESC X apropos window<Return>
+.DE
+.dc "auto-case-abbrev" "(variable)"
+When this variable is on (the default), word abbreviations are adjusted for
+case automatically.  For example, if "jove" were the abbreviation for
+"jonathan's own version of emacs", then typing "jove" would give you
+"jonathan's own version of emacs", typing "Jove" would give you "Jonathan's
+own version of emacs", and typing "JOVE" would give you "Jonathan's Own
+Version of Emacs".  When this variable is "off", upper and lower case are
+distinguished when looking for the abbreviation, i.e., in the example above,
+"JOVE" and "Jove" would not be expanded unless they were defined separately.
+.dc "auto-execute-command" "Not Bound"
+This tells \s-2JOVE\s0 to execute a command automatically when a file whose
+name matches a specified pattern is visited.  The first argument is the
+command you want executed and the second is a regular expression
+pattern that specifies the files that apply.  For example, if you want
+to be in show-match-mode when you edit C source files (that is, files
+that end with ".c" or ".h") you can type
+.ID
+ESC X auto-execute-command show-match-mode .*\.[ch]$
+.DE
+.dc "auto-execute-macro" "Not Bound"
+This is like
+.IQ auto-execute-command
+except you use it to execute macros
+automatically instead of built-in commands.
+.dc "auto-fill-mode" "Not Bound"
+This turns on Auto Fill mode (or off if it's currently on) in the
+selected buffer.  When \s-2JOVE\s0 is in Auto Fill mode it automatically
+breaks lines for you when you reach the right margin so you don't have
+to remember to hit Return.  \s-2JOVE\s0 uses 78 as the right margin but you
+can change that by setting the variable
+.IQ right-margin
+to another
+value.  See the
+.IQ set
+command to learn how to do this.
+.dc "auto-indent-mode" "Not Bound"
+This turns on Auto Indent mode (or off if it's currently on) in the
+selected buffer.  When \s-2JOVE\s0 is in Auto Indent mode, Return indents the
+new line to the same position as the line you were just on.  This is
+useful for lining up C code (or any other language (but what else is
+there besides C?)).  This is out of date because of the new command
+called
+.IQ newline-and-indent
+but it remains because of several
+"requests" on the part of, uh, enthusiastic and excitable users, that
+it be left as it is.
+.dc "backward-character" "C-B"
+This moves point backward over a single character.  If point is at the
+beginning of the line it moves to the end of the previous line.
+.dc "backward-paragraph" "ESC ["
+This moves point backward to the beginning of the current or previous
+paragraph.  Paragraphs are bounded by lines that begin with a Period or
+Tab, or by blank lines; a change in indentation may also signal a break
+between paragraphs, except that \s-2JOVE\s0 allows the first line of a paragraph
+to be indented differently from the other lines.
+.dc "backward-s-expression" "ESC C-B"
+This moves point backward over a s-expression.  It is just like
+.IQ forward-s-expression
+with a negative argument.
+.dc "backward-sentence" "ESC A"
+This moves point backward to the beginning of the current or previous
+sentence.  \s-2JOVE\s0 considers the end of a sentence to be the characters
+".", "!" or "?" followed by a Return or by one or more spaces.
+.dc "backward-word" "ESC B"
+This moves point backward to the beginning of the current or previous
+word.
+.dc "bad-filename-extensions" "(variable)"
+This contains a list of words separated by spaces which are to be
+considered bad filename extensions, and so will not be counted in
+filename completion.  The default is ".o" so if you have jove.c and
+jove.o in the same directory, the filename completion will
+.IQ not
+complain
+of an ambiguity because it will ignore jove.o.
+.dc "beginning-of-file" "ESC <"
+This moves point backward to the beginning of the buffer.  This
+sometimes prints the "Point Pushed" message.  If the top of the buffer
+isn't on the screen \s-2JOVE\s0 will set the mark so you can go back to where
+you were if you want.
+.dc "beginning-of-line" "C-A"
+This moves point to the beginning of the current line.
+.dc "beginning-of-window" "ESC ,"
+This moves point to the beginning of the current window.  The sequence
+"ESC ," is the same as "ESC <" (beginning of file) except without the shift
+key on the "<", and can thus can easily be remembered.
+.dc "bind-to-key" "Not Bound"
+This attaches a key to an internal \s-2JOVE\s0 command so that future hits on
+that key invoke that command.  For example, to make "C-W" erase the
+previous word, you type "ESC X bind-to-key kill-previous-word C-W".
+.dc "bind-macro-to-key" "Not Bound"
+This is like
+.IQ bind-to-key
+except you use it to attach keys to
+named macros.
+.dc "bind-macro-to-word-abbrev" "Not Bound"
+This command allows you to bind a macro to a previously defined word
+abbreviation.  Whenever you type the abbreviation, it will first be expanded
+as an abbreviation, and then the macro will be executed.  Note that if the
+macro moves around, you should set the mark first (C-@) and then exchange
+the point and mark last (C-X C-X).
+.dc "buffer-position" "Not Bound"
+This displays the current file name, current line number, total number
+of lines, percentage of the way through the file, and the position of
+the cursor in the current line.
+.dc "c-mode" "Not Bound"
+This turns on C mode in the currently selected buffer.  This is one of
+currently four possible major modes:  Fundamental, Text, C, Lisp.
+When in C or Lisp mode, Tab, "}", and ")" behave a little differently
+from usual: They are indented to the "right" place for C (or Lisp)
+programs.  In \s-2JOVE\s0, the "right" place is simply the way the author
+likes it (but I've got good taste).
+.dc "case-character-capitalize" "Not Bound"
+This capitalizes the character after point, i.e., the character undo
+the cursor.  If a negative argument is supplied that many characters
+.IQ before
+point are upper cased.
+.dc "case-ignore-search" "(variable)"
+This variable, when set, tells \s-2JOVE\s0 to treat upper and lower case as
+the same when searching.  Thus "jove" and "JOVE" would match, and
+"JoVe" would match either.  The default value of this variable is "off".
+.dc "case-region-lower" "Not Bound"
+This changes all the upper case letters in the region to their lower
+case equivalent.
+.dc "case-region-upper" "Not Bound"
+This changes all the lower case letters in the region to their upper
+case equivalent.
+.dc "case-word-capitalize" "ESC C"
+This capitalizes the current word by making the current letter upper
+case and making the rest of the word lower case.  Point is moved to
+the end of the word.  If point is not positioned on a word it is first
+moved forward to the beginning of the next word.  If a negative
+argument is supplied that many words
+.IQ before
+point are capitalized.
+This is useful for correcting the word just typed without having to
+move point to the beginning of the word yourself.
+.dc "case-word-lower" "ESC L"
+This lower-cases the current word and leaves point at the end of it.
+If point is in the middle of a word the rest of the word is
+converted.  If point is not in a word it is first moved forward to the
+beginning of the next word.  If a negative argument is supplied that
+many words
+.IQ before
+point are converted to lower case.  This is useful
+for correcting the word just typed without having to move point to the
+beginning of the word yourself.
+.dc "case-word-upper" "ESC U"
+This upper-cases the current word and leaves point at the end of it.
+If point is in the middle of a word the rest of the word is
+converted.  If point is not in a word it is first moved forward to the
+beginning of the next word.  If a negative argument is supplied that
+many words
+.IQ before
+point are converted to upper case.  This is useful
+for correcting the word just typed without having to move point to the
+beginning of the word yourself.
+.dc "character-to-octal-insert" "Not Bound"
+This inserts a Back-slash followed by the ascii value of the next
+character typed.  For example, "C-G" inserts the string "\\007".
+.dc "cd" "Not Bound"
+This changes the current directory.
+.dc "clear-and-redraw" "ESC C-L"
+This clears the entire screen and redraws all the windows.  Use this
+when \s-2JOVE\s0 gets confused about what's on the screen, or when the screen
+gets filled with garbage characters or output from another program.
+.dc "comment-format" "(variable)"
+This variable tells \s-2JOVE\s0 how to format your comments when you run the
+command
+.IQ fill-comment.
+Its format is this:
+.ID
+<open pattern>%!<line header>%c<line trailer>%!<close pattern>
+.DE
+The %!, %c, and %! must appear in the format; everything else is optional.
+A newline (represented by %n) may appear in the open or close patterns.  %%
+is the representation for %.  The default comment format is for C comments.
+See
+.IQ fill-comment
+for more.
+.dc "compile-it" "C-X C-E"
+This compiles your program by running the UNIX command "make" into a buffer,
+and automatically parsing the error messages that are created (if any).  See
+the
+.IQ parse-errors
+and
+.IQ parse-special-errors
+commands.  To compile
+a C program without "make", use "C-U C-X C-E" and \s-2JOVE\s0 will prompt
+for a command to run instead of make.  (And then the command you type will
+become the default command.)  You can use this to parse the output from the
+C compiler or the "grep" or "lint" programs.
+.dc "continue-process" "Not Bound"
+This sends SIGCONT to the current interactive process,
+.IQ if
+the process
+is currently stopped.
+.dc "copy-region" "ESC W"
+This takes all the text in the region and copies it onto the kill ring
+buffer.  This is just like running
+.IQ kill-region
+followed by the
+.IQ yank
+command.  See the
+.IQ kill-region
+and
+.IQ yank
+commands.
+.dc "current-error" "Not Bound"
+This moves to the current error in the list of parsed errors.  See the
+.IQ next-error
+and
+.IQ previous-error
+commands for more detailed
+information.
+.dc "date" "Not Bound"
+This prints the date on the message line.
+.dc "define-mode-word-abbrev" "Not Bound"
+This defines a mode-specific abbreviation.
+.dc "define-global-word-abbrev" "Not Bound"
+This defines a global abbreviation.
+.dc "delete-blank-lines" "C-X C-O"
+This deletes all the blank lines around point.  This is useful when you
+previously opened many lines with "C-O" and now wish to delete the
+unused ones.
+.dc "delete-buffer" "C-X K"
+This deletes a buffer and frees up all the memory associated with it.
+Be careful!  Once a buffer has been deleted it is gone forever.  \s-2JOVE\s0
+will ask you to confirm if you try to delete a buffer that needs
+saving.  This command is useful for when \s-2JOVE\s0 runs out of space to
+store new buffers.
+.dc "delete-macro" "Not Bound"
+This deletes a macro from the list of named macros.  It is an error to
+delete the keyboard-macro.  Once the macro is deleted it is gone forever.
+If you are about to save macros to a file and decide you don't want to save
+a particular one, delete it.
+.dc "delete-next-character" "C-D"
+This deletes the character that's just after point (that is, the
+character under the cursor).  If point is at the end of a line, the
+line separator is deleted and the next line is joined with the current
+one.
+.dc "delete-other-windows" "C-X 1"
+This deletes all the other windows except the current one.  This can be
+thought of as going back into One Window mode.
+.dc "delete-previous-character" "Rubout"
+This deletes the character that's just before point (that is, the
+character before the cursor).  If point is at the beginning of the
+line, the line separator is deleted and that line is joined with the
+previous one.
+.dc "delete-white-space" "ESC \\\\"
+This deletes all the Tabs and Spaces around point.
+.dc "delete-current-window" "C-X D"
+This deletes the current window and moves point into one of the
+remaining ones.  It is an error to try to delete the only remaining
+window.
+.dc "describe-bindings" "Not Bound"
+This types out a list containing each bound key and the command that gets
+invoked every time that key is typed.  To make a wall chart of \s-2JOVE\s0
+commands, set
+.IQ send-typeout-to-buffer
+to "on" and \s-2JOVE\s0 will
+store the key bindings in a buffer which you can save to a file and then
+print.
+.dc "describe-command" "Not Bound"
+This prints some info on a specified command.
+.dc "describe-key" "Not Bound"
+This waits for you to type a key and then tells the name of the
+command that gets invoked every time that key is hit.  Once you have
+the name of the command you can use the
+.IQ describe-command
+command
+to find out exactly what it does.
+.dc "describe-variable" "Not Bound"
+This prints some info on a specified variable.
+.dc "digit" "ESC [0-9]"
+This reads a numeric argument.  When you type "ESC" followed by a
+number, "digit" keeps reading numbers until you type some other
+command.  Then that command is executes with the numeric argument you
+specified.
+.dc "digit-1" "Not Bound"
+This pretends you typed "ESC 1".  This is useful for terminals that
+have keypads that send special sequences for numbers typed on the
+keypad as opposed to numbers typed from the keyboard.  This can save
+having type "ESC" when you want to specify an argument.
+.dc "digit-2" "Not Bound"
+This pretends you typed "ESC 2".  This is useful for terminals that
+have keypads that send special sequences for numbers typed on the
+keypad as opposed to numbers typed from the keyboard.  This can save
+having type "ESC" when you want to specify an argument.
+.dc "digit-3" "Not Bound"
+This pretends you typed "ESC 3".  This is useful for terminals that
+have keypads that send special sequences for numbers typed on the
+keypad as opposed to numbers typed from the keyboard.  This can save
+having type "ESC" when you want to specify an argument.
+.dc "digit-4" "Not Bound"
+This pretends you typed "ESC 4".  This is useful for terminals that
+have keypads that send special sequences for numbers typed on the
+keypad as opposed to numbers typed from the keyboard.  This can save
+having type "ESC" when you want to specify an argument.
+.dc "digit-5" "Not Bound"
+This pretends you typed "ESC 5".  This is useful for terminals that
+have keypads that send special sequences for numbers typed on the
+keypad as opposed to numbers typed from the keyboard.  This can save
+having type "ESC" when you want to specify an argument.
+.dc "digit-6" "Not Bound"
+This pretends you typed "ESC 6".  This is useful for terminals that
+have keypads that send special sequences for numbers typed on the
+keypad as opposed to numbers typed from the keyboard.  This can save
+having type "ESC" when you want to specify an argument.
+.dc "digit-7" "Not Bound"
+This pretends you typed "ESC 7".  This is useful for terminals that
+have keypads that send special sequences for numbers typed on the
+keypad as opposed to numbers typed from the keyboard.  This can save
+having type "ESC" when you want to specify an argument.
+.dc "digit-8" "Not Bound"
+This pretends you typed "ESC 8".  This is useful for terminals that
+have keypads that send special sequences for numbers typed on the
+keypad as opposed to numbers typed from the keyboard.  This can save
+having type "ESC" when you want to specify an argument.
+.dc "digit-9" "Not Bound"
+This pretends you typed "ESC 9".  This is useful for terminals that
+have keypads that send special sequences for numbers typed on the
+keypad as opposed to numbers typed from the keyboard.  This can save
+having type "ESC" when you want to specify an argument.
+.dc "digit-0" "Not Bound"
+This pretends you typed "ESC 0".  This is useful for terminals that
+have keypads that send special sequences for numbers typed on the
+keypad as opposed to numbers typed from the keyboard.  This can save
+having type "ESC" when you want to specify an argument.
+.dc "dirs" "Not Bound"
+This prints out the directory stack.  See the "cd", "pushd", "popd"
+commands for more info.
+.dc "disable-biff" "(variable)"
+When this is set, \s-2JOVE\s0 disables biff when you're editing and enables it
+again when you get out of \s-2JOVE\s0, or when you pause to the parent shell
+or push to a new shell. (This means arrival of new mail will not be
+immediately apparent but will not cause indiscriminate writing on the
+display). The default is "off".
+.dc "dstop-process" "Not Bound"
+Send the "dsusp" character to the current process.  This is the
+character that suspends a process on the next read from the
+terminal.  Most people have it set to C-Y.  This only works if
+you have the interactive process feature, and if you are in a
+buffer bound to a process.
+.dc "edit-word-abbrevs" "Not Bound"
+This creates a buffer with a list of each abbreviation and the phrase
+it expands into, and enters a recursive edit to let you change the
+abbreviations or add some more.  The format of this list is
+"abbreviation:phrase" so if you add some more you should follow that
+format.  It's probably simplest just to copy some already existing
+abbreviations and edit them.  When you are done you type "C-X C-C" to
+exit the recursive edit.
+.dc "end-of-file" "ESC >"
+This moves point forward to the end of the buffer.  This sometimes
+prints the "Point Pushed" message.  If the end of the buffer isn't on
+the screen \s-2JOVE\s0 will set the mark so you can go back to where you were
+if you want.
+.dc "end-of-line" "C-E"
+This moves point to the end of the current line.  If the line is too
+long to fit on the screen \s-2JOVE\s0 will scroll the line to the left to
+make the end of the line visible.  The line will slide back to its
+normal position when you move backward past the leftmost visible character
+or when you move off the line altogether.
+.dc "end-of-window" "ESC ."
+This moves point to the last character in the window.
+.dc "eof-process" "Not Bound"
+Sends EOF to the current interactive process.  This only works on
+versions of \s-2JOVE\s0 which run under 4.2-3 BSD VAX UNIX.  You can't send
+EOF to processes on the 2.9 BSD PDP-11 UNIX.
+.dc "erase-buffer" "Not Bound"
+This erases the contents of the specified buffer.  This is like
+.IQ delete-buffer
+except it only erases the contents of the buffer, not
+the buffer itself.  If you try to erase a buffer that needs saving you
+will be asked to confirm it.
+.dc "error-window-size" "(variable)"
+This is the percentage of the screen to use for the error-window on the
+screen.  When you execute
+.IQ compile-it,
+.IQ error-window-size
+percent of the screen will go to the error window.  If the window already
+exists and is a different size, it is made to be this size.  The default
+value is 20%.
+.dc "exchange-point-and-mark" "C-X C-X"
+This moves point to mark and makes mark the old point.  This is for
+quickly moving from one end of the region to another.
+.dc "execute-named-command" "ESC X"
+This is the way to execute a command that isn't bound to any key.
+When you are prompted with ": " you can type the name of the
+command.  You don't have to type the entire name.  Once the command
+is unambiguous you can type Space and \s-2JOVE\s0 will fill in the rest for
+you.
+If you are not sure of the name of the command, type "?" and \s-2JOVE\s0
+will print a list of all the commands that you could possibly match
+given what you've already typed.  If you don't have any idea what the
+command's name is but you know it has something to do with windows
+(for example), you can do "ESC X apropos window" and \s-2JOVE\s0 will print a
+list of all the commands that are related to windows.
+If you find yourself constantly executing the same commands this way
+you probably want to bind them to keys so that you can execute them
+more quickly.  See the
+.IQ bind-to-key
+command.
+.dc "execute-keyboard-macro" "C-X E"
+This executes the keyboard macro.  If you supply a numeric argument the
+macro is executed that many times.
+.dc "execute-macro" "Not Bound"
+This executes a specified macro.  If you supply a numeric argument the
+macro is executed that many times.
+.dc "exit-jove" "C-X C-C"
+This exits \s-2JOVE\s0.  If any buffers need saving \s-2JOVE\s0 will print a warning
+message and ask for confirmation.  If you leave without saving your
+buffers all your work will be lost.  If you made a mistake and really
+do want to exit then you can.  If you are in a recursive editing level
+.IQ exit-jove
+will return you from that.
+.dc "file-creation-mode" "(variable)"
+This variable has an octal value.
+It contains the mode (see
+.IQ chmod(1)
+) with which files should be created.  This mode gets modified by your
+current umask setting (see
+.IQ umask(1)
+).  The default value is usually
+.IQ 0666
+or
+.IQ 0644.
+.dc "files-should-end-with-newline" "(variable)"
+This variable indicates that all files should always have a newline
+at the end.  This is often necessary for line printers and the like.
+When set, if \s-2JOVE\s0 is writing a file whose last character is not a
+newline, it will add one automatically.
+.dc "fill-comment" "Not Bound"
+This command fills in your C comments to make them pretty and readable.
+This filling is done according the variable
+.IQ comment-format.
+.DS L
+/*
+ * the default format makes comments like this.
+ */
+.DE
+This can be changed by changing the format variable.  Other languages
+may be supported by changing the format variable appropriately.  The
+formatter looks backwards from dot for an open comment symbol.  If 
+found, all indentation is done relative the position of the first character
+of the open symbol.  If there is a matching close symbol, the entire 
+comment is formatted.  If not, the region between dot and the open symbol
+is reformatted.
+.dc "fill-paragraph" "ESC J"
+This rearranges words between lines so that all the lines in the current
+paragraph extend as close to the right margin as possible, ensuring that
+none of the lines will be greater than the right margin.  The default value
+for
+.IQ right-margin
+is 78, but can be changed with the
+.IQ set
+and
+.IQ right-margin-here
+commands.  \s-2JOVE\s0 has a complicated algorithm
+for determining the beginning and end of the paragraph.  In the normal case
+\s-2JOVE\s0 will give all the lines the same indent as they currently have,
+but if you wish to force a new indent you can supply a numeric argument to
+.IQ fill-paragraph
+(e.g., by typing C-U ESC J)
+and \s-2JOVE\s0 will indent each line to the column
+specified by the
+.IQ left-margin
+variable.  See also the
+.IQ left-margin
+variable and
+.IQ left-margin-here
+command.
+.dc "fill-region" "Not Bound"
+This is like
+.IQ fill-paragraph,
+except it operates on a region instead of
+just a paragraph.
+.dc "filter-region" "Not Bound"
+This sends the text in the region to a UNIX command, and replaces the
+region with the output from that command.  For example, if you are
+lazy and don't like to take the time to write properly indented C
+code, you can put the region around your C file and
+.IQ filter-region
+it
+through
+.IQ cb,
+the UNIX C beautifier.  If you have a file that contains
+a bunch of lines that need to be sorted you can do that from inside
+\s-2JOVE\s0 too, by filtering the region through the
+.IQ sort
+UNIX command.
+Before output from the command replaces the region \s-2JOVE\s0 stores the old
+text in the kill ring, so if you are unhappy with the results you can
+easily get back the old text with "C-Y".
+.dc "find-file" "C-X C-F"
+This visits a file into its own buffer and then selects that buffer.
+If you've already visited this file in another buffer, that buffer is
+selected.  If the file doesn't yet exist, \s-2JOVE\s0 will print "(New file)"
+so that you know.
+.dc "find-tag" "C-X T"
+This finds the file that contains the specified tag.  \s-2JOVE\s0 looks up
+tags by default in the "tags" file in the current directory.  You can change
+the default tag name by setting the
+.IQ tag-file
+variable to another
+name.  If you specify a numeric argument to this command, you will be
+prompted for a tag file.  This is a good way to specify another tag file
+without changing the default.  If the tag cannot be found the error is
+reported and point stays where it is.
+.dc "find-tag-at-point" "Not Bound"
+This finds the file that contains the tag that point is currently on.
+See
+.IQ find-tag.
+.dc "first-non-blank" "ESC M"
+This moves point back to the indent of the current line.
+.dc "forward-character" "C-F"
+This moves forward over a single character.  If point is at the end of
+the line it moves to the beginning of the next one.
+.dc "forward-paragraph" "ESC ]"
+This moves point forward to the end of the current or next paragraph.
+Paragraphs are bounded by lines that begin with a Period or Tab, or by blank
+lines; a change in indentation may also signal a break between paragraphs,
+except that \s-2JOVE\s0 allows the first line of a paragraph to be indented
+differently from the other lines.
+.dc "forward-s-expression" "ESC C-F"
+This moves point forward over a s-expression.  If the first significant
+character after point is "(", this moves past the matching ")".  If the
+character begins an identifier, this moves just past it.  This is mode
+dependent, so this will move over atoms in LISP mode and C identifiers in C
+mode.  \s-2JOVE\s0 also matches "{".
+.dc "forward-sentence" "ESC E"
+This moves point forward to the end of the current or next sentence.
+\s-2JOVE\s0 considers the end of a sentence to be the characters ".", "!" or
+"?" followed by a Return, or one or more spaces.
+.dc "forward-word" "ESC F"
+This moves point forward to the end of the current or next word.
+.dc "fundamental-mode" "Not Bound"
+This sets the major mode to Fundamental.  This affects what \s-2JOVE\s0
+considers as characters that make up words.  For instance,
+Single-quote is not part of a word in Fundamental mode, but is in Text
+mode.
+.dc "goto-line" "ESC G"
+If a numeric argument is supplied point moves to the beginning of that
+line.  If no argument is supplied, point remains where it is.  This is
+so you don't lose your place unintentionally, by accidentally hitting
+the "G" instead of "F".
+.dc "grind-s-expr" "Not Bound"
+When point is positioned on a "(", this re-indents that LISP expression.
+.dc "grow-window" "C-X ^"
+This makes the current window one line bigger.  This only works when
+there is more than one window and provided there is room to change the
+size.
+.dc "paren-flash" ") } ]"
+This handles the C mode curly brace indentation, the Lisp mode paren
+indentation, and the Show Match mode paren/curly brace/square bracket
+flashing.
+.dc "handle-tab" "Tab"
+This handles indenting to the "right" place in C and Lisp mode, and
+just inserts itself in Text mode.
+.dc "i-search-forward" "Not Bound"
+Incremental search.  Like search-forward except that instead of prompting
+for a string and searching for that string all at once, it accepts the string
+one character at a time.  After each character you type as part of the search
+string, it searches for the entire string so far.  When you like what it
+found, type the Return key to finish the search.  You can take back a
+character with Rubout and the search will back up to the position before
+that character was typed.  C-G aborts the search.
+.dc "i-search-reverse" "Not Bound"
+Incremental search.  Like search-reverse except that instead of prompting
+for a string and searching for that string all at once, it accepts the string
+one character at a time.  After each character you type as part of the search
+string, it searches for the entire string so far.  When you like what it
+found, type the Return key to finish the search.  You can take back a
+character with Rubout and the search will back up to the position before
+that character was typed.  C-G aborts the search.
+.dc "insert-file" "C-X C-I"
+This inserts a specified file into the current buffer at point.  Point
+is positioned at the beginning of the inserted file.
+.dc "internal-tabstop" "(variable)"
+The number of spaces \s-2JOVE\s0 should print when it displays a tab character.
+The default value is 8.
+.dc "interrupt-process" "Not Bound"
+This sends the interrupt character (usually C-C) to the interactive process
+in the current buffer.  This is only for versions of \s-2JOVE\s0 that have the
+interactive processes feature.  This only works when you are inside a buffer
+that's attached to a process.
+.dc "i-shell" "Not Bound"
+This starts up an interactive shell in a window.  \s-2JOVE\s0 uses "shell-1"
+as the name of the buffer in which the interacting takes place.  See
+the manual for information on how to use interactive processes.
+.dc "i-shell-command" "Not Bound"
+This is like
+.IQ shell-command
+except it lets you continue with your
+editing while the command is running.  This is really useful for long
+running commands with sporadic output.  See the manual for information
+on how to use interactive processes.
+.dc "kill-next-word" "ESC D"
+This kills the text from point to the end of the current or next word.
+.dc "kill-previous-word" "ESC Rubout"
+This kills the text from point to the beginning of the current or
+previous word.
+.dc "kill-process" "Not Bound"
+This command prompts for a buffer name or buffer number (just as
+select-buffer does) and then sends the process in that buffer a
+kill signal (9).
+.dc "kill-region" "C-W"
+This deletes the text in the region and saves it on the kill ring.
+Commands that delete text but save it on the kill ring all have the
+word "kill" in their names.  Type "C-Y" to yank back the most recent
+kill.
+.dc "kill-s-expression" "ESC C-K"
+This kills the text from point to the end of the current or next
+s-expression.
+.dc "kill-some-buffers" "Not Bound"
+This goes through all the existing buffers and asks whether or not to kill
+them.  If you decide to kill a buffer, and it turns out that the buffer is
+modified, \s-2JOVE\s0 will offer to save it first.  This is useful for when \s-2JOVE\s0
+runs out of memory to store lines (this only happens on PDP-11's) and you
+have lots of buffers that you are no longer using.
+.dc "kill-to-beginning-of-sentence" "C-X Rubout"
+This kills from point to the beginning of the current or previous
+sentence.
+.dc "kill-to-end-of-line" "C-K"
+This kills from point to the end of the current line.  When point is
+at the end of the line the line separator is deleted and the next line
+is joined with current one.  If a numeric argument is supplied that
+many lines are killed; if the argument is negative that many lines
+.IQ before
+point are killed; if the argument is zero the text from point
+to the beginning of the line is killed.
+.dc "kill-to-end-of-sentence" "ESC K"
+This kills from point to the end of the current or next sentence.  If a
+negative numeric argument is supplied it kills from point to the
+beginning of the current or previous sentence.
+.dc "left-margin" "(variable)"
+This is how far lines should be indented when auto-indent mode is on,
+or when the
+.IQ newline-and-indent
+command is run (usually by typing
+LineFeed).  It is also used by fill-paragraph and auto-fill mode.
+If the value is zero (the default) then the left margin is determined
+from the surrounding lines.
+.dc "left-margin-here" "Not Bound"
+This sets the
+.IQ left-margin
+variable to the current position of
+point.  This is an easy way to say, "Make the left margin begin here,"
+without having to count the number of spaces over it actually is.
+.dc "lisp-mode" "Not Bound"
+This turns on Lisp mode.  Lisp mode is one of four mutually exclusive major
+modes: Fundamental, Text, C, and Lisp.  In Lisp mode, the characters Tab
+and ) are treated specially, similar to the way they are treated in C mode.
+Also, Auto Indent mode is affected, and handled specially.
+.dc "list-buffers" "C-X C-B"
+This types out a list containing various information about each buffer.
+Right now that list looks like this:
+.DS
+.ta \w'NO111'u +\w'Lines1'u +\w'Scratch111'u +\w'*1'u +\w'commands.doc111'u
+\ (* means the buffer needs saving)
+\ NO   Lines   Type            Name    File
+\ --   -----   ----            ----    ----
+\ 1    1       File            Main    [No file]
+\ 2    1       Scratch *       Minibuf [No file]
+\ 3    519     File    *       commands.doc    commands.doc
+.DE
+The first column lists the buffer's number.  When \s-2JOVE\s0 prompts for a
+buffer name you can either type in the full name, or you can simply
+type the buffer's number.  The second column is the number of lines in
+the buffer.  The third says what type of buffer.  There are four
+types: "File", "Scratch", "Process", "I-Process".  "File" is simply a
+buffer that holds a file; "Scratch" is for buffers that \s-2JOVE\s0 uses
+internally; "Process" is one that holds the output from a UNIX
+command; "I-Process" is one that has an interactive process attached to
+it.  The next column contains the name of the buffer.  And the last
+column is the name of the file that's attached to the buffer.  In this
+case, both Minibuf and commands.doc have been changed but not yet
+saved.  In fact Minibuf won't be saved since it's an internal \s-2JOVE\s0
+buffer that I don't even care about.
+.dc "list-processes" "Not Bound"
+This makes a list somewhat like "list-buffers" does, except its
+list consists of the current interactive processes.  Right now the list
+looks like this:
+.DS
+.ta \w'shell-111111111111'u +\w'Running1111111111'u
+\ Buffer       Status  Command name
+\ ------       ------  ------- ----
+\ shell-1      Running i-shell
+\ fgrep        Done    fgrep -n Buffer *.c
+.DE
+The first column has the name of the buffer to which the process is
+attached.  The second has the status of the process; if a process has
+exited normally the status is "Done" as in fgrep; if the process
+exited with an error the status is "Exit N" where N is the value of
+the exit code; if the process was killed by some signal the status is
+the name of the signal that was used; otherwise the process is
+running.  The last column is the name of the command that is being run.
+.dc "mailbox" "(variable)"
+Set this to the full pathname of your mailbox.  \s-2JOVE\s0 will look here to
+decide whether or not you have any unread mail.  This defaults to
+/usr/spool/mail/$USER, where $USER is set to your login name.
+.dc "mail-check-frequency" "(variable)"
+This is how often (in seconds) \s-2JOVE\s0 should check your mailbox for
+incoming mail.  See also the
+.IQ mailbox
+and
+.IQ disable-biff
+variables.
+.dc "make-backup-files" "(variable)"
+If this variable is set, then whenever \s-2JOVE\s0 writes out a file, it will
+move the previous version of the file (if there was one) to "#filename".
+This is often convenient if you save a file by accident.  The default
+value of this variable is "off".
+.IQ Note:
+this is an optional part of
+\s-2JOVE\s0, and your guru may not have it enabled, so it may not work.
+.dc "make-buffer-unmodified" "ESC ~"
+This makes \s-2JOVE\s0 think the selected buffer hasn't been changed even if
+it has.  Use this when you accidentally change the buffer but don't
+want it considered changed.  Watch the mode line to see the * disappear
+when you use this command.  
+.dc "make-macro-interactive" "Not Bound"
+This command is meaningful only while you are defining a keyboard macro.
+Ordinarily, when a command in a macro definition requires a trailing
+text argument (file name, search string, etc.), the argument you
+supply becomes part of the macro definition.  If you want to be able
+to supply a different argument each time the macro is used, then while
+you are defining it, you should give the make-macro-interactive
+command just before typing the argument which will be used during the
+definition process.  Note: you must bind this command to a key in
+order to use it; you can't say ESC X make-macro-interactive.
+.dc "mark-threshold" "(variable)"
+This variable contains the number of lines point may move by before
+the mark is set.  If, in a search or something, point moves by more
+than this many lines, the mark is set so that you may return easily.
+The default value of this variable is 22 (one screenful, on most
+terminals).
+.dc "marks-should-float" "(variable)"
+When this variable is "off", the position of a mark is remembered as a line
+number within the buffer and a character number within the line.  If you add
+or delete text before the mark, it will no longer point to the text you
+marked originally because that text is no longer at the same line and
+character number.  When this variable is "on", the position of a mark is
+adjusted to compensate for each insertion and deletion.  This makes marks
+much more sensible to use, at the cost of slowing down insertion and
+deletion somewhat.  The default value is "on".
+.dc "match-regular-expressions" "(variable)"
+When set, \s-2JOVE\s0 will match regular expressions in search patterns.
+This makes special the characters ., *, [, ], ^, and $, and the two-character
+sequences \e<, \e>, \e\|{, \e\|} and \e\||.
+See the
+.IQ ed(1)
+manual page, the tutorial "Advanced Editing in 
+.UX
+", and the section above "Searching with Regular Expressions"
+for more information.
+.dc "meta-key" "(variable)"
+You should set this variable to "on" if your terminal has a real Meta
+key.
+If your terminal has such a key, then a key sequence like ESC Y can
+be entered by holding down Meta and typing Y.
+.dc "mode-line" "(variable)"
+The format of the mode line can be determined by setting this variable.
+The items in the line are specified using a printf(3) format, with the
+special things being marked as "%x".  Digits may be used between the
+'%' and the 'x' to mean repeat that many times.
+\&'x' may be:
+.DS I
+.ta .5i 1i 1.5i
+       C       check for new mail, and displays "[New mail]" if there
+               is any (see also the mail-check-interval and disable-biff
+               variables)
+       F       the current file name, with leading path stripped
+       M       the current list of major and minor modes
+       b       the current buffer name
+       c       the fill character (-)
+       d       the current directory
+       e       end of string--this must be the last item in the string
+       f       the current file name
+       l       the current load average (updated automatically)
+       m       the buffer-modified symbol (*)
+       n       the current buffer number
+       s       space, but only if previous character is not a space
+       t       the current time (updated automatically)
+       [ ]     the square brackets printed when in a recursive edit
+       ( )     items enclosed in %( ... %) will only be printed on
+               the bottom mode line, rather than copied when the
+               window is split
+.DE
+In addition, any other character is simply copied into the mode line.
+Characters may be escaped with a backslash.  To get a feel for all
+this, try typing "ESC X print mode-line" and compare the result with
+your current mode line.
+.dc "mode-line-should-standout" "(variable)"
+If set, the mode line will be printed in reverse video, if your
+terminal supports it.  The default for this variable is "off".
+.dc "name-keyboard-macro" "Not Bound"
+This copies the keyboard macro and gives it a name freeing up the
+keyboard macro so you can define some more.  Keyboard macros with
+their own names can be bound to keys just like built in commands
+can.  See the
+.IQ read-macros-file-file
+and
+.IQ write-macros-to-file
+commands.
+.dc "newline" "Return"
+This divides the current line at point moving all the text to the
+right of point down onto the newly created line.  Point moves down to
+the beginning of the new line.
+.dc "newline-and-backup" "C-O"
+This divides the current line at point moving all the text to the
+right of point down onto the newly created line.  The difference
+between this and "newline" is that point does not move down to the
+beginning of the new line.
+.dc "newline-and-indent" "LineFeed"
+This behaves the same was as Return does when in Auto Indent mode.
+This makes Auto Indent mode obsolete but it remains in the name of
+backward compatibility.
+.dc "next-error" "C-X C-N"
+This moves to the next error in the list of errors that were parsed
+with
+.IQ parse-errors
+or
+.IQ parse-special-errors.
+In one window the list
+of errors is shown with the current one always at the top.  In another
+window is the file that contains the error.  Point is positioned in
+this window on the line where the error occurred.
+.dc "next-line" "C-N"
+This moves down to the next line.
+.dc "next-page" "C-V"
+This displays the next page of the buffer by taking the bottom line of
+the window and redrawing the window with it at the top.  If there isn't
+another page in the buffer \s-2JOVE\s0 rings the bell.  If a numeric argument
+is supplied the screen is scrolled up that many lines; if the argument
+is negative the screen is scrolled down.
+.dc "next-window" "C-X N"
+This moves into the next window.  Windows live in a circular list so
+when you're in the bottom window and you try to move to the next one
+you are moved to the top window.  It is an error to use this command
+with only one window.
+.dc "number-lines-in-window" "Not Bound"
+This displays the line numbers for each line in the buffer being
+displayed.  The number isn't actually part of the text; it's just
+printed before the actual buffer line is.  To turn this off you run
+the command again; it toggles.
+.dc "over-write-mode" "Not Bound"
+This turns Over Write mode on (or off if it's currently on) in the selected
+buffer.  When on, this mode changes the way the self-inserting characters
+work.  Instead of inserting themselves and pushing the rest of the line over
+to the right, they replace or over-write the existing character.  Also,
+Rubout replaces the character before point with a space instead of deleting
+it.  When Over Write mode is on "OvrWt" is displayed on the mode line.
+.dc "page-next-window" "ESC C-V"
+This displays the next page in the next window.  This is exactly the
+same as "C-X N C-V C-X P".
+.dc "paren-flash-delay" "(variable)"
+How long, in tenths of seconds, \s-2JOVE\s0 should pause on a matching
+parenthesis in
+.IQ Show Match
+mode.  The default is 5.
+.dc "parse-errors" "Not Bound"
+This takes the list of C compilation errors (or output from another program
+in the same format) in the current buffer and parses them for use with the
+.IQ next-error
+and
+.IQ previous-error
+and
+.IQ current-error
+commands.
+This is a very useful tool and helps with compiling C programs and when used
+in conjunction with the "grep" UNIX command very helpful in making changes
+to a bunch of files.  This command understands errors produced by cc, cpp,
+and lint; plus any other program with the same format (e.g., "grep -n").
+\s-2JOVE\s0 visits each file that has an error and remembers each line that
+contains an error.  It doesn't matter if later you insert or delete
+some lines in the buffers containing errors; \s-2JOVE\s0 remembers where
+they are regardless.
+.IQ next-error
+is automatically executed after one
+of the parse commands, so you end up at the first error.
+.dc "parse-special-errors" "Not Bound"
+This parses errors in an unknown format.  Error parsing works with
+regular expression search strings with \\('s around the the file name
+and the line number.  So, you can use
+.IQ parse-special-errors
+to parse
+lines that are in a slightly different format by typing in your own
+search string.  If you don't know how to use regular expressions you
+can't use this command.
+.dc "parse-spelling-errors-in-buffer" "Not Bound"
+This parses a list of words in the current buffer and looks them up in
+another buffer that you specify.  This will probably go away soon.
+.dc "pause-jove" "ESC S"
+This stops \s-2JOVE\s0 and returns control to the parent shell.  This
+only works for users using the C-shell, and on systems that have the
+job control facility.  To return to \s-2JOVE\s0 you type "fg" to the C-shell.
+.dc "physical-tabstop" "(variable)"
+How many spaces your terminal prints when it prints a tab character.
+.dc "pop-mark" "Not Bound"
+This gets executed when you run
+.IQ set-mark
+with a numeric argument.
+\s-2JOVE\s0 remembers the last 16 marks and you use
+.IQ pop-mark
+to go
+backward through the ring of marks.  If you execute "
+.IQ pop-mark
+enough
+times you will eventually get back to where you started.
+.dc "popd" "Not Bound"
+This pops one entry off the directory stack.  Entries are pushed with
+the
+.IQ pushd
+command.  The names were stolen from the C-shell and the
+behavior is the same.
+.dc "previous-error" "C-X C-P"
+This is the same as
+.IQ next-error
+except it goes to the previous error.
+See
+.IQ next-error
+for documentation.
+.dc "previous-line" "C-P"
+This moves up to the previous line.
+.dc "previous-page" "ESC V"
+This displays the previous page of the current buffer by taking the top
+line and redrawing the window with it at the bottom.  If a numeric
+argument is supplied the screen is scrolled down that many lines; if
+the argument is negative the screen is scrolled up.
+.dc "previous-window" "C-X P and C-X O"
+This moves into the next window.  Windows live in a circular list so
+when you're in the top window and you try to move to the previous one
+you are moved to the bottom window.  It is an error to use this command
+with only one window.
+.dc "print" "Not Bound"
+This prints the value of a \s-2JOVE\s0 variable.
+.dc "print-message" "Not Bound"
+This command prompts for a message, and then prints it on the bottom
+line where \s-2JOVE\s0 messages are printed.
+.dc "process-bind-to-key" "Not Bound"
+This command is identical to bind-to-key, except that it only affects
+your bindings when you are in a buffer attached to a process.  When
+you enter the process buffer, any keys bound with this command will
+automatically take their new values.  When you switch to a non-process
+buffer, the old bindings for those keys will be restored.  For example,
+you might want to execute
+.DS I
+process-bind-to-key stop-process ^Z
+process-bind-to-key interrupt-process ^C
+.DE
+Then, when you start up an interactive process and switch into that
+buffer, C-Z will execute stop-process and C-C will execute interrupt-
+process.  When you switch back to a non-process buffer, C-Z will go
+back to executing scroll-up (or whatever you have it bound to).
+.dc "process-newline" "Return"
+This this only gets executed when in a buffer that is attached to an
+interactive-process.  \s-2JOVE\s0 does two different things depending on where
+you are when you hit Return.  When you're at the end of the I-Process
+buffer this does what Return normally does, except it also makes the
+line available to the process.  When point is positioned at some other
+position that line is copied to the end of the buffer (with the prompt
+stripped) and point is moved there with it, so you can then edit that
+line before sending it to the process.  This command
+.IQ must
+be bound
+to the key you usually use to enter shell commands (Return), or else
+you won't be able to enter any.
+.dc "process-prompt" (variable)
+What a prompt looks like from the i-shell and i-shell-command
+processes.  The default is "% ", the default C-shell prompt.  This is
+actually a regular expression search string.  So you can set it to be
+more than one thing at once using the \\| operator.  For instance, for
+LISP hackers, the prompt can be
+.DS
+"% \\|-> \\|<[0-9]>: ".
+.DE
+.dc "push-shell" "Not Bound"
+This spawns a child shell and relinquishes control to it.  This works
+on any version of UNIX, but this isn't as good as
+.IQ pause-jove
+because
+it takes time to start up the new shell and you get a brand new
+environment every time.  To return to \s-2JOVE\s0 you type "C-D".
+.dc "pushd" "Not Bound"
+This pushes a directory onto the directory stack and cd's into it.  It
+asks for the directory name but if you don't specify one it switches
+the top two entries no the stack.  It purposely behaves the same as
+C-shell's
+.IQ pushd.
+.dc "pwd" "Not Bound"
+This prints the working directory.
+.dc "quadruple-numeric-argument" "C-U"
+This multiplies the numeric argument by 4.  So, "C-U C-F" means
+forward 4 characters and "C-U C-U C-N" means down 16 lines.
+.dc "query-replace-string" "ESC Q"
+This replaces the occurrences of a specified string with a specified
+replacement string.  When an occurrence is found point is moved to it
+and then \s-2JOVE\s0 asks what to do.  The options are:
+.DS I
+.ta \w'Rubout111'u
+Space  to replace this occurrence and go on to the next one.
+Period to replace this occurrence and then stop.
+Rubout to skip this occurrence and go on to the next one.
+C-R    to enter a recursive edit.  This lets you temporarily
+       suspend the replace, do some editing, and then return
+       to continue where you left off.  To continue with the
+       Query Replace type "C-X C-C" as if you were trying to
+       exit \s-2JOVE\s0.  Normally you would but when you are in a
+       recursive edit all it does is exit that recursive
+       editing level.
+C-W    to delete the matched string and then enter a recursive
+       edit.
+U      to undo the last replacement.
+P or ! to go ahead and replace the remaining occurrences without
+       asking.
+Return to stop the Query Replace.
+.DE
+The search for occurrences starts at point and goes to the end of the
+buffer, so to replace in the entire buffer you must first go to the
+beginning.
+.dc "quit-process" "Not Bound"
+This is the same as typing "C-\\" (the Quit character) to a normal UNIX
+process, except it sends it to the current process in \s-2JOVE\s0.  This is
+only for versions of \s-2JOVE\s0 that have the interactive processes feature.
+This only works when you are inside a buffer that's attached to a
+process.
+.dc "quoted-insert" "C-Q"
+This lets you insert characters that normally would be executed as
+other \s-2JOVE\s0 commands.  For example, to insert "C-F" you type "C-Q C-F".
+.dc "read-word-abbrev-file" "Not Bound"
+This reads a specified file that contains a bunch of abbreviation
+definitions, and makes those abbreviations available.  If the selected
+buffer is not already in Word Abbrev mode this command puts it in
+that mode.
+.dc "read-macros-from-file" "Not Bound"
+This reads the specified file that contains a bunch of macro
+definitions, and defines all the macros that were currently defined
+when the file was created.  See
+.IQ write-macros-to-file
+to see how to
+save macros.
+.dc "redraw-display" "C-L"
+This centers the line containing point in the window.  If that line is
+already in the middle the window is first cleared and then redrawn.
+If a numeric argument is supplied, the line is positioned at that
+offset from the top of the window.  For example, "ESC 0 C-L" positions
+the line containing point at the top of the window.
+.dc "recursive-edit" "Not Bound"
+This enters a recursive editing level.  This isn't really very
+useful.  I don't know why it's available for public use.  I think I'll
+delete it some day.
+.dc "rename-buffer" "Not Bound"
+This lets you rename the current buffer.
+.dc "replace-in-region" "Not Bound"
+This is the same as
+.IQ replace-string
+except that it is restricted
+to occurrences between Point and Mark.
+.dc "replace-string" "ESC R"
+This replaces all occurrences of a specified string with a specified
+replacement string.  This is just like
+.IQ query-replace-string
+except
+it replaces without asking.
+.dc "right-margin" "(variable)"
+Where the right margin is for
+.IQ "Auto Fill"
+mode and the
+.IQ justify-paragraph
+and
+.IQ justify-region
+commands.  The default is 78.
+.dc "right-margin-here" "Not Bound"
+This sets the
+.IQ right-margin
+variable to the current position of
+point.  This is an easy way to say, "Make the right margin begin here,"
+without having to count the number of spaces over it actually is.
+.dc "save-file" "C-X C-S"
+This saves the current buffer to the associated file.  This makes your
+changes permanent so you should be sure you really want to.  If the
+buffer has not been modified
+.IQ save-file
+refuses to do the save.  If
+you really do want to write the file you can use "C-X C-W" which
+executes
+.IQ write-file.
+.dc "scroll-down" "ESC Z"
+This scrolls the screen one line down.  If the line containing point
+moves past the bottom of the window point is moved up to the center of
+the window.  If a numeric argument is supplied that many lines are
+scrolled; if the argument is negative the screen is scrolled up
+instead.
+.dc "scroll-step" "(variable)"
+How many lines should be scrolled if the
+.IQ previous-line
+or
+.IQ next-line
+commands move you off the top or bottom of the screen.  You
+may wish to decrease this variable if you are on a slow terminal.
+.dc "scroll-up" "C-Z"
+This scrolls the screen one line up.  If the line containing point
+moves past the top of the window point is moved down to the center of
+the window.  If a numeric argument is supplied that many lines are
+scrolled; if the argument is negative the screen is scrolled down
+instead.
+.dc "search-exit-char" "(variable)"
+Set this to the character you want to use to exit incremental search.
+The default is Newline, which makes i-search compatible with normal
+string search.
+.dc "search-forward" "C-S"
+This searches forward for a specified search string and positions
+point at the end of the string if it's found.  If the string is not
+found point remains unchanged.  This searches from point to the end of
+the buffer, so any matches before point will be missed.
+.dc "search-reverse" "C-R"
+This searches backward for a specified search string and positions
+point at the beginning if the string if it's found.  If the string is
+not found point remains unchanged.  This searches from point to the
+beginning of the buffer, so any matches after point will be missed.
+.dc "select-buffer" "C-X B"
+This selects a new or already existing buffer making it the current
+one.  You can type either the buffer name or number.  If you type in
+the name you need only type the name until it is unambiguous, at which
+point typing Escape or Space will complete it for you.  If you want to
+create a new buffer you can type Return instead of Space, and a new
+empty buffer will be created.
+.dc "self-insert" "Most Printing Characters"
+This inserts the character that invoked it into the buffer at point.
+Initially all but a few of the printing characters are bound to
+.IQ self-insert.
+.dc "send-typeout-to-buffer" "(variable)"
+When this is set \s-2JOVE\s0 will send output that normally overwrites the
+screen (temporarily) to a buffer instead.  This affects commands like
+.IQ list-buffers,
+.IQ list-processes,
+and other commands that use command
+completion.  The default value is "off".
+.dc "set" "Not Bound"
+This gives a specified variable a new value.  Occasionally you'll see
+lines like "set this variable to that value to do this".  Well, you
+use the
+.IQ set
+command to do that.
+.dc "set-mark" "C-@"
+This sets the mark at the current position in the buffer.  It prints
+the message "Point pushed" on the message line.  It says that instead
+of "Mark set" because when you set the mark the previous mark is still
+remembered on a ring of 16 marks.  So "Point pushed" means point is
+pushed onto the ring of marks and becomes the value of "the mark".
+To go through the ring of marks you type "C-U C-@", or execute the
+.IQ pop-mark
+command.  If you type this enough times you will get back
+to where you started.
+.dc "shell" "(variable)"
+The shell to be used with all the shell commands command.  If your SHELL
+environment variable is set, it is used as the value of
+.IQ shell;
+otherwise "/bin/csh" is the default.
+.dc "shell-command" "C-X !"
+This runs a UNIX command and places the output from that command in a
+buffer.  \s-2JOVE\s0 creates a buffer that matches the name of the command
+you specify and then attaches that buffer to a window.  So, when you
+have only one window running this command will cause \s-2JOVE\s0 to split the
+window and attach the new buffer to that window.  Otherwise, \s-2JOVE\s0
+finds the most convenient of the available windows and uses that one
+instead.  If the buffer already exists it is first emptied, except that if
+it's holding a file, not some output from a previous command, \s-2JOVE\s0
+prints an error message and refuses to execute the command.  If you
+really want to execute the command you should delete that buffer
+(saving it first, if you like) or use
+.IQ shell-command-to-buffer,
+and
+try again.
+.dc "shell-command-to-buffer" "Not Bound"
+This is just like
+.IQ shell-command
+except it lets you specify the
+buffer to use instead of \s-2JOVE\s0.
+.dc "shell-flags" "(variable)"
+This defines the flags that are passed to shell commands.  The default is
+"-c".  See the
+.IQ shell
+variable to change the default shell.
+.dc "show-match-mode" "Not Bound"
+This turns on Show Match mode (or off if it's currently on) in the
+selected buffer.  This changes "}" and ")" so that when they are typed
+the are inserted as usual, and then the cursor flashes back to the
+matching "{" or "(" (depending on what was typed) for about half a
+second, and then goes back to just after the "}" or ")" that invoked
+the command.  This is useful for typing in complicated expressions in
+a program.  You can change how long the cursor sits on the matching
+paren by setting the "paren-flash-delay" variable in tenths of a
+second.  If the matching "{" or "(" isn't visible nothing happens.
+.dc "shrink-window" "Not Bound"
+This makes the current window one line shorter, if possible.  Windows
+must be at least 2 lines high, one for the text and the other for the
+mode line.
+.dc "source" "Not Bound"
+This reads a bunch of \s-2JOVE\s0 commands from a file.  The format of the
+file is the same as that in your initialization file (your ".joverc")
+in your main directory.  There should be one command per line and it
+should be as though you typed "ESC X" while in \s-2JOVE\s0.  For example,
+here's part of my initialization file:
+.DS I
+bind-to-key i-search-reverse ^R
+bind-to-key i-search-forward ^S
+bind-to-key pause-jove ^[S
+.DE
+What they do is make "C-R" call the
+.IQ i-search-reverse
+command and
+"C-S" call
+.IQ i-search-forward
+and "ESC S" call
+.IQ pause-jove.
+.dc "spell-buffer" "Not Bound"
+This runs the current buffer through the UNIX
+.IQ spell
+program and places
+the output in buffer "Spell".  Then \s-2JOVE\s0 lets you edit the list of
+words, expecting you to delete the ones that you don't care about, i.e., the
+ones you know are spelled correctly.  Then the
+.IQ parse-spelling-errors-in-buffer
+command comes along and finds all the
+misspelled words and sets things up so the error commands work.
+.dc "split-current-window" "C-X 2"
+This splits the current window into two equal parts (providing the
+resulting windows would be big enough) and displays the selected
+buffer in both windows.  Use "C-X 1" to go back to 1 window mode.
+.dc "start-remembering" "C-X ("
+This starts remembering your key strokes in the Keyboard macro.  To
+stop remembering you type "C-X )".  Because of a bug in \s-2JOVE\s0 you can't
+stop remembering by typing "ESC X stop-remembering";
+.IQ stop-remembering
+must be bound to "C-X )" in order to make things work correctly.  To
+execute the remembered key strokes you type "C-X E" which runs the
+.IQ execute-keyboard-macro
+command.
+Sometimes you may want a macro to accept different input each time it runs.
+To see how to do this, see the
+.IQ make-macro-interactive
+command.
+.dc "stop-process" "Not Bound"
+This sends a stop signal (C-Z, for most people) to the current process.
+It only works if you have the interactive process feature, and you are
+in a buffer attached to a process.
+.dc "stop-remembering" "C-X )"
+This stop the definition of the keyboard macro.  Because of a bug in
+\s-2JOVE\s0, this must be bound to "C-X )".  Anything else will not work
+properly.
+.dc "string-length" "Not Bound"
+This prints the number of characters in the string that point sits in.
+Strings are surrounded by double quotes.  \s-2JOVE\s0 knows that "\\007" is
+considered a single character, namely "C-G", and also knows about
+other common ones, like "\\r" (Return) and "\\n" (LineFeed).  This is
+mostly useful only for C programmers.
+.dc "suspend-jove" "ESC S"
+This is a synonym for
+.IQ pause-jove.
+.dc "sync-frequency" "(variable)"
+The temporary files used by \s-2JOVE\s0 are forced out to disk every
+.IQ sync-frequency
+modifications.  The default is 50, which really makes
+good sense.  Unless your system is very unstable, you probably
+shouldn't fool with this.
+.dc "tag-file" "(variable)"
+This the name of the file in which \s-2JOVE\s0 should look up tag
+definitions.  The default value is "./tags".
+.dc "text-mode" "Not Bound"
+This sets the major mode to Text.  Currently the other modes are
+Fundamental, C and Lisp mode.
+.dc "transpose-characters" "C-T"
+This switches the character before point with the one after point, and
+then moves forward one.  This doesn't work at the beginning of the
+line, and at the end of the line it switches the two characters before
+point.  Since point is moved forward, so that the character that was
+before point is still before point, you can use "C-T" to drag a
+character down the length of a line.  This command pretty quickly
+becomes very useful.
+.dc "transpose-lines" "C-X C-T"
+This switches the current line with the one above it, and then moves
+down one so that the line that was above point is still above point.
+This, like
+.IQ transpose-characters,
+can be used to drag a line down a page.
+.dc "unbind-key" "Not Bound"
+Use this to unbind
+.IQ any
+key sequence.  You can use this to unbind even a
+prefix command, since this command does not use "key-map completion".  For
+example, "ESC X unbind-key ESC [" unbinds the sequence "ESC [".  This is
+useful for "turning off" something set in the system-wide ".joverc" file.
+.dc "update-time-frequency" "(variable)"
+How often the mode line is updated (and thus the time and load
+average, if you display them).  The default is 30 seconds.
+.dc "use-i/d-char" "(variable)"
+If your terminal has insert/delete character capability you can tell \s-2JOVE\s0
+not to use it by setting this to "off".  In my opinion it is only worth using
+insert/delete character at low baud rates.  WARNING: if you set this to
+"on" when your terminal doesn't have insert/delete character capability,
+you will get weird (perhaps fatal) results.
+.dc "version" "Not Bound"
+Displays the version number of this \s-2JOVE\s0.
+.dc "visible-bell" "(variable)"
+Use the terminal's visible bell instead of beeping.  This is set
+automatically if your terminal has the capability.
+.dc "visible-spaces-in-window" "Not Bound"
+This displays an underscore character instead of each space in the
+window and displays a greater-than followed by spaces for each tab
+in the window.  The actual text in the buffer is not changed; only
+the screen display is affected.  To turn this off you run the command
+again; it toggles.
+.dc "visit-file" "C-X C-V"
+This reads a specified file into the current buffer replacing the old
+text.  If the buffer needs saving \s-2JOVE\s0 will offer to save it for you.
+Sometimes you use this to start over, say if you make lots of changes
+and then change your mind.  If that's the case you don't want \s-2JOVE\s0 to
+save your buffer and you answer "NO" to the question.
+.dc "window-find" "C-X 4"
+This lets you select another buffer in another window three
+different ways.  This waits for another character which can be one of
+the following:
+.DS I
+.ta .5i 1i 1.5i
+T      Finds a tag in the other window.
+F      Finds a file in the other window.
+B      Selects a buffer in the other window.
+.DE
+This is just a convenient short hand for "C-X 2" (or "C-X O" if there are
+already two windows) followed by the appropriate sequence for invoking each
+command.  With this, though, there isn't the extra overhead of having to
+redisplay.  In addition, you don't have to decide whether to type "C-X 2" or
+"C-X O" since "C-X 4" does the right thing.
+.dc "word-abbrev-mode" "Not Bound"
+This turns on Word Abbrev mode (or off if it's currently on) in the
+selected buffer.  Word Abbrev mode lets you specify a word (an
+abbreviation) and a phrase with which \s-2JOVE\s0 should substitute the
+abbreviation.  You can use this to define words to expand into long
+phrases, e.g., "jove" can expand into "Jonathan's Own Version of
+Emacs"; another common use is defining words that you often misspell
+in the same way, e.g., "thier" => "their" or "teh" => "the".  See
+the information on the
+.IQ auto-case-abbrev
+variable.
+.sp 1
+There are two kinds of abbreviations: mode specific and global.  If
+you define a Mode specific abbreviation in C mode, it will expand only
+in buffers that are in C mode.  This is so you can have the same
+abbreviation expand to different things depending on your context.
+Global abbreviations expand regardless of the major mode of the
+buffer.  The way it works is this: \s-2JOVE\s0 looks first in the mode
+specific table, and then in the global table.  Whichever it finds it
+in first is the one that's used in the expansion.  If it doesn't find
+the word it is left untouched.
+\s-2JOVE\s0 tries to expand words as they are typed, when you type a
+punctuation character or Space or Return.  If you are in Auto Fill
+mode the expansion will be filled as if you typed it yourself.
+.dc "wrap-search" "(variable)"
+If set, searches will "wrap around" the ends of the buffer instead
+of stopping at the bottom or top.  The default is "off".
+.dc "write-files-on-make" "(variable)"
+When set, all modified files will be written out before calling
+make when the
+.IQ compile-it
+command is executed.  The default is "on".
+.dc "write-word-abbrev-file" "Not Bound"
+This writes the currently defined abbreviations to a specified file.
+They can be read back in and automatically defined with
+.IQ read-word-abbrev-file.
+.dc "write-file" "C-X C-W"
+This saves the current buffer to a specified file, and then makes that
+file the default file name for this buffer.  If you specify a file
+that already exists you are asked to confirm over-writing it.
+.dc "write-macros-to-file" "Not Bound"
+This writes the currently defined macros to a specified file.  The
+macros can be read back in with
+.IQ read-macros-from-file
+so you can
+define macros and still use them in other instantiations of \s-2JOVE\s0.
+.dc "write-modified-files" "C-X C-M"
+This saves all the buffers that need saving.  If you supply a numeric
+argument it asks for each buffer whether you really want to save it.
+.dc "write-region" "Not Bound"
+This writes the text in the region to a specified file.  If the file
+already exists you are asked to confirm over-writing it.
+.dc "yank" "C-Y"
+This undoes the last kill command.  That is, it inserts the killed
+text at point.  When you do multiple kill commands in a row, they are
+merged so that yanking them back with "C\-Y" yanks back all of them.
+.dc "yank-pop" "ESC Y"
+This yanks back previous killed text.  \s-2JOVE\s0 has a kill ring on which
+the last 10 kills are stored.
+.IQ Yank
+yanks a copy of the text at the
+front of the ring.  If you want one of the last ten kills you use "ESC
+Y" which rotates the ring so another different entry is now at the
+front.  You can use "ESC Y" only immediately following a "C-Y" or
+another "ESC Y".  If you supply a negative numeric argument the ring
+is rotated the other way.  If you use this command enough times in a
+row you will eventually get back to where you started.  Experiment
+with this.  It's extremely useful.