Commit 17ecd7af authored by Chong Yidong's avatar Chong Yidong
Browse files

* anti.texi (Antinews): Rewrite for Emacs 22.

parent 3f698a06
2009-05-13 Chong Yidong <>
* anti.texi (Antinews): Rewrite for Emacs 22.
* abbrevs.texi (Abbrevs): Add xref to Creating Symbols when
obarrays are first mentioned. Define "system abbrev" more
prominently, and add it to the index.
......@@ -7,445 +7,130 @@
@c This node must have no pointers.
@node Antinews, GNU Free Documentation License, System Interface, Top
@appendix Emacs 21 Antinews
@appendix Emacs 22 Antinews
For those users who live backwards in time, here is information about
downgrading to Emacs version 21.4. We hope you will enjoy the greater
downgrading to Emacs version 22.3. We hope you will enjoy the greater
simplicity that results from the absence of many Emacs @value{EMACSVER}
@section Old Lisp Features in Emacs 21
@section Old Lisp Features in Emacs 22
@itemize @bullet
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.)
The internal character representation in Emacs is no longer
Unicode-based; it is known as @code{emacs-mule}. This representation
can handle several different variants of the same character, each one
belonging to its own script. It marks each character with its script,
to better discern them from one another.
@itemize @minus
The function @code{redisplay} has been removed. To update the display
without delay, call @code{(sit-for 0)}. Since it is generally
considered wasteful to update the display if there are any pending
input events, no replacement for @code{(redisplay t)} is provided.
The @code{functionp} function now returns @code{t} for special forms.
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.
The @code{^} interactive spec code has been removed, together with the
function @code{handle-shift-selection} and the variable
@code{this-command-keys-shift-translated}. Shift-translated keys are
no longer treated specially, making Emacs' handling of keybindings
that much more consistent.
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.
The @code{interactive-form} symbol property is no longer recognized.
Once you supply a function with an interactive form, the only way to
change it is to redefine the function.
Support for image maps and image slices has been removed. Emacs was
always meant for editing text, anyway.
Emacs no longer creates temporarily-active regions by giving the
variable @code{transient-mark-mode} values of the form @code{(only
. @var{oldvar})}. Instead, it uses a more slightly more complicated
scheme: setting @code{transient-mark-mode} to @code{only} enables
Transient Mark mode for the following command only, during which the
value of @code{transient-mark-mode} is set to @code{identity}; if it
is still @code{identity} at the end of the command, Transient Mark
mode is disabled.
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.
Many minibuffer functions, such as @code{read-file-name} and
@code{minibuffer-complete}, have been rewritten in C. The completion
code has been considerably simplified; for instance, the completion
style cannot be changed via @code{completion-styles-alist}, and
@code{completing-read} no longer recognizes the special values
@code{confirm-only} and @code{confirm-after-completion} for its
@var{require-match} argument.
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.
Explicitly numbered groups in regular expressions are no longer
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.
Faces can no longer be remapped.
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.
Fonts are no longer represented using a special set of ``font'' data
types. Lisp programs may only specify fonts by name, as strings
following the XLFD (X logical font descriptor) format.
Individual windows cannot have their own scroll-bar settings.
Display terminals are no longer represented using a ``terminal'' data
type. This data type is not necessary, because Emacs can no longer
display on graphical and text-only terminals simultaneously. For the
same reason, the @code{window-system} variable is no longer
frame-local, and the @code{window-system} function has been removed.
You can no longer use @samp{default} in a @code{defface} to specify
defaults for subsequent faces.
The functions @code{list-system-processes} and
@code{process-attributes} have been removed. To get information about
system processes, call an external program, such as @command{ps}.
The function @code{display-supports-face-attributes-p} has been
removed. In @code{defface} specifications, the @code{supports}
predicate is no longer supported.
Variables can now be both buffer-local and frame-local; buffer-local
bindings take precedence over frame-local bindings.
The functions @code{merge-face-attribute} and
@code{face-attribute-relative-p} have been removed.
Windows no longer have parameters.
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.
The function @code{locate-user-emacs-file} and the variable
@code{user-emacs-directory} have been removed. Programs can instead
use hard-coded values pointing to @file{~/.emacs.d}.
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.
@code{vertical-motion} can no longer be told to move to a specific
column; it always puts point on the first column of a line.
The @code{tty-color-mode} frame parameter does not exist. You should
just trust the terminal capabilities database.
@end itemize
Several simplifications have been made to mouse support:
@itemize @minus
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
have any special meaning, and the function @code{mouse-on-link-p} has
been removed.
Emacs no longer recognizes the @code{permanent-local-hook} property of
local hook functions.
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.
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
Simplifications have also been made to the way Emacs handles keymaps
and key sequences:
@itemize @minus
The @code{kbd} macro is now obsolete and is no longer documented.
It isn't that difficult to write key sequences using the string and
vector representations, and we want to encourage users to learn.
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.
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
The functions @code{map-keymap}, @code{keymap-prompt}, and
@code{current-active-maps} have been removed.
@end itemize
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.
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.
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}, and @code{with-selected-window}, along with
@code{dynamic-completion-table} and @code{lazy-completion-table} no
longer exist. Also, there are no built-in progress reporters;
with Emacs, you can take progress for granted.
Variable aliases are no longer supported. Aliases are for functions,
not for variables.
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.
The functions @code{eql} and @code{macroexpand-all} are no longer
available. However, you can find similar functions in the @code{cl}
The @code{ignore-errors} macro has been moved into the @code{cl}
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.
The function @code{assoc-string} has been removed. Use
@code{assoc-ignore-case} or @code{assoc-ignore-representation} (which
are no longer obsolete.)
The escape sequence @samp{\s} is always interpreted as a super
modifier, never a space.
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}.
The variable @code{buffer-auto-save-file-format} has been renamed to
@code{auto-save-file-format}, and is no longer a permanent local.
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.
The function @code{file-remote-p} is no longer available.
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.
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.
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.
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.
The @samp{G} interactive code character is no longer supported.
Use @samp{F} instead.
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.
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.)
Atomic change groups are no longer supported.
The list returned by @code{(match-data t)} no longer records the
buffer as a final element.
The function @code{looking-back} has been removed, so we no longer
have the benefit of hindsight.
The variable @code{search-spaces-regexp} does not exist. Spaces
always stand for themselves in regular expression searches.
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.
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.
The variable @code{char-property-alias-alist} has been deleted.
Aliases are for functions, not for properties.
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.
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.
The arguments to @code{remove-overlays} are no longer optional.
In @code{replace-match}, the replacement text now inherits properties
from the surrounding text.
The variable @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.
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}.
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{window-line-height} have been removed, and
@code{pos-visible-in-window-p} no longer worries about partially
visible rows.
The macro @code{save-selected-window} only saves the selected window
of the selected frame, so don't try selecting windows in other frames.
The function @code{minibufferp} is no longer available.
The function @code{modify-all-frames-parameters} has been removed (we
always suspected the name was ungrammatical, anyway.)
The @code{line-spacing} variable no longer accepts float values.
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.
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
The hook @code{after-change-major-mode-hook} is not defined, and
neither are @code{run-mode-hooks} and @code{delay-mode-hooks}.
The variable @code{minor-mode-list} has been removed.
@code{define-derived-mode} will copy abbrevs from the parent mode's
abbrev table, instead of creating a new, empty abbrev table.
There are no ``system'' abbrevs. When the user saves into the abbrevs
file, all abbrevs are saved.
The Warnings facility has been removed. Just use @code{error}.
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
The function @code{symbol-file} does not exist. If you want to know
which file defined a function or variable, try grepping for it.
The variable @code{load-history} records function definitions just
like variable definitions, instead of indicating which functions were
previously autoloaded.
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 @code{nil} means infinity. Previously, Emacs signaled an
error after just 3 recursive loads, which was boring.
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!
The function @code{unsafep} has been removed.
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
You can no longer use @code{char-displayable-p} to test if Emacs can
display a certain character.
The function @code{string-to-multibyte} is no longer available.
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
The @code{table} argument to @code{translate-region} can no longer be
a char-table; it has to be a string.
The @code{mode-name} variable now accepts only string values, and
cannot take the form of a mode-line construct.
The variable @code{auto-coding-functions} and the two functions
@code{merge-coding-systems} and @code{decode-coding-inserted-region}
have been deleted. The coding system property
@code{mime-text-unsuitable} no longer has any special meaning.
Several keymap have been eliminated: @code{input-decode-map},
@code{local-function-key-map}, @code{search-map},
@code{multi-query-replace-map}, and
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.
Many functions have been removed, including @code{emacs-init-time},
@code{emacs-uptime}, @code{buffer-swap-text}, @code{use-region-p} and
@code{region-active-p}, @code{start-file-process},
@code{process-lines}, @code{image-refresh},
@code{match-substitute-replacement}, @code{word-search-forward-lax},
and @code{word-search-backward-lax}.
The variables @code{gc-elapsed}, @code{gcs-done}, and
@code{post-gc-hook} have been garbage-collected.
Many variables have been removed, including @code{read-circle},
@code{before-init-time} and @code{after-init-time},
@code{generate-autoload-cookie}, @code{file-local-variables-alist},
@code{replace-search-function} and @code{replace-re-search-function},
@code{inhibit-changing-match-data}, @code{wrap-prefix} and
@end itemize
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment