@c -*-texinfo-*-@c This is part of the GNU Emacs Lisp Reference Manual.@c Copyright (C) 1999, 2002, 2003, 2004, 2005,@c 2006, 2007, 2008 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 21 AntinewsFor those users who live backwards in time, here is information aboutdowngrading to Emacs version 21.4. We hope you will enjoy the greatersimplicity that results from the absence of many Emacs @value{EMACSVER}features.@section Old Lisp Features in Emacs 21@itemize @bullet@itemMany unnecessary features of redisplay have been eliminated. (Theearlier major release, Emacs 20, will have a completely rewrittenredisplay engine, which will be even simpler.)@itemize @minus@itemThe function @code{redisplay} has been removed. To update the displaywithout delay, call @code{(sit-for 0)}. Since it is generallyconsidered wasteful to update the display if there are any pendinginput events, no replacement for @code{(redisplay t)} is provided.@itemThe function @code{force-window-update} has been removed. Itshouldn't be needed, since changes in window contents are detectedautomatically. In case they aren't, call @code{redraw-display} toredraw everything.@itemPoint no longer moves out from underneath invisible text at the end ofeach command. This allows the user to detect invisible text by movingthe cursor around---if the cursor gets stuck, there is somethinginvisible in the way. If you really want cursor motion to ignore thetext, try marking it as intangible.@itemSupport for image maps and image slices has been removed. Emacs wasalways meant for editing text, anyway.@itemThe mode line now accepts all text properties, as well as@code{:propertize} and @code{:eval} forms, regardless of the@code{risky-local-variable} property.@itemThe @code{line-height} and @code{line-spacing} properties no longerhave any meaning for newline characters. Such properties wouldn'tmake sense, since newlines are not really characters; they just tellyou where to break a line.@itemConsiderable simplifications have been made to the displayspecification @code{(space . @var{props})}, which is used fordisplaying a space of specified width and height. Pixel-basedspecifications and Lisp expressions are no longer accepted.@itemMany features associated with the fringe areas have been removed, toencourage people to concentrate on the main editing area (the fringewill be completely removed in Emacs 20.) Arbitrary bitmaps can nolonger be displayed in the fringe; an overlay arrow can still bedisplayed, but there can only be one overlay arrow at a time (any morewould be confusing.) The fringe widths cannot be adjusted, andindividual windows cannot have their own fringe settings. A mouseclick on the fringe no longer generates a special event.@itemIndividual windows cannot have their own scroll-bar settings.@itemYou can no longer use @samp{default} in a @code{defface} to specifydefaults for subsequent faces.@itemThe function @code{display-supports-face-attributes-p} has beenremoved. In @code{defface} specifications, the @code{supports}predicate is no longer supported.@itemThe functions @code{merge-face-attribute} and@code{face-attribute-relative-p} have been removed.@itemThe priority of faces in a list supplied by the @code{:inherit} faceattribute has been reversed. We like to make changes like this oncein a while, to keep Emacs Lisp programmers on their toes.@itemThe @code{min-colors} face attribute, used for tailoring faces tolimited-color displays, does not exist. If in doubt, use colors like``white'' and ``black,'' which ought to be defined everywhere.@itemThe @code{tty-color-mode} frame parameter does not exist. You shouldjust trust the terminal capabilities database.@end itemize@itemSeveral simplifications have been made to mouse support:@itemize @minus@itemClicking @kbd{mouse-1} won't follow links, as that is alien to thespirit of Emacs. Therefore, the @code{follow-link} property doesn'thave any special meaning, and the function @code{mouse-on-link-p} hasbeen removed.@itemThe variable @code{void-text-area-pointer} has been removed, so themouse pointer shape remains unchanged when moving between valid textareas and void text areas. The @code{pointer} image and textproperties are no longer supported.@itemMouse events will no longer specify the timestamp, the object clicked,equivalent buffer positions (for marginal or fringe areas), glyphcoordinates, or relative pixel coordinates.@end itemize@itemSimplifications have also been made to the way Emacs handles keymapsand key sequences:@itemize @minus@itemThe @code{kbd} macro is now obsolete and is no longer documented.It isn't that difficult to write key sequences using the string andvector representations, and we want to encourage users to learn.@itemEmacs no longer supports key remapping. You can do pretty much thesame thing with @code{substitute-key-definition}, or by advising therelevant command.@itemThe @code{keymap} text and overlay property is now overridden by minormode keymaps, and will not work at the ends of text properties andoverlays.@itemThe functions @code{map-keymap}, @code{keymap-prompt}, and@code{current-active-maps} have been removed.@end itemize@itemProcess support has been pared down to a functional minimum. Thefunctions @code{call-process-shell-command} and @code{process-file}have been deleted. Processes no longer maintain property lists, andthey won't ask any questions when the user tries to exit Emacs (whichwould simply be rude.) The function @code{signal-process} won'taccept a process object, only the process id; determining the processid from a process object is left as an exercise to the programmer.@itemNetworking has also been simplified: @code{make-network-process} andits various associated function have all been replaced with a singleeasy-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 callthe sentinel.@itemMany programming shortcuts have been deleted, to provide you with theenjoyment 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} nolonger exist. Also, there are no built-in progress reporters;with Emacs, you can take progress for granted.@itemVariable aliases are no longer supported. Aliases are for functions,not for variables.@itemThe variables @code{most-positive-fixnum} and@code{most-negative-fixnum} do not exist. On 32 bit machines, themost positive integer is probably 134217727, and the most negativeinteger is probably -134217728.@itemThe functions @code{eql} and @code{macroexpand-all} are no longeravailable. However, you can find similar functions in the @code{cl}package.@itemThe list returned by @code{split-string} won't include null substringsfor separators at the beginning or end of a string. If you want tocheck for such separators, do it separately.@itemThe function @code{assoc-string} has been removed. Use@code{assoc-ignore-case} or @code{assoc-ignore-representation} (whichare no longer obsolete.)@itemThe escape sequence @samp{\s} is always interpreted as a supermodifier, never a space.@itemThe variable @code{buffer-save-without-query} has been removed, toprevent Emacs from sneakily saving buffers. Also, the hook@code{before-save-hook} has been removed, so if you want something tobe done before saving, advise or redefine @code{basic-save-buffer}.@itemThe variable @code{buffer-auto-save-file-format} has been renamed to@code{auto-save-file-format}, and is no longer a permanent local.@itemThe function @code{visited-file-modtime} now returns a cons, insteadof a list of two integers. The primitive @code{set-file-times} hasbeen eliminated.@itemThe function @code{file-remote-p} is no longer available.@itemWhen determining the filename extension, a leading dot in a filenameis no longer ignored. Thus, @file{.emacs} is considered to haveextension @file{emacs}, rather than being extensionless.@itemEmacs looks for special file handlers in a more efficient manner: itwill choose the first matching handler in@code{file-name-handler-alist}, rather than trying to figure out whichprovides the closest match.@itemThe @code{predicate} argument for @code{read-file-name} has beenremoved, 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.@itemThe functions @code{all-completions} and @code{try-completion} will nolonger accept lists of strings or hash tables (it will still acceptalists, obarrays, and functions.) In addition, the function@code{test-completion} is no longer available.@itemThe @samp{G} interactive code character is no longer supported.Use @samp{F} instead.@itemArbitrary 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.@itemEmacs will never complain about commands that accumulate too much undoinformation, so you no longer have to worry about binding@code{buffer-undo-list} to @code{t} for such commands (though you maywant to do that anyway, to avoid taking up unnecessary memory space.)@itemAtomic change groups are no longer supported.@itemThe list returned by @code{(match-data t)} no longer records thebuffer as a final element.@itemThe function @code{looking-back} has been removed, so we no longerhave the benefit of hindsight.@itemThe variable @code{search-spaces-regexp} does not exist. Spacesalways stand for themselves in regular expression searches.@itemThe functions @code{skip-chars-forward} and @code{skip-chars-backward}no longer accepts character classes such as @samp{[:alpha:]}. Allcharacters are created equal.@itemThe @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.@itemThe variable @code{char-property-alias-alist} has been deleted.Aliases are for functions, not for properties.@itemThe function @code{get-char-property-and-overlay} has been deleted.If you want the properties at a point, find the text properties at thepoint; then, find the overlays at the point, and find the propertieson those overlays.@itemFont Lock mode only manages @code{face} properties; you can't usefont-lock keywords to specify arbitrary text properties for it tomanage. After all, it is called Font Lock mode, not ArbitraryProperties Lock mode.@itemThe arguments to @code{remove-overlays} are no longer optional.@itemIn @code{replace-match}, the replacement text now inherits propertiesfrom the surrounding text.@itemThe 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.@itemThe 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}.@itemThe functions @code{window-pixel-edges} and@code{window-inside-pixel-edges} have been removed. We prefer tothink in terms of lines and columns, not pixel coordinates. (Sometimein the distant past, we will do away with graphical terminalsentirely, in favor of text terminals.) For similar reasons, thefunctions @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 partiallyvisible rows.@itemThe macro @code{save-selected-window} only saves the selected windowof the selected frame, so don't try selecting windows in other frames.@itemThe function @code{minibufferp} is no longer available.@itemThe function @code{modify-all-frames-parameters} has been removed (wealways suspected the name was ungrammatical, anyway.)@itemThe @code{line-spacing} variable no longer accepts float values.@itemThe 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 inthe source keymap instead of copying it into the local keymap.@itemWhen determining the major mode, the file name takes precedence overthe interpreter magic line. The variable @code{magic-mode-alist},which associates certain buffer beginnings with major modes, has beeneliminated.@itemThe hook @code{after-change-major-mode-hook} is not defined, andneither are @code{run-mode-hooks} and @code{delay-mode-hooks}.@itemThe variable @code{minor-mode-list} has been removed.@item@code{define-derived-mode} will copy abbrevs from the parent mode'sabbrev table, instead of creating a new, empty abbrev table.@itemThere are no ``system'' abbrevs. When the user saves into the abbrevsfile, all abbrevs are saved.@itemThe Warnings facility has been removed. Just use @code{error}.@itemSeveral hook variables have been renamed to flout the Emacs namingconventions. We feel that consistency is boring, and havingnon-standard hook names encourages users to check the documentationbefore using a hook. For instance, the normal hook@code{find-file-hook} has been renamed to @code{find-file-hooks}, andthe abnormal hook @code{delete-frame-functions} has been renamed to@code{delete-frame-hook}.@itemThe function @code{symbol-file} does not exist. If you want to knowwhich file defined a function or variable, try grepping for it.@itemThe variable @code{load-history} records function definitions justlike variable definitions, instead of indicating which functions werepreviously autoloaded.@itemThere is a new variable, @code{recursive-load-depth-limit}, whichspecifies how many times files can recursively load themselves; it is50 by default, and @code{nil} means infinity. Previously, Emacs signaled anerror after just 3 recursive loads, which was boring.@itemByte-compiler warnings and error messages will leave out the line andcharacter positions, in order to exercise your debugging skills.Also, there is no @code{with-no-warnings} macro---instead ofsuppressing compiler warnings, fix your code to avoid them!@itemThe function @code{unsafep} has been removed.@itemFile 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. Onthe other hand, @code{safe-local-eval-forms} and the@code{safe-local-eval-function} function property have no specialmeaning.@itemYou can no longer use @code{char-displayable-p} to test if Emacs candisplay a certain character.@itemThe function @code{string-to-multibyte} is no longer available.@itemThe @code{translation-table-for-input} translation table has beenremoved. Also, translation hash tables are no longer available, so wedon't need the functions @code{lookup-character} and@code{lookup-integer}.@itemThe @code{table} argument to @code{translate-region} can no longer bea char-table; it has to be a string.@itemThe 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.@itemIf pure storage overflows while dumping, Emacs won't tell you how muchadditional pure storage it needs. Try adding in increments of 20000,until you have enough.@itemThe variables @code{gc-elapsed}, @code{gcs-done}, and@code{post-gc-hook} have been garbage-collected.@end itemize@ignore arch-tag: 1d0ef137-2bad-430e-ae8e-d820d569b5a6@end ignore