X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/a9f0a989a17f47f9d25b7a426b4e82a8ff684ee4..b727702bfa2f76b255f8753a11c595e193880b58:/lispref/anti.texi diff --git a/lispref/anti.texi b/lispref/anti.texi index d93e99cf96..6cebff7ece 100644 --- a/lispref/anti.texi +++ b/lispref/anti.texi @@ -1,248 +1,446 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1998 Free Software Foundation, Inc. +@c Copyright (C) 1999, 2002, 2003, 2004, 2005, +@c 2006 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. -@node Antinews, Index, Standard Hooks, Top -@appendix Emacs 19 Antinews -For those users who live backwards in time, here is information about -downgrading to Emacs version 19.34. We hope you will enjoy the greater -simplicity that results from the absence of many Emacs 20 features. In -the following section, we carry this information back as far as Emacs -19.29, for which the previous printed edition of this manual was made. +@c This node must have no pointers. + +@node Antinews, GNU Free Documentation License, System Interface, Top +@appendix Emacs 21 Antinews -@section Old Lisp Features in Emacs 19 +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 +simplicity that results from the absence of many Emacs @value{EMACSVER} +features. -Here are the most important of the features that you will learn -to do without in Emacs 19: +@section Old Lisp Features in Emacs 21 @itemize @bullet @item -In a great simplification, Emacs 19 supports ASCII characters only. -There are no multibyte characters, character sets, language -environments, coding systems, or input methods; all the functions that -specifically relate to them are gone as well. +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 +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 +Support for image maps and image slices has been removed. Emacs was +always meant for editing text, anyway. + +@item +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 +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 +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. -Valid character codes for text must be in the range 0 through 255. -Within this range, there are no invalid character codes. +@item +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 +Individual windows cannot have their own scroll-bar settings. + +@item +You can no longer use @samp{default} in a @code{defface} to specify +defaults for subsequent faces. @item -The Custom facility has been replaced with a much simpler and more -general method of defining user option variables. Instead of -@code{defcustom}, which requires you to specify each user option's data -type and classify options into groups, all you have to do is write a -@code{defvar}. You should still start the documentation string with -@samp{*}, though. +The function @code{display-supports-face-attributes-p} has been +removed. In @code{defface} specifications, the @code{supports} +predicate is no longer supported. + +@item +@code{face-attribute-relative-p} and @code{merge-face-attribute} have +been removed. + +@item +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 @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 +The @code{tty-color-mode} frame parameter does not exist. You should +just trust the terminal capabilities database. @end itemize -Here are changes in the Lisp language itself: +@item +Several simplifications have been made to mouse support: -@itemize @bullet +@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 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 -Symbols whose names start with @samp{:} are no longer special -in any way. They start out void, like most other symbols. +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 -The macros @code{when} and @code{unless} have been deleted. +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 functions @code{caar}, @code{cadr}, @code{cdar} and @code{cddr} -no longer exist. +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 function @code{functionp} is now gone. If you don't know -by now whether something is a function, Emacs can't tell you. +The functions @code{map-keymap}, @code{keymap-prompt}, and +@code{current-active-maps} have been removed. @end itemize -Here are changes in handling strings and text. +@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. -@itemize @bullet @item -The function @code{substring} works only on strings, not on vectors. +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 -There are no more character categories. +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. @item -When you compare strings with @code{equal}, it now compares -their string properties as well as their text. All must match, -or the strings are not equal. +Variable aliases are no longer supported. Aliases are for functions, +not for variables. @item -@code{format-time-string} no longer supports specified field width -or specified padding. +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{split-string} and @code{concat-chars} no longer exist. -Neither does @code{store-substring} or @code{sref}. +The functions @code{eql} and @code{macroexpand-all} are no longer +available. However, you can find similar functions in the @code{cl} +package. @item -All printing characters have the same width. Therefore, we have deleted -@code{char-width}, @code{string-width} and -@code{truncate-string-to-width}. +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 -We have eliminated the functions @code{next-char-property-change} and -@code{previous-char-property-change} also. +The function @code{assoc-string} has been removed. Use +@code{assoc-ignore-case} or @code{assoc-ignore-representation} (which +are no longer obsolete.) @item -Syntax parsing now determines the syntax of each character from the -syntax table alone---not from text properties. This makes the syntax -codes @samp{|} and @samp{!}, which were meant for use with text -properties, useless; so we have deleted them. +The escape sequence @samp{\s} is always interpreted as a super +modifier, never a space. @item -In the function @code{parse-partial-sexp}, passing @code{syntax-table} -as the sixth argument @var{commentstop} no longer has any special meaning. -And the return value has only eight elements. -@end itemize +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}. -Here are changes in other areas of Emacs Lisp: +@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. -@itemize @bullet @item -The macros @code{save-current-buffer}, @code{with-current-buffer}, -@code{with-temp-buffer}, @code{with-temp-file}, @code{save-selected-window}, -and @code{with-output-to-string} are gone. +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 easy-mmode facility for defining minor modes is gone too. +The function @code{file-remote-p} is no longer available. @item -Process filters and sentinels must explicitly save the match data, with -@code{save-match-data}, or they will clobber the match data and -something horrible will happen. +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 -As part of our effort to loosen up, @code{batch-byte-compile-file} no -longer returns a nonzero status code if there is a compilation error. +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 ``mail user agent'' feature is gone. +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 -We have removed the functions @code{add-to-invisibility-spec} and -@code{remove-from-invisibility-spec}, so you should manipulate -the value of @code{buffer-invisibility-spec} by hand. +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 functions @code{face-documentation}, @code{face-bold-p}, -@code{face-italic-p}, @code{set-face-bold-p}, @code{set-face-italic-p} -are gone. Instead, use @code{make-face-bold} and friends. +The @samp{G} interactive code character is no longer supported. +Use @samp{F} instead. @item -All the functions that operate on a file now discard an extra redundant -directory name from the beginning of the file name---just like -@code{substitute-in-file-name}. +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 -We have got rid of the function @code{access-file}. +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 -Most of the minibuffer input functions no longer take a default value as -an argument. Also, they do not discard text properties from the result. -This means that if you insert text with text properties into the minibuffer, -the minibuffer value really will contain text properties. +Atomic change groups are no longer supported. @item -Only the simple menu item format is supported (@pxref{Simple Menu Items}). +The list returned by @code{(match-data t)} no longer records the +buffer as a final element. @item -You can still bind @code{x-resource-class} around a call to -@code{x-get-resource}, but it won't do anything special. +The function @code{looking-back} has been removed, so we no longer +have the benefit of hindsight. @item -Wave goodbye to the hooks @code{before-make-frame-hook}, -@code{after-make-frame-functions}, and -@code{window-configuration-change-hook}, +The variable @code{search-spaces-regexp} does not exist. Spaces +always stand for themselves in regular expression searches. @item -The functions and variables that deal with MS Windows NT/95 -have been renamed to start with @samp{win32-} instead of @samp{w32-}. -This is because we admire Microsoft more each day as we go back -into the past. -@end itemize +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. -@section Onward into the Past! +@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. -Here we go even further back, as far as Emacs 19.29, for which the -previous printed edition of the Emacs Lisp manual was made. +@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. -@itemize @bullet @item -There are no char-tables or bool-vectors. Syntax tables, display -tables, and case tables are all vectors now, and the value of -@code{keyboard-translate-table} should be a vector or a string. +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 -There is only one kind of marker. When you insert text at the place -where a marker points, the marker always ends up before that text, -unless you use @code{insert-before-markers}, which puts all the markers -after the inserted text. +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 -There is no function @code{overlays-in}. +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 variable @code{print-length} applies only to lists, not to -vectors or strings. +The function @code{minibufferp} is no longer available. @item -The function @code{convert-standard-filename} no longer exists, so each -Lisp package must independently figure out which file names to use for -its initialization files on each kind of operating system. +The function @code{modify-all-frames-parameters} has been removed (we +always suspected the name was ungrammatical, anyway.) @item -The macro @code{with-timeout} has been eliminated, along with the -function @code{y-or-n-p-with-timeout}. Idle timers don't exist at all; -instead, maybe you can use @code{post-command-idle-hook} to do some of -the same job. +The @code{line-spacing} variable no longer accepts float values. @item -The functions @code{keymap-parent} and @code{set-keymap-parent} are -gone. We expect keymaps to recognize their own parents. +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 you delete text and then undo a deletion, markers that were -originally inside the deleted text end up either at the beginning -or the end of it---not back in their original places. +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 interactive specification @samp{N} is gone now. +The hook @code{after-change-major-mode-hook} is not defined, and +neither are @code{run-mode-hooks} and @code{delay-mode-hooks}. @item -There is no more @code{safe-length}. Don't try to be so safe! Did you -expect to live forever? +The variable @code{minor-mode-list} has been removed. @item -We got rid of @code{insert-file-contents-literally}, because -programmers are too literal-minded anyway. +@code{define-derived-mode} will copy abbrevs from the parent mode's +abbrev table, instead of creating a new, empty abbrev table. @item -As part of our continuing effort to help Lisp programmers to relax, we -threw out the function @code{error-message-string}. Don't worry so much -about errors! We all make mistakes. +There are no ``system'' abbrevs. When the user saves into the abbrevs +file, all abbrevs are saved. @item -The keymap @code{special-event-map} is gone, because Emacs has no more -special events. If you want to hold a party in Emacs, please let us -know. +The Warnings facility has been removed. Just use @code{error}. @item -You can't do date arithmetic with @code{encode-time} any more. +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 functions @code{command-execute} and @code{call-interactively} no -longer accept the optional argument @var{keys}. +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 -@code{get-buffer-window-list} is gone as well. +The variable @code{load-history} records function definitions just +like variable definitions, instead of indicating which functions were +previously autoloaded. @item -With the function @code{replace-match}, you can only replace the whole -match, not a subexpression of it. +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. @item -We eliminated the hooks @code{buffer-access-fontify-functions}, -@code{window-scroll-functions}, and @code{redisplay-end-trigger-functions}. +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 +You can no longer use @code{char-displayable-p} to test if Emacs can +display a certain character. + +@item +The function @code{string-to-multibyte} is no longer available. + +@item +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 + arch-tag: 1d0ef137-2bad-430e-ae8e-d820d569b5a6 +@end ignore