7267c674a6e3b6da2a19f4284da4967d4a4f4285
[chise/xemacs-chise.git.1] / etc / NEWS
1 -*- mode:outline -*-
2 \f
3 * Introduction
4 ==============
5
6 This file presents some general information about XEmacs.  It is
7 primarily about the changes in recent XEmacs versions and its release
8 history.
9
10 Use `C-c C-f' to move to the next equal level of outline, and
11 `C-c C-b' to move to previous equal level.  `C-h m' will give more
12 info about the Outline mode.  Many commands are also available through
13 the menubar.
14
15 Users who would like to know which capabilities have been introduced
16 in each release should look at the appropriate section of this file.
17 Starting with version 20.0, XEmacs includes ChangeLogs, which can be
18 consulted for a more detailed list of changes.
19
20 Users interested in some of the details of how XEmacs differs from GNU
21 Emacs should read the section "What's Different?" near the end of this
22 file.
23
24     N.B.  The term "GNU Emacs" refers to any release of Emacs Version
25     19 from the Free Software Foundation's GNU Project.  (We do not
26     say just "Emacs" as Richard M. Stallman ["RMS"] prefers, because
27     it is clearly a more generic term.)  The term "XEmacs" refers to
28     this program or to its predecessors "Era" and "Lucid Emacs".  The
29     predecessor of all these program is called "Emacs 18".  When no
30     particular version is implied, "Emacs" will be used.
31
32 \f
33 * Changes in XEmacs 21.2
34 ========================
35
36 ** `delete-key-deletes-forward' now defaults to t.
37
38 `delete-key-deletes-forward' is the variable that regulates the
39 behaviour of the delete key on the systems that offer both a backspace
40 and a delete key.  If set to nil, the key labeled "Delete" will delete
41 backward.  If set to non-nil, the "Delete" key will delete forward,
42 except on keyboards where a "Backspace" key is not provided.
43
44 Unless our implementation has bugs, the only reason why you would want
45 to set `delete-key-deletes-forward' to nil is if you want to use the
46 Delete key to delete backwards, despite the presence (according to
47 Xlib) of a BackSpace key on the keyboard.
48
49 ** Interactive searching and matching case improvements.
50
51 Case sensitiveness in searching operations is normally controlled by
52 the variable `case-fold-search' (if non-nil, case is ignored while
53 searching).  This mechanism has now been slightly improved for
54 interactive searches: if the search string (or regexp) contains
55 uppercase characters, the searching is forced to be case-sensitive,
56 `case-fold-search'.
57
58 The new behavior affects all functions performing interactive
59 searches, like `zap-to-char', `list-matching-lines', `tags-search'
60 etc.  The incremental search facility has always behaved that way.
61
62 ** The rectangle functions have been almost completely rewritten in
63 order to avoid inserting undesirable spaces, notably at the end of
64 lines.  Two typical examples of the old behavior were
65 `string-rectangle', which filled all lines up to the right side of the
66 rectangle, and `clear-rectangle', which filled even empty lines up to
67 the left side.  All functions have been rewritten to avoid inserting
68 unwanted spaces, and an optional prefix now allows them to behave the
69 old way.
70
71 As a side effect, the FORCE argument to `move-to-column' now
72 understands the special value `coerce', which means that the line
73 should not be filled if it is too short to reach the desired column.
74
75 ** Incremental search will now highlight all visible matches, making
76 it easier to anticipate where consecutive C-s or C-r will place the
77 point.  If you want to disable the feature, set
78 `isearch-highlight-all-matches' to nil.
79
80 ** You can now customize and save comments for faces and variables.
81 In Custom buffers, a new menu entry allows you to add and edit a
82 comment.  Comments for variables can also be assigned by calling
83 `customize-set-(value|variable)' with a prefix argument.
84
85 ** XEmacs now locates the early package hierarchies at
86 ~/.xemacs/mule-packages/ and ~/.xemacs/xemacs-packages/.  Previously,
87 the early packages were located in ~/.xemacs/.
88
89 ** You can now create "indirect buffers", like in GNU Emacs.  An
90 indirect buffer shares its text with another buffer ("base buffer"),
91 but has its own major mode, local variables, extents, and narrowing.
92 An indirect buffer has a name of its own, distinct from those of the
93 base buffer and all other buffers.  An indirect buffer cannot itself
94 be visiting a file (though its base buffer can be).  The base buffer
95 cannot itself be indirect.
96
97 Use (make-indirect-buffer BASE-BUFFER NAME) to make an indirect buffer
98 named NAME whose base is BASE-BUFFER.  If BASE-BUFFER is itself an
99 indirect buffer, its base buffer is used as the base for the new
100 buffer.
101
102 You can make an indirect buffer current, or switch to it in a window,
103 just as you would a non-indirect buffer.
104
105 The function `buffer-base-buffer' returns a buffer's base buffer or
106 nil, if given an ordinary (non-indirect) buffer.  The function
107 `buffer-indirect-children' returns a list of the indirect children of
108 a base buffer.
109
110 ** User names following the tilde character can now be completed at
111 file name prompts; e.g. `C-x C-f ~hni<TAB>' will complete to
112 `~hniksic/'.  To make this operation faster, a cache of user names is
113 maintained internally.
114
115 The new primitives available for this purpose are functions named
116 `user-name-completion' and `user-name-all-completions'.
117
118 ** Native widgets can be displayed in buffers.
119
120 The glyph system has been extended to allow the display of glyphs that
121 are implemented as native window-system widgets.  Thus you can embed
122 buttons, scrollbars, combo boxes, edit fields and progress gauges in a
123 buffer.  As a side effect subwindow support now works once again.
124
125 This support is currently only available under MS-Windows.
126
127 ** XEmacs can now play sound using Enlightenment Sound Daemon (ESD).
128 It will try NAS first, then ESD, then playing native sound directly.
129
130 ** X-Face support is now available under MS-Windows.
131 If an X-Face libary built under MS-Windows is available then XEmacs
132 will use this at build time.
133
134 ** The font-menu is now available under MS-Windows.
135
136 ** MS-Windows support for selection is now much more robust.
137
138 Generally selection should now do what you would expect under
139 MS-Windows: the middle mouse button will paste your current selection
140 or the clipboard; conversions from different types of selection to the
141 clipboard can be made; the kill-ring and friends will be updated as
142 per X.
143
144 The only thing selection doesn't do is set the clipboard automatically
145 as this would break the MS-Windows model.  If you want this behaviour
146 then set `selection-sets-clipboard' to t
147
148 ** New command-line switches -user-init-file and -user-init-directory.
149 These can be used to specify alternate locations for what is normally
150 ~/.emacs and ~/.xemacs.
151
152 Moreover, -user <user> (which used to only work in unpredictable ways)
153 is now equivalent to
154 -user-init-file ~<user>/.emacs -user-init-directory ~<user>/.xemacs.
155
156 ** Etags changes.
157
158 *** In DOS, etags looks for file.cgz if it cannot find file.c.
159
160 *** New option --ignore-case-regex is an alternative to --regex.  It is now
161 possible to bind a regexp to a language, by prepending the regexp with
162 {lang}, where lang is one of the languages that `etags --help' prints out.
163 This feature is useful especially for regex files, where each line contains
164 a regular expression.  The manual contains details.
165
166 *** In C and derived languages, etags creates tags for function
167 declarations when given the --declarations option.
168
169 *** In C++, tags are created for "operator".  The tags have the form
170 "operator+", without spaces between the keyword and the operator.
171
172 *** New language Ada: tags are functions, procedures, packages, tasks, and
173 types.
174
175 *** In Fortran, procedure is no more tagged.
176
177 *** In Java, tags are created for "interface".
178
179 *** In Lisp, "(defstruct (foo", "(defun (operator" and similar constructs
180 are now tagged.
181
182 *** In Perl, the --globals option tags global variables.  my and local
183 variables are tagged.
184
185 *** New language Python: def and class at the beginning of a line are tags.
186
187 *** .ss files are Scheme files, .pdb is Postscript with C syntax, .psw is
188 for PSWrap.
189
190 \f
191 * Lisp and internal changes in XEmacs 21.2
192 ==========================================
193
194 ** Much effort has been invested to make XEmacs Lisp faster:
195
196 *** Many basic lisp operations are now faster.
197 This is especially the case when running a Mule-enabled XEmacs.
198
199 A general overhaul of the lisp engine should produce a speedup of 1.4
200 in a Latin-1 XEmacs, and 2.1 in a Mule XEmacs.  These numbers were
201 obtained running `(byte-compile "simple.el")', which should be a
202 pretty typical test of "pure" Lisp.
203
204 *** Lisp hash tables have been re-implemented.  The Common Lisp style
205 hash table interface has been made standard, and moved from cl.el into
206 fast C code (See the section on hash tables in the XEmacs Lisp
207 Reference).  A speedup factor of 3 can be expected with code that
208 makes intensive use of hash tables.
209
210 *** The garbage collector has been tuned, leading to a speedup of
211 1.16.
212
213 *** The family of functions that iterate over lists, like `memq', and
214 `rassq', have been made a little faster (typically 1.3).
215
216 *** Lisp function calls are faster, by approximately a factor of two.
217 However, defining inline functions (via defsubst) still makes sense
218 for tight loops.
219
220 *** Finally, a few functions have had dramatic performance
221 improvements.  For example, `(last long-list)' is now 30 times faster.
222
223 Of course, your mileage will vary.
224
225 Many operations do not see any improvement.  Surprisingly, running
226 (font-lock-fontify-buffer) does not use the Lisp engine much at all.
227 Speeding up your favorite slow operation is an excellent project to
228 improve XEmacs.  Don't forget to profile!
229
230 ** XEmacs finally has an automated test suite!
231 Although this is not yet very sophisticated, it is already responsible
232 for several important bug fixes in XEmacs.  To try it out, simply use
233 the makefile target `make check' after building XEmacs.
234
235 ** Hash tables have been reimplemented.
236 As was pointed out above, the standard interface to hash tables is now
237 the Common Lisp interface, as described in Common Lisp, the Language
238 (CLtL2, by Steele).  The older interface (functions with names
239 containing the phrase `hashtable') will continue to work, but the
240 preferred interface now has names containing the phrase `hash-table'.
241
242 Here's the executive overview: create hash tables using
243 make-hash-table, and use gethash, puthash, remhash, maphash and
244 clrhash to manipulate entries in the hash table.  See the (updated)
245 Lisp Reference Manual for details.
246
247 ** Lisp code handles circular lists much more robustly.
248 Many basic lisp functions used to loop forever when given a circular
249 list, expecting you to C-g (quit) out of the loop.  Now this is more
250 likely to trigger a `circular-list' error.  Printing a circular list
251 now results in something like this:
252
253     (let ((x (cons 'foo 'foo)))
254       (setcdr x x)
255       x)
256       => (foo ... <circular list>)
257
258 An extra bonus is that checking for circularities is not just
259 friendlier, but actually faster than checking for C-g.
260
261 ** The new form `ignore-file-errors', similar to `ignore-errors' may
262 be used as a short-hand for condition-case when you wish to ignore
263 file-related error.  For example:
264
265     (ignore-file-errors (delete-file "foo"))
266
267 ** The arguments to `locate-file' are now much more "lispy".  As
268 before, the usage is:
269
270     (locate-file FILENAME PATH-LIST &optional SUFFIXES MODE)
271
272 Except that SUFFIXES are now a list of strings instead of a single,
273 colon-separated string.  MODE is now a symbol or a list of symbols
274 (symbols `exists', `executable', `writable', and `readable' are
275 supported) instead of an integer code.  See the documentation for
276 details.  Of course, the old form is still accepted for backward
277 compatibility.
278
279 Several bugs in locate-file have been fixed, most notably its failure
280 to call expand-file-name on elements of PATH-LIST.  Because of that
281 elements of load-path of the form "~/..." used to not work.
282 locate-file is now guaranteed to expand files during its course of
283 operation.
284
285 ** `translate-region' has been improved in several ways.  Its TABLE
286 argument used to be a 256-character string.  In addition to this, it
287 can now also be a vector or a char-table, which makes the function
288 useful for Mule, which it wasn't.  If TABLE a vector or a generic
289 char-table, you can map characters to strings instead of to other
290 characters.  For instance:
291
292     (let ((table (make-char-table 'generic)))
293       (put-char-table ?a "the letter a" table)
294       (put-char-table ?b "" table)
295       (put-char-table ?c ?\n table)
296       (translate-region (point-min) (point-max) table))
297
298 ** The `keywordp' function now returns non-nil only on symbols
299 interned in the global obarray.  For example:
300
301     (keywordp (intern ":foo" [0]))
302       => nil
303     (keywordp (intern ":foo"))       ; The same as (keywordp :foo)
304       => t
305
306 This behaviour is compatible with other code which treats symbols
307 beginning with colon as keywords only if they are interned in the
308 global obarray.  `keywordp' used to wrongly return t in both cases
309 above.
310
311 ** The first argument to `intern-soft' may now also be a symbol, like
312 with `unintern'.  If given a symbol, `intern-soft' will look for that
313 exact symbol rather than for any string.  This is useful when you want
314 to check whether a specific symbol is interned in an obarray, e.g.:
315
316     (intern "foo")
317     (intern-soft "foo")
318       => foo
319     (intern-soft (make-symbol "foo"))
320       => nil
321
322 ** Functions for decoding base64 encoding are now available; see
323 `base64-encode-region', `base64-encode-string', `base64-decode-region'
324 and `base64-decode-string'.
325
326 ** user-init-directory is now an absolute, unexpanded path.
327 Previously, `user-init-directory' used to be relative to
328 (concat "~" init-file-user).  This turned out to be too complicated
329 for most packages (and some core Lisp files) to use correctly.
330
331 Also, `init-file-user' has been obsoleted in the process.
332
333 \f
334 * Changes in XEmacs 21.0
335 ========================
336
337 ** XEmacs has been unbundled into constituent installable packages.
338 See the Info documentation under "Packages" for more information.
339 See the file `etc/PACKAGES' in the distribution for a partial list of
340 packages available at the time of the 21.0 release.
341
342 ** XEmacs is now supported under Microsoft Windows 95/98 and Windows
343 NT operating systems.  For starters, look at the XEmacs on Windows FAQ
344 at <URL:http://jagor.srce.hr/~hniksic/xemacs-on-windows-faq.txt>.  To
345 discuss Windows-specific issues, subscribe to the mailing list at
346 <xemacs-nt-request@xemacs.org>.
347
348 ** XEmacs will now use `XEmacs' as its application class if it finds
349 any `XEmacs' resources in the resource database.  Otherwise, it will
350 continue to use the `Emacs' class.
351
352 ** The options menu has been ported to Custom.
353 This means that each entry in the options menu acts as if you had customized
354 the corresponding variable by hand.  ### WARNING: there is currently no
355 upgrading function to help you port your old options settings to the new
356 format. Consequently, if you want to modify the options for XEmacs 21, you
357 will have to set them all again through the menu, and remove the code loading
358 .xemacs-options from your .emacs.
359
360 ** When the Zmacs region is active, `M-x query-replace' and the other
361 replace commands now operate on the region contents only.
362
363 ** XEmacs now is able to choose X visuals and use private colormaps.
364 The '-visual <visualStr>' command line option or the '.EmacsVisual'
365 Xresource controls which visual XEmacs will use, and
366 '-privateColormap' or '.privateColormap' will force XEmacs to create a
367 private colormap for use.  The syntax for the visual string is
368 "<visual><bitdepth>" where <visual> is one of 'StaticColor',
369 'TrueColor', 'GrayScale', 'PseudoColor' or 'DirectColor' and
370 <bitdepth> is the appropriate number of bits per pixel.  If an invalid
371 or non-supported combination is entered, XEmacs attempts to find a happy
372 medium.  The X creation mechanism will then determine if it needs to
373 create a colormap for use, or the presence of the private flags will
374 force it to create it.
375
376 ** The `imenu' package has been ported to XEmacs and is available as a
377 package.
378
379 ** `echo-keystrokes' can now be a floating-point number, so that you
380 can set it to intervals shorter than one second.
381
382    (setq echo-keystrokes 0.1)
383
384 ** The new command `center-to-window-line' works like `recenter'
385 (bound to `C-l'), only it does not redisplay the whole display area.
386
387 ** The M-. command will now first search through exact tags matches,
388 and then through inexact matches, as one would expect.
389
390 ** The new variable `user-full-name' can be used to customize one's
391 name when using the Emacs mail and news reading facilities.
392
393 Normally, `user-full-name' is a function that returns the full name of
394 a user or UID, as specified by the system -- for instance,
395 (user-full-name "root") returns something like "Super-User".  However,
396 when the function is called without arguments, it will return the
397 value of the `user-full-name' variable.  The `user-full-name' variable
398 is initialized using the environment variable NAME and (failing that)
399 the user's system name.
400
401 The behavior of the `user-full-name' function with an argument
402 specified is unchanged.
403
404 ** The new command `M-x customize-changed-options' lets you customize
405 all the options whose default values have changed in recent Emacs
406 versions.  You specify a previous Emacs version number as argument,
407 and the command creates a customization buffer showing all the
408 customizable options whose default values were changed since that
409 version.
410
411 If you don't specify a particular version number argument, then the
412 customization buffer shows all the customizable options for which
413 Emacs versions of changes are recorded.
414
415 ** The new command `add-log-convert' can be used to convert the
416 old-style (pre-20.3) ChangeLog buffers to new style, for
417 consistency.  A reminder: if you wish to revert to old-style
418 ChangeLogs instead, customize the value of `add-log-time-format'
419 variable.
420
421 ** The new command `zap-up-to-char' is now available.  It is similar
422 to `zap-to-char', except that it does not delete the searched-for
423 character.  It is not bound to a key by default.
424
425 ** You can now store a number into a register with `C-u NUMBER C-x r n'
426 REG, increment it by INC with `C-u INC C-x r + REG' (to increment by
427 one, omit C-u INC), and insert it in the buffer with `C-x r g REG'.
428 This is useful for writing keyboard macros.
429
430 ** The M-: command, when given a prefix argument, will now insert its
431 result to the current buffer.
432
433 ** The `C-h c' command, when given a prefix argument, will now insert
434 the message into the current buffer.
435
436 ** Horizontally split windows may now be dragged using the mouse.
437 Because of this, the dividers between vertical windows are always
438 visible.  To turn it off, set `vertical-divider-always-visible-p' to
439 nil.
440
441 ** XEmacs/Mule (internationalization) changes.
442
443 *** Mule support now works on TTY's.  Use `set-terminal-coding-system'
444 and `set-keyboard-coding-system' to specify the coding system of your
445 display and keyboard.
446
447 *** Egg/SJ3 input method is now officially supported.  Quail and
448 Egg/Skk have been available through the generalized Leim since 20.3.
449
450 *** Localized Japanese menubars are available if XEmacs is built with
451 XFONTSET and either the X11 libraries are built with X_LOCALE defined
452 or the native C libraries support Japanese localization.  This has
453 been available since 20.3, only it hasn't been announced before.
454
455 ** Jamie Zawinski's `gdb-highlight' extension is now distributed with
456 the `debug' package.  gdb-highlight makes most objects printed in a
457 gdb buffer be mouse-sensitive: as text shows up in the buffer, it is
458 parsed, and objects which are recognized have context-sensitive
459 commands attached to them.  To use it, add the following to `.emacs':
460
461   (add-hook 'gdb-mode-hook (lambda () (require 'gdb-highlight)))
462
463 ** The package popper.el is now included in the edit-utils package.
464 It has been greatly enhanced with respect to the one once included
465 with the ilisp package and should work well under XEmacs 21.0.
466
467 ** Gnuserv changes
468
469 *** Like the old 'gnudoit' program. Gnuclient -batch now can read from stdin.
470
471 *** Gnuclient -batch no longer breaks off the output at the first LF.
472
473 ** C mode changes
474
475 *** Multiline macros are now handled, both as they affect indentation,
476 and as recognized syntax.  New syntactic symbol cpp-macro-cont is
477 assigned to second and subsequent lines of a multiline macro
478 definition.
479
480 *** A new style "user" which captures all non-hook-ified
481 (i.e. top-level) .emacs file variable setings and customizations.
482 Style "cc-mode" is an alias for "user" and is deprecated.  "gnu" style
483 is still the default however.
484
485 *** "java" style now conforms to Sun's JDK coding style.
486
487 *** There are new commands c-beginning-of-defun, c-end-of-defun which
488 are alternatives which you could bind to C-M-a and C-M-e if you prefer
489 them.  They do not have key bindings by default.
490
491 *** New and improved implementations of M-a (c-beginning-of-statement)
492 and M-e (c-end-of-statement).
493
494 *** C++ namespace blocks are supported, with new syntactic symbols
495 namespace-open, namespace-close, and innamespace.
496
497 *** File local variable settings of c-file-style and c-file-offsets
498 makes the style variables local to that buffer only.
499
500 *** New indentation functions c-lineup-close-paren,
501 c-indent-one-line-block, c-lineup-dont-change.
502
503 *** Improvements (hopefully!) to the way CC Mode is loaded.  You
504 should now be able to do a (require 'cc-mode) to get the entire
505 package loaded properly for customization in your .emacs file.  A new
506 variable c-initialize-on-load controls this and is t by default.
507
508 ** In Text mode, now only blank lines separate paragraphs.
509 This makes it possible to get the full benefit of Adaptive Fill mode
510 in Text mode, and other modes derived from it (such as Mail mode).
511 TAB in Text mode now runs the command indent-relative; this makes a
512 practical difference only when you use indented paragraphs.
513
514 As a result, the old Indented Text mode is now identical to Text mode,
515 and is an alias for it.
516
517 If you want spaces at the beginning of a line to start a paragraph,
518 use the new mode, Paragraph Indent Text mode.
519
520 ** Changes to Gnus, the XEmacs newsreader.
521
522 *** New functionality for using Gnus as an offline newsreader has been
523 added.  A plethora of new commands and modes have been added.  See the
524 Gnus manual for the full story.
525
526 *** The nndraft backend has returned, but works differently than
527 before.  All Message buffers are now also articles in the nndraft
528 group, which is created automatically.
529
530 *** `gnus-alter-header-function' can now be used to alter header
531 values.
532
533 *** `gnus-summary-goto-article' now accept Message-ID's.
534
535 *** A new Message command for deleting text in the body of a message
536 outside the region: `C-c C-v'.
537
538 *** You can now post to component group in nnvirtual groups with
539 `C-u C-c C-c'.
540
541 *** `nntp-rlogin-program' -- new variable to ease customization.
542
543 *** `C-u C-c C-c' in `gnus-article-edit-mode' will now inhibit
544 re-highlighting of the article buffer.
545
546 *** New element in `gnus-boring-article-headers' -- `long-to'.
547
548 *** `M-i' symbolic prefix command.  See the section "Symbolic
549 Prefixes" in the Gnus manual for details.
550
551 *** `L' and `I' in the summary buffer now take the symbolic prefix
552 `a' to add the score rule to the "all.SCORE" file.
553
554 *** `gnus-simplify-subject-functions' variable to allow greater
555 control over simplification.
556
557 *** `A T' -- new command for fetching the current thread.
558
559 *** `/ T' -- new command for including the current thread in the
560 limit.
561
562 *** `M-RET' is a new Message command for breaking cited text.
563
564 *** \\1-expressions are now valid in `nnmail-split-methods'.
565
566 *** The `custom-face-lookup' function has been removed.
567 If you used this function in your initialization files, you must
568 rewrite them to use `face-spec-set' instead.
569
570 *** Cancelling now uses the current select method.  Symbolic prefix
571 `a' forces normal posting method.
572
573 *** New command to translate M******** sm*rtq**t*s into proper text
574 -- `W d'.
575
576 *** For easier debugging of nntp, you can set `nntp-record-commands'
577 to a non-nil value.
578
579 *** nntp now uses ~/.authinfo, a .netrc-like file, for controlling
580 where and how to send AUTHINFO to NNTP servers.
581
582 *** A command for editing group parameters from the summary buffer
583 has been added.
584
585 *** A history of where mails have been split is available.
586
587 *** A new article date command has been added -- `article-date-iso8601'.
588
589 *** Subjects can be simplified when threading by setting
590 `gnus-score-thread-simplify'.
591
592 *** A new function for citing in Message has been added --
593 `message-cite-original-without-signature'.
594
595 *** `article-strip-all-blank-lines' -- new article command.
596
597 *** A new Message command to kill to the end of the article has
598 been added.
599
600 *** A minimum adaptive score can be specified by using the
601 `gnus-adaptive-word-minimum' variable.
602
603 *** The "lapsed date" article header can be kept continually
604 updated by the `gnus-start-date-timer' command.
605
606 *** Web listserv archives can be read with the nnlistserv backend.
607
608 *** Old dejanews archives can now be read by nnweb.
609
610 *** Byte-compilation of user-specs now works under XEmacs.
611
612 ** The `dir' files are no longer essential for functioning of the Info
613 subsystem.  If the `dir' file does not exist in an Info directory, the
614 relevant information will be generated on-the-fly.
615
616 This behavior can be customized, look for `Info-auto-generate-directory'
617 and `Info-save-auto-generated-dir' in the `info' customization group.
618
619 \f
620 * Lisp and internal changes in XEmacs 21.0
621 ==========================================
622
623 ** It is now possible to build XEmacs with support for 31-bit Lisp
624 integers (normally, Lisp integers are only 28 bits wide on 32-bit
625 machines.)  Configure with --use-minimal-tagbits to test.  With this
626 change, the maximum buffer size on 32-bit machines is increased from
627 128M to 1G.  This setting will be made default in a future XEmacs
628 version.
629
630 ** Specifier changes.
631
632 *** When instantiating a specifier, the window locale now has a higher
633 precedence than the buffer locale.  This is because the window locale
634 is more specific than the buffer locale.
635
636 *** The new macro `let-specifier' can be used to temporarily add
637 specifications to specifiers.  See the documentation for details.
638
639 *** The new specifiers `vertical-scrollbar-visible-p' and
640 `horizontal-scrollbar-visible-p' may be used to control scrollbar
641 visibility.  Previously, the only way to remove a scrollbar was to set
642 its size to 0.  This method is still supported for backward
643 compatibility.
644
645 *** The new specifiers `scrollbar-on-left-p' and `scrollbar-on-top-p'
646 may be used to control the position of the vertical and horizontal
647 toolbar.  Previously, their position could be changed only through the
648 use of X resources.
649
650 *** The new draggable vertical dividers between windows may be turned
651 off using the `vertical-divider-always-visible-p' specifier.  When
652 this is set to nil, the vertical dividers between windows are shown
653 only when needed, and they are not draggable.
654
655 Other properties of the vertical dividers may be controlled using
656 `vertical-divider-shadow-thickness', `vertical-divider-line-width' and
657 `vertical-divider-spacing' specifiers, which see.
658
659 ** Frame focus management changes.
660
661 *** When the variable focus-follows-mouse is non-nil, `select-frame'
662 no longer permanently selects a different frame.  The frame selection
663 is temporary and is reverted when the current command terminates, much
664 like the buffer selected by `set-buffer'.  This is the same as in FSF
665 Emacs.
666
667 *** The new function `focus-frame' sets the window system focus to
668 FRAME (and selects it), regardless of the value of
669 `focus-follows-mouse'.  Doing this is not well behaved, so be
670 absolutely sure that you want this.
671
672 The code that uses `select-frame' only to get the window manager focus
673 should be changed to use `set-frame-focus' instead, so that they keep
674 working when `focus-follows-mouse' is non-nil.
675
676 *** The special forms `save-selected-frame' and `with-selected-frame'
677 can now be used to temporarily change selected frame.
678
679 *** The behavior of `other-frame' command (`C-x 5 o') is unaffected by
680 these changes.
681
682 ** The function `select-window' now has an optional second argument
683 NORECORD which if non-nil inhibits the recording of a buffer change.
684
685 ** The function `vertical-motion' now correctly handles the second,
686 optional WINDOW argument.  A new third argument PIXELS, if non-nil,
687 indicates that the returned motion should be in pixels.
688
689 ** The new function `vertical-motion-pixels' is similar to
690 vertical-motion but takes as input a vertical motion in pixels.
691
692 ** The new functions window-text-area-pixel-{width,height,edges} can
693 be used to obtain information about the text-displaying area of a
694 window.
695
696 ** The new functions `shrink-window-pixels' and `enlarge-window-pixels'
697 can be used to adjust the size of a window by a pixel amount.
698
699 ** The new function `window-displayed-text-pixel-height' can be used
700 to determine the height of the text actually displayed in a window.
701
702 ** The arithmetic comparison functions <, >, =, /= now accept a
703 variable number of arguments.
704
705 This means that if you want to test whether A < B < C, you can write
706 it as (< A B C) instead of (and (< A B) (< B C)).  Likewise,
707 (apply #'> LIST) now tests if LIST is monotonously increasing -- and
708 so on.
709
710 ** The XEmacs hashtables now have a consistent read/print syntax.
711 This means that a hashtable will be readably printed in a
712 structure-like form:
713
714    #s(hashtable size 2 data (key1 value1 key2 value2))
715
716 When XEmacs reads this form, it will create a new hashtable according
717 to description.  This allows you to easily dump hashtables to files
718 using `prin1', and read them back in using `read'.
719
720 If `print-readably' is non-nil, a more relaxed syntax is used; for
721 instance:
722
723    #<hashtable size 2/13 data (key1 value1 key2 value2) 0x874d>
724
725 ** It is now possible to build XEmacs with LDAP support.
726 You will need to install a LDAP library first.  The following have
727 been tested:
728   - LDAP 3.3 from the University of Michigan
729     (get it from <URL:http://www.umich.edu/~dirsvcs/ldap/>)
730   - OpenLDAP 1.0.3 from the OpenLDAP Foundation
731     (get it from <URL:http://www.openldap.org/>)
732   - LDAP SDK 1.0 from Netscape Corp.
733     (get it from <URL:http://developer.netscape.com/>)
734
735 ** When profiling is in effect, a call-count of all recorded functions
736 is now calculated.  This information is stored in
737 `call-count-profile-table', and is utilized by `profile-results' as
738 well as the new command `profile-call-count-results'.
739
740 ** It is now an error to change the value of a symbol whose name
741 starts with a colon, if it is interned in the standard obarray.
742
743 However, setting such a symbol to its proper value, which is that
744 symbol itself, is not an error.  This is for the sake of programs that
745 support pre-19.12 XEmacs and pre-20 GNU Emacs by explicitly setting
746 these variables to themselves.
747
748 ** The `concat' function no longer accepts integer arguments.
749
750 ** The new function `string' concatenates all its argument characters
751 and returns the resulting string.  This is consistent with other
752 functions, like `list', `vector', etc.
753
754 ** The function `temp-directory' is now available to return the
755 directory to store temporary files.  On Unix this will be obtained
756 from TMPDIR, defaulting to `/tmp'.
757
758 ** The function load-average now accepts an optional argument
759 USE-FLOATS.  If it is non-nil, the load average values are returned as
760 floating point numbers, rather than as integers to be divided by 100.
761
762 ** The `make-event' function now supports the TYPE and PLIST
763 arguments, which can be used to create various events from Lisp.  See
764 the documentation for details.
765
766 ** `function-interactive' is a new function that returns the
767 interactive specification of a funcallable object.
768
769 ** The new `lmessage' function allows printing of a formatted message
770 with a particular label.
771
772    (lmessage 'progress "Processing... %d" counter)
773
774 This function is more convenient than `display-message' because it
775 automatically applies `format' to its arguments.
776
777 ** The new `lwarn' function, analogous to `lmessage', allows printing
778 a formatted warning, with a non-default CLASS or LABEL.
779
780 ** The new function `split-path' can now be used to explode the
781 components of a colon-separated search path into a list.
782
783    (split-path "foo:bar")
784      => ("foo" "bar")
785
786 ** Specifiers and symbols whose value is a specifier are now allowed
787 as modeline specifications.
788
789 ** defcustom now accepts the keyword `:version'.  Use this to specify
790 in which version of Emacs a certain variable's default value changed.
791 For example,
792
793    (defcustom foo-max 34 "*Maximum number of foo's allowed."
794      :type 'integer
795      :group 'foo
796      :version "21.0")
797
798 This information is used to control the customize-changed-options
799 command.
800
801 ** The line number tracking in modeline is now efficient, even for
802 very large buffers.  This is achieved by caching the line numbers of
803 recent buffer positions, and reusing them.  This cache is used only in
804 the buffers where `line-number-mode' is in effect.
805
806 ** When the new GNU Malloc aka Doug Lea Malloc is available, it will
807 be used.  This should result in better performance on Linux systems
808 with libc6.
809
810 ** The code XEmacs uses to assemble its various paths into the
811 directory hierarchy has been rewritten to support the package system.
812 Look under "Startup Paths" in the Info documentation for more
813 information.
814
815 *** site-lisp is no longer part of the load-path by default.
816 Its use is deprecated, but you can specify --with-site-lisp=yes at the
817 configure command line to get it back.
818
819 *** `Info-default-directory-list' is now obsolete.  If you want to
820 change the path which XEmacs uses to search for info files, set
821 `Info-directory-list' instead.