Merge from emacs-24; up to 2012-04-21T14:12:27Z!sdl.web@gmail.com
[bpt/emacs.git] / doc / lispref / anti.texi
1 @c -*-texinfo-*-
2 @c This is part of the GNU Emacs Lisp Reference Manual.
3 @c Copyright (C) 1999, 2002-2012 Free Software Foundation, Inc.
4 @c See the file elisp.texi for copying conditions.
5
6 @c This node must have no pointers.
7
8 @node Antinews, GNU Free Documentation License, Packaging, Top
9 @appendix Emacs 23 Antinews
10 @c Update the elisp.texi Antinews menu entry with the above version number.
11
12 For those users who live backwards in time, here is information about
13 downgrading to Emacs version 23.4. We hope you will enjoy the greater
14 simplicity that results from the absence of many Emacs @value{EMACSVER}
15 features.
16
17 @section Old Lisp Features in Emacs 23
18
19 @itemize @bullet
20 @item
21 Support for lexical scoping has been removed; all variables are
22 dynamically scoped. The @code{lexical-binding} variable has been
23 removed, and so has the @var{lexical} argument to @code{eval}. The
24 @code{defvar} and @code{defconst} forms no longer mark variables as
25 dynamic, since all variables are dynamic.
26
27 Having only dynamic binding follows the spirit of Emacs extensibility,
28 for it allows any Emacs code to access any defined variable with a
29 minimum of fuss. But @xref{Dynamic Binding Tips}, for tips to avoid
30 making your programs hard to understand.
31
32 @item
33 Calling a minor mode function from Lisp with a nil or omitted argument
34 does not enable the minor mode unconditionally; instead, it toggles
35 the minor mode---which is the straightforward thing to do, since that
36 is the behavior when invoked interactively. One downside is that it
37 is more troublesome to enable minor modes from hooks; you have to do
38 something like
39
40 @example
41 (add-hook 'foo-hook (lambda () (bar-mode 1)))
42 @end example
43
44 @noindent
45 or define @code{turn-on-bar-mode} and call that from the hook.
46
47 @item
48 The @code{prog-mode} dummy major mode has been removed. Instead of
49 using it as a crutch to meet programming mode conventions, you should
50 explicitly ensure that your mode follows those conventions.
51 @xref{Major Mode Conventions}.
52
53 @item
54 Emacs no longer supports bidirectional display and editing. Since
55 there is no need to worry about the insertion of right-to-left text
56 messing up how lines and paragraphs are displayed, the function
57 @code{bidi-string-mark-left-to-right} has been removed; so have many
58 other functions and variables related to bidirectional display.
59 Unicode directionality characters like @code{U+200E} ("left-to-right
60 mark") have no special effect on display.
61
62 @item
63 Emacs windows now have most of their internal state hidden from Lisp.
64 Internal windows are no longer visible to Lisp; functions such as
65 @code{window-parent}, window parameters related to window arrangement,
66 and window-local buffer lists have all been removed. Functions for
67 resizing windows can delete windows if they become too small.
68
69 The ``action function'' feature for controlling buffer display has
70 been removed, including @code{display-buffer-overriding-action} and
71 related variables, as well as the @var{action} argument to
72 @code{display-buffer} and other functions. The way to
73 programmatically control how Emacs chooses a window to display a
74 buffer is to bind the right combination of
75 @code{special-display-regexps}, @code{pop-up-frames}, and other
76 variables.
77
78 @item
79 The standard completion interface has been simplified, eliminating the
80 @code{completion-extra-properties} variable, the @code{metadata}
81 action flag for completion functions, and the concept of
82 ``completion categories''. Lisp programmers may now find the choice
83 of methods for tuning completion less bewildering, but if a package
84 finds the streamlined interface insufficient for its needs, it must
85 implement its own specialized completion feature.
86
87 @item
88 @code{copy-directory} now behaves the same whether or not the
89 destination is an existing directory: if the destination exists, the
90 @emph{contents} of the first directory are copied into it (with
91 subdirectories handled recursively), rather than copying the first
92 directory into a subdirectory.
93
94 @item
95 The @var{trash} arguments for @code{delete-file} and
96 @code{delete-directory} have been removed. The variable
97 @code{delete-by-moving-to-trash} must now be used with care; whenever
98 it is non-@code{nil}, all calls to @code{delete-file} or
99 @code{delete-directory} use the trash.
100
101 @item
102 Because Emacs no longer supports SELinux file contexts, the
103 @var{preserve-selinux-context} argument to @code{copy-file} has been
104 removed. The return value of @code{backup-buffer} no longer has an
105 entry for the SELinux file context.
106
107 @item
108 For mouse click input events in the text area, the Y pixel coordinate
109 in the @var{position} list (@pxref{Click Events}) now counts from the
110 top of the header line, if there is one, rather than the top of the
111 text area.
112
113 @item
114 Bindings in menu keymaps (@pxref{Format of Keymaps}) now sometimes get
115 an additional @var{cache} entry in their definitions, like this:
116
117 @example
118 (@var{type} @var{item-name} @var{cache} . @var{binding})
119 @end example
120
121 @noindent
122 The @var{cache} entry is used internally by Emacs to record equivalent
123 keyboard key sequences for invoking the same command; Lisp programs
124 should never use it.
125 @c Not really NEWS-worthy then...
126
127 @item
128 The @code{gnutls} library has been removed, and the function
129 @code{open-network-stream} correspondingly simplified.
130 Lisp programs that want an encrypted network connection must now call
131 external utilities such as @command{starttls} or @command{gnutls-cli}.
132
133 @item
134 Tool bars can no longer display separators, which frees up several
135 pixels of space on each graphical frame.
136
137 @item
138 As part of the ongoing quest for simplicity, many other functions and
139 variables have been eliminated.
140 @end itemize