2 @c This is part of the GNU Emacs Lisp Reference Manual.
3 @c Copyright (C) 1999, 2005 Free Software Foundation, Inc.
4 @c See the file elisp.texi for copying conditions.
6 @c This node must have no pointers.
8 @node Antinews, GNU Free Documentation License, System Interface, Top
9 @appendix Emacs 21 Antinews
11 For those users who live backwards in time, here is information about
12 downgrading to Emacs version 21.4. We hope you will enjoy the greater
13 simplicity that results from the absence of many Emacs 22 features.
15 @section Old Lisp Features in Emacs 21
19 Many unnecessary features of redisplay have been eliminated. (The
20 earlier major release, Emacs 20, will have a completely rewritten
21 redisplay engine, which will be even simpler.)
25 The function @code{force-window-update} has been removed. It
26 shouldn't be needed, since changes in window contents are detected
27 automatically. In case they aren't, call @code{redraw-display} to
31 Point no longer moves out from underneath invisible text at the end of
32 each command. This allows the user to detect invisible text by moving
33 the cursor around---if the cursor gets stuck, there is something
34 invisible in the way. If you really want cursor motion to ignore the
35 text, try marking it as intangible.
38 Support for image maps and image slices has been removed. Emacs was
39 always meant for editing text, anyway.
42 The mode line now accepts all text properties, as well as
43 @code{:propertize} and @code{:eval} forms, regardless of the
44 @code{risky-local-variable} property.
47 The @code{line-height} and @code{line-spacing} properties no longer
48 have any meaning for newline characters. Such properties wouldn't
49 make sense, since newlines are not really characters; they just tell
50 you where to break a line.
53 Considerable simplifications have been made to the display
54 specification @code{(space . @var{props})}, which is used for
55 displaying a space of specified width and height. Pixel-based
56 specifications and Lisp expressions are no longer accepted.
59 Many features associated with the fringe areas have been removed, to
60 encourage people to concentrate on the main editing area (the fringe
61 will be completely removed in Emacs 20.) Arbitrary bitmaps can no
62 longer be displayed in the fringe; an overlay arrow can still be
63 displayed, but there can only be one overlay arrow at a time (any more
64 would be confusing.) The fringe widths cannot be adjusted, and
65 individual windows cannot have their own fringe settings. A mouse
66 click on the fringe no longer generates a special event.
69 Individual windows cannot have their own scroll-bar settings.
72 You can no longer use @samp{default} in a @code{defface} to specify
73 defaults for subsequent faces.
76 The function @code{display-supports-face-attributes-p} has been
77 removed. In @code{defface} specifications, the @code{supports}
78 predicate is no longer supported.
81 @code{face-attribute-relative-p} and @code{merge-face-attribute} have
85 The priority of faces in a list supplied by the @code{:inherit} face
86 attribute has been reversed. We like to make changes like this once
87 in a while, to keep Emacs Lisp programmers on their toes.
90 The @code{min-colors} face attribute, used for tailoring faces to
91 limited-color displays, does not exist. If in doubt, use colors like
92 ``white'' and ``black'', which ought to be defined everywhere.
95 The @code{tty-color-mode} frame parameter does not exist. You should
96 just trust the terminal capabilities database.
100 Several simplifications have been made to mouse support:
104 Clicking @kbd{mouse-1} won't follow links, as that is alien to the
105 spirit of Emacs. Therefore, the @code{follow-link} property doesn't
106 has any special meaning, and the function @code{mouse-on-link-p} has
110 The variable @code{void-text-area-pointer} has been removed, so the
111 mouse pointer shape remains unchanged when moving between valid text
112 areas and void text areas. The @code{pointer} image and text
113 properties are no longer supported.
116 Mouse events will no longer specify the timestamp, the object clicked,
117 equivalent buffer positions (for marginal or fringe areas), glyph
118 coordinates, or relative pixel coordinates.
122 Simplifications have also been made to the way Emacs handles keymaps
127 The @code{kbd} macro has been removed. It isn't that difficult to
128 write key sequences using the string and vector representations, and
129 we want to encourage users to learn.
132 Emacs no longer supports key remapping. You can do pretty much the
133 same thing with @code{substitute-key-definition}, or by advising the
137 The @code{keymap} text and overlay property is now overridden by minor
138 mode keymaps, and will not work at the ends of text properties and
142 The functions @code{map-keymap}, @code{keymap-prompt}, and
143 @code{current-active-maps} have been removed.
147 Process support has been pared down to a functional minimum. The
148 functions @code{call-process-shell-command} and @code{process-file}
149 have been deleted. Processes no longer maintain property lists, and
150 they won't ask any questions when the user tries to exit Emacs (which
151 would simply be rude.) The function @code{signal-process} won't
152 accept a process object, only the process id; determining the process
153 id from a process object is left as an exercise to the programmer.
156 Networking has also been simplified: @code{make-network-process} and
157 its various associated function have all been replaced with a single
158 easy-to-use function, @code{open-network-stream}, which can't use UDP,
159 can't act as a server, and can't set up non-blocking connections.
160 Also, deleting a network process with @code{delete-process} won't call
164 Many programming shortcuts have been deleted, to provide you with the
165 enjoyment of ``rolling your own''. The macros @code{while-no-input},
166 @code{with-local-quit}, @code{with-selected-window},
167 @code{dynamic-completion-table}, and @code{lazy-completion-table} no
168 longer exist. Also, there are no built-in progress reporters.
171 Variable aliases are no longer supported. Aliases are for functions,
175 The variables @code{most-positive-fixnum} and
176 @code{most-negative-fixnum} do not exist. On 32 bit machines, the
177 most positive integer is probably 134217727, and the most negative
178 integer is probably -134217728.
181 The functions @code{eql} and @code{macroexpand-all} are no longer
182 available. However, you can find similar functions in the @code{cl}
186 The list returned by @code{split-string} won't include null substrings
187 for separators at the beginning or end of a string. If you want to
188 check for such separators, do it separately.
191 The function @code{assoc-string} has been removed. Use
192 @code{assoc-ignore-case} or @code{assoc-ignore-representation} (which
193 are no longer obsolete.)
196 The escape sequence @samp{\s} is always interpreted as a super
197 modifier, never a space.
200 The variable @code{buffer-save-without-query} has been removed, to
201 prevent Emacs from sneakily saving buffers. Also, the hook
202 @code{before-save-hook} has been removed, so if you want something to
203 be done before saving, advise or redefine @code{basic-save-buffer}.
206 The variable @code{buffer-auto-save-file-format} has been renamed to
207 @code{auto-save-file-format}, and is no longer a permanent local.
210 The function @code{visited-file-modtime} now returns a cons, instead
211 of a list of two integers. The primitive @code{set-file-times} has
215 The function @code{file-remote-p} is no longer available.
218 When determining the filename extension, a leading dot in a filename
219 is no longer ignored. Thus, @file{.emacs} is considered to have
220 extension @file{emacs}, rather than being extensionless.
223 Emacs looks for special file handlers in a more efficient manner: it
224 will choose the first matching handler in
225 @code{file-name-handler-alist}, rather than trying to figure out which
226 provides the closest match.
229 The @code{predicate} argument for @code{read-file-name} has been
230 removed, and so have the variables @code{read-file-name-function} and
231 @code{read-file-name-completion-ignore-case}. The function
232 @code{read-directory-name} has also been removed.
235 The functions @code{all-completions} and @code{try-completion} will no
236 longer accept lists of strings or hash tables (it will still accept
237 alists, obarrays, and functions.) In addition, the function
238 @code{test-completion} is no longer available.
241 The @samp{G} interactive code character is no longer supported.
242 Use @samp{F} instead.
245 Arbitrary Lisp functions can no longer be recorded into
246 @code{buffer-undo-list}. As a consequence, @code{yank-undo-function}
247 is obsolete, and has been removed.
250 Emacs will never complain about commands that accumulate too much undo
251 information, so you no longer have to worry about binding
252 @code{buffer-undo-list} to @code{t} for such commands (though you may
253 want to do that anyway, to avoid taking up unnecessary memory space.)
256 Atomic change groups are no longer supported.
259 The list returned by @code{(match-data t)} no longer records the
260 buffer as a final element.
263 The function @code{looking-back} has been removed, so we no longer
264 have the benefit of hindsight.
267 The variable @code{search-spaces-regexp} does not exist. Spaces
268 always stand for themselves in regular expression searches.
271 The functions @code{skip-chars-forward} and @code{skip-chars-backward}
272 no longer accepts character classes such as @samp{[:alpha:]}. All
273 characters are created equal.
276 The @code{yank-handler} text property no longer has any meaning.
277 Also, @code{yank-excluded-properties}, @code{insert-for-yank}, and
278 @code{insert-buffer-substring-as-yank} have all been removed.
281 The variable @code{char-property-alias-alist} has been deleted.
282 Aliases are for functions, not for properties.
285 The function @code{get-char-property-and-overlay} has been deleted.
286 If you want the properties at a point, find the text properties at the
287 point; then, find the overlays at the point, and find the properties
291 Font Lock mode only manages @code{face} properties; you can't use
292 font-lock keywords to specify arbitrary text properties for it to
293 manage. After all, it is called Font Lock mode, not Arbitrary
294 Properties Lock mode.
297 The arguments to @code{remove-overlays} are no longer optional.
300 In @code{replace-match}, the replacement text now inherits properties
301 from the surrounding text.
304 @code{mode-line-format} no longer supports the @code{:propertize},
305 @code{%i}, and @code{%I} constructs. The function
306 @code{format-mode-line} has been removed.
309 The functions @code{window-inside-edges} and @code{window-body-height}
310 have been removed. You should do the relevant calculations yourself,
311 starting with @code{window-width} and @code{window-height}.
314 The functions @code{window-pixel-edges} and
315 @code{window-inside-pixel-edges} have been removed. We prefer to
316 think in terms of lines and columns, not pixel coordinates. (Sometime
317 in the distant past, we will do away with graphical terminals
318 entirely, in favor of text terminals.) For similar reasons, the
319 functions @code{posn-at-point}, @code{posn-at-x-y}, and
320 @code{pos-visible-in-window-p} have been removed.
323 The macro @code{save-selected-window} only saves the selected window
324 of the selected frame, so don't try selecting windows in other frames.
327 The function @code{minibufferp} is no longer available.
330 The function @code{modify-all-frames-parameters} has been removed (we
331 always suspected the name was ungrammatical, anyway.)
334 The @code{line-spacing} variable no longer accepts float values.
337 The function @code{tool-bar-local-item-from-menu} has been deleted.
338 If you need to make an entry in the tool bar, you can still use
339 @code{tool-bar-add-item-from-menu}, but that modifies the binding in
340 the source keymap instead of copying it into the local keymap.
343 When determining the major mode, the file name takes precedence over
344 the interpreter magic line. The variable @code{magic-mode-alist},
345 which associates certain buffer beginnings with major modes, has been
349 The hook @code{after-change-major-mode-hook} is not defined, and
350 neither are @code{run-mode-hooks} and @code{delay-mode-hooks}.
353 The variable @code{minor-mode-list} has been removed.
356 @code{define-derived-mode} will copy abbrevs from the parent mode's
357 abbrev table, instead of creating a new, empty abbrev table.
360 There are no ``system'' abbrevs. When the user saves into the abbrevs
361 file, all abbrevs are saved.
364 The Warnings facility has been removed. Just use @code{error}.
367 Several hook variables have been renamed to flout the Emacs naming
368 conventions. We feel that consistency is boring, and having
369 non-standard hook names encourages users to check the documentation
370 before using a hook. For instance, the normal hook
371 @code{find-file-hook} has been renamed to @code{find-file-hooks}, and
372 the abnormal hook @code{delete-frame-functions} has been renamed to
373 @code{delete-frame-hook}.
376 The function @code{symbol-file} does not exist. If you want to know
377 which file defined a function or variable, try grepping for it.
380 The variable @code{load-history} records function definitions just
381 like variable definitions, instead of indicating which functions were
382 previously autoloaded.
385 There is a new variable, @code{recursive-load-depth-limit}, which
386 specifies how many times files can recursively load themselves; it is
387 50 by default, and nil means infinity. Previously, Emacs signalled an
388 error after just 3 recursive loads, which was boring.
391 Byte-compiler warnings and error messages will leave out the line and
392 character positions, in order to exercise your debugging skills.
393 Also, there is no @code{with-no-warnings} macro---instead of
394 suppressing compiler warnings, fix your code to avoid them!
397 The function @code{unsafep} has been removed.
400 File local variables can now specify a string with text properties.
401 Since arbitrary Lisp expressions can be embedded in text properties,
402 this can provide you with a great deal of flexibility and power. On
403 the other hand, @code{safe-local-eval-forms} and the
404 @code{safe-local-eval-function} function property have no special
408 You can no longer use @code{char-displayable-p} to test if Emacs can
409 display a certain character.
412 The function @code{string-to-multibyte} is no longer available.
415 The @code{translation-table-for-input} translation table has been
416 removed. Also, translation hash tables are no longer available, so we
417 don't need the functions @code{lookup-character} and
418 @code{lookup-integer}.
421 The @code{table} argument to @code{translate-region} can no longer be
422 a char-table; it has to be a string.
425 The functions @code{merge-coding-systems} and
426 @code{decode-coding-inserted-region}, and the variable
427 @code{auto-coding-functions}, have been deleted. The
428 @code{mime-text-unsuitable} coding system property no longer has any
432 If pure storage overflows while dumping, Emacs won't tell you how much
433 additional pure storage it needs. Try adding in increments of 20000,
434 until you have enough.
437 The variables @code{gc-elapsed}, @code{gcs-done}, and
438 @code{post-gc-hook} have been garbage-collected.
442 arch-tag: 1d0ef137-2bad-430e-ae8e-d820d569b5a6