There is 1 other file named emacs.news in the archive. Click here to see a list.
**** Note - Incompatible changes are indicated by "**)" at beginning of item:
*) Extended command name changes:
M-X Occur -> M-X List Matching Lines
M-X How Many -> M-X Count Occurrences
M-X Keep Lines -> M-X Delete Non-Matching Lines
M-X Flush Lines -> M-X Delete Matching Lines
M-X View Available Space -> M-X What Available Space
The old names (on the left) will still be accepted.
*) The function names ^R Set Bounds Region, ^R Set Bounds Full,
and ^R Set Bounds Page have been changed. The new function names are:
^R Narrow Bounds to Region, ^R Widen Bounds, and ^R Narrow Bounds to Page.
The old names still work, for now. The purpose is to make the functions
show up when expected in an Apropos.
*) You can now turn auto save mode on and off safely by setting the
variable Auto Save Mode. This is compatible with all other minor modes.
*) The mode line says "narrow" when you have narrowed down.
**) Visit File Save Old now controls whether visiting a new file causes
the old one to be saved. If this variable is zero, the old file is
not saved. If it is -1, then the old file is automatically saved. If
the variable is 1, then you are asked whether to save. The default
value is 1. This variable replaces the old distinction between C-X
C-R and C-X C-V, which are now identical commands.
*) The variable Inhibit Write is no longer used for anything, though
it still exists to keep some old programs from bombing. Find File
Inhibit Write no longer exists at all.
**) True read-only visiting is now implemented. An argument to the
file-visiting command (C-X C-V or C-X C-F) is used to request this.
Either the buffer or the file can be read-only. A read-only buffer
means that you can't insert or delete anything. A read-only file
means you can change the text in the buffer, but it will not be saved
in the file unless you insist. To insist, you type C-X C-S and answer
"Y" to confirm; absolutely nothing else will cause the read-only file
to be saved.
Normally what you get is a read-only file, whose buffer can be edited.
The command C-X C-Q (^R Set Read-Only File) can be used to switch
between the three modes (ordinary, read-only buffer, and read-only
*) New self-documentation for recursive editing levels.
When you are inside a recursive editing level, Help ? mentions this
and tells you how to abort and how to exit, as well as listing the
Help options available. A new Help option, Help R, gives the full
description of the command that got you into the recursive editing
*) If the variable Auto Save All Buffers is nonzero, each auto save
will save whichever buffers need to be saved. It is up to you to make
sure that the buffers are saved in different places, either by using
Auto Save Visited File, or by giving each buffer a different value of
Auto Save Filename (perhaps automatically in a Buffer Creation Hook).
*) EMACS remembers the current version number of each visited file,
and displays this in the mode line and in the printout from List
*) The Delete File command asks for confirmation if it is not sure
that you know what default filenames were applied to the filename you
*) M-X View Available Space prints out how many pages of space are
available in EMACS for more buffers or more libraries.
*) The character "#" now has the syntax of a prefix character in Lisp
*) ^R Indent for Comment now does not move comments that start with a
single semicolon in column 0.
*** Customization ***
**) The format of EVARS files and local mode lines has been changed to
allow variable values to be multi-line strings.
The value specified for a variable should now be either a number or a
string enclosed in doublequote characters. Indentation before the
number or before the string is ignored. To include a doublequote
character in the contents of the string, quote it with a character.
Except for peculiar cases, old EVARS files and local modes lists still
work. Peculir cases include string values which happen to begin with
spaces followed by a doublequote, or spaces followed by a digit.
The change applies only to values of variables. Lines which specify
definitions for command characters are still single lines of TECO
*) So that certain common forms of customization will not need to use
FS flags, there are now variables which you can use instead of certain
FS flags which people often set. Setting the variable sets the FS
flag. Setting the FS flag explicitly also works, but the value of the
variable does not change, so it is best not to mix the two styles of
Here is a complete list of variables which control FS flags. Not all
of these are new.
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 (Twenex only)
Top Display Margin FS %TOP
*** Extension ***
**) The format of the value of the variable Prefix Char List is
changed. This should only affect people who create their own prefix
characters. The purpose of the change is to allow for prefix
characters whose dispatch tables are kept in variables rather than in
q-registers. The new format of the value is: any number of lines,
with a CRLF after each line, one line per prefix character.
Each line contains the name to be printed for the prefix character,
followed by two spaces, and the TECO expression which evaluates to the
dispatch table for the prefix character. Look at the initial value of
this variable if this is not clear.
**) & Exit EMACS now calls the Exit Hook in addition to auto saving and
optional explicit saving. The Exit Hook used to override them.
*) The TECO feature FS SUPERIOR is now fully exploited by EMACS.
Superiors can tell an EMACS to make space in the buffer, or to visit a
file, by following the protocol described near the end of TECORD.
*) M-X Describe can be given a precomma argument, which should be the
character number of a ^R command being described. This is passed
along to any documentation-macros contained in the documentation
*) FS TAB WIDTH now controls the distance between tab stops on
display. By setting this to 10, you can view a file the way it would
look on Multics.
*) On Twenex, Return from Inferior Hook is called on return from an
inferior if Exit Hook is called before starting the inferior.
**** The remainder of this file is mainly for LISP users ****
*) A new Lisp indentation style is in use.
The changes have been provided for the following reasons:
* To increase the ease with which stylized ``LispMachine-style'' Lisp
indentation can be obtained in a user-programmable way.
* To lessen loss of screen space due to indentation. This indenter is much
more conservative about the amount of indent it gives to many kinds of
* To enhance error checking. Many kinds of Lisp forms (DO, PROG,
LET, LAMBDA, ...) have some number of leading forms, treated specially,
followed by some trailing forms, called the body. Common forms of this
type will now have expressions in their bodies indented slightly
differently than their leading expressions to accentuate the separation.
(DO ((X 0 (1+ X)))
((= X 10.))
What follows is information about how customized indentation.
* How Indentation is Decided
The old indentation algorithm is first run, and a tentative indentation
is computed. Then a hook is run to allow selection of a different
indentation if appropriate.
* User-Level Variables
Lisp ... Indent where the '...' is replaced by the name of a Lisp operator,
defines a special indentation method for that operator. Eg,
Lisp PROG Indent controls how PROG's indent. The value of variables
may be a string, in which case they will be called to compute
the indentation (argument conventions and return values to be discussed
later) or a number indicating one of several common operations.
-4 or less undefined
-3 don't indent any special way unless the value of
Lisp Indent DEFanything dictates that we should.
This is the default for unknown functions.
-2 don't indent any special way.
-1 indent as a DEF-form. If this is the 2nd line of the
definition, indent specially. Otherwise, indent under
0 or more indent as a special form, assuming that this form
has n leading expressions before its body. (eg, LET
and LAMBDA have 1 special expression for the bound
variable list, PROGN has none, DO has 2). These
special fields are indented normally. The first
expression following these special ones is indented
specially. Expressions after that are indented
under the previous line as normal.
The variable Lisp PROG Indent is initially defined to run code so that PROG
tags can line up right-justified. Variables corresponding to several
of the common Lisp special forms are set up with non-negative values
corresponding to the indentation style suggested by their semantics.
Lisp Indent DEFanything, if nonzero, will cause all operator names
beginning with 'DEF' to default to definitional form style indentation
(corresponding to a Lisp DEF... Indent variable of -1). Setting this
to 0 will cause 'DEF...' operators to be indented specially only if
they have associated Lisp ... Indent variables set up to cause such
Lisp Indent Offset (default 0), if nonzero, indent this many columns past
the most recent unclosed "(" rather than worrying about indentation
relative to arguments (this also bypasses special form hackery).
If 0, normal Lispy indentation rules apply.
NOTE: Although this variable has been present for a long time,
it has changed slightly. It used to measure offset from the
right side of the paren. Now it measures offset from the left
of the paren. The change was made to provide greater flexibility
since formerly it was impossible to say you wanted to indent
just after the hanging open paren.
Lisp Special Indent Offset (default 2), is the offset from the hanging
"(" which special form indentation uses. Eg, with the default setting,
Emacs will indent under the "E" of "DEFUN".
* Low-Level Variables (primarily of interest to Emacs implementors)
Lisp Indent Language contains a string (default "LISP") which is used
to decide which lisp-like language is to be used. Other hooks key
off of this string; ie, if the Indent Language is LISP, variables
like LISP Indent Offset and Lisp PROG Indent will be looked for.
If the language were Muddle, variables such as Muddle Indent Offset and
Muddle PROG Indent would be looked for instead. Currently, Muddle mode
doesn't use this feature, but perhaps it will in the near future.
In the remainder of this description, only Lisp ... variables
since they are the only ones which are currently useful to most users,
but implementors should bear in mind that similar variables for
other dialects may be defined if a local variable
Lisp Indent Language is created with the appropriate dialect
name as its contents.
Lisp Indentation Hook holds the function which tries to determine how
special forms should be indented. All of the effects described
farther down in this description are dependent on its containing
the default value. If you do not like the action of this hook,
you may wish to put a null string in this variable to keep it
from doing anything -- effectively nullifying most of the changes
described in this text.
* Extension Conventions (for sophisticated users only)
Lisp Indentation Hook (or Muddle Indentation Hook or ...) must be
defined and must contain a string. Its args (,) 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,
it will be assumed that the horizontal cursor position (given by
fsshpos) is to be used as the indetnation level. Hence, to indent
under the "O" in PROG, it is sufficient to jump to that character in
the buffer and return. Replacement of the pointer to the appropriate
line will happen automatically later. If it returns nonzero, that
value will be assumed to be the desired indentation. Returning
negative values is undefined.
Lisp ... Indent variables containing strings to be executed observe the
same argument conventions as the Lisp Indentation Hook would.