A.1 Old Lisp Features in Emacs 21
-
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 function
redisplay
has been removed. To update the display
without delay, call (sit-for 0)
. Since it is generally considered
wasteful to update the display if there are any pending input events, no
replacement for (redisplay t)
is provided.
- -
The function
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 redraw-display
to redraw everything.
- -
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.
- -
Support for image maps and image slices has been removed. Emacs was always
meant for editing text, anyway.
- -
The mode line now accepts all text properties, as well as
:propertize
and :eval
forms, regardless of the risky-local-variable
property.
- -
The
line-height
and 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.
- -
Considerable simplifications have been made to the display specification
(space . props)
, which is used for displaying a space of
specified width and height. Pixel-based specifications and Lisp expressions
are no longer accepted.
- -
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.
- -
Individual windows cannot have their own scroll-bar settings.
- -
You can no longer use ‘default’ in a
defface
to specify defaults
for subsequent faces.
- -
The function
display-supports-face-attributes-p
has been removed. In
defface
specifications, the supports
predicate is no longer
supported.
- -
The functions
merge-face-attribute
and
face-attribute-relative-p
have been removed.
- -
The priority of faces in a list supplied by the
: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
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.
- -
The
tty-color-mode
frame parameter does not exist. You should just
trust the terminal capabilities database.
-
Several simplifications have been made to mouse support:
- -
Clicking mouse-1 won't follow links, as that is alien to the spirit of
Emacs. Therefore, the
follow-link
property doesn't has any special
meaning, and the function mouse-on-link-p
has been removed.
- -
The variable
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 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.
-
Simplifications have also been made to the way Emacs handles keymaps and key
sequences:
- -
The
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
substitute-key-definition
, or by advising the relevant
command.
- -
The
keymap
text and overlay property is now overridden by minor mode
keymaps, and will not work at the ends of text properties and overlays.
- -
The functions
map-keymap
, keymap-prompt
, and
current-active-maps
have been removed.
-
Process support has been pared down to a functional minimum. The functions
call-process-shell-command
and 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 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:
make-network-process
and its
various associated function have all been replaced with a single easy-to-use
function, 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 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
while-no-input
,
with-local-quit
, and with-selected-window
, along with
dynamic-completion-table
and 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
most-positive-fixnum
and 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
eql
and macroexpand-all
are no longer
available. However, you can find similar functions in the cl
package.
-
The list returned by
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
assoc-string
has been removed. Use
assoc-ignore-case
or assoc-ignore-representation
(which are no
longer obsolete.)
-
The escape sequence ‘\s’ is always interpreted as a super modifier,
never a space.
-
The variable
buffer-save-without-query
has been removed, to prevent
Emacs from sneakily saving buffers. Also, the hook before-save-hook
has been removed, so if you want something to be done before saving, advise
or redefine basic-save-buffer
.
-
The variable
buffer-auto-save-file-format
has been renamed to
auto-save-file-format
, and is no longer a permanent local.
-
The function
visited-file-modtime
now returns a cons, instead of a
list of two integers. The primitive set-file-times
has been
eliminated.
-
The function
file-remote-p
is no longer available.
-
When determining the filename extension, a leading dot in a filename is no
longer ignored. Thus, ‘.emacs’ is considered to have extension
‘emacs’, rather than being extensionless.
-
Emacs looks for special file handlers in a more efficient manner: it will
choose the first matching handler in
file-name-handler-alist
, rather
than trying to figure out which provides the closest match.
-
The
predicate
argument for read-file-name
has been removed,
and so have the variables read-file-name-function
and
read-file-name-completion-ignore-case
. The function
read-directory-name
has also been removed.
-
The functions
all-completions
and try-completion
will no
longer accept lists of strings or hash tables (it will still accept alists,
obarrays, and functions.) In addition, the function test-completion
is no longer available.
-
The ‘G’ interactive code character is no longer supported. Use
‘F’ instead.
-
Arbitrary Lisp functions can no longer be recorded into
buffer-undo-list
. As a consequence, 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
buffer-undo-list
to 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
(match-data t)
no longer records the buffer as a
final element.
-
The function
looking-back
has been removed, so we no longer have the
benefit of hindsight.
-
The variable
search-spaces-regexp
does not exist. Spaces always
stand for themselves in regular expression searches.
-
The functions
skip-chars-forward
and skip-chars-backward
no
longer accepts character classes such as ‘[:alpha:]’. All characters
are created equal.
-
The
yank-handler
text property no longer has any meaning. Also,
yank-excluded-properties
, insert-for-yank
, and
insert-buffer-substring-as-yank
have all been removed.
-
The variable
char-property-alias-alist
has been deleted. Aliases are
for functions, not for properties.
-
The function
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
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
remove-overlays
are no longer optional.
-
In
replace-match
, the replacement text now inherits properties from
the surrounding text.
-
The variable
mode-line-format
no longer supports the
:propertize
, %i
, and %I
constructs. The function
format-mode-line
has been removed.
-
The functions
window-inside-edges
and window-body-height
have
been removed. You should do the relevant calculations yourself, starting
with window-width
and window-height
.
-
The functions
window-pixel-edges
and 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 posn-at-point
, posn-at-x-y
, and
window-line-height
have been removed, and
pos-visible-in-window-p
no longer worries about partially visible
rows.
-
The macro
save-selected-window
only saves the selected window of the
selected frame, so don't try selecting windows in other frames.
-
The function
minibufferp
is no longer available.
-
The function
modify-all-frames-parameters
has been removed (we always
suspected the name was ungrammatical, anyway.)
-
The
line-spacing
variable no longer accepts float values.
-
The function
tool-bar-local-item-from-menu
has been deleted. If you
need to make an entry in the tool bar, you can still use
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
magic-mode-alist
, which
associates certain buffer beginnings with major modes, has been eliminated.
-
The hook
after-change-major-mode-hook
is not defined, and neither are
run-mode-hooks
and delay-mode-hooks
.
-
The variable
minor-mode-list
has been removed.
-
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
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
find-file-hook
has been renamed to
find-file-hooks
, and the abnormal hook delete-frame-functions
has been renamed to delete-frame-hook
.
-
The function
symbol-file
does not exist. If you want to know which
file defined a function or variable, try grepping for it.
-
The variable
load-history
records function definitions just like
variable definitions, instead of indicating which functions were previously
autoloaded.
-
There is a new variable,
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 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
with-no-warnings
macro—instead of suppressing compiler
warnings, fix your code to avoid them!
-
The function
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,
safe-local-eval-forms
and the safe-local-eval-function
function property have no special meaning.
-
You can no longer use
char-displayable-p
to test if Emacs can display
a certain character.
-
The function
string-to-multibyte
is no longer available.
-
The
translation-table-for-input
translation table has been removed.
Also, translation hash tables are no longer available, so we don't need the
functions lookup-character
and lookup-integer
.
-
The
table
argument to translate-region
can no longer be a
char-table; it has to be a string.
-
The variable
auto-coding-functions
and the two functions
merge-coding-systems
and decode-coding-inserted-region
have
been deleted. The coding system property mime-text-unsuitable
no
longer has any special meaning.
-
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.
-
The variables
gc-elapsed
, gcs-done
, and post-gc-hook
have been garbage-collected.
Ce document a été généré par Eric Reinbold le 13 Octobre 2007 en utilisant texi2html 1.78.