Trailing-Edge
-
PDP-10 Archives
-
mit_emacs_170_teco_1220
-
info/emacs.guide
There are no other files named emacs.guide in the archive.
MASSACHUSETTS INSTITUTE OF TECHNOLOGY
ARTIFICIAL INTELLIGENCE LABORATORY
AI Memo 555 2 October 1981
EMACS MANUAL FOR TWENEX USERS
BY
RICHARD M. STALLMAN
A REFERENCE MANUAL
FOR THE EXTENSIBLE, CUSTOMIZABLE, SELF-DOCUMENTING
REAL-TIME DISPLAY EDITOR
This manual corresponds to EMACS version 161
This report describes work done at the Artificial Intelligence
Laboratory of the Massachusetts Institute of Technology. Support
for the laboratory's research is provided in part by the Advanced
Research Projects Agency of the Department of Defense under
Office of Naval Research contract N00014-80-C-0505.
1 EMACS Manual for TWENEX Users
PREFACE
This manual documents the use and simple customization of the
display editor EMACS with the Twenex (officially known as
"TOPS-20") operating system. The reader is not expected to be a
programmer. Even simple customizations do not require
programming skill, but the user who is not interested in
customizing can ignore the scattered customization hints.
This is primarily a reference manual, but can also be used as a
primer. However, I recommend that the newcomer first use the
on-line, learn-by-doing tutorial TEACH-EMACS. With it, you learn
EMACS by using EMACS on a specially designed file which describes
commands, tells you when to try them, and then explains the
results you see. This gives a more vivid introduction than a
printed manual.
On first reading, you need not make any attempt to memorize
chapters 1 and 2, which describe the notational conventions of
the manual and the general appearance of the EMACS display
screen. It is enough to be aware of what questions are answered
in these chapters, so you can refer back when you later become
interested in the answers. After reading the Basic Editing
chapter you should practice the commands there. The next few
chapters describe fundamental techniques and concepts that are
referred to again and again. It is best to understand them
thoroughly, experimenting with them if necessary.
To find the documentation on a particular command, look in the
index if you know what the command is. Both command characters
and function names are indexed. If you know vaguely what the
command does, look in the command summary. The command summary
contains a line or two about each command, and a cross reference
to the section of the manual that describes the command in more
detail; related commands are grouped together. There is also a
glossary, with a cross reference for each term.
Many user-contributed libraries accompany EMACS, and often then
have no documentation except their on-line self-documentation.
Browsing through the catalogue of libraries in this manual is a
good way to find out what is available.
This manual has in two versions, one for ITS, MIT's
Incompatible Timesharing System, and one for Twenex. Each
version comes in three forms: the published form, the LPT form,
and the INFO form. You can order the published form from the
Publications Department of the Artificial Intelligence lab for
2 EMACS Manual for TWENEX Users
$3.25 per copy; be sure to specify the ITS version or the Twenex
version. The LPT form is available on line as
EMACS:EMACS.GUIDE for printing on unsophisticated hard copy
devices such as terminals and line printers. The INFO form is
for on-line perusal with the INFO program. All three forms are
substantially the same.
EMACS is available for distribution for use on Tenex and Twenex
systems (It does not run on Bottoms-10, and the conversion would
not be easy). Mail us a 2400 foot mag tape if you want it. It
does not cost anything; instead, you must join the EMACS
software-sharing commune. The conditions of membership are that
you must send back any improvements you make to EMACS, including
any libraries you write, and that you must not redistribute the
system except exactly as you got it, complete. (You can also
distribute your customizations, separately.)
Please do not attempt to get a copy of EMACS, for yourself or
any one else, by dumping it off of your local system. It is
almost certain to be incomplete or inconsistent. It is pathetic
to hear from sites that received incomplete copies lacking the
sources, asking me years later whether sources are available. If
you wish to give away a copy of EMACS, copy a distribution tape
from MIT, or mail me a tape and get a new one.
For information on the underlying philosophy of EMACS and the
lessons learned from its development, write to me for a copy of
AI memo 519a, "EMACS, the Extensible, Customizable
Self-Documenting Display Editor", or send Arpanet mail to
RMS@MIT-AI.
Yours in hacking,
/ 2 \ 1/2
< X >
\ /
Richard M. Stallman
Artificial Intelligence Lab
545 Tech Square, Rm 913
Cambridge, MA 02139
(617) 253-6765
3 EMACS Manual for TWENEX Users
INTRODUCTION
You are about to read about EMACS, an advanced,
self-documenting, customizable, extensible real-time display
editor.
We say that EMACS is a display editor because normally the text
being edited is visible on the screen and is updated
automatically as you type your commands. See section 1
[Display], page 5.
We call it a 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. See section 3 [Basic],
page 14.
We call EMACS advanced because it provides facilities that go
beyond simple insertion and deletion: filling of text; automatic
indentation of programs; viewing two files at once; and dealing
in terms of characters, words, lines, sentences, paragraphs, and
pages, as well as expressions and comments in several different
programming languages. 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.
Self-documenting means that at any time you can type a special
character, the "Help" key, to find out what your options are.
You can also use it to find out what any command does, or to find
all the commands that pertain to a topic. See section 7 [Help],
page 36.
Customizable means that you can change the definitions of EMACS
commands in little ways. For example, if you use a programming
language in which comments start with <** and end with **>, you
can tell the EMACS comment manipulation commands to use those
strings. Another sort of customization is rearrangement of the
command set. For example, if you prefer the four basic cursor
motion commands (up, down, left and right) on keys in a diamond
pattern on the keyboard, you can have it. See section 21.8
[Customization], page 133.
Extensible means that you can go beyond simple customization
and write entirely new commands, programs in the language TECO.
EMACS is an "on-line extensible" system, which means that it is
divided into many functions that call each other, any of which
can be redefined in the middle of an editing session. Any part
4 EMACS Manual for TWENEX Users
of EMACS can be replaced without making a separate copy of all of
EMACS. Many already written extensions are distributed with
EMACS, and some (including DIRED, PAGE, PICTURE, SORT, TAGS, and
WORDAB) are documented in this manual. Although only a
programmer can write an extension, anybody can use it afterward.
Extension requires programming in TECO, a rather obscure
language. If you are clever and bold, you might wish to learn
how. See the file INFO:CONV.INFO, for advice on learning TECO.
This manual does not even try to explain how to write TECO
programs, but it does contain some notes that are useful
primarily to the extension writer.
5 EMACS Manual for TWENEX Users
CHAPTER ONE
THE ORGANIZATION OF THE SCREEN
EMACS divides the screen into several areas, each of which
contains its own sorts of information. The biggest area, of
course, is the one in which you usually see the text you are
editing. The terminal's cursor usually appears in the middle of
the text, showing the position of point, the location at which
editing takes place. While the cursor appears to point at a
character, point should be thought of as between two characters;
it points before 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 does not mean
that point is moving. It is only that EMACS has no way to show
you the location of point except when the terminal is idle.
The top lines of the screen are usually available for text but
are sometimes pre-empted by an error message, which says that
some command you gave was illegal or used improperly, or by
typeout from a command (such as, a listing of a file directory).
Error messages are typically one line, end with a question mark,
and are accompanied by ringing the bell. Typeout generally has
none of those characteristics.
The error message or typeout appears there for your
information, but it is not part of the file you are editing, and
it goes away if you type any command. If you want to make it go
away immediately but not do anything else, you can type a Space.
(Usually a Space inserts itself, but when there is an error
message or typeout on the screen it does nothing but get rid of
that.) The terminal's cursor always appears at the end of the
error message or typeout, but this does not mean that point has
moved. The cursor moves back to the location of point after the
error message or typeout goes away.
If you type a question mark when an error message is on the
screen, you enter the EMACS error handler. You probably don't
want to do this unless you know how to write TECO programs. If
you do it by accident, C-] (the standard abort character) will
get you out. Enough said.
A few lines at the bottom of the screen compose what is called
the echo area. The variable Echo Area Height controls how many
lines long it is. Echoing means printing out the commands that
you type. EMACS commands are usually not echoed at all, but if
you pause for more than a second in the middle of a
multi-character command then all the characters typed so far are
6 EMACS Manual for TWENEX Users
echoed. This is intended to prompt you for the rest of the
command. The rest of the command is echoed, too, as you type it.
This behavior is designed to give confident users optimum
response, while giving hesitant users maximum feedback.
EMACS also uses the echo area for reading and displaying the
arguments for some commands, such as searches, and for printing
brief information in response to certain commands.
1.1 The Mode Line
The line above the echo area is known as the mode line. It is
the line that usually starts with "EMACS (something)". Its
purpose is to tell you anything that may affect the meaning of
your commands aside from the text itself.
Some EMACS commands read and process more commands. They are
known as subsystems or recursive editing levels. If you are
inside a subsystem or a recursive editing level, the mode line
tells you its name. Square brackets around the mode line
indicate a recursive editing level; See section 6.2 [Recursive
Editing Levels], page 28. Parentheses indicate a minibuffer; See
section 23 [Minibuffer], page 157. Neither brackets nor
parentheses indicates a subsystem; See section 6.1 [Subsystems],
page 27.
Subsystems and recursive editing levels are advanced features,
and you will not initially be using them. When you are not
inside a subsystem or recursive editing level, we say that you
are at top level; this implies that the characters you type are
interpreted as ordinary EMACS commands. When you are at top
level, the mode line tells you what file you are editing, where
you are in it, and what editing modes are enabled which may
affect the meaning of your commands. The top level mode line has
this format:
EMACS (major minor) bfr: file (vrs) --pos-- *
major is always the name of the major mode you are in. At any
time, EMACS is in one and only one of its possible major modes.
The major modes available include Fundamental mode (which EMACS
starts out in), Text mode, Lisp mode, PASCAL mode, and others.
See section 20.1 [Major Modes], page 102, for details of how the
modes differ and how to select one. Sometimes the name of the
7 EMACS Manual for TWENEX Users
major mode is followed immediately with another name inside
square-brackets ("[ - ]"). This name is called the submode. The
submode indicates that you are "inside" of a command that causes
your editing commands to be changed temporarily, but does not
change what text you are editing. A submode is a kind of
recursive editing level. See section 6.2 [Submodes], page 28.
minor is a list of some of the minor modes that are turned on
at the moment. "Fill" means that Auto Fill mode is on. "Save"
means that Auto-saving is on. "Save(off)" means that Auto-saving
is on by default but turned off at the moment in this buffer.
"Atom" means that Atom Word mode is on. "Abbrev" means that Word
Abbrev mode is on. "Ovwrt" means that Overwrite mode is on. See
section 22.1 [Minor Modes], page 134, for more information.
"Def" means that a keyboard macro is being defined; although this
is not exactly a minor mode, it is still useful to be reminded
about. See section 22.8 [Keyboard Macros], page 153. "Narrow"
means that editing is currently restricted to only a part of the
buffer. See section 17 [Narrowing], page 93.
bfr is the name of the currently selected buffer. Each buffer
has its own name and holds a file being edited; this is how EMACS
can hold several files at once. But at any time you are editing
only one of them, the selected buffer. When we speak of what
some command does to "the buffer", we are talking about the
currently selected buffer. Multiple buffers make 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. However, before you learn how to use multiple buffers, you
will always be in the buffer called "Main", which is the only one
that exists when EMACS starts up. If the name of the buffer is
the same as the first name of the file you are visiting, then the
buffer name is left out of the mode line. See section 14
[Buffers], page 83, for how to use more than one buffer in one
EMACS.
file is the name of the file that you are editing. It is the
last file that was visited in the buffer you are in. It is
followed, in parentheses, by the file version number most
recently visited or saved . "(R-O)" after the filename means
that the file or buffer is read-only; a file visited read-only
will not be saved unless you insist, while a read-only buffer
does not allow you to alter its contents at all. See
section 13.1 [Visiting], page 71, for more information.
The star 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 star.
8 EMACS Manual for TWENEX Users
pos tells you whether there is additional text above the top of
the screen, or below the bottom. If your file is small and it is
all on the screen, --pos-- is omitted. Otherwise, it is
--TOP-- if you are looking at the beginning of the file,
--BOT-- if you are looking at the end of the file, or
--nn%-- where nn is the percentage of the file above the top of
the screen.
Sometimes you will see --MORE-- instead of --nn%--. This
happens when typeout from a command is too long to fit on the
screen. It means that if you type a Space the next screenful of
information will be printed. If you are not interested, typing
anything but a Space will cause the rest of the output to be
discarded. Typing a Rubout will discard the output and do
nothing else. Typing any other command will discard the rest of
the output and also do the command. When the output is
discarded, "FLUSHED" is printed after the --MORE--.
If you are accustomed to other display editors, you may be
surprised that EMACS does not always display the page number and
line number of point in the mode line. This is because the text
is stored in a way that makes it difficult to compute this
information. Displaying them all the time would be too slow to
be borne. When you want to know the page and line number of
point, you must ask for the information with the M-X What Page
command. See section 18 [Pages], page 94. However, once you are
adjusted to EMACS, you will rarely have any reason to be
concerned with page numbers or line numbers.
If you set the variable Display Mode Line Inverse nonzero, then
the mode line is displayed in inverse video if the terminal you
are using supports it. See section 22.3 [Variables], page 138.
The libraries MODLIN and MODE2 allow you to customize the
information that is displayed in the mode line. MODLIN replaces
the standard EMACS mode line generation routines. MODE2 makes a
second mode line, above the first, whose contents are under your
control. Refer to the self-documentation of these libraries; See
section 22.2 [Libraries], page 136.
9 EMACS Manual for TWENEX Users
CHAPTER TWO
CHARACTER SETS AND COMMAND INPUT CONVENTIONS
In this chapter we introduce the terminology and concepts used
to talk about EMACS commands. EMACS is designed to be used with
a kind of keyboard with two special shift keys which can type 512
different characters, instead of the 128 different characters
which ordinary ASCII keyboards can send. The terminology of
EMACS commands is formulated in terms of these shift keys. So
that EMACS can be used on ASCII terminals, we provide
two-character ASCII circumlocutions for the command characters
which are not ASCII.
2.1 The 9-bit Command Character Set
EMACS is designed ideally to be used with terminals whose
keyboards have a pair of shift keys, labeled "Control" and
"Meta", either or both of which can be combined with any
character that you can type. These shift keys produce Control
characters and Meta characters, which are the editing commands of
EMACS. We name each of these characters by prefixing "Control-"
(or "C-"), "Meta-" (or "M-") or both to the basic character:
thus, Meta-F or M-F is the character which is F typed with the
Meta key held down. C-M-; is the Semicolon character with both
the Control and Meta keys. Control in the EMACS command
character set is not precisely the same as Control in the ASCII
character set, but the general purpose is the same.
There are 128 basic characters. Multiplied by the four
possibilities of the Control and Meta keys, this makes 512
characters in the EMACS command character set. So it is called
the 512-character set, to distinguish it from ASCII, which has
only 128 characters. It is also called the 9-bit character set
because 9 bits are required to express a number from 0 to 511.
Note that the 512-character set is used only for keyboard
commands. Characters in files being edited with EMACS are ASCII
characters.
Sadly, most terminals do not have ideal EMACS keyboards. In
fact, the only ideal keyboards are at MIT. On nonideal
keyboards, the Control key is somewhat limited (it can only be
combined with some characters, not with all), and the Meta key
may not exist at all. We make it possible to use EMACS on a
nonideal terminal by providing two-character circumlocutions,
10 EMACS Manual for TWENEX Users
made up of ASCII characters that you can type, for the characters
that you can't type. These circumlocutions start with a bit
prefix character; see below. For example, to use the Meta-A
command, you could type Altmode A. Also see the appendices for
more detailed information on what to do on your type of terminal.
Both the EMACS 9-bit character set and ASCII have Control
characters, but the 9-bit character set has more different ones.
In ASCII, only letters and a few punctuation marks can be made
into Control characters; in the 9-bit character set every
character has a Control version. For example, we have
Control-Space, Control-1, and Control-=. We also have two
different characters Control-A and Control-a! But they always do
the same thing in EMACS, so you can ignore the distinction
between them, unless you are doing customization. In practice,
you can forget all about the distinction between ASCII Control
and EMACS Control, except to realize that EMACS uses some
"Control" characters which ASCII keyboards cannot type.
In addition to the 9-bit command character set, there is one
additional EMACS command character called Help. It cannot be
combined with Control or Meta. Its use is to ask for
documentation, at any time. The Help character has its own key
on an ideal keyboard, but must be represented by something else
on other keyboards. The usual choice is Control-Underscore, code
337 (octal). This implies that the command character
Control-Underscore cannot be used because it is translated to
Help instead. The code used internally for Help is 4110 (octal).
We have given some command characters special names which we
always capitalize. "Return" or "<cr>" stands for the carriage
return character, code 015 (all character codes are in octal).
Note that C-R means the character Control-R, never Return.
"Rubout" is the character with code 177, labeled "Delete" on some
keyboards. "Altmode" is the character with code 033, sometimes
labeled "Escape". Other command characters with special names
are Tab (code 011), Backspace (code 010), Linefeed (code 012),
Space (code 040), Excl ("!", code 041), Comma (code 054), and
Period (code 056). Control is represented in the numeric code
for a character by 200, and Meta by 400; thus, Meta-Period is
code 456 in the 9-bit character set.
2.2 Prefix Characters
A non-ideal keyboard can only send certain Control characters,
and may completely lack the ability to send Meta characters. To
11 EMACS Manual for TWENEX Users
use these commands on such keyboards, you need to use
two-character circumlocutions starting with a bit prefix
character which turns on the Control or Meta bit in the second
character. The Altmode character turns on the Meta bit, so
Altmode X can be used to type a Meta-X, and Altmode Control-O can
be used to type a C-M-O. Altmode is known as the Metizer. Other
bit prefix characters are C-^ for Control, and C-Z for Control
and Meta together. Thus, C-^ < is a way of typing a Control-<,
and C-Z < can be used to type C-M-<. Because C-^ is awkward to
type on most keyboards, we have tried to minimize the number of
commands for which you will need it.
The bit prefix characters are simply commands which run the
functions ^R Prefix Control, ^R Prefix Meta, and ^R Prefix
Control-Meta.
There is another prefix character, Control-X which is used as
the beginning of a large set of two-character commands known as
C-X commands. C-X is not a bit prefix character; C-X A is not a
circumlocution for any single character, and it must be typed as
two characters on any terminal. You can create new prefix
characters when you customize. See the file INFO:CONV.INFO, node
Prefix.
2.3 Commands, Functions, and Variables
Most of the EMACS commands documented herein are members of
this 9-bit character set. Others are pairs of characters from
that set. However, EMACS doesn't really implement commands
directly. Instead, EMACS is composed of functions, which have
long names such as "^R Down Real Line" and definitions which are
programs that perform the editing operations. Then commands such
as C-N are connected to functions through the command dispatch
table. 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 customization: it is the function ^R Down
Real Line which knows how to move down a line, and C-N moves down
a line because it is connected to that function. We usually
ignore this subtlety to keep things simple. To give the
extension-writer the information he needs, we state the name of
the function which really does the work in parentheses after
mentioning the command name. For example: "C-N (^R Down Real
Line) moves the cursor down a line". In the EMACS wall chart,
the function names are used as a form of very brief documentation
for the command characters. See section 5.2 [Functions],
page 23.
12 EMACS Manual for TWENEX Users
The "^R " which appears at the front of the function name is
simply part of the name. By convention, a certain class of
functions have names which start with "^R ".
While we are on the subject of customization information which
you should not be frightened of, it's a good time to tell you
about variables. Often the description of a command will say "to
change this, set the variable Mumble Foo". A variable is a name
used to remember a value. EMACS contains many 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
the value makes the command behave differently. Until you are
interested in customizing, you can ignore this information. When
you are ready to be interested, read the basic information on
variables, and then the information on individual variables will
make sense. See section 22.3 [Variables], page 138.
2.4 Notational Conventions for ASCII Characters
Control characters in files, your EMACS buffer, or TECO
programs, are ordinary ASCII characters. The special 9-bit
character set applies only to typing EMACS commands. ASCII
contains the printing characters, rubout, and some control
characters. Most ASCII control characters are represented in
this manual as uparrow or caret followed by the corresponding
non-control character: control-E is represented as ^E.
Some ASCII characters have special names. These include tab
(011), backspace (010), linefeed (012), return (015), altmode
(033), space (040), and rubout (177). To make it clear whether
we are talking about a 9-bit character or an ASCII character, we
capitalize names of 9-bit characters and leave names of ASCII
characters in lower case. Note that the 9-bit characters Tab and
Control-I are different, but the ASCII characters tab and
control-I are the same.
Lines in files are separated by a sequence of two ASCII control
characters, carriage return followed by linefeed. This sequence
is called CRLF. Normally, EMACS treats this two-character
sequence as if it were a single character, a line separator. A
return or a linefeed which is not part of a CRLF is called stray.
EMACS usually treats them as part of the text of a line and
displays them as ^M and ^J. If the variable Display Overprinting
is zero, they display as actual carriage return or linefeed.
Most control characters when present in the EMACS buffer are
13 EMACS Manual for TWENEX Users
displayed with a caret; thus, ^A for ASCII ^A. Rubout is
displayed as ^?, because by stretching the meaning of "control"
it can be interpreted as ASCII control-?. A backspace is usually
displayed as ^H since it is ASCII control-H, because most
displays cannot do overprinting. If you want backspace and stray
return to display as overprinting, set the variable Display
Overprinting nonzero.
Altmode is the ASCII code 033, sometimes labeled "Escape" or
"Alt". Altmode is often represented by itself in this document
(remember, it is an ASCII character and can therefore appear in
files). It looks like this: $. On most terminals, altmode looks
just like the dollar sign character. If that's so on yours, you
should assume that anything you see in the on-line documentation
which looks like a dollar sign is really an altmode unless you
are specifically told it's a dollar sign. The dollar sign
character is not particularly important in EMACS and we will
rarely have reason to mention it.
14 EMACS Manual for TWENEX Users
CHAPTER THREE
BASIC EDITING COMMANDS
We now give the basics of how to enter text, make corrections,
and save the text in a file. If this material is new to you, you
might learn it more easily by running the TEACH-EMACS program.
3.1 Inserting Text
To insert printing characters into the text you are editing,
just type them. When EMACS is at top level, all printing
characters you type are inserted into the text at the cursor
(that is, at point), 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.
To correct text you have just inserted, you can use Rubout.
Rubout deletes the character before the cursor (not the one that
the cursor is on top of or under; that is the character after the
cursor). The cursor and all characters after it move backwards.
Therefore, if you type a printing character and then type Rubout,
they cancel out.
To end a line and start typing a new one, type Return
(Customizers, note: this runs the function ^R CRLF). Return
operates by inserting a line separator, so if you type Return in
the middle of a line, you break the line in two. Return really
inserts two characters, a carriage return and a linefeed (a
CRLF), but almost everything in EMACS makes them look like just
one character, which you can think of as a line-separator
character. For example, typing Rubout when the cursor is at the
beginning of a line rubs out the line separator before the line,
joining that line with the preceding line.
If you add too many characters to one line, without breaking it
with a Return, the line will grow to occupy two (or more) lines
on the screen, with a "!" at the extreme right margin of all but
the last of them. The "!" says that the following screen line is
not really a distinct line in the file, but just the continuation
of a line too long to fit the screen.
Direct insertion works for printing characters and space, but
other characters act as editing commands and do not insert
15 EMACS Manual for TWENEX Users
themselves. If you need to insert a control character, Altmode,
Tab or Rubout, you must quote it by typing the Control-Q
(^R Quoted Insert) command first. See section 2 [Characters],
page 9. Inserting a ^C is harder because EMACS cannot even
receive the character; you must use the minibuffer as in Altmode
Altmode 3i Altmode Altmode. See section 23 [Minibuffer],
page 157.
3.2 Moving The Cursor
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.
C-A Move to the beginning of the line.
C-E Move to the end of the line.
C-F Move forward over one character.
C-B Move backward over one character.
C-N Move down one line, vertically. If you start in
the middle of one line, you end in the middle of
the next. From the last line of text, it creates
a new line.
C-P Move up one line, vertically.
C-L Clear the screen and reprints everything.
C-U C-L reprints just the line that the cursor is
on.
C-T Transpose two characters (the ones before and
after the cursor).
M-< Move to the top of your text.
M-> Move to the end of your text.
3.3 Erasing Text
Rubout Delete the character before the cursor.
C-D Delete the character after the cursor.
C-K Kill to the end of the line.
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.
16 EMACS Manual for TWENEX Users
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.
See section 9.1 [Killing], page 42, for more flexible ways of
killing text.
3.4 Files
The commands above are sufficient for creating text in the
EMACS buffer. The more advanced EMACS commands just make things
easier. But to keep any text permanently you must put it in a
file. Files are the objects which Twenex uses for storing data
for communication between different programs or to hold onto for
a length of time. To tell EMACS to edit text in a file, choose a
filename, such as FOO.BAR, and type C-X C-V FOO.BAR<cr>. This
visits the file FOO.BAR 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. This makes the changes permanent and actually
changes the file FOO.BAR. Until then, the changes are only
inside your EMACS, and the file FOO.BAR is not really changed.
If the file FOO.BAR doesn't exist, and you want to create it,
visit it as if it did exist. When you save your text with C-X
C-S the file will be created.
Of course, there is a lot more to learn about using files. See
section 13 [Files], page 71.
3.5 Help
If you forget what a command does, you can find out with the
Help character. The Help character is typed as Control-_. Type
Help followed by C and the command you want to know about. Help
can help you in other ways as well. See section 7 [Help],
page 36.
17 EMACS Manual for TWENEX Users
3.6 Using Blank Lines Can Make Editing Faster
C-O Insert one or more blank lines after the
cursor.
C-X C-O Delete all but one of many consecutive blank
lines.
It is much more efficient to insert text at the end of a line
than in the middle. So if you want to stick a new line before an
existing one, the best way is to make a blank line there first
and then type the text into it, rather than inserting the new
text at the beginning of the existing line and finally inserting
a line separator. Making the blank line first also makes the
meaning of the text clearer while you are typing it in.
To make a blank line, you can type Return and then C-B. But
there is a single character for this: C-O (Customizers: this is
the built-in function ^R Open Line). So, FOO Return is
equivalent to C-O FOO.
If you want to insert many lines, you can type many C-O's at
the beginning (or you can give C-O an argument to tell it how
many blank lines to make. See section 4 [Arguments], page 18,
for how). As you then insert lines of text, you will notice that
Return behaves strangely: it "uses up" the blank lines instead of
pushing them down.
If you don't use up all the blank lines, you can type C-X C-O
(the function ^R Delete Blank Lines) to get rid of all but one.
When point is on a blank line, C-X C-O replaces all the blank
lines around that one with a single blank line. When point is on
a nonblank line, C-X C-O deletes any blank lines following that
nonblank line.
18 EMACS Manual for TWENEX Users
CHAPTER FOUR
GIVING NUMERIC ARGUMENTS TO EMACS COMMANDS
Any EMACS command can be given a numeric argument. Some
commands interpret the argument as a repetition count. For
example, giving an argument of ten to the C-F command (move
forward one character) moves forward ten characters. With these
commands, no argument is equivalent to an argument of 1.
Some commands care only about whether there is an argument, and
not about its value; for example, the command M-Q (^R Fill
Paragraph) with no arguments fills text, but with an argument
justifies the text as well.
Some commands use the value of the argument, but do something
peculiar when there is no argument. For example, the C-K
(^R Kill Line) command with an argument <n> kills <n> lines and
the line separators that follow them. But C-K with no argument
is special; it kills the text up to the next line separator, or,
if point is right at the end of the line, it kills the line
separator itself. Thus, two C-K commands with no arguments can
kill a nonblank line, just like C-K with an argument of one.
The fundamental way of specifying an argument is to use the C-U
(^R Universal Argument) command followed by the digits of the
argument. Negative arguments are allowed. Often they tell a
command to move or act backwards. A negative argument is entered
with C-U followed by a minus sign and the digits of the value of
the argument.
C-U followed by a character which is neither a digit nor a
minus sign has the special meaning of "multiply by four". It
multiplies the argument for the next command by four. Two such
C-U's multiply it by sixteen. Thus, C-U C-U C-F moves forward
sixteen characters. This is a good way to move forward "fast",
since it moves about 1/4 of a line on most terminals. Other
useful combinations are C-U C-N, C-U C-U C-N (move down a good
fraction of a screen), C-U C-U C-O (make "a lot" of blank lines),
and C-U C-K (kill four lines). With commands like M-Q that care
whether there is an argument but not what the value is, C-U is a
good way of saying "I want an argument".
A few commands treat a plain C-U differently from an ordinary
argument. A few others may treat an argument of just a minus
sign differently from an argument of -1. These unusual cases
will be described when they come up; they are always for reasons
of convenience of use.
19 EMACS Manual for TWENEX Users
There are other, terminal-dependent ways of specifying
arguments. They have the same effect but may be easier to type.
See the appendix. If your terminal has a numeric keypad which
sends something recognizably different from the ordinary digits,
it is possible to program EMACS to allow use of the numeric
keypad for specifying arguments. The libraries VT52 and VT100
provide such a feature for those two types of terminals. See
section 22.2 [Libraries], page 136.
4.1 Autoarg Mode
Users of ASCII keyboards may prefer to use Autoarg mode.
Autoarg mode means that you don't need to type C-U to specify a
numeric argument. Instead, you type just the digits. Digits
followed by an ordinary inserting character are themselves
inserted, but digits followed by an Altmode or Control character
serve as an argument to it and are not inserted. A minus sign
can also be part of an argument, but only at the beginning. If
you type a minus sign following some digits, both the digits and
the minus sign are inserted.
To use Autoarg mode, set the variable Autoarg Mode nonzero.
See section 22.3 [Variables], page 138.
Autoargument digits echo at the bottom of the screen; the first
nondigit causes them to be inserted or uses them as an argument.
To insert some digits and nothing else, you must follow them with
a Space and then rub it out. C-G cancels the digits, while
Rubout inserts them all and then rubs out the last.
20 EMACS Manual for TWENEX Users
CHAPTER FIVE
EXTENDED (META-X) COMMANDS AND FUNCTIONS
Not all EMACS commands are of the one or two character variety
you have seen so far. Most commands have long names composed of
English words. This is for two reasons: the long names are
easier to remember and more suggestive, and there are not enough
two-character combinations for every command to have one.
The commands with long names are known as extended commands
because they extend the set of two-character commands.
5.1 Issuing Extended Commands
M-X Begin an extended command. Follow by
command name and arguments.
C-M-X Begin an extended command. Follow by the
command name only; the command will ask
for any arguments.
C-X Altmode Re-execute recent extended command.
Extended commands are also called M-X commands, because they
all start with the character Meta-X (^R Extended Command). The
M-X is followed by the command's long, suggestive name, actually
the name of a function to be called. Terminate the name of the
function with a Return (unless you are supplying string
arguments; see below). For example, Meta-X Auto Fill Mode<cr>
invokes the function Auto Fill Mode. This function when executed
turns Auto Fill mode on or off.
We say that M-X Foo<cr> "calls the function Foo". When
documenting the individual extended commands, we will call them
functions to avoid confusion between them and the one or two
character commands. We will also use "M-X" as a title like "Mr."
for functions, as in "use M-X Foo". The "extended command" is
what you type, starting with M-X, and what the command does is
call a function. The name that goes in the command is the name
of the command and is also the name of the function, and both
terms will be used.
Note: Extended commands and functions were once called "MM
commands", but this term is obsolete. If you see it used either
in INFO documentation of in Help documentation, please report it.
21 EMACS Manual for TWENEX Users
Ordinary one or two character commands used to be known as "^R"
commands; please report any occurrences of this obsolete term
also.
There are a great many functions in EMACS for you to call.
They will be described elsewhere in the manual, according to what
they do. Here we are concerned only with extended commands in
general.
5.1.1 Typing The Command Name
When you type M-X, the cursor moves down to the echo area at
the bottom of the screen. "M-X" is printed there, and when you
type the command name it echoes there. This is known as reading
a line in the echo area. You can use Rubout to cancel one
character of the command name, or C-U or C-D to cancel the entire
command name. A C-G cancels the whole M-X, and so does a Rubout
when the command name is empty. These editing characters apply
any time EMACS reads a line in the echo area, not just within
M-X.
The string "M-X" which appears in the echo area is called a
prompt. The prompt always tells you what sort of argument is
required and what it is going to be used for; "M-X" means that
you are inside of the command M-X, and should type the name of a
function to be called. You can replace the prompt "M-X" with
some other string by defining the variable Read Command Prompt.
5.1.2 Completion
You can abbreviate the name of the command, typing only the
beginning of the name, as much as is needed to identify the
command unambiguously. You can also use completion on the
function name. This means that you type part of the command
name, and EMACS visibly fills in the rest, or as much as can be
determined from the part you have typed.
You request completion by typing an Altmode ($). For example,
if you type M-X Au$, the "Au" expands to "Auto " because all
command names which start with "Au" continue with "to ". If you
ask for completion when there are several alternatives for the
next character, the bell rings and nothing else happens. Altmode
is also the way to terminate the command name and begin the
string arguments, but it only does this if the command name
completes in full. In that case, an Altmode appears after the
22 EMACS Manual for TWENEX Users
command name in the echo area. In practice, these two meanings
of Altmode do not conflict, because if the command name does not
complete in full, it is ambiguous and would not be accepted. So
it would be useless to type the arguments yet.
Space is another way to request completion, but it completes
only one word. Successive Spaces complete one word each, until
either there are multiple possibilities or the end of the name is
reached. If the first word of a command is Edit, List, Kill,
View or What, it is sufficient to type just the first letter and
complete it with a Space. (This does not follow from the usual
definition of completion, since the single letter is ambiguous;
it is a special feature added because these words are so common).
Typing "?" in the middle of the command name prints a list of
all the command names which begin with what you have typed so
far. You can then go on typing the name.
5.1.3 Numeric Arguments and String Arguments
Some functions can use numeric prefix arguments. Simply give
the Meta-X command an argument and Meta-X will pass it along to
the function which it calls. The argument appears before the
"M-X" in the prompt, as in "69 M-X", to remind you that the
function you call will receive a numeric argument.
Some functions require string arguments (sometimes called
suffix arguments). To specify string arguments, terminate the
function name with a single Altmode, then type the arguments,
separated by Altmodes. After the last argument, type a Return to
cause the function to be executed. For example, the function
Describe prints the full documentation of a function (or a
variable) whose name must be given as a string argument. An
example of using it is
Meta-X Describe$Apropos<cr>
which prints the full description of the function named Apropos.
An alternate way of calling extended commands is with the
command C-M-X (^R Instant Extended Command). It differs from
plain M-X in that the function itself reads any string arguments.
The function prompts for each argument individually. If an
argument is supposed to be a filename or a command name,
completion is available. However, there are compensating
23 EMACS Manual for TWENEX Users
disadvantages. For one thing, since the function has already
been invoked, you can't rub out from the arguments into the
function name. For another, it is not possible to save the whole
thing, function name and arguments, for you to recall with C-X
Altmode (see below). So C-M-X saves nothing for C-X Altmode.
The prompt for C-M-X is "C-M-X". You can override it with the
variable Instant Command Prompt.
5.1.4 Repeating an Extended Command
The last few extended commands you have executed are saved and
you can repeat them. We say that the extended command is saved,
rather than that the function is saved, because the whole
command, including arguments, is saved.
To re-execute a saved command, use the command C-X Altmode
(^R Re-execute Minibuffer). It retypes the last extended command
and asks for confirmation. With an argument, it repeats an
earlier extended command: 2 means repeat the next to the last
command, etc. You can also use the minibuffer to edit a previous
extended command and re-execute it with changes (See section 23
[Minibuffer], page 157.).
5.2 Arcane Information about M-X Commands
You can skip this section if you are not interested in
customization, unless you want to know what is going on behind
the scenes.
5.2.1 MM
Extended commands were once called "MM" commands, because "MM"
is a TECO expression which looks up a command name to find the
associated program, and runs that program. Thus, the TECO
expression
MM Apropos$Word$
means to run the Apropos command with the argument "word". You
could type this expression into a minibuffer and get the same
24 EMACS Manual for TWENEX Users
results as you would get from Meta-X Apropos$Word<cr>. In fact,
for the first year or so, EMACS had no Meta-X command, and that's
what people did. See section 23 [Minibuffer], page 157, for
information on the minibuffer.
"MM" actually tells TECO to call the subroutine in q-register
"M". The first "M" means "call", and the second "M" says what to
call. This subroutine takes a string argument which is the name
of a function and looks it up. Calling a function is built into
TECO, but looking up the name is not; it is implemented by the
program in q-register M. That's why "MM" is called that and not
"Run" or "F^Q".
5.2.2 Arguments in TECO Code
Functions can use one or two prefix arguments or numeric
arguments. These are numbers (actually, TECO expressions) which
go before the "MM". Meta-X can only give the MM command one
argument. If you want to give it two, you must type it in using
the minibuffer. When TECO code passes prefix arguments, they
don't have to be numbers; they can also be string objects, TECO
buffer objects, etc. However, no more about that here.
TECO code can also pass string arguments or suffix arguments.
When TECO code passes a string argument, it appears, terminated
by an Altmode, after the Altmode which ends the function name.
There can be any number of string arguments. In fact, the
function can decide at run time how many string arguments to
read. This makes it impossible to compile TECO code!
Since Altmode terminates a string argument, TECO has a quoting
convention to allow Altmodes to be part of a string argument.
This convention is to use the two characters ^] Altmode to cause
just an Altmode to be part of the argument. ^] also must be
quoted, as ^] ^]. The M-X command hides all of this: there is no
way to quote an Altmode; every Altmode always terminates a string
argument; ^] is not special, because M-X automatically replaces
each ^] with two. If you understand the TECO meaning of ^] you
can enable its use in M-X command arguments by setting the
variable Quote Execute Command nonzero. Then M-X does no special
processing to ^] characters. You can use them to quote Altmodes,
and you must also take care of quoting ^] characters themselves.
25 EMACS Manual for TWENEX Users
5.2.3 Commands and Functions
Actually, every command in EMACS simply runs a function. For
example, when you type the command C-N, it runs the function
"^R Down Real Line". You could just as well do C-U 1 M-X ^R Down
Real Line<cr> and get the same effect. C-N can be thought of as
a sort of abbreviation. We say that the command C-N has been
connected to the function ^R Down Real Line. The name is looked
up once when the command and function are connected, so that it
does not have to be looked up again each time the command is
used. For historical reasons, the default argument passed to a
function which is connected to a command you typed is 1, but the
default for MM and for M-X is 0. This is why the C-U 1 was
necessary in the example above. The documentation for individual
EMACS commands usually gives the name of the function which
really implements the command in parentheses after the command
itself.
Just as any function can be called directly with M-X, so almost
any function can be connected to a command. You can use the
function Set Key to do this. Set Key takes the name of the
function as a string argument, then reads the character command
(including metizers or other prefix characters) directly from the
terminal. To define C-N, you could type
M-X Set Key$^R Down Real Line<cr>
and then type C-N. If you use the function View File often, you
could connect it to the command C-X V (not normally defined).
You could even connect it to the command C-M-V, replacing that
command's normal definition. Set Key is good for redefining
commands in the middle of editing. An init file or EMACS.VARS
file can do it each time you run EMACS. See section 22.6 [Init],
page 144.
5.2.4 Subroutines
EMACS is composed of a large number of functions, each with a
name. Some of these functions are connected to commands; some
are there for you to call with M-X; some are called by other
functions. The last group are called subroutines. They usually
have names starting with "&", as in "& Read Line", the subroutine
which reads a line in the echo area. Although most subroutines
have such names, any function can be called as a subroutine.
26 EMACS Manual for TWENEX Users
Functions like ^R Down Real Line have names starting with ^R
because you are not expected to call them directly, either. The
purpose of the "&" or "^R" is to get those function names out of
the way of command completion in M-X. M-X allows the command
name to be abbreviated if the abbreviation is unique, and the
commands that you are not interested in might have names that
would interfere and make some useful abbreviation cease to be
unique. The funny characters at the front of the name prevent
this from happening.
5.2.5 Built-in Functions
Not all of the functions in EMACS are written in TECO. A few
of the most frequently used single-character commands have
definitions written in machine language. These include
self-inserting characters, Rubout, C-F, and others. Such
functions defined in machine language as part of TECO are called
built-in functions. Whereas the actual definition of an ordinary
function is a string, the definition of a built-in function is
just a number, the address of a routine in TECO. The EMACS
"definitions" of these commands exist only to give the commands
names and documentation, and live in a special library called
BARE which is loaded when necessary to make the names and
documentation available. For example, ^R Forward Character is
the name of the function which implements the C-F command.
27 EMACS Manual for TWENEX Users
CHAPTER SIX
MOVING UP AND DOWN LEVELS
Subsystems and recursive editing levels are two states in which
you are temporarily doing something other than editing the
visited file as usual. For example, you might be editing a
message that you wish to send, or looking at a documentation file
with INFO. Running another fork under EMACS can also be thought
of as a sort of "sublevel".
6.1 Subsystems
A subsystem is an EMACS function which is an interactive
program in its own right: it reads commands in a language of its
own, and displays the results. You enter a subsystem by typing
an EMACS command which invokes it. Once entered, the subsystem
runs until a specific command to exit the subsystem is typed. An
example of an EMACS subsystem is INFO, the documentation reading
program. Others are Backtrace and TDEBUG, used for debugging
TECO programs, and BABYL, used for reading and editing mail
files.
The commands understood by a subsystem are usually not like
EMACS commands, because their purpose is something other than
editing text. For example, INFO commands are designed for moving
around in a tree-structured documentation file. In EMACS, most
commands are Control or Meta characters because printing
characters insert themselves. In most subsystems, there is no
insertion of text, so non-Control non-Meta characters can be the
commands.
While you are inside a subsystem, the mode line usually gives
the name of the subsystem (as well as other information supplied
by the subsystem, such as the filename and node name in INFO).
You can tell that you are inside a subsystem because the mode
line does not start with "EMACS", or with an open bracket ("[")
which would indicate a recursive editing level. See section 1.1
[Mode Line], page 6.
Because each subsystem implements its own commands, we cannot
guarantee anything about them. However, there are conventions
for what certain commands ought to do:
28 EMACS Manual for TWENEX Users
C-] Aborts (exits without finishing up).
Backspace Scrolls backward, like M-V in EMACS.
Space Scrolls forward, like C-V in EMACS.
Q Exits normally.
X Begins an extended command, like M-X in
EMACS.
Help or ? Prints documentation on the subsystem's
commands.
Not all of these necessarily exist in every subsystem, however.
6.2 Recursive Editing Levels
A recursive editing level is a state in which part of the
execution of one command involves doing some editing. You may be
editing the file you are working on, or you may be editing
completely something totally different from what you were working
on at top level. Recursive editing levels are indicated in the
mode line by square brackets ("[" and "]").
For example, the command M-X Edit Options allows you to change
the settings of EMACS options. During the execution of this
command, you enter a recursive editing level in which you edit a
list of options names and values using the usual EMACS editing
commands. While this is going on, the mode line says "[Edit
Options]" to inform you that you are in a recursive editing level
and why. When you exit the recursive editing level, the Edit
Options command continues its work by looking at the changes you
have made in the list of options and changing the actual option
values accordingly. Only then is the original Edit Options
command finished.
Alternatively, you can abort the recursive editing level, which
gets you out of the Edit Options command and back to top level,
without allowing the command to finish.
A recursive editing level differs from a subsystem in that the
commands are ordinary EMACS commands (though a handful may have
been changed slightly), whereas a subsystem defines its own
command language.
The text you edit inside a recursive editing level depends on
the command which invoked the recursive editing level. It could
be a list of options and values, or a list of tab stop settings,
syntax table settings, a message to be sent, or any text that you
might wish to compose.
29 EMACS Manual for TWENEX Users
Sometimes in a recursive editing level you edit text of the
file you are visiting, just as at top level. Why would this be?
Usually because a few commands are temporarily changed. For
example, Edit Picture in the PICTURE library defines commands
good for editing a picture made out of characters, then enters a
recursive editing level. When you exit, the special
picture-editing commands go away. Until then, the brackets in
the mode line serve to remind you that, although the text you are
editing is your file, all is not normal. See section 26
[PICTURE], page 185.
In any case, if the mode line says "[...]" you are inside a
recursive editing level, and the way to exit (send the message,
redefine the options, get rid of the picture-editing commands,
etc.) is with the command C-M-Z (^R Exit). See section 6.3
[Exiting], page 29. If you change your mind about the command
(you don't want to send the message, or change your options,
etc.) then you should use the command C-] (Abort Recursive Edit)
to get out. See section 24.1 [Aborting], page 160.
Inside recursive editing levels, the help option Help R is
defined to print the full documentation of the command which
invoked the recursive editing level. The other normal Help
options are still available for asking about commands you want to
use while inside the recursive edit.
When the text in the mode line is surrounded by parentheses, it
means that you are inside a Minibuffer. A minibuffer is a
special case of the recursive editing level. Like any other, it
can be aborted safely with C-]. See section 23 [Minibuffer],
page 157.
6.3 Exiting Levels; Exiting EMACS
C-X C-Z Exit from EMACS to the superior fork.
C-M-Z Exit from EMACS or from a recursive editing
level.
M-X Rerun CCL
Exit from EMACS to EXEC and repeat the last
Compile-class command.
The general EMACS command to exit is C-M-Z (^R Exit). This
command is used to exit from a recursive editing level back to
the top level of EMACS, and to exit from EMACS at top level back
to EXEC. If your keyboard does not have a Meta key, you must
30 EMACS Manual for TWENEX Users
type this command by means of a bit prefix character, as C-Z C-Z
or as Altmode C-Z. Note carefully the difference between exiting
a recursive editing level and aborting it: exiting allows the
command which invoked the recursive editing level to finish its
job with the text as you have edited it, whereas aborting cancels
whatever the command was going to do. See section 24.1
[Aborting], page 160.
We cannot say in general how to exit a subsystem, since each
subsystem defines its own command language, but the convention is
to use the character "Q".
You can exit from EMACS back to the superior fork, usually
EXEC, at any time, even within a recursive editing level, with
the command C-X C-Z (^R Return to Superior). If this is used
while you are inside a recursive editing level, then when EMACS
is re-entered you will still be inside the recursive editing
level.
If the superior fork really is EXEC, you can use M-X Rerun CCL
to return to EXEC and repeat the last Compile, Load, or Debug
EXEC command. It offers to save any buffers which need saving,
first.
Exiting EMACS does not normally save the visited file, because
it is not the case that users exit EMACS only when they are
"finished editing". If you want the file saved, you must use C-X
C-S. Exiting does cause an auto save if Auto Save mode is in
use. M-X Rerun CCL does offer to save because with it you
indicate specifically your desire to use the saved file.
Exiting from EMACS runs the function & Exit EMACS. This
function executes the value of the variable Exit Hook, if it is
nonzero; otherwise, it does auto-save if Auto Save mode is on.
& Exit EMACS also executes the value of the variable Exit to
Superior Hook, if it is defined. If EMACS is continued, the
value of Return from Superior Hook is executed.
6.4 Running Subforks under EMACS
Running a subfork under EMACS is a little bit like running an
EMACS subsystem in that you give EMACS a command to start it, and
give it a command when you want to exit.
The difference is that a subsystem is implemented as a part of
EMACS. It can call other parts of EMACS as a subroutine, for
31 EMACS Manual for TWENEX Users
example. A subfork is an entirely separate program, and any
program which you could run under EXEC can also be run under
EMACS. However, subforks cannot be integrated as well with the
rest of EMACS.
To exit from a subfork running under EMACS, type Control-C once
or twice, just as you would to return to EXEC from a subfork
running under EXEC.
Control of subforks is done with the TECO command FZ, which can
be used for loading an arbitrary program into a subfork of EMACS.
EMACS commands which run a subfork that is likely to run for an
indefinite length of time call the function & Exit EMACS first,
so that an auto save is done if necessary. They also execute the
value of Exit to Inferior Hook before running the inferior, and
execute the value of Return from Inferior Hook when the inferior
returns. Some EMACS commands run an inferior that is expected to
return almost immediately and not read input from the terminal.
These commands do not use & Exit EMACS or run the hooks.
6.4.1 Inferior EXEC
An alternative to exiting EMACS is pushing to another EXEC
under EMACS. You can probably do in this EXEC whatever you would
have done after exiting, and it will not harm the EMACS. Do M-X
Push to EXEC to get an inferior EXEC, and use the POP command to
return to EMACS. Repeated use of Push to EXEC gets the same EXEC
with its subfork unchanged. You can actually switch randomly
between EMACS and one other program in this way, even if the EXEC
on your machine does not support multiple forks. The variable
Exec Name contains the name of the file to run, or 0 for the
ordinary EXEC.
6.4.2 Reading Mail
An important use of subforks is for reading mail with MM. See
section 6.5 [Mail], page 34.
6.4.3 Subforks in General
M-+ Start or resume a subfork.
M-, Kill a subfork.
32 EMACS Manual for TWENEX Users
The EFORK library, which you must load explicitly with Load
Library (See section 22.2 [Libraries], page 136.), contains
general functions for running several forks underneath EMACS.
EMACS users do not need to wait for DEC to wake up and release
the multi-forking EXEC; they can use multiple forks right now.
When EFORK is loaded, the command M-+ (^R Invoke Inferior)
creates or resumes a subfork.
Creation of a subfork requires two arguments, which you must
type. The first one is the fork handle, an arbitrary name by
which you will refer to the fork later. The second one is the
name of the file to run in the fork. Both arguments must be
terminated with <cr>.
If the subfork terminates, you return to EMACS. You can return
to EMACS anyway by typing C-G (the EMACS interrupt character).
To resume a subfork, use M-+ again, and specify the same
handle. No distinction is made between upper case and lower case
in the handle name. If you type just <cr> for the handle name,
the most recently used subfork is resumed.
You can also create or resume an inferior EXEC with M-+.
Specify EXEC as the handle to create a new EXEC. Specify * as
the handle to resume an existing EXEC. Creating a new EXEC gets
rid of any existing one.
M-X List Handles prints a list of the handles of all the
existing subforks.
To kill a subfork, use M-Comma (^R Kill Inferior), which asks
you to specify the handle of the fork to be killed. You cannot
kill the inferior EXEC, if there is one, but asking to create a
new one the next time you use it has much the same effect.
6.4.4 Ephemerons
The functions Execute Ephemeron and Display Ephemeron, in
EFORK, run a program in an inferior fork and kill it as soon as
it returns (whether because it is finished, or because you type
C-G). Display Ephemeron pauses until you type a character before
redisplaying the screen; it is for use if the program prints
something you would like to read.
33 EMACS Manual for TWENEX Users
6.4.5 Services Obtained from an Inferior EXEC
The SYSTEM library, which you must load explicitly with Load
Library (See section 22.2 [Libraries], page 136.), contains
functions which communicate with Twenex by passing commands to an
inferior EXEC which exists momentarily.
Most of the commands in SYSTEM print some sort of system status
information. For example, there are
M-X ^R System Load Average
Prints the one minute load average in the echo
area. This function is expected to be used by
connecting it to a command character, but the
SYSTEM library does not connect it. You must
connect it yourself with Set Key or in an init or
EMACS.VARS file. It can, however, be called with
M-X like any other function.
M-X Check Output Queue
Prints the contents of the output queues. This
requires an argument, which should be ALL, FAST
or USER.
M-X Check Batch Queue
Prints the contents of the batch queues. This
requires an argument, which should be ALL, FAST
or USER.
M-X Check Users
Prints a list of the users on the system.
M-X SYSTAT Invokes SYSTAT. You may specify the argument to
be passed to SYSTAT as an argument to this
command. No argument, when using M-X, is
equivalent to a null argument, which obtains the
default SYSTAT printout.
M-X Check Job Prints your job number, user name and connected
directory.
M-X Enable Capabilities
Enables your capabilities in the EXEC which is
EMACS's superior, so that they are actually
available in EMACS. If you don't have
capabilities to enable, your company has policies
of distrust and is putting artificial barriers in
34 EMACS Manual for TWENEX Users
the way of your doing your job. Find another
company.
M-X Disable Capabilities
Disables your capabilities in the EXEC above
EMACS.
M-X Check Log File
Prints any changes in the log file whose name is
specified as an argument. This command uses and
sets the TECO default filename, so you usually do
not need to repeat the argument if you repeat the
command.
M-X Check Disk Performs I DISK on a directory which you must
specify with an argument.
M-X Check Available
Prints a list of available devices or terminal
lines. You must specify LINES as an argument if
you want that; otherwise, the default is to list
the available devices.
Two other commands are
M-X Connect to Directory
Changes your connected directory. Supply the
directory name (including the brackets) as an
argument, and the password as a second argument
if it is needed. This command is always
available; you need not load SYSTEM.
M-X Access to Directory
Performs an ACCESS command. Supply arguments as
you would for Connect to Directory.
6.5 Reading Mail
To edit your mail file, use C-X R (Read Mail). This invokes a
mail reading subsystem or subfork. If the variable Mail Reader
Library is defined, it is the name of the subsystem to use; else
if Mail Reader Program is defined, it is the name of the program
to run in a subfork; otherwise, the program MM is used.
35 EMACS Manual for TWENEX Users
You can send mail from within MM as well as edit your mail.
But if you want to send just one message, the easiest way is
Control-X M (Send Mail). C-X M works by invoking MM, or whatever
program or library you use to read mail, at a special entry
point. If it is a library, the entry point is the function
& Mail Message.
The command M-X Check Mail tells you whether you have any new
mail to be read. The MAICHK library, if loaded, checks
automatically every so often.
36 EMACS Manual for TWENEX Users
CHAPTER SEVEN
SELF-DOCUMENTATION COMMANDS
EMACS provides extensive self-documentation features which
revolve around a single character, called the Help character. At
any time while using EMACS, you can type the Help character to
ask for help. The Help character is actually typed as C-_
(Control-Underscore). On some terminals just figuring out how to
type a Control-Underscore is hard! Typing Underscore and adding
the Control key is what logically ought to work, but on some
terminals it does not. Sometimes Control-Shift-O works. On
VT-100 terminals, typing Control-/ or Control-? sends a Control-_
character.
If you type Help while you are using a subsystem such as INFO,
it prints a list of the commands of that subsystem.
If you type Help in the middle of a multi-character command, it
often tells you about what sort of thing you should type next.
For example, if you type M-X and then Help, it tells you about
M-X and how to type the name of the command. If you finish the
function name and the Altmode and then type Help, it tells you
about the function you have specified so you can know what
arguments it needs. If you type C-X and then type Help, it tells
you about the C-X commands.
But normally, when it's time for you to start typing a new
command, Help offers you several options for asking about what
commands there are and what they do. It prompts with "Doc (? for
help):" at the bottom of the screen, and you should type a
character to say what kind of help you want. You could type Help
or "?" at this point to find out what options are available. The
ones you are most likely to need are described here.
The most basic Help options are Help C and Help D. You can use
them to ask what a particular command does. Help C is for
character commands; type the command you want to know about after
the Help and the "C" ("C" stands for Character). Thus, Help C
M-F or Help C Altmode F tells you about the M-F command. Help D
is for asking about functions (extended commands); type the name
of the function and a Return. Thus, Help D Lisp Mode<cr> tells
you about M-X Lisp Mode. Help D can also tell you the
documentation of a variable, if you give it a variable's name
instead of a function's name. "D" stands for "Describe", since
Help D actually uses the function Describe to do the work.
A more complicated sort of question to ask is, "what are the
37 EMACS Manual for TWENEX Users
commands for working with files?" For this, you can type Help A,
followed by the string "file" and a Return. It prints a list of
all the functions that have "file" anywhere in their names,
including Save All Files, ^R Save File, Append to File, etc. If
some of the functions are connected to commands, it tells you
that too. For example, it would say that you can invoke ^R Save
File by typing C-X C-S. "A" stands for "Apropos", since Help A
actually uses the function Apropos to do the substring matching.
Help A does not list internal functions, only those the
nonprogrammer is likely to use. If you want subroutines to be
listed as well, you must call Apropos yourself.
Because Apropos looks only for functions whose names contain
the string which you specify, you must use ingenuity in choosing
substrings. If you are looking for commands for killing
backwards and Help A Kill Backwards doesn't reveal any, don't
give up. Try just Kill, or just Backwards, or just Back. Be
persistent. Pretend you are playing Adventure.
Here is a set of Apropos strings that covers many classes of
EMACS commands, since there are strong conventions for naming the
standard EMACS commands. By giving you a feel for the naming
conventions, this set should also serve to aid you in developing
a technique for picking Apropos strings.
character, line, word, sentence, paragraph, region, page,
buffer, screen, window, bounds, file, dir, beginning,
end, case, mode, forward, backward, next, previous, up,
down, search, kill, delete, mark, fill, indent, change.
There is also a convention for how command names start for
certain common kinds of operations: many commands start with one
of the words "Edit", "View", "Insert", "List", or "What".
If you are inside a recursive editing level, Help R prints out
the complete documentation of that recursive editing level. See
section 6.2 [Recursive], page 28. Help ? also tells you briefly
what sort of recursive editing level you are in, in addition to
describing the available Help options. If you are not inside a
recursive editing level, Help R says that you are at top level.
If something surprising happens, and you are not sure what
commands you typed, use Help L. Help L prints the last 60
command characters you typed in. This is also helpful if you
suffer from line noise. If you see commands that you don't know,
you can use Help C to find out what they do.
38 EMACS Manual for TWENEX Users
If a command doesn't do what you thought you knew it should do,
you can ask to see whether it has changed recently. Help N
prints out the file called EMACS:EMACS.NEWS which is an archive
of announcements of changes to EMACS.
To find out about the other Help options, type Help Help. That
is, when the first Help asks for an option, type Help to ask what
is available.
Finally, you should know about the documentation files for
EMACS, which are EMACS.GUIDE and EMACS.CHART. EMACS.GUIDE is a
version of the manual formatted to be printed out on a terminal
or line printer. EMACS.CHART has a brief description of all the
commands, known as the wall chart, because it is good to post on
the wall near your terminal.
39 EMACS Manual for TWENEX Users
CHAPTER EIGHT
THE MARK AND THE REGION
In general, a command which processes an arbitrary part of the
buffer must know where to start and where to stop. In EMACS,
such commands usually operate on the text between point and the
mark. This range of text is called the region. To specify a
region, you set point to one end of it and mark at the other. It
doesn't matter which one is set first chronologically, or which
one comes earlier in the text. Here are some commands for
setting the mark:
C-@ Set the mark where point is.
C-Space The same.
C-X C-X Interchange mark and point.
M-@ Set mark after end of next word. This
command and the following three do not move
point.
C-M-@ Set mark after end of next Lisp s-expression.
C-< Set mark at beginning of buffer.
C-> Set mark at end of buffer.
M-H Put region around current paragraph.
C-M-H Put region around current Lisp defun.
C-X H Put region around entire buffer.
C-X C-P Put region around current page.
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 function ^R Uppercase Region, whose name signifies that the
region, or everything between point and the mark, is to be
capitalized.
The most common way to set the mark is with the C-@ command or
the C-Space command (^R Set/Pop Mark). They set the mark where
point is. Then you can move point away, leaving the mark behind.
It isn't actually possible to type C-Space on non-Meta
keyboards. Yet on many terminals the command appears to work
anyway! This is because trying to type a Control-Space on those
terminals actually sends the character C-@, which means the same
thing as C-Space. A few keyboards just send a Space. If you
have one of them, you type C-@, or customize your EMACS.
40 EMACS Manual for TWENEX Users
Since terminals have only one cursor, there is no way for EMACS
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 (^R Exchange Point and
Mark) which puts the mark where point was and point where the
mark was. The extent of the region is unchanged, but the cursor
and point are now at the previous location of the mark.
C-X C-X is also useful when you are satisfied with the location
of point but want to move the mark; do C-X C-X to put point there
and then you can move it. A second use of C-X C-X, if necessary,
puts the mark at the new location with point back at its original
location.
If you insert or delete before the mark, the mark may drift
through the text. If the buffer contains "FOO BAR" and the mark
is before the "B", then if you delete the "F" the mark will be
before the "A". This is an unfortunate result of the simple way
the mark is implemented. It is best not to delete or insert at
places above the mark until you are finished using it and don't
care where it drifts to.
8.1 Commands to Mark Textual Objects
There are commands for placing the mark on the other side of a
certain object such as a word or a list, without having to move
there first. M-@ (^R Mark Word) puts the mark at the end of the
next word, while C-M-@ (^R Mark Sexp) puts it at the end of the
next s-expression. C-> (^R Mark End) puts the mark at the end of
the buffer, while C-< (^R Mark Beginning) puts it at the
beginning. These characters allow you to save a little typing or
redisplay, sometimes.
Other commands set both point and mark, to delimit an object in
the buffer. M-H (^R Mark Paragraph) puts point at the beginning
of the paragraph it was inside of (or before), and puts the mark
at the end. M-H does all that's necessary if you wish to indent,
case-convert, or kill a whole paragraph. C-M-H (^R Mark Defun)
similarly puts point before and the mark after the current or
next defun. C-X C-P (^R Mark Page) puts point before the current
page (or the next or previous, according to the argument), and
mark at the end. The mark goes after the terminating page
delimiter (to include it), while point goes after the preceding
page delimiter (to exclude it). Finally, C-X H (^R Mark Whole
Buffer) makes the region the entire buffer by putting point at
the beginning and the mark at the end.
41 EMACS Manual for TWENEX Users
8.2 The Ring of Marks
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, EMACS 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-@ (or
C-U C-Space). 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.
Insertion and deletion can cause the saved marks to drift, but
they will still be good for this purpose because they are
unlikely to drift very far.
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 M-<, which moves to the
beginning of the buffer. It sets the mark first, so that you can
use C-U C-@ or C-X C-X to go back to where you were. Searches
sometimes set the mark; it depends on how far they move. Because
of this uncertainty, searches type out "^@" if they set the mark.
The normal situation is that searches leave the mark behind if
they move at least 500 characters, but you can change that value
since it is kept in the variable Auto Push Point Option. By
setting it to 0, you can make all searches set the mark. By
setting it to a very large number such as ten million, you can
prevent all searches from setting the mark. The string to be
typed out when this option does its thing is kept in the variable
Auto Push Point Notification.
42 EMACS Manual for TWENEX Users
CHAPTER NINE
KILLING AND MOVING TEXT
The commonest way of moving or copying text with EMACS 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.
9.1 Deletion and Killing
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 kill
commands. The rest of the commands that erase text do not save
it; they are known as delete 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. The commands' names and
individual descriptions use the words "kill" and "delete" to say
which they do. If you do a kill command by mistake, you can use
the Undo command to undo it (See section 24.3 [Undo], page 164.).
C-D Delete next character.
Rubout Delete previous character.
M-\ Delete spaces and tabs around point.
C-X C-O Delete blank lines around the current
line.
M-^ Join two lines by deleting the CRLF and
any indentation.
C-K Kill rest of line or one or more lines.
C-W Kill region (from point to the mark).
M-D Kill word.
M-Rubout Kill word backwards.
C-X Rubout Kill back to beginning of sentence.
M-K Kill to end of sentence.
C-M-K Kill s-expression.
C-M-Rubout Kill s-expression backwards.
43 EMACS Manual for TWENEX Users
9.1.1 Deletion
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 single characters when deleted. Actually,
C-D and Rubout aren't always delete commands; if you give an
argument, they kill instead. This prevents you from losing a
great deal of text by typing a large argument to a C-D or Rubout.
The other delete commands are those which delete only
formatting characters: spaces, tabs and line separators. M-\
(^R Delete Horizontal Space) deletes all the spaces and tab
characters before and after point. C-X C-O (^R Delete Blank
Lines) deletes all blank lines after the current line, and if the
current line is blank deletes all blank lines preceding the
current line as well (leaving one blank line, the current line).
M-^ (^R Delete Indentation) joins the current line and the
previous line, or the current line and the next line if given an
argument. See section 11.3 [Indentation], page 57.
A function ^R Delete Region used to exist, but it was too
dangerous. When you want to delete a large amount of text
without saving a copy of it (perhaps because it is very big), you
can set point and mark around the text and then type
M-Altmode
MRK$$
(This is a use of the minibuffer. See section 23 [Minibuffer],
page 157.).
9.1.2 Killing by Lines
The simplest kill command is the C-K command (^R Kill Line).
If given at the beginning of a line, it kills all the text on the
line, leaving it blank. If given on a blank line, the blank 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.
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
44 EMACS Manual for TWENEX Users
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.
If C-K is given a positive argument, it kills that many lines,
and the separators that follow them (however, text on the current
line before point is spared). With a negative argument, it kills
back to a number of line beginnings. An argument of -2 means
kill back to the second line beginning. If point is at the
beginning of a line, that line beginning doesn't count, so
C-U - 2 C-K with point at the front of a line kills the two
previous lines.
C-K with an argument of zero kills all the text before point on
the current line.
9.1.3 Other Kill Commands
A kill command which is very general is C-W (^R Kill Region),
which kills everything between point and the mark. With this
command, you can kill any contiguous characters, if you first set
the mark at one end of them and go to the other end.
Other syntactic units can be killed: words, with M-Rubout and
M-D (See section 11.1 [Words], page 53.); s-expressions, with
C-M-Rubout and C-M-K (See section 20.6.1 [S-expressions],
page 111.); sentences, with C-X Rubout and M-K (See section 11.2
[Sentences], page 55.).
9.2 Un-Killing
Un-killing 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.
C-Y Yank (re-insert) last killed text.
M-Y Replace re-inserted killed text with the
previously killed text.
M-W Save region as last killed text without killing.
C-M-W Append next kill to last batch of killed text.
45 EMACS Manual for TWENEX Users
Killed text is pushed onto a ring buffer called the kill ring
that remembers the last 8 blocks of text that were killed. (Why
it is called a ring buffer will be explained below). The command
C-Y (^R Un-kill) 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-W undoes the C-Y (M-X Undo also
does so). C-U C-Y leaves the cursor in front of the text, and
the mark after. This is only if the argument is specified with
just a C-U, precisely. Any other sort of argument, including C-U
and digits, has an effect described below.
If you wish to copy a block of text, you might want to use M-W
(^R Copy Region), 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 M-W does not mark
the buffer as "changed" and does not temporarily change the
screen.
There is only one kill ring, and switching buffers or files has
no effect on it. 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.
9.2.1 Appending Kills
Normally, each kill command pushes a new block onto the kill
ring. However, two or more kill commands in a row 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. (Thus we join television in leading people to kill
thoughtlessly).
Commands that kill forward from point add onto the end of the
previous killed text. Commands that kill backward from 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 rearrangement.
If a kill command is separated from the last kill command by
other commands, it starts a new entry on the kill ring, unless
you tell it not to by saying C-M-W (^R Append Next Kill) in front
of it. The C-M-W tells the following command, if it is a kill
command, to append the text it kills to the last killed text,
instead of starting a new entry. With C-M-W, you can kill
46 EMACS Manual for TWENEX Users
several separated pieces of text and accumulate them to be yanked
back in one place.
9.2.2 Un-killing Earlier Kills
To recover killed text that is no longer the most recent kill,
you need the Meta-Y (^R Un-kill Pop) command. The M-Y command
should be used only after a C-Y command or another M-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 use M-Y to move back to the previous kill.
You can think of all the last few kills as living in a ring.
After a C-Y command, the text at the front of the ring is also
present in the buffer. M-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 M-Y commands can rotate
any part of the ring to the front, so you can get at any killed
text as long as it is recent enough to be still in the ring.
Eventually the ring rotates all the way around and the most
recent killed text comes to the front (and into the buffer)
again. M-Y with a negative argument rotates the ring backwards.
If the region doesn't match the text at the front of the ring,
M-Y is not allowed.
In any case, when the text you are looking for is brought into
the buffer, you can stop doing M-Y's and it 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 M-Y.
If you change your mind about un-killing, a C-W or M-X Undo
gets rid of the un-killed text at any point, after any number of
M-Y's. C-W pushes the text onto the ring again. M-X Undo does
not.
If you know how many M-Y's it would take to find the text you
want, then there is an alternative. C-Y with an argument greater
than one restores the text the specified number of entries down
on the ring. Thus, C-U 2 C-Y gets the next to the last block of
killed text. It differs from C-Y M-Y in that C-U 2 C-Y does not
permanently rotate the ring.
A way of viewing the contents of the kill ring is
47 EMACS Manual for TWENEX Users
M-X View Q-register$..K<cr>
You must add one to the indices listed by this command, to get
the argument to use with C-Y to yank any particular string.
9.3 Other Ways of Copying Text
Usually we copy or move text by killing it and un-killing it,
but there are other ways that are useful for copying one block of
text in many places, or for copying many scattered blocks of text
into one place. In addition to those described here, see the
self-documentation of the MOVE library.
9.3.1 Accumulating Text
You can accumulate blocks of text from scattered locations
either into a buffer or into a file if you like.
To append them into a buffer, use the command C-X A
<buffername><cr> (^R Append to Buffer), which inserts a copy of
the region into the specified buffer at the location of point in
that buffer. If there is no buffer with the name you specify,
one is created. If you append text into a buffer which has been
used for editing, the copied text goes into the middle of the
text of the buffer, wherever point happens to be in it.
Point in that buffer is left at the end of the copied text, so
successive uses of C-X A accumulate the text in the specified
buffer in the same order as they were copied. If C-X A is given
an argument, point in the other buffer is left before the copied
text, so successive uses of C-X A add text in reverse order.
You can retrieve the accumulated text from that buffer with M-X
Insert Buffer$<buffername><cr>. This inserts a copy of the text
in that buffer into the selected buffer. You can also select the
other buffer for editing. See section 14 [Buffers], page 83, for
background information on buffers.
Strictly speaking, C-X A does not always append to the text
already in the buffer. But if it is used on a buffer which
starts out empty, it does keep appending to the end.
Instead of accumulating text within EMACS, in a buffer, you can
48 EMACS Manual for TWENEX Users
append text directly into a disk file with the command M-X Append
to File$<filename><cr>. It adds the text of the region to the
end of the specified file. M-X Prepend to File adds the text to
the beginning of the file instead. The file is changed
immediately on disk. These commands are normally used with files
that are not being visited in EMACS. They have the advantage of
working even on files too large to fit into the EMACS address
space.
9.3.2 Copying Text Many Times
When you want to insert a copy of the same piece of text
frequently, the kill ring becomes impractical, since the text
moves down on the ring as you edit, and will be in an
unpredictable place on the ring when you need it again. For this
case, you can use the commands C-X X (^R Put Q-register) and C-X
G (^R Get Q-register) to move the text.
C-X X<q> stores a copy of the text of the region in a place
called q-register <q>. With an argument, C-X X deletes the text
as well. <q> can be a letter or a digit. This gives 36 places
in which you can store a piece of text. C-X G<q> inserts in the
buffer the text from q-register <q>. Normally it leaves point
before the text and places the mark after, but with a numeric
argument it puts point after the text and the mark before.
The q-registers are important temporary variables in TECO
programming, but you don't have to understand them, only to know
that what you save with C-X X A is what you will get with C-X G
A.
Do not use q-registers M and R in this way, if you are going to
use the TECO commands MM and MR.
49 EMACS Manual for TWENEX Users
CHAPTER TEN
SEARCHING
Like other editors, EMACS has commands for searching for an
occurrence of a string. The search command is unusual in that it
is incremental; it begins to search before you have finished
typing the search string. As you type in the search string,
EMACS 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 an Altmode first.
C-S Search forward.
C-R Search backward.
C-S $ C-W Word search, ignoring whitespace.
The command to search is C-S (^R Incremental Search). C-S
reads in characters and positions the cursor at the first
occurrence of the characters that you have typed. If you type
C-S and then F, the cursor moves right after the first "F". Type
an "O", and see the cursor move to after the first "FO". After
another "O", the cursor is after the first "FOO" after the place
where you started the search. At the same time, the "FOO" has
echoed at the bottom of the screen.
If you type a mistaken character, you can rub it out. After
the FOO, typing a rubout makes the "O" disappear from the bottom
of the screen, leaving only "FO". The cursor moves back to the
"FO". Rubbing out the "O" and "F" moves the cursor back to where
you started the search.
When you are satisfied with the place you have reached, you can
type an Altmode, 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. Altmode is necessary only if the next
command you want to type is a printing character, Rubout,
Altmode, C-Q, or another search command, since those are the
characters that have special meanings inside the search.
Sometimes you search for "FOO" and find it, but not the one you
expected to find. There was a second FOO that you forgot about,
before the one you were looking for. 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 rub out the C-S's.
50 EMACS Manual for TWENEX Users
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".
If your string is not found at all, the echo area says "Failing
I-Search". The cursor is after the place where EMACS 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 Altmode
or some other EMACS command to "accept what the search offered".
Or you can type C-G, which throws away the characters that could
not be found (the "T" in "FOOT"), leaving those that were found
(the "FOO" in "FOOT"). A second C-G at that point undoes the
search entirely.
The C-G "quit" command does special things during searches;
just what, depends on the status of the search. If the search
has found what you specified and is waiting for input, C-G
cancels the entire search. The cursor moves back to where you
started the search. If C-G is typed while the search is actually
searching for something or updating the display, or after search
failed to find some of your input (having searched all the way to
the end of the file), then only the characters which have not
been found are discarded. Having discarded them, the search is
now successful and waiting for more input, so a second C-G will
cancel the entire search. Make sure you wait for the first C-G
to ding the bell before typing the second one; if typed too soon,
the second C-G may be confused with the first and effectively
lost.
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 for
more occurrences backwards. A C-S starts going forwards again.
C-R's can be rubbed out just like anything else. If you know
that you want to search backwards, you can use C-R instead of C-S
to start the search, because C-R is also a command (^R Reverse
Incremental Search) to search backward. Note to all customizers:
all this command does is call the current definition of
^R Incremental Search with a negative argument.
All sorts of searches in EMACS normally ignore the case of the
text they are searching through; if you specify searching for
FOO, then Foo and foo are also considered a match. If you do not
want this feature, set the variable Case Search to zero. See
section 22.3 [Variables], page 138.
51 EMACS Manual for TWENEX Users
Recall that Altmode exits a search without doing anything else,
while other Control and Meta characters exit the search and then
have their normal function. The variable Search Exit Char says
which character should exit and do nothing else; its initial
value is 033 octal, for Altmode. This value is a 9-bit
character, so 300 octal means that Control-@ is the exit
character. Any other character whose definition indirects to the
specified one also serves as an exit character; so if you specify
C-B, C-b will also exit, and if you specify C-@, then C-Space
will also exit. Set the variable to -1, and there is no exit
character.
Bit prefix characters are not processed before the decision as
to whether and how to exit, so if you specify M-: as the exit
character, you must have a meta key on your terminal in order to
type it. I do not know if this can be changed easily.
Search Exit Option says what to do with other Control and Meta
characters. 0 says that they should be part of the search
string. A nonzero value says that they should exit and then have
their normal function. If this variable is nonzero, the Search
Exit Char is distinguished only by not having its normal function
when it exits. If this is zero, the Search Exit Char is the only
way to exit.
A non-incremental search is also available. Type Altmode (or
the Search Exit Char) right after the C-S to get it. Do
M-X Describe$^R String Search<cr>
for details. Some people who prefer non-incremental searches put
that function on Meta-S, and ^R Character Search (do M-X
Describe$ for details) on C-S. It can do one useful thing which
incremental search cannot: search for words regardless of where
the line breaks.
Word search searches for a sequence of words without regard to
how the words are separated. More precisely, you type a string
of many words, using single spaces to separate them, and the
string can be found even if there are multiple spaces or line
separators between the words. Other punctuation such as commas
or periods must match exactly. This is useful in conjunction
with documents formatted by text justifiers. If you edit while
looking at the printed, formatted version, you can't tell where
the line breaks are in the source file. With word search, you
can search without having to know.
52 EMACS Manual for TWENEX Users
Word search is a special case of non-incremental search and is
invoked with C-S Altmode C-W. This is followed by the search
string, which must always be terminated with an Altmode.
Searching does not start until the final Altmode is typed.
Search Exit Char and Search Exit Option do not apply to word
search.
You do not even have to type each word in full, in a word
search. An abbreviation is good enough. Word search finds the
first occurrence of a sequence of words whose beginnings match
the words of the argument.
53 EMACS Manual for TWENEX Users
CHAPTER ELEVEN
COMMANDS FOR ENGLISH TEXT
EMACS enables you to manipulate words, sentences, or paragraphs
of text. In addition, there are commands to fill text, and
convert case.
Editing files of text in a human language ought to be done
using Text mode rather than Fundamental mode. Invoke M-X Text
Mode to enter Text mode. See section 20.1 [Major Modes],
page 102. M-X Text Mode causes Tab to run the function ^R Tab to
Tab Stop, which allows you to set any tab stops with M-X Edit Tab
Stops (See section 11.3 [Indentation], page 57.). Features
concerned with comments in programs are turned off except when
explicitly invoked. Automatic display of parenthesis matching is
turned off, which is what most people want. Finally, the syntax
table is changed so that periods are not considered part of a
word, while apostrophes, backspaces and underlines are.
If you are editing input for the text justifier TEX, you might
want to use TEX mode instead of Text mode. See the file
INFO:ETEX.INFO. For editing SCRIBE input, use SCRIBE mode. See
section 11.7 [SCRIBE], page 63. Someday there may be special
major modes for other text justifiers.
11.1 Word Commands
EMACS has commands for moving over or operating on words. By
convention, they are all Meta- characters.
M-F Move Forward over a word.
M-B Move Backward over a word.
M-D Kill up to the end of a word.
M-Rubout Kill back to the beginning of a word.
M-@ Mark the end of the next word.
M-T Transpose two words; drag a word forward or
backward across other words.
Notice how these commands form a group that parallels the
character based commands C-F, C-B, C-D, C-T and Rubout. M-@ is
related to C-@.
54 EMACS Manual for TWENEX Users
The commands Meta-F (^R Forward Word) and Meta-B (^R Backward
Word) 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, Meta-F and Meta-B
move several words if given an argument. Meta-F with a negative
argument moves backward like Meta-B, and Meta-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.
It is easy to kill a word at a time. Meta-D (^R Forward Kill
Word) kills the word after point. To be precise, it kills
everything from point to the place Meta-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 Meta-F to
get the end, and kill the word backwards with Meta-Rubout.
Meta-D takes arguments just like Meta-F.
Meta-Rubout (^R Backward Kill Word) kills the word before
point. It kills everything from point back to where Meta-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 Meta-B and
a Meta-D instead of a Meta-Rubout.
Meta-T (^R Transpose Words) moves the cursor forward over a
word, dragging the word preceding or containing the cursor
forward as well. A numeric argument serves as a repeat count.
Meta-T with a negative argument undoes the effect of Meta-T with
a positive argument; it drags the word behind the cursor backward
over a word. An argument of zero, instead of doing nothing,
transposes the word at point (surrounding or adjacent to it) with
the word at mark. In any case, the delimiter characters between
the words do not move. For example, "FOO, BAR" transposes into
"BAR, FOO" rather than "BAR FOO,".
To operate on the next n words with an operation which applies
between point and mark, you can either set the mark at point and
then move over the words, or you can use the command
Meta-@ (^R Mark Word) which does not move point, but sets the
mark where Meta-F would move to. It can be given arguments just
like Meta-F.
Note that if you are in Atom Word mode and in Lisp mode, all
the word commands regard an entire Lisp atom as a single word.
See section 22.1 [Minor Modes], page 134.
The word commands' understanding of syntax is completely
55 EMACS Manual for TWENEX Users
controlled by the syntax table. Any character can, for example,
be declared to be a word delimiter. See section 22.4 [Syntax],
page 140.
11.2 Sentence and Paragraph Commands
The EMACS commands for manipulating sentences and paragraphs
are mostly Meta- commands, so as to resemble the word-handling
commands.
M-A Move back to the beginning of the sentence.
M-E Move forward to the end of the sentence.
M-K Kill forward to the end of the sentence.
M-[ Move back to previous paragraph beginning.
M-] Move forward to next paragraph end.
M-H Put point and mark around this paragraph (around
the following one, if between paragraphs).
C-X Rubout
Kill back to the beginning of the sentence.
11.2.1 Sentences
The commands Meta-A and Meta-E (^R Backward Sentence and
^R Forward Sentence) 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, Meta-A and Meta-E if repeated or given numeric
arguments move over successive sentences. EMACS considers a
sentence to end wherever there is a ".", "?" or "!" followed by
the end of a line or two spaces, with any number of ")"'s, "]"'s,
"'"'s, or '"' 's allowed in between. Neither M-A nor M-E moves
past the CRLF or spaces which delimit the sentence.
Just as C-A and C-E have a kill command, C-K, to go with them,
so M-A and M-E have a corresponding kill command M-K (^R Kill
Sentence) 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. Larger arguments serve as a repeat count.
There is a special command, C-X Rubout (^R Backward Kill
Sentence) for killing back to the beginning of a sentence,
because this is useful when you change your mind in the middle of
composing text.
56 EMACS Manual for TWENEX Users
11.2.2 Paragraphs
Meta-[ (^R Backward Paragraph) moves to the beginning of the
current or previous paragraph, while Meta-] (^R Forward
Paragraph) moves to the end of the current or next paragraph.
Blank lines and text justifier command lines separate paragraphs
and are not part of any paragraph. Also, an indented line starts
a new paragraph.
In major modes for programs (as opposed to Text mode),
paragraphs are determined only by blank lines. This makes the
paragraph commands continue to be useful even though there are no
paragraphs per se.
When there is a fill prefix, then paragraphs are delimited by
all lines which don't start with the fill prefix. See
section 11.4 [Filling], page 59.
When you wish to operate on a paragraph, you can use the
command Meta-H (^R Mark Paragraph) to set the region around it.
This command puts point at the beginning and mark at the end of
the paragraph point was in. Before setting the new mark at the
end, a mark is set at the old location of point; this allows you
to undo a mistaken Meta-H with two C-U C-@'s. If point is
between paragraphs (in a run of blank lines, or at a boundary),
the paragraph following point is surrounded by point and mark.
Thus, for example, Meta-H C-W kills the paragraph around or after
point.
One way to make an "invisible" paragraph boundary that does not
show if the file is printed is to put space-backspace at the
front of a line. The space makes the line appear (to the EMACS
paragraph commands) to be indented, which usually means that it
starts a paragraph.
The variable Paragraph Delimiter should be a TECO search string
(See section 19.3 [TECO search strings], page 101.) composed of
various characters or character sequences separated by ^O's. A
line whose beginning matches the search string is either the
beginning of a paragraph or a text justifier command line part of
no paragraph. If the line begins with period, singlequote, "-",
"\" or "@", it can be a text justifier command line; otherwise,
it can be the beginning of a paragraph; but it cannot be either
one unless Paragraph Delimiter is set up to recognize it. Thus,
".^O " as the Paragraph Delimiter string means that lines
starting with spaces start paragraphs, lines starting with
periods are text justifier commands, and all other nonblank lines
are nothing special.
57 EMACS Manual for TWENEX Users
11.3 Indentation Commands for Text
Tab Indents "appropriately" in a mode-dependent
fashion.
M-Tab Inserts a tab character.
Linefeed Is the same as Return followed by Tab.
M-^ Undoes a Linefeed. Merges two lines.
M-M Moves to the line's first nonblank character.
M-I Indent to tab stop. In Text mode, Tab does
this also.
C-M-\ Indent several lines to same column.
C-X Tab Shift block of lines rigidly right or left.
The way to request indentation is with the Tab command. Its
precise effect depends on the major mode. In Text mode, it
indents to the next tab stop. You can set the tab stops with
Edit Tab Stops (see below). If you just want to insert a tab
character in the buffer, you can use M-Tab or C-Q Tab.
For English text, usually only the first line of a paragraph
should be indented. So, in Text mode, new lines created by Auto
Fill mode are not indented. Text mode tells Auto Fill mode not
to indent new lines by setting the variable Space Indent Flag to
zero.
But sometimes you want to have an indented paragraph. In such
cases, use M-X Edit Indented Text, which enters a submode in
which Tab and Auto Fill indent each line under the previous line,
and only blank lines delimit paragraphs. Alternatively, you can
specify a fill prefix (see below).
To undo a line-break, whether done manually or by Auto Fill,
use the Meta-^ (^R Delete Indentation) command to delete the
indentation at the front of the current line, and the line
boundary as well. They are replaced by a single space, or by no
space if before a ")" or after a "(", or at the beginning of a
line. To delete just the indentation of a line, go to the
beginning of the line and use Meta-\ (^R Delete Horizontal
Space), which deletes all spaces and tabs around the cursor.
To insert an indented line before the current line, do C-A,
C-O, and then Tab. To make an indented line after the current
line, use C-E Linefeed.
To move over the indentation on a line, do Meta-M or C-M-M
(^R Back to Indentation). These commands, given anywhere on a
line, position the cursor at the first nonblank character on the
line.
58 EMACS Manual for TWENEX Users
There are also commands for changing the indentation of several
lines at once. Control-Meta-\ (^R Indent Region) gives each line
which begins in the region the "usual" indentation by invoking
Tab at the beginning of the line. A numeric argument specifies
the indentation, and each line is shifted left or right so that
it has exactly that much. C-X Tab (^R Indent Rigidly) moves all
of the lines in the region right by its argument (left, for
negative arguments). The whole group of lines move rigidly
sideways, which is how the command gets its name.
11.3.1 Tab Stops
For typing in tables, you can use Text mode's definition of
Tab, ^R Tab to Tab Stop, which may be given anywhere in a line,
and indents from there to the next tab stop. If you are not in
Text mode, this function can be found on M-I anyway.
Set the tab stops using Edit Tab Stops, which allows you to
edit some text which defines the tab stops. Here is what it
would look like for ordinary tab stops every eight columns.
: : : : : :
123456789 123456789 123456789 123456789 123456789 1234
0 10 20 30 40 50
The first line contains a colon or period at each tab stop.
Colon indicates an ordinary tab, which fills with whitespace; a
period specifies that characters be copied from the corresponding
columns of the second line below it. Thus, you can tab to a
column automatically inserting dashes or periods, etc. It is
your responsibility to put in the second line the text to be
copied. In the example above there are no periods, so the second
line is not used, and is left blank.
The third and fourth lines you see contain column numbers to
help you edit. They are only there while you are editing the tab
stops; they are not really part of the tab settings. The first
two lines reside in the variable Tab Stop Definitions when they
are not being edited. If the second line is not needed, Tab Stop
Definitions can be just one line, with no CRLFs. This makes it
easier to set the variable in a local modes list. See
section 22.7 [Locals], page 151.
EMACS normally uses both tabs and spaces to indent lines, and
59 EMACS Manual for TWENEX Users
displays tab characters using eight-character tab stops. (How
the ASCII character tab is displayed has nothing to do with the
definition of the Tab character as a command). If you prefer,
all indentation can be made from spaces only. To request this,
turn off Indent Tabs mode with the command M-X Indent Tabs Mode.
To display tabs with different tab stops, set the TECO flag FS
TAB WIDTH$ to the desired interval. This is useful for
displaying files brought from other operating systems whose
normal tab stop spacing is not 8. See section 22.5 [FS Flags],
page 143.
To convert all tabs in a file to spaces, you can use M-X
Untabify. M-X Tabify performs the opposite transformation,
replacing spaces with tabs whenever possible, but only if there
are at least three of them so as not to obscure ends of
sentences. A numeric argument to Tabify or Untabify specifies
the interval between tab stops to use for computing how to change
the file. By default, they use the same interval being used for
display. The visual appearance of the text should never be
changed by Tabify or Untabify without a numeric argument.
11.4 Text Filling
Space in Auto Fill mode, breaks lines when appropriate.
M-Q Fill paragraph.
M-G Fill region (G is for Grind, by analogy with
Lisp).
M-S Center a line.
C-X = Show current cursor position.
Auto Fill mode lets you type in text that is filled (broken up
into lines that fit in a specified width) as you go. If you
alter existing text and thus cause it to cease to be properly
filled, EMACS can fill it again if you ask.
Entering Auto Fill mode is done with M-X Auto Fill. From then
on, lines are broken automatically at spaces when they get longer
than the desired width. New lines created by Auto Fill are
usually indented, but in Text mode they are not. To leave Auto
Fill mode, execute M-X Auto Fill again. When Auto Fill mode is
in effect, the word "Fill" appears in the mode line.
When you finish a paragraph, you can type Space with an
argument of zero. This doesn't insert any spaces, but it does
move the last word of the paragraph to a new line if it doesn't
60 EMACS Manual for TWENEX Users
fit in the old line. Return also moves the last word, but it may
create another blank line.
If you edit the middle of a paragraph, it may no longer be
correctly filled. To refill a paragraph, use the command Meta-Q
(^R Fill Paragraph). It causes the paragraph that point is
inside, or the one after point if point is between paragraphs, to
be refilled. All the line-breaks are removed, and then new ones
are inserted where necessary. M-Q can be undone with M-X Undo
(See section 24.3 [Undo], page 164.).
If you are not happy with Meta-Q's idea of where paragraphs
start and end (the same as Meta-H's. See section 11.2
[Paragraphs], page 55.), you can use Meta-G (^R Fill Region)
which refills everything between point and mark. Sometimes, it
is ok to fill a region of several paragraphs at once. Meta-G
recognizes a blank line or an indented line as starting a
paragraph and does not fill it in with the preceding line. The
sequence space-backspace at the front of a line prevents it from
being filled into the preceding line but is invisible when the
file is printed. However, the full sophistication of the
paragraph commands in recognizing paragraph boundaries is not
available. The purpose of M-G is to allow you to override
EMACS's usual criteria for paragraph boundaries. M-G can be
undone with M-X Undo.
Giving an argument to M-G or M-Q causes the text to be
justified as well as filled. This means that extra spaces are
inserted between the words so as to make the right margin come
out exactly even. I do not recommend doing this. If someone
else has uglified some text by justifying it, you can unjustify
it (remove the spaces) with M-G or M-Q without an argument.
The command Meta-S (^R Center Line) centers a line within the
current line width. With an argument, it centers several lines
individually and moves past them.
The maximum line width for filling is in the variable Fill
Column. Both M-Q and Auto Fill make sure that no line exceeds
this width. The easiest way to set the variable is to use the
command C-X F (^R Set Fill Column), which places the margin at
the column point is on, or at the column specified by a numeric
argument. The fill column is initially column 70.
To fill a paragraph in which each line starts with a special
marker (which might be a few spaces, giving an indented
paragraph), use the fill prefix feature. Move point to a spot
right after the special marker and give the command C-X Period
(^R Set Fill Prefix). Then, filling the paragraph will remove
61 EMACS Manual for TWENEX Users
the marker from each line beforehand, and put the marker back in
on each line afterward. Auto Fill when there is a fill prefix
inserts the fill prefix at the front of each new line. Also, any
line which does not start with the fill prefix is considered to
start a paragraph. To turn off the fill prefix, do C-X Period
with point at the front of a line. The fill prefix is kept in
the variable Fill Prefix.
The command C-X = (What Cursor Position) can be used to find
out the column that the cursor is in, and other miscellaneous
information about point which is quick to compute. It prints a
line in the echo area that looks like this:
X=5 Y=7 CH=101 .=3874(35% of 11014) H=<3051,4640>
In this line, the X value is the column the cursor is in (zero at
the left), the Y value is the screen line that the cursor is in
(zero at the top), the CH value is the octal value of the
character after point (101 is "A"), the "point" value is the
number of characters in the buffer before point, and the values
in parentheses are the percentage of the buffer before point and
the total size of the buffer.
The H values are the virtual buffer boundaries, indicate which
part of the buffer is still visible when narrowing has been done.
If you have not done narrowing, the H values are omitted. For
more information about the virtual buffer boundaries, See
section 17 [Narrowing], page 93.
11.5 Case Conversion Commands
EMACS has commands for converting either a single word or any
arbitrary range of text to upper case or to lower case.
M-L Convert following word to lower case.
M-U Convert following word to upper case.
M-C Capitalize the following word.
C-X C-L Convert region to lower case.
C-X C-U Convert region to upper case.
The word conversion commands are the most useful. Meta-L
(^R Lowercase Word) converts the word after point to lower case,
62 EMACS Manual for TWENEX Users
moving past it. Thus, successive Meta-L's convert successive
words. Meta-U (^R Uppercase Word) converts to all capitals
instead, while Meta-C (^R Uppercase Initial) 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 text using M-L, M-U or M-C on each word as
appropriate.
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.
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.
The other case conversion commands are C-X C-U (^R Uppercase
Region) and C-X C-L (^R Lowercase Region), which convert
everything between point and mark to the specified case. Point
and mark do not move. These commands ask for confirmation if the
region contains more than Region Query Size characters; they also
save the original contents of the region so you can undo them
(See section 24.3 [Undo], page 164.).
11.6 Underlining
EMACS has two commands for manipulating text-justifier
underlining command characters. These commands do not produce
any sort of overprinting in the text file itself; they insert or
move command characters which direct text justifiers to produce
underlining. By default, commands for the text justifier R are
used.
M-_ Underline previous word or next word.
C-X _ Underline region.
M-_ is somewhat like M-# in that it either creates an underline
around the previous word or extends it past the next word.
However, where a font change requires that you specify a font
number, an underline is just an underline and has no parameter
63 EMACS Manual for TWENEX Users
for you to specify. Also, it is assumed that the text
justifier's commands for starting and ending underlines are
distinguishable, whereas you can't tell from a font change
whether it is "starting" something or "ending" something. M-_
differs slightly from M-# as a result.
M-_ with no argument creates an underline around the previous
word if there is none. If there is an underline there, it is
extended one word forward. Thus, you can insert an underlined
word by typing the word and then a M-_. Or you can underline
several existing words by moving past the first of them, and
typing one M-_ for each word.
M- given in the vicinity of an underline-begin moves it
forward. Thus, it should be thought of as applying to any
boundary, where underlining either starts or stops, and moving it
forward. If a begin underlining is moved past an end, or vice
versa, they both disappear.
Giving M-_ an argument merely tells it to apply to several
words at once instead of one. M-_ with a positive argument of n
underlines the next n words, either creating an underlined area
or extending an existing one. With a negative argument, that
many previous words are underlined. Thus, M-_ can do more things
with underlines than M-# can do with font changes, because of the
facts that you don't need to use the argument to say which font,
and you can tell a beginning from an end.
For larger scale operations, you can use C-X _ to place
underlines from point to mark, or C-X _ with a negative argument
to remove all underlining between point and mark.
By default, ^B is used to begin an underline and ^E is used to
end one. The variables Underline Begin and Underline End may be
created and set to strings to use instead. For a single
character you can use the numeric ASCII code for it.
11.7 SCRIBE Mode
SCRIBE mode provides many special editing commands for
manipulating the commands for the text justifier SCRIBE.
Instances of SCRIBE commands are referred to in EMACS as
environments, though strictly speaking it is the command name
which is the environment, and not all commands either.
64 EMACS Manual for TWENEX Users
C-M-N Move forward over SCRIBE environment.
C-M-P Move backward over SCRIBE environment.
C-M-U Move up to beginning of containing SCRIBE
environment.
C-M-D Move forward and down inside next SCRIBE
environment.
C-M-E Move up to end of containing SCRIBE
environment.
C-M-H Put point and mark around containing SCRIBE
environment.
C-M-G Change name of containing SCRIBE environment.
C-M-Q Change form of containing SCRIBE environment.
In SCRIBE mode the standard expression motion and killing
commands C-M-F, C-M-B, C-M-K and C-M-Rubout operate on units of
balanced SCRIBE delimiters. Additional commands specific to
SCRIBE mode move around the structure of SCRIBE environments.
C-M-N (^R Forward Environment) moves forward over an entire
SCRIBE expression (@, environment name and arguments), C-M-P
(^R Backward Environment) moves back, C-M-U (^R Backward Up
Environment) moves up, and C-M-D (^R Down Environment) moves
down. C-M-E (^R End of Environment) moves up to the end of the
containing SCRIBE environment. C-M-H (^R Mark Environment) puts
point and mark around the containing SCRIBE environment.
Speaking of balanced delimiters, SCRIBE mode does not work
properly when the characters ' and ` are used as delimiters for
arguments. This is because the parser expects each character to
be either a parenthesis (which matches a different character) or
a string quote (which matches itself), not both. See
section 22.4 [Syntax Table], page 140. SCRIBE mode simply does
not treat these characters as possible delimiters, and it is best
not to use them. It is just as well, since if SCRIBE mode
actually tried to handle these delimiters it would be confused by
apostrophes in the text.
Other commands transform SCRIBE environments. C-M-G (^R Change
Environment Name) changes the name of the SCRIBE environment that
point is inside. For example, if point is somewhere inside an
@I[...] environment, C-M-G could be used to change the @I to an
@U. C-M-G reads the new environment name from the terminal and
replaces the old environment name with it.
C-M-Q (^R Change Form) changes the containing SCRIBE
environment between the brief form such as @Example[...] and the
longer form @Begin(Example)...@End(Example). If the environment
has the brief form, it is changed to the longer form, and vice
versa.
65 EMACS Manual for TWENEX Users
In SCRIBE mode, paragraphs are redefined to understand SCRIBE
commands in a way that is usually right. Any line that consists
entirely of one SCRIBE command is considered a
paragraph-separating line, just like a blank line. This does the
right thing for @Begin and @End, and for many other cases. So is
any line that starts with an @; or @' command. The @; and @'
commands are supposed to be no-ops at the beginning of a line,
and can therefore be used to mark lines that you think should
separate paragraphs. Which one works, and when, depends on the
version of SCRIBE. Eventually, @; will always work.
Aside from the above cases, SCRIBE commands are considered part
of the text, so an @I command which happens to end up at the
front of a line will not separate paragraphs. SCRIBE mode
accomplishes this by redefining M-[ and the function ^R Backward
Paragraph to be the function ^R Backward SCRIBE Paragraph. Lines
starting with page delimiters are paragraph delimiters as usual,
and lines starting with space or tab start paragraphs as usual.
The comment commands know that comments in SCRIBE files start
with "@Comment{" and end with "}". See section 20.5 [Comments],
page 107.
You can use the M-X Compile command to invoke SCRIBE. See
section 20.2 [Compile], page 103. It operates on the file
currently visited. You can use a string argument to specify
switches. After SCRIBE is finished, if there were any errors,
EMACS splits the screen and displays the errors in the bottom
window. The command M-X Next Scribe Error moves to the point in
the file at which the next error occurred.
The functions listed in this section live in the library
SCRIBE, which is loaded automatically if you enter SCRIBE mode.
11.8 Dissociated Press
M-X Dissociated Press is a command for scrambling a file of
text either word by word or character by character. Starting
from a bufferfull of straight English, it produces extremely
amusing output. Dissociated Press prints its output on the
terminal. It does not change the contents of the buffer.
Dissociated Press operates by jumping at random from one point
in the buffer to another. In order to produce plausible output
rather than gibberish, it insists on a certain amount of overlap
between the end of one run of consecutive words or characters and
66 EMACS Manual for TWENEX Users
the start of the next. That is, if it has just printed out
"president" and then decides to jump to a different point in the
file, it might spot the "ent" in "pentagon" and continue from
there, producing "presidentagon". Long sample texts produce the
best results.
A negative argument to M-X Dissociated Press tells it to
operate character by character, and specifies the number of
overlap characters. A positive argument tells it to operate word
by word and specifies the number of overlap words. In this mode,
whole words are treated as the elements to be permuted, rather
than characters. No argument is equivalent to an argument of
two. For your againformation, the output is only printed on the
terminal. The file you start with is not changed.
Dissociated Press produces nearly the same results as a Markov
chain based on a frequency table constructed from the sample
text. It is, however, an independent, ignoriginal invention.
Dissociated Press techniquitously copies several consecutive
characters from the sample between random choices, whereas a
Markov chain would choose randomly for each word or character.
This makes for more plausible sounding results.
It is a mustatement that too much use of Dissociated Press can
be a developediment to your real work. Sometimes to the point of
outragedy. And keep dissociwords out of your documentation, if
you want it to be well userenced and properbose. Have fun. Your
buggestions are welcome.
67 EMACS Manual for TWENEX Users
CHAPTER TWELVE
COMMANDS FOR FIXING TYPOS
In this section we describe the commands that are especially
useful for the times when you catch a mistake in your text just
after you have made it, or change your mind while composing text
on line.
Rubout Delete last character.
M-Rubout Kill last word.
C-X Rubout Kill to beginning of sentence.
C-T Transpose two characters.
C-X C-T Transpose two lines.
C-X T Transpose two arbitrary regions.
M-Minus M-L Convert last word to lower case.
M-Minus M-U Convert last word to all upper case.
M-Minus M-C Convert last word to lower case with
capital initial.
M-' Fix up omitted shift key on digit.
M-$ (Meta-Dollar Sign) Check and correct
spelling of word.
Correct Spelling
Check and correct spelling of entire
buffer.
12.1 Killing Your Mistakes
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.
When your mistake is longer than a couple of characters, it
might be more convenient to use M-Rubout or C-X Rubout. M-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. M-Rubout
and C-X Rubout save the killed text for C-Y and M-Y to retrieve
(See section 9.2 [Un-killing], page 44.).
M-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 exactly what you typed. At such a time, you cannot
68 EMACS Manual for TWENEX Users
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.
12.2 Transposition
The common error of transposing two characters can be fixed,
when they are adjacent, with the C-T command. Normally, C-T
transposes the two characters on either side of the cursor. When
given at the end of a line, rather than transposing 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 transposed characters. If you
transposed a space with the last character of the word before it,
the word motion commands are a good way of getting there.
Otherwise, a reverse search (C-R) is often the best way. See
section 10 [Search], page 49.
To transpose two lines, use the C-X C-T command (^R Transpose
Lines). M-T transposes words and C-M-T transposes s-expressions.
A more general transpose command is C-X T (^R Transpose
Regions). This transposes two arbitrary blocks of text, which
need not even be next to each other. To use it, set the mark at
one end of one block, then at the other end of the block; then go
to the other block and set the mark at one end, and put point at
the other. In other words, point and the last three marks should
be at the four locations which are the ends of the two blocks.
It does not matter which of the four locations point is at, or
which order the others were marked. C-X T transposes the two
blocks of text thus identified, and relocates point and the three
marks without changing their order.
12.3 Case Conversion
A very common error is to type words in the wrong case.
Because of this, the word case-conversion commands M-L, M-U and
M-C have a special feature when used with a negative argument:
they do not move the cursor. As soon as you see you have
mistyped the last word, you can simply case-convert it and go on
typing. See section 11.5 [Case], page 61.
69 EMACS Manual for TWENEX Users
Another common error is to type a special character and miss
the shift key, producing a digit instead. There is a special
command for fixing this: M-' (^R Upcase Digit), which fixes the
last digit before point in this way (but only if that digit
appears on the current line or the previous line. Otherwise, to
minimize random effects of accidental use, M-' does nothing).
Once again, the cursor does not move, so you can use M-' when you
notice the error and immediately continue typing. Because M-'
needs to know the arrangement of your keyboard, the first time
you use it you must supply the information by typing the row of
digits 1, 2, ... , 9, 0 but holding down the shift key. This
tells M-' the correspondence between digits and special
characters, which is remembered for the duration of the EMACS in
the variable Digit Shift Table. This command is called M-'
because its main use is to replace "7" with a single-quote.
12.4 Checking and Correcting Spelling
When you write a paper, you should correct its spelling at some
point close to finishing it (and maybe earlier as well). To
correct the entire buffer, do M-X Correct Spelling. This invokes
the ISPELL spelling corrector program, which will ask you what to
do with each misspelled word. Refer to its documentation. When
it finished, you will be back in EMACS.
To check the spelling of the word before point, and optionally
correct it as well, use the command M-$ (^R Correct Word
Spelling). This is a Dollar sign, not an Altmode! This command
sends the word to the ISPELL program for correction.
If ISPELL recognizes the word as a correctly spelled one
(although not necessarily the one you meant!) you will see "Found
it" or "Found it because of" followed by the word without its
suffix. If the program cannot at all recognize the word, it will
print "Couldn't find it."
If ISPELL recognizes the word as a misspelling, it displays on
the screen the other words which are possibilities for the
correct spelling, and gives each one a number. Then, you can
type one of the following things:
0 to 9 Replace misspelled word with that spelling
(preserving case, just like Replace String
and Query Replace, unless Case Replace is
zero).
70 EMACS Manual for TWENEX Users
Space Exit and make no changes.
% Read a digit as above and Query Replace (M-%)
the incorrect spelling with the correct one
from the beginning of the buffer.
No other responses are allowed.
The cursor need not be immediately after the word you want to
correct; it can be in the middle, or following any word-separator
characters after the end of the word. Note that the major mode
you are using affects which characters are word-separators. See
section 22.4 [Syntax Table], page 140.
The first time you use an EMACS spelling correction command, it
creates an ISPELL fork for you. From then on it uses the same
ISPELL fork. It's ok to kill the fork if you don't think you'll
be using M-$ again during that session. But if you do leave the
fork around checking words will much quicker. Giving M-$ a
negative argument (as in M-- M-$) kills the ISPELL fork.
If you are a regular user of the ISPELL program, you might have
a dictionary file of words which you use but which are foreign to
ISPELL. If there are words in this file which you might want to
use M-$ to correct, you can specify that you want this dictionary
to be loaded into the spell job which EMACS uses. To do this,
set the variable Spell Initialization to the string of ISPELL
program commands you want to use. For loading a dictionary, this
string would be a "Load " followed by the dictionary filename.
Other initialization commands for ISPELL can appear there also.
The commands must be separated by commas.
You can also pass arbitrary commands to the ISPELL job with
command M-X Command to Spell.
71 EMACS Manual for TWENEX Users
CHAPTER THIRTEEN
FILE HANDLING
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 visiting the file. To make your changes to
the file permanent on disk, you must save the file. EMACS also
has facilities for deleting files conveniently, and for listing
your file directory. Special text in a file can specify the
modes to be used when editing the file.
13.1 Visiting Files
C-X C-V Visit a file.
C-X C-Q Change regular visiting to read only, or vice
versa.
C-X C-S Save the visited file.
Meta-~ Tell EMACS to forget that the buffer has been
changed.
Visiting a file means copying its contents into EMACS where you
can edit them. EMACS remembers the name of the file you visited.
Unless you use the multiple buffer or window features of EMACS,
you can only be visiting one file at a time. The name of the
file you are visiting in the currently selected buffer is visible
in the mode line when you are at top level, followed by its
version number in parentheses.
The changes you make with EMACS are made in a copy inside
EMACS. The file itself is not changed. The changed text is not
permanent until you save it in a file. The first time you change
the text, a star appears at the end of the mode line; this
indicates that the text contains fresh changes which will be lost
unless you save them.
To visit a file, use the command C-X C-V (^R Visit File).
Follow the command with the name of the file you wish to visit,
terminated by a Return. If you can see a filename in the mode
line, then that name is the default, and any component of the
filename which you don't specify is taken from it. If EMACS
thinks you can't see the defaults, they are included in the
prompt. You can abort the command by typing C-G, or edit the
72 EMACS Manual for TWENEX Users
filename with the standard Twenex editing and recognition
commands (Rubout, C-W, C-U, C-F and Altmode). If you do type a
Return to finish the command, the new file's text appears on the
screen, and its name and version appear in the mode line.
When you wish to save the file and make your changes permanent,
type C-X C-S (^R Save File). After the save is finished, C-X C-S
prints "Written: <filenames>" in the echo area at the bottom of
the screen. If there are no changes to save (no star at the end
of the mode line), the file is not saved; it would be redundant
to save a duplicate of the previous version.
Because a system crash can cause you to lose everything you
have done since the last save, we provide Auto Save mode, which
saves the files you are visiting at regular intervals
automatically. See section 13.3 [Auto Save], page 74.
Alternatively, you can use journal files. See section 24.4
[Journals], page 165.
What if you want to create a file? Just visit it. EMACS
prints "(New File)" 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 file name), go ahead
and visit the file you meant. If you don't save the unwanted
file, it is not created.
If there are still people using EDIT or SOS on your machine,
you may have to visit files with line numbers in them. The
function Strip SOS Line Numbers removes all line numbers from the
current buffer. It also removes all null (^@) characters. An
explicit argument inhibits removal of nulls unless the file
actually has line numbers.
If you alter one file and then visit another in the same
buffer, EMACS offers to save the old one. If you answer Y, the
old file is saved; if you answer N, 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.
The variable Visit File Save Old controls this offer; normally,
it is one, which means that the offer is made. If it is minus
one, then the old file is always saved when you visit a new one
in the same buffer; no question is asked. If it is zero, the old
file is never saved.
A nonzero argument to C-X C-V specifies read-only visiting.
This means that EMACS prevents you from modifying the file unless
you insist. You should use this when you visit a file that you
73 EMACS Manual for TWENEX Users
do no want to change, just to avoid changing it accidentally. If
you give C-X C-V a positive argument, then the file is read-only.
This means you can change the text in the buffer, but EMACS
requires extra confirmation if you ask to save the file, and
never offers to save it. If you give C-X C-V a negative
argument, then the buffer itself is read-only; commands to change
the text are not allowed. If the visited file is visited
read-only, in either fashion, then the characters "(R-O)" appear
in the mode line after the filename. The command C-X C-Q (^R Set
File Read-Only) is used to switch between read-only and normal
visiting. Its numeric argument means the same thing as the
argument to C-X C-V: zero means changes are allowed, positive
makes the file read-only, and negative makes the text itself
read-only.
Sometimes you will change a buffer by accident. Even if you
undo the change by hand, EMACS still knows that "the buffer has
been changed". You can tell EMACS to believe that there have
been no changes with the Meta-~ (^R Buffer Not Modified) command.
This command simply clears the "modified" flag which says that
the buffer contains changes which need to be saved. Even if the
buffer really is changed EMACS will still act as if it were not.
If we take "~" to mean "not", then Meta-~ is "not" metafied.
If EMACS is about to do an unrequested save, and discovers that
the text is now a lot shorter than it used to be, it tells you so
and asks for confirmation (Y or N). If you aren't sure what to
answer (because you are surprised that it has shrunk), type C-G
to abort everything, and take a look around.
If EMACS is about to save a file and sees that the date of the
latest version on disk does not match what EMACS last read or
wrote, EMACS notifies you of this fact, and asks what to do,
because this probably means that something is wrong. For
example, someone 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. The C-X C-D command to
list the directory will help. If you determine that someone else
has modified the file, save your file under different names (or
at least making a new version) and then SRCCOM the two files to
merge the two sets of changes. Also get in touch with the other
person so that he doesn't continue editing.
74 EMACS Manual for TWENEX Users
13.2 How to Undo Drastic Changes to a File
If you have made extensive changes to a file and then change
your mind about them, you can get rid of them by reading in the
previous version of the file. To do this, use M-X Revert File.
If you have been using Auto Save mode, it reads in the last
version of the visited file or the last auto save file, whichever
is more recent.
In Auto Save mode, saving under special Auto Save filenames,
then you can ask to revert to the last "real" save, ignoring
subsequent auto saves, with C-U M-X Revert File. If you are
using the style of auto saving which saves under the real
filenames, this is not possible.
M-X Revert File does not change point, so that if the file was
only edited slightly, you will be at approximately the same piece
of text after the Revert as before. If you have made drastic
changes, the same value of point in the old file may address a
totally different piece of text.
Because M-X Revert File can be a disaster if done by mistake,
it asks for confirmation (Y or N) before doing its work. A
pre-comma argument can be used to inhibit the request for
confirmation when you call the function Revert File from a TECO
program, as in 1,M(M.M Revert File$).
13.3 Auto Save Mode: Protection Against Disasters
In Auto Save mode, EMACS saves your file from time to time
(based on counting your commands) without being asked. Your file
is also saved if you stop typing for more than a few minutes when
there are changes in the buffer. This prevents you from losing
more than a limited amount of work in a disaster. (Another
method of protection is the journal file. See section 24.4
[Journals], page 165.).
You can turn auto saving on or off in an individual buffer with
M-X Auto Save. In addition, you can have auto saving by default
in all buffers by setting the option Auto Save Default. The
frequency of saving, and the number of saved versions to keep,
can both be specified.
Each time you visit a file, no matter how, auto saving is
turned on for that file if Auto Save Default is nonzero. Once
75 EMACS Manual for TWENEX Users
you have visited a file, you can turn auto saving on or off with
M-X Auto Save. Like other minor mode commands, M-X Auto Save
turns the mode on with a positive argument, off with a zero or
negative argument; with no argument, it toggles. If you start
typing a new file into a buffer without visiting anything, Auto
Save mode is initially off, but you can turn it on with M-X Auto
Save.
When an auto save happens, "(Auto Save)" is printed in the echo
area (On a printing terminal, the bell is rung instead). An
error in the process of auto saving prints "(Auto Save Error!)".
Let us suppose that it is time for an automatic save to be
done: where should the file be saved?
Two workable methods have been developed: save the file under
the names you have visited, or save it under some special "auto
save file name". Each solution has its good and bad points. The
first one is excellent some of the time, but intolerable the rest
of the time. The second is usually acceptable. Auto saving
under the visited file's actual names means that you need do
nothing special to gobble the auto save file when you need it;
and it means that there is no need to worry about interference
between two users sharing a directory, as long as they aren't
editing the same file at once. However, this method can
sometimes have problems:
If the file is visited read-only, then auto saves should
certainly not go under the names that are visited.
If you have visited a fixed version, auto saves can't go
under that name, because they would clobber the original
file.
If you haven't visited a file, there aren't any names to
use.
If none of those cases apply then it is possible to store auto
saves under the visited name. This is done, provided that you
enable it by setting the variable Auto Save Visited File to a
nonzero value. Otherwise, or if one of the cases listed above
applies, then the filename used for auto saves is taken from the
variable Auto Save Filenames, modified slightly so that different
buffers save under different names. The buffer's name is used as
the extension of the auto save file, if Auto Save Filenames
contains a null extension. Auto Save Filenames is usually set up
by the default init file to <your directory>[SAVE]...
76 EMACS Manual for TWENEX Users
When you want to save your file "for real", use C-X C-S, as
always. C-U C-X C-S is a way to request an "auto" save
explicitly. When you are auto saving under the visited
filenames, there is not much difference between an auto save and
a "real" save, except that an auto save will eventually be
deleted automatically by EMACS a few auto saves later, while a
"real" save will be left around forever (at least, Auto Save
won't delete it).
When it is time to recover from a system crash by reloading the
auto save file, if auto saving was using the visited file names
you have nothing special to do. If auto saving was using special
auto save filenames, read in the last auto save file and then use
C-X C-W (Write File) to write it out in its real location. If
you want to go back to an auto save file to throw away changes
that you don't like, you can use M-X Revert File, which knows how
to find the most recent save, permanent or not, under whatever
filenames. See section 13.2 [Revert], page 74.
For your protection, if a file has shrunk by more than 30%
since the last save, auto saving does not save. Instead it
prints a message that the file has shrunk. You can save
explicitly if you wish; after that, auto saving will resume.
Although auto saving generates large numbers of files, it does
not clog directories, because it cleans up after itself. Only
the last Auto Save Max auto save files are kept; as further saves
are done, old auto saves are deleted (and expunged). However,
only files made by auto saving (or by explicitly requested
auto-saves with C-U C-X C-S) are deleted in this way. If Auto
Save Max is 1, then repeated auto saves rewrite the same version
of the file; the version number is only incremented after a real
save. (It will write a new version if it is unable to rewrite
the old one).
The variable Auto Save Max is initially 2. Changing the value
may not take effect in a given buffer until you turn auto saving
off and on in that buffer.
The number of characters of input between auto saves is
controlled by the variable Auto Save Interval. It is initially
500. Changing this takes effect immediately.
If you use the multiple-buffer features of EMACS (See
section 14 [Buffers], page 83.) then you may want to have auto
saving for all buffers, not just the one that is selected at the
moment. To get this, set the variable Auto Save All Buffers
nonzero.
77 EMACS Manual for TWENEX Users
13.4 Listing a File Directory
To look at a part of a file directory, use the C-X C-D command
(^R Directory Display). With no argument, it shows you all the
versions of the file you are visiting. C-U C-X C-D reads a
filename from the terminal and shows you the files related to
that filename. The filename may contain wild cards.
To see the whole directory in a brief format, use the function
List Files, which takes the directory name as a string argument.
The function View Directory prints a verbose listing of a whole
directory. These two commands take a filename as argument, which
can include wild cards.
The variable Auto Directory Display can be set to make many
file operations display the directory automatically. The
variable is normally 0; making it positive causes write
operations such as Write File to display the directory, and
making it negative causes read operations such as Insert File or
visiting to display it as well. The display is done using the
default directory listing function which is kept in the variable
Directory Lister. Normally this is the function & Subset
Directory that displays only the files related to the current
default file.
13.5 Cleaning a File Directory
The normal course of editing constantly creates new versions of
files. If you don't eventually delete the old versions, the
directory will fill up and further editing will be impossible.
EMACS has commands that make it easy to delete the old versions.
For complete flexibility to delete precisely the files you want
to delete, you can use the DIRED package. See section 13.6
[DIRED], page 78, for more details.
M-X Reap File and M-X Clean Directory are more convenient ways
to do the usual thing: keep only the two (or other number) most
recent versions.
M-X Reap File$<file><cr> counts the number of versions of
<file>. If there are more than two, you are told the names of
the recent ones (to be kept) and the names of the older ones (to
be deleted), and asked whether to do the deletion (answer Y or
N).
78 EMACS Manual for TWENEX Users
Reap File makes a special offer to delete individual files
whose extension indicates that they are likely to be temporary.
The list of temporary names is contained in a TECO search string
in the variable Temp File FN2 List. See section 19.3 [TECO
search strings], page 101.
If you give M-X Reap File a null filename argument, or no
argument, then it applies to the file you are visiting.
M-X Clean Directory$<dirname> <cr> cleans a whole directory of
old versions. Each file in the directory is processed a la M-X
Reap File. M-X Clean Directory with a null argument, or no
argument, cleans the directory containing the file you are
visiting.
M-X Reap File and M-X Clean Directory can be given a numeric
argument which specifies how many versions to keep. For example,
C-U 4 M-X Reap File would keep the four most recent versions.
The default when there is no argument is the value of the
variable File Versions Kept, which is initially 2.
To expunge the files deleted by Reap File or Clean Directory,
use M-X Expunge Directory, which expunges the connected
directory. If you wish to expunge some other directory, connect
to it first with
M-X Connect to Directory$<directory>$<password><cr>
You don't have to specify the password if you can connect without
one.
13.6 DIRED, the Directory Editor Subsystem
DIRED makes it easy to delete many of the files in a single
directory at once. It presents a copy of a listing of the
directory, which you can move around in, marking files for
deletion. When you are satisfied, you can tell DIRED to go ahead
and delete the marked files.
Invoke DIRED with M-X DIRED to edit the current default
directory, or M-X DIRED$<dir><cr> to edit directory <dir>. You
are then given a listing of the directory which you can move
around in with all the normal EMACS motion commands. Some EMACS
commands are made illegal and others do special things, but it's
79 EMACS Manual for TWENEX Users
still a recursive editing level which you can exit normally with
C-M-Z and abort with C-].
13.6.1 Basic DIRED Commands
You can mark a file for deletion by moving to the line
describing the file and typing D, C-D, K, or C-K. The deletion
mark is visible as a D at the beginning of the line. Point is
moved to the beginning of the next line, so that several D's
delete several files. Alternatively, if you give D an argument
it marks that many consecutive files. Given a negative argument,
it marks the preceding file (or several files) and puts point at
the first (in the buffer) line marked. Most of the DIRED
commands (D, U, E, Space) repeat this way with numeric arguments.
If you wish to remove a deletion mark, use the U (for Undelete)
command, which is invoked like D: it removes the deletion mark
from the current line (or next few lines, if given an argument).
The Rubout command removes the deletion mark from the previous
line, moving up to that line. Thus, a Rubout after a D precisely
cancels the D.
For extra convenience, Space is made a command similar to C-N.
Moving down a line is done so often in DIRED that it deserves to
be easy to type. Rubout is often useful simply for moving up.
If you are not sure whether you want to delete a file, you can
examine it by typing E. This enters a recursive editing mode on
the file, which you can exit with C-M-Z. The file is not really
visited at that time, and you are not allowed to change it. When
you exit the recursive editing level, you return to DIRED. The V
command is like E but uses View File to look at the file.
When you have marked the files you wish to mark, you can exit
DIRED with C-M-Z. If any files were marked for deletion, DIRED
lists them in a concise format, several per line. Then DIRED
asks for confirmation of the list. You can type "YES" (Just "Y"
won't do) to go ahead and delete them, "N" to return to editing
the directory so you can change the marks, or "X" to give up and
delete nothing. No Return character is needed. No other inputs
are accepted at this point.
80 EMACS Manual for TWENEX Users
13.6.2 Other DIRED Commands
N finds the next "hog": the next file which has at least three
versions (or, more than File Versions Kept).
C calls up SRCCOM as an inferior with the current file in its
command line. When you return to EMACS, the cursor moves down a
line to the next file.
S sorts the files into a different order. It reads another
character to say which order: F for filename (the default), S for
size, R for read date, or W for write date.
R does the same sorting as S, but uses the reverse order (small
files, older files or end of alphabet first).
H helps you clean up. It marks "old" versions of the current
file, and versions with "temporary" second file names, for
deletion. You can then use the D and U commands to add and
remove marks before deleting the files. The variables File
Versions Kept and Temp File FN2 List control which files H picks
for deletion. With an argument (C-U H), it does the whole
directory instead of just the current file.
? displays a list of the DIRED commands.
13.6.3 Invoking DIRED
There are some other ways to invoke DIRED. The command C-X D
(^R Dired) puts you in DIRED on the directory containing the file
you are currently editing. With a numeric argument of 1 (C-U 1
C-X D), only the current file is displayed instead of the whole
directory. In combination with the H command this can be useful
for cleaning up excess versions of a file after a heavy editing
session. With a numeric argument of 4 (C-U C-X D), it asks you
for the directory name. Type a directory name and/or a file
name. If you explicitly specify a file name only versions of
that file are displayed, otherwise the whole directory is
displayed.
13.6.4 Editing the DIRED Buffer Yourself
It is unwise to try to edit the text of the directory listing
yourself, without using the special DIRED commands, unless you
81 EMACS Manual for TWENEX Users
know what you are doing, since you can confuse DIRED that way.
To make it less likely that you will do so accidentally, the
self-inserting characters are all made illegal inside DIRED.
However, deleting whole lines at a time is certainly safe. This
does not delete the files described by those lines; instead, it
makes DIRED forget that they are there and thus makes sure they
will not be deleted. Thus, M-X Delete Non-Matching Lines$FOO<cr>
is useful if you wish to delete only files with a FOO in their
names. See section 19 [Replacement], page 98.
For more complicated things, you can use the minibuffer. When
you call the minibuffer from within DIRED, you get a perfectly
normal one. The special DIRED commands are not present while you
are editing in the minibuffer. To mark a file for deletion,
replace the space at the beginning of its line with a "D". To
remove a mark, replace the "D" with a space.
13.7 Miscellaneous File Operations
EMACS has extended commands for performing many other
operations on files. Invoking these commands with C-M-X instead
of M-X allows you to use filename completion on the filename
arguments these commands require.
M-X View File$<file><cr> allows you to scan or read a file by
sequential screenfuls without visiting the file. It enters a
subsystem in which you type a Space to see the next screenful or
a Backspace to see the previous screenful. Typing anything else
exits the command. View File does not visit the file; it does
not alter the contents of any buffer. The advantage of View File
is that the whole file does not need to be loaded before you can
begin reading it. The inability to do anything but page forward
or backward is a consequence.
M-X Write File$<file><cr> 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, Write File saves even if the buffer
has not been changed. C-X C-W is another way of getting at this
command.
M-X Insert File$<file><cr> inserts the contents of <file> into
the buffer at point, leaving point unchanged before the contents
and mark after them. The current defaults are used for <file>,
and are updated.
82 EMACS Manual for TWENEX Users
M-X Write Region$<file><cr> writes the region (the text between
point and mark) to the specified file. It does not set the
visited filenames. The buffer is not changed.
M-X Append to File$<file><cr> appends the region to <file>.
The text is added to the end of <file>.
M-X Prepend to File$<file><cr> adds the text to the beginning
of <file> instead of the end.
M-X Set Visited Filename$<file><cr> changes the name of the
file being visited without reading or writing the data in the
buffer. M-X Write File is approximately equivalent to this
command followed by a C-X C-S.
M-X Delete File$<file><cr> deletes the file.
M-X Copy File$<old file>$<new file><cr> copies the file.
M-X Rename File$<old name>$<new name><cr> renames the file.
The default filenames for all of these operations are TECO
default filenames. Most of these operations also leave the TECO
default names set to the file they operated on. The TECO default
is not always the same as the file you are visiting. When you
visit a file, they start out the same; the commands mentioned
above change the TECO default, but do not change the visited
filenames. Each buffer has its own TECO default filenames.
The operation of visiting a file is available as a function
under the name M-X Visit File$<file><cr>. In this form, it uses
the TECO default as its defaults, though it still sets both the
TECO default and the visited filenames.
83 EMACS Manual for TWENEX Users
CHAPTER FOURTEEN
USING MULTIPLE BUFFERS
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 selected 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.
C-X B Select or create a buffer.
C-X C-F Visit a file in its own buffer.
C-X C-B List the existing buffers.
C-X K Kill a buffer.
Each buffer in EMACS 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 EMACS has only one buffer, named "Main".
As well as the visited file and the major mode, a buffer can,
if ordered to, remember many other things locally, which means,
independently of all other buffers. See section 22.3
[Variables], page 138.
14.1 Creating and Selecting Buffers
To create a new buffer, you need only think of a name for it
(say, "FOO") and then do C-X B FOO<cr>, which is the command C-X
B (Select Buffer) followed by the name. This makes a new, empty
buffer 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 filenames to use. Each buffer has its own major mode; the
new buffer's major mode is taken from the value of the variable
Default Major Mode, or from the major mode of the previously
selected buffer if the value of Default Major Mode is the null
string. Normally the Default Major Mode is Fundamental mode.
To return to buffer FOO later after having switched to another,
84 EMACS Manual for TWENEX Users
the same command C-X B FOO<cr> is used, since C-X B can tell
whether a buffer named FOO exists already or not. It does not
matter whether you use upper case or lower case in typing the
name of a buffer. C-X B Main<cr> reselects the buffer Main that
EMACS started out with. Just C-X B<cr> reselects the previous
buffer. Repeated C-X B<cr>'s alternate between the last two
buffers selected.
You can also read a file into its own newly created buffer, all
with one command: C-X C-F (Find File), followed by the filename.
The first name of the file becomes the buffer name. C-F stands
for "Find", because if the specified file already resides in a
buffer in your EMACS, 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 be with C-X C-V. A
nonzero argument to C-X C-F makes the file or buffer read-only;
it is like the argument to C-X C-V. See section 13.1 [Visiting],
page 71.
Sometimes EMACS needs to visit a file as part of some other
operation. By default, it visits the file in whatever buffer was
selected. If you like to use C-X C-F and multiple buffers, you
can tell EMACS to use multiple buffers for implicit visiting by
setting the variable TAGS Find File to a nonzero value. This
causes automatic visiting to be done by means of C-X C-F instead
of C-X C-V. Automatic visiting is done by the TAGS package (See
section 21 [TAGS], page 122.) or by invoking EMACS with a
filename
@EMACS <filename><cr>
If the buffer with the same name that C-X C-F wants to use
already exists but with the wrong contents (often a different
file with a similar name), then you are asked what to do. You
can type Return meaning go ahead and reuse that buffer for this
new file, or you can type another buffer name to use instead. If
C-X C-F does find the file already in a buffer, then it checks to
see whether the version on disk is the same as the last version
read or written from that buffer, for safety. If they are
different, you are warned that someone else may be editing the
file, and left with the version which was already in the EMACS.
To get the new version from disk instead, use M-X Revert File.
85 EMACS Manual for TWENEX Users
14.2 Using Existing Buffers
To get a list of all the buffers that exist, do C-X C-B (List
Buffers). Each buffer's name, major mode, and visited filenames
are printed. A star at the beginning of a line indicates a
buffer which contains changes that have not been saved. The
number that appears before a buffer's name in a C-X C-B listing
is that buffer's buffer number. You can select a buffer by
giving its number as a numeric argument to C-X B, which then does
not need to read a string from the terminal.
If several buffers have stars, you should save some of them
with M-X Save All Files. This finds all the buffers that need
saving and asks about each one individually. Saving the buffers
this way is much easier and more efficient than selecting each
one and typing C-X C-S.
A quick way of glancing at another buffer, faster than
selecting it, is to use M-X View Buffer$<buffername><cr>. This
displays the contents of the other buffer and lets you move
forward and back a screen at a time with Space and Backspace.
See section 15 [Display], page 87.
M-X Rename Buffer$<new name><cr> changes the name of the
currently selected buffer. If <new name> is the null string, the
first filename of the visited file is used as the new name of the
buffer.
The commands C-X A (^R Append to Buffer) and M-X Insert Buffer
can be used to copy text from one buffer to another. See
section 9.3 [Copying], page 47.
14.3 Killing Buffers
After you use an EMACS 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 "URK" error. So whenever
it is convenient you should do M-X Kill Some Buffers, which asks
about each buffer individually. You can say Y or N to kill it or
not. Or you can say Control-R to take a look at it first. This
does not actually select the buffer, as the mode line shows, but
gives you a recursive editing level in which you can move around
and look at things. When you have seen enough to make up your
mind, exit the recursive editing level with a C-M-Z and you will
be asked the question again. If you say to kill a buffer that
86 EMACS Manual for TWENEX Users
needs saving, you will be asked whether it should be saved. See
section 24.2.5 [Storage Exhausted], page 163. .
You can kill the buffer FOO by doing C-X K FOO<cr>. You can
kill the selected buffer, a common thing to do if you use C-X
C-F, by doing C-X K<cr>. If you kill the selected buffer, in any
way, EMACS asks you which buffer to select instead. Saying just
<cr> at that point tells EMACS to choose one reasonably. C-X K
runs the function Kill Buffer.
87 EMACS Manual for TWENEX Users
CHAPTER FIFTEEN
CONTROLLING THE DISPLAY
Since only part of a large file fits on the screen, EMACS tries
to show the part that is likely to be interesting. The display
control commands allow you to ask to see a different part of the
file.
C-L Clear and redisplay screen, putting point at a
specified vertical position.
C-V Scroll forwards (a screen or a few lines).
M-V Scroll backwards.
M-R Move point to the text at a given vertical
position.
C-M-R Shift the function point is in onto the screen.
The terminal screen is rarely large enough to display all of
your file. If the whole buffer doesn't fit on the screen, EMACS
shows a contiguous portion of it, containing point. It continues
to show approximately the same portion until point moves outside
of it; then EMACS chooses a new portion centered around the new
point. This is EMACS'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 finite area of
screen through which you can see part of the buffer is called the
window, and the choice of where in the buffer to start displaying
is also called the window.
First we describe how EMACS chooses a new window position on
its own. The goal is usually to place point 35 percent of the
way down the screen. This is controlled by the variable Cursor
Centering Point, whose value is the percent of the screen down
from the top. However, if the end of the buffer is on the
screen, EMACS tries to leave at most 35 percent of the screen
blank beneath it, so that the screen is not wasted. This
percentage is controlled by the variable End of Buffer Display
Margin. These variables work by controlling FS flags, and their
values must never be negative or greater than 99.
Normally EMACS only chooses a new window position if you move
point off the screen. However, you can ask for a new window
position to be computed whenever point gets too close to the top
of the screen by setting the variable Top Display Margin to the
percentage of the screen in which point must not appear. Bottom
Display Margin does the same thing for a region near the bottom.
88 EMACS Manual for TWENEX Users
The basic display control command is C-L (^R New Window). In
its simplest form, with no argument, it clears the screen and
tells EMACS to choose a new window position, centering point 35
percent of the way from the top as usual.
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.
C-L with a negative argument puts point that many lines from the
bottom of the window. For example, C-U -1 C-L puts point on the
bottom line, and C-U -5 C-L puts it five lines from the bottom.
C-L with an argument does not clear the screen, so that it can
move the text on the screen instead of printing it again if the
terminal allows that.
C-U C-L is different from C-L with any other sort of argument.
It causes just the line containing point to be redisplayed.
The scrolling commands C-V and M-V let you move the whole
display up or down a few lines. C-V (^R Next Screen) 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 Meta-V (^R Previous Screen) with a positive
argument.
To read the buffer a screenful at a time, use the C-V command
with no argument. It takes the last two lines at the bottom of
the screen and puts them at the top, followed by nearly a whole
screenful of lines not visible before. Point is put at the top
of the screen. Thus, each C-V shows the "next screenful", except
for two lines of overlap to provide continuity. The variable
Next Screen Context Lines, if defined, controls how many lines
from the bottom of the screen move to the top; the default if the
variable is not defined is 2. To move backward, use M-V without
an argument, which moves a whole screenful backwards (again with
overlap).
Scanning by screenfuls through the buffer for some distance is
most conveniently done with the M-X View Buffer command. This
command enters a simple subsystem in which Space moves a
screenful forward and Backspace moves a screenful backward. The
Return character exits, leaving point centered in whatever part
of the buffer was visible. Any other character exits and returns
point to its former location, and is then executed as a command
(unless it is a Rubout; Rubout exits but is not executed). View
Buffer can be used to view another buffer by giving the buffer's
name as a string argument. In this case, exiting with Return
89 EMACS Manual for TWENEX Users
moves point permanently in the other buffer, but does not select
it. See section 14 [Buffers], page 83.
With the M-X View File command, you can scan by screenfuls
through a file which you have not visited. See section 13.7
[Advanced File Commands], page 81.
To scroll the buffer so that the current function or paragraph
is positioned conveniently on the screen, use the C-M-R command
(^R Reposition Window). This command tries to get as much as
possible of the current function or paragraph onto the screen,
preferring the beginning to the end, but not moving point off the
screen. A "function" in Lisp mode is a defun; otherwise it is
defined to be a set of consecutive unindented lines, or a set of
consecutive indented lines.
C-L in all its forms changes the position of point on the
screen, carrying the text with it. Another command moves point
the same way but leaves the text fixed. It is called Meta-R
(^R Move to Screen Edge). With no argument, it puts point at the
beginning of the line at the center of the screen. An argument
is used to specify the line to put it on, counting from the top
if the argument is positive, or from the bottom if it is
negative. Thus, Meta-R with an argument of 0 puts point on the
top line of the screen. Meta-R never causes any text to move on
the screen; it causes point to move with respect to the screen
and the text.
90 EMACS Manual for TWENEX Users
CHAPTER SIXTEEN
TWO WINDOW MODE
EMACS allows you to split the screen into two windows and use
them to display parts of two files, or two parts of the same
file.
C-X 2 Start showing two windows.
C-X 3 Show two windows but stay "in" the top one.
C-X 1 Show only one window again.
C-X O Switch to the Other window
C-X 4 Find buffer, file or tag in other window.
C-X ^ Make this window bigger.
C-M-V Scroll the other window.
In two window mode, the text display portion of the screen is
divided into two parts called windows, which display different
pieces of text. The two windows can display two different files,
or two parts of the same file. Only one of the windows is
selected; that is the window which the cursor is in. Editing
normally takes place in that window alone. To edit in the other
window, you would give a special command to move the cursor to
the other window, and then edit there. Since there is only one
mode line, it applies to the window you are in at the moment.
The command C-X 2 (^R Two Windows) enters two-window mode. A
line of dashes appears across the middle of the screen, dividing
the text display area into two halves. Window one, containing
the same text as previously occupied the whole screen, fills the
top half, while window two fills the bottom half. The cursor
moves to window two. If this is your first entry to two-window
mode, window two contains a new buffer named W2. Otherwise, it
contains the same text it held the last time you looked at it.
To return to viewing only one window, use the command C-X 1
(^R One Window). Window one expands to fill the whole screen,
and window two disappears until the next C-X 2. C-U C-X 1 gets
rid of window one and makes window two use the whole screen.
Neither of these depends on which window the cursor is in when
the command is given.
While you are in two window mode you can use C-X O (^R Other
Window) to switch between the windows. After doing C-X 2, the
cursor is in window two. Doing C-X O moves the cursor back to
window one, to exactly where it was before the C-X 2. The
91 EMACS Manual for TWENEX Users
difference between this and doing C-X 1 is that C-X O leaves
window two visible on the screen. A second C-X O moves the
cursor back into window two, to where it was before the first
C-X O. And so on...
Often you will be editing one window while using the other just
for reference. Then, the command C-M-V (^R Scroll Other Window)
is very useful. It scrolls the other window without switching to
it and switching back. It scrolls the same way C-V does: with
no argument, a whole screen up; with an argument, that many lines
up (or down, for a negative argument). With just a minus sign
(no digits) as an argument, C-M-V scrolls a whole screenful
backwards (what M-V does).
The C-X 3 (^R View Two Windows) command is like C-X 2 but
leaves the cursor in window one. That is, it makes window two
appear at the bottom of the screen but leaves the cursor where it
was. C-X 2 is equivalent to C-X 3 C-X O. C-X 3 is equivalent to
C-X 2 C-X O, but C-X 3 is much faster.
M-X Compare Windows compares the text in the two windows.
Starting from the existing values of point in each window, it
advances point in both windows to the first mismatch. The
variable Collapse in Comparison, if it exists, should be a string
containing all the "insignificant" characters; any string of
insignificant characters matches any other string of those
characters. If the variable does not exist, the insignificant
characters are return, linefeed, space and tab.
If you quit with C-G in the middle of Compare Windows, point is
advanced in both windows as far as the matching has proceeded.
As a result, calling Compare Windows again resumes the
comparison.
Normally, the screen is divided evenly between the two windows.
You can also redistribute screen space between the windows with
the C-X ^ (^R Grow Window) command. It makes the currently
selected window get one line bigger, or as many lines as is
specified with a numeric argument. With a negative argument, it
makes the selected window smaller. The allocation of space to
the windows is remembered while you are in one window mode and
the same allocation is used when you return to two window mode.
The allocation changes only when you give a C-X ^ command.
After leaving two-window mode, you can still use C-X O, but its
meaning is different. Window two does not appear, but whatever
was being shown in it appears, in window one (the whole screen).
Whatever buffer used to be in window one is stuck, invisibly,
into window two. Another C-X O reverses the effect of the first.
92 EMACS Manual for TWENEX Users
For example, if window one shows buffer B and window two shows
buffer W2 (the usual case), and only window one is visible, then
after a C-X O window one shows buffer W2 and window two shows
buffer B.
16.1 Multiple Windows and Multiple Buffers
Buffers can be selected independently in each window. The C-X
B command selects a new buffer in whichever window the cursor is
in. The other window's buffer does not change. Window two's
buffer is remembered while you are in one window mode, and when
you return to two window mode that same buffer reappears in
window two. See section 14 [Buffers], page 83.
You can view one buffer in both windows. Give C-X 2 an
argument as in C-U C-X 2 to go into two window mode, with both
windows showing the buffer which used to be in window one alone.
Although the same buffer appears in both windows, they have
different values of point, so you can move around in window two
while window one continues to show the same text. Then, having
found in window two the place you wish to refer to, you can go
back to window one with C-X O to make your changes. Finally you
can do C-X 1 to make window two leave the screen. If you are
already in two window mode, C-U C-X O switches windows carrying
the buffer from the old window to the new one so that both
windows show that buffer.
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
replace the old file in both windows. To view different files in
the two windows again, you must switch buffers in one of the
windows first (with C-X B or C-X C-F, perhaps).
A convenient "combination" command for viewing something in the
other window is C-X 4 (^R Visit in Other Window). 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 or C-F and a file name, or T or "." and a tag name (See
section 21 [TAGS], page 122.). This switches to the other window
and finds there what you specified. If you were previously in
one-window mode, two-window mode is entered. C-X 4 B is similar
to 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 M-Period. The difference is one of
efficiency, and also that C-X 4 works equally well if you are
already using two windows.
93 EMACS Manual for TWENEX Users
CHAPTER SEVENTEEN
NARROWING
Narrowing means focusing in on some portion of the buffer,
making the rest temporarily invisible and inaccessible.
C-X N Narrow down to between point and mark.
C-X P Narrow down to the page point is in.
C-X W Widen to view the entire buffer.
When you have narrowed down to a part of the buffer, that part
appears to be all there is. You can't see the rest, you can't
move into it (motion commands won't go outside the visible part),
you can't change it in any way. However, it is not gone, and if
you save the file all the invisible text will be saved. In
addition to sometimes making it easier to concentrate on a single
subroutine or paragraph by eliminating clutter, narrowing can be
used to restrict the range of operation of a replace command.
The word "Narrow" appears in the mode line whenever narrowing is
in effect.
The primary narrowing command is C-X N (^R Narrow Bounds to
Region). It sets the virtual buffer boundaries at point and the
mark, so that only what was between them remains visible. Point
and mark do not change.
The way to undo narrowing is to widen with C-X W (^R Widen
Bounds). This makes all text in the buffer accessible again.
Another way to narrow is to narrow to just one page, with C-X P
(^R Narrow Bounds to Page). See section 18 [Pages], page 94.
You can get information on what part of the buffer you are
narrowed down to using the C-X = command. See section 11.4
[Filling], page 59.
The virtual buffer boundaries are a powerful TECO mechanism
used internally in EMACS in many ways. While only the commands
described here set them so as you can see, many others set them
temporarily using the TECO commands FS VB$ and FS VZ$, but
restore them before they are finished.
94 EMACS Manual for TWENEX Users
CHAPTER EIGHTEEN
COMMANDS FOR MANIPULATING PAGES
Files are often thought of as divided into pages by the ASCII
character formfeed (^L). For example, if a file is printed on a
line printer, each page of the file, in this sense, will start on
a new page of paper. Most editors make the division of a file
into pages extremely important. For example, they may be unable
to show more than one page of the file at any time. EMACS treats
a formfeed character just like any other character. It can be
inserted with C-Q C-L (or, C-M-L), and deleted with Rubout.
Thus, you are free to paginate your file, or not. However, since
pages are often meaningful divisions of the file, commands are
provided to move over them and operate on them.
C-M-L Insert formfeed.
C-X C-P Put point and mark around this page (or
another page).
C-X [ Move point to previous page boundary.
C-X ] Move point to next page boundary.
C-X P Narrow down to just this (or next) page.
C-X L Count the lines in this page.
M-X What Page
Print current page and line number.
The C-X [ (^R Previous Page) command moves point to the
previous page delimiter (actually, to right after it). If point
starts out right after a page delimiter, it skips that one and
stops at the previous one. A numeric argument serves as a repeat
count. The C-X ] (^R Next Page) command moves forward past the
next page delimiter.
The command M-X What Page prints the page and line number of
the cursor in the echo area. There is a separate command to
print this information because it is likely to be slow and should
not slow down anything else. The design of TECO is such that it
is not possible to know the absolute number of the page you are
in, except by scanning through the whole file counting pages.
The C-X C-P command (^R Mark Page) puts point at the beginning
of the current page and the mark at the end. The page delimiter
at the end is included (the mark follows it). The page delimiter
at the front is excluded (point follows it). This command can be
followed by a C-W to kill a page which is to be moved elsewhere.
If it is inserted after a page delimiter, at a place where C-X ]
95 EMACS Manual for TWENEX Users
or C-X [ would take you, then the page will be properly delimited
before and after once again.
A numeric argument to C-X C-P is used to specify which page to
go to, relative to the current one. Zero means the current page.
One means the next page, and -1 means the previous one.
The command C-X P (^R Narrow Bounds to Page) narrows down to
just one page. Everything before and after becomes temporarily
invisible and inaccessible (See section 17 [Narrowing],
page 93.). Use C-X W (^R Widen Bounds) to undo this. Both page
terminators, the preceding one and the following one, are
excluded from the visible region. Like C-X C-P, the C-X P
command normally selects the current page, but allows you to
specify which page explicitly relative to the current one with a
numeric argument. However, when you are already narrowed down to
one page, C-X P with no argument moves you to the next page
(otherwise, it would be a useless no-op). So several C-X P's in
a row get first the current page and then successive pages.
If you prefer to see only one page of the file at a time as a
general rule, use the PAGE library. See section 18.1 [PAGE],
page 96.
Just what delimits pages is controlled by the variable Page
Delimiter, which should contain a TECO search string (See
section 19.3 [TECO search strings], page 101.) which matches all
page separators. Normally, it is a string containing just ^L.
For an INFO file, it might usefully be changed to ^ ^L^O^, which
means that either a ^ ^L or just a ^ (either of the two strings
that separate INFO nodes) should be a page separator. Then each
node counts as a page. In any case, page separators are
recognized as such only at the beginning of a line. The
paragraph commands consider each page boundary a paragraph
boundary as well.
The C-X L command (^R Count Lines Page) is good for deciding
where to break a page in two. It prints in the echo area the
total number of lines in the current page, and then divides it up
into those preceding the current line and those following, as in
Page has 96 lines (72+25)
Notice that the sum is off by one; this is correct if point is
not at the front of a line.
96 EMACS Manual for TWENEX Users
18.1 Editing Only One Page at a Time
The PAGE library allows you to edit only within a single page
at a time, with special commands to move between pages, and split
and join pages. It contrives to show the number of the page you
are looking at in the mode line. You can also ask to see a
directory of the pages in the file, or to insert it into the
file. This is an extension of and replacement for the facility
provided by the C-X P command in standard EMACS. It is an
optional library because we do not think it is necessarily an
improvement.
The commands in the PAGE library supplant and redefine commands
in standard EMACS. Therefore, you cannot use them unless you
give the command M-X Load Library$PAGE<cr> explicitly. See
section 22.2 [Libraries], page 136.
C-X ] Move to next page.
C-X [ Move to previous page.
C-X C-P Move to page by absolute number.
C-X P Split this page at point.
C-X J Join this page to the next or previous one.
C-X W See the whole file again.
The most fundamental thing to do with PAGE is to go to a
specific page. This can be done by giving the page number as an
argument to C-X C-P (^R Goto Page). If you give a number too
big, the last page in the file is selected.
For convenience, C-X C-P with no argument when you are looking
at the whole file selects the page containing point. When you
are looking at only one page, C-X C-P with no argument goes to
the next page and with a negative argument goes to the previous
page.
However, the main commands for moving forward or backward by
pages are C-X [ and C-X ] (^R Goto Previous Page and ^R Goto Next
Page). These take a numeric argument (either sign) and move that
many pages.
To go back to viewing the whole file instead of just one page,
you can use the C-X W (^R PAGE Widen Bounds) command. These are
the same characters that you would use in standard EMACS, but
they run a different function that knows to remove the page
number from the mode line.
97 EMACS Manual for TWENEX Users
The C-S (^R Incremental Search) and C-R (^R Reverse Search)
commands are redefined to widen bounds first and narrow them
again afterwards. So you can search through the whole file, but
afterward see only the page in which the search ended. In fact,
PAGE goes through some trouble to work with whatever search
functions you prefer to use, and find them wherever you put them.
To split an existing page, you could insert a ^L, but unless
you do this while viewing the whole file, PAGE might get
confused. The clean way is to use C-X P (^R Insert Pagemark)
which inserts the page mark, and narrows down to the second of
the two pages formed from the old page. The clean way to get rid
of a page mark is to use C-X J (^R Join Next Page). It gets rid
of the page mark after the current page; or, with a negative
argument, gets rid of the page mark before this page.
A page mark is defined as <CRLF>^L. If you set the variable
PAGE Flush CRLF to 1, a page mark is <CRLF>^L<CRLF>, which has
the effect of making the CRLF at the beginning of each page
invisible. This may be desirable for EMACS library source files.
You can also specify some other string in place of ^L by setting
the variable Page Delimiter. If Page Delimiter specifies
multiple alternatives, separated by ^O, PAGE always inserts the
first of them, but recognizes them all.
To see a list of all the pages in the file, each one
represented by its first nonempty line, use M-X View Page
Directory. It prints out the first non-blank line on each page,
preceded by its page number. M-X Insert Page Directory inserts
the same directory into the buffer at point. If you give it an
argument, it tries to make the whole thing into a comment by
putting the Comment Start string at the front of each line and
the Comment End string at the end.
If the variable Page Setup Hook exists, PAGE will execute its
value as the function for placing PAGE's functions on keys. This
is done instead of the normal assignments to C-X [, C-X ], C-X
C-P, C-X P, and C-X J.
98 EMACS Manual for TWENEX Users
CHAPTER NINETEEN
REPLACEMENT COMMANDS
Global search-and-replace operations are not needed as often in
EMACS 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
you, for each occurrence of the pattern, whether to replace it.
To replace every instance of FOO after point with BAR, you can
do
M-X Replace$FOO$BAR<cr>
Replacement occurs only after point, so if you want to cover the
whole buffer you must go to the beginning first. Replacement
continues to the end of the buffer, but you can restrict it by
narrowing. See section 17 [Narrowing], page 93.
Unless the variable Case Replace is zero, Replace tries to
preserve case; give both FOO and BAR in lower case, and if a
particular FOO is found with a capital initial or all
capitalized, the BAR which replaces it will be given the same
case pattern. Thus,
M-X Replace$foo$bar<cr>
would replace "foo" with "bar", "Foo" with "Bar" and "FOO" with
"BAR". If Case Replace is zero, the replacement string is
inserted with the case you used when you typed it. If Case
Search is zero, the string to be replaced is found only when it
has the same case as what you typed.
If you give Replace (or Query Replace) an argument, then it
replaces only occurrences of FOO delimited by break characters
(or an end of the buffer). So you can replace only FOO the word,
and not FOO when it is part of FOOBAR.
The string FOO to be replaced is actually a TECO search string,
a type of pattern, in which the characters ^B, ^N, ^O, ^Q, ^S,
^X, and ^] are special. See section 19.3 [TECO search strings],
page 101.
99 EMACS Manual for TWENEX Users
19.1 Query Replace
If you want to change only some of the occurrences of FOO, not
all, then you cannot use an ordinary Replace. Instead, use M-X
Query Replace$FOO$BAR<cr>. 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:
Space to replace the FOO (preserving case, just
like plain Replace, unless Case Replace is
zero).
Rubout to skip to the next FOO without replacing
this one.
Comma to replace this FOO and display the result.
You are then asked for another input
character, except that since the replacement
has already been made, Rubout and Space are
equivalent.
Altmode to exit without doing any more replacements.
Period to replace this FOO and then exit.
! to replace all remaining FOO's without
asking.
^ to go back to the previous FOO (or, where it
was), in case you have made a mistake. This
works by jumping to the mark (Query Replace
sets the mark each time it finds a FOO).
C-R 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-M-Z and
the next FOO will be displayed.
C-W 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-M-Z and the
next FOO will be displayed.
If you type any other character, the Query Replace is exited,
and the character executed as a command. To restart the Query
Replace, use C-X Altmode which is a command to re-execute the
previous minibuffer command or extended command. See section 5
[M-X], page 20.
100 EMACS Manual for TWENEX Users
19.1.1 Running Query Replace with the Minibuffer
Meta-% gives you a minibuffer pre-initialized with "MM Query
Replace$". See section 23 [Minibuffer], page 157. This is the
easiest way to invoke Query Replace. It also allows you to get
Returns and Altmodes into the arguments.
With the minibuffer, Query Replace can be given a precomma
argument, which says that the second string argument is actually
a TECO program to be executed to perform the replacement, rather
than simply a string to replace with.
When you invoke Query Replace from the minibuffer, the
character ^] becomes special (because it is special in TECO
programs). In order to get a ^] into the search string or the
replacement string, you must use two of them. You can also use a
^] to quote an Altmode. In the minibuffer, Return has no
syntactic significance, so there is no need for a way to quote
it. However, in order to insert any control characters into the
arguments, you need to quote them again with C-Q. So, to get ^Q
^X into the search string so as to search for a ^X, you have to
type C-Q C-Q C-Q C-X.
19.2 Other Search-and-loop Functions
Here are some other functions related to replacement. Their
arguments are TECO search strings (See section 19.3 [TECO search
strings], page 101.). They all operate from point to the end of
the buffer (or where narrowing stops them).
M-X List Matching Lines$FOO<cr>
prints each line containing FOO. With an
argument, it prints that many lines before and
after each occurrence.
M-X Count Occurrences$FOO<cr>
prints the number of occurrences of FOO after
point.
M-X Delete Non-Matching Lines$FOO<cr>
kills all lines after point that don't contain
FOO.
M-X Delete Matching Lines$FOO<cr>
kills all lines after point that contain FOO.
101 EMACS Manual for TWENEX Users
19.3 TECO Search Strings
The first string argument to Replace and Query Replace is
actually a TECO search string. This means that the characters
^X, ^B, ^N, ^S, ^O, and ^Q have special meanings.
^X matches any character. ^B matches any "delimiter" character
(anything which the word commands consider not part of a word,
according to the syntax table. See section 22.4 [Syntax],
page 140.). ^N negates what follows, so that ^N A matches
anything but A, and ^N ^B matches any non-delimiter. ^S is
followed by a parameter character, and matches anything whose
Lisp syntax equals the parameter. So ^S( matches any character
given the syntax of an open-parenthesis. ^N^SA matches any
character which is not part of symbol names.
^O means "or", so that XYXY ^O ZZZ matches either XYXY or ZZZ.
^O can be used more than once in a pattern. ^Q quotes the
following character, in case you want to search for one of the
special control characters. However, you can't quote an Altmode
or a Return in this way because its specialness is at an earlier
stage of processing.
Some variables are supposed to have TECO search strings as
their values. For example, Page Delimiter is supposed to be a
search string to match anything which should start a page. This
is so that you can use ^O to match several alternatives. In the
values of such variables, ^B, ^N, ^O, ^Q, ^S, ^X and ^] are
special, but Altmode is not. ^B through ^X are quoted with a ^Q,
and ^] is quoted with another ^].
The function Apropos (or, Help A) and all similar functions
actually take TECO search strings as arguments, so you can search
for more than one substring at a time. This is useful because
doing Apropos on word^Opara is not really slower than searching
for just "word" or just "para".
102 EMACS Manual for TWENEX Users
CHAPTER TWENTY
EDITING PROGRAMS
Special features for editing programs include automatic
indentation, comment alignment, parenthesis matching, and the
ability to move over and kill balanced expressions. Many of
these features are parameterized so that they can work for any
programming language.
For each language there is a special major mode which
customizes EMACS slightly to be better suited to editing programs
written in that language. These modes sometimes offer special
facilities as well.
See section 11.1 [Words], page 53. Moving over words is useful
for editing programs as well as text.
See section 11.2 [Paragraphs], page 55. Most programming
language major modes define paragraphs to be separated only by
blank lines and page boundaries. This makes the paragraph
commands useful for editing programs.
See section 21 [Tags], page 122. The TAGS package can remember
all the labels or functions in a multi-file program and find any
one of them quickly.
20.1 Major Modes
EMACS has many different major modes, each of which customizes
EMACS for editing text of a particular sort. The major modes are
mutually exclusive, and one major mode is current at any time.
When at top level, EMACS always says in the mode line which major
mode you are in.
When EMACS starts up, it is in what is called Fundamental mode,
which means that the character commands are defined so as to be
convenient in general. More precisely, in Fundamental mode every
EMACS option is set in its default state. For editing any
specific type of text, such as Lisp code or English text, you
should switch to the appropriate major mode. This tells EMACS to
change the meanings of a few commands to become more specifically
adapted to the language being edited. Most commands remain
unchanged; the ones which usually change are Tab, Rubout, and
Linefeed. In addition, the commands which handle comments use
the mode to determine how comments are to be delimited.
103 EMACS Manual for TWENEX Users
Selecting a new major mode is done with an M-X command. Each
major mode is the name of the function to select that mode.
Thus, you can enter Lisp mode by executing M-X Lisp (short for
M-X Lisp Mode). Often EMACS enters the correct major mode for a
file simply based on the file's extension, and you do not have to
worry about selecting a mode.
You can specify which major mode should be used for editing a
certain file by putting -*-<mode name>-*- somewhere in the first
nonblank line of the file. For example, this file has
-*-SCRIBE-*-. In a program, this string is surrounded by
appropriate other characters to hide it from the compiler in a
comment.
Many major modes redefine the syntactical properties of
characters appearing in the buffer. See section 22.4 [Syntax],
page 140.
Most programming language major modes specify that only blank
lines separate paragraphs. This is so that the paragraph
commands remain useful. They also cause Auto Fill mode to use
the definition of Tab to indent the new lines it creates. This
is because most lines in a program are usually indented.
To find out what a particular major mode redefines, use the
command M-X List Redefinitions while that mode is in effect.
This command describes all the local variables and commands of
the selected buffer, in a form designed to be easy to understand.
Major modes are available for the languages LISP, MUDDLE,
MIDAS, PALX, IBM370 (assembler), FAIL, MACRO-10, BASIC20, BCPL,
BLISS, CLU, COBOL, FORTRAN, MACSYMA, PASCAL, PCL, PL1, SAIL, and
TECO.
There is also Text mode, designed for editing English text, and
TEX and SCRIBE modes, for editing input to those text justifier
programs. See section 11 [Text], page 53.
20.2 Compiling Your Program
The command M-X Compile<cr> is used to compile the visited
file. It knows how to compile it based on the major mode; for
example, in TECO mode, it invokes the generator for EMACS
libraries. Usually it assumes that the major mode name is the
name of the compiler or assembler to use.
104 EMACS Manual for TWENEX Users
The first thing M-X Compile does is offer to save each buffer.
This is because it is likely that other buffers contain parts of
the same program you are about to compile.
Then M-X Compile invokes the appropriate compiler and passes it
the name of the visited file as the source file. If you give a
string argument to M-X Compile, that is passed to the compiler
also. This can be used to specify switches or the name of an
output file.
The major mode or the file's local modes list can specify a
different compiler by setting the variable Compiler Filename
locally. They can specify switches to be used by setting the
variable Compiler Switches (the default is to use no switches
except those specified by the user in the string argument to M-X
Compile). If Compiler Filename is set to a positive number, the
EXECUTE command is used in an inferior EXEC to compile the
program.
When EMACS starts up again, it executes the value of the
variable After Compilation Hook, if that is nonzero. This can be
used for such tasks as reading the compiler's file of error
messages into EMACS.
The major mode or the file's local modes list can completely
override the normal processing of M-X Compile by giving a nonzero
local value to the variable Compile Command. This should be a
TECO expression which takes complete responsibility for the
compilation. It can find the filename to use in q-register 1.
It must use ^\ to exit. All the other hooks described above are
ignored. This is often used when several input files must be
compiled together in order to compile any of them. See the file
EMACS:CCL.EMACS for an example of doing this for an EMACS
library.
You can also use EXEC to compile the program. If EMACS's
superior fork is EXEC, then M-X Rerun CCL returns to EXEC and
re-executes the most recent Compile-class command. See
section 6.3 [Exiting], page 29.
20.3 Indentation Commands for Code
Tab Indents current line.
Linefeed Equivalent to Return followed by Tab.
M-^ Joins two lines, leaving one space between if
appropriate.
105 EMACS Manual for TWENEX Users
M-\ Deletes all spaces and tabs around point.
M-M Moves to the first nonblank character on the
line.
Most programming languages have some indentation convention.
For Lisp code, lines are indented according to their nesting in
parentheses. For assembler code, almost all lines start with a
single tab, but some have one or more spaces as well. Indenting
TECO code is an art rather than a science, but it is often useful
to indent a line under the previous one.
Whatever the language, to indent a line, use the Tab command.
Each major mode defines this command to perform the sort of
indentation appropriate for the particular language. In Lisp
mode, Tab aligns the line according to its depth in parentheses.
No matter where in the line you are when you type Tab, it aligns
the line as a whole. In MIDAS mode, Tab inserts a tab, that
being the standard indentation for assembly code. In TECO mode,
Tab realigns the current line to match a previous line. PL1 mode
(See the file INFO:EPL1.INFO.) knows in great detail about the
keywords of the language so as to indent lines according to the
nesting structure.
The command Linefeed (^R Indent New Line) does a Return and
then does a Tab on the next line. Thus, Linefeed at the end of
the line makes a following blank line and supplies it with the
usual amount of indentation. Linefeed in the middle of a line
breaks the line and supplies the usual indentation in front of
the new line.
The inverse of Linefeed is Meta-^ or C-M-^ (^R Delete
Indentation). This command deletes the indentation at the front
of the current line, and the line separator as well. They are
replaced by a single space, or by no space if before a ")" or
after a "(", or at the beginning of a line. To delete just the
indentation of a line, go to the beginning of the line and use
Meta-\ (^R Delete Horizontal Space), which deletes all spaces and
tabs around the cursor.
To insert an indented line before the current one, do C-A, C-O,
and then Tab. To make an indented line after the current one,
use C-E Linefeed.
To move over the indentation on a line, use Meta-M or C-M-M
(^R Back to Indentation). These commands move the cursor forward
or back to the first nonblank character on the line.
106 EMACS Manual for TWENEX Users
20.4 Automatic Display Of Matching Parentheses
The EMACS parenthesis-matching feature is designed to show
automatically how parentheses balance in text as it is typed in.
When this feature is enabled, after a close parenthesis or other
close bracket character is inserted the cursor automatically
moves for an instant to the open which balances the newly
inserted character. The cursor stays at the open parenthesis for
a second before returning home, unless you type another command
before the second is up.
It is worth emphasizing that the location of point, the place
where your type-in will be inserted, is not affected by the
parenthesis matching feature. It stays after the close
parenthesis, where it ought to be. Only the cursor on the screen
moves away and back. You can type ahead freely as if the
parenthesis display feature did not exist. In fact, if you type
fast enough, you won't see the cursor move. You must pause after
typing a close parenthesis to let the cursor move to the open
parenthesis.
The variable Display Matching Paren controls parenthesis
display. If it is zero, the feature is disabled. If the
variable is nonzero, then its absolute value is the number of
seconds for the cursor to stay at the open parenthesis before
coming back to its real location. The sign of the variable is
also significant: if it is negative, then the open parenthesis is
shown only if it is already on the screen. If the variable is
positive, then EMACS will actually shift text on the screen to
show the open parenthesis. The default setting of the variable
is -1.
An additional parameter is whether EMACS should warn you by
ringing the bell if you type an unmatched close parenthesis. The
default is to warn you if you are editing a language in which
parentheses are paramount, such as Lisp, but not to do so for
languages in which parentheses are not so crucial. This is
controlled by the variable Permit Unmatched Paren. When it is 1,
you are never warned (they are always "permitted"). When it is
0, you are warned, regardless of major mode. When it is -1, you
are warned only in Lisp mode and similar modes (this is the
default). Note that these modes distinguish themselves by
setting the variable locally to 0 if it was -1. Unmatched parens
are always "permitted" in that EMACS will never refuse to insert
them.
While this feature was intended primarily for Lisp, it can be
used just as well for any other language, and it is not dependent
107 EMACS Manual for TWENEX Users
on what major mode you are in. It is expected that you wouldn't
want it in Text mode, so Text mode sets the variable Display
Matching Paren locally to zero. If you do want the feature in
Text mode, you can create a Text Mode Hook variable which sets
the variable back to -1. See the file INFO:CONV.INFO, node
Hooks, for more info on Text Mode Hook. The way to control which
characters trigger this feature is with the syntax table. Any
character whose Lisp syntax is ")" causes the matching character
with syntax "(" to be shown. Most major modes automatically set
up the syntax table (See section 22.4 [Syntax], page 140.).
The syntax table also controls what is done with the case of
"mismatched" parens, as in "[ )". The third slot in a close
parenthesis character's syntax table entry should be the proper
matching open parenthesis character, if you want this feature
turned on. If that slot contains a space instead, then any open
parenthesis character is considered a legitimate match. If a
close parenthesis is mismatched, it is inserted as always, but it
rings the bell.
The implementation of this feature uses the TECO flag FS
^R PAREN$. See section 22.5 [FS Flags], page 143.
20.5 Manipulating Comments
The comment commands insert, kill and align comments. There
are also commands for moving through existing code and inserting
comments.
M-; Insert or align comment.
C-; The same.
C-M-; Kill comment.
Return Move past comment terminator and onto new
line.
C-X ; Set comment column.
M-N Move to Next line and insert comment.
M-P Move to Previous line and insert comment.
M-J Continue a comment on a new line.
M-Linefeed The same.
The command that creates a comment is Meta-; or Control-;
(^R Indent for Comment). If there is no comment already on the
line, a new comment is created, aligned at a specific column
called the comment column. The comment is created by inserting
108 EMACS Manual for TWENEX Users
whatever string EMACS thinks should start comments in the current
major mode. Point is left after the comment-starting string. If
the text of the line goes past the comment column, then the
indentation is done to a suitable boundary (usually, a multiple
of 8).
Meta-; can also be used to align an existing comment. If a
line already contains the string that starts comments, then M-;
just moves point after it and re-indents it to the right column.
Exception: comments starting in column 0 are not moved.
Even when an existing comment is properly aligned, M-; is still
useful for moving directly to the start of the comment.
Some languages require an explicit comment terminator, which is
not simply the end of the line. Although the language may then
allow comments in the middle of the line, the EMACS comment
commands assume that a comment is the last thing on the line.
When there is a comment terminator, M-; inserts the terminator as
well as the starter, and leaves point between them, so that you
are ready to insert the text of the comment. When you are done,
the Return command given immediately before the comment
terminator acts as if it were at the end of the line already: it
moves down to or creates a following blank line. It does not
break the existing line before the comment terminator as you
would expect.
C-M-; (^R Kill Comment) kills the comment on the current line,
if there is one. The indentation before the start of the comment
is killed as well. If there does not appear to be a comment in
the line, nothing is done. To reinsert the comment on another
line, move to the end of that line, do C-Y, and then do M-; to
realign it.
20.5.1 Multiple Lines of Comments
If you wish to align a large number of comments, you can give
Meta-; an argument and it indents what comments exist on that
many lines, creating none. Point is left after the last line
processed (unlike the no-argument case).
When adding comments to a long stretch of existing code, the
commands M-N (^R Down Comment Line) and M-P (^R Up Comment Line)
may be useful. They are like C-N and C-P except that they do a
C-; automatically on each line as you move to it, and delete any
empty comment from the line as you leave it. Thus, you can use
M-N to move down through the code, putting text into the comments
109 EMACS Manual for TWENEX Users
when you want to, and allowing the comments that you don't fill
in to be removed because they remained empty.
If you are typing a comment and find that you wish to continue
it on another line, you can use the command Meta-J or
Meta-Linefeed (^R Indent New Comment Line), which terminates the
comment you are typing, creates or gobbles a new blank line, and
begins a new comment indented under the old one. When Auto Fill
mode is on, going past the fill column while typing a comment
causes the comment to be continued in just this fashion. Note
that if the next line is not blank, a blank line is created, and
the continuation goes on that line. By comparison, M-N would
create a continuation comment on the next existing line of code.
20.5.2 Double and Triple Semicolons in Lisp
In Lisp code there are conventions for comments which start
with more than one semicolon. Comments which start with two
semicolons are indented as if they were lines of code, instead of
at the comment column. Comments which start with three
semicolons are supposed to start at the left margin. EMACS
understands these conventions by indenting a double-semicolon
comment using Tab, and by not changing the indentation of a
triple-semicolon comment at all. (Actually, this rule applies
whenever the comment starter is a single character and is
duplicated). Note that the ATSIGN program considers a
four-semicolon comment a subtitle in Lisp code.
20.5.3 Options Controlling Comments
The comment column is stored in the variable Comment Column.
You can set it to a number explicitly. Alternatively, the
command C-X ; (^R Set Comment Column) sets the comment column to
the column point is at. C-U C-X ; sets the comment column to
match the last comment before point in the buffer, and then does
a Meta-; to align the current line's comment under the previous
one.
Many major modes supply default local values for the comment
column. In addition, C-X ; automatically makes the variable
Comment Column local. Otherwise, if you change the variable
itself, it changes globally (for all buffers) unless it has been
made local in the selected one. See section 22.7 [Locals],
page 151.
110 EMACS Manual for TWENEX Users
The string recognized as the start of a comment is stored in
the variable Comment Start, while the string used to start a new
comment is kept in Comment Begin (if that is zero, Comment Start
is used for new comments). This makes it possible for you to
have any ";" recognized as starting a comment but have new
comments begin with ";; ** ".
The string used to end a comment is kept in the variable
Comment End. In many languages no comment end is needed as the
comment extends to the end of the line. Then, this variable is a
null string.
If Comment Multi Line is nonzero, then Meta-Linefeed within a
comment does not close the old comment and start a new comment on
the new line. Instead it allows the original comment to extend
through the new line. This is legitimate if the language has
explicit comment terminators. Then it's a matter of taste.
20.6 Lisp Mode and Muddle Mode
Lisp's simple syntax makes it much easier for an editor to
understand; as a result, EMACS can do more for Lisp, and with
less work, than for any other language.
Lisp programs should be edited in Lisp mode. In this mode, Tab
is defined to indent the current line according to the
conventions of Lisp programming style. It does not matter where
in the line Tab is used; the effect on the line is the same. The
function which does the work is called ^R Indent for Lisp.
Linefeed, as usual, does a Return and a Tab, so it moves to the
next line and indents it.
As in most modes where indentation is likely to vary from line
to line, Rubout is redefined to treat a tab as if it were the
equivalent number of space (^R Backward Delete Hacking Tabs).
This makes it possible to rub out indentation one position at a
time without worrying whether it is made up of spaces or tabs.
Control-Rubout does the ordinary type of rubbing out which rubs
out a whole tab at once.
Paragraphs are defined to start only with blank lines so that
the paragraph commands can be useful. Auto Fill indents the new
lines which it creates. Comments start with ";". If Atom Word
mode is in effect, them in Lisp mode the word-motion commands
regard each Lisp atom as one word.
111 EMACS Manual for TWENEX Users
Lisp mode is exactly right only for the MacLisp dialect of
Lisp. For Interlisp, there is Interlisp mode, which is only
slightly different. Mainly, it has a different syntax table
which enables all the Lisp commands to work as documented on
Interlisp code. The only noteworthy difference is that comments
begin with "(*" and end with ")".
The LEDIT library allows EMACS and Lisp to communicate, telling
Lisp the new definitions of functions which you edit in EMACS.
See the file INFO:LEDIT.INFO. For Interlisp, use the INTER
library. See the file INFO:INTER.INFO.
The language Muddle is a variant form of Lisp which shares the
concept of using parentheses (of various sorts) as the main
syntactical construct. It can be edited using Muddle mode, which
is almost the same as Lisp mode and provides the same features,
differing only in the syntax table used.
20.6.1 Moving Over and Killing Lists and S-expressions
C-M-F Move Forward over s-expression.
C-M-B Move Backward.
C-M-K Kill s-expression forward.
C-M-Rubout Kill s-expression backward.
C-M-U Move Up and backward in list structure.
C-M-( The same.
C-M-) Move up and forward in list structure.
C-M-D Move Down and forward in list structure.
C-M-N Move forward over a list.
C-M-P Move backward over a list.
C-M-T Transpose s-expressions.
C-M-@ Put mark after s-expression.
M-( Put parentheses around next
s-expression(s).
M-) Move past next close parenthesis and
re-indent.
By convention, EMACS commands that deal with balanced
parentheses are usually Control-Meta- characters. They tend to
be analogous in function to their Control- and Meta- equivalents.
These commands are usually thought of as pertaining to Lisp, but
can be useful with any language in which some sort of parentheses
exist (including English).
To move forward over an s-expression, use C-M-F (^R Forward
Sexp). If the first significant character after point is an "(",
112 EMACS Manual for TWENEX Users
C-M-F moves past the matching ")". If the first character is a
")", C-M-F just moves past it. If the character begins an atom,
C-M-F moves to the end of the atom. C-M-F with an argument
repeats that operation the specified number of times; with a
negative argument, it moves backward instead.
The command C-M-B (^R Backward Sexp) moves backward over an
s-expression; it is like C-M-F with the argument negated. If
there are "'"-like characters in front of the s-expression moved
over, they are moved over as well. Thus, with point after
" 'FOO ", C-M-B leaves point before the "'", not before the "F".
These two commands (and most of the commands in this section)
do not know how to deal with the presence of comments. Although
that would be easy to fix for forward motion, for backward motion
the syntax of Lisp makes it nearly impossible. Comments by
themselves can be dealt with, but handling both comments and
strings is impossible with local backward parsing. In a line
((FOO ; " BAR
are the open parentheses inside a string? So C-M-B cannot handle
comments, and C-M-F does not either for simplicity's sake.
For this reason, two other commands which move over lists
instead of s-expressions are often useful. They are C-M-N
(^R Forward List) and C-M-P (^R Backward List). They act like
C-M-F and C-M-B except that they don't stop on atoms; after
moving over an atom, they move over the next expression, stopping
after moving over a list. With this command, you can avoid
stopping after all of the words in a comment.
Killing an s-expression at a time can be done with C-M-K and
C-M-Rubout (^R Forward Kill Sexp and ^R Backward Kill Sexp).
C-M-K kills the characters that C-M-F would move over, and
C-M-Rubout kills what C-M-B would move over.
C-M-F and C-M-B stay at the same level in parentheses, when
that's possible. To move up one (or n) levels, use C-M-( or
C-M-) (^R Backward Up List and ^R Forward Up List). C-M-( moves
backward up past one containing "(". C-M-) moves forward up past
one containing ")". Given a positive argument, these commands
move up the specified number of levels of parentheses. C-M-U is
another name for C-M-(, which is easier to type, especially on
non-Meta keyboards. If you use that name, it is useful to know
that a negative argument makes the command move up forwards, like
C-M-).
113 EMACS Manual for TWENEX Users
To move down in list structure, use C-M-D (^R Down List). It
is nearly the same as searching for a "(".
A somewhat random-sounding command which is nevertheless easy
to use is C-M-T (^R Transpose Sexps), which drags the previous
s-expression across the next one. An argument serves as a repeat
count, and a negative argument drags backwards (thus canceling
out the effect of C-M-T with a positive argument). An argument
of zero, rather than doing nothing, transposes the s-expressions
at the point and the mark.
To make the region be the next s-expression in the buffer, use
or C-M-@ (^R Mark Sexp) which sets mark at the same place that
C-M-F would move to. C-M-@ takes arguments like C-M-F. In
particular, a negative argument is useful for putting the mark at
the beginning of the previous s-expression.
The commands M-( ("^R Insert ()") and M-) ("^R Move Over )")
are designed for a style of editing which keeps parentheses
balanced at all times. M-( inserts a pair of parentheses, either
together as in "()", or, if given an argument, around the next
several s-expressions, and leaves point after the open
parenthesis. Instead of typing "(FOO)", you can type M-( FOO,
which has the same effect except for leaving the cursor before
the close parenthesis. Then you type M-), which moves past the
close parenthesis, deleting any indentation preceding it (in this
example there is none), and indenting with Linefeed after it.
The library LSPUTL contains two other list commands. Find Pat
searches for lists which contain several strings. ^R Extract
Sublist replaces a list with one of its sublists. See
section 22.2 [Libraries], page 136.
<level>M-X Find Pat$<mainstring>$<string1>$<string2> searches
for a list which contains <mainstring> at a depth of <level>
lists down, and contains <string1> and <string2> at any level.
There can be any number of such additional strings to search for;
there can be none of them.
^R Extract Sublist is meant to be connected to a character.
Given an argument of <level>, it replaces the list <level> levels
up from point with its sublist which starts after point.
The library XLISP contains a functions for making various
transformations on Lisp code:
Lowercase Lisp Buffer changes all the Lisp code in the buffer
to lower case, without changing comments, strings, or slashified
characters. Uppercase Lisp Buffer performs the inverse
114 EMACS Manual for TWENEX Users
transformation. Lowercase Lisp Region and Uppercase Lisp Region
are similar but act only between point and mark.
Change / to \ takes Lisp code written with "/" as the
character-quote character and transforms it to use the new
character-quote character, "\". The meaning of the transformed
code in the new syntax is the same as that of the old code in the
old syntax.
XLISP contains several other commands which transform old
constructs into new ones. They behave like Query Replace in that
they display each occurrence of the old construct and ask you
whether to change it to the new one. A Space means yes, a Rubout
means no. Here is a list of these commands, and what each one
transforms.
Modernize FUNCTION References
(FUNCTION ...) into #'...
Modernize QUOTE References
(QUOTE ...) into '...
Modernize LAMBDA References
'(LAMBDA ...) into #'(LAMBDA ...)
Modernize MAP References
(MAPxxx '... ...) into (MAPxxx #'... ...)
Modernize NIL Occurrences
NIL into ()
Modernize LAMBDA Combinations
((LAMBDA (X) Y) ARG) into (LET ((X ARG)) Y)
Modernize Strings
'|...| into "..."
facility for replacing obsolete or old-fashioned Maclisp
constructs with equivalent modern ones.
The list commands' understanding of syntax is completely
controlled by the syntax table. Any character can, for example,
be declared to act like an open parenthesis. See section 22.4
[Syntax], page 140.
115 EMACS Manual for TWENEX Users
20.6.2 Commands for Manipulating Defuns
C-M-[, C-M-A Move to beginning of defun.
C-M-], C-M-E Move to end of defun.
C-M-H Put region around wHole defun.
In EMACS, an expression at the top level in the buffer is
called a defun, regardless of what function is actually called by
the expression, because such expressions usually call defun.
In the remotest past, EMACS found defuns by moving upward a
level of parentheses until there were no more levels to go up.
This required scanning all the way back to the beginning of the
file. To speed up the operation, EMACS now assumes that any "("
(or any character with "(" as its Lisp syntax) in column 0 is the
start of a defun. This heuristic is nearly always right and
avoids the costly scan.
The commands to move to the beginning and end of the current
defun are C-M-[ (^R Beginning of Defun) and C-M-] (^R End of
Defun). Alternate names for these two commands are C-M-A for
C-M-[ and C-M-E for C-M-]. The alternate names are easier to
type on many non-Meta keyboards.
If you wish to operate on the current defun, use C-M-H (^R Mark
Defun) which puts point at the beginning and mark at the end of
the current or next defun.
20.7 Lisp Grinding
The best way to keep Lisp code properly indented ("ground") is
to use EMACS to re-indent it when it is changed. EMACS has
commands to indent properly either a single line, a specified
number of lines, or all of the lines inside a single
s-expression.
Tab In Lisp mode, re-indents line according to
parenthesis depth.
Linefeed Equivalent to Return followed by Tab.
M-^ Join two lines, leaving one space between
them if appropriate.
C-M-Q Re-indent all the lines within one list.
C-M-G Grind a list, moving code between lines.
116 EMACS Manual for TWENEX Users
The basic indentation function is ^R Indent for Lisp, which
gives the current line the correct indentation as determined from
the previous lines' indentation and parenthesis structure. This
function is normally found on C-M-Tab, but when in Lisp mode it
is placed on Tab as well (Use Meta-Tab or C-Q Tab to insert a
tab). If executed at the beginning of a line, it leaves point
after the indentation; when given inside the text on the line, it
leaves point fixed with respect to the characters around it.
When entering a large amount of new code, use Linefeed
(^R Indent New Line), which is equivalent to a Return followed by
a Tab. In Lisp mode, a Linefeed creates or moves down onto a
blank line, and then gives it the appropriate indentation.
To join two lines together, use the Meta-^ or Control-Meta-^
command (^R Delete Indentation), which is approximately the
opposite of Linefeed. It deletes any spaces and tabs at the
front of the current line, and then deletes the line separator
before the line. A single space is then inserted, if EMACS
thinks that one is needed there. Spaces are not needed before a
close parenthesis, or after an open parenthesis.
If you are dissatisfied about where Tab indents the second and
later lines of an s-expression, you can override it. If you
alter the indentation of one of the lines yourself, then Tab will
indent successive lines of the same list to be underneath it.
This is the right thing for functions which Tab indents
unaesthetically.
When you wish to re-indent code which has been altered or moved
to a different level in the list structure, you have several
commands available. You can re-indent a specific number of lines
by giving the ordinary indent command (Tab, in Lisp mode) an
argument. This indents as many lines as you say and moves to the
line following them. Thus, if you underestimate, you can repeat
the process later.
You can re-indent the contents of a single s-expression by
positioning point before the beginning of it and typing
Control-Meta-Q (^R Indent Sexp). The line the s-expression
starts on is not re-indented; thus, only the relative indentation
with in the s-expression, and not its position, is changed. To
correct the position as well, type a Tab before the C-M-Q.
Another way to specify the range to be re-indented is with
point and mark. The command C-M-\ (^R Indent Region) applies Tab
to every line whose first character is between point and mark.
In Lisp mode, this does a Lisp indent.
117 EMACS Manual for TWENEX Users
A more powerful grind command which can move text between lines
is C-M-G (^R Format Code). You might or might not like it. It
knows in different ways about Lisp code and Macsyma code.
20.7.1 Customizing Lisp Indentation
The indentation pattern for a Lisp expression can depend on the
function called by the expression. For each Lisp function, you
can choose among several predefined patterns of indentation, or
define an arbitrary one with a TECO program.
The standard pattern of indentation is as follows: the second
line of the expression is indented under the first argument, if
that is on the same line as the beginning of the expression;
otherwise, the second line is indented one space more than the
entire expression. Each following line is indented under the
previous line whose nesting depth is the same.
Another indentation pattern is used for functions whose names
start with "def". The second line of the expression is indented
two spaces more than the entire expression. The variable Lisp
Special Indent Offset (default 2) controls the increment in
depth. Each following line indents under the previous one.
Again, lines starting at lower depths do not count. Setting the
variable Lisp Indent DEFAnything to zero turns this feature off.
Then the standard pattern applies to def- functions by default.
The indentation pattern for expressions that call the function
FOO is controlled specifically by the variable Lisp FOO Indent.
If this variable does not exist, the standard pattern or the
def- pattern is used. If the variable does exist, its value
should be one of these:
-3 selects the standard or def- indentation pattern,
as if the variable did not exist.
-2 selects the standard indentation pattern. The
def- pattern is not used, even if the function
name starts with "def".
-1 selects the def- indentation pattern, independent
of the function name and the setting of Lisp
Indent DEFAnything.
0 or more selects special form with body indentation. The
value of the variable is the number of special
arguments that precede the body; thus, LET and
LAMBDA have one distinguished argument before the
body (the list of bound variables), PROGN has
118 EMACS Manual for TWENEX Users
none, and DO has two. The distinguished
expressions at the beginning are indented using
the standard pattern, but the first expression of
the body, if it should occur at the beginning of
a line, is indented two spaces deeper than the
entire expression. Following lines indent each
under the previous one as usual. The variable
Lisp Special Indent Offset (default 2) controls
the increment in depth.
a string should be a TECO expression which implements an
indentation pattern. Initially, Lisp PROG Indent
is defined as a string (the definition of &
Standard Lisp PROG Indent) which detects tags and
indents them specially.
The variable Lisp Indent Offset, if nonzero, selects a
different indentation pattern as the standard one. It indents
the second line of each expression that many spaces deeper than
the enclosing expression.
Implementing and selecting among the above indentation patterns
is the responsibility of the definition of the variable Lisp
Indentation Hook. This variable must exist and its value must be
a TECO program. By default its value is the definition of &
Standard Lisp Indentation Hook.
Whatever its value, the hook is called with two arguments,
which are the position in the buffer of the most recent unclosed
"(" and the buffer position of the beginning of the line to be
indented. The buffer position of the cursor at the time the tab
was typed is stored as an offset from Z in qZ, so Z-qZ is that
buffer position. The hook should not modify the buffer. If it
returns 0 or no value, the caller will use the horizontal cursor
position of point as the column to indent to. Hence, to indent
under the "O" in PROG, it is sufficient to jump to that character
in the buffer and return. Alternatively, the hook can simply
return the desired indentation column number as a value.
The hook should return a nonzero precomma value if following
lines of the same expression should be indented individually. If
it does not return a nonzero precomma value, the caller may
remember the indentation of this line and indent following lines
the same way.
If Lisp FOO Indent has a TECO expression as its value, the same
interface conventions apply to it.
Different Lisp-like languages can select an entirely different
119 EMACS Manual for TWENEX Users
set of indentation patterns by changing the value of the variable
Lisp Indent Language. Normally the value of this variable is the
string "Lisp". All the variables listed above with names
beginning with "Lisp" actually should have names beginning with
the Lisp Indent Language. Thus, if Lisp Indent Language is
changed to "Muddle", then the indentation commands will look for
variables Muddle Indent Offset, Muddle Indentation Hook, Muddle
PROG Indent, etc.
20.8 Editing Assembly-Language Programs
MIDAS mode is designed for editing programs written in the
MIDAS assembler. Major modes for other assemblers, such as PALX,
MACRO, and FAIL, also exist but differ only in the syntax table
and in the name of the major mode hook that they will invoke.
(There is also IBM370 mode, for 370 assembler, which is
completely different. Refer to the self-documentation of the
IBM370 library for information on it).
In MIDAS mode, comments start with ";", and "<" and ">" have
the syntax of parentheses. In addition, there are five special
commands which understand the syntax of instructions and labels.
These commands are:
C-M-N Go to Next label.
C-M-P Go to Previous label.
C-M-A Go to Accumulator field of instruction.
C-M-E Go to Effective Address field.
C-M-D Kill next word and its Delimiting character.
Two other commands with slightly different uses are
M-[ Move up to previous blank line.
M-] Move down to next blank line.
Any line which is not indented and is not just a comment is
taken to contain a label. The label is everything up to the
first whitespace (or the end of the line). C-M-N (^R Go to Next
Label) and C-M-P (^R Go to Previous Label) both position the
cursor right at the end of a label; C-M-N moves forward or down
and C-M-P moves backward or up. At the beginning of a line
120 EMACS Manual for TWENEX Users
containing a label, C-M-N moves past it. Past the label on the
same line, C-M-P moves back to the end of it. If you kill a
couple of indented lines and want to insert them right after a
label, these commands put you at just the right place.
C-M-A (^R Go to AC Field) and C-M-E (^R Go to Address Field)
move to the beginning of the accumulator (AC) or effective
address fields of a PDP-10 instruction. They always stay on the
same line, moving either forward or backward as appropriate. If
the instruction contains no AC field, C-M-A positions to the
start of the address field. If the instruction is just an opcode
with no AC field or address field, a space is inserted after the
opcode and the cursor left after the space. In PDP-11 programs,
C-M-A moves to the first operand and C-M-E moves to the second
operand.
Once you've gone to the beginning of the AC field you can often
use C-M-D (^R Kill Terminated Word) to kill the AC name and the
comma which terminates it. You can also use it at the beginning
of a line, to kill a label and its colon, or after a line's
indentation to kill the opcode and the following space. This is
very convenient for moving a label from one line to another. In
general, C-M-D is equivalent to M-D C-D, except that all the
characters are saved on the kill ring, together. C-D, a
"deletion" command, doesn't save on the kill ring if not given an
argument.
The M-[ and M-] commands are not, strictly speaking, redefined
by MIDAS mode. They go up or down to a paragraph boundary, as
usual. However, in MIDAS mode the criterion for a paragraph
boundary is changed by setting the variable Paragraph Delimiter
(See section 11.2 [Paragraphs], page 55.) so that only blank
lines (and pages) delimit paragraphs. So, M-[ moves up to the
previous blank line and M-] moves to the next one.
20.9 Major Modes for Other Languages
MACSYMA mode redefines the syntax of words and s-expressions in
an attempt to make it easier to move over MACSYMA syntactic
units. In addition, the C-M-G "grind" command is told to grind
text as MACSYMA instead of as Lisp. Also, the syntax of MACSYMA
comments is understood.
TECO mode is good for editing EMACS library source files. It
connects Tab to ^R Indent Nested (see its self-documentation).
Comments start with "!* " and end with "!". In addition, the
121 EMACS Manual for TWENEX Users
PURIFY library, which contains many things useful for processing
library sources (including the commands to compile them), is
loaded. M-' and M-" are connected to functions ^R Forward TECO
Conditional and ^R Backward TECO Conditional which move forward
and backward over balanced TECO conditionals. In TECO mode on a
terminal with a Meta key, it may be useful to set the TECO flag
FS CTLMTA$ which causes Control-Meta commands to insert Control
characters. See section 22.5 [FS Flags], page 143.
CLU mode is for editing CLU code. It is similar to LISP mode,
but it treats the statement nesting tokens like the appropriate
sorts of parentheses. It is in the library called CLU. See the
file INFO:ECLU.INFO.
PL1 mode is for editing PL1 code, and causes Tab to indent an
amount based on the previous statement type. The body of the
implementation of PL1 mode is in the library PL1, which is loaded
automatically when necessary. See the file INFO:EPL1.INFO.
PASCAL mode is similar to PL1 mode, for PASCAL. It is in the
library called PASCAL. See the file INFO:EPASC.INFO.
FORTRAN mode is implemented by the FORTRAN library. See the
file INFO:EFORTRAN.INFO.
There are major modes for many other languages, but
documentation for them except that in the libraries themselves.
Any volunteers to write some? Meanwhile, you can look at the
documentation in the libraries. See section 22.2 [Libraries],
page 136.
122 EMACS Manual for TWENEX Users
CHAPTER TWENTY-ONE
THE TAGS PACKAGE.
The TAGS package remembers the locations of the function
definitions in a file and enables you to go directly to the
definition of any function, without searching the whole file.
The functions of several files that make up one program can all
be remembered together if you wish; then the TAGS package will
automatically select the appropriate file as well.
21.1 How to Make a Tag Table for a Program
To use the TAGS package, you must create a tag table for the
source file or files in your package. Normally, the tag table
does not reside in any of those files, but in a separate tag
table file which contains the names of the text files which it
describes. Tag table files are generated by the TAGS program.
The same program can be used to update the tag table if it
becomes very far out of date (slight inaccuracies do not matter).
Tag tables for INFO files work differently; the INFO file
contains its own tag table, which describes only that file. See
section 21.8 [INFO tag tables], page 132, for how to deal with
them.
To make a tag table file for some source file or group of
source files, you need to run the TAGS program which should
reside somewhere on SYS: or, if not there, <EMACS>. When you run
it, it will ask you for an output file. This is the file that
will contain the tags of the source files. Usually you would
specify something like FOO.TAGS if the source file is FOO.BAR, so
that they will be grouped together in directory listings. For
example:
@TAGS ; Runs the TAGS program
Output tags file:FOO.TAGS ; Specify output file
Type filenames, end with blank line
*
After you specify the output file, TAGS asks you for the input
files. You can give a number of files separated by commas, with
wild cards allowed. Once you have done this, TAGS scans each
123 EMACS Manual for TWENEX Users
input file and writes the data into the output file. For
example:
Type filenames, end with blank line
*FOO.MAC
FOO.MAC.1 - 784. functions found.
*
FOO.TAGS.1 - 784. functions in 1. files.
@
Once each file is scanned, a message is typed indicating the
number of "functions" (labels, procedures, routines etc.) that
were actually found. Once it is through processing your input
files, you can type another line full of input file names. If
there are no more, type just a Return. The empty line of input
tells TAGS to finish up and close the output file, which is now a
usable tag table file.
The following languages are recognized by the TAGS program
according to the extension of the input filename specified:
Language Presumed extension
BASIC B20
BLISS BLI
BLISS11 B11
FAIL FAI
FORTRAN FOR
H316 H16
INTERLISP ILSP
MACLISP LSP
MACN11 M11
MACRO MAC
MIDAS MID
MORTRAN MOR
NONE ZZZ
PAL11X P11
PASCAL PAS
PCL PCL
PUB DFS
PUBTEXT PUB
SAIL SAI
TECO EMACS or TEC
TEXT HLP, MEM or TXT
If the extension you give is not recognizable, TAGS asks you to
124 EMACS Manual for TWENEX Users
specify the complete language name as above. Languages NONE and
TEXT just include the file in the tag table, for use with Tags
Query Replace and such; files with those languages contain no
tags.
Once a tag table file exists, you must updated it if you add
new tags to the source files, or change them grossly. You can do
this by invoking TAGS with the tab table filename as an argument:
@TAGS FOO.TAGS
TAGS finds the names and languages of the source files by reading
the old tag table.
The recently developed TAGGEN library is contains the function
Generate Tags File for updating a tag table. This library may
eventually replace the TAGS program, being easier to customize.
In the mean time, you are encouraged to try it out. Refer to its
self-documentation for more information.
21.2 How to Tell EMACS You Want to Use TAGS
Before you can use the TAGS package to find a tag, you must
tell EMACS the name of the tag table file you want to use. This
is done with the command
M-X Visit Tag Table$ <filenames> <cr>
The extension of "TAGS" need not be mentioned.
EMACS can only know about one tag table file at a time, so
doing a second M-X Visit Tag Table causes the first one to be
forgotten (or written back if you have added definitions to it).
Giving M-X Visit Tag Table a nonzero numeric argument, as in
C-U 1 M-X Visit Tag Table$ <filenames> <cr>
has the additional effect of setting the variable Tags Find File
125 EMACS Manual for TWENEX Users
nonzero, which causes the TAGS package to use Find File rather
than Visit File when it needs to switch files. This causes all
the files to remain resident in the EMACS, in different buffers.
In the default mode, visiting a tag in a different file read it
in on top of the old file, in the same buffer (but it offers to
write out changes if there are any). Warning: you can easily run
out of address space by making too many buffers, this way. See
section 24.2.5 [Storage Exhausted], page 163. .
Visit Tag Table is essentially equivalent to selecting the
buffer *TAGS* and visiting the tag table file in that buffer,
then returning to the previously selected buffer. Afterwards,
M-X List Buffers will show the buffer *TAGS* visiting that file.
The only difference is that Visit Tag Table causes the TAGS
library to be loaded.
21.3 Jumping to a Tag
To jump to the definition of a function, use the command
Meta-Period <tag name> <cr>. You will go straight to the
definition of the tag. If the definition is in a different file
then TAGS visits that file. If it is in the same file, TAGS
leaves the mark behind and prints "^@" in the echo area.
You do not need to type the complete name of the function to be
found; any substring will do. But this implies that sometimes
you won't get the function you intended. When that happens, C-U
Meta-Period will find the "next" function matching what you typed
(next, in the order of listing in the tag table). Thus, if you
want to find the definition of X-SET-TYPE-1 and you specify just
TYPE-1, you might find X-READ-TYPE-1 instead. You could then
type C-U Meta-Period until you reach X-SET-TYPE-1.
If you want to make sure you reach a precise function the first
time, you should just include a character of context before and
after its name. Thus, in a Lisp program, put a space before and
after the function name. In a MIDAS program, put a linefeed
before it and a colon after.
If Meta-Period is used before M-X Visit Tag Table has been
done, it asks for the name of a tag table file. After you type
this name and a <cr>, you type the name of the tag as usual. If
the variable Tag Table Filenames exists, it specifies the
defaults for the filename.
Typing an Altmode as the first character of the argument to
126 EMACS Manual for TWENEX Users
Meta-Period allows you to switch to a new tag table. It prompts
for the tag table filenames, then prompts again for the tag.
21.4 Other Operations on Tag Tables
21.4.1 Adding a New Function to a Tag Table
When you define a new function, its location doesn't go in the
tag table automatically. That's because EMACS can't tell that
you have defined a function unless you tell it by invoking the
function ^R Add Tag. Since the operation of adding a tag to a
tag table has proved not to be very necessary, this function no
longer placed on any character, by default. You can invoke with
M-X or connect it to a character if you like. For this section,
let's assume you have placed it on C-X Period.
When you type the command C-X Period, the pointer should be on
the line that introduces the function definition, after the
function name and the punctuation that ends it. Thus, in a Lisp
program, you might type "(DEFUN FOO " (note the space after FOO)
and then type the C-X Period. In a MIDAS program, you might give
the C-X Period after typing "FOO:". In a TECO program in EMACS
format, you might type C-X Period after "!Set New Foo:!".
^R Add Tag modifies only the copy of the tag table loaded into
EMACS. To modify the tag table file itself, you must cause it to
be saved. M-X Save All Files is the easiest way to do this.
Although local modifications to a file do not degrade the
efficiency of the TAGS package or require that the tag table be
updated with TAGS, moving a function a great distance make it
much slower to find that function. In this case, you can "add"
the function to the tag table with C-X Period to give the table
its new location. Or you can just run TAGS again to update
everything, as is usually done.
21.4.2 How to Process All the Files in a Tag Table
The TAGS package contains a function M-X Next File which
visits, one by one, all the files described by the selected tag
table. This is useful when there is something to be done to all
of the files in the package. To start off the sequence, do C-U 1
M-X Next File, which visits the first file. When you are
127 EMACS Manual for TWENEX Users
finished operating on one file, do M-X Next File (no argument) to
see the next. When all the files have been processed, M-X Next
File gives an error.
The files of the package are visited in the order that they are
mentioned in the tag table, and the current place in the sequence
is remembered by the pointer in the buffer *TAGS* which holds the
tag table. Thus, if you visit a tag in a different file in the
middle of a M-X Next File sequence, you will screw it up unless
you return to the proper file again by visiting a tag (or go into
the buffer *TAGS* and reset the pointer). However, visiting any
other files directly, not using TAGS, does not interfere with the
sequence, and the next M-X Next File will go just where it would
have gone.
Next File is also useful as a subroutine in functions that wish
to perform an automatic transformation (such as a Query Replace)
on each file. Such functions should call Next File with a
precomma argument as in 1,M(M.M Next File$) or 1,1M(M.M Next
File$). The precomma argument tells Next File to return 0
instead of giving an error when there are no more files to
process. Normally, it returns -1.
Here is an example of TECO code to do a Query Replace on all of
the files listed in the visited tag table:
1M(M.M Next File$)
< M(M.M Query Replace$)FOO$BAR$
1,M(M.M Next File$);>
Tags Search and Tags Query Replace (see below) both work using
Next File.
21.4.3 Multi-File Searches and Replacements
The TAGS package contains a function Tags Search which will
search through all of the files listed in the visited tag table
in the order they are listed. Do
M-X Tags Search$<string><cr>
to find every occurrence of <string>. <string> is a TECO search
string in which special TECO search characters such as ^O, ^X,
128 EMACS Manual for TWENEX Users
^N, ^B, and ^Q are allowed. See section 19.3 [TECO Search
Strings], page 101.
When M-X Tags Search reaches the end of the buffer, it visits
the next file automatically, typing its name in the echo area.
As soon as M-X Tags Search finds one occurrence, it returns. But
it defines the command Control-Period to resume the search from
wherever point is.
M-X Tags Query Replace does a Query Replace over all the files
in a tag table. Like M-X Tags Search, it sets Control-. up to be
a command to continue the Query Replace, in case you wish to
exit, do some editing, and then resume scanning.
With Tags Find File set nonzero, Tags Search or Tags Query
Replace could easily require more buffers than EMACS has room
for. To prevent such a problem, they do not always put each file
in a separate buffer. If Tags Search or Tags Query Replace wants
to search a file which is already visited in some buffer, it uses
the copy in that buffer. But if the file is not present, and
Tags Find File is 1, then instead of visiting it in its own
buffer, they visit it in a buffer named *Tags Search*. So at
most one new buffer is created. If Tags Find File is 2, a new
buffer is created for each file.
The library MQREPL enables you to use Next File to repeat a
sequence of many Query Replace commands over a set of files,
performing all the replacements on one file at a time.
21.4.4 Miscellaneous Applications of Tags
M-X List Tags$<file><cr> lists all the tags in the specified
file. Actually, all the files in the tag table whose names
contain the string <file> are listed.
M-X Tags Apropos$<pat><cr> lists all known tags whose names
contain <pat>.
M-X Tags File List inserts in the buffer a list of the files
known in the visited tag table.
M-X Tags Rescan runs TAGS over the visited tag table and
revisits it. This is the most convenient way to update the tag
table.
M-X View Arglist$<tag><cr> lets you look briefly at the line on
which a tag is defined, and at the lines of comments which
129 EMACS Manual for TWENEX Users
precede the definition. This is a good way to find out what
arguments a function needs. The file is always loaded into a
separate buffer, when this command is used.
M-X What Tag? tells you which function's definition you are in.
It looks through the tag table for the tag which most nearly
precedes point.
21.5 What Constitutes a Tag
In MacLisp code, a function definition must start with an "("
at the beginning of a line, followed immediately with an atom
which starts with "DEF" (and does not start with "DEFP"), or
which starts with "MACRO", or which starts with "ENDF". The next
atom on the line is the name of the tag. If there is no second
atom on the line, there is no tag.
In MIDAS code, a tag is any symbol that occurs at the beginning
of a line and is terminated with a colon or an equal sign. MIDAS
mode is good for MACRO-10 also.
FAIL code is like MIDAS code, except that one or two ^A's or
"^"'s are allowed before a tag, spaces are allowed between the
tag name and the colon or equal sign, and _ is recognized as
equivalent to =.
PALX code is like MIDAS code, except that spaces are allowed
between a tag and the following colon or equals, and local tags
such as "10$" are ignored.
In TECO code, a tag starts with an "!" and ends with a ":!".
There may be any number of tags on a line, but the first one must
start at the beginning of a line.
In BLISS and BLISS11 code, a tag starts with "GLOBAL" followed
by "ROUTINE" or "FUNCTION", or just a "ROUTINE" or "FUNCTION",
and ends with "=". The "FUNCTION" identifier is only relevant in
BLISS-10.
In FORTRAN code, a tag starts with "SUBROUTINE", "FUNCTION", or
"PROGRAM" and ends with the end of the line.
In INTERLISP code, a tag starts with (DEFINEQ and ends where
the function ends. Nested functions are handled properly.
In INFO code, (e.g. files that are used for the INFO
130 EMACS Manual for TWENEX Users
documentation subsystem), a tag starts with "Node:" and ends at
the first ",".
In SAIL code, a tag starts with one of the following:
"SIMPLE", "RECURSIVE", "POINTER", "BOOLEAN", "INTEGER", "REAL",
"STRING", "INTERNAL" and is followed by "PROCEDURE" and ends with
the first ";".
In PASCAL code, a tag starts with either "PROCEDURE" or
"FUNCTION" and ends with the first ";".
21.6 Adding or Removing Source Files
A tag table file is a sequence of entries, one per file. Each
entry looks like
<filenames>
<count>,<language>
<data lines>
^
<filenames> are the fully defaulted names of the file,
<language> is one of the languages that TAGS knows how to
process, and <data lines> are the actual tag information
(described below). The CRLF after each ^ must be present. You
can omit both the last ^ and its CRLF together, however.
A tags table file is for the most part an ordinary ASCII file,
and any changes you make in it, including changes to the source
files' names, will do what they appear to do.
The one exception is that each entry contains a count, in
decimal, of the number of characters in it, including the ^ and
CRLF. If you edit the contents of an individual source file's
entry, and change its length, then the tag table is no good for
use in editing until the count is updated. This is usually done
by running TAGS over it. TAGS ignores the specified count and
always writes the correct count. If you are sure that the length
is unchanged, or if you change the count manually, then running
TAGS is not necessary, but you do so at your own risk.
Thus, if you are changing a source file's name, you should
simply change the name where it is present in the tag table, and
run TAGS over it if necessary.
131 EMACS Manual for TWENEX Users
To add a new source file, simply insert a dummy entry
containing the filename, the language, a count which can be zero
because TAGS will recompute it, and a ^. Then use TAGS to
update the tag table. The dummy will turn into a real entry.
You can delete a source file from a tag table by deleting its
entire entry. Since the counts of the remaining entries are
still valid, you need not run TAGS over the file again. You can
also change the order of the entries without doing any harm. The
order of the entries matters if there are tags which appear in
more than one source file.
You can edit everything else in the tag table too, if you want
to. You might want to change a language name once in a while,
but I doubt you will frequently want to add or remove tags,
especially since that would all be undone by the next use of
TAGS!
21.7 How a Tag Is Described in the Tag Table
A tag table file consists of one or more entries in succession.
Each entry lists the tags of one source file, and has the overall
format described in the previous section, containing zero or more
lines describing tags. Here we give the format of each of those
lines.
Starting with the third line of the tag table entry, each line
describes a tag. It starts with a copy of the beginning of the
line that the tag is defined on, up through the tag name and its
terminating punctuation. Then there is a rubout, followed by the
character position in decimal of the place in the line where
copying stopped. For example, if a line in a MIDAS program
starts with "FOO:" and the colon is at position 602 in the file,
then the line describing it in the tag table would be
FOO:<rubout>603
One line can describe several tags, if they are defined on the
same line; in fact, in that case, they must be on the same line
in the tag table, since it must contain everything before the tag
name on its definition line. For example,
!Foo:! !Bar:!
132 EMACS Manual for TWENEX Users
in a file of TECO code followed by character number 500 of the
file would turn into
!Foo:! !Bar:!<rubout>500
EMACS will be able to use that line to find either FOO or BAR.
TAGS knows how to create such things only for TECO files, at the
moment. They aren't necessary in Lisp or MACSYMA files. In
MIDAS files, TAGS simply ignores all but the first tag on a line.
21.8 Tag Tables for INFO Structured Documentation Files
INFO files are divided up into nodes, which the INFO program
must search for. Tag tables for these files are designed to make
the INFO program run faster. Unlike a normal tag table, the tag
table for an INFO file resides in that file and describes only
that file. This is so that INFO, when visiting a file, can
automatically use its tag table if it has one. INFO uses the tag
tables of INFO files itself, without going through the normal
TAGS package, which has no knowledge of INFO file tag tables.
Thus, INFO file tag tables and normal ones resemble each other
only in their appearance and purpose. In use, they are
unrelated.
To create a tag table in an INFO file, you must first put in a
skeleton. This skeleton must be very close to the end of the
file (at most 8 lines may follow it, or INFO will not notice it),
and it must start on the line following a ^ or ^ ^L which ends a
node. Its format is as follows:
^ ^L
Tag Table:
^
End Tag Table
No nodes may follow the tag table, or ITAGS will not put them
in it. ITAGS is one pass and after writing the tag table into
the file it copies the rest of the input file with no processing.
To turn the skeleton into the real thing, or to update the tag
table, run the ITAGS program.
133 EMACS Manual for TWENEX Users
@ITAGS <info file name>
Once the tag table is constructed, INFO will automatically make
use of it. A tag in an INFO file is just a node; whatever
follows "Node:" on a line whose predecessor contains a "^" is
taken to be a tag. The character which terminates the node name,
which may be a comma, tab, or CRLF, is not included in the tag
table. Instead, the rubout comes right after the tag name. This
is to make it easy for INFO to demand an exact match on node
names, rather than the substring match which the TAGS package
normally uses.
Tag tables in INFO files must be kept close to up to date.
INFO will not find the node if its start has moved more than 1000
characters before the position listed in the tag table. For best
results, you should update an INFO file's tag table every time
you modify more than a few characters of it.
134 EMACS Manual for TWENEX Users
CHAPTER TWENTY-TWO
SIMPLE CUSTOMIZATION
In this chapter we describe the many simple ways of customizing
EMACS without knowing how to write TECO programs.
One form of customization, reconnection of commands to
functions, was discussed above in the explanation of how M-X
commands work. See section 5.2.3 [Reconnecting Commands],
page 25.
22.1 Minor Modes
Minor modes are options which you can use or not. For example,
Auto Fill mode is a minor mode in which Spaces break lines
between words as you type. All the minor modes are independent
of each other and of the selected major mode. Most minor modes
say in the mode line when they are on; for example, "Fill" in the
mode line means that Auto Fill mode is on.
Each minor mode is the name of the function that can be used to
turn it on or off. With no argument, the function turns the mode
on if it was off and off if it was on. This is known as
toggling. A positive argument always turns the mode on, and an
explicit zero argument or a negative argument always turns it
off. All the minor mode functions are suitable for connecting to
single or double character commands if you want to enter and exit
a minor mode frequently.
Auto Fill mode allows you to type text endlessly without
worrying about the width of your screen. Line separators are be
inserted where needed to prevent lines from becoming too long.
See section 11.4 [Filling], page 59.
Auto Save mode protects you against system crashes by
periodically saving the file you are visiting. Whenever you
visit a file, auto saving is enabled if Auto Save Default is
nonzero; in addition, M-X Auto Save allows you to turn auto
saving on or off in a given buffer at any time. See section 13.3
[Auto Save], page 74.
Atom Word mode causes the word-moving commands, in Lisp mode,
to move over Lisp atoms instead of words. Some people like this,
and others don't. In any case, the s-expression motion commands
135 EMACS Manual for TWENEX Users
can be used to move over atoms. If you like to use segmented
atom names like FOOBAR-READ-IN-NEXT-INPUT-SOURCE-TO-READ, then
you might prefer not to use Atom Word mode, so that you can use
M-F to move over just part of the atom, or C-M-F to move over the
whole atom.
Overwrite mode causes ordinary printing characters to replace
existing text instead of shoving it over. It is good for editing
pictures. For example, if the point is in front of the B in
FOOBAR, then in Overwrite mode typing a G changes it to FOOGAR,
instead of making it FOOGBAR as usual. Also, Rubout is changed
to turn the previous character into a space instead of deleting
it.
SAIL Character mode causes ASCII control characters in text to
display as themselves, with no conversion. This assumes that the
terminal uses codes 200 and above for cursor motion and erasure,
and can display all the ASCII control characters as graphic
characters. The command Control-^B runs this command.
Control-^B is a character which can generally only be typed on
terminals which can display the ASCII control characters in the
appropriate fashion.
Word Abbrev mode allows you to define abbreviations that
automatically expand as you type them. For example, "wam" might
expand to "word abbrev mode". The abbreviations may depend on
the major (e.g. Lisp, Text, ...) mode you are currently in. To
use this, you must load the WORDAB library. See section 25
[Wordab], page 174.
Indent Tabs mode controls whether indentation commands use tabs
and spaces or just spaces to indent with. Usually they use both,
but you might want to use only spaces in a file to be processed
by a program or system which doesn't ignore tabs, or for a file
to be shipped to a system like Multics on which tab stops are not
every 8 characters.
Most minor modes are actually controlled by variables. The
mode is on if the variable is nonzero. Setting the minor mode
with a command works by changing the variable. This means that
you can turn the modes on or off with Edit Options, or make their
values local to a buffer. See section 22.3 [Variables],
page 138.
You could also put a minor mode in the local modes list of a
file, but that is usually bad practice. This is because usually
the preference for a minor mode is usually a matter of individual
style rather than a property of the file per se. To make this
more concrete, it is a property of a file that it be filled to a
136 EMACS Manual for TWENEX Users
certain column, but use of Auto Fill mode to accomplish that is a
matter of taste. So it would be good practice for the file to
specify the value of Fill Column, but bad practice for the file
to specify the value of Auto Fill Mode.
If you find yourself constantly tempted to turn on Auto Fill
mode in local modes lists, what you probably really want is to
have Auto Fill mode on whenever you are in Text mode. This can
be accomplished with the following code in an EMACS.VARS file:
Text Mode Hook: 1M.LAuto Fill Mode$
Suffice it to explain that this is TECO code to be executed
whenever Text mode is entered, which makes the variable Auto Fill
Mode local to the buffer with local value 1.
22.2 Libraries of Commands
All EMACS functions, including the ones described in this
document, reside in libraries. A function is not accessible
unless the library that contains it is loaded. Every EMACS
starts out with two libraries loaded: the EMACS library, and the
TWENEX library. These contain all of the functions described in
this document, except those explicitly stated to be elsewhere.
Other libraries are provided with EMACS, and can be loaded
automatically or on request to make their functions available.
See section [Catalogue], page 236, for a list of them.
To load a library, say M-X Load Library$<libname><cr>. The
library is found, either on your own directory or whichever one
you specify, or on the EMACS directory, and loaded in. All the
functions in the library are then available for use. Whenever
you use M-X, the function name you specify is looked up in each
of the libraries which you have loaded, more recently loaded
libraries first. The first definition found is the one that is
used.
For example, if you load the PICTURE library, you can then use
M-X Edit Picture to run the Edit Picture function which exists in
that library.
In addition to making functions accessible to M-X, the library
may connect some of them to command characters. This is done by
the library's & Setup function (See the file INFO:CONV.INFO, node
137 EMACS Manual for TWENEX Users
Lib.). If you give Load Library an argument, the setup is not
done.
You can also load a library temporarily, just long enough to
use one of the functions in it. This avoids taking up space
permanently with the library. Do this with the function Run
Library, as in M-X Run$<libname>$<function name><cr>. The
library <libname> is loaded in, and <function name> executed.
Then the library is removed from the EMACS job. You can load it
in again later.
M-X List Loaded Libraries types the names and brief
descriptions of all the libraries loaded, last loaded first. The
last one listed is always the EMACS library.
You can get a brief description of all the functions in a
library with M-X List Library$<libname><cr>, whether the library
is loaded or not. This is a good way to begin to find out what
is in a library that has no INFO documentation. Continue by
loading the library and using Help D to inquire further about
whichever functions looked interesting.
The function Kill Libraries can be used to discard libraries
loaded with Load Library. (Libraries used with Run Library are
discarded automatically). However, of all the libraries
presently loaded, only the most recently loaded one can be
discarded. Kill Libraries offers to kill each loaded library,
most recently loaded first. It keeps killing libraries until you
say to keep one library. Then it returns, because the remaining
libraries cannot be deleted if that library is kept.
Libraries are loaded automatically in the course of executing
certain functions. You will not normally notice this. For
example, the TAGS library is automatically loaded in whenever you
use M-. or Visit Tag Table for the first time. This process is
known as autoloading. It is used to make the functions in the
TAGS library available without the user's having to know to load
the library himself, while not taking up space in EMACSes of
people who aren't using them. It works by simply calling Load
Library on the library known to be needed. Another kind of
autoloading loads a library temporarily, the way Run Library
does. This is done when you use the DIRED function, for example,
since the DIRED library is not needed after the DIRED function
returns. (This does not use Run Library; it uses M.A, which is
what Run Library uses).
You can make your own libraries, which you and other people can
then use, if you know how to write TECO code. See the file
INFO:CONV.INFO, node Lib, for more details.
138 EMACS Manual for TWENEX Users
22.3 Variables
A variable is a name which is associated with a value, either a
number or a string. EMACS uses many variables internally, and
has others whose purpose is to be set by the user for
customization. (They may also be set automatically by major
modes.) One example of such a variable is the Fill Column
variable, which specifies the position of the right margin (in
characters from the left margin) to be used by the fill and
justify commands.
The easiest way for the beginner to set a named variable is to
use the function Edit Options. This shows you a list of selected
variables which you are likely to want to change, together with
their values, and lets you edit them with the normal editing
commands in a recursive editing level. Don't make any changes in
the names, though! Just change the values. Digits with maybe a
minus sign stand for a numeric value of the variable, while
string values are enclosed in doublequotes. Each option is
followed by a comment which says what the option is for. Type
the Help character for more information on the format used.
When you are finished, exit Edit Options using C-M-Z and the
changes will take effect. If you decide not to make the changes,
C-] gets out without redefining the options. See section 6.2
[Recursive Editing Levels], page 28.
If you give Edit Options a string argument, it shows you only
the options whose names include the string. For example, M-X
Edit Options$Fill<cr> shows only the options that have "Fill" in
their names. This is much more convenient, if you know what you
plan to do.
However, Edit Options can be used only to set a variable which
already exists, and is marked as an option. Some commands refer
to variables which do not exist in the initial environment. Such
commands always use a default value if the variable does not
exist. In these cases you must create the variable yourself if
you wish to use it to alter the behavior of the command. Use M-X
Set Variable for this. You can set the variable to a numeric
value by doing
C-U <number> M-X Set Variable$<varname><cr>
or to a string by doing
139 EMACS Manual for TWENEX Users
M-X Set Variable$<varname>$<string><cr>
In fact, you can use Set Variable to set any variable, whether
it exists already or not. For existing variables, it does not
matter whether you use upper case or lower case letters, and you
are allowed to abbreviate the name as long as the abbreviation is
unique. If the variable might not exist yet, you must type the
name in full. While either upper case or lower case will still
work, you are encouraged to capitalize each word of the name for
aesthetic reasons since EMACS stores the name as you give it.
To examine the value of a single variable, do
M-X View Variable$<varname><cr>
To print a complete list of all variables, do M-X List
Variables. List Variables with a string argument shows only the
variables whose names or values contain that string (like the
function Apropos). M-X Describe can be given a variable's name
instead of a function's name; it prints the variable's value and
its documentation, if it has any.
If you want to set a variable a particular way each time you
use EMACS, you can use an init file or an EMACS.VARS file. This
is one of the main ways of customizing EMACS for yourself. An
init file is a file of TECO code to be executed when you start
EMACS up. They are very general, but writing one is a black art.
You might be able to get an expert to do it for you, or modify a
copy of someone else's. See the file INFO:CONV.INFO, node Init,
for details. An EMACS.VARS file is a much simpler thing which
you can do yourself. See section 22.6 [EMACS.VARS files],
page 144.
You can also set a variable with the TECO command
<value> M.V <varname>$
or
:I*<string>$ M.V <varname>$
This is useful in init files.
140 EMACS Manual for TWENEX Users
Any variable can be made local to a specific buffer with the
TECO command M.L<variable name>$. Thus, if you want the comment
column to be column 50 in one buffer, whereas you usually like
40, then in the one buffer do M.LComment Column$ using the
minibuffer. Then, you can do 50U$Comment Column$ in that buffer
and other buffers will not be affected. This is how local modes
lists in files work. M-X List Redefinitions describes the local
variables of the selected buffer in a verbose fashion.
Most local variables are killed if you change major modes.
Their global values come back. They are therefore called mode
locals. There are also permanent locals which are not killed by
changing modes; use 2,M.L to create one. Permanent locals are
used by things like Auto Save mode to keep internal information
about the buffer, whereas mode locals are used for customizations
intended only for one buffer. See the file INFO:CONV.INFO, node
Variables, for information on how local variables work, and
additional related features.
Local values of variables can be specified by the file being
edited. For example, if a certain file ought to have a 50 column
width, it can specify a value of 50 for the variable Fill Column.
Then Fill Column will have the value 50 whenever this file is
edited, by anyone. Editing other files is not affected. See
section 22.7 [Locals], page 151, for how to do this.
22.4 The Syntax Table
All the EMACS commands which parse words or balance parentheses
are controlled by the syntax table. Each ASCII character has a
word syntax and a Lisp syntax. By changing the word syntax, you
can control whether a character is considered a word delimiter or
part of a word. By changing the Lisp syntax, you can control
which characters are parentheses, which ones are parts of
symbols, which ones are prefix operators, and which ones are just
ignored when parsing s-expressions.
The syntax table is actually a string which is 128*5 characters
long. Each group of 5 consecutive characters of the syntax table
describe one ASCII character's syntax; but only the first three
of each group are used. To edit the syntax table, use M-X Edit
Syntax Table. But before we describe this command, let's talk
about the syntax of the syntax table itself.
The first character in each group of five sets the word syntax.
This can be either "A" or a space. "A" signifies an alphabetic
character, whereas a space signifies a separator character.
141 EMACS Manual for TWENEX Users
The second character in each group is the Lisp syntax. It has
many possible values:
A an alphabetic character
Space a whitespace or nonsignificant character
( an open parenthesis
) a close parenthesis
; a comment starter
^M a comment ender
| a string quote
/ a character quote
' a prefix character
When a character has the syntax of an open parenthesis, that
means that the character is taken to be the beginning of a
parenthesized grouping when expressions are being parsed. Thus,
any number of different expression-starting characters can be
handled.
The syntax of "prefix character" means that the character
becomes part of whatever object follows it, whether symbol or
list, and can also be in the middle of a symbol, but does not
constitute anything by itself if surrounded by whitespace.
A character quote character causes itself and the next
character to be treated as alphabetic.
A string quote is one which matches in pairs. All characters
inside a pair of string quotes are treated as alphabetic except
for the character quote, which retains its significance, and can
be used to force a string quote or character quote into a string.
A comment starter is taken to start a comment, which ends at
the next comment ender, suppressing the normal syntax of all
characters between. Only the indentation commands give special
treatment to these two syntax codes; all other commands consider
them the same as Space (nonsignificant character). The commands
specifically for comments use the variables Comment Start,
Comment Begin, and Comment End to detect comments. This is so
that the comment delimiters can be multi-character strings.
The third character in each group controls automatic
parenthesis matching display. It is defined only for characters
which have the Lisp syntax of close parentheses, and for them it
should contain the appropriate matching open parenthesis
character (or a space). If you insert a close parenthesis
character which is matched by the wrong kind of open parenthesis
142 EMACS Manual for TWENEX Users
character, it rings the bell. If the third syntax table
character of a close parenthesis is a space, any open parenthesis
is allowed to match it.
The fourth and fifth characters in each group should always be
spaces, for now. They are not used. The reason they exist is so
that word-wise indexing can be used on the PDP-10 to access the
syntax of a character given in an accumulator.
Edit Syntax Table displays the syntax table broken up into
labeled five-character groups. You can see easily what the
syntax of any character is. You are not editing the table
immediately, however. Instead, you are asked for the character
whose syntax you wish to edit. After typing it, you are
positioned at that character's five-character group. Overwrite
mode is on, so you can simply type the desired syntax entries,
which replace the old ones. You can also do arbitrary editing,
but be careful not to change the position of anything in the
buffer. When you exit the recursive editing level, you are asked
for another character to position to. An Altmode at this point
exits and makes the changes. A C-] at any time aborts the
operation.
Many major modes alter the syntax table. Each such major mode
creates its own syntax table once and reselects the same string
whenever the mode is selected, in any buffer. Thus, all buffers
in Text mode at any time use the same syntax table. This is
important because if you ever change the syntax table of one
buffer that is in Text mode, you change them all. It is possible
to give one buffer a local copy with a TECO program:
MM Make Local Q-Register$..D$W :G..DU..D
The syntax tables belonging to the major modes are not
preinitialized in EMACS; they are created when the major mode is
invoked for the first time, by copying the default one and making
specific changes. Thus, any other changes you have made in the
default (Fundamental mode) syntax table at the beginning
propagate into all modes' syntax tables unless those modes
specifically override them.
After a major mode has created its own syntax table, that table
is stored in the variable <modename> ..D. This makes a different
variable for each major mode, since the mode name is part of the
variable name. Further use of the major mode gets the syntax
table from that variable. If you create the variable yourself
before the first use of the major mode, the value you put there
will be used.
143 EMACS Manual for TWENEX Users
TECO programs and init files can most easily change the syntax
table with the function & Alter ..D (look at its documentation).
The syntax table is kept in the q-register named ..D, which
explains that name.
22.5 FS Flags
FS flags are variables defined and implemented by TECO below
the level of EMACS. Some of them are options which control the
behavior of parts of TECO such as the display processor. Some of
them control the execution of TECO programs; you are not likely
to want to change these. Others simply report information from
inside TECO. The list of FS flags is fixed when TECO is
assembled and each one exists for a specific purpose.
FS flags are used mostly by the TECO programmer, but some of
them are of interest to the EMACS user doing minor customization.
For example, FS ECHO LINES$ is the number of lines in the echo
area. By setting this flag you can make the echo area bigger or
smaller. Many FS flags useful for customization are controlled
by EMACS variables; instead of setting the FS flag, you can set
the EMACS variable like any other. Setting the variable
automatically sets the FS flag as well. Here is a list of such
variables which control flags:
Auto Save Interval FS ^R MDLY$
Bottom Display Margin FS %BOTTOM$
Case Search FS BOTHCASE$
Cursor Centering Point FS %CENTER$
Display Mode Line Inverse FS INVMOD$
Display Overprinting FS ^H PRINT$ and FS ^M PRINT$
Echo Area Height FS ECHO LINES$
End of Buffer Display Margin FS %END$
Error Messages in Echo Area FS ECHO ERRORS$
Fill Column FS ADLINE$
Overwrite Mode FS ^R REPLACE$
SAIL Character Mode FS SAIL$
System Output Holding FS TT PAGE$
Top Display Margin FS %TOP$
Setting one of these variables causes the flag to be set, but not
vice versa. To avoid confusion, always set these flags using the
144 EMACS Manual for TWENEX Users
associated variables, never directly, unless you are changing
them temporarily during one command and the user will not have
the opportunity to notice the confusion.
To get the value of an FS flag, use the TECO command FS
followed by the name of the flag, terminated by an Altmode.
Spaces in the name of the flag are completely ignored, and case
does not matter. Thus, FS Tab Width$= executed in the minibuffer
prints the number of columns between tab stops used for display
of tab characters. See section 23 [Minibuffer], page 157. This
works only for flags with numeric values. The easiest way to
examine a flag's value with EMACS commands is
C-M-X View Variable<cr> (FS Tab Width$)<cr>
This works for both numeric and string values.
To set the flag, give the FS command a numeric argument (which
must be a string pointer, if the intended value is a string).
For example, in the minibuffer or an init file, do
10FS Tab Width$
Be warned that FS always returns a value, so put a CRLF after it
to discard the value if necessary.
It is possible to make an FS flag's value local to a buffer.
See the file INFO:CONV.INFO, node Vars.
The documentation of individual FS flags can be found through
Help T. Help T FS Echo Lines<cr> prints the description of FS
ECHO LINES$. Spaces are not significant in Help T either. A
list of just the names of all FS flags is printed by the function
List TECO FS Flags, found in the library PURIFY.
22.6 Init Files and EMACS.VARS Files
EMACS is designed to be customizable; each user can rearrange
things to suit his taste. Simple customizations are primarily of
two types: moving functions from one character to another, and
setting variables which functions refer to so as to direct their
actions. Beyond this, extensions can involve redefining existing
145 EMACS Manual for TWENEX Users
functions, or writing entirely new functions and creating
sharable libraries of them.
The most general way to customize is to write an init file, a
TECO program which is executed whenever you start EMACS. The
init file is found by looking for a particular filename, <your
directory>EMACS.INIT. This method is general because the program
can do anything. It can ask you questions and do things, rather
than just setting up commands for later. However, TECO code is
arcane, and only a few people learn how to write it. If you need
an init file and don't feel up to learning to write TECO code,
ask a local expert to do it for you. See the file
INFO:CONV.INFO, for more about init files.
However, simple customizations can be done in a simple way with
an EMACS.VARS file. Such a file serves the same sort of purpose
as an init file, but instead of TECO code, it contains just a
list of variables and values. Each line of the EMACS.VARS file
names one variable or one command character and says how to
redefine it. Empty lines, and lines starting with spaces or
tabs, are ignored. They can be used as comments. Your
EMACS.VARS file is found by its filename, as an init file is, but
it should be called EMACS.VARS instead of EMACS.INIT. You can
have both an init file and an EMACS.VARS file if you want, as
long as your init file calls the default init file, since that is
what processes the EMACS.VARS file.
To set a variable, include in the EMACS.VARS file a line
containing the name of the variable, a colon, and the value. A
numeric value is represented by the number. A string value is
enclosed in double quotes. To include a double quote or a ^]
character in the value of the string, precede it with a ^] to
quote it. You can also simply give the string value, with no
quotes, as long as it is not ambiguous (does not consist of
digits or start with a double quote); however, in this case, any
spaces following the colon become part of the value of the
variable. They are not ignored. Examples:
Comment Column: 70
Comment Start: ";"
MM Foo:FTFOO$
The last line defines a variable named MM Foo, which has the
effect of defining a function named Foo with the specified value
as its definition.
To redefine a command character is a little more complicated.
146 EMACS Manual for TWENEX Users
Instead of the name of a variable, give a ^R (control-R) followed
by the character. Since the general Control and Meta character
cannot be part of a file, all Control and Meta characters are
represented in a funny way: after the ^R put the residue of the
character after removing the Control and Meta, and before the ^R
put periods, one for Control, two for Meta, and three for
Control-Meta. Thus, C-D is represented by ".^RD" and C-M-; is
represented by "...^R;". Lower case characters such as C-a are
usually defined as "execute the definition of the upper case
equivalent". Therefore, by redefining the C-A command you also
change C-a; but if you redefine C-a, by saying ".^Ra" instead of
".^RA", you will not change C-A. So be careful about case.
Instead of the value of a variable, for command character
redefinition you must give a TECO expression that returns the
desired definition. This is to make it easy to use any function
whose name you know, because M.MFOO$ is an expression that
returns the definition of the function FOO. Do not enclose the
TECO expression in quotes. Example:
.^RK: M.M^R Kill Line$
would give C-K the definition that it normally has. Remember
that in names of functions the "^R" is actually a "^" and an R,
not a control-R. The space before the M.M is part of the
expression, but it is ignored when the expression is executed.
Some non-printing characters are a little tricky to redefine.
For example, you must know that Return, Linefeed, Tab, Backspace
and Altmode are not the same in TECO's command character set as
C-M, C-J, C-I, C-H and C-[, even though in ASCII they are
synonymous. By saying .^RJ you will redefine C-J; by saying ^R
followed by a Linefeed (which you must insert in the EMACS.VARS
file by typing C-Q Linefeed) you can redefine Linefeed.
Normally, C-J is defined as "execute the definition of Linefeed",
so you are better off redefining Linefeed.
You can also redefine a subcommand of a prefix character such
as C-X. For this, you have to know where the character's
dispatch table is stored. For C-X, the location of the dispatch
is called ".X"; you won't have any other prefix characters unless
you define them yourself. See the file INFO:CONV.INFO, node
Prefix. Knowing the location, you specify the subcommand by
writing :location(^^character). This looks silly, but it is a
TECO expression with the right meaning. For example, redefining
C-X C-S, the location is ".X" and the character is ^S, so we say
147 EMACS Manual for TWENEX Users
:.X(^^^S): M.M^R Save File$
This gives C-X C-S the definition that it normally has. The
subcommand character (^S in this case) can represent itself in
the EMACS.VARS file with no need for dots, because subcommand
characters are just ASCII, with no Meta allowed.
You can include arbitrary TECO code in an EMACS.VARS file by
writing a definition for "*". The definition is executed as a
TECO expression but the value is ignored. Thus, to load the
library FOO, do
*: MM Load Library$FOO$
Once the library is loaded, you can connect the functions in it
to commands as described above.
Please refrain from giving newcomers to EMACS a copy of your
own init file before they understand what it does. Everyone
prefers his own customizations, and there is always a tendency to
proselytize, but by the same token your protege's tastes may be
different from yours. If you offer him your customizations at
the time when he is ready to understand what difference they make
and decide for himself what he prefers, then you will help him
get what he wants. Tell him about each individual change you
made, and let him judge them one by one. There is no reason for
him to choose all or nothing.
22.6.1 EMACS.VARS File Examples
Here are some examples of how to do various useful things in an
EMACS.VARS file.
This causes new buffers to be created in Lisp mode:
Default Major Mode: "LISP"
This causes new buffers to have Auto Fill mode turned on:
Buffer Creation Hook: "1M.L Auto Fill Mode$"
148 EMACS Manual for TWENEX Users
This causes all Text mode buffers to have Auto Fill mode turned
on:
Text Mode Hook: "1M.L Auto Fill Mode$"
This causes C-M-G to be undefined by copying the definition of
C-| (which is undefined):
...^RG: Q.^R|
This redefines C-S to be a single character search command, and
M-S to be a non-incremental string search:
.^RS: M.M ^R Character Search$
..^RS: M.M ^R String Search$
This redefines C-X V to run View File:
:.X(^^V): M.M View File$
This makes M-M a prefix character and defines M-M W to mark a
word and M-M P to mark a paragraph. It stores the dispatch
vector for the prefix character in the variable M-M Dispatch.
..^RM: MM Make Prefix Character$^]$M-M Dispatch^]$$
Temp: "M-M $M-M Dispatch$
"
Append the line in Temp to Prefix Char List.
*: Q$Prefix Char List$[1 Q$Temp$[2 :i$Prefix Char List$^]1^]2$
:$M-M Dispatch$(^^W): M.M ^R Mark Word$
:$M-M Dispatch$(^^P): M.M ^R Mark Paragraph$
This loads the library LUNAR and defines C-Q to run a useful
function found in that library:
*: MM Load Library$LUNAR$
.^RQ: M.M ^R Various Quantities$
149 EMACS Manual for TWENEX Users
This causes Auto Save mode to save under the visited filenames:
Auto Save Visited File: 1
This causes TAGS to bring new files into separate buffers:
TAGS Find File: 1
This prevents the default init file from printing the message
"EMACS version nnn. Type ... for Help".
Inhibit Help Message: 1
This redefines the list syntax of "%" to be ";" for "comment
starter", and that of ";" to be "A" for "alphabetic":
*: 1mm& Alter ..D$%;;A$
22.6.2 Init File Examples
Here are the ways to do exactly the same things in an init
file. Don't put more than one of these TECO expressions on a
line, or the first may leave behind a value which will affect the
operation of the second!
This causes new buffers to be created in Lisp mode:
:I$Default Major Mode$LISP$
This causes new buffers to have Auto Fill mode turned on:
:I* 1M.L Auto Fill Mode^]$ $ M.VBuffer Creation Hook$
It is different because the variable does not already exist.
Note the ^] used for getting the Altmode into the value.
150 EMACS Manual for TWENEX Users
This causes all Text mode buffers to have Auto Fill mode turned
on:
:I* 1M.L Auto Fill Mode^]$ $ M.VText Mode Hook$
This causes C-M-G to be undefined by copying the definition of
C-| (which is undefined):
Q.^R| U...^RG
This redefines C-S to be a single character search command, and
M-S to be a non-incremental string search:
M.M ^R Character Search$ U.^RS
M.M ^R String Search$ U..^RS
This redefines C-X V to run View File:
M.M View File$ U:.X(^^V)
This makes M-M a prefix character and defines M-M W to mark a
word and M-M P to mark a paragraph. It stores the dispatch
vector for the prefix character in the variable M-M Dispatch.
MM Make Prefix Character$.Y$U..^RM
Q$Prefix Char List$[1
:i$Prefix Char List$^]1M-M ^]$M-M Dispatch^]$
$ ]1
M.M ^R Mark Word$ U:$M-M Dispatch$(^^W)
M.M ^R Mark Paragraph$ U:$M-M Dispatch$(^^P)
This loads the library LUNAR and defines C-Q to run a useful
function found in that library:
MM Load Library$LUNAR$
M.M ^R Various Quantities$ U.^RQ
151 EMACS Manual for TWENEX Users
This causes Auto Save mode to save under the visited filenames:
1U$Auto Save Visited File$
Compare this and the next example with the first two, in which
string values are used.
This causes TAGS to bring new files into separate buffers:
1M.VTAGS Find File$
This prevents the default init file from printing the message
"EMACS version nnn. Type ... for Help".
1M.VInhibit Help Message$
This redefines the list syntax of "%" to be ";" for "comment
starter", and that of ";" to be "A" for "alphabetic":
1mm& Alter ..D$%;;A$
22.7 Local Variables in Files
By specifying local modes in a file you can cause certain major
or minor modes to be set, or certain character commands to be
defined, whenever you are visiting it. For example, EMACS can
select Lisp mode for that file, set up a special Comment Column,
or put a special command on the character C-M-Comma. Local modes
can specify the major mode, and the values of any set of named
variables and command characters. Local modes apply only while
the buffer containing the file is selected; they do not extend to
other files loaded into other buffers.
The simplest kind of local mode specification sets only the
major mode. You put the mode's name in between a pair of
"-*-"'s, anywhere on the first nonblank line of the file. For
example, the first line of this file contains -*-Scribe-*-,
implying that this file should be edited in Scribe mode. The
152 EMACS Manual for TWENEX Users
-*- can appear on the first nonblank line after the edit history,
if somebody insists on putting in an edit history.
Often, EMACS is able to determine the best major mode for a
file by looking at the file's extension. If this works, you
don't need to worry about specifying the major mode. If the
extension of the file does not inform EMACS correctly, then you
need an explicit local modes specification. The functions which
implement this are called & <extension> Mode, in the TWENEX
library.
To specify more that just the major mode, you must use a local
modes list, which goes in the last page of the file (it is best
to put it on a separate page). The local modes list starts with
a line containing the string "Local Modes:", and ends with a line
containing the string "End:". In between come the variable names
and values, just as in an EMACS.VARS file. See section 22.6
[EMACS.VARS files], page 144.
The line which starts the local modes list does not have to say
just "Local Modes:". If there is other text before "Local
Modes:", that text is called the prefix, and if there is other
text after, that is called the suffix. If these are present,
each entry in the local modes list should have the prefix before
it and the suffix after it. This includes the "End:" line. The
prefix and suffix are included to disguise the local modes list
as a comment so that the compiler or text formatter will not be
perplexed by it. If you do not need to disguise the local modes
list as a comment in this way, do not bother with a prefix or a
suffix.
Aside from the "Local Modes:" and the "End:", and the prefix
and suffix if any, a local modes list looks like an EMACS.VARS
file. However, comments lines are not allowed, and you cannot
redefine C-X subcommands due to fundamental limitations of the
data structure used to remember local variables. Sorry.
The major mode can be set by specifying a value for the
variable "Mode" (don't try setting the major mode this way except
in a local modes list!). It should be the first thing in the
local modes list, if it appears at all. A function M-X Foo can
be defined locally by putting in a local setting for a variable
named "MM Foo". See section 5.2 [Functions], page 23.
153 EMACS Manual for TWENEX Users
Here is an example of a local modes list:
;;; Local Modes: ***
;;; Mode:Mumble ***
;;; Comment Column:0 ***
;;; Comment Start: ";;; " ***
;;; Comment End:"***" ***
;;; ..^R/: m.m^R My Funny Meta-Slash$ ***
;;; End: ***
Note that the prefix is ";;; " and the suffix is " ***". Note
also that comments in the file begin with ";;; " and end with
"***". Presumably the file contains code in the language Mumble,
in which comments must start and end that way. The prefix and
suffix are used in the local modes list to make the list appear
as comments when the file is read by the Mumble compiler.
The last page of the file must be no more than 10000 characters
long or the local modes list will not be recognized. This is
because EMACS finds the local modes list by scanning back only
10000 characters from the end of the file for the last formfeed,
and then looking forward for the "Local Modes:" string. This
accomplishes these goals: a stray "Local Modes:" not in the last
page is not noticed; and visiting a long file that is all one
page and has no local mode list need not take the time to search
the whole file.
22.8 Keyboard Macros
C-X ( Start defining a keyboard macro.
C-X ) End the definition of a keyboard macro.
C-X E Execute the most recent keyboard macro.
C-U C-X ( Re-execute last keyboard macro and append to
its definition.
C-X Q Ask for confirmation when the keyboard macro
is executed.
C-U C-X Q Allow the user to edit for a while, each time
the keyboard macro is executed.
M-X Name Kbd Macro
Make the most recent keyboard macro into the
permanent definition of a command.
M-X Write Kbd Macro
Save a keyboard macro in a file.
154 EMACS Manual for TWENEX Users
A keyboard macro is a command defined by the user to abbreviate
a sequence of other commands. If you discover that you are about
to type C-N C-D forty times, you can define a keyboard macro to
do C-N C-D and call it with a repeat count of forty.
Keyboard macros differ from ordinary EMACS commands, in that
they are written in the EMACS command language rather than in
TECO. This makes it easier for the novice to write them, and
makes them more convenient as temporary hacks. However, the
EMACS command language is not powerful enough as a programming
language to be useful for writing anything intelligent or
general. For such things, TECO must be used.
EMACS functions were formerly known as macros (which is part of
the explanation of the name EMACS), because they were macros
within the context of TECO as an editor. We decided to change
the terminology because, when thinking of EMACS, we consider TECO
a programming language rather than an editor. The only "macros"
in EMACS now are keyboard macros.
You define a keyboard macro while executing the commands which
are the definition. Put differently, as you are defining a
keyboard macro, the definition is being executed for the first
time. This way, you can see what the effects of your commands
are, so that you don't have to figure them out in your head.
When you are finished, the keyboard macro is defined and also has
been, in effect, executed once. You can then do the whole thing
over again by invoking the macro.
22.8.1 Basic Use
To start defining a keyboard macro, type the C-X ( command
(^R Start Kbd Macro). From then on, your commands continue to be
executed, but also become part of the definition of the macro.
"Def" appears in the mode line to remind you of what is going on.
When you are finished, the C-X ) command (^R End Kbd Macro)
terminates the definition (without becoming part of it!).
The macro thus defined can be invoked again with the C-X E
command (^R Execute Kbd Macro), which may be given a repeat count
as a numeric argument to execute the macro many times. C-X ) can
also be given a repeat count as an argument, in which case it
repeats the macro that many times right after defining it, but
defining the macro counts as the first repetition (since it is
executed as you define it). So, giving C-X ) an argument of 2
executes the macro immediately one additional time. An argument
of zero to C-X E or C-X ) means repeat the macro indefinitely
(until it gets an error).
155 EMACS Manual for TWENEX Users
If you want to perform an operation on each line, then either
you should start by positioning point on the line above the first
one to be processed and then begin the macro definition with a
C-N, or you should start on the proper line and end with a C-N.
Either way, repeating the macro will operate on successive lines.
After you have terminated the definition of a keyboard macro,
you can add to the end of its definition by typing C-U C-X (.
This is equivalent to plain C-X ( followed by retyping the whole
definition so far. As a consequence it re-executes the macro as
previously defined.
If you wish to save a keyboard macro for longer than until you
define the next one, you must give it a name. If you do M-X Name
Kbd Macro$FOO<cr>, the last keyboard macro defined (the one which
C-X E would invoke) is turned into a function and given the name
FOO. M-X FOO will from then on invoke that particular macro.
Name Kbd Macro also reads a character from the keyboard and
redefines that character command to invoke the macro. You can
use a bit prefix character in specifying the command; you can
also type a C-X command to be redefined. When you have finished
typing the command characters, Name Kbd Macro asks you whether it
should go ahead and redefine the character.
To save a keyboard macro permanently, do M-X Write Kbd Macro.
Supply the function name of the keyboard macro as a string
argument, or else it will ask you to type the character which
invokes the keyboard macro. The keyboard macro is saved as a
library which, when loaded, automatically redefines the keyboard
macro. The filename is read from the terminal. Its second name
should be :EJ, like other libraries; that is the default.
To examine the definition of a keyboard macro, use the function
View Kbd Macro. Either supply the name of the function which
runs the macro, as a string argument, or type the command which
invokes the macro when View Kbd Macro asks for it.
22.8.2 Executing Macros with Variations
If you want to be allowed to do arbitrary editing at a certain
point each time around the macro (different each time, and not
remembered as part of the macro), you can use the C-U C-X Q
command (^R Kbd Macro Query). When you are defining the macro,
this lets you do some editing, which does not become part of the
macro. When you are done, exit with C-M-Z to return to defining
the macro. When you execute the macro, at that same point, you
will again be allowed to do some editing. When you exit this
156 EMACS Manual for TWENEX Users
time with C-M-Z, the execution of the macro will resume. If you
abort the recursive editing level with C-], you will abort the
macro definition or execution.
You can get the effect of Query Replace, where the macro asks
you each time around whether to make a change, by using the
command C-X Q with no argument in your keyboard macro. When you
are defining the macro, the C-X Q does nothing, but when the
macro is invoked the C-X Q reads a character from the terminal to
decide whether to continue. The special answers are Space,
Rubout, Altmode, C-L, C-R. A Space means to continue. A Rubout
means to skip the remainder of this repetition of the macro,
starting again from the beginning in the next repetition. An
Altmode ends all repetitions of the macro, but only the innermost
macro (in case it was called from another macro). C-L clears the
screen and asks you again for a character to say what to do. C-R
enters a recursive editing level; when you exit, you are asked
again (if you type a Space, the macro will continue from wherever
you left things when you exited the C-R). Anything else exits
all levels of keyboard macros and is reread as a command.
157 EMACS Manual for TWENEX Users
CHAPTER TWENTY-THREE
THE MINIBUFFER
The minibuffer is a facility by means of which EMACS commands
can read input from the terminal, allowing you to use EMACS
commands to edit the input while you are typing it. Usually it
is used to read a TECO program to be executed.
M-Altmode Invokes an empty minibuffer.
M-% Invokes a minibuffer initialized with a Query
Replace.
C-X Altmode Re-execute a recent minibuffer command.
C-X ^ Add more lines to the minibuffer.
C-\ Meta-prefix for use in the minibuffer.
C-Z C-Y Rotate ring of recent minibuffer commands.
The primary use of the minibuffer is for editing and executing
simple TECO programs such as
MM Query Replace$FOO
$BAR
$
(which could not be done with M-X Query Replace because when M-X
is used Return terminates the arguments).
You can always tell when you are in a minibuffer, because the
mode line contains something in parentheses, such as
"(Minibuffer)" or "(Query Replace)". There is also a line of
dashes across the screen a few lines from the top. Strictly
speaking, the minibuffer is actually the region of screen above
the line of dashes, for that is where you edit the input that the
minibuffer is asking you for. Editing has been limited to a few
lines so that most of the screen can continue to show the file
you are visiting.
If you want to type in a TECO command, use the minibuffer with
the command Meta-Altmode, (^R Execute Minibuffer). An empty
minibuffer will appear, into which you should type the TECO
command string. Exit with Altmode Altmode, and remember that
neither of the two Altmodes is inserted into your TECO command
although the first one may appear to be. When the TECO command
is executed, "the buffer" will be the text you were editing
before you invoked the minibuffer.
158 EMACS Manual for TWENEX Users
Often, a minibuffer starts out with some text in it. This
means that you are supposed to add to that text, or, sometimes,
to delete some of it so as to choose among several alternatives.
For example, Meta-% (^R Query Replace) provides you with a
minibuffer initially containing the string "MM Query Replace$".
The cursor comes at the end. You are then supposed to add in the
arguments to the Query Replace.
In a minibuffer, you can edit your input until you are
satisfied with it. Then you tell EMACS you are finished by
typing two Altmodes. An Altmode not followed by another Altmode
is simply inserted in the buffer. This is because it is common
to want to put Altmodes into the minibuffer, which usually
contains a string of TECO commands. For example, in Meta-%
(^R Query Replace) each argument must be ended by an Altmode.
However, when you type two Altmodes in a row, neither one remains
in the buffer. The two Altmodes do nothing to the text in the
minibuffer, they just exit.
Since Altmode is self-inserting, typing Meta characters can be
a problem. You can do it by using C-\ instead of Altmode as the
Meta-prefix. If you type a Control-Meta character on your
keyboard, the corresponding ASCII control character is inserted
in the minibuffer. This is because the Lisp commands are rarely
useful when editing TECO code, but insertion of control
characters is frequent. If you really want to use a Control-Meta
EMACS command, you must use C-Z to type it. You cannot use C-\
C-A to type C-M-A, because C-\ (unlike Altmode) ignores the
Control bit of the following character, so you must use C-Z C-A.
The motivation for this quirk of C-\ is that C-\ C-B (to obtain
M-B) is easier to type than C-\ B, especially if it is typed
several times in a row.
You can cancel your input in a minibuffer and start all over
again by typing C-G. That kills all the text in the minibuffer.
A C-G typed when the minibuffer is already empty exits from the
minibuffer. Usually, this aborts whatever command was using the
minibuffer, so it will return without doing anything more. For
example, if you type two C-G's at Meta-%'s minibuffer, you will
return to top level and no Query Replace will be done. Typing a
single C-G at a preinitialized minibuffer to empty the buffer is
not very useful, since you would have to retype all the initial
text.
The last five distinct minibuffer commands or M-X commands you
have issued are remembered in a ring buffer in q-register .M.
The C-X Altmode command (^R Re-execute Minibuffer) re-executes
the last command in the ring. With an argument <n>, it
re-executes the <n>'th previous command. The command is printed
159 EMACS Manual for TWENEX Users
out (only the first 40 characters or so) and you are asked to
confirm with "Y" or "N".
You can also get your previous minibuffer and M-X commands back
into the minibuffer to be edited and re-executed with changes.
Giving M-Altmode an argument, as in C-U M-Altmode, causes the
minibuffer to be loaded up with the last command in the ring, as
if you had typed it in again from scratch. You can then edit it,
execute it by typing two Altmodes, or cancel it with C-G. To get
an earlier command string instead of the most recent one, use the
command C-Z C-Y once you are in the minibuffer. This command
"rotates" the ring of saved commands much as M-Y rotates the ring
of killed text. Each C-Z C-Y reveals an earlier command string,
until the ring has rotated all the way around and the most recent
one reappears. C-Z C-Y is actually a way of saying C-M-Y, but in
the minibuffer that's the only way to type it, since Altmode
inserts itself and Control-Meta characters insert control
characters.
If you exit from Meta-Altmode with a C-G, nothing is executed
and the previous minibuffered command string is still remembered
as the last one.
While in a minibuffer, if you decide you want the minibuffer to
use more lines on the screen, you can use C-X ^ (^R Grow Window)
to get more. It gets one more line, or as many lines as its
argument says.
160 EMACS Manual for TWENEX Users
CHAPTER TWENTY-FOUR
CORRECTING MISTAKES AND EMACS PROBLEMS
If you type an EMACS command you did not intend, the results
are often mysterious. This chapter tells what you can do to
cancel your mistake or recover from a mysterious situation.
EMACS bugs and system crashes are also considered.
24.1 Quitting and Aborting
C-G Quit. Cancel running or partially typed command.
C-] Abort recursive editing level and cancel the
command which invoked it.
M-X Top Level
Abort all recursive editing levels and subsystems
which are currently executing.
There are three ways of cancelling commands which are not
finished executing: quitting with C-G, and aborting with C-] or
M-X Top Level. Quitting is cancelling a partially typed command
or one which is already running. Aborting is cancelling a
command which has entered a recursive editing level or subsystem.
Quitting with C-G is used for getting rid of a partially typed
command, or a numeric argument that you don't want. It also
stops a running command in the middle in a relatively safe way,
so you can use it if you accidentally give a command which takes
a long time. In particular, it is safe to quit out of killing;
either your text will all still be there, or it will all be in
the kill ring (or maybe both). Quitting an incremental search
does special things documented under searching; in general, it
may take two successive C-G's to get out of a search. C-G can
interrupt EMACS at any time, so it is not an ordinary command.
Aborting with C-] (Abort Recursive Edit) is used to get out of
a recursive editing level and cancel the command which invoked
it. Quitting with C-G cannot be used for this, because it is
used to cancel a partially typed command within the recursive
editing level. Both operations are useful. For example, if you
are editing a message to be sent, C-G can be used to cancel the
commands you use to edit the message, and C-] cancels sending the
message. C-] either tells you how to resume the aborted command
or queries for confirmation before aborting.
161 EMACS Manual for TWENEX Users
When you are in a position to use M-X, you can use M-X Top
Level. This is equivalent to "enough" C-] commands to get you
out of all the levels of subsystems and recursive edits that you
are in. C-] gets you out one level at a time, but M-X Top Level
goes out all levels at once. Both C-] and M-X Top Level are like
all other commands, and unlike C-G, in that they are effective
only when EMACS is listening.
24.2 Dealing with Common Forms of EMACS Lossage
This section describes various conditions which can cause EMACS
not to work, or cause it to display strange things, and how you
can correct them.
24.2.1 Error Message
When EMACS prints an error message, it occupies the top line of
the screen, ends with a "?", and is accompanied by the ringing of
the bell. Space causes the error message to disappear and be
replaced by the first line of text again. Any other command is
executed normally as if there had been no error message (the
error message disappears during the redisplay after the command).
However, "?" enters the error handler, which can be used to
inspect the function call stack. Most users will not be
interested in doing this. Type Help inside the error handler to
get its documentation, or C-] to exit it.
If you prefer to have echo messages printed in the echo area,
set the variable Error Messages in Echo Area nonzero.
24.2.2 Subsystems and Recursive Editing Levels
Subsystems and recursive editing levels are important and
useful features of EMACS, but they can seem like malfunctions to
the user who does not understand them.
If the mode line starts with a bracket "[" or a parenthesis
"(", or does not start with the word "EMACS", then you have
entered a subsystem (See section 6.1 [Subsystems], page 27.) or a
recursive editing level (See section 6.2 [Recursive Editing
Levels], page 28.).
162 EMACS Manual for TWENEX Users
In such a situation, first try typing C-]. This will get out
of any recursive editing level and most subsystems. The usual
mode line and text display will reappear. If C-] does not seem
to have worked, type the Help character. Instead of printing
"Doc (Type ? for Help)" in the echo area, it will print a list of
the subsystem's commands. One of these should be a command to
exit or abort.
If the above techniques fail, try restarting (see section
24.2.7).
24.2.3 Garbage on the Screen
If the data on the screen looks wrong, it could be due to line
noise on input or output, a bug in the terminal, a bug in EMACS
redisplay, or a bug in an EMACS command. To find out whether
there is really anything wrong with your text, the first thing to
do is type C-L. This is a command to clear the screen and
redisplay it. Often this will display the text you expected.
Think of it as getting an opinion from another doctor.
24.2.4 Garbage Displayed Persistently
If EMACS persistently displays garbage on the screen, or if it
outputs the right things but scattered around all the wrong
places on the screen, it may be that EMACS has the wrong idea of
your terminal type. The first thing to do in this case is to
exit from EMACS and restart it. Each time EMACS is restarted it
asks the system what terminal type you are using. Whenever you
detach and move to a terminal of a different type you should
restart EMACS as a matter of course. If you stopped EMACS with
the exit command, or by interrupting it when it was awaiting a
command, then this is sure to be safe.
The system itself may not know what type of terminal you have.
You should try telling the system with the TERMINAL TYPE command
in EXEC. If your terminal is compatible with one of the standard
types but has a different size screen, you must tell the system
the size with the TERMINAL LENGTH and TERMINAL WIDTH commands,
because EMACS uses whatever size the system says it knows.
Alternatively, you can use Set Terminal Type. See section I.4
[Terminal Types], page 190, for more information.
163 EMACS Manual for TWENEX Users
24.2.5 URK Error (Address Space Exhausted)
If attempting to visit a file or load a library causes an "URK"
error, it means you have filled up the address space; there is no
room inside EMACS for any more files or libraries. In this
situation EMACS will try to run the function Make Space for you.
If EMACS is unable to do it for you, you may still be able to do
M-X Make Space yourself. This command compacts the data inside
EMACS to free up some space. It also offers to discard data that
may be occupying a lot of space, such as the kill ring (See
section 9.1 [Killing], page 42.), the undo memory (See
section 24.3 [Undo], page 164.), and buffers created by TAGS and
INFO. Another way of freeing space is to kill buffers with M-X
Kill Some Buffers (See section 14 [Buffers], page 83.) or unload
libraries with M-X Kill Libraries (See section 22.2 [Libraries],
page 136.).
Use the command M-X What Available Space to find out how close
you are to running out of space. It tells you how many K of
space you have available for additional files or libraries.
Visiting a file causes an URK error if the file does not fit in
the available virtual memory space, together with the other
buffers and the libraries loaded. A big enough file causes an
URK error all by itself. For editing such large files, use the
command Split File (in the SPLIT library) to break it into
subfiles. These will be fairly large files still, but not too
large to edit. After editing one or more of the subfiles, use
the command Unsplit File (also in SPLIT) to put them back
together again.
M-X Split File takes the name of the file to split as an
argument. The file is split into subfiles with the same first
name as the original file, but with extensions "1", "2", etc.,
for as many subfiles as are needed depending on the size of the
original file. These numeric extensions should not be confused
with version numbers; a subfile FOO.1 would be created with
version 1, and after editing you might get up to FOO.1.3. This
has nothing to do with the third subfile, FOO.3, which would have
its own version number (perhaps FOO.3.2).
M-X Unsplit File takes the name of the file to merge into as an
argument. It finds the subfiles the same way Split File makes
them, by taking successive numbers as extensions. When a
nonexistent extension is reached, Unsplit File assumes that means
it has already processed all the subfiles and that it is
finished.
164 EMACS Manual for TWENEX Users
24.2.6 All Type-in Echoes and Nothing Else Happens
If you find that EMACS is not responding to your commands
except for echoing them all at the bottom of the screen,
including the Return character, and that Rubout causes erased
characters to be retyped instead of erased, then you have managed
to exit from EMACS back to TECO. Often this follows an "Error in
error handler" message which indicates that a condition arose in
which the error handler could not function. You can get back
into EMACS by typing :M..L$$, or by restarting (see below). If
you ever want to exit back to TECO, you can do M-X Top Level with
an argument greater than zero. Before using :M..L$$, get rid of
any other characters you have typed by mistake by typing a C-G.
24.2.7 EMACS Hung and Not Responding
Sometimes EMACS gets hung and C-G does not work. The more
drastic procedure of restarting EMACS may work at such times.
C-G can fail to work because it only takes effect between the
TECO commands which make up an EMACS program, never in the middle
of one (only a few TECO commands allow quitting at any time), so
as to prevent TECO's internal data structures from becoming
inconsistent. If EMACS is hung inside a TECO command, C-G is not
noticed, but restarting can still be tried.
To restart EMACS, type Control-C twice to stop EMACS, then
START to restart it. While restarting TECO in this way is
usually safe (especially at times when TECO is doing I/O), there
are certain times at which it will cause the TECO data structures
to be inconsistent, so do not try it unless other measures have
failed.
Your ultimate safeguard against a wedged EMACS is to save your
work frequently.
24.3 Undoing Changes to the Buffer
If you mistakenly issue commands that make a great change to
the buffer, you can often undo the change without having to know
precisely how it came about. This is done by using M-X Undo.
Type M-X Undo<cr> and the change is undone. It does not matter
if you have moved the cursor since you made the change; it is
undone where it was originally done.
165 EMACS Manual for TWENEX Users
The first thing Undo does is tell you what kind of change it
plans to undo (kill, fill, undo, case-convert, etc). Then it
asks whether to go ahead. If you say "Y", the change is actually
undone.
Not all changes to the buffer can be undone: deletion (as
opposed to killing) can't be, and changes in indentation can't
be, nor can many forms of insertion (but they aren't as important
since they don't destroy information). Also, a Replace String or
Query Replace can't be undone, which is a shame. The reason is
that actually they make many small changes, and Undo only knows
how to remember one contiguous change. Perhaps someday I will be
able to fix this.
As a result, when you say Undo, it may undo something other
than the latest change if the latest change was not undoable.
This might seem to pile one disaster on another, but it doesn't,
because you can always Undo the Undo if it didn't help. But you
can avoid even having to do that, if you look at what type of
change Undo says it will undo.
If you want to undo a considerable amount of editing, not just
the last change, the Undo command can't help you, but M-X Revert
File (See section 13.2 [Revert], page 74.) might be able to. If
you have been writing a journal file (See section 24.4
[Journals], page 165.), you can replay the journal after deleting
the part that you don't want.
24.4 Journal Files
A journal file is a record of all the commands you type during
an editing session. If you lose editing because of a system
crash, an EMACS bug, or a mistake on your part, and you have made
a journal file, you can replay the journal or part of it to
recover what you lost. Journal files offer an alternative to
auto saving, using less time and disk space if there is no crash,
but requiring more time when you recover from a crash. See
section 13.3 [Auto Save], page 74.
24.4.1 Writing Journal Files
In order to make a journal file, you must load the JOURNAL
library and then execute M-X Start Journal File$<filename><cr>.
Immediately, most of the current status of EMACS is recorded in
166 EMACS Manual for TWENEX Users
the journal file, and all subsequent commands are recorded as
they are typed. This happens invisibly and silently. The
journal file is made fully up to date on the disk after every
50th character, so the last 50 characters of type in is the most
you can lose.
The default filenames for the journal file are EMACS.JOURNAL.
There is rarely a reason to use any other name, because you only
need one journal file unless you are running two EMACSes at the
same time.
24.4.2 Replaying Journal Files
To replay the journal file, get a fresh EMACS, load JOURNAL,
and do M-X Replay Journal File$<filename><cr>. The filename can
usually be omitted since normally you will have used the defaults
when creating the journal.
After a delay while the files, buffers and libraries are loaded
as they were when the journal file was written, EMACS will begin
replaying the commands in the journal before your very eyes.
Unlike keyboard macros, which execute invisibly until they are
finished, journal files display as they are executed. This
allows you to see how far the replay has gone. You can stop the
process at any time by typing C-G. Aside from that, you should
not type anything on the keyboard while the replay is going on.
If the need for a replay is the result of a system crash or
EMACS crash, then you probably want to replay the whole file.
This is what happens naturally. If you are replaying because you
made a great mistake, you probably want to stop the replay before
the mistake. This is when it becomes useful to type C-G to stop
the replay. Alternatively, you can edit the journal file, and
delete everything from the point of the mistake to the end,
before you replay it.
Once the replay is complete, save all your files immediately.
Don't tempt fate!
If you quit with C-G in the middle of a command while writing a
journal file, there is no way to record in the journal file how
much of the command has already been completed. So, when the
journal is replayed, EMACS has to ask you to fill in for it. The
command which was interrupted will be replayed to completion;
then, you are given a recursive editing level in which to restore
the file to the desired state. This happens only if the C-G
originally interrupted an executing command. C-G typed to
167 EMACS Manual for TWENEX Users
discard an argument or partial command while EMACS is waiting for
input can be and is replayed correctly without asking you for
help.
24.4.3 Journal File Format
To edit a journal file, you must know the format. It is
designed to be mostly transparent.
The primary problem which the journal file format has to solve
is how to represent 9-bit command characters in a file which can
contain only 7-bit ASCII characters. (We could have filled the
journal file with 9-bit characters, but then you would not be
able to print it out or edit it). The solution we have used is
to represent each command by two characters in the file.
So, a Control character is represented by a caret ("^")
followed by the basic character, as in "^E" for Control-E. This
was chosen to be mnemonically significant. A Meta character is
represented by "+" followed by the basic character, so that
Meta-[ is represented by "+[". A Control-Meta character is
represented by "*" followed by the basic character, as in "*X"
for C-M-X.
A command which is not Control or Meta is represented as a
space followed by the command itself, except that Return is
represented by a CRLF rather than a space and a carriage return.
This prevents the journal file from being one huge line, and
makes insertion of text very recognizable: the text inserted
appears in the journal file alternating with spaces.
The Help character, which is not covered by the scheme as
described so far, is represented by "??".
An asynchronous quit, which is a problem for replaying, is
represented by a single character, a ^G, while a synchronous
quit, which can be replayed reliably, is represented by ":^G".
EMACS considers a quit synchronous, and uses ":^G" to record it,
if EMACS was waiting for terminal input when the C-G was typed.
Your commands themselves are not the only information in the
journal file. EMACS records other information which is necessary
in replaying the journal properly. The colon character ":"
indicates a block of such information. Usually the extent of the
block is easily recognizable because its contents do not resemble
the representations of commands described above. A large block
of information starting with a colon appears at the beginning of
every journal file.
168 EMACS Manual for TWENEX Users
Colons are also used to record the precise effects of certain
commands such as C-V whose actions depend on how the text was
displayed on the screen. Since the effects of such commands are
not completely determined by the text, replaying the command
could produce different results, especially if done on a terminal
with a different screen size. The extra information recorded in
the journal makes it possible to replay these commands with
fidelity.
A semicolon in the journal file begins a comment, placed there
for the benefit of a human looking at the journal. The comment
ends at the beginning of the following line.
24.4.4 Warnings
Proper replaying of a journal file requires that all the
surrounding circumstances be unchanged.
In particular, replaying begins by visiting all the files that
were visited when the writing of the journal file began; not the
latest versions of these files, but the versions which were the
latest at the earlier time. If those versions, which may no
longer be the latest, have been deleted, then replaying is
impossible.
If your init file has been changed, the commands when replayed
may not do what they did before.
These are the only things that can interfere with replaying, as
long as you start writing the journal file immediately after
starting EMACS. But as an editing session becomes longer and
files are saved, the journal file contains increasing amounts of
waste in the form of commands whose effects are already safe in
the newer versions of the edited files. Replaying the journal
will replay all these commands wastefully to generate files
identical to those already saved, before coming to the last part
of the session which provides the reason for replaying.
Therefore it becomes very desirable to start a new journal file.
However, many more precautions must be taken to insure proper
replaying of a journal file which is started after EMACS has been
used for a while. These precautions are described here. If you
cannot follow them, you must make a journal checkpoint (see
below).
If any buffer contains text which is not saved in a file at the
time the journal file is started, it is impossible to replay the
journal correctly. This problem cannot possibly be overcome. To
169 EMACS Manual for TWENEX Users
avoid it, M-X Start Journal File offers to save all buffers
before actually starting the journal.
Another problem comes from the kill ring and the other ways in
which EMACS remembers information from previous commands. If any
such information which originated before starting the journal
file is used after starting it, the journal file cannot be
replayed. For example, suppose you fill a paragraph, start a
journal file, and then do M-X Undo? When the journal is
replayed, it will start by doing M-X Undo, but it won't know what
to undo. It is up to you not to do anything that would cause
such a problem. It should not be hard. It would be possible to
eliminate this problem by clearing out all such data structures
when a journal file is started, if users would prefer that.
A more difficult problem comes from customization. If you
change an option or redefine a command, then start a journal
file, the journal file will have no record of the change. It
will not replay correctly unless you remember to make the same
change beforehand. Customizations made in an init file do not
cause a problem because the init file has also been run when the
journal file is replayed. Customizations made directly by the
user while the journal file is being written are also no problem
because replaying will make the same changes at the right times.
However, a customization made while a journal file is being
written will be a problem if a new journal file is started.
24.4.5 Journal Checkpoints
The only cure for the problems of starting a journal in
mid-session is to record the complete state of EMACS at the time
the journal is begun. This is not done normally because it is
slow; however, you can do this if you wish by giving M-X Start
Journal File a numeric argument. This writes the complete state
of EMACS into the file ESAVE.EXE. To replay the journal, run
ESAVE, the saved checkpoint, instead of EMACS; then load JOURNAL
and do M-X Replay Journal File as described above. Be sure to
delete the checkpoint if you are finished with it, since it tends
to be large. Delete them also when you log out; it may be
possible to have a command file which deletes them automatically
when you log out. Checkpoint files more than a day old may be
deleted by others without notice; but don't leave it up to them.
170 EMACS Manual for TWENEX Users
24.5 Reporting Bugs
Sometimes you will encounter a bug in EMACS. To get it fixed,
you must report it. It is your duty to do so; but you must know
when to do so and how if it is to be constructive.
24.5.1 When Is There a Bug
If EMACS executes an illegal instruction, or dies with an
operating system error message that indicates a problem in the
program (as opposed to "disk full"), then it is certainly a bug.
If EMACS updates the display in a way that does not correspond
to what is in the buffer, then it is certainly a bug. If a
command seems to do the wrong thing but the problem is gone if
you type C-L, then it is a case of incorrect display updating.
Taking forever to complete a command can be a bug, but you must
make certain that it was really EMACS's fault. Some commands
simply take a long time. Quit or restart EMACS and type Help L
to see whether the keyboard or line noise garbled the input; if
the input was such that you know it should have been processed
quickly, report a bug. If you don't know, try to find someone
who does know.
If a command you are familiar with causes an EMACS error
message in a case where its usual definition ought to be
reasonable, it is probably a bug.
If a command does the wrong thing, that is a bug. But be sure
you know for certain what it ought to have done. If you aren't
familiar with the command, or don't know for certain how the
command is supposed to work, then it might actually be working
right. Rather than jumping to conclusions, show the problem to
someone who knows for certain.
Finally, a command's intended definition may not be best for
editing with. This is a very important sort of problem, but it
is also a matter of judgement. Also, it is easy to come to such
a conclusion out of ignorance of some of the existing features.
It is probably best not to complain about such a problem until
you have checked the documentation in the usual ways (INFO and
Help), feel confident that you understand it, and know for
certain that what you want is not available. If you feel
confused about the documentation instead, then you don't have
grounds for an opinion about whether the command's definition is
171 EMACS Manual for TWENEX Users
optimal. Make sure you read it through and check the index or
the menus for all references to subjects you don't fully
understand. If you have done this diligently and are still
confused, or if you finally understand but think you could have
said it better, then you have a constructive complaint to make
about the documentation. It is just as important to report
documentation bugs as program bugs.
24.5.2 How to Report a Bug
When you decide that there is a bug, it is important to report
it and to report it in a way which is useful. What is most
useful is an exact description of what commands you type,
starting with a fresh EMACS just loaded, until the problem
happens. Send the bug report to BUG-EMACS@MIT-AI if you are on
the Arpanet, or to the author (see the preface for the address).
The most important principle in reporting a bug is to report
facts, not hypotheses or conditions. It is always easier to
report the facts, but people seem to prefer to strain to think up
explanations and report them instead. If the explanations are
based on guesses about how EMACS is implemented, they will be
useless; we will have to try to figure out what the facts must
have been to lead to such speculations. Sometimes this is
impossible. But in any case, it is unnecessary work for us.
For example, suppose that you type C-X C-V <GLORP>BAZ.UGH<cr>,
visiting a file which (you know) happens to be rather large, and
EMACS prints out "I feel pretty today". The best way to report
the bug is with a sentence like the preceding one, because it
gives all the facts and nothing but the facts.
Do not assume that the problem is due to the size of the file
and say "When I visit a large file, EMACS prints out 'I feel
pretty today'". This is what we mean by "guessing explanations".
The problem is just as likely to be due to the fact that there is
a "Z" in the filename. If this is so, then when we got your
report, we would try out the problem with some "big file",
probably with no "Z" in its name, and not find anything wrong.
There is no way in the world that we could guess that we should
try visiting a file with a "Z" in its name.
Alternatively, the problem might be due to the fact that the
file starts with exactly 25 spaces. For this reason, you should
make sure that you don't change the file until we have looked at
it. Suppose the problem only occurs when you have typed the C-X
C-A command previously? This is why we ask you to give the exact
sequence of characters you typed since loading the EMACS.
172 EMACS Manual for TWENEX Users
You should not even say "visit the file ..." instead of "C-X
C-V" unless you know that it makes no difference which visiting
command is used. Similarly, rather than saying "if I have three
characters on the line", say "after I type <cr> A B C <cr> C-P",
if that is the way you entered the text. A journal file
containing the commands you typed to reproduce the bug is a very
good form of report.
If you are not in Fundamental mode when the problem occurs, you
should say what mode you are in.
Be sure to say what version of EMACS and TECO are running. If
you don't know, type Meta-Altmode Q$EMACS Version$= FS Version$=
$$ and EMACS will print them out. (This is a use of the
minibuffer. See section 23 [Minibuffer], page 157.)
If the bug occurred in a customized EMACS, or with several
optional libraries loaded, it is helpful to try to reproduce the
bug in a more standard EMACS with fewer libraries loaded. It is
best if you can make the problem happen in a completely standard
EMACS with no optional libraries. If the problem does not occur
in a standard EMACS, it is very important to report that fact,
because otherwise we will try to debug it in a standard EMACS,
not find the problem, and give up. If the problem does depend on
an init file, then you should make sure it is not a bug in the
init file by complaining to the person who wrote the file, first.
He should check over his code, and verify the definitions of the
TECO commands he is using by looking in INFO:TECORD.INFO. Then
if he verifies that the bug is in EMACS he should report it. We
cannot be responsible for maintaining users' init files; we might
not even be able to tell what they are supposed to do.
If you can tell us a way to cause the problem without reading
in any files, please do so. This makes it much easier to debug.
If you do need files, make sure you arrange for us to see their
exact contents. For example, it can often matter whether there
are spaces at the ends of lines, or a line separator after the
last line in the buffer (nothing ought to care whether the last
line is terminated, but tell that to the bugs). If you are
reporting the bug from a non-Arpanet site, keep the files small,
since we may have to type them in, unless you send them on mag
tape.
If EMACS gets an operating system error message, such as for an
illegal instruction, then you can probably recover by restarting
it. But before doing so, you should make a dump file. If you
restart or continue the EMACS before making the dump, the trail
will be covered and it will probably be too late to find out what
happened. Use the SAVE command to do this; however, this does
173 EMACS Manual for TWENEX Users
not record the contents of the accumulators. To do that, use the
EXEC commands EXAMINE 0, EXAMINE 1, etc., through EXAMINE 17.
Include the numbers printed by these commands as part of your bug
report.
A dump is also useful if EMACS gets into a wedged state in
which commands that usually work do strange things.
174 EMACS Manual for TWENEX Users
CHAPTER TWENTY-FIVE
WORD ABBREVIATION INPUT
Word Abbrev mode allows you to abbreviate text with a single
"word", with EMACS expanding the abbreviation automatically as
soon as you have finished the abbreviation.
Abbrevs are also useful for correcting commonly misspelled or
mistyped words ("thier" could expand to "their"), and for
uppercasing words like "EMACS" (abbrev "emacs" could expand to
"EMACS").
To use this mode, just do M-X Word Abbrev Mode<cr>. (Another
M-X Word Abbrev Mode<cr> will turn the mode off; it toggles.)
For example, in writing this documentation we could have
defined "wam" to be an abbreviation for "word abbrev mode".
After typing just the letters "wam", we see just that, "wam", but
if we then finish the word by typing space or period or any other
punctuation, the "wam" is replaced by (and redisplays as) "word
abbrev mode". If we capitalize the abbrev, "Wam", the expansion
is capitalized: "Word abbrev mode". If we capitalize the whole
abbrev, WAM", each word in the expansion is capitalized: "Word
Abbrev Mode". In this particular example, though, we would
define "wam" to expand to "Word Abbrev mode" since it is always
to be capitalized that way.
Thus, typing "I am in wam now" produces "I am in Word Abbrev
mode now".
Word Abbrev mode does not interfere with the use of major
modes, such as Text, Lisp, TECO, PL1, or minor modes, such as
Auto Fill. Those modes (or the user) may redefine what functions
are connected to characters; this does not hamper Word Abbrev
mode.
There are two kinds of word abbreviations: mode and global. A
mode word abbrev applies only in one major mode (for instance
only in Text mode), while a global word abbrev applies regardless
of major mode. If some abbrev is defined both as a mode word
abbrev for the current mode and as a global word abbrev, the mode
word abbrev expansion takes precedence.
For instance, you might want an abbrev "foo" for "find outer
otter" in Text mode, an abbrev "foo" for
"FINAGLE-OPPOSING-OPINIONS" in Lisp, and an abbrev "foo" for
"meta-syntactic variable" in any other mode (the global word
abbrev).
175 EMACS Manual for TWENEX Users
Word abbrevs can be defined one at a time (adding them as you
think of them), or many at a time (from a definition list). You
can save them in a file and read them back later. If you turn
off Word Abbrev mode, abbrevs stop expanding automatically, but
their definitions are remembered in case you turn Word Abbrev
mode back on.
25.1 Basic Usage
C-X C-A Define a mode abbrev for some text before
point.
C-X + Define a global abbrev for some text before
point.
C-X C-H Define expansion for mode abbrev before
point.
C-X - Define expansion for global abbrev before
point.
C-M-Space Expand abbrev without inserting anything.
M-' Mark a prefix to be glued to an abbrev
following.
C-X U Unexpand the last abbrev, or undo a C-X U.
M-X List Word Abbrevs<cr>
Shows definitions of all abbrevs.
M-X Edit Word Abbrevs<cr>
Lets you edit the definition list directly.
M-X Read Word Abbrev File$<filename><cr>
Defines word abbrevs from a definition file.
M-X Write Word Abbrev File$<filename><cr>
Makes a definition file from current abbrev
definitions.
Readable Word Abbrev Files
Option variable to control abbrev file format.
This section describes the most common use of Word Abbrev mode.
If you don't read any more than this, you can still use Word
Abbrev mode quite effectively.
Note that each of the above commands will also work when Word
Abbrev mode is turned off, unlike the automatic expanders (such
176 EMACS Manual for TWENEX Users
as Space or Period), allowing you to manually define and expand
abbrevs. (If you want to do this, you might also see the M-X
Expand Word Abbrevs in Region command's self-documentation.)
25.1.1 Adding Word Abbrevs
C-X C-A (^R Add Mode Word Abbrev) defines a mode abbrev for the
word before point (this does not include any punctuation between
that word and point, though). It prints the word before point in
the echo area and asks you for that word's abbreviation. Type
the abbrev (which you may edit with Rubout and C-U) followed by a
Return. The abbrev must be a "word": it must contain only
letters and digits; the case of the letters is irrelevant. If
you'd rather define a global abbrev, use C-X + (^R Add Global
Word Abbrev), which works similarly.
You can redefine an abbrev with C-X C-A or C-X +. If the
abbrev already has a definition, it tells you what that was, and
asks for confirmation.
To define an abbrev for more than one word of text, give C-X
C-A or C-X + a numeric argument: an argument greater than 0
means the expansion is that many words before point; an argument
of 0 means to use the region (between point and mark). (By using
the region specification you can make an abbrev for any text, not
just a sequence of words.) The message in the echo area provides
you with confirmation of just what the expansion will be; you
might see:
Text Abbrev for "this is the expansion":
Sometimes you may think you already had an abbrev for some
text, use it, and see that it didn't expand. In this case, the
C-X C-H (^R Inverse Add Mode Word Abbrev) or C-X - (^R Inverse
Add Global Word Abbrev) commands are helpful: they ask you to
type in an expansion rather than an abbrev. In addition to
defining the abbrev, they also expand it. If you give them a
numeric argument, n, they use the nth word before point as the
abbrev.
You can kill abbrevs (cause them to no longer expand) by giving
a negative numeric argument to C-X C-A or C-X +. For instance,
to kill the global abbrev "foo" type C-U - C-X + foo<cr>.
177 EMACS Manual for TWENEX Users
25.1.2 Controlling Abbrev Expansion
When an abbrev expands, the capitalization of the expansion is
determined by the capitalization of the abbrev: If the abbrev is
all lowercase, the expansion is as defined. If the abbrev's
first letter is uppercase, the expansion's first letter is too.
If the abbrev is all uppercase, there are two possibilities: if
the expansion is a single word, it is all-uppercased; otherwise,
each of its words has its first letter uppercased (such as for
use in a title). (If you don't like this distinction between
single-word and multi-word expansions, set the variable WORDAB
All Caps to 1. Then an all-uppercase abbrev will always result
in an all-uppercase expansion.)
Abbrevs normally expand when you type some punctuation
character; the abbrev expands and the punctuation character is
inserted. There are other ways of expanding abbrevs: C-M-Space
(^R Abbrev Expand Only) causes the abbrev just before point to be
expanded without inserting any other character. C-M-Space will
expand abbrevs even if Word Abbrev mode is currently off; this
can be useful if the system is slow, and you just want to
manually expand a few abbrevs. M-' (^R Word Abbrev Prefix Mark)
allows you to "glue" an abbrev onto any prefix: suppose you have
the abbrev "comm" for "committee", and wish to insert
"intercommittee "; type "inter", M-' (you will now see "inter-"),
and then "comm "; "inter-comm " becomes "intercommittee ". M-X
Expand Word Abbrevs in Region checks each word in the region and
offers to expand each word abbrev found; for more details see its
self-documentation. (It is similar to the M-X Query Replace
command.)
25.1.3 Unexpanding Abbrevs
C-X U (^R Unexpand Last Word) "unexpands" the last abbrev's
expansion, replacing the last expansion with the abbrev that
caused it. If any auto-filling was done because of the expansion
(you had Auto Fill mode on), that too is undone. If you type
another C-X U, the first one is "undone" and the abbrev is
expanded again. Only the last expansion can be undone.
Sometimes you may find that C-X U unexpands an abbrev later than
the one you're looking at. In this case, do another C-X U and go
back and manually correct the earlier expansion.
If you know beforehand that a word will expand, and want to
prevent it, you can simply "quote" the punctuation character with
C-Q. For example, typing "comm", a C-Q, and then "." gives
"comm." without expanding.
178 EMACS Manual for TWENEX Users
25.1.4 Listing Abbrevs
M-X List Word Abbrevs<cr> shows all currently defined abbrevs.
An abbrev "foo" that expands to "this is an abbrev" in Text mode
and has been expanded 3 times, is listed as:
foo: (Text) 3 "this is an abbrev"
An abbrev "gfoo" which expands to "this is a global abbrev" in
all modes, expanded 11 times, is listed as:
gfoo: 11 "this is a global abbrev"
Note that any use of the double-quote character (") inside an
expansion is doubled, to distinguish the use of " from the "s
that surround the whole expansion. Thus if the global abbrev
'helpc' expands to 'the "Help" character', it is listed as:
helpc: 3 "the ""Help"" character"
25.1.5 Editing the Definition List
M-X Edit Word Abbrevs places you in a recursive editing level,
editing the current word abbrev definition list. The abbrevs
appear in the same format used by M-X List Word Abbrevs. When
you exit (via C-M-Z), the current word abbrevs are redefined from
the edited definition list: any abbrevs that have been deleted
from the list are killed, new ones added to the list are defined,
and old ones changed are modified. In effect, after exiting the
Edit Word Abbrev editing level, all previously-defined word
abbrevs are killed, and the edited list is used to define new
abbrevs. Typing C-] (Abort Recursive Edit) aborts Edit Word
Abbrevs, without killing or redefining any abbrevs.
25.1.6 Saving Abbrev Definitions
M-X Write Word Abbrev File$<filename><cr> writes an "abbrev
definition file" which contains the definitions of all the
abbrevs in your EMACS now. M-X Read Word Abbrev
179 EMACS Manual for TWENEX Users
File$<filename><cr> reads in such a file and defines the abbrevs.
(Other abbrevs already defined are not affected unless the file
redefines them.) If you don't supply a filename, the last file
you used in either of these commands is used again, originally
defaulting to WORDAB.DEFNS. With these two commands, you can
save the abbrevs you defined in one EMACS and restore them in
another EMACS another day. If you want abbrevs to be
automatically saved when you exit EMACS (with C-X C-Z (^R Return
to Superior)), set the option variable Save Word Abbrevs to 1.
(They are saved only if the definitions have changed.)
The format of the definition file is designed for fast loading,
not ease of human readability. (But if you have to, you can
figure it out enough to read or even edit it.) If you want M-X
Write Word Abbrev File to write a human-readable version instead,
set the option Readable Word Abbrev Files to 1. (M-X Read Word
Abbrev File will be able to read this format, but not as fast.)
If you have an EVARS file, you might want to put the following
lines into it in order to turn on Word Abbrev mode, have your
abbrev definition file automatically read when EMACS starts up,
and enable automatic exit-saving:
*: 1 MM Word Abbrev Mode$
*: MM Read Word Abbrev File$WORDAB.DEFNS$
Save Word Abbrevs:1
Or if you have an init file, use the following Teco code:
1 MM Word Abbrev Mode$
MM Read Word Abbrev File$WORDAB.DEFNS$
1u$Save Word Abbrevs$
25.2 Advanced Usage
The use of Word Abbrev mode as discussed in the previous
section suffices for most users. However, some users who use
Word Abbrev mode a lot or have highly tailored environments may
desire more flexibility or need more power to handle extreme
situations than the basic commands provide.
180 EMACS Manual for TWENEX Users
25.2.1 Alternatives and Customizations
M-X Make Word Abbrev$<abbrev>$<expansion>$<mode><cr>
M-X Kill All Word Abbrevs<cr>
M-X Make These Characters Expand$<characters><cr>
M-X Attach Word Abbrev Keyboard Macro
^R Kill Mode Word Abbrev
^R Kill Global Word Abbrev
Only Global Abbrevs
Set this option if you only use globals.
Additional Abbrev Expanders
Variable for adding a few more expanders.
WORDAB Ins Chars
Variable for replacing entire set of expanders.
The basic commands for defining a new mode abbrev, C-X C-A (^R
Add Mode Word Abbrev) and C-X C-H (^R Inverse Add Mode Word
Abbrev), work only in the current mode. A more general command
is M-X Make Word Abbrev which takes three string arguments: the
first is the abbrev, the second is the expansion, and the third
is the mode (such as "Text"). This command can also define
global abbrevs, by providing "*" as the mode name.
M-X Kill All Word Abbrevs<cr> is a very quick way of killing
every abbrev currently defined. After this command, no abbrev
will expand. (A slower but more careful way is with M-X Edit
Word Abbrevs.)
The functions ^R Kill Mode Word Abbrev and ^R Kill Global Word
Abbrev exist, but are not connected to any commands by default.
If you find having to specify negative arguments to C-X C-A
(^R Add Mode Word Abbrev) and C-X + (^R Add Global Word Abbrev)
inconvenient, you should connect these functions to commands.
(See section 5.2 [Set Key], page 23. Or See section 22.6 [Init],
page 144.)
If you prefer to use only global abbrevs then you should set
the option variable Only Global Abbrevs to 1. You can do this
after or before turning on Word Abbrev mode; it makes no
181 EMACS Manual for TWENEX Users
difference. This causes the global abbrev definers which would
otherwise be on C-X + (^R Add Global Word Abbrev) and C-X -
(^R Inverse Add Global Word Abbrev) to be on the easier to type
characters C-X C-A and C-X C-H. In addition, the checking done
whenever you type an expander character (a punctuation character)
is about three times faster for the no-expansion case, which is
what happens most of the time.
Normally, the following characters cause expansion (followed by
whatever they would normally do were Word Abbrev mode off; such
as, insert themselves): !~@#;$%^&*-_=+[]()\|:`"{},<.>'/? and
Space, Return, Linefeed, and Tab. You can, however, specify
additional characters to cause expansion (digits, for instance,
or greek letters on keyboards with Top-keys). M-X Make These
Characters Expand$<characters><cr> adds the characters in the
string argument to the list of expanders. Alternatively, you can
set the variable Additional Abbrev Expanders to contain the
string of characters. (This is particularly useful in an init or
EVARS file.) If you wish to completely replace the set of
characters that cause expansion, set the variable WORDAB Ins
Chars in your init file. See section 22.6 [init], page 144, for
details on setting variables in init and EVARS files.
25.2.2 Manipulating Definition Lists
One reason you might want to manipulate the definition lists is
to provide more structure to the definition environment than just
the mode vs. global structure provided normally, such as to group
together in a file those abbrevs pertaining to one topic.
M-X Insert Word Abbrevs<cr> inserts into the buffer a list of
the current word abbrev definitions, in the format that M-X List
Word Abbrevs uses. M-X Insert Word Abbrevs$<string><cr> inserts
some of the abbrevs' definitions; See section 25.2.3 [Many
Abbrevs], page 182, for details.
M-X Define Word Abbrevs<cr> defines a set of word abbrevs from
a definition list in the buffer. There should be nothing else
besides the definition list in the buffer; or, if there is, you
must narrow the buffer to just the definition list. See
section 17 [Narrowing], page 93.
182 EMACS Manual for TWENEX Users
25.2.3 Dealing with Many Abbrevs
Some users build up a very large number of abbrevs. This
causes a couple of problems: First, defining all those abbrevs
when EMACS starts up can become too slow; this problem is
discussed in the next section. Second, the commands that deal
with the entire definition list become unwieldy.
M-X List Word Abbrevs$<string><cr> shows you the definitions of
just the abbrev definitions containing <string> (in the abbrev,
in the mode, or in the expansion). The argument is actually a
TECO search string (See section 19.3 [TECO search strings],
page 101.). If you want to see the abbrevs which contain either
<string1> or <string2>, separate the strings with a ^O; to see
abbrev definitions containing either "defn" or "wab", do M-X List
Word Abbrevs$defn^Owab<cr>.
You can provide M-X List Word Abbrevs with an argument to
control whether the filtering string applies to just the abbrev
(C-U 1), just the expansion (C-U 2), just the mode (C-U 4), or
any combination (the sum). C-U 3 M-X List Word Abbrevs$lisp<cr>
will match "lisp" against abbrevs and expansions, but not modes.
M-X Insert Word Abbrevs$<string><cr> works similarly, but
inserts the list into the buffer instead of typing it out.
25.2.4 Dumped EMACS Environments
M-X Write Word Abbrev File$<filename><cr>
Writes a file of all abbrev definitions, before
dumping.
M-X Read Word Abbrev File$<filename><cr>
Reads file of abbrev definitions at init-time.
M-X Write Incremental Word Abbrev File$<filename><cr>
Writes a file of abbrev definitions changed since
dumping.
M-X Read Incremental Word Abbrev File$<filename><cr>
Reads file of changed abbrev definitions at
startup-time.
Some users with highly customized EMACS environments (their
init files take a long time to run) "dump out" their
183 EMACS Manual for TWENEX Users
environments, in effect creating another EMACS-like program (the
"dump") which starts up much faster. (For instance, 1.7 cpu
seconds instead of 70.5 cpu seconds. See the file
INFO:MKDUMP.INFO, for details about a simple method of dumping
environments. See the file INFO:CONV.INFO, for details about
more general environment dumping.) Since the dumped environment
contains word abbrev definitions, a dumped environment with
hundreds of abbrevs can start just as quickly as if it had none.
(But reading all these abbrevs with M-X Read Word Abbrev File in
the init file originally took a long time.) For these users it
is important, at dump-startup time, to read in only those abbrevs
which were changed or defined since the environment was dumped
out. A file which contains only these new abbrev's definitions
is called an incremental word abbrev file. (It also can specify
that certain abbrevs are to be killed if they were defined when
the environment was dumped out, but subsequently killed.)
The startup for the dump should use the Read Incremental Word
Abbrev File function instead of Read Word Abbrev File. It takes
the filename as a string argument, which defaults to INCABS..0.
The command M-X Write Incremental Word Abbrev File$<filename><cr>
writes such a file, writing out those abbrevs more recent than
the dump (ones read by Read Incremental Word Abbrev File and ones
defined in the current editing session).
Setting Save Word Abbrevs to -1 will cause an incremental
abbrev file to be automatically written, if necessary, when EMACS
is exited.
When you want to dump out a new EMACS, first create a new,
complete word abbrev definition file using M-X Write Word Abbrev
File. This file now has all abbrevs in it, and you can thus
delete any incremental definition files you have. Then start up
the new EMACS from scratch, using the init file, and dump it.
(The init file in general should call Read Word Abbrev File and
then also call Read Incremental Word Abbrev File, just in case
there are both kinds of files around. The startup calls only
Read Incremental Word Abbrev File.) Note that these functions
will return without error if their files don't exist, as a
convenience.
25.3 Teco Details for Extension Writers
This section documents some details that users programming
extensions may need to know, in order to interact properly with
Word Abbrev mode operation or to build upon it.
184 EMACS Manual for TWENEX Users
The variable WORDAB Setup Hook, if non-0, is executed when the
WORDAB library is loaded and sets itself up. (M-X Word Abbrev
Mode<cr> in the default EMACS environment auto-loads the WORDAB
library.) If there is no hook, the normal key connections (C-X
C-A, C-X U, etc.) are made; if there is a hook, it must do the
connections.
The variable Word Abbrevs Modified is non-0 when abbrev
definitions have changed. This is used to signal the
abbrev-saving mechanism.
The abbrev definers, such as C-X C-A (^R Add Mode Word Abbrev),
check to see if the volatile TECO mark, FS ^R Mark$, is set; if
it is, then the region between point and FS ^R Mark$ is used as
the expansion. The intention is to provide a mechanism for
simple but safe expansion marking. See section 22.5 [FS Flags],
page 143.
Finally, the general way that Word Abbrev mode works is this:
at certain times, when characters are likely to have been
reconnected, a Word Abbrev mode subroutine looks at each of the
expander characters to see if they are running an expander or
have been reconnected. If they don't have expanders, they are
connected to an expander function (which first checks for
expansion and then calls the "old" function, what the character
was connected to before). The problem is that it is not really
possible to efficiently catch all the times that characters of
interest are reconnected. So, as a good guess, Word Abbrev mode
looks at these characters when the & Set Mode Line function is
called. This happens when major or minor modes change, when
buffer switching happens, and when Set Key is used. These are
the standard times that connections are changed. However, the
extension writer must be careful about reconnecting expander
characters. If an extension might do this, it should do 1FS Mode
Change$ to cause expansions to be redefined.
185 EMACS Manual for TWENEX Users
CHAPTER TWENTY-SIX
THE PICTURE SUBSYSTEM, AN EDITOR FOR TEXT PICTURES
If you want to create a picture made out of text characters
(for example, a picture of the division of a register into
fields, as a comment in a program), the PICTURE package can make
it easier.
Do M-X Load Lib$PICTURE<cr>, and then M-X Edit Picture is
available. Do M-X Edit Picture with point and mark surrounding
the picture to be edited. Edit Picture enters a recursive
editing level (which you exit with C-M-Z, as usual) in which
certain commands are redefined to make picture editing more
convenient.
While you are inside Edit Picture, all the lines of the picture
are padded out to the margin with spaces. This makes
two-dimensional motion very convenient; C-B and C-F move
horizontally, and C-N and C-P move vertically without the
inaccuracy of a ragged right margin. When you exit from Edit
Picture, spaces at the ends of lines are removed. Nothing stops
you from moving outside the bounds of the picture, but if you
make any changes there slightly random things may happen.
Edit Picture makes alteration of the picture convenient by
redefining the way printing characters and Rubout work. Printing
characters are defined to replace (overwrite) rather than
inserting themselves. Rubout is defined to undo a printing
character: it replaces the previous character with a space, and
moves back to it.
Return is defined to move to the beginning of the next line.
This makes it usable for moving to the next apparently blank (but
actually filled with nothing but spaces) line, just as you use
Return normally with lines that are really empty. C-O creates
new blank lines after point, but they are created full of spaces.
Tab is redefined to indent (by moving over spaces, not
inserting them) to under the first non-space on the previous
line. Linefeed is as usual equivalent to Return followed by Tab.
Four movement-control commands exist to aid in drawing vertical
or horizontal lines: If you give the command M-X Up Picture
Movement, each character you type thereafter will cause the
cursor to move up instead of to the right. Thus if you want to
draw a line of dashes up to some point, you can give the command
Up Picture Movement, type enough dashes to make the line, and
186 EMACS Manual for TWENEX Users
then give the command Right Picture Movement to put things back
to normal. Similarly, there are functions to cause downward and
leftward movement: Down Picture Movement and Left Picture
Movement. These commands remain in effect only until you exit
the Edit Picture function, (One final note: you can use these
cursor movement commands outside of Edit Picture too, even when
not in Overwrite mode. You have to be somewhat careful though.)
Possible future extensions include alteration of the kill and
un-kill commands to replace instead of deleting and inserting,
and to handle rectangles if two corners are specified using point
and the mark.
The DRAW library is a user-contributed library containing other
commands useful for editing pictures.
187 EMACS Manual for TWENEX Users
CHAPTER TWENTY-SEVEN
SORTING FUNCTIONS
The SORT library contains functions called Sort Lines, Sort
Paragraphs and Sort Pages, to sort the region alphabetically line
by line, paragraph by paragraph or page by page. For example,
Sort Lines rearranges the lines in the region so that they are in
alphabetical order.
Paragraphs are defined in the same way as for the
paragraph-motion functions (See section 11.2 [Paragraphs],
page 55.) and pages are defined as for the page motion commands
(See section 18 [Pages], page 94.). All of these functions can
be undone by the Undo command (See section 24.3 [Undo],
page 164.). A numeric argument tells them to sort into reverse
alphabetical order.
You can rearrange pages to any way you like using the functions
Make Page Permutation Table and Permute Pages From Table. Make
Page Permutation Table starts you editing a table containing the
first line of each page. This table is kept in a buffer named
*Permutation Table*. You specify the new ordering for the pages
by rearranging the first lines into the desired order. You can
also omit or duplicate pages by omitting or duplicating the
lines.
When you are finished rearranging the lines, use Permute Pages
From Table to rearrange the entire original file the same way.
Reselect the original buffer first. The permuted version is
constructed in a buffer named *Permuted File*. The original
buffer is not changed. You can use Insert Buffer to copy the
data into the original buffer.
188 EMACS Manual for TWENEX Users
APPENDIX I
PARTICULAR TYPES OF TERMINALS
I.1 Ideal Keyboards
An ideal EMACS keyboard can be recognized because it has a
Control key and a Meta key on each side, with another key labeled
Top above them.
On an ideal keyboard, to type any character in the 9-bit
character set, hold down Control or Meta as appropriate while
typing the key for the rest of the character. To type C-M-K,
type K while holding down Control and Meta.
The "bit prefix" characters that you must use on other
terminals are also available on terminals with Meta keys, in case
you find them more convenient or get into habits on those other
terminals.
To type numeric arguments on these keyboards, type the digits
or minus sign while holding down either Control or Meta.
I.2 Keyboards with an "Edit" key
Keyboards with Edit keys probably belong to Datamedia or
Teleray terminals. The Edit and Control keys are a pair of shift
keys. Use the Control key to type Control characters and the
Edit key to type Meta characters. Thus, the 9-bit EMACS
character C-M-Q is typed by striking the "Q" key while holding
down "Edit" and "Control".
While the Edit key is a true independent bit which can be
combined with anything else you can type, the Control key really
means "ASCII control". Thus, the only Control characters you can
type are those which exist in ASCII. This includes C-A, C-B, C-D
through C-Z, C-], C-@, C-\, and C-^. C-C can be typed on the
terminal but it is intercepted by the operating system and
therefore unavailable as EMACS command. C-[ is not available
because its spot in ASCII is pre-empted by Altmode. The
corresponding Control-Meta commands are also hard to type. If
you can't type C-; directly, then you also can't type C-M-;
directly.
189 EMACS Manual for TWENEX Users
Though you can't type C-; directly, you can use the bit prefix
character C-^ and type C-^ ;. Similarly, while you can't type
C-M-;, you can use the Control-Meta prefix C-Z and type C-Z ;.
Because C-^ is itself awkward, we have designed the EMACS command
set so that the hard-to-type Control (non-Meta) characters are
rarely needed.
To type numeric arguments, it is best to type the digits or
minus sign while holding down the Edit key.
I.3 ASCII Keyboards
An ASCII keyboard allows you to type in one keystroke only the
command characters with equivalents in ASCII. No Meta characters
are possible, and not all Control characters are possible either.
The Control characters which you can type directly are C-A, C-B,
C-D through C-Z, C-], C-@, C-\, and C-^. C-C can be typed on the
terminal but it is intercepted by the operating system and
therefore unavailable as EMACS command. C-[ is not available
because its spot in ASCII is pre-empted by Altmode.
Those characters which you can't type directly can be typed as
two character sequences using the bit prefix characters Altmode,
C-Z and C-^. Altmode turns on the Meta bit of the character that
follows it. Thus, M-A can be typed as Altmode A, and C-M-A as
Altmode C-A. Altmode can be used to get almost all of the
characters that can't be typed directly. C-Z can be used to type
any Control-Meta character, including a few that Altmode can't be
used for because the corresponding non-Meta character isn't on
the keyboard. Thus, while you can't type C-M-; as Altmode
Control-;, since there is no Control-; in ASCII, you can type
C-M-; as C-Z ;. The Control (non-Meta) characters which can't be
typed directly require the use of C-^, as in C-^ < to get the
effect of C-<. Because C-^ by itself is hard to type, the EMACS
command set is arranged so that most of these non-ASCII Control
characters are not very important. Usually they have synonyms
which are easier to type. In fact, in this manual only the
easier-to-type forms are usually mentioned.
On ASCII keyboards, you can type a numeric argument by typing
an Altmode followed by the minus sign and/or digits. Then comes
the command for which the argument is intended. For example,
type Altmode 5 C-N to move down five lines. If the command is a
Meta command, it must have an Altmode of its own, as in Altmode 5
Altmode F to move forward five words.
190 EMACS Manual for TWENEX Users
Note to customizers: this effect requires redefining the
Meta-digit commands, since the Altmode and the first digit amount
to a Meta-digit character. The new definition is ^R Autoarg, and
the redefinition is done by the default init file.
If you use numeric arguments very often, and you dislike having
to start one with an Altmode, you might enjoy using Autoarg mode,
in which you can specify a numeric argument by just typing the
digits. See section 4 [Arguments], page 18, for details.
I.4 Specifying Terminal Type
To make the EMACS display work properly, you must specify
somehow what sort of terminal you are using, because each brand
of display terminal requires different control codes. The best
way to do this is to tell EXEC, if your terminal is a type that
EXEC knows about. Otherwise, you must tell EMACS itself.
To tell EXEC your terminal type, use the TERMINAL TYPE command.
Type "?" after that command to see the alternatives. Then type
the alternative which is right, if one of them is. Your terminal
may not actually be one of those types, but may still be
compatible with one. If it is compatible in command codes but
its screen width or height is not the same, you must specify them
with the TERMINAL HEIGHT and TERMINAL WIDTH commands.
If EXEC does not know a terminal compatible with yours, you
must tell EMACS yourself. Use the M-X Set Terminal Type command,
with a string argument which is an EMACS terminal type name. Do
M-X List Library$TRMTYP
to see a list of the EMACS terminal type names and their
meanings. Even though you set the terminal type explicitly, the
screen width and height are still obtained from the system, so
you must use the EXEC commands TERMINAL HEIGHT and TERMINAL WIDTH
to specify them, even though you cannot tell EXEC the terminal
type.
Restarting EMACS as an emergency abort does not forget the
settings you have established with Set Terminal Type, because if
the system reports the same information as before, and EMACS
knows that you overrode the system before, it continues to obey
your Set Terminal Type rather than the system's terminal type.
191 EMACS Manual for TWENEX Users
I.4.1. More Advanced Terminal Options
If your terminal is not precisely compatible with what you
specified, you may need to turn off the use of some terminal
features that don't work right. This is done by setting several
FS flags. See section 22.5 [FS Flags], page 143.
The flag FS I&D CHAR$ controls the use of the insert and delete
character operations. They are used if it is nonzero. The flag
FS I&D Line$ controls use of insert and delete line operations.
They are used if the flag is positive. If the flag is negative,
then region-scrolling operations are used instead. These flags
are set automatically according to the terminal type specified,
and reflect what is expected to work on that type of terminal.
You need to change them only if your terminal does not really
handle what it is supposed to.
FS TTYFCI$ controls whether EMACS thinks you have a Meta key.
It should be negative for terminals which have ideal keyboards,
and positive for terminals with a Meta key which encode it as the
200 bit in an 8-bit character. Frequently terminals of the same
model differ in whether they have a Meta key.
You can specify the terminal type code number explicitly by
giving an argument to FS TTY INIT$. This is how Set Terminal
Type works. You can specify the terminal width explicitly by
setting FS WIDTH$.
I.4.2. Padding and Flow Control
EMACS normally turns off page mode, and causes the system to
treat the input characters ^S and ^Q as ordinary input instead of
stopping and starting output. This is so that they can be used
as commands. Then EMACS pads output so as to try to prevent the
terminal from ever generating ^S and ^Q for flow control. If
this does not work, you need to fiddle around until it does.
FS PAD CHR$ specifies the character used to do padding. 0 and
127 are useful characters to try. If it is negative, actual time
delays are used instead of padding characters. Otherwise
compatible terminals often require different padding. FS OSPEED$
tells EMACS what the speed of the line is, and controls the
amount of padding used. By setting it to a value larger than the
truth you can increase the amount of padding used. The original
value is obtained from the system, but sometimes the system fails
to know the correct value.
192 EMACS Manual for TWENEX Users
If you cannot manage to make padding work well enough to avoid
terminal-generated ^S and ^Q characters, then you may need to
re-enable their use for flow control. Do this by setting FS TTY
PAGE$ nonzero. You will have to do without the C-S and C-Q
commands, though.
I.5 Upper-case-only Terminals
On terminals lacking the ability to display or enter lower case
characters, a special input and output case-flagging convention
has been defined for editing files which contain lower case
characters.
The customary escape convention is that a slash prefixes any
upper case letter; all unprefixed letters are lower case (but see
below for the "lower case punctuation characters"). This
convention is chosen because lower case is usually more frequent
in files containing any lower case at all. Upper case letters
are displayed with a slash ("/") in front. Typing a slash
followed by a letter is a good way to insert an upper case
letter. Typing a letter without a slash inserts a lower case
letter. For the most part, the buffer will appear as if the
slashes had simply been inserted (type /A and it inserts an upper
case A, which displays as /A), but cursor-motion commands will
reveal that the slash and the A are really just one character.
Another way to insert an upper-case letter is to quote it with
C-Q.
Note that this escape convention applies only to display of the
buffer and insertion in the buffer. It does not apply to
arguments of commands (it is hardly ever useful for them, since
case is ignored in command names and most commands' arguments).
Case conversion is performed when you type commands into the
minibuffer, but not when the commands are actually executed.
The ASCII character set includes several punctuation characters
whose codes fall in the lower case range and which cannot be
typed or displayed on terminals that cannot handle lower case
letters. These are the curly braces ("{" and "}"), the vertical
bar ("|"), the tilde ("~"), and the accent grave ("`"). Their
upper case equivalents are, respectively, the square brackets
("[" and "]"), the backslash ("\"), the caret ("^"), and the
atsign ("@"). For these punctuation characters, EMACS uses the
opposite convention of that used for letters: the ordinary, upper
case punctuations display as and are entered as themselves, while
the lower case forms are prefixed by slashes. This is because
193 EMACS Manual for TWENEX Users
the "lower case" punctuations are much less frequently used. So,
to insert an accent grave, type "/@".
When the slash escape convention is in effect, a slash is
displayed and entered as two slashes.
This slash-escape convention is not normally in effect. To
turn it on, the TECO command -1$ (minus one dollar sign, not
Altmode!) must be executed. The easiest way to do this is to use
the minibuffer: Altmode Altmode -1$ Altmode Altmode. To turn
off the escape convention (for editing a file of all upper case),
the command is 0$ (zero dollar sign), or Altmode Altmode 0$
Altmode Altmode. If you use such a bad terminal frequently, you
can define yourself an EMACS extension, a command to turn
slash-escape on and off.
The lower case editing feature is actually more flexible than
described here. Refer to the TECO commands F$ (dollar sign) and
FS CASE$, using M-X TECDOC, for full details. See section 22.5
[FS Flags], page 143.
I.6 The SLOWLY Package for Slow Terminals
The SLOWLY library is intended as an aid for people using
display terminals at slow speeds. It provides means of limiting
redisplay to smaller parts of the screen, and for turning off
redisplay for a time while you edit.
To use SLOWLY, do M-X Load Library$SLOWLY<cr>, and if your
terminal is a display operating at 1200 baud or less (or if its
speed is unknown) SLOWLY will set up the commands described here.
Comments, bugs, and suggestions via Arpanet mail to RWK@MIT-MC,
or by US mail or phone to the author of this manual.
I.6.1. Brief Description
SLOWLY provides an alternate version of the incremental
searching commands on C-S and C-R, ^R Edit Quietly on C-X Q, a
way to shrink the screen at either the top or the bottom on M-O,
and more flexibility in where minibuffers get displayed. If
SLOWLY is loaded, it redefines these commands only if the
terminal speed is 1200 baud or less.
194 EMACS Manual for TWENEX Users
I.6.2. SLOWLY Commands
The commands provided are:
M-O (^R Set Screen Size)
This function reduces the amount of the screen
used for displaying your text, down to a few
lines at the top or the bottom. If called
without an argument, it will use the same size as
last time (or 3 if it hasn't been called before).
If given a positive argument, that is taken to be
the number of lines to use at the top of the
screen. If given a negative argument, it is
taken to be the number of lines at the bottom of
the screen. If given an argument of 0, it
returns to the use of the entire screen. The
section of the screen that is in use is
(defaultly) delimited by a line of 6 dashes.
This command sets the variable Short Display
Size.
C-S (^R Slow Display I-Search)
This function is just like the usual incremental
search, except if the search would run off the
screen and cause a redisplay, it narrows the
screen to use only a few lines at the top or
bottom of the screen to do the redisplay in.
When the search is exited, use of the full screen
resumes. The size of the window used for the
search is the value of the variable Slow Search
Lines. If it is positive, it is the number of
lines at top of screen; if negative, it is the
number of lines at bottom of screen. The default
is 1. The variable Slow Search Separator
contains the string used to show the end of the
search window. By default it is six dashes. See
section 10 [Search], page 49.
C-R (^R Slow Reverse Display I-Search)
This searches in backwards in the style of ^R
Slow Display I-Search.
C-X Q (^R Edit Quietly)
This function enters a recursive editing level
with redisplay inhibited. This means that your
commands are carried out but the screen does not
change. C-L with no argument redisplays. So you
195 EMACS Manual for TWENEX Users
can update the screen when you want to. Two
C-L's in a row clear the screen and redisplay.
C-L with an argument repositions the window, as
usual (See section 15 [C-L], page 87.). To exit
and resume continuous redisplay, use C-M-Z.
I.6.3. Minibuffers
SLOWLY provides control over how minibuffers display on your
screen. The variable Minibuffer Size specifies how many lines it
takes up. If this is made negative, the minibuffer will appear
at the bottom of the screen instead of the top. Thus one mode of
operation which some people like is to use ^R Set Screen Size to
set up to not use the bottom 3 lines of the screen, and set
Minibuffer Size to -3. This will permanently reserve 3 lines at
the bottom of the screen for the minibuffer. See section 23
[Minibuffer], page 157.
The variable Minibuffer Separator holds the string used to
separate the minibuffer area from the rest of the screen. By
default, this is six dashes.
SLOWLY installs its minibuffer by defining the variable MM &
Minibuffer.
I.6.4. SLOWLY Options
The simplest way to run SLOWLY is to simply load it, and use
the default key assignments, etc. SLOWLY sets up those key
assignments only if your terminal is no faster than 1200 baud.
If you want SLOWLY to not set up these things unless your
terminal is running at 300 baud or slower (ugh!), set the
variable SLOWLY Maximum Speed to the highest speed at which
SLOWLY is desired. Put the following in your EMACS init file:
300 M.VSLOWLY Maximum Speed$
If you don't like the command assignments set up by SLOWLY, you
can override them by defining the variable SLOWLY Setup Hook
before loading SLOWLY. The value should be TECO commands to
define the command assignments you wish.
196 EMACS Manual for TWENEX Users
SLOWLY normally uses lines of six dashes to separate areas of
the screen. You can tell it to use something else instead.
Minibuffers use the value of Minibuffer Separator, searches use
the value of Slow Search Separator. If one of these is
unspecified (the variable does not exist), the value of Default
Separator is used. The separator for small screen mode is always
the value of Default Separator. If the value specified is the
null string, a blank line is used. If the value specified is
zero, nothing (not even a blank line) is used. This is useful
for searches, since you aren't going to be doing any editing in
the search window.
Even though SLOWLY does not redefine the commands on a fast
terminal, you might wish to load it only on slow terminals to
save address space the rest of the time. This can be done in an
init file with
fsospeed$-1200:"g m(m.mLoad Library$)SLOWLY$'
197 EMACS Manual for TWENEX Users
APPENDIX II
USE OF EMACS FROM PRINTING TERMINALS
While EMACS was designed to be used from a display terminal,
you can use it effectively from a printing terminal. You cannot,
however, learn EMACS using one.
All EMACS commands have the same editing effect from a printing
terminal as they do from a display. All that is different is how
they try to show what they have done. EMACS attempts to make the
same commands that you would use on a display terminal act like
an interactive line-editor. It does not do as good a job as
editors designed originally for that purpose, but it succeeds
well enough to keep you informed of what your commands are
accomplishing, provided you know what they are supposed to do and
know how they would look on a display.
The usual buffer display convention for EMACS on a printing
terminal is that the part of the current line before the cursor
is printed out, with the cursor following (at the right position
in the line). What follows the cursor on the line is not
immediately visible, but normally you will have a printout of the
original contents of the line a little ways back up the paper.
For example, if the current line contains the word "FOOBAR", and
the cursor is after the "FOO", just "FOO" would appear on the
paper, with the cursor following it. Typing the C-F command to
move over the "B" would cause "B" to be printed, so that you
would now see "FOOB" with the cursor following it. All
forward-motion commands that move reasonably short distances
print out what they move over.
Backward motion is handled in a complicated way. As you move
back, the terminal backspaces to the correct place. When you
stop moving back and do something else, a linefeed is printed
first thing so that the printing done to reflect subsequent
commands does not overwrite the text you moved back over and
become garbled by it. The Rubout command acts like backward
motion, but also prints a slash over the character rubbed out.
Other backwards deletion commands act like backward motion; they
do not print slashes (it would be an improvement if they did).
One command is different on a printing terminal: C-L, which
normally means "clear the screen and redisplay". With no
argument, it retypes the entire current line. An argument tells
it to retype the specified number of lines around the current
line.
198 EMACS Manual for TWENEX Users
On printing terminals, C-S (^R Incremental Search) does not
print out the context automatically. To see what you have found
at any stage, type C-L. This types out the current line but does
not exit the search. All the normal facilities of incremental
searching are available for finding something else if you had not
found the right place initially.
Unfortunately, EMACS cannot perfectly attain its goal of making
the text printed on the current line reflect the current line in
the buffer, and keeping the horizontal position of the cursor
correct. One reason is that it is necessary for complicated
commands to echo, but echoing them screws up the "display". The
only solution is to type a C-L whenever you have trouble
following things in your mind. The need to keep a mental model
of the text being edited is, of course, the fundamental defect of
all printing terminal editors.
Note: it is possible to make a specific command print on a
printing terminal in whatever way is desired, if that is worth
while. For example, Linefeed knows explicitly how to display
itself, since the general TECO redisplay mechanism isn't able to
handle it. Suggestions for how individual commands can display
themselves are welcome, as long as they are algorithmic rather
than simply of the form "please do the right thing".
199 EMACS Manual for TWENEX Users
GLOSSARY
Aborting Aborting a recursive editing level (q.v.) means
canceling the command which invoked the recursive
editing. For example, if you abort editing a
message to be sent, the message is not sent.
Aborting is done with the command C-]. See
section 24.1 [Aborting], page 160.
Altmode Altmode is a character, labelled Escape on some
keyboards. It is the bit prefix character (q.v.)
used to enter Meta-characters when the keyboard
does not have a Meta (q.v.) key. See section 2
[Characters], page 9. Also, it delimits string
arguments to extended commands. See section 5
[Extended Commands], page 20.
Balance Parentheses
EMACS can balance parentheses manually or
automatically. You can ask to move from one
parenthesis to the matching one. See
section 20.6.1 [Lists], page 111. When you
insert a close parenthesis, EMACS can show the
matching open. See section 20.4 [Matching],
page 106.
Bit Prefix Character
A bit prefix character is a command which
combines with the next character typed to make
one character. They are used for effectively
typing commands which the keyboard being used is
not able to send. For example, to use a
Meta-character when there is no Meta key on the
keyboard, the bit prefix character Altmode (q.v.)
is needed. See section 2 [Characters], page 9.
Buffer The buffer is the basic editing unit; one buffer
corresponds to one piece of text being edited.
You can have several buffers, but at any time you
are editing only one, the "selected" buffer,
though two can be visible when you are using two
windows. See section 14 [Buffers], page 83.
C- C is an abbreviation for Control, in the name of
a character. See section 2 [Characters], page 9.
C-M- C-M- is an abbreviation for Control-Meta, in the
200 EMACS Manual for TWENEX Users
name of a character. See section 2 [Characters],
page 9.
Comment A comment is text in a program which is intended
only for humans reading the program, and is
marked specially so that the compiler will ignore
it. EMACS offers special commands for creating
and killing comments. See section 20.5
[Comments], page 107.
Command A command is a character or sequence of
characters which, when typed by the user, fully
specifies one action to be performed by EMACS.
For example, "X" and "Control-F" and "Meta-X Text
Mode<cr>" are commands. See section 2
[Characters], page 9. Sometimes the first
character of a multi-character command is also
considered a command: M-X Text Mode<cr> is a
command (an extended command), and M-X is also a
command (a command to read a function name and
invoke the function). See section 5 [Extended
Commands], page 20.
Completion Completion is what EMACS does when it
automatically fills out the beginning of an
extended command name into the full name, or as
much of it as can be deduced for certain.
Completion occurs when Altmode, Space or Return
is typed. See section 5 [Extended Commands],
page 20.
Connected A character command in EMACS works by calling a
function which it is "connected" to.
Customization often involves connecting a
character to a different function. See "Dispatch
table". See section 2 [Characters], page 9.
Continuation Line
When a line of text is longer than the width of
the screen, it is displayed on more than one line
of screen. We say that the line is continued,
and that all screen lines used but the first are
called continuation lines. See section 3 [Basic
Editing], page 14.
Control Control is the name of a bit which each command
character does or does not contain. A
character's name includes the word Control if the
Control bit is part of that character. Ideally,
201 EMACS Manual for TWENEX Users
this means that the character is typed using the
Control key: Control-A is typed by typing "A"
while holding down Control. On most keyboards
the Control key works in only some cases; the
rest of the time, a bit prefix character (q.v.)
must be used. See section 2 [Characters],
page 9.
Control-Character
A Control character is a character which includes
the Control bit.
Control-X Command
A Control-X command is a two-character command
whose first character is the prefix character
Control-X. See section 2 [Characters], page 9.
<cr> <cr> stands for the carriage return character, in
contexts where the word "Return" might be
confusing. See section 2 [Characters], page 9.
CRLF CRLF stands for the sequence of two characters,
carriage return followed by linefeed, which is
used to separate lines in files and in text being
edited in EMACS. See section 2 [Characters],
page 9.
Cursor The cursor is the object on the screen which
indicates the position called point (q.v.) at
which insertion and deletion takes place. The
cursor is part of the terminal, and often blinks
or underlines the character where it is located.
See section 1 [Screen], page 5.
Customization Customization is making minor changes in the way
EMACS works. It is often done by setting
variables (See section 22.3 [Variables],
page 138.) or by reconnecting commands (See
section 5.2 [Functions], page 23.).
Defun A defun is a list at the top level of list
structure in a Lisp program. It is so named
because most such lists are calls to the Lisp
function defun. See section 20.6.2 [Defuns],
page 115.
Delete This is the label used on some keyboards for the
Rubout character.
202 EMACS Manual for TWENEX Users
Deletion Deletion means erasing text without saving it.
EMACS deletes text only when it is expected not
to be worth saving (all whitespace, or only one
character). The alternative is killing (q.v.).
See section 9.1 [Killing], page 42.
Dispatch Table The dispatch table is what records the
connections (q.v.) from command characters to
functions. Think of a telephone switchboard
connecting incoming lines (commands) to
telephones (functions). A standard EMACS has one
set of connections; a customized EMACS may have
different connections. See section 5.2
[Functions], page 23.
Echo Area The echo area is the bottom three lines of the
screen, used for echoing the arguments to
commands, for asking questions, and printing
brief messages. See section 1 [Screen], page 5.
Echoing Echoing is acknowledging the receipt of commands
by displaying them (in the echo area). Most
programs other than EMACS echo all their
commands. EMACS never echoes single-character
commands; longer commands echo only if you pause
while typing them.
Error Messages Error messages are single lines of output printed
by EMACS when the user or a TECO program asks for
something impossible. They appear at the top of
the screen and end with a question mark.
Escape Escape is the label used on some keyboards for
the Altmode character.
Exiting Exiting EMACS means returning to EMACS's
superior, normally EXEC. See section 6.3
[Exiting], page 29. Exiting a recursive editing
level (q.v.) means allowing the command which
invoked the recursive editing to complete
normally. For example, if you are editing a
message to be sent, and you exit, the message is
sent.
Extended Command
An extended command is a command which consists
of the character Meta-X followed by the command
name (really, the name of a function (q.v.)). An
extended command requires several characters of
203 EMACS Manual for TWENEX Users
input, but its name is made up of English words,
so it is easy to remember. See section 5
[Extended Commands], page 20.
Extension Extension means making changes to EMACS which go
beyond the bounds of mere customization. If
customization is moving the furniture around in a
room, extension is building new furniture. See
the file INFO:CONV.INFO.
Filling Filling text means moving text from line to line
so that all the lines are approximately the same
length. See section 11.4 [Filling], page 59.
Function A function is a named subroutine of EMACS. When
you type a command, EMACS executes a function
which corresponds to the command, and the
function does the work. Character commands are
connected to functions through the dispatch table
(q.v.). Extended commands contain the name of
the function to be called; this allows you to
call any function. See section 5 [Extended
Commands], page 20.
Global The global value of a variable or of a command
character definition applies to all buffers and
all files (except those which have their own
local values of the variable or definition). See
section 22.3 [Variables], page 138.
Grinding Grinding means reformatting a program so that it
is indented according to its structure. See
section 20.7 [Grinding], page 115.
Help You can type the Help character at any time to
ask what options you have, or to ask what any
command does. See section 7 [Help], page 36.
Home Directory Your home directory is the one on which your mail
and your init files are stored. Twenex does not
distinguish this from the working directory
(connected directory).
INFO INFO is the subsystem for perusing
tree-structured documentation files. The
documentation in INFO includes a version of the
EMACS manual.
ITS ITS is the Incompatible Timesharing System
204 EMACS Manual for TWENEX Users
written at the MIT Artificial Intelligence Lab.
EMACS was first developed on this system. Just
what it is incompatible with has changed from
year to year.
Kill Ring The kill ring is where killed text is saved. It
holds the last nine or so blocks of killed text.
It is called a ring because you can bring any of
the saved blocks to the front by rotating the
ring. See section 9.2 [Un-Killing], page 44.
Killing Killing means erasing text and saving it inside
EMACS to be recovered later if desired. Most
EMACS commands to erase text do killing, as
opposed to deletion (q.v.). See section 9.1
[Killing], page 42.
List A list is, approximately, a text string beginning
with an open parenthesis and ending with the
matching close parenthesis. See section 20.6.1
[Lists], page 111. Actually there are a few
complications to the syntax, which is controlled
by the syntax table (See section 22.4 [Syntax],
page 140.).
Local A local value of a variable or of a command
character definition applies to only one buffer
or file. See section 22.7 [Locals], page 151.
Local Modes List
A local modes list appears in a file to specify
local values for variables or command character
definitions, to be in effect while visiting that
file.
M- M- in the name of a character is an abbreviation
for Meta.
M-X M-X is the character which begins an extended
command (q.v.). Extended commands have come to
be known also as "M-X commands", and an
individual extended command is often referred to
as "M-X such-and such". See section 5 [M-X],
page 20.
Major Mode The major modes are a mutually exclusive set of
options which configure EMACS for editing a
certain sort of text. Ideally, each programming
language has its own major mode. See
section 20.1 [Major Modes], page 102.
205 EMACS Manual for TWENEX Users
Mark The mark points, invisibly, to a position in the
text. Many commands operate on the text between
point and the mark (known as the region, q.v.).
See section 8 [Mark], page 39.
Meta Meta refers to the Meta key. A character's name
includes the word Meta if the Meta key must be
held down in order to type the character. If
there is no Meta key, then the Altmode character
is used as a prefix instead. See section 2
[Characters], page 9.
Meta Character A Meta character is one whose character code
includes the Meta bit. These characters can be
typed only by means of a Meta key or by means of
the metizer command (q.v.).
Metizer The metizer is another term for the bit prefix
character for the Meta bit; namely, Altmode
(q.v.).
Minibuffer The minibuffer is a facility for editing and then
executing a TECO program. See section 23
[Minibuffer], page 157.
Minor mode A minor mode is an optional feature of EMACS
which can be switched on or off independently of
all other features. Each minor mode is both the
name of an option (q.v.) and the name of an
extended command to set the option. See
section 22.1 [Minor Modes], page 134.
MM-command This is an obsolete synonym for "extended
command".
Mode line The mode line is a line just above the echo area
(q.v.), used for status information. See
section 1.1 [Mode Line], page 6.
Narrowing Narrowing means limiting editing to only a part
of the text in the buffer. Text outside that
part is inaccessible to the user until the
boundaries are widened again, but it is still
there, and saving the file saves it all. See
section 17 [Narrowing], page 93.
Node The node is the unit of structure of INFO (q.v.)
files. When referring to documentation contained
only in INFO files, we sometimes refer to a node
206 EMACS Manual for TWENEX Users
of a specific name, in a specific file, as in
"See the file INFO:CONV.INFO, node Hooks".
Numeric Argument
A numeric argument is a number specified before a
command to change the effect of the command.
Often the numeric argument serves as a repeat
count. See section 4 [Numeric Arguments],
page 18.
Option An option is a variable which exists to be set by
the user to change the behavior of EMACS
commands. This is an important method of
customization. See section 22.3 [Variables],
page 138.
Parse We say that EMACS parses words or expressions in
the text being edited. Really, all it knows how
to do is find the other end of a word or
expression. See section 22.4 [Syntax], page 140.
Point Point is the place in the buffer at which
insertion and deletion occur. Point is
considered to be between two characters, not at
one character. The terminal's cursor (q.v.)
indicates the location of point. See section 3
[Basic], page 14.
Prefix Character
A prefix character is a command whose sole
function is to introduce a set of multi-character
commands. Control-X (q.v.) is a prefix
character. The bit prefix characters (q.v.) are
other examples.
Prompt A prompt is text printed in the echo area to ask
the user for input. Printing a prompt is called
"prompting". EMACS can prompt when a command
requires an argument, or when only part of a
command has been typed. However, the prompt will
not appear unless you pause in your typing. See
section 5 [Extended Commands], page 20.
Q-Registers Q-registers are internal TECO variables which can
be used by EMACS or by the user to store text or
numbers. See section 9.3.2 [Q-Registers],
page 48.
Quitting Quitting means interrupting a command which is
207 EMACS Manual for TWENEX Users
partially typed in or already executing. It is
done with Control-G. See section 24.1
[Quitting], page 160.
Quoting Quoting means depriving a character of its usual
special significance. It is usually done with
Control-Q. What constitutes special significance
depends on the context and on convention. For
example, an "ordinary" character as an EMACS
command inserts itself; so you can insert any
other character, such as Rubout, by quoting it as
in Control-Q Rubout. Not all contexts allow
quoting. See section 3 [Basic Editing], page 14.
Recursive Editing Level
A recursive editing level is a state in which
part of the execution of a command involves
asking the user to edit some text. This text may
or may not be the same as the text to which the
command was applied. The mode line indicates
recursive editing levels with square brackets
("[" and "]"). See section 6.2 [Recursive
Editing Level], page 28.
Redisplay Redisplay is the process of correcting the image
on the screen to correspond to changes that have
been made in the text being edited. See
section 1 [Screen], page 5.
Region The region is the text between point (q.v.) and
the mark (q.v.). The terminal's cursor indicates
the location of point, but the mark is invisible.
Many commands operate on the text of the region.
See section 8 [Mark], page 39.
Return Return is the carriage return character, used as
input to EMACS. Return is used as a command in
itself to insert a line separator. It also
terminates arguments for most commands. See
section 2 [Characters], page 9.
Rubout Rubout is a character, sometimes labelled
"Delete". It is used as a command to delete one
character of text. It also deletes one character
when an EMACS command is reading an argument.
S-expression An s-expression is the basic syntactic unit of
Lisp: either a list, or a symbol containing no
parentheses (actually, there are a few exceptions
208 EMACS Manual for TWENEX Users
to the rule, based on the syntax of Lisp). See
section 20.6.1 [Lists], page 111.
Selecting Selecting a buffer (q.v.) means making editing
commands apply to that buffer as opposed to any
other. At all times one buffer is selected and
editing takes place in that buffer. See
section 14 [Buffers], page 83.
Self-documentation
Self-documentation is the feature of EMACS which
can tell you what any command does, or give you a
list of all commands related to a topic you
specify. You ask for self-documentation with the
Help character. See section 7 [Help], page 36.
String Argument
A string argument is an argument which follows
the command name in an extended command. In "M-X
Apropos$word<cr>", "Word" is a string argument to
the Apropos command. See section 5 [Extended
Commands], page 20.
Subsystem A subsystem of EMACS is an EMACS command which,
itself, reads commands and displays the results.
Examples are INFO, which is for perusing
documentation; DIRED, which is for editing
directories; BABYL, which is for reading and
editing mail. The word "subsystem" implies that
it offers many independent commands which can be
used freely. If an EMACS function asks specific
questions, we do not call it a subsystem.
Usually the subsystem continues in operation
until a specific command to exit (usually "Q") is
typed. The commands for a subsystem do not
usually resemble ordinary EMACS commands, since
editing text is not their purpose. The Help
character should elicit the subsystem's
documentation. See section 6.1 [Subsystems],
page 27.
Syntax Table The syntax table tells EMACS which characters are
part of a word, which characters balance each
other like parentheses, etc. See section 22.4
[Syntax], page 140.
Tailoring This is a synonym for customization (q.v.).
209 EMACS Manual for TWENEX Users
TECO Search String
A TECO search string is a sort of pattern used by
the TECO search command, and also by various
EMACS commands which use the TECO search command.
See section 19.3 [TECO search strings], page 101.
Top Level Top level is the normal state of EMACS, in which
you are editing the text of the file you have
visited. You are at top level whenever you are
not in a recursive editing level or a subsystem
(q.v.).
Twenex Twenex is the operating system which DEC likes to
call "TOPS-20". However, a person should not be
forced to call a system "tops" unless he really
thinks so. Come now, DEC, don't you think people
will praise your products voluntarily? The name
"Twenex" is also more appropriate because Twenex
was developed from the Tenex system, and has no
relationship to "TOPS-10". What's more, it's
very euphonious.
Typeout Typeout is a message, printed by an EMACS
command, which overwrites the area normally used
for displaying the text being edited, but which
does not become part of the text. Typeout is
used for messages which might be too long to fit
in the echo area (q.v.). See section 1 [Screen],
page 5.
Undo Undo is a command which undoes the effect on the
buffer of a previous command. Only some commands
are undoable and only the most recent undoable
command can be undone. See section 24.3 [Undo],
page 164.
Un-killing Un-killing means reinserting text previously
killed. It can be used to undo a mistaken kill,
or for copying or moving text. See section 9.2
[Un-killing], page 44.
User Name Your user name is the name you use to log in. It
identifies you as opposed to all the other users.
It may be the same as your home directory's name.
Variable A variable is a name with which EMACS associates
a value, which can be a number or a string. See
section 22.3 [Variables], page 138. Some
variables ("options") are intended to be used or
210 EMACS Manual for TWENEX Users
set by the user; others are for purely internal
purposes.
Virtual Boundaries
The virtual boundaries delimit the accessible
part of the buffer, when narrowing (q.v.) is in
effect. See section 17 [Narrowing], page 93.
Visiting Visiting a file means loading its contents into a
buffer (q.v.) where they can be edited. See
section 13.1 [Visiting], page 71.
Wall Chart The wall chart is a very brief EMACS reference
sheet giving one line of information about each
short command.
Whitespace Whitespace is any run of consecutive formatting
characters (space, tab, carriage return,
linefeed, and backspace).
Widening Widening is the operation which undoes narrowing
(q.v.). See section 17 [Narrowing], page 93.
Window A window is a region of the screen in which text
being edited is displayed. EMACS can divide the
screen into two windows. See section 16
[Windows], page 90. "The window" also means the
position in the buffer which is at the top of the
screen. See section 15 [Display], page 87.
Working Directory
This is another term for the directory you are
connected to, a term which is used on other
systems besides Twenex.
Yanking This is a synonym for un-killing (q.v.).
^R The string "^R" is the beginning of many function
names. See section 5.2 [Functions], page 23.
^R Mode ^R mode is the real time editing mode of TECO.
EMACS always operates in this mode.
211 EMACS Manual for TWENEX Users
COMMAND SUMMARY
This summary contains brief descriptions with cross references
for all commands, grouped by topic. Within each topic, they are
in alphabetical order. Our version of alphabetical order places
non-control non-meta characters first, then control characters,
then meta characters, then control-meta characters. Control-X
and Meta-X commands come last. Not all Meta-X commands are
included.
Prefix Characters
Altmode (^R Prefix Meta)
Altmode is a bit prefix character which turns on
the Meta bit in the next character. Thus,
Altmode F is equivalent to the single character
Meta-F, which is useful if your keyboard has no
Meta key. See section 2 [Characters], page 9.
Control-^ (^R Prefix Control)
Control-^ is a bit prefix character which turns
on the Control bit in the following character.
Thus, Control-^ < is equivalent to the single
character Control-<. See section 2 [Characters],
page 9.
Control-Z (^R Prefix Control-Meta)
Control-Z is a bit prefix character which turns
on the Control bit and the Meta bit in the
following character. Thus, Control-Z ; is
equivalent to the single character Control-Meta-;
. See section 2 [Characters], page 9.
Control-Q (^R Quoted Insert)
Control-Q inserts the following character. This
is a way of inserting control characters. See
section 3 [Basic Editing], page 14.
Control-U (^R Universal Argument)
Control-U is a prefix for numeric arguments which
works the same on all terminals. See section 4
[Arguments], page 18.
Control-X
212 EMACS Manual for TWENEX Users
Control-X is a prefix character which begins a
two-character command. Each combination of
Control-X and another character is a "Control-X
command". Individual Control-X commands appear
in this summary according to their uses.
Meta-X (^R Extended Command)
Meta-X is a prefix character which introduces an
extended command name. See section 5 [Meta-X],
page 20.
Control-Meta-X (^R Instant Extended Command)
Control-Meta-X is another way of invoking an
extended command. Instead of putting the
arguments in the same line as the command name,
the command reads the arguments itself. See
section 5 [Meta-X], page 20.
Control-digits, Meta-digits, Control-Meta-digits
These all specify a numeric argument for the next
command. See section 4 [Arguments], page 18.
Control-Minus, Meta-Minus, Control-Meta-Minus
These all begin a negative numeric argument for
the next command. See section 4 [Arguments],
page 18.
Simple Cursor Motion
Control-A (^R Beginning of Line, built-in function)
Control-A moves to the beginning of the line.
See section 3 [Basic Editing], page 14.
Control-B (^R Backward Character, built-in function)
Control-B moves backward one character. See
section 3 [Basic Editing], page 14.
Control-E (^R End of Line, built-in function)
Control-E moves to the end of the line. See
section 3 [Basic Editing], page 14.
Control-F (^R Forward Character, built-in function)
Control-F moves forward one character. See
section 3 [Basic Editing], page 14.
Control-H (^R Backward Character, built-in function)
213 EMACS Manual for TWENEX Users
Control-H moves backward one character. See
section 3 [Basic Editing], page 14.
Control-N (^R Down Real Line)
Control-N moves vertically straight down. See
section 3 [Basic Editing], page 14.
Control-P (^R Up Real Line)
Control-P moves vertically straight up. See
section 3 [Basic Editing], page 14.
Control-R (^R Reverse Search)
Control-R is like Control-S but searches
backward. See section 10 [Search], page 49.
Control-S (^R Incremental Search)
Control-S searches for a string, terminated by
Altmode. It searches as you type. See
section 10 [Search], page 49.
Meta-< (^R Goto Beginning)
Meta-< moves to the beginning of the buffer. See
section 3 [Basic Editing], page 14.
Meta-> (^R Goto End)
Meta-> moves to the end of the buffer. See
section 3 [Basic Editing], page 14.
Control-X Control-N (^R Set Goal Column)
Control-X Control-N sets a horizontal goal for
the Control-N and Control-P commands. When there
is a goal, those commands try to move to the goal
column instead of straight up or down.
Lines
Return (^R CRLF)
Return inserts a line separator, or advances onto
a following blank line. See section 3 [Basic
Editing], page 14.
Control-O (^R Open Line, built-in function)
Control-O inserts a line separator, but point
stays before it. See section 3 [Basic Editing],
page 14.
214 EMACS Manual for TWENEX Users
Meta-= (^R Count Lines Region)
Meta-= prints the number of lines between point
and mark. See section 8 [Mark], page 39.
Control-X Control-O (^R Delete Blank Lines)
Control-X Control-O deletes all but one of the
blank lines around point. If the current line is
not blank, all blank lines following it are
deleted. See section 3 [Basic Editing], page 14.
Control-X Control-T (^R Transpose Lines)
Control-X Control-T transposes the contents of
two lines. See section 12 [Fixing Typos],
page 67.
Killing and Un-killing
Rubout (^R Backward Delete Character, built-in function)
Rubout deletes the previous character. See
section 3 [Basic Editing], page 14.
Control-Rubout (^R Backward Delete Hacking Tabs, built-in
function)
Control-Rubout deletes the previous character,
but converts a tab character into several spaces.
See section 20.6 [Lisp], page 110.
Control-D (^R Delete Character, built-in function)
Control-D deletes the next character. See
section 3 [Basic Editing], page 14.
Control-K (^R Kill Line)
Control-K kills to the end of the line, or, at
the end of a line, kills the line separator. See
section 9.1 [Killing], page 42.
Control-W (^R Kill Region)
Control-W kills the region, the text between
point and the mark. See section 9.1 [Killing],
page 42. See section 8 [Region], page 39.
Control-Y (^R Un-kill)
Control-Y reinserts the last saved block of
killed text. See section 9.2 [Un-Killing],
page 44.
215 EMACS Manual for TWENEX Users
Meta-W (^R Copy Region)
Meta-W saves the region as if it were killed
without removing it from the buffer. See
section 9.2 [Un-Killing], page 44.
Meta-Y (^R Un-kill Pop)
Meta-Y rolls the kill ring to reinsert saved
killed text older than the most recent kill. See
section 9.2 [Un-Killing], page 44.
Control-Meta-W (^R Append Next Kill)
Control-Meta-W causes an immediately following
kill command to append its text to the last saved
block of killed text. See section 9.2
[Un-Killing], page 44.
Control-X G (^R Get Q-reg)
Control-X G inserts in the buffer the contents of
a q-register. See section 9.3.2 [Q-registers],
page 48.
Control-X T (^R Transpose Regions)
Control-X T transposes two arbitrary regions
defined by point and the last three marks. See
section 12 [Fixing Typos], page 67.
Control-X X (^R Put Q-reg)
Control-X X inserts in the buffer the contents of
a q-register. See section 9.3.2 [Q-registers],
page 48.
M-X Overwrite Mode
M-X Overwrite Mode turns Overwrite mode on or
off. In Overwrite mode, printing characters
overwrite existing text instead of pushing it to
the right. See section 22.1 [Minor Modes],
page 134.
Scrolling and Display Control
Control-Alpha (SAIL Character Mode)
Control-Alpha toggles SAIL Character mode. When
this mode is on, control characters in the buffer
are displayed as themselves. See section 1
[Screen], page 5.
216 EMACS Manual for TWENEX Users
Control-L (^R New Window)
Control-L clears the screen and centers point in
it. With an argument, it can put point on a
specific line of the screen. See section 15
[Display], page 87.
Control-V (^R Next Screen)
Control-V scrolls the text upward by a screenful
or several lines. See section 15 [Display],
page 87.
Meta-R (^R Move to Screen Edge)
Meta-R moves point to beginning of the text on a
specified line of the screen. See section 15
[Display], page 87.
Meta-V (^R Previous Screen)
Meta-V scrolls downward by a screenful or several
lines. See section 15 [Display], page 87.
Control-Meta-R (^R Reposition Window)
Control-Meta-R tries to center on the screen the
function or paragraph you are looking at. See
section 15 [Display], page 87.
Control-Meta-V (^R Scroll Other Window)
Control-Meta-V scrolls the other window up or
down, when you are in two window mode. See
section 16 [Windows], page 90.
M-X View Buffer
M-X View Buffer skips through a buffer by
screenfuls. See section 15 [Display], page 87.
M-X View File
M-X View File lets you move through a file
sequentially by screenfuls forward and back. See
section 13.7 [View File], page 81.
The Mark and the Region
Control-Space (^R Set/Pop Mark)
Control-Space sets the mark or moves to the
location of the mark. See section 8 [Mark],
page 39.
217 EMACS Manual for TWENEX Users
Control-< (^R Mark Beginning)
Control-< sets the mark at the beginning of the
buffer. See section 8 [Mark], page 39.
Control-> (^R Mark End)
Control-> sets the mark at the end of the buffer.
See section 8 [Mark], page 39.
Control-@ (^R Set/Pop Mark)
Control-@ sets the mark or moves to the location
of the mark. See section 8 [Mark], page 39.
Meta-@ (^R Mark Word)
Meta-@ puts the mark at the end of the next word.
See section 11.1 [Words], page 53.
Meta-H (^R Mark Paragraph)
Meta-H puts point at the beginning of the
paragraph and the mark at the end. See
section 11.2 [Sentences], page 55.
Control-Meta-@ (^R Mark Sexp)
Control-Meta-@ puts the mark at the end of the
next s-expression. See section 20.6.1 [Lists],
page 111.
Control-Meta-H (^R Mark Defun)
Control-Meta-H puts point at the beginning of the
current Defun and the mark at the end. See
section 20.6.2 [Defuns], page 115.
Control-X H (^R Mark Whole Buffer)
Control-X H puts point at the beginning of the
buffer and the mark at the end. See section 8
[Mark], page 39.
Control-X Control-P (^R Mark Page)
Control-X Control-P puts point at the beginning
of the current page and the mark at the end. See
section 18 [Pages], page 94.
Control-X Control-X (^R Exchange Point and Mark)
Control-X Control-X sets point where the mark was
and the mark where point was. See section 8
[Mark], page 39.
218 EMACS Manual for TWENEX Users
Whitespace and Indentation
Tab (^R Indent According to Mode)
Tab either adjusts the indentation of the current
line or inserts some indentation, in a way that
depends on the major mode. See section 20.3
[Indenting Programs], page 104. See section 11.3
[Indenting Text], page 57.
Linefeed (^R Indent New Line)
Linefeed is equivalent to Return followed by Tab.
It moves to a new line and indents that line. If
done in the middle of a line, it breaks the line
and indents the new second line. See
section 11.3 [Indenting Text], page 57.
Meta-Tab (^R Tab to Tab Stop)
Meta-Tab indents to the next EMACS-defined tab
stop. See section 11.3 [Indenting Text],
page 57.
Meta-M (^R Back to Indentation)
Meta-M positions the cursor on the current line
after any indentation. See section 11.3
[Indenting Text], page 57.
Meta-\ (^R Delete Horizontal Space)
Meta-\ deletes all spaces and tab characters
around point. See section 11.3 [Indenting Text],
page 57.
Meta-^ (^R Delete Indentation)
Meta-^ joins two lines, replacing the indentation
of the second line with zero or one space,
according to the context. See section 11.3
[Indenting Text], page 57.
Control-Meta-O (^R Split Line)
Control-Meta-O breaks a line, preserving the
horizontal position of the second half by
indenting it to its old starting position. See
section 11.3 [Indenting Text], page 57.
Control-Meta-\ (^R Indent Region)
Control-Meta-\ indents each line in the region,
either by applying Tab to each line, or by giving
each the same specified amount of indentation.
See section 11.3 [Indenting Text], page 57.
219 EMACS Manual for TWENEX Users
Control-X Tab (^R Indent Rigidly)
Control-X Tab shifts all the lines in the region
right or left the same number of columns. See
section 11.3 [Indenting Text], page 57.
M-X Edit Indented Text
M-X Edit Indented Text enters a recursive editing
level designed for editing text in which each
line is indented. See section 11.4 [Filling],
page 59.
M-X Edit Tab Stops
M-X Edit Tab Stops lets you edit the tab stops
used by ^R Tab to Tab Stop. See section 11.3
[Indenting Text], page 57.
M-X Edit Tabular Text
M-X Edit Tabular Text enters a recursive editing
level designed for editing text arranged in a
table. See section 11.4 [Filling], page 59.
M-X Indent Tabs Mode
M-X Indent Tabs Mode turns Indent Tabs mode on or
off. When Indent Tabs mode is on, the
indentation commands use tab characters for
indentation whenever possible. Otherwise they
use only spaces. See section 22.1 [Minor Modes],
page 134.
M-X Tabify
M-X Tabify converts spaces after point to tabs
when that can be done without changing the
appearance. See section 11.3 [Indenting Text],
page 57.
M-X Untabify
M-X Untabify converts all tabs after point to
spaces. A numeric argument says how far apart
the tab stops are, which is good for converting
files brought from systems with tab stops at
intervals other than 8. See section 11.3
[Indenting Text], page 57.
220 EMACS Manual for TWENEX Users
Words, Sentences and Paragraphs
Meta-A (^R Backward Sentence)
Meta-A moves to the beginning of the sentence.
See section 11.2 [Sentences], page 55.
Meta-B (^R Backward Word)
Meta-B moves backward one word. See section 11.1
[Words], page 53.
Meta-D (^R Kill Word)
Meta-D kills one word forward. See section 11.1
[Words], page 53.
Meta-E (^R Forward Sentence)
Meta-E moves to the end of the sentence. See
section 11.2 [Sentences], page 55.
Meta-F (^R Forward Word)
Meta-F moves forward one word. See section 11.1
[Words], page 53.
Meta-H (^R Mark Paragraph)
Meta-H puts point at the front of the current
paragraph and the mark at the end. See
section 11.2 [Sentences], page 55.
Meta-K (^R Kill Sentence)
Meta-K kills to the end of the sentence. See
section 11.2 [Sentences], page 55.
Meta-T (^R Transpose Words)
Meta-T transposes two consecutive words. See
section 11.1 [Words], page 53.
Meta-[ (^R Backward Paragraph)
Meta-[ moves to the beginning of the paragraph.
See section 11.2 [Sentences], page 55.
Meta-] (^R Forward Paragraph)
Meta-] moves to the end of the paragraph. See
section 11.2 [Sentences], page 55.
Meta-Rubout (^R Backward Kill Word)
Meta-Rubout kills the previous word. See
section 11.1 [Words], page 53.
Control-X Rubout (^R Backward Kill Sentence)
221 EMACS Manual for TWENEX Users
Control-X Rubout kills back to the beginning of
the sentence. See section 11.2 [Sentences],
page 55.
M-X Atom Word Mode
M-X Atom Word Mode turns Atom Word mode on or
off. In Atom Word mode, the word commands
consider an entire Lisp atom as one word. See
section 22.1 [Minor Modes], page 134.
M-X Edit Syntax Table
M-X Edit Syntax Table allows you to edit the
syntax table for word and list delimiters. See
section 22.4 [Syntax Table], page 140.
Filling Text
Meta-G (^R Fill Region)
Meta-G fills the region, treating it (usually) as
one paragraph. See section 11.4 [Filling],
page 59.
Meta-Q (^R Fill Paragraph)
Meta-Q fills the current or next paragraph. See
section 11.4 [Filling], page 59.
Meta-S (^R Center Line)
Meta-S centers the current line. See
section 11.4 [Filling], page 59.
Control-X . (^R Set Fill Prefix)
Control-X . specifies the fill prefix, which is
used for filling indented text. See section 11.4
[Filling], page 59.
Control-X F (^R Set Fill Column)
Control-X F sets the variable Fill Column which
controls the margin for filling and centering.
See section 11.4 [Filling], page 59.
M-X Auto Fill Mode
M-X Auto Fill Mode turns Auto Fill mode on or
off. In Auto Fill mode, long lines are broken
between words automatically. See section 11.4
[Filling], page 59.
222 EMACS Manual for TWENEX Users
Exiting, Quitting
Control-G
Control-G quits, interrupting a running command,
or discarding any partially typed command. See
section 24.1 [Quitting], page 160.
Control-] (Abort Recursive Edit)
Control-] aborts a recursive editing level; that
is to say, exits it without allowing the command
which invoked it to finish. See section 24.1
[Quitting], page 160.
Control-Meta-Z (^R Exit, built-in function)
Control-Meta-Z exits from a recursive editing
level and allows the command which invoked the
recursive editing level to finish. At top level,
it exits from EMACS to its superior fork. See
section 6.3 [Exiting], page 29.
Control-X Control-Z (^R Return to Superior)
Control-X Control-Z returns from EMACS to its
superior fork, even if EMACS is currently inside
a recursive editing level. In that case,
re-entering EMACS will find it still within the
recursive editing level. See section 6.3
[Exiting], page 29.
M-X Compile
M-X Compile recompiles the file you are visiting,
in a manner that depends on the major mode. See
section 20.2 [Compile], page 103.
M-X Rerun CCL
M-X Rerun CCL exits from EMACS and repeats the
most recent COMPILE-class command in the EXEC.
See section 20 [Programs], page 102.
M-X Top Level
M-X Top Level returns to the top level EMACS
command loop or to TECO. See section 24.1
[Quitting], page 160.
M-X Undo
M-X Undo retracts the last undoable change to the
buffer. See section 24.2 [Lossage], page 161.
223 EMACS Manual for TWENEX Users
Pages
Control-X L (^R Count Lines Page)
Control-X L prints the number of lines on the
current page, and how many come before point and
how many come after. See section 18 [Pages],
page 94.
Control-X P (^R Narrow Bounds to Page)
Control-X P narrows the virtual boundaries to the
current page. See section 17 [Narrowing],
page 93.
Control-X [ (^R Previous Page)
Control-X [ moves backward to the previous page
boundary. See section 18 [Pages], page 94.
Control-X ] (^R Next Page)
Control-X ] moves forward to the next page
boundary. See section 18 [Pages], page 94.
Control-X Control-P (^R Mark Page)
Control-X Control-P puts point at the beginning
and the mark at the end of the current page. See
section 18 [Pages], page 94.
M-X View Page Directory (in PAGE)
M-X View Page Directory prints a directory of the
pages of the file. See section 18.1 [PAGE],
page 96.
M-X What Page
M-X What Page prints the current page and line
number in the file. See section 18 [Pages],
page 94.
Lisp
Meta-( (^R Make ())
Meta-( places a pair of parentheses around the
next several s-expressions. See section 20.6.1
[Lists], page 111.
Meta-) (^R Move Over ))
Meta-) moves past the next close parenthesis and
224 EMACS Manual for TWENEX Users
adjusts the indentation of the following line.
See section 20.6.1 [Lists], page 111.
Control-Meta-Tab (^R Indent for Lisp)
Control-Meta-Tab adjusts the indentation of the
current line for proper Lisp style. See
section 20.3 [Indenting], page 104.
Control-Meta-( (^R Backward Up List)
Control-Meta-( moves backward up one level of
list structure. See section 20.6.1 [Lists],
page 111.
Control-Meta-) (^R Up List)
Control-Meta-) moves forward up one level of list
structure. See section 20.6.1 [Lists], page 111.
Control-Meta-@ (^R Mark Sexp)
Control-Meta-@ puts the mark at the end of the
next s-expression. See section 8 [Mark],
page 39.
Control-Meta-A (^R Beginning of Defun)
Control-Meta-A moves to the beginning of the
current Defun. See section 20.6.2 [Defuns],
page 115.
Control-Meta-B (^R Backward Sexp)
Control-Meta-B moves backward over one
s-expression. See section 20.6.1 [Lists],
page 111.
Control-Meta-D (^R Down List)
Control-Meta-D moves forward and down a level in
list structure. See section 20.6.1 [Lists],
page 111.
Control-Meta-E (^R End of Defun)
Control-Meta-E moves to the end of the current
Defun. See section 20.6.2 [Defuns], page 115.
Control-Meta-F (^R Forward Sexp)
Control-Meta-F moves forward over one
s-expression. See section 20.6.1 [Lists],
page 111.
Control-Meta-G (^R Format Code)
Control-Meta-G grinds the s-expression after
point. See section 20.7 [Grinding], page 115.
225 EMACS Manual for TWENEX Users
Control-Meta-H (^R Mark Defun)
Control-Meta-H puts point before and the mark
after the current or next Defun. See
section 20.6.2 [Defuns], page 115.
Control-Meta-K (^R Kill Sexp)
Control-Meta-K kills the following s-expression.
See section 20.6.1 [Lists], page 111.
Control-Meta-N (^R Next List)
Control-Meta-N moves forward over one list,
ignoring atoms before the first open parenthesis.
See section 20.6.1 [Lists], page 111.
Control-Meta-P (^R Previous List)
Control-Meta-P moves backward over one list,
ignoring atoms reached before the first close
parenthesis. See section 20.6.1 [Lists],
page 111.
Control-Meta-Q (^R Indent Sexp)
Control-Meta-Q adjusts the indentation of each of
the lines in the following s-expression, but not
the current line. See section 20.3 [Indenting],
page 104.
Control-Meta-T (^R Transpose Sexps)
Control-Meta-T transposes two consecutive
s-expressions. See section 20.6.1 [Lists],
page 111.
Control-Meta-U (^R Backward Up List)
Control-Meta-U moves backward up one level of
list structure. See section 20.6.1 [Lists],
page 111.
Files
Meta-. (^R Find Tag)
Meta-. moves to the definition of a specific
function, switching files if necessary. See
section 21 [TAGS], page 122.
Meta-~ (^R Buffer Not Modified)
Meta-~ clears the flag which says that the buffer
contains changes that have not been saved. See
section 13.1 [Visiting], page 71.
226 EMACS Manual for TWENEX Users
Control-X Control-F (Find File)
Control-X Control-F visits a file in its own
buffer. See section 14 [Buffers], page 83.
Control-X Control-Q (^R Set File Read Only)
Control-X Control-Q makes the visited fie read
only, or no longer read only. See section 13.1
[Visiting], page 71.
Control-X Control-S (^R Save File)
Control-X Control-S saves the visited file. See
section 13.1 [Visiting], page 71.
Control-X Control-V (^R Visit File)
Control-X Control-V visits a file. See
section 13.1 [Visiting], page 71.
Control-X Control-W (Write File)
Control-X Control-W saves the file, asking for
names to save it under. See section 13.7
[Advanced File Commands], page 81.
M-X Append to File
M-X Append to File appends the contents of the
region to the end of a specified file. See
section 13.7 [Advanced File Commands], page 81.
M-X Auto Save Mode
M-X Auto Save Mode turns Auto Save mode on or
off. See section 13.3 [Auto Save], page 74.
M-X Copy File
M-X Copy File copies a file to a new name. See
section 13.7 [Advanced File Commands], page 81.
M-X Delete File
M-X Delete File deletes a file. See section 13.7
[Advanced File Commands], page 81.
M-X Insert File
M-X Insert File inserts the contents of a file
into the buffer (within the existing text). See
section 13.7 [Advanced File Commands], page 81.
M-X Prepend to File
M-X Prepend to File appends the contents of the
region to the start of a specified file. See
section 13.7 [Advanced File Commands], page 81.
227 EMACS Manual for TWENEX Users
M-X Rename File
M-X Rename File changes the name of a file. See
section 13.7 [Advanced File Commands], page 81.
M-X Revert File
M-X Revert File undoes changes to a file by
reading in the previous version. See
section 13.2 [Revert File], page 74.
M-X Save All Files
M-X Save All Files offers to write back buffers
which may need it. See section 14 [Buffers],
page 83.
M-X Set Visited Filename
M-X Set Visited Filename changes the visited
filename, without writing a file. See
section 13.7 [Advanced File Commands], page 81.
M-X Write Region
M-X Write Region writes the contents of the
region into a file. See section 13.7 [Advanced
File Commands], page 81.
File Directories
Control-X D (^R DIRED)
Control-X D invokes the directory editor DIRED,
useful for deleting many files. See section 13.6
[DIRED], page 78.
Control-X Control-D (^R Directory Display)
Control-X Control-D displays a subset of a
directory. See section 13.4 [Directories],
page 77.
M-X Clean Directory
M-X Clean Directory deletes all but the most
recent versions of every file in a directory.
See section 13.5 [Cleaning Directories], page 77.
M-X List Files
M-X List Files prints a very brief listing of a
directory, listing only the filenames, several
files per line. See section 13.4 [Directories],
page 77.
228 EMACS Manual for TWENEX Users
M-X Reap File
M-X Reap File deletes all but the most recent
versions of a file. See section 13.5 [Cleaning
Directories], page 77.
M-X View Directory
M-X View Directory prints a file directory. See
section 13.4 [Directories], page 77.
Buffers
Control-X Control-B (List Buffers)
Control-X Control-B prints a list of all buffers,
their major modes and the files they are
visiting. See section 14 [Buffers], page 83.
Control-X A (^R Append to Buffer)
Control-X A adds the text of region into another
buffer. See section 9.3 [Copying], page 47.
Control-X B (Select Buffer)
Control-X B is the command for switching to
another buffer. See section 14 [Buffers],
page 83.
Control-X K (Kill Buffer)
Control-X K kills a buffer. See section 14
[Buffers], page 83.
M-X Insert Buffer
M-X Insert Buffer inserts the contents of another
buffer into the existing text of this buffer.
See section 14 [Buffers], page 83.
M-X Kill Some Buffers
M-X Kill Some Buffers offers to kill each buffer.
See section 14 [Buffers], page 83.
M-X Make Space
M-X Make Space tries to free up space inside
EMACS for more libraries or buffers. See
section 24.2.5 [Storage Exhausted], page 163.
M-X Rename Buffer
M-X Rename Buffer changes the name of the current
buffer. See section 14 [Buffers], page 83.
229 EMACS Manual for TWENEX Users
M-X What Available Space
M-X What Available Space prints the amount of
space left inside EMACS for more libraries or
buffers. See section 24.2.5 [Storage Exhausted],
page 163.
Comments
Meta-Linefeed (^R Indent New Comment Line)
Meta-Linefeed moves to a new line and indents it.
If point had been within a comment on the old
line, a new comment is started on the new line
and indented under the old one. See section 20.5
[Comments], page 107.
Meta-; (^R Indent for Comment)
Meta-; inserts a properly indented comment at the
end of the current line, or adjusts the
indentation of an existing comment. See
section 20.5 [Comments], page 107.
Meta-N (^R Down Comment Line)
Meta-N moves down a line and starts a comment.
See section 20.5 [Comments], page 107.
Meta-P (^R Up Comment Line)
Meta-P moves down a line and starts a comment.
See section 20.5 [Comments], page 107.
Control-Meta-; (^R Kill Comment)
Control-Meta-; kills any comment on the current
line. See section 20.5 [Comments], page 107.
Control-X ; (^R Set Comment Column)
Control-X ; sets the column at which comments are
indented, from an argument, the current column,
or the previous comment. See section 20.5
[Comments], page 107.
Case Conversion
Meta-C (^R Uppercase Initial)
Meta-C makes the next word lower case with a
230 EMACS Manual for TWENEX Users
capital initial. It moves over the word. See
section 11.5 [Case], page 61.
Meta-L (^R Lowercase Word)
Meta-L moves over a word converting it to lower
case. See section 11.5 [Case], page 61.
Meta-U (^R Uppercase Word)
Meta-U moves over a word converting it to upper
case. See section 11.5 [Case], page 61.
Control-X Control-L (^R Lowercase Region)
Control-X Control-L converts the text of the
region to lower case. See section 11.5 [Case],
page 61.
Control-X Control-U (^R Uppercase Region)
Control-X Control-U converts the text of the
region to upper case. See section 11.5 [Case],
page 61.
Minor Corrections
Meta-$ (^R Correct Word Spelling)
Meta-$ (Dollar sign, not Altmode) passes the word
before point to the ISPELL program. If it is not
a correct spelling, you have the option of
replacing it with a corrected spelling. See
section 12 [Fixing Typos], page 67.
Meta-' (^R Upcase Digit)
Meta-' converts a digit before point on the same
or previous line to a punctuation character,
assuming that you failed to type the shift key
and thus typed the digit by mistake. See
section 12 [Fixing Typos], page 67.
Meta-_ (^R Underline Word)
Meta-_ inserts underlining commands good for
certain text justifiers around a word. See
section 11.6 [Underlining], page 62.
Control-X _ (^R Underline Region)
Control-X _ inserts underlining commands good for
certain text justifiers around the region. See
section 11.6 [Underlining], page 62.
231 EMACS Manual for TWENEX Users
Windows
Control-Meta-V (^R Scroll Other Window)
Control-Meta-V scrolls the other window up or
down. See section 15 [Display], page 87.
Control-X 1 (^R One Window)
Control-X 1 returns to one-window mode. See
section 16 [Windows], page 90.
Control-X 2 (^R Two Windows)
Control-X 2 splits the screen into two windows.
See section 16 [Windows], page 90.
Control-X 3 (^R View Two Windows)
Control-X 3 splits the screen into two windows
but stays in window one. See section 16
[Windows], page 90.
Control-X 4 (^R Visit in Other Window)
Control-X 4 displays two windows and selects a
buffer or visits a file in the other window. See
section 16 [Windows], page 90.
Control-X O (^R Other Window)
Control-X O switches from one window to the
other. See section 16 [Windows], page 90.
Control-X ^ (^R Grow Window)
Control-X ^ changes the allocation of screen
space to the two windows. See section 16
[Windows], page 90.
M-X Compare Windows
M-X Compare Windows compares the text in window
one after point with that in window two after
point. It advances point in both windows to the
first non-matching text. See section 16
[Windows], page 90.
Narrowing
Control-X N (^R Narrow Bounds to Region)
Control-X N narrows the virtual boundaries to the
region. See section 17 [Narrowing], page 93.
232 EMACS Manual for TWENEX Users
Control-X P (^R Narrow Bounds to Page)
Control-X P narrows the virtual boundaries to the
current page. See section 18 [Pages], page 94.
Control-X W (^R Widen Bounds)
Control-X W widens the virtual boundaries back to
the entire buffer. See section 17 [Narrowing],
page 93.
Status Information
Control-X = (What Cursor Position)
Control-X = prints information on the screen
position and character position of the cursor,
the size of the file, and the character after the
cursor. See section 11.4 [Filling], page 59.
Control-X L (^R Count Lines Page)
Control-X L prints the number of lines in the
current page, and how many come before or after
point. See section 18 [Pages], page 94.
M-X List Loaded Libraries
M-X List Loaded Libraries lists the names of all
loaded libraries. See section 22.2 [Libraries],
page 136.
M-X List Variables
M-X List Variables lists the names and values of
all variables, or of those whose names contain a
specified string. See section 22.3 [Variables],
page 138.
M-X List Redefinitions
M-X List Redefinitions describes all the ways
which the major mode and local modes of the
selected buffer modify the standard EMACS. See
section 20.1 [Major Modes], page 102.
M-X What Page
M-X What Page prints the page and line number of
point. See section 18 [Pages], page 94.
233 EMACS Manual for TWENEX Users
Keyboard Macros
Control-X ( (^R Start Kbd Macro)
Control-X ( begins defining a keyboard macro.
See section 22.8 [KBDMAC], page 153.
Control-X ) (^R End Kbd Macro)
Control-X ) terminates the definition of a
keyboard macro. See section 22.8 [KBDMAC],
page 153.
Control-X E (^R Call Last Kbd Macro)
Control-X E executes the most recently defined
keyboard macro. See section 22.8 [KBDMAC],
page 153.
Control-X Q (^R Kbd Macro Query)
Control-X Q in a keyboard macro can ask the user
whether to continue or allow him to do some
editing before continuing with the keyboard
macro. See section 22.8 [KBDMAC], page 153.
M-X Name Kbd Macro
M-X Name Kbd Macro gives a permanent name to the
last keyboard macro defined. See section 22.8
[KBDMAC], page 153.
M-X View Kbd Macro
M-X View Kbd Macro prints the definition of a
keyboard macro. See section 22.8 [KBDMAC],
page 153.
Libraries
M-X Kill Libraries
M-X Kill Libraries discards one or more libraries
from core. See section 22.2 [Libraries],
page 136.
M-X List Library
M-X List Library describes briefly all the
functions in a library. See section 22.2
[Libraries], page 136.
M-X Load Library
234 EMACS Manual for TWENEX Users
M-X Load Library loads one library, permanently.
See section 22.2 [Libraries], page 136.
M-X Run Library
M-X Run Library loads a library temporarily,
invokes a function in it, and then discards the
library. See section 22.2 [Libraries], page 136.
Variables
M-X Edit Options
M-X Edit Options lets you edit, in a recursive
editing level, the values of many variables. See
section 22.3 [Variables], page 138.
M-X Kill Local Q-register
M-X Kill Local Q-register makes a q-register or
command character definition no longer local to
the selected buffer. See the file
INFO:CONV.INFO, node Vars.
M-X Kill Local Variable M-X Kill Local Variable makes a variable
value no longer local to the selected buffer.
See the file INFO:CONV.INFO, node Vars.
M-X Kill Variable
M-X Kill Variable eliminates a particular
variable. See section 22.3 [Variables],
page 138.
M-X Make Local Q-register M-X Make Local Q-register makes a
q-register or command character definition local
to the selected buffer. See the file
INFO:CONV.INFO, node Vars.
M-X Make Local Variable M-X Make Local Variable makes a variable
value local to the selected buffer. See the file
INFO:CONV.INFO, node Vars.
M-X Set Key
M-X Set Key connects a function to a command
character. See section 5.2 [M-X Commands],
page 23.
M-X Set Variable
M-X Set Variable sets the value of a variable.
See section 22.3 [Variables], page 138.
235 EMACS Manual for TWENEX Users
M-X View Variable
M-X View Variable displays the value and comment
of a variable. See section 22.3 [Variables],
page 138.
Mail
Control-X M (Send Mail)
Control-X M allows you to edit and send a message
using your favorite mail-reading program. The
default is MM. See section 6.5 [Mail], page 34.
Control-X R (Read Mail)
Control-X R runs your choice of mail-reading
program to read and edit your mail. The default
is MM. See section 6.5 [Mail], page 34.
M-X Check Mail
M-X Check Mail tells you whether you have any new
mail to be read. See section 6.5 [Mail],
page 34.
Minibuffer
Control-% (^R Replace String)
Control-% invokes a minibuffer containing a call
to Replace String. You fill in the arguments.
See section 19 [Replace], page 98.
Meta-Altmode (^R Execute Minibuffer)
Meta-Altmode invokes an empty minibuffer which
you can fill in with a TECO program to be
executed. See section 23 [Minibuffer], page 157.
Meta-% (^R Query Replace)
Meta-% invokes a minibuffer containing a call to
Query Replace. You fill in the arguments. See
section 19 [Replace], page 98.
Control-X Altmode (^R Re-execute Minibuffer)
Control-X Altmode re-executes a TECO program
previously executed in the minibuffer. It can
also re-execute an extended command. See
section 23 [Minibuffer], page 157.
236 EMACS Manual for TWENEX Users
CATALOG OF LIBRARIES
Libraries Used Explicitly
These are libraries which you must load with M-X Load
Library$<libname><cr> to use. If no cross-reference is given,
the only documentation for the library is the self-documentation
contained in it. Use M-X List Library$<libname><cr> to print a
brief description of each function in the library. For more
detailed information, load the library and use M-X Describe on
individual functions.
ABSTR contains commands for making documentation files:
wall charts, and abstracts of libraries. See the
file INFO:CONV.INFO.
BABYL is a subsystem for reading, sending and editing
mail. See the file INFO:BABYL.INFO.
BBNLIB contains a few commands that people at BBN like.
BSHACK has functions for operating on lines containing
overprinting.
BUGHUNT contains commands for putting your name into each
comment you edit. This is to record who changed
what.
CACHE implements a cache for speeding up EMACS
subroutine calls.
CHESS implements commands for editing pictures of chess
boards.
COBOL implements COBOL mode.
COLUMNS implements commands for converting single-column
text into double-column text and vice versa.
COMPLT provides completion for buffer names and variable
names.
DELIM implements commands for moving over balanced
groupings of various kinds of parentheses. There
are a pair of commands for square brackets, a
pair for angle brackets, etc.
237 EMACS Manual for TWENEX Users
DM redefines commands to be convenient on Datamedia
2500 terminals.
DM3025 redefines commands to be convenient on Datamedia
3025 terminals.
DOCLSP prints documentation from the MacLisp manual on a
specified Lisp function.
DOCOND is a macro processor and conditionalizer for text
files, useful for maintaining multiple versions
of documents with one source.
DOCTOR contains DOCTOR mode, a psychiatrist.
DRAW offers functions for editing pictures made of
characters. These partially duplicate the
facilities of the PICTURE library, but contain
other distinct features.
EAKMACS EAK's personal library, useful as an example.
EFORK implements commands for running other programs in
separate forks inferior to EMACS.
FDB has functions for examine file descriptor blocks.
FIXLIB has functions for examining and patching EMACS
functions.
FTPLIB provides commands for finding new EMACS files and
copying them across the Arpanet. Used for EMACS
maintenance on Arpanet sites.
HAZ1510 redefines commands to be convenient on Hazeltine
1510 terminals.
IBM370 implements IBM370 mode, for editing 370 assembler
code.
INFO peruses tree-structured documentation files.
INTER is the EMACS side of the EMACS-to-Interlisp
interface. See the file INFO:INTER.INFO.
INTERLISP-MODE is an alternate Interlisp Mode, different from
the default one.
IVORY is EAK and ECC's alternate generator for EMACS
238 EMACS Manual for TWENEX Users
libraries, which uses a slightly nonstandard
input format. The libraries BABYL, BABYLM,
CACHE, EAKMACS, FIXLIB, IVORY, LONG-FILENAMES,
MKDUMP, OUTLINE-MODE, PL1, TEACH-C100, TMACS and
WORDAB are generated with IVORY. See the file
INFO:IVORY.INFO.
JOURNAL implements journal files. See section 24.4
[Journals], page 165.
JUSTIFY implements an auto-justfy mode similar to auto
fill mode.
LABELS has functions for arranging a file of addresses
for printing mailing labels.
LEDIT is the EMACS side of the EMACS-to-MacLisp
interface. See the file INFO:LEDIT.INFO.
LONG-FILENAMES provides help in handling files which have long
names (on Twenex). It implements a different
type of filename completion than the standard
GTJFN system call.
LSPUTL contains a couple of useful functions for
searching and manipulating Lisp code.
LUNAR is Moon's personal library, which contains some
useful commands.
MACCNV does part of the work of converting MACRO-10 code
to MIDAS code.
MAICHK checks for arrival of mail. If this library is
loaded, EMACS will check frequently and
automatically for new mail and notify you when
any arrives.
MAZLIB is a game for solving mazes. It's fun to play.
MKDUMP aids in dumping your own customized environment.
See the file INFO:MKDUMP.INFO.
MODE2 implements a second additional mode line with
additional information.
MODLIN implements a fancier mode line display.
MOVE provides commands specially for copying and
239 EMACS Manual for TWENEX Users
moving many pieces of text from one file to
another.
MQREPL works with TAGS to perform several Query Replaces
on each of the files in a tag table.
NCOLUMNS has functions for turning single-column text into
many columns, but not vice-versa.
NOVICE implements restricted subsets of EMACS, for
beginners. The beginner can turn commands back
on when he feels ready. See the file
INFO:CONV.INFO, node Novice.
NVT100 defines the arrow keys and numeric keypad of the
VT-100 terminal to perform editing functions.
NVT132 is like NVT100 but for the VT-132.
NVT52 defines the arrow keys and numeric keypad of the
VT-52 terminal to perform editing functions.
OUTLINE implements Outline Mode, for editing outlines.
OUTLINE-MODE implements a different flavor of Outline Mode.
PAGE defines commands for viewing only one page of the
file at a time. See section 18.1 [PAGE],
page 96.
PERSONAL has functions for keeping notes on your current
projects.
PHRASE has commands for moving over and killing phrases
of text.
PICTURE contains Edit Picture, the command for editing
text pictures. See section 26 [PICTURE],
page 185.
PRINT contains the function Print File which formats a
file and sends it to a printer.
PURIFY generates libraries from EMACS source files, and
contains other functions useful for editing the
source files. See the file INFO:CONV.INFO.
RENUM renumbers figures, equations, theorems or
chapters.
240 EMACS Manual for TWENEX Users
SCRLIN contains alternative definitions of C-N and C-P
which move by screen lines instead of by real
lines.
SEND-MAIL sends mail to another user.
SLOWLY redefines commands and options to suit slow
terminals.
SORT implements the sorting commands.
SPLIT contains the commands Split File and Unsplit File
for breaking up large files into subfiles small
enough to be edited. See section 24.2 [Split],
page 161.
SYSTEM implements various commands useful for
communicating with the operating system.
TAGGEN updates tag tables. This serves essentially the
same function as the TAGS program, and may
someday replace it.
TALK initiates and accepts links with other users.
TDEBUG is a debugger for TECO programs. It displays the
buffer in one window and the program in the
other, while stepping by lines or setting
breakpoints. See the file INFO:TDEBUG.INFO.
TEACH-C100 has commands to define the programmable function
keys of the Concept-100 terminal.
TIME causes the current time of day to be displayed in
the mode line.
TMACS contains miscellaneous useful functions
TVLIB customizes EMACS to resemble TVEDIT.
VT100 defines the arrow keys and numeric keypad of the
VT-100 terminal to move the cursor and supply
numeric arguments.
VT52 defines the numeric keypad of the VT-52 terminal
to supply numeric arguments.
XLISP contains functions for global stylistic
transformations of Lisp code. See section 20.6
[Lisp], page 110.
241 EMACS Manual for TWENEX Users
Automatically Loaded Libraries
These are libraries which the user need not know about to use.
AUX implements several commands described in the
manual as part of the standard EMACS. Loaded
automatically when needed.
BABYLM contains the part of Babyl that implements mail
sending.
BARE contains the definitions of all built-in
functions. These definitions are not needed for
executing the built-in functions, only so that
Help can describe them properly. Loaded
automatically by documentation commands when
needed. See section 5.2 [BARE], page 23.
BASIC20 implements BASIC20 mode.
BCPL implements BCPL mode.
BLISS implements BLISS mode.
CLU implements CLU mode. See the file
INFO:ECLU.INFO.
DIRED implements the commands for editing and listing
directories. Loaded automatically when needed.
See section 13.6 [DIRED], page 78.
EINIT is used in building and dumping EMACS. See the
file INFO:CONV.INFO.
EMACS is the main body of standard EMACS. Always
loaded.
FORTRAN implements FORTRAN mode. See the file
INFO:EFORTRAN.INFO.
GRIND implements C-M-G. Loaded automatically when
needed. See section 20.7 [Grinding], page 115.
HERMES interfaces between EMACS and a superior HERMES
fork. Loaded automatically into an EMACS which
is under a HERMES.
242 EMACS Manual for TWENEX Users
KBDMAC implements keyboard macros. Loaded automatically
when needed. See section 22.8 [Keyboard Macros],
page 153.
MMAIL interfaces between EMACS and a superior MM fork.
Loaded automatically if needed.
MUDDLE implements Muddle mode.
PASCAL implements PASCAL mode. See the file
INFO:EPASC.INFO.
PCL implements PCL mode, for editing command files.
PL1 implements PL1 mode. See the file
INFO:EPL1.INFO.
SAIL implements SAIL mode.
SCRIBE implements SCRIBE mode. See section 11.7
[SCRIBE], page 63. Loaded automatically when
needed.
TAGS implements the TAGS package. See section 21
[TAGS], page 122. Loaded automatically when
needed.
TEX implements TEX mode. See the file
INFO:ETEX.INFO. Loaded automatically when
needed.
TRMTYP implements the Set Terminal Type command. Loaded
automatically when needed.
TWENEX holds commands for the Twenex version of EMACS
only. Always loaded.
WORDAB implements Word Abbrev mode. Loaded
automatically when needed. See section 25
[WORDAB], page 174.
243 EMACS Manual for TWENEX Users
INDEX OF VARIABLES
An option is a variable whose value Edit Options offers for
editing. A hook variable is a variable which is normally not
defined, but which you can define if you wish for customization.
Most hook variables require TECO programs as their values.
The default value of the variable is given in parentheses after
its name. If no value is given, the default value is zero. If
the word "nonexistent" appears, then the variable does not exist
unless you create it.
Abort Resumption Message
This is the message to be printed by C-] to tell
you how to resume the aborted command. If this
variable is zero, there is no way to resume, so
C-] asks for confirmation. See section 24.1
[Quitting], page 160.
Additional Abbrev Expanders (nonexistent)
If this variable exists when Word Abbrev mode is
turned on, it is a string of characters which
should terminate and expand an abbrev, in
addition to the punctuation characters which
normally do so. See also WORDAB Ins Chars.
After Compilation Hook (nonexistent)
If this variable exists and is nonzero, then it
is executed as a TECO expression by the function
Compile, after compilation itself is finished.
Exception: If the variable Compile Command is
also nonzero, it overrides this hook. See
section 20.2 [Compile], page 103.
Atom Word Mode The minor mode Atom Word mode is on if this
variable is nonzero. See section 22.1 [Minor
Modes], page 134.
Auto Directory Display
If this is nonzero, certain file operations
automatically display the file directory. See
section 13.4 [Directories], page 77.
Auto Fill Mode The minor mode Auto Fill mode is on if this
variable is nonzero. See section 11.4 [Filling],
page 59.
244 EMACS Manual for TWENEX Users
Auto Push Point Notification
The value of this variable is the string printed
in the echo area by some commands to notify you
that the mark has been set to the old location of
point. See section 10 [Search], page 49.
Auto Push Point Option (500)
Searches set the mark if they move at least this
many characters. See section 10 [Search],
page 49.
Auto Save All Buffers
If this is nonzero, auto save saves all buffers
that are modified, not just the selected buffer.
See section 13.3 [Auto Save], page 74.
Auto Save Default
The minor mode Auto Save mode is on by default
for newly visited files if this variable is
nonzero. See section 13.3 [Auto Save], page 74.
Auto Save Filenames (<working directory>[SAVE]..)
These are the filenames used for auto saving if
the visited filenames are not used. If the
filename extension is null, the name of the
buffer being saved is used instead. See
section 13.3 [Auto Save], page 74.
Auto Save Interval (500)
This is the number of characters between auto
saves. See section 13.3 [Auto Save], page 74.
Auto Save Max (2)
This is the maximum number of auto saves to keep.
See section 13.3 [Auto Save], page 74.
Auto Save Mode If this is nonzero, Auto Save mode is enabled.
See section 13.3 [Auto Save], page 74.
Auto Save Visited File
If this is nonzero, auto saving saves as the
visited filenames. If this is zero, auto saving
saves as the names which are the value of Auto
Save Filenames (q.v.). See section 13.3 [Auto
Save], page 74.
Autoarg Mode When Autoarg Mode is nonzero, numeric arguments
can be specified just by typing the digits. See
section 4 [Arguments], page 18.
245 EMACS Manual for TWENEX Users
Bottom Display Margin
This controls the size of the region at the
bottom of the screen which the cursor is not
allowed to be in. If the cursor would normally
move there, the window is recentered instead.
The value is represented as a percentage of the
screen size, and must not be negative or more
than 99. It controls the TECO flag FS %BOTTOM$.
See section 15 [Display], page 87.
Buffer Creation Hook (nonexistent)
If this variable exists and is nonzero, its value
should be a TECO program to be executed whenever
a newly created buffer is selected for the first
time. See section 14 [Buffers], page 83.
Buffer Deselection Hook (nonexistent)
If this variable exists and is nonzero, its value
should be a TECO program to be executed whenever
a buffer is about to be deselected. The
difference between this and Buffer Selection Hook
is that, while both are executed (if they exist)
when you switch buffers, this is executed before
the switch, and Buffer Selection Hook is executed
after the switch. See section 14 [Buffers],
page 83.
Buffer Selection Hook (nonexistent)
If this variable exists and is nonzero, its value
should be a TECO program to be executed whenever
a buffer is selected. See section 14 [Buffers],
page 83.
Case Replace (1)
When Case Replace is nonzero, Replace String and
Query Replace attempt to preserve case when they
replace. See section 19 [Replace], page 98.
Case Search (1)
If Case Search is nonzero, searches of all sorts
allow upper case letters and lower case letters
to match each other. It controls the TECO flag
FS BOTH CASE$. See section 10 [Search], page 49.
Collapse in Comparison (nonexistent)
If this variable exists and is not zero, it
should be a string of characters for M-X Compare
Windows to regard as insignificant. See
section 16 [Windows], page 90.
246 EMACS Manual for TWENEX Users
Comment Begin This is the string used to start new comments.
If it is zero, the value of Comment Start is
used. See section 20.5 [Comments], page 107.
Comment Column This is the column at which comments are aligned.
See section 20.5 [Comments], page 107.
Comment End This is the string which is used to end comments.
It is often empty for languages in which comments
end at the end of the line. See section 20.5
[Comments], page 107.
Comment Multi Line (nonexistent)
If this variable exists and is nonzero, then when
Auto Fill mode breaks a comment line, it does not
insert a new comment starter on the new line.
This is for use with languages that have explicit
comment terminators, if you want single
multi-line comments instead of single-line
comments on consecutive lines. See section 20.5
[Comments], page 107.
Comment Rounding (/8+1*8)
This is the TECO program used to decide what
column to start a comment in when the text of the
line goes past the comment column. The argument
to the program is the column at which text ends.
See section 20.5 [Comments], page 107.
Comment Start This is the string used for recognizing existing
comments, and for starting new ones if Comment
Begin is zero. If Comment Start is zero,
semicolon is used. See section 20.5 [Comments],
page 107.
Compile Command (nonexistent)
If this variable exists and is nonzero, its value
should be a TECO program to be used by the M-X
Compile command to compile the file. See
section 20.2 [Compile], page 103.
Compiler Filename (nonexistent)
If this variable exists and is nonzero, its value
should be the name of the compiler to use, a
filename. By default, the name of the major mode
is used as the name of the compiler. See
section 20.2 [Compile], page 103.
Compiler Switches (nonexistent)
247 EMACS Manual for TWENEX Users
If this variable exists and is nonzero, its value
is used as switches for compilation. See
section 20.2 [Compile], page 103.
Cursor Centering Point (40)
This specifies how far from the top of the screen
point ought to appear when a new window position
is chosen. The value of the variable is the
percentage of the screen size. It must not be
negative or more than 99. It controls the TECO
flag FS %CENTER$. See section 15 [Display],
page 87.
Default Major Mode (Fundamental)
This is the major mode in which new buffers are
created. If it is the null string, new buffers
are created in the same mode as the previously
selected buffer. See section 14 [Buffers],
page 83.
Digit Shift Table (nonexistent)
If this variable exists and is nonzero, its value
should be a string containing the ten characters
which are the upper case equivalents of the
digits 0 through 9 on the keyboard being used.
Meta-' (^R Upcase Digit) uses this table, and
reads it from the user if the variable does not
exist. See section 12 [Fixing Typos], page 67.
Directory Lister (& Subset Directory Listing)
This is the TECO program used for listing a
directory for C-X C-D and the Auto Directory
Display option. The default value is the
definition of the function & Subset Directory
Listing. See section 13.4 [Directories],
page 77.
Display Matching Paren (-1)
This variable controls automatic display of the
matching open parenthesis when a close
parenthesis is inserted. See section 20.4
[Matching], page 106.
Display Mode Line Inverse
If this is nonzero, the mode line is displayed in
inverse video or otherwise highlighted, on
terminals which can support it. This controls
the TECO flag FS INVMOD$. See section 1.1 [Mode
Line], page 6.
248 EMACS Manual for TWENEX Users
Display Overprinting
If this is nonzero, backspace characters and
stray carriage return characters in the buffer
display as actual overprinting rather than as ^H
and ^M. This variable controls the TECO flags FS
^H PRINT$ and FS ^M PRINT$. See section 2
[Characters], page 9.
Echo Area Height (3)
This is the number of lines in the echo area.
Its value should be at least one. It controls
the TECO flag FS ECHO LINES$. See section 1
[Screen], page 5.
EMACS Version This variable's value is the EMACS version
number.
End of Buffer Display Margin (35)
This specifies how far up the screen the end of
the buffer is placed, if it is on screen at all,
when a new window position is chosen. It is
represented as a percentage of the screen size,
and must not be negative or more than 99. Its
value controls the TECO flag FS %END$. See
section 15 [Display], page 87.
Error Messages in Echo Area
If this is nonzero, error messages are printed in
the echo area instead of at the top of the
screen. It controls the TECO flag FS ECHO
ERRORS$. See section 24.2 [Lossage], page 161.
EXEC Name (nonexistent)
If this variable exists, its value, if nonzero,
is the filename of the program to be used by M-X
Push to EXEC to serve as the EXEC. See
section 6.4 [Subforks], page 30.
Exit Hook (nonexistent)
If this variable exists and is nonzero, its value
is a TECO program to be executed whenever EMACS
is exited, instead of the normal action of doing
an auto save. The subroutine & Exit EMACS is
responsible for executing it. See section 6.3
[Exiting], page 29.
Exit to Inferior Hook (nonexistent)
If this variable exists and is nonzero, its value
is a TECO program to be executed whenever EMACS
249 EMACS Manual for TWENEX Users
is about to invoke an inferior fork that is
likely to read from the terminal. This is done
in addition to all normal actions.
Exit to Superior Hook (nonexistent)
If this variable exists and is nonzero, its value
is a TECO program to be executed whenever EMACS
is about to return to its superior fork, in
addition to all normal actions.
Fill Column (70)
The value of Fill Column is the width used for
filling text. It controls the TECO flag FS
ADLINE$. See section 11.4 [Filling], page 59.
Fill Extra Space List (.?!)
The characters in this string are the ones which
ought to be followed by two spaces when text is
filled. See section 11.4 [Filling], page 59.
Fill Prefix The value of this variable is the prefix expected
on every line of text before filling and placed
at the front of every line after filling. It is
usually empty, for filling nonindented text. See
section 11.4 [Filling], page 59.
Indent Tabs Mode (-1)
If Indent Tabs Mode is nonzero, then tab
characters are used by the indent commands.
Otherwise, only spaces are used. See
section 11.3 [Indenting Text], page 57.
<libname> Setup Hook (nonexistent)
If this variable exists and is nonzero, its value
should be a TECO program to be executed when the
library <libname> is loaded. The library's
& Setup function is responsible for doing this.
If the library has no & Setup function, it will
not handle a setup hook either. See section 22.2
[Libraries], page 136.
<libname> Kill Hook (nonexistent)
Some libraries may execute the value of this
variable, if it exists and is nonzero, when the
library is being removed from core with Kill
Libraries. This is done by the library's & Kill
function; if the library has no & Kill <libname>
Library function, it will not handle a kill hook.
See section 22.2 [Libraries], page 136.
250 EMACS Manual for TWENEX Users
Lisp <function> Indent
This variable controls the indentation within
calls to the function <function>. Actually, the
variable used is not always Lisp <function>
Indent, but rather <language> <function> Indent,
where <language> is the value of Lisp Indent
Language. See section 20.3 [Indenting],
page 104.
Lisp Indent DEFanything (1)
The value of this variable controls indentation
within calls to functions whose names start with
"def". Actually, the variable used is not always
Lisp Indent DEFanything, but rather <language>
Indent DEFanything, where <language> is the value
of Lisp Indent Language. See section 20.3
[Indenting], page 104.
Lisp Indent Language (Lisp)
The value of this variable is the string used as
the language name when looking for <language>
<function> Indent variables. See section 20.3
[Indenting], page 104.
Lisp Indent Offset
If nonzero, this selects an alternative default
style of indentation for Lisp. Actually, the
variable used is not always Lisp Indent Offset,
but rather <language> Indent Offset, where
<language> is the value of Lisp Indent Language.
See section 20.3 [Indenting], page 104.
Mail Reader Library (nonexistent)
If this variable exists and is nonzero, it is the
name of the library to be used by M-X Read Mail
for reading mail and by M-X Send Mail for sending
mail. The former calls the function "<entry>" in
the library, and the latter calls the function
"& Mail Message". . See section 6.5 [Mail],
page 34.
Mail Sender Library (nonexistent)
If this variable exists and is nonzero, it
specifies the library to be used by M-X Send Mail
only, overriding Mail Reader Library. See
section 6.5 [Mail], page 34.
Mail Reader Program (nonexistent)
If this variable exists (and Mail Reader Library
251 EMACS Manual for TWENEX Users
does not), it is the name of the the program to
be used for reading and sending mail. See
section 6.5 [Mail], page 34.
<mode> ..D (nonexistent)
This variable is used by the major mode <mode> to
record the syntax table for that mode. It is
created by the first use of the mode, and if you
supply your value, that value will be accepted
instead. For example, Text mode uses Text ..D.
Not all major modes have their own syntax tables.
See section 22.4 [Syntax], page 140.
<mode> Mode Hook (nonexistent)
If this variable exists and is nonzero, its value
is a TECO program to be executed when the major
mode <mode> is entered. For example, Text Mode
Hook is executed when Text mode is entered. See
section 20.1 [Major Modes], page 102.
Next Screen Context Lines (nonexistent)
If this variable exists, its value specifies the
number of lines of overlap between one screenful
and the next, when scrolling by screens with C-V
and M-V. See section 15 [Display], page 87.
Only Global Abbrevs (nonexistent)
If this variable exists and its value is nonzero,
then Word Abbrev Mode assumes that you are not
using any mode-specific abbrevs. See
section 25.2.1 [Customizing WORDAB], page 180.
Overwrite Mode If this is nonzero, the minor mode Overwrite mode
is in effect. It controls the TECO flag FS ^R
REPLACE$. See section 22.1 [Minor Modes],
page 134.
Page Delimiter (^L)
This is the TECO search string used to recognize
page boundaries. See section 18 [Pages],
page 94.
PAGE Flush CRLF
If this variable exists and is nonzero, the PAGE
library expects every page to start with a blank
line, which is not considered part of the
contents of the page. See section 18.1 [PAGE],
page 96.
252 EMACS Manual for TWENEX Users
Paragraph Delimiter (.^O^I^O ^O')
This is the TECO search string used to recognize
beginnings of paragraphs. See section 11.2
[Sentences], page 55.
Permit Unmatched Paren (-1)
Controls whether the bell is run if you insert an
unmatched close parenthesis. See section 20.4
[Matching], page 106.
Prefix Char List
This variable's value is a string which lists all
the prefix characters defined, so that
self-documentation facilities can find any
subcommands of prefix characters which call a
given function. See the file INFO:CONV.INFO,
node Prefix.
Quote Execute Command (nonexistent)
If this variable exists and is zero, then M-X
does not quote ^] characters which appear in the
string arguments of the command. See section 5.2
[Extended Commands], page 23.
Read Line Delay
This is the amount of time, in 30'ths of a
second, which EMACS should wait after starting to
read a line of input, before it prompts and
starts echoing the input.
Readable Word Abbrev Files (nonexistent)
If this variable exists and is nonzero, word
abbrev files will be written in the format that
M-X List Word Abbrevs uses, instead of in a less
readable but faster loading format. See
section 25.1.6 [Saving Abbrevs], page 178.
Region Query Size (5000)
Many commands which act on the region require
confirmation if the region contains more than
this many characters. See section 8 [Mark],
page 39.
Return from Inferior Hook (nonexistent)
If this variable exists and is nonzero, its value
should be a TECO program to be executed whenever
an inferior fork returns to EMACS, except for
inferior forks which return nearly immediately.
See section 6.4 [Subforks], page 30.
253 EMACS Manual for TWENEX Users
Return from Superior Hook (nonexistent)
If this variable exists and is nonzero, its value
should be a TECO program to be executed whenever
EMACS is resumed after being exited. See
section 6.3 [Exiting], page 29.
SAIL Character Mode
If this is nonzero, characters in the buffer with
ASCII codes 0 through 37 are displayed without
conversion. Do not try to use this feature
except on terminals specially equipped to handle
it. The variable controls the TECO flag FS
SAIL$. See section I.1 [Ideal Keyboards],
page 188.
Save Word Abbrevs (nonexistent)
If this variable exists, its value determines
which abbrevs will be saved upon exit from EMACS
when abbrevs have been modified. Setting it to 1
causes all abbrevs to be saved. See
section 25.1.6 [Saving Abbrevs], page 178.
Setting it to -1 causes just the incremental
abbrevs to be saved. See section 25.2.4 [Dumped
Environments], page 182.
Search Exit Char (27)
This is the numeric code for the 9-bit character
which should exit incremental search and not have
its normal command meaning in that case. The
default, 27, is the code for Altmode.
Search Exit Option (nonexistent)
If this variable is 0, Control and Meta
characters without special meanings do not exit
incrementatl search; instead, they are part of
the string to be searched for. If this variable
does not exist, or is nonzero, then those
characters exit the search and then have their
normal function.
Set Mode Line Hook
This is a hook which is executed every time the
mode line is recomputed. It can insert text in
the buffer to put it in the mode line after the
minor modes. See section 1.1 [Mode Line],
page 6.
SLOWLY Maximum Speed (nonexistent)
If this variable is defined, it is the maximum
254 EMACS Manual for TWENEX Users
output speed for which SLOWLY, if loaded, should
define its commands. See section I.6.4 [SLOWLY],
page 195.
Space Indent Flag
If this flag is nonzero, then Auto Fill indents
the new lines which it creates, by performing a
Tab. Most major modes for programming languages
set this nonzero. See section 11.4 [Filling],
page 59.
System Output Holding
If this is nonzero, then Twenex page mode is not
turned off by EMACS. This means that the
characters C-S and C-Q stop and resume output to
the terminal from Twenex and cannot be used as
EMACS commands in any way. The variable controls
the TECO flag FS TT PAGE$.
Tab Stop Definitions (a string)
The value of Tab Stop Definitions is a string
defining the tab stops to be used by the command
M-I (^R Tab to Tab Stop). See section 11.3
[Indenting Text], page 57.
Tags Find File (nonexistent)
If this variable exists and is not zero, TAGS
uses C-X C-F to switch files. Otherwise, TAGS
uses C-X C-V. See section 21 [TAGS], page 122.
Some other things may decide to use multiple
buffers if this variable is nonzero. See
section 14 [Buffers], page 83.
Tags Search Verbose (nonexistent)
If this variable exists and is zero, Tags Search
does not print out the name of each file that it
begins to search. If the variable is
nonexistent, that is equivalent to a value of 1.
See section 21.4.3 [Tags Search], page 127.
Temp File FN2 List (MEMO^OXGP^O ...)
This is a TECO search string which recognizes the
filenames which indicate that the file is
probably temporary. See section 13.5 [Clean
Directory], page 77.
Top Display Margin
This controls the size of the region at the top
of the screen which the cursor is not allowed to
255 EMACS Manual for TWENEX Users
be in. If the cursor would normally move there,
the window is recentered instead. The value is
represented as a percentage of the screen size,
and must not be negative or more than 99. It
controls the TECO flag FS %TOP$. See section 15
[Display], page 87.
Underline Begin (nonexistent)
If this variable exists, its value should be the
character or string to use to begin underlines
for the M-_ command. See section 11.6
[Underlining], page 62.
Underline End (nonexistent)
If this variable exists, its value should be the
character or string to use to end underlines for
the M-_ command. See section 11.6 [Underlining],
page 62.
Visit File Hook (nonexistent)
If this variable exists and is nonzero, its value
should be a TECO program to be executed whenever
a file is visited. See section 13.1 [Visiting],
page 71.
Visit File Save Old (1)
This variable controls whether visiting a file
offers to save the file previously visited in the
same buffer, if it has changes. See section 13.1
[Visiting], page 71.
WORDAB All Caps (nonexistent)
If this variable exists and is nonzero, expanding
an all-upper-case abbrev to a multi-word
expansion will cause the words in the expansion
to be all-upper-case, instead of just having
their first letters uppercased. See
section 25.1.2 [Controlling Expansion], page 177.
WORDAB Ins Chars (nonexistent)
If this variable exists when Word Abbrev Mode is
turned on, it should be a string containing
precisely those characters which should terminate
and expand an abbrev. This variable overrides
Additional Abbrev Expanders (q.v.). See
section 25.2.1 [Customizing WORDAB], page 180.
256 EMACS Manual for TWENEX Users
INDEX
Auto Fill mode 7, 57, 59, 109,
! 14, 99 134, 135, 151
Auto Push Point Notification 41
% 69 Auto Push Point Option 41
Auto Save All Buffers 76
& (in function names) 25 Auto Save Default 74, 134
& Alter ..D 143 Auto Save Filenames 75
& Exit EMACS 30, 31 Auto Save Interval 76
& Mail Message 34 Auto Save Max 76
Auto Save mode 7, 74, 134
*Permutation Table* (buffer)Auto Save Visited File 75
187 Autoarg mode 19, 189
*Permuted File* (buffer) 187 Autoloading 137
*Tags Search* (buffer) 128
*TAGS* (buffer) 125, 127 Backspace 12
BARE library 26
--MORE-- 8 Bit prefix characters 189
Blank lines 17, 43, 56, 109,
. 99 110
Bottom Display Margin 87
<cr> 10 Buffers 7, 83, 92, 124, 125,
128, 151
@Begin 64 Buggestion 66
@End 64 Bugs 170
Built-in functions 26
Abbrev definition files 178,
182 C- 9
Abbrev definition lists 175,C-. 128
178, 181, 182 C-; 107
Abbrevs 174 C-< 40
Abort Recursive Edit 138, 160 C-> 40
Aborting 160 C-@ 39
Access to Directory 34 C-A 15, 55, 105
Accumulator 119 C-B 15, 101
Additional Abbrev Expanders 181C-D 15, 21, 42
Address 119 C-E 15, 55, 105
Altmode 10, 12, 13, 21, 99,C-F 15
100, 142, 156, 158 C-G 21, 29, 50, 71, 158, 160,
Append to File 47, 81 166
Apropos 36 C-K 15, 42, 55
Argument 176, 182 C-L 15, 87, 156, 197
ASCII 9, 12 C-M-( 112
Atom Word mode 7, 54, 134 C-M-) 112
Auto Directory Display 77 C-M-; 108
Auto Fill 110 C-M-@ 40, 113
257 EMACS Manual for TWENEX Users
C-M-A 115, 119 C-X 146, 152
C-M-B 64, 111 C-X 2 90
C-M-D 64, 112, 119 C-X 3 91
C-M-E 64, 115, 119 C-X 4 92
C-M-F 64, 111 C-X ; 109
C-M-G 64, 116, 120 C-X = 61
C-M-H 40, 64, 115 C-X A 47
C-M-K 42, 64, 112 C-X Altmode 23, 99, 158
C-M-L 94 C-X B 83
C-M-M 57, 105 C-X C-A 176, 180, 183
C-M-N 64, 112, 119 C-X C-B 85
C-M-P 64, 112, 119 C-X C-D 77
C-M-Q 64, 116 C-X C-F 84
C-M-R 89 C-X C-H 176, 183
C-M-Rubout 42, 64, 112 C-X C-L 62
C-M-Space 177, 183 C-X C-O 17, 43
C-M-T 113 C-X C-P 40, 94, 96
C-M-Tab 115 C-X C-Q 72
C-M-U 64, 112 C-X C-S 16, 72, 75, 85
C-M-V 91 C-X C-T 68
C-M-W 45 C-X C-U 39, 62
C-M-X 22 C-X C-V 16, 71
C-M-Z 29, 78, 138 C-X C-W 76
C-M-[ 115 C-X C-X 40
C-M-\ 58, 116 C-X C-Z 29, 178
C-M-] 115 C-X D 80
C-M-^ 105, 116 C-X E 154
C-N 15, 101 C-X F 60, 134
C-O 17, 18, 101, 105 C-X G 48
C-P 15 C-X H 40
C-Q 14, 57, 94, 101, 177, 182,C-X J 97
191 C-X K 85
C-R 49, 96, 99, 156, 194 C-X L 95
C-Rubout 110 C-X M 34
C-S 49, 96, 191, 194 C-X N 93
C-Space 39 C-X O 90
C-T 15, 68 C-X P 93, 95, 97
C-U 18, 21, 71, 182 C-X Q 155, 194
C-U C-@ 41, 56 C-X R 34
C-U C-Space 41 C-X Rubout 42, 55, 67
C-V 88 C-X T 68
C-W 42, 56, 94, 99 C-X Tab 58
C-X 10, 101 C-X U 183
C-X ( 154 C-X W 93, 95, 96
C-X ) 154 C-X X 48
C-X + 176, 180, 183 C-X [ 94, 96
C-X - 176, 180, 183 C-X ] 94, 96
C-X . 60 C-X ^ 91, 159
C-X 1 90 C-X _ 63
258 EMACS Manual for TWENEX Users
C-Y 44 Control characters, inserting
C-Z 10, 158 14
C-Z C-Y 159 Control-Meta 111
C-\ 158 Copy File 82
C-] 78, 100, 138, 142, 160 Correct Spelling 69
C-^ 10 Count Matching Lines 100
C-_ 36 Crashes 74
Capitalization 177 Create File 72
Caret 12 CRLF 12, 14
Case conversion 61, 68, 98,Cursor 5, 14
174, 192 Cursor Centering Point 87
Case Replace 98 Customization 11, 25, 117, 144,
Case Search 50, 98 151, 180
Centering 60
Character Search 51 Default Major Mode 83
Character set 9 Default Separator 195
Check Available 33 Define Word Abbrevs 181
Check Batch Queue 33 Defining abbrevs 176, 178
Check Disk 33 Defuns 40, 115
Check Job 33 Delete File 82
Check Log File 33 Delete Matching Lines 100
Check Mail 34 Delete Non-Matching Lines 80,
Check Output Queue 33 100
Check Users 33 Deletion 14, 42, 67, 100, 165
Clean Directory 78 Describe 36, 139
Clear screen 87 Digit Shift Table 68
Collapse in Comparison 91 Directory 77, 80
Comma 99 Directory Lister 77
Command completion 21, 25 DIRED 77, 78, 137
Commands 20 Disable Capabilities 33
Comment Begin 109, 141 Disasters 74
Comment Column 109, 152 Display Ephemeron 32
Comment End 110, 141 Display Matching Paren 106
Comment Start 109, 141, 152 Display Mode Line Inverse 8
Comments 53, 97, 102, 107, 110,Display Overprinting 12
112, 119, 141 Dissociated Press 65
Compare Windows 91 Documentation 38
Compile 103 Dollar Sign 13
Compile Command 104 Down Picture Movement 185
Compiler Filename 104 Drastic Changes 74
Compiler Switches 104 Dumped environments 182
Confirmation 62, 73, 74, 79,
158, 176 Echo area 5, 21, 61, 94, 176
Connect to Directory 34, 78 Echo Area Height 5
Connected 11, 25 Edit Indented Text 57
Continuation line 14 Edit key 188, 189
Control 9, 12, 167 Edit Options 28, 138
Control characters, display ofEdit Picture 29, 185
12 Edit Syntax Table 142
259 EMACS Manual for TWENEX Users
Edit Tab Stops 53, 58
Edit Word Abbrevs 178 Help 10, 36, 167
EFORK 31 Home Directory 145, 166
EMACS.VARS 135, 144, 152 Hooks 183
Enable Capabilities 33
End of Buffer Display Margin 87Ignoriginal 66
Environments 63 Incremental abbrev definition
Ephemerons 32 files 182
Error handler 5 Indent Tabs Mode 58, 135
Error message 5 Indentation 57, 105, 107, 115
Error Messages in Echo Area 161Inferiors 31
EVARS files 179, 180 Init file 189
EXEC 104, 190 Init files 144, 179, 180
Exec Name 31 Insert Buffer 187
Execute Ephemeron 32 Insert File 81
Exit Hook 30 Insert Page Directory 97
Exit to Inferior Hook 31 Insert Word Abbrevs 181, 182
Exit to Superior Hook 30 Insertion 14, 81, 94
Exiting 29 Instant Command Prompt 22
Exiting EMACS 178, 183 INTER 111
Expand Word Abbrevs in RegionInterlisp Mode 110
177 Ispell 69
Expander characters 181
Expanding abbrevs 177 Join pages 97
Expunge Directory 78 Journal files 165
Extended commands 20 Justification 60
FAIL 119 Keyboard macros 7, 153
File dates 73 Kill All Word Abbrevs 180
File deletion 77, 78 Kill Buffer 85
File directory 77 Kill Libraries 137, 163
File Versions Kept 78 Kill ring 44, 163
Files 7, 16, 71, 74, 81, 92,Kill Some Buffers 85, 163
151 Killing 42, 44, 54, 55, 67,
Fill Column 60, 134, 138 112, 164
Fill Prefix 56, 60 Killing abbrevs 176, 178, 180
Filling 59
Find File 84, 124 Labels 119
Find Pat 113 LEDIT 111
FLUSHED 8 Left Picture Movement 185
Forks 31 Libraries 31, 96, 136, 174, 185
Formatting 57, 115 Line noise 37
Formfeed 94 Line Numbers 72
FS Flags 58, 87, 107, 120, 143,Line separator 12, 14
172, 191, 193 Linefeed 12, 57, 102, 105, 116
Functions 11, 20, 25 Linefeed, stray 12
Lines 42, 187
Global abbrevs 174, 180 Lisp 105, 134
Grinding 115 Lisp FOO Indent 117
260 EMACS Manual for TWENEX Users
Lisp Indent DEFAnything 117 M-E 55
Lisp Indent Language 118 M-F 53
Lisp Indent Offset 118 M-G 60
Lisp Indentation Hook 118 M-H 40, 56, 60
Lisp mode 110 M-I 58
Lisp PROG Indent 117 M-J 109
Lisp Special Indent Offset 117 M-K 42, 55
List Buffers 85 M-L 61
List Files 77 M-Linefeed 109
List Handles 32 M-M 57, 105
List Library 137 M-N 108
List Loaded Libraries 137 M-O 194
List Matching Lines 100 M-P 108
List Redefinitions 103, 139 M-Q 60
List Tags 128 M-R 89
List Variables 139 M-Rubout 42, 54, 67
List Word Abbrevs 178, 181, 182M-S 60
Lists 40, 111, 141 M-T 54
Load Library 136 M-Tab 57
Loading 136 M-U 61
Local modes lists 135 M-V 88
Local variables 83, 139, 140,M-W 45
151 M-X 20, 23
Lowercase Lisp Buffer 113 M-Y 46
Lowercase Lisp Region 113 M-[ 56, 64, 119
LSPUTL 113 M-\ 43, 57, 105
M-] 56, 119
M- 9 M-^ 43, 57, 105, 116
M-" 120 M-_ 62
M-$ 69 M-~ 73
M-% 100, 158 M.L 139
M-' 68, 120, 177, 183 Macro-10 119
M-( 113 Macsyma 116
M-) 113 Macsyma mode 120
M-+ 32 MAICHK 35
M-, 32 Mail 34
M-- M-C 68 Mail Reader Library 34
M-- M-L 68 Mail Reader Program 34
M-- M-U 68 Major modes 6, 83, 102, 103,
M-. 125 109, 142, 151, 174
M-; 107 Make Page Permutation Table 187
M-< 15 Make Space 163
M-> 15 Make These Characters Expand
M-@ 40, 54 181
M-A 55 Make Word Abbrev 180
M-Altmode 157 Mark 39, 44, 45, 54, 56, 81,
M-B 53 94, 113, 115, 125
M-C 61 Markov Chain 66
M-D 42, 54 Matching 106, 141
261 EMACS Manual for TWENEX Users
Meta 9, 53, 167, 188, 189 Prepend to File 47, 81
Metizer 10, 158, 189 Preventing abbrev expansion 177
MIDAS 105, 119 Printing characters 14
MIDAS mode 119 Printing terminal 197
Minibuffer 6, 14, 23, 29, 81,Prompting 5, 21
87, 100, 157, 172 PURIFY library 120
Minibuffer Separator 195 Push to EXEC 31
Minor modes 7, 58, 134, 174
MM 23, 48 Q-registers 48
MM (Mail reader) 34 Query Replace 70, 99, 156, 158
MM Commands 20 Quit 166
Mode abbrevs 174, 180 Quitting 50, 160
Mode line 6, 28, 83, 96, 103,Quote Execute Command 24
134, 157 Quoting 14, 182
Motion 53, 55, 94, 111, 115
Moving text 44 R 62
MQREPL 128 Read Command Prompt 21
Muddle mode 111 Read Incremental Word Abbrev File
182
Name Kbd Macro 155 Read Mail 34
Narrowing 61, 93, 95, 98 Read Word Abbrev File 178, 182
Next File 126 Read-Only Visiting 72
Next Screen Context Lines 88 Readable Word Abbrev Files 179
Numeric argument 176, 182 Reap File 77
Numeric arguments 18, 22, 24,Recursive editing level 6, 28,
44, 46, 54, 58, 59, 62, 78, 85, 142, 160, 166,
63, 74, 77, 88, 91, 92, 178
98, 108, 116, 134, 138,Redefining abbrevs 176
159, 189 Redefining commands 145, 151
Region 39, 44, 45, 56, 62, 63,
Only Global Abbrevs 180 81, 93, 94, 115, 116,
Options 138 176, 187
Outragedy 66 Region Query Size 62
Overprinting 12 Rename Buffer 85
Overwrite mode 7, 135 Rename File 82
Replace String 98
PAGE 96 Replacement 98, 100
Page Delimiter 56, 95 Replay Journal File 166
PAGE Flush CRLF 97 Rerun CCL 30, 104
Pages 40, 56, 94, 96, 187 Restarting 164
Paragraph Delimiter 56, 120 Return 10, 12, 14, 71
Paragraphs 40, 55, 60, 64, 110,Return from Inferior Hook 31
119, 187 Return from Superior Hook 30
Parentheses 53, 106, 141 Return, stray 12
Permit Unmatched Paren 106 Revert File 74, 76
Permute Pages From Table 187 Right Picture Movement 185
Pictures 185 Rubout 10, 12, 14, 15, 21, 42,
Point 5, 14 67, 99, 102, 110, 135,
Prefix characters 10, 146, 152 156
262 EMACS Manual for TWENEX Users
Run Library 137 SYSTAT 33
S-expressions 111, 141 Tab 12, 53, 57, 102, 105, 110,
SAIL Character Mode 135 115
SAIL characters 188 Tab Stop Definitions 58
Save All Files 85 Tabify 59
Save Word Abbrevs 178, 183 Tag Table Filenames 125
Saving 71, 74 TAGGEN 124
Saving abbrevs 178 TAGS 84, 92, 137
Screen 5, 87 Tags Apropos 128
SCRIBE 63 Tags File List 128
Scrolling 87, 88, 91 TAGS Find File 84, 124, 128
Search Exit Char 50 Tags Query Replace 128
Search Exit Option 50 Tags Rescan 128
Searching 49, 96, 98 Tags Search 128
Select Buffer 83 Techniquitous 66
Send Mail 34 TECO 21, 23, 26, 31, 48, 56,
Sentences 55, 67 61, 82, 87, 101, 104,
Set Key 25, 180 105, 106, 118, 137,
Set Terminal Type 162, 190 139, 143, 145, 154,
Set Variable 138 164, 193
Set Visited Filename 82 TECO default filenames 82
Short Display Size 194 TECO mode 120
Slow Search Lines 194 TECO search string 128
Slow Search Separator 195 TECO search strings 77, 98, 101
SLOWLY Maximum Speed 195 Temp File FN2 List 77
Sort Lines 187 Terminal type 162, 190
Sort Pages 187 Text justifiers 62
Sort Paragraphs 187 Text mode 53, 106
Sorting 187 Text Mode Hook 106
SOS 72 Toggling 134
Space 10, 12, 21, 59, 69, 99,Top Display Margin 87
156 Top level 6, 160, 164
Space Indent Flag 57 Transposition 54, 68, 113
Spell Program 69 TRMTYP 190
SPLIT 163 Two window mode 90
Split File 163 Typeout 5
Split pages 97 Typos 67, 68
SRCCOM 73
Start Journal File 165 Underline Begin 63
String arguments 22, 24, 77,Underline End 63
138 Underlining 62
String Search 51 Undo 44, 62, 74, 163, 164
Strip SOS Line Numbers 72 Unexpanding abbrevs 177
Submode 6 Unsplit File 163
Subroutines 25 Untabify 59
Subsystem 6 Up Picture Movement 185
Syntax table 53, 54, 106, 110,Uparrow 12
114, 140 Uppercase Lisp Buffer 113
263 EMACS Manual for TWENEX Users
Uppercase Lisp Region 113 ^R Append Next Kill 45
URK 85, 163 ^R Append to Buffer 47
User Name 145 ^R Back to Indentation 57
^R Backward Character 15
Variables 12, 138, 145 ^R Backward Delete Character
View Arglist 128 14, 42, 67, 110
View Buffer 88 ^R Backward Delete Hacking Tabs
View Directory 77 110
View File 81, 89 ^R Backward Environment 64
View Kbd Macro 155 ^R Backward Kill Sentence 42,
View Page Directory 97 55, 67
Visit File 82 ^R Backward Kill Sexp 42, 112
Visit File Save Old 72 ^R Backward Kill Word 42, 54,
Visit Tag Table 124 67
Visiting 16, 71, 74, 84, 92 ^R Backward List 112
^R Backward Paragraph 56, 119
W2 90 ^R Backward SCRIBE Paragraph 64
What Available Space 163 ^R Backward Sentence 55
What Cursor Position 61 ^R Backward Sexp 111
What Page 94 ^R Backward TECO Conditional
What Tag? 129 120
Windows 90 ^R Backward Up Environment 64
Word Abbrev Hook 183 ^R Backward Up List 112
Word abbrev mode 7, 135, 174,^R Backward Word 53
175, 180 ^R Beginning of Defun 115
Word Search 51 ^R Beginning of Line 15
WORDAB 174 ^R Buffer Not Modified 73
WORDAB All Caps 177 ^R Center Line 60
WORDAB Ins Chars 181 ^R Change Environment Name 64
WORDAB Setup Hook 183 ^R Change Form 64
WORDAB.DEFNS 178 ^R Commands 20
Words 40, 53, 61, 62, 67, 68,^R Copy Region 45
140 ^R Correct Word Spelling 69
Write File 76, 81 ^R Count Lines Page 95
Write Incremental Word Abbrev^R CRLF 14
File 182 ^R Delete Blank Lines 17, 43
Write Kbd Macro 155 ^R Delete Character 42
Write Word Abbrev File 178, 182^R Delete Horizontal Space 43,
57, 105
XLISP 113 ^R Delete Indentation 43, 57,
105, 116
^ 12, 99 ^R Directory Display 77
^R (in function names) 11 ^R DIRED 80
^R Abbrev Expand Only 177 ^R Down Comment Line 108
^R Add Global Word Abbrev 176,^R Down Environment 64
180 ^R Down List 112
^R Add Mode Word Abbrev 176,^R Down Real Line 15
180 ^R Edit Quietly 194
^R Add Tag 126 ^R End Kbd Macro 154
264 EMACS Manual for TWENEX Users
^R End of Defun 115 ^R Join Next Page 97
^R End of Environment 64 ^R Kbd Macro Query 155
^R End of Line 15 ^R Kill Comment 108
^R Exchange Point and Mark 40 ^R Kill Global Word Abbrev 180
^R Execute Kbd Macro 154 ^R Kill Inferior 32
^R Execute Minibuffer 157 ^R Kill Line 42
^R Exit 29, 138 ^R Kill Mode Word Abbrev 180
^R Extract Sublist 113 ^R Kill Region 42
^R Fill Paragraph 60 ^R Kill Sentence 42, 55
^R Fill Region 60 ^R Kill Sexp 42, 112
^R Format Code 116 ^R Kill Terminated Word 119
^R Forward Character 15 ^R Kill Word 42, 54
^R Forward Environment 64 ^R Lowercase Region 62
^R Forward List 112 ^R Lowercase Word 61, 68
^R Forward Paragraph 56, 119 ^R Mark Beginning 40
^R Forward Sentence 55 ^R Mark Defun 40, 115
^R Forward Sexp 111 ^R Mark End 40
^R Forward TECO Conditional 120^R Mark Environment 64
^R Forward Up List 112 ^R Mark Page 40, 94
^R Forward Word 53 ^R Mark Paragraph 40, 56
^R Get Q-reg 48 ^R Mark Sexp 40, 113
^R Go to AC Field 119 ^R Mark Whole Buffer 40
^R Go to Address Field 119 ^R Mark Word 40, 54
^R Go to Next Label 119 ^R Move Over ) 113
^R Go to Previous Label 119 ^R Move to Screen Edge 89
^R Goto Beginning 15 ^R Narrow Bounds to Page 93, 95
^R Goto End 15 ^R Narrow Bounds to Region 93
^R Goto Next Page 96 ^R New Window 15, 87, 197
^R Goto Page 96 ^R Next Page 94
^R Goto Previous Page 96 ^R Next Screen 88
^R Grow Window 91, 159 ^R One Window 90
^R Incremental Search 49, 96 ^R Open Line 17, 18
^R Indent for Comment 107 ^R Other Window 90
^R Indent for Lisp 110, 115 ^R PAGE Widen Bounds 96
^R Indent Nested 120 ^R Prefix Control 10
^R Indent New Comment Line 109 ^R Prefix Control-Meta 10
^R Indent New Line 57, 102,^R Prefix Meta 10
105, 116 ^R Previous Page 94
^R Indent Region 58, 116 ^R Previous Screen 88
^R Indent Rigidly 58 ^R Put Q-reg 48
^R Indent Sexp 116 ^R Query Replace 100, 158
^R Insert () 113 ^R Quoted Insert 14
^R Insert Pagemark 97 ^R Re-execute Minibuffer 23,
^R Instant Extended Command 22 99, 158
^R Inverse Add Global Word Abbrev^R Reposition Window 89
176, 180 ^R Return to Superior 29
^R Inverse Add Mode Word Abbrev^R Reverse Search 49, 96
176, 180 ^R Save File 16, 72, 85
^R Invoke Inferior 32 ^R Scroll Other Window 91
265 EMACS Manual for TWENEX Users
^R Set Comment Column 109
^R Set File Read-Only 72
^R Set Fill Column 60, 134
^R Set Fill Prefix 60
^R Set Screen Size 194
^R Set/Pop Mark 39
^R Slow Display I-Search 194
^R Slow Reverse Display I-search
194
^R Start Kbd Macro 154
^R System Load Average 33
^R Tab to Tab Stop 53, 58
^R Transpose Characters 15, 68
^R Transpose Lines 68
^R Transpose Regions 68
^R Transpose Sexps 113
^R Transpose Words 54
^R Two Windows 90
^R Un-kill 44
^R Un-kill Pop 46
^R Underline Region 63
^R Underline Word 62
^R Universal Argument 18
^R Up Comment Line 108
^R Up Real Line 15
^R Upcase Digit 68
^R Uppercase Initial 61, 68
^R Uppercase Region 39, 62
^R Uppercase Word 61, 68
^R View Two Windows 91
^R Visit File 16, 71
^R Visit in Other Window 92
^R Widen Bounds 93, 95
^R Word Abbrev Prefix Mark 177
i EMACS Manual for TWENEX Users
TABLE OF CONTENTS
Introduction 3
1. The Organization of the Screen 5
1.1 The Mode Line 6
2. Character Sets and Command Input Conventions 9
2.1 The 9-bit Command Character Set 9
2.2 Prefix Characters 10
2.3 Commands, Functions, and Variables 11
2.4 Notational Conventions for ASCII Characters 12
3. Basic Editing Commands 14
3.1 Inserting Text 14
3.2 Moving The Cursor 15
3.3 Erasing Text 15
3.4 Files 16
3.5 Help 16
3.6 Using Blank Lines Can Make Editing Faster 17
4. Giving Numeric Arguments to EMACS Commands 18
4.1 Autoarg Mode 19
5. Extended (Meta-X) Commands and Functions 20
5.1 Issuing Extended Commands 20
5.2 Arcane Information about M-X Commands 23
6. Moving Up And Down Levels 27
6.1 Subsystems 27
6.2 Recursive Editing Levels 28
6.3 Exiting Levels; Exiting EMACS 29
6.4 Running Subforks under EMACS 30
ii EMACS Manual for TWENEX Users
6.5 Reading Mail 34
7. Self-Documentation Commands 36
8. The Mark and the Region 39
8.1 Commands to Mark Textual Objects 40
8.2 The Ring of Marks 41
9. Killing and Moving Text 42
9.1 Deletion and Killing 42
9.2 Un-Killing 44
9.3 Other Ways of Copying Text 47
10. Searching 49
11. Commands for English Text 53
11.1 Word Commands 53
11.2 Sentence and Paragraph Commands 55
11.3 Indentation Commands for Text 57
11.4 Text Filling 59
11.5 Case Conversion Commands 61
11.6 Underlining 62
11.7 SCRIBE Mode 63
11.8 Dissociated Press 65
12. Commands for Fixing Typos 67
12.1 Killing Your Mistakes 67
12.2 Transposition 68
12.3 Case Conversion 68
12.4 Checking and Correcting Spelling 69
13. File Handling 71
13.1 Visiting Files 71
13.2 How to Undo Drastic Changes to a File 74
13.3 Auto Save Mode: Protection Against Disasters 74
iii EMACS Manual for TWENEX Users
13.4 Listing a File Directory 77
13.5 Cleaning a File Directory 77
13.6 DIRED, the Directory Editor Subsystem 78
13.7 Miscellaneous File Operations 81
14. Using Multiple Buffers 83
14.1 Creating and Selecting Buffers 83
14.2 Using Existing Buffers 85
14.3 Killing Buffers 85
15. Controlling the Display 87
16. Two Window Mode 90
16.1 Multiple Windows and Multiple Buffers 92
17. Narrowing 93
18. Commands for Manipulating Pages 94
18.1 Editing Only One Page at a Time 96
19. Replacement Commands 98
19.1 Query Replace 99
19.2 Other Search-and-loop Functions 100
19.3 TECO Search Strings 101
20. Editing Programs 102
20.1 Major Modes 102
20.2 Compiling Your Program 103
20.3 Indentation Commands for Code 104
20.4 Automatic Display Of Matching Parentheses 106
20.5 Manipulating Comments 107
20.6 Lisp Mode and Muddle Mode 110
20.7 Lisp Grinding 115
20.8 Editing Assembly-Language Programs 119
20.9 Major Modes for Other Languages 120
iv EMACS Manual for TWENEX Users
21. The TAGS Package. 122
21.1 How to Make a Tag Table for a Program 122
21.2 How to Tell EMACS You Want to Use TAGS 124
21.3 Jumping to a Tag 125
21.4 Other Operations on Tag Tables 126
21.5 What Constitutes a Tag 129
21.6 Adding or Removing Source Files 130
21.7 How a Tag Is Described in the Tag Table 131
21.8 Tag Tables for INFO Structured Documentation Files 132
22. Simple Customization 134
22.1 Minor Modes 134
22.2 Libraries of Commands 136
22.3 Variables 138
22.4 The Syntax Table 140
22.5 FS Flags 143
22.6 Init Files and EMACS.VARS Files 144
22.7 Local Variables in Files 151
22.8 Keyboard Macros 153
23. The Minibuffer 157
24. Correcting Mistakes and EMACS Problems 160
24.1 Quitting and Aborting 160
24.2 Dealing with Common Forms of EMACS Lossage 161
24.3 Undoing Changes to the Buffer 164
24.4 Journal Files 165
24.5 Reporting Bugs 170
25. Word Abbreviation Input 174
25.1 Basic Usage 175
25.2 Advanced Usage 179
25.3 Teco Details for Extension Writers 183
26. The PICTURE Subsystem, an Editor for Text Pictures 185
27. Sorting Functions 187
v EMACS Manual for TWENEX Users
Appendix I. Particular Types of Terminals 188
I.1 Ideal Keyboards 188
I.2 Keyboards with an "Edit" key 188
I.3 ASCII Keyboards 189
I.4 Specifying Terminal Type 190
I.5 Upper-case-only Terminals 192
I.6 The SLOWLY Package for Slow Terminals 193
Appendix II. Use of EMACS from Printing Terminals 197
Glossary 199
Command Summary 211
Catalog of Libraries 236
Index of Variables 243
Index 256