1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-24 07:20:37 +00:00

Rewritten for Emacs 22->21.

This commit is contained in:
Richard M. Stallman 2005-03-17 23:16:11 +00:00
parent 5a1f9fcfea
commit 4b87835445

View File

@ -1,298 +1,437 @@
@c -*-texinfo-*-
@c This is part of the GNU Emacs Lisp Reference Manual.
@c Copyright (C) 1999 Free Software Foundation, Inc.
@c Copyright (C) 2005 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
@c This node must have no pointers.
@node Antinews, GNU Free Documentation License, System Interface, Top
@appendix Emacs 20 Antinews
@appendix Emacs 21 Antinews
For those users who live backwards in time, here is information about
downgrading to Emacs version 20.4. We hope you will enjoy the greater
simplicity that results from the absence of many Emacs 21 features. In
the following section, we carry this information back to Emacs
20.3, for which the previous printed edition of this manual was made.
downgrading to Emacs version 21.4. We hope you will enjoy the greater
simplicity that results from the absence of many Emacs 22 features.
@section Old Lisp Features in Emacs 20
@section Old Lisp Features in Emacs 21
@itemize @bullet
@item
The @code{push} and @code{pop} macros are not defined.
Neither are @code{dolist} and @code{dotimes}.
Many unnecessary features of redisplay have been eliminated. (The
earlier major release, Emacs 20, will have a completely rewritten
redisplay engine, which will be even simpler.)
@itemize @minus
@item
The function @code{force-window-update} has been removed. It
shouldn't be needed, since changes in window contents are detected
automatically. In case they aren't, call @code{redraw-display} to
redraw everything.
@item
You can't display images in buffers. (Emacs is meant for editing text.)
With no images, there are no display margins, and no tool bars.
Point no longer moves out from underneath invisible text at the end of
each command. This allows the user to detect invisible text by moving
the cursor around---if the cursor gets stuck, there is something
invisible in the way. If you really want cursor motion to ignore the
text, try marking it as intangible.
@item
The @code{display} text property has no special meaning; you can use it
freely in Lisp programs, with no effects except what you implement for
yourself. With no images, who needs the @code{display} text property?
Support for image maps and image slices has been removed. Emacs was
always meant for editing text, anyway.
@item
The @code{field} text property has no special meaning; buffers are no
longer subdivided into fields. (The division of information into
fields is always rather arbitrary.)
The mode line now accepts all text properties, as well as
@code{:propertize} and @code{:eval} forms, regardless of the
@code{risky-local-variable} property.
@item
Faces have fewer attributes. The attributes @code{:family},
@code{:height}, @code{:width}, @code{:weight}, and @code{:slant},
have been replaced with a font name, a ``bold'' flag, and an
``italic'' flag.
The attributes @code{:overline}, @code{:strike-through} and @code{:box}
have been eliminated too. Underlining now always has the same color as
the text---using any other color would be bad taste.
With fewer font attributes, there are no functions
@code{set-face-attribute} and @code{face-attribute}. Instead, you
access these attributes using functions such as @code{face-font}, and
set them with functions such as @code{set-face-font}. (These functions
were available in Emacs 21, but are not as useful there.)
The @code{line-height} and @code{line-spacing} properties no longer
have any meaning for newline characters. Such properties wouldn't
make sense, since newlines are not really characters; they just tell
you where to break a line.
@item
The standard faces @code{scroll-bar}, @code{menu}, @code{border},
@code{cursor}, and @code{mouse} have been eliminated. They are rather
strange, as faces, and therefore shouldn't really exist. You can use
@code{set-border-color}, @code{set-cursor-color} and
@code{set-mouse-color} to specify the colors for the frame border, the
text cursor, and the mouse cursor. To specify menu colors, use X
resources.
Considerable simplifications have been made to the display
specification @code{(space . @var{props})}, which is used for
displaying a space of specified width and height. Pixel-based
specifications and Lisp expressions are no longer accepted.
@item
Colors and other face attributes are no longer supported on character
terminals, so you no longer have to worry about terminals making faces
at you.
Many features associated with the fringe areas have been removed, to
encourage people to concentrate on the main editing area (the fringe
will be completely removed in Emacs 20.) Arbitrary bitmaps can no
longer be displayed in the fringe; an overlay arrow can still be
displayed, but there can only be one overlay arrow at a time (any more
would be confusing.) The fringe widths cannot be adjusted, and
individual windows cannot have their own fringe settings. A mouse
click on the fringe no longer generates a special event.
@item
Emacs will respect your peace and quiet, aside from occasional beeps,
because there are no facilities for playing sounds.
Individual windows cannot have their own scroll-bar settings.
@item
Emacs 20 provides a complex and badly designed method for handling
character composition for languages such as Thai that display several
letters as a single combined image. We are too ashamed of it to tell
you any more than that.
You can no longer use @samp{default} in a @code{defface} to specify
defaults for subsequent faces.
@item
@code{delete-and-extract-region} has been deleted; instead, use
@code{buffer-substring} to extract the text, then use
@code{delete-region} to delete it.
The function @code{display-supports-face-attributes-p} has been
removed. In @code{defface} specifications, the @code{supports}
predicate is no longer supported.
@item
Regular expressions do not support the POSIX character classes
such as @samp{[:alpha:]}. All characters are created equal.
@code{face-attribute-relative-p} and @code{merge-face-attribute} have
been removed.
@item
Hash tables have been eliminated; use alists instead.
The priority of faces in a list supplied by the @code{:inherit} face
attribute has been reversed. We like to make changes like this once
in a while, to keep Emacs Lisp programmers on their toes.
@item
The Lisp printer does not detect and report circular structure. That is
ok, because the Lisp reader cannot recreate circular structure anyway.
However, there is a library @samp{cust-print.el} which can report
circular structure.
The @code{min-colors} face attribute, used for tailoring faces to
limited-color displays, does not exist. If in doubt, use colors like
``white'' and ``black'', which ought to be defined everywhere.
@item
Emacs provides its own implementation of scroll bars, instead
of using those of the X toolkit. They always use the frame foreground
and background colors, so you cannot specify different colors for
the scroll bars.
@item
For simplicity, all @acronym{ASCII} characters now have the same height and width.
(Certain characters, such as Chinese characters, always have twice
the standard width.) All characters are created equal.
@item
You can now resize any Emacs window, and size changes in one window can
propagate to all others. Windows can no longer use
@code{window-size-fixed} to get special privileges.
@item
The function @code{intern-soft} no longer accepts a symbol as argument.
@item
The function @code{bitmap-spec-p} has been renamed to
@code{pixmap-spec-p} to encourage users to practice Emacs' help system
while trying to find it.
@item
Tooltips operate using ordinary Emacs frames.
@item
Areas of the mode line are not mouse-sensitive; however, some mouse
commands are available for the mode line as a whole.
@item
Windows cannot have header lines. Conversely, there is no way to turn
off the mode line of a window unless it is a minibuffer.
@item
Plain dashes are the only separators you can use in a menu.
@item
Vertical fractional scrolling does not exist.
@item
The functions @code{format} and @code{message} ignore and discard text
properties.
@item
The function @code{propertize} does not exist;
you can get the job done using @code{set-text-properties}.
@item
Colors are supported only on window systems, not on text-only terminals.
So the support functions for colors on text-only terminals are
not needed, and have been eliminated.
@item
The functions @code{color-values}, @code{color-defined-p} and
@code{defined-colors} have been renamed to @code{x-color-values},
@code{x-color-defined-p} and @code{x-defined-colors}.
@item
Windows cannot be made fixed-width or fixed-height;
Emacs will adjust the size of all windows when it needs to.
@item
The string used as the value of the @code{before-string} or
@code{after-string} property must contain only characters that display
as a single column---control characters, including tabs and newlines,
will give strange results.
@item
The minibuffer prompt does not actually appear in content of the
minibuffer; it is displayed specially in the minibuffer window.
@item
The ``exclusive open'' feature of @code{write-region}
has been eliminated; any non-@code{nil} value for the seventh
argument now means to ask the user for confirmation.
@item
The function @code{buffer-size} always reports on the
current buffer.
@item
The function @code{assq-delete-all} has itself been deleted.
So there!
@item
The keyword @code{:set-after} no longer does anything in
@code{defcustom}.
@item
The variable @code{small-temporary-file-directory} has no special
meaning. There's only one variable for specifying which directory to
use for temporary files, @code{temporary-file-directory}, but not all
Emacs features use it anyway. Some use the @code{TMP} environment
variable, and some use the @code{TMPDIR} environment variable.
@item
If the second argument of @code{save-some-buffers}, @var{pred}, is not
@code{nil}, then the precise value no longer matters. Any
non-@code{nil} value means the same as @code{t}: offer to save each
non-file buffer that has a non-@code{nil} value for
@code{buffer-offer-save}.
@item
The variable @code{inhibit-modification-hooks}
has no special meaning.
@item
The hook @code{fontification-functions} has been eliminated,
but there are other hooks, such as @code{window-scroll-functions},
that you can use to do a similar job.
@item
The variable @code{redisplay-dont-pause}
has no special meaning.
@item
The hook @code{calendar-move-hook} has been deleted.
@item
The function @code{move-to-column} treats any non-@code{nil}
second argument just like @code{t}.
The @code{tty-color-mode} frame parameter does not exist. You should
just trust the terminal capabilities database.
@end itemize
@section Old Lisp Features in Emacs 20.3
Here are the most important of the features that you will learn
to do without in Emacs 20.3:
Here are changes in the Lisp language itself:
@itemize @bullet
@item
The functions @code{line-beginning-position} and @code{line-end-position}
have been eliminated.
Several simplifications have been made to mouse support:
@itemize @minus
@item
Clicking @kbd{mouse-1} won't follow links, as that is alien to the
spirit of Emacs. Therefore, the @code{follow-link} property doesn't
has any special meaning, and the function @code{mouse-on-link-p} has
been removed.
@item
The functions @code{directory-files-and-attributes},
@code{file-attributes-lessp}, and @code{file-expand-wildcards}, have
The variable @code{void-text-area-pointer} has been removed, so the
mouse pointer shape remains unchanged when moving between valid text
areas and void text areas. The @code{pointer} image and text
properties are no longer supported.
@item
Mouse events will no longer specify the timestamp, the object clicked,
equivalent buffer positions (for marginal or fringe areas), glyph
coordinates, or relative pixel coordinates.
@end itemize
@item
Simplifications have also been made to the way Emacs handles keymaps
and key sequences:
@itemize @minus
@item
The @code{kbd} macro has been removed. It isn't that difficult to
write key sequences using the string and vector representations, and
we want to encourage users to learn.
@item
Emacs no longer supports key remapping. You can do pretty much the
same thing with @code{substitute-key-definition}, or by advising the
relevant command.
@item
The @code{keymap} text and overlay property is now overridden by minor
mode keymaps, and will not work at the ends of text properties and
overlays.
@item
The functions @code{map-keymap}, @code{keymap-prompt}, and
@code{current-active-maps} have been removed.
@end itemize
@item
Process support has been pared down to a functional minimum. The
functions @code{call-process-shell-command} and @code{process-file}
have been deleted. Processes no longer maintain property lists, and
they won't ask any questions when the user tries to exit Emacs (which
would simply be rude.) The function @code{signal-process} won't
accept a process object, only the process id; determining the process
id from a process object is left as an exercise to the programmer.
@item
Networking has also been simplified: @code{make-network-process} and
its various associated function have all been replaced with a single
easy-to-use function, @code{open-network-stream}, which can't use UDP,
can't act as a server, and can't set up non-blocking connections.
Also, deleting a network process with @code{delete-process} won't call
the sentinel.
@item
Many programming shortcuts have been deleted, to provide you with the
enjoyment of ``rolling your own''. The macros @code{while-no-input},
@code{with-local-quit}, @code{with-selected-window},
@code{dynamic-completion-table}, and @code{lazy-completion-table} no
longer exist. Also, there are no built-in progress reporters.
@item
Variable aliases are no longer supported. Aliases are for functions,
not for variables.
@item
The variables @code{most-positive-fixnum} and
@code{most-negative-fixnum} do not exist. On 32 bit machines, the
most positive integer is probably 134217727, and the most negative
integer is probably -134217728.
@item
The functions @code{eql} and @code{macroexpand-all} are no longer
available. However, you can find similar functions in the @code{cl}
package.
@item
The list returned by @code{split-string} won't include null substrings
for separators at the beginning or end of a string. If you want to
check for such separators, do it separately.
@item
The function @code{assoc-string} has been removed. Use
@code{assoc-ignore-case} or @code{assoc-ignore-representation} (which
are no longer obsolete.)
@item
The escape sequence @samp{\s} is always interpreted as a super
modifier, never a space.
@item
The variable @code{buffer-save-without-query} has been removed, to
prevent Emacs from sneakily saving buffers. Also, the hook
@code{before-save-hook} has been removed, so if you want something to
be done before saving, advise or redefine @code{basic-save-buffer}.
@item
The variable @code{buffer-auto-save-file-format} has been renamed to
@code{auto-save-file-format}, and is no longer a permanent local.
@item
The function @code{visited-file-modtime} now returns a cons, instead
of a list of two integers. The primitive @code{set-file-times} has
been eliminated.
@item
The functions @code{decode-coding-region} and @code{encode-coding-region}
leave text properties untouched, in case that is useful. (It rarely makes
any sense, though.)
The function @code{file-remote-p} is no longer available.
@item
The functions @code{position-bytes} and @code{byte-to-position} have
been eliminated.
When determining the filename extension, a leading dot in a filename
is no longer ignored. Thus, @file{.emacs} is considered to have
extension @file{emacs}, rather than being extensionless.
@item
Temporary buffers made with @code{with-output-to-temp-buffer} are now
modifiable by default, and use Fundamental mode rather than Help mode.
Emacs looks for special file handlers in a more efficient manner: it
will choose the first matching handler in
@code{file-name-handler-alist}, rather than trying to figure out which
provides the closest match.
@item
The functions @code{sref} interprets its @var{index} argument as a
number of bytes, not a number of characters. And the function
@code{char-bytes} actually tries to report on the number of bytes that a
character occupies.
The @code{predicate} argument for @code{read-file-name} has been
removed, and so have the variables @code{read-file-name-function} and
@code{read-file-name-completion-ignore-case}. The function
@code{read-directory-name} has also been removed.
@item
The function @code{process-running-child-p} has been eliminated.
The functions @code{all-completions} and @code{try-completion} will no
longer accept lists of strings or hash tables (it will still accept
alists, obarrays, and functions.) In addition, the function
@code{test-completion} is no longer available.
@item
The function @code{interrupt-process} and similar functions no longer do
anything special when the second argument is @code{lambda}.
Arbitrary Lisp functions can no longer be recorded into
@code{buffer-undo-list}. As a consequence, @code{yank-undo-function}
is obsolete, and has been removed.
@item
The function @code{define-prefix-command} accepts only two arguments.
Emacs will never complain about commands that accumulate too much undo
information, so you no longer have to worry about binding
@code{buffer-undo-list} to @code{t} for such commands (though you may
want to do that anyway, to avoid taking up unnecessary memory space.)
@item
The meaning of the second argument to @code{read-char},
@code{read-event}, and @code{read-char-exclusive} has been reversed:
they use the current input method if the argument is if @code{nil}.
Atomic change groups are no longer supported.
@item
The function @code{with-temp-message} has been eliminated.
The list returned by @code{(match-data t)} no longer records the
buffer as a final element.
@item
The function @code{clear-this-command-keys} has been eliminated.
The function @code{looking-back} has been removed, so we no longer
have the benefit of hindsight.
@item
The functions @code{gap-position} and @code{gap-size} have been eliminated.
The variable @code{search-spaces-regexp} does not exist. Spaces
always stand for themselves in regular expression searches.
@item
In @code{modify-face}, an argument of @code{(nil)} has no special
The functions @code{skip-chars-forward} and @code{skip-chars-backward}
no longer accepts character classes such as @samp{[:alpha:]}. All
characters are created equal.
@item
The @code{yank-handler} text property no longer has any meaning.
Also, @code{yank-excluded-properties}, @code{insert-for-yank}, and
@code{insert-buffer-substring-as-yank} have all been removed.
@item
The variable @code{char-property-alias-alist} has been deleted.
Aliases are for functions, not for properties.
@item
The function @code{get-char-property-and-overlay} has been deleted.
If you want the properties at a point, find the text properties at the
point; then, find the overlays at the point, and find the properties
on those overlays.
@item
Font Lock mode only manages @code{face} properties; you can't use
font-lock keywords to specify arbitrary text properties for it to
manage. After all, it is called Font Lock mode, not Arbitrary
Properties Lock mode.
@item
The arguments to @code{remove-overlays} are no longer optional.
@item
In @code{replace-match}, the replacement text now inherits properties
from the surrounding text.
@item
@code{mode-line-format} no longer supports the @code{:propertize},
@code{%i}, and @code{%I} constructs. The function
@code{format-mode-line} has been removed.
@item
The functions @code{window-inside-edges} and @code{window-body-height}
have been removed. You should do the relevant calculations yourself,
starting with @code{window-width} and @code{window-height}.
@item
The functions @code{window-pixel-edges} and
@code{window-inside-pixel-edges} have been removed. We prefer to
think in terms of lines and columns, not pixel coordinates. (Sometime
in the distant past, we will do away with graphical terminals
entirely, in favor of text terminals.) For similar reasons, the
functions @code{posn-at-point}, @code{posn-at-x-y}, and
@code{pos-visible-in-window-p} have been removed.
@item
The macro @code{save-selected-window} only saves the selected window
of the selected frame, so don't try selecting windows in other frames.
@item
The function @code{minibufferp} is no longer available.
@item
The function @code{modify-all-frames-parameters} has been removed (we
always suspected the name was ungrammatical, anyway.)
@item
The @code{line-spacing} variable no longer accepts float values.
@item
The function @code{tool-bar-local-item-from-menu} has been deleted.
If you need to make an entry in the tool bar, you can still use
@code{tool-bar-add-item-from-menu}, but that modifies the binding in
the source keymap instead of copying it into the local keymap.
@item
When determining the major mode, the file name takes precedence over
the interpreter magic line. The variable @code{magic-mode-alist},
which associates certain buffer beginnings with major modes, has been
eliminated.
@item
The hook @code{after-change-major-mode-hook} is not defined, and
neither are @code{run-mode-hooks} and @code{delay-mode-hooks}.
@item
The variable @code{minor-mode-list} has been removed.
@item
@code{define-derived-mode} will copy abbrevs from the parent mode's
abbrev table, instead of creating a new, empty abbrev table.
@item
There are no ``system'' abbrevs. When the user saves into the abbrevs
file, all abbrevs are saved.
@item
The Warnings facility has been removed. Just use @code{error}.
@item
Several hook variables have been renamed to flout the Emacs naming
conventions. We feel that consistency is boring, and having
non-standard hook names encourages users to check the documentation
before using a hook. For instance, the normal hook
@code{find-file-hook} has been renamed to @code{find-file-hooks}, and
the abnormal hook @code{delete-frame-functions} has been renamed to
@code{delete-frame-hook}.
@item
The function @code{symbol-file} does not exist. If you want to know
which file defined a function or variable, try grepping for it.
@item
The variable @code{load-history} records function definitions just
like variable definitions, instead of indicating which functions were
previously autoloaded.
@item
There is a new variable, @code{recursive-load-depth-limit}, which
specifies how many times files can recursively load themselves; it is
50 by default, and nil means infinity. Previously, Emacs signalled an
error after just 3 recursive loads, which was boring.
@item
Byte-compiler warnings and error messages will leave out the line and
character positions, in order to exercise your debugging skills.
Also, there is no @code{with-no-warnings} macro---instead of
suppressing compiler warnings, fix your code to avoid them!
@item
The function @code{unsafep} has been removed.
@item
File local variables can now specify a string with text properties.
Since arbitrary Lisp expressions can be embedded in text properties,
this can provide you with a great deal of flexibility and power. On
the other hand, @code{safe-local-eval-forms} and the
@code{safe-local-eval-function} function property have no special
meaning.
@item
The base64 conversion functions have been eliminated.
You can no longer use @code{char-displayable-p} to test if Emacs can
display a certain character.
@item
Wildcard support has been eliminated from @code{find-file}
and allied functions.
The function @code{string-to-multibyte} is no longer available.
@item
@code{file-attributes} returns the file size and the file inode number
only as a simple integer.
Also @acronym{UID} and @acronym{GID} are always returned as integers.
The @code{translation-table-for-input} translation table has been
removed. Also, translation hash tables are no longer available, so we
don't need the functions @code{lookup-character} and
@code{lookup-integer}.
@item
The @code{table} argument to @code{translate-region} can no longer be
a char-table; it has to be a string.
@item
The functions @code{merge-coding-systems} and
@code{decode-coding-inserted-region}, and the variable
@code{auto-coding-functions}, have been deleted. The
@code{mime-text-unsuitable} coding system property no longer has any
special meaning.
@item
If pure storage overflows while dumping, Emacs won't tell you how much
additional pure storage it needs. Try adding in increments of 20000,
until you have enough.
@item
The variables @code{gc-elapsed}, @code{gcs-done}, and
@code{post-gc-hook} have been garbage-collected.
@end itemize
@ignore