32a69bc883cec8a0ad07c970c2b3c5c2beb56786
[chise/xemacs-chise.git] / etc / NEWS
1 -*- mode:outline -*-
2 \f
3 * Introduction
4 ==============
5
6 This file presents the changes in recent XEmacs versions.  It
7 primarily documents user-visible (interface) changes, but also
8 includes internal changes of possible interest to the users.  When
9 describing new features, we try to also document ways of reverting to
10 the old behavior, where applicable.  If you dislike a recent change in
11 how XEmacs behaves, this file might contain a remedy.
12
13 Use `C-c C-f' to move to the next equal level of outline, and
14 `C-c C-b' to move to previous equal level.  `C-h m' will give more
15 info about the Outline mode.  Many commands are also available through
16 the menubar.
17
18 Users who would like to know which capabilities have been introduced
19 in each release should look at the appropriate section of this file.
20 Starting with version 20.0, XEmacs includes ChangeLogs, which can be
21 consulted for a more detailed list of changes.
22
23     N.B.  The term "GNU Emacs" refers to any release of Emacs Version
24     19 from the Free Software Foundation's GNU Project.  (We do not
25     say just "Emacs" as Richard M. Stallman ["RMS"] prefers, because
26     it is clearly a more generic term.)  The term "XEmacs" refers to
27     this program or sometimes to its predecessors "Era" and "Lucid
28     Emacs".  The predecessor of all these program is called "Emacs
29     18".  When no particular version is implied, "Emacs" will be used.
30
31 \f
32 * Changes in XEmacs 21.4
33 ========================
34
35 ** The delete key now deletes forward by default.
36
37 This is regulated by the variable `delete-key-deletes-forward', which
38 now defaults to t.  `delete-key-deletes-forward' takes effect only on
39 the systems that offer both a backspace and a delete key.  If set to
40 nil, the key labeled "Delete" will always delete backward.  If set to
41 non-nil, the "Delete" key will delete forward, except on keyboards
42 where a "Backspace" key is not provided (e.g. old DEC keyboards).
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 ** You can now build XEmacs with support for GTK+ widget set.
50
51 XEmacs built that way uses GTK+ to draw menubars, scrollbars, and
52 other GUI components, as well GDK for drawing text, choosing fonts,
53 allocating colors, etc.  Additionally, GTK-XEmacs supports Lisp
54 functions for writing your own GTK programs in Emacs Lisp!
55
56 To use this, build XEmacs with the `--with-gtk' configure flag.  (Of
57 course, you'll need to have the GTK+ libraries and header files on the
58 system.)  Gnome widgets and functionality are supported where
59 available, and can be turned off.
60
61 ** Shifted motion keys now select text by default.
62
63 You can turn this off by setting `shifted-motion-keys-select-region'
64 to nil.  This works based off of particular keys, not particular
65 commands: Thus, the arrow keys will normally trigger selection when
66 the Shift key is held down regardless of their bindings, and non-arrow
67 keys with the same bindings (e.g. C-f) will not work this way.  You
68 can control which keys trigger shifted motion using
69 `motion-keys-for-shifted-motion'.  See also
70 `unshifted-motion-keys-deselect-region'.
71
72 ** XEmacs support for menu accelerators has been much improved.
73
74 It now works properly under MS Windows, for example.  To enable
75 accelerators, set `menu-accelerator-enabled' to `menu-force'.  Menus
76 now have accelerators by default, currently on the first letter of the
77 menu item unless another letter was indicated as the accelerator using
78 %_ in the menu string.  These %_ specifications are automatically
79 removed when displaying the menu item, and are handled correctly in
80 functions such as `normalize-menu-item-name'.  Some auto-generated
81 menus will have accelerators added dynamically, using numbers 1-9 and
82 letters; to add this feature yourself, use the Lisp command
83 `submenu-generate-accelerator-spec' in a menu filter.  The feature
84 `menu-accelerator-support' has been added so that packages can check
85 whether this support exists.
86
87 ** Default menubar improvements.
88
89 *** The default menubar has been extensively reorganized.  Many more
90 commands are available, and they are more logically organized.  The
91 Options menu, in particular, has been significantly expanded, and
92 almost everything on the new Cmds menu is new. (Much of the useful
93 functionality from the `big-menubar' package has been imported.)
94
95 *** The font-menu is now available under MS Windows.
96
97 ** Dialog box improvements.
98
99 *** XEmacs now has a proper file dialog box under MS Windows! (and
100 under GTK as well ...) This will appear whenever you select a menu
101 item that requires a file as an argument.
102
103 *** The old clunky file dialog box (visible on non-MS-Windows, non-GTK
104 systems) is still clunky but has had many improvements to make it work
105 significantly better.
106
107 *** Keyboard traversal now works correctly in MS Windows dialog boxes.
108
109 *** There is a Search dialog box available from Edit->Find..., but it
110 is very experimental and needs a lot of work.
111
112 ** New buffer tabs.
113
114 You can now use the buffer tabs to switch between buffers.
115
116 The tabs are located between the toolbar and the uppermost window, in
117 a location called "gutter".  If you dislike the buffer tabs, you can
118 disable them by customizing `gutter-buffers-tab-visible-p', or by
119 placing this in your .emacs:
120
121    (set-gutter-element-visible-p default-gutter-visible-p 'buffers-tab nil)
122
123 You can change the location of the gutter with
124 `set-default-gutter-position', however currently only MS Windows
125 supports tab widgets with orientations other than vertical.
126
127 There are menu items on the Options menu to conveniently change these
128 settings.
129
130 ** There is a new MS Windows installer, netinstall, ported from Cygwin.
131
132 Nearly complete automation of the XEmacs install process from
133 ftp.xemacs.org.  Includes selection of Lisp packages to install, etc.
134
135 ** The subprocess quote-handling mechanism under MS Windows is much improved.
136
137 Specifically, the quote-handling mechanism has been completely rewritten,
138 and you should now be able to use single or double quotes to quote arguments
139 just like under Unix, and expect to get correct results regardless of the
140 shell you are using (e.g. CMD.EXE, bash from Cygwin, etc.).  For example,
141 the following command:
142
143 M-x grep '<<<<<<<' *.c
144
145 should work as intended.
146
147 ** Printing support now available under MS Windows.
148
149 The File->Print... menu item pretty-prints using the standard MS
150 Windows printing facilities.  Unfortunately it's still rather
151 experimental.  There is a separate `msprinter' device tag for MS
152 Windows printers, and so you can control the way that faces appear on
153 the printer by using this tag to specify device-specific face
154 settings.
155
156 ** Selection improvements.
157
158 *** Kill and yank now interact with the clipboard by default under
159 Windows.  This was done by changing the default value of
160 `interprogram-cut-function' and `interprogram-paste-function'.  You
161 can get the old behavior by setting these to nil, and there is an
162 option on the options menu to do this.
163
164 *** MS Windows support for selection is now much more robust.
165
166 Generally selection should now do what you would expect under
167 MS Windows: the middle mouse button will paste your current selection
168 or the clipboard; conversions from different types of selection to the
169 clipboard can be made; the kill-ring and friends will be updated as
170 per X.
171
172 The only thing selection doesn't do is set the clipboard automatically
173 as this would break the MS Windows model.  If you want this behavior
174 then set `selection-sets-clipboard' to t.
175
176 *** Motif selection support is now more correct (but slower) in its
177 behaviour.  Changes have been made to allow correct operation of
178 cut/copy/paste operations between native widgets and XEmacs buffers.
179 However, this can lead to a lot of X traffic which slows down the
180 performance of `C-k'. If you want the old behaviour then set
181 `x-selection-strict-motif-ownership' to nil.
182
183 ** Mail spool locking now works correctly.
184
185 XEmacs has always come with a little auxiliary program, movemail,
186 which moves mail out of the system's spool area into user storage.  To
187 coordinate between XEmacs, the mail delivery agent, and other mail
188 user agents, movemail needs to properly lock the spool file before
189 moving it.  Movemail now correctly respects the --mail-locking option
190 to configure.  Moreover, movemail's locking behavior can be specified
191 at run-time, via a new command-line option -m to movemail, or through
192 the environment variable EMACSLOCKMETHOD.
193
194 When installing XEmacs, make sure you configure it according to your
195 environment's mail spool locking conventions.  When you're using a
196 binary kit, set the `mail-lock-method' variable at startup, or the
197 EMACSLOCKMETHOD environment variable.
198
199 ** International support changes.
200
201 *** The "coding system" feature now works even in an XEmacs compiled
202 without international (Mule) support.  This means that for example
203 XEmacs can recognize the newline convention used by the file you are
204 editing.
205
206 *** The default coding-priority-list is now safer.  This means that if
207 you have no language environment set, Mule no longer automatically
208 recognizes ISO 2022 escapes in your files.  This makes editing binary
209 files safe.
210
211 *** International keysyms are now supported under X.  This means that
212 XEmacs running under Mule will automatically recognize the keysym
213 `scaron' to be the lower-case `s' with caron in the Latin 2 character
214 set.  (Specifically, it will bind the keysym to `self-insert' and
215 augment its `ascii-character' property.)  This is very useful with
216 XFree under European locales as shipped by recent Linux distributions.
217 If XEmacs is compiled without Mule support, the feature still works,
218 but it is unaware of different character sets -- it unconditionally
219 sets the `ascii-character' property to values in the [160, 256) range.
220
221 *** MS Windows 1251 code page is now supported as coding system
222 `windows-1251'.
223
224 *** Czech, Thai, Cyrillic-KOI8, Vietnamese, Ethiopic support now
225 available.
226
227 *** The appropriate characters in Latin 3 and Latin 4 character sets
228 are correctly defined as words.
229
230 ** Help buffers contain hyperlinks, and other changes.
231
232 *** The help buffers created by C-h commands now contain hyperlinks to
233 other commands, functions and variables mentioned in the
234 documentation.  Use button2 to follow a link.  Use button3 to bring up
235 a context menu that lets you follow the link, find the source for the
236 item, do a tag search, etc.  The buffers are also syntax-highlighted.
237
238 *** Help functions (e.g. `C-h f') now know how to print macro argument
239 lists.  If your macro definition included an argument list for the
240 sake of help output, you no longer need to do that.
241
242 ** The modeline's text is now scrollable.  This is controlled by the
243 variable `modeline-scrolling-method', which you need to set to a
244 non-nil value.  You can also choose scrolling types; see the docstring
245 of `modeline-scrolling-method' for more information.
246
247 ** The mouse wheel under MS Windows now functions correctly -- it scrolls
248 the XEmacs window under the pointer, not the selected window.
249
250 ** Interactive searching and matching case improvements.
251
252 *** Incremental search will now highlight all visible matches, making
253 it easier to anticipate where consecutive C-s or C-r will place the
254 point.  If you want to disable the feature, set
255 `isearch-highlight-all-matches' to nil.
256
257 *** Case sensitiveness in searching operations is normally controlled
258 by the variable `case-fold-search' (if non-nil, case is ignored while
259 searching).  This mechanism has now been slightly improved for
260 interactive searches: if the search string (or regexp) contains
261 uppercase characters, the searching is forced to be case-sensitive,
262 `case-fold-search'.
263
264 The new behavior affects all functions performing interactive
265 searches, like `zap-to-char', `list-matching-lines', `tags-search'
266 etc.  The incremental search facility has always behaved that way.
267
268 ** The rectangle functions have been almost completely rewritten in
269 order to avoid inserting undesirable spaces, notably at the end of
270 lines.  Two typical examples of the old behavior were
271 `string-rectangle', which filled all lines up to the right side of the
272 rectangle, and `clear-rectangle', which filled even empty lines up to
273 the left side.  All functions have been rewritten to avoid inserting
274 unwanted spaces, and an optional prefix now allows them to behave the
275 old way.
276
277 Also, the behavior of `string-rectangle' is now compliant with
278 `pending-delete-mode': if this mode is active, then the string
279 replaces the region rectangle.  Otherwise, the command does not delete
280 or overwrite any existing text.  For those who want that feature but do
281 not use pending-delete-mode, a new function, `replace-rectangle', is
282 available.
283
284 As a side effect, the FORCE argument to `move-to-column' now
285 understands the special value `coerce', which means that the line
286 should not be filled if it is too short to reach the desired column.
287
288 ** There is a new command `kill-entire-line' that always kills the
289 entire line at point, regardless of whether the point is at the
290 beginning of line, and regardless of the setting of `kill-whole-line'.
291
292 ** When you press RET at a minibuffer prompt that provides a default
293 value, the value is stored in history instead of an empty line.  Also,
294 you can now edit the default value by pressing the down arrow,
295 accessing the logical "future" value.  Not all minibuffer prompts have
296 yet been converted to support this feature.
297
298 ** You can now create "indirect buffers", like in GNU Emacs.  An
299 indirect buffer shares its text with another buffer ("base buffer"),
300 but has its own major mode, local variables, extents, and narrowing.
301 An indirect buffer has a name of its own, distinct from those of the
302 base buffer and all other buffers.  An indirect buffer cannot itself
303 be visiting a file (though its base buffer can be).  The base buffer
304 cannot itself be indirect.
305
306 Use (make-indirect-buffer BASE-BUFFER NAME) to make an indirect buffer
307 named NAME whose base is BASE-BUFFER.  If BASE-BUFFER is itself an
308 indirect buffer, its base buffer is used as the base for the new
309 buffer.
310
311 You can make an indirect buffer current, or switch to it in a window,
312 just as you would a non-indirect buffer.
313
314 The function `buffer-base-buffer' returns a buffer's base buffer or
315 nil, if given an ordinary (non-indirect) buffer.  The function
316 `buffer-indirect-children' returns a list of the indirect children of
317 a base buffer.
318
319 ** Pixel-based scrolling has been implemented.
320 By default this will attempt to scroll in increments equal to the
321 height of the default face.  Set `window-pixel-scroll-increment' to
322 modify this behavior.
323
324 ** Operation progress can be displayed using graphical widgets.
325 See `progress-feedback' for details.  This support has been switched
326 on by default for font-lock and some web browsing functions.  If you
327 do not like this behavior, set `progress-feedback-use-echo-area' to
328 nil.
329
330 ** User names following the tilde character can now be completed at
331 file name prompts; e.g. `C-x C-f ~hni<TAB>' will complete to
332 `~hniksic/'.  To make this operation faster, a cache of user names is
333 maintained internally.
334
335 The new primitives available for this purpose are functions named
336 `user-name-completion' and `user-name-all-completions'.
337
338 ** XEmacs can now play sound using Enlightenment Sound Daemon (ESD).
339 It will try NAS first, then ESD, then playing native sound directly.
340
341 ** X-Face support is now available under MS Windows.
342 If an X-Face library built under MS Windows is available then XEmacs
343 will use this at build time.
344
345 ** The PostgreSQL Relational Database Management System is now supported.
346 It is now possible to build XEmacs so that the programming interface
347 to the PostgreSQL RDBMS (libpq) is available in XEmacs Lisp.
348 Supported versions of PostgreSQL are 6.5.3 (earlier versions may work,
349 but have not been tested) and 7.0-beta1.
350
351 ** Indentation no longer indents comments that begin at column zero.
352 This makes it easy to deal with commented out regions of code.
353
354 ** Init file may be placed in alternative locations, and other changes.
355
356 *** XEmacs now supports a `~/.xemacs/init.el' startup file.  If
357 it exists, XEmacs will prefer it over `.emacs' and `.emacs.el'.  The
358 file may be byte-compiled as `~/.xemacs/init.elc'.
359
360 If present, the `~/.xemacs/' directory may contain startup files for
361 XEmacs packages that support it.
362
363 NOTE: Under MS Windows, your home directory (i.e. the directory named
364 `~') is specified by the HOME environment variable, and defaults to
365 C:\.  To set this variable, modify AUTOEXEC.BAT under Windows 95/98,
366 or select Control Panel->System->Advanced->Environment Variables...
367 under Windows NT/2000.
368
369 *** Init file in your home directory may be called `.emacs.el'.
370
371 Like in GNU Emacs 20.4 and on, you can now name the XEmacs init file
372 located in your home directory `.emacs.el'.  Formerly the name had to
373 be `.emacs'.  If you use the name `.emacs.el', you can byte-compile
374 the file in the usual way.
375
376 If both `.emacs' and `.emacs.el' exist, the latter file is the one
377 that is used.
378
379 *** Much-improved sample init file.
380
381 The sample init file, located in the `etc/' directory of the XEmacs
382 installation, has been renamed from `sample.emacs' to `sample.init.el',
383 and pretty much rewritten from scratch. (You can view it by selecting
384 the menu item Help->Samples->View Sample init.el.)  Many of the
385 most-useful optional features in XEmacs have been enabled, and other
386 features that are useful but may be annoying to some are present but
387 commented out.  There is also extensive documentation on how to add
388 your own improvements to the init file and where to find more
389 documentation elsewhere in XEmacs.  The file has been specifically
390 designed so that most people can simply make it their own init file by
391 copying it to ~/.xemacs/init.el, and they will be satisfied with the
392 results.
393
394 *** New command-line switches -user-init-file and -user-init-directory.
395
396 These can be used to specify alternate locations for what is normally
397 ~/.emacs and ~/.xemacs.
398
399 Moreover, the `-user <user>' command-line option (which used to only
400 work in unpredictable ways) is now equivalent to `-user-init-file
401 ~<user>/.xemacs/init.el -user-init-directory ~<user>/.xemacs', or
402 `-user-init-file ~<user>/.emacs -user-init-directory ~<user>/.xemacs',
403 whichever init file comes first.
404
405 *** Custom file will move to ~/.xemacs/custom.el.
406
407 Whereas customize settings were formerly stored in the regular init
408 file, XEmacs now prefers them to be in a separate file
409 `~/.xemacs/custom.el', completely under automatic control.  This
410 change goes with the migration of the init file, and XEmacs offers
411 automatic migration upon startup.
412
413 ** Customize now supports adding comments about your face and variable
414 settings using a new menu entry.  Comments for variables can also be
415 assigned by calling `customize-set-(value|variable)' with a prefix
416 argument.
417
418 ** XEmacs now locates the early package hierarchies at
419 ~/.xemacs/mule-packages/ and ~/.xemacs/xemacs-packages/.  Previously,
420 the early packages were located in ~/.xemacs/.
421
422 ** The `auto-save' library has been greatly improved. (This lets you
423 group all your auto-save files into one directory, and is provided
424 standardly with XEmacs.  See `etc/sample.init.el', available on the
425 Help menu, for more info on how to set it up.)  Specifically, it now
426 works under MS Windows, and it uses a completely reversible encoding
427 (basically quoted-printable), so that all filenames (as well as
428 non-filename buffers) are successfully handled regardless of any
429 special characters in their names.
430
431 ** New variable `mswindows-alt-by-itself-activates-menu'.
432 If you set this variable to nil then pressing and releasing the Alt
433 key under MS Windows will no longer activate the menubar.  The default
434 is t.  This is not to be confused with `menu-accelerator-enabled',
435 which enables the use of Alt+<Letter> accelerators to invoke the
436 menus.
437
438 ** The variable `kill-whole-line' now only takes effect when kill-line
439 is called interactively.  Although this is a departure from a previous
440 behavior in the case of setting this variable kill-whole-line to t,
441 it is almost certainly what has always been intended, and most likely
442 the old way of doing things introduced bugs.
443
444 ** Etags changes.
445
446 *** In DOS, etags looks for file.cgz if it cannot find file.c.
447
448 *** New option --ignore-case-regex is an alternative to --regex.  It is now
449 possible to bind a regexp to a language, by prepending the regexp with
450 {lang}, where lang is one of the languages that `etags --help' prints
451 out.  This feature is useful especially for regex files, where each
452 line contains a regular expression.  The manual contains details.
453
454 *** In C and derived languages, etags creates tags for function
455 declarations when given the --declarations option.
456
457 *** In C++, tags are created for "operator".  The tags have the form
458 "operator+", without spaces between the keyword and the operator.
459
460 *** New language Ada: tags are functions, procedures, packages, tasks, and
461 types.
462
463 *** In Fortran, procedure is no longer tagged.
464
465 *** In Java, tags are created for "interface".
466
467 *** In Lisp, "(defstruct (foo", "(defun (operator" and similar constructs
468 are now tagged.
469
470 *** In Perl, the --globals option tags global variables.  my and local
471 variables are tagged.
472
473 *** New language Python: def and class at the beginning of a line are tags.
474
475 *** .ss files are Scheme files, .pdb is Postscript with C syntax, .psw is
476 for PSWrap.
477
478 \f
479 * Lisp and internal changes in XEmacs 21.4
480 ==========================================
481
482 ** A new portable dumper is available for beta testing.
483
484 Olivier Galibert has written a portable dumper for XEmacs, based on
485 initial work by Kyle Jones.  To perform even the most basic editor,
486 XEmacs requires some amount of Lisp code to be loaded.  To avoid
487 repeating the expensive loading process at every startup, XEmacs is
488 built in a special way.  Its C sources link into an executable called
489 `temacs', which loads the bootstrap Lisp code and uses a special
490 "unexec" call to dump the resulting memory image into a proper
491 `xemacs' executable on disk.  The unexec() process is hard to
492 implement correctly and makes XEmacs very hard to port to new
493 operating systems, or even to new releases of old systems.
494
495 The new portable dumper uses a different approach to dumping: instead
496 of dumping full-fledged executable, it only dumps out the initialized
497 data structures (both Lisp and C) into an external file.  A normally
498 running XEmacs only needs to mmap that file and relocate a bit to get
499 to the initialized data.  In that scheme, there is no difference
500 between `temacs' and `xemacs'.
501
502 Unfortunately, the portable dumper has not been completely finished
503 for this release, and will not be used by default.  However, if you
504 wish to experiment with it, or if you need to compile XEmacs on a new
505 and unsupported platform, you can test it by configuring XEmacs with
506 `--pdump' flag.
507
508 ** Much effort has been invested to make XEmacs Lisp faster:
509
510 *** Many basic lisp operations are now faster.
511 This is especially the case when running a Mule-enabled XEmacs.
512
513 A general overhaul of the lisp engine should produce a speedup of 1.4
514 in a non-Mule XEmacs, and 2.1 in a Mule XEmacs.  These numbers were
515 obtained running `(byte-compile "simple.el")', which should be a
516 pretty typical test of "pure" Lisp.
517
518 *** Lisp hash tables have been re-implemented.  The Common Lisp style
519 hash table interface has been made standard, and moved from cl.el into
520 fast C code (See the section on hash tables in the XEmacs Lisp
521 Reference).  A speedup factor of 3 can be expected with code that
522 makes intensive use of hash tables.
523
524 *** The garbage collector has been tuned, leading to a speedup of
525 1.16.
526
527 *** The byte-compiler and the byte-optimizer have been tuned to
528 produce better code in many small ways.
529
530 *** The family of functions that iterate over lists, like `memq', and
531 `rassq', have been made a little faster (typically 1.3).
532
533 *** Lisp function calls are faster, by approximately a factor of two.
534 However, defining inline functions (via defsubst) still makes sense
535 for tight loops.
536
537 *** Finally, a few functions have had dramatic performance
538 improvements.  For example, `(last long-list)' is now 30 times faster.
539
540 Of course, your mileage will vary.
541
542 Many operations do not see any improvement.  Surprisingly, running
543 (font-lock-fontify-buffer) does not use the Lisp engine much at all.
544 Speeding up your favorite slow operation is an excellent project to
545 improve XEmacs.  Don't forget to profile!
546
547 ** Native widgets can be displayed in buffers.
548
549 The glyph system has been extended to allow the display of glyphs that
550 are implemented as native window-system widgets.  Thus you can embed
551 buttons, scrollbars, combo boxes, edit fields and progress gauges in a
552 buffer.  As a side effect subwindow support now works once again.
553
554 All of this is still fairly experimental and there is no
555 documentation.  The current APIs might change in a future version of
556 XEmacs.  Some widgets are only available under MS Windows.  See the
557 file glyphs-test.el in the XEmacs src distribution for examples of
558 usage.
559
560 The buffers-tab functionality and progress gauge have been implemented
561 using this feature.
562
563 ** Case translation now supports international characters.
564
565 *** Instead of being lists of 256-character strings, case tables are
566 now opaque objects.  The interface to access them is almost the same,
567 except it now works for international characters, and you can set the
568 case pairs using `put-case-table-pair'.  `set-case-table' and friends
569 still support the old list/string based interface for backward
570 compatibility.
571
572 *** As a consequence of this change, functions `downcase' and `upcase'
573 as well as all the case-transformation commands now work with
574 non-ASCII characters.  Built-in tables cover all the Latin character
575 sets that we support.  If your language has a distinction between
576 upper and lower case that is not handled by XEmacs/Mule, please let us
577 know.
578
579 *** The code that implements case-insensitive search has been modified
580 to respect the case table settings.  This also applies to regexp
581 search.
582
583 ** Syntax tables may now be specified for a part of a buffer by
584 attaching the `syntax-table' property to an extent.  For compatibility
585 with GNU Emacs, you may use the text-property interface to achieve the
586 same result.
587
588 ** Values of variables `user-init-file' and `user-init-directory' are
589 now absolute file/directory names.  Previously, both variables used to
590 be relative to `(concat "~" init-file-user)'.  This turned out to be
591 too complicated for most packages (and some core Lisp files) to use
592 correctly.  Also, the `init-file-user' variable has been obsoleted in
593 the process.
594
595 The user-visible options like `-u' have not changed their behavior.
596
597 ** XEmacs finally has an automated test suite!
598 Although this is not yet very sophisticated, it is already responsible
599 for several important bug fixes in XEmacs.  To try it out, simply use
600 the makefile target `make check' after building XEmacs.
601
602 ** Hash tables have been reimplemented.
603 As was pointed out above, the standard interface to hash tables is now
604 the Common Lisp interface, as described in Common Lisp, the Language
605 (CLtL2, by Steele).  The older interface (functions with names
606 containing the phrase `hashtable') will continue to work, but the
607 preferred interface now has names containing the phrase `hash-table'.
608
609 Here's the executive overview: create hash tables using
610 make-hash-table, and use gethash, puthash, remhash, maphash and
611 clrhash to manipulate entries in the hash table.  See the (updated)
612 Lisp Reference Manual for details.
613
614 ** Lisp code handles circular lists much more robustly.
615 Many basic lisp functions used to loop forever when given a circular
616 list, expecting you to C-g (quit) out of the loop.  Now this is more
617 likely to trigger a `circular-list' error.  Printing a circular list
618 now results in something like this:
619
620     (let ((x (cons 'foo 'foo)))
621       (setcdr x x)
622       x)
623       => (foo ... <circular list>)
624
625 An extra bonus is that checking for circularities is not just
626 friendlier, but actually faster than checking for C-g.
627
628 ** Functions for decoding base64 encoding are now available; see
629 `base64-encode-region', `base64-encode-string', `base64-decode-region'
630 and `base64-decode-string'.
631
632 ** The functions `read-string', `read-expression', `eval-minibuffer',
633 `read-variable', `read-command', `read-function', `read-number',
634 `read-shell-command', `read-from-minibuffer', and `completing-read'
635 now take an additional argument which specifies the default value.  If
636 this argument is non-nil, it should be a string; that string is used
637 in two ways:
638
639  * It is returned if the user enters empty input.
640  * It is available as the logical "future" entry, by pressing the down
641    arrow.
642
643 ** LDAP changes.
644
645 *** The LDAP interface now consists of two layers, a low-level layer
646 that closely matches the LDAP C API, and a more convenient
647 higher-level set of functions.
648
649 *** The low-level functions that used to be named *-internal are now
650 named more simply: `ldap-open', `ldap-close', `ldap-search-basic',
651 `ldap-add', and `ldap-modify'.  They should be used directly for very
652 specific purposes (such as multiple operations on a connection) only.
653
654 *** The higher-level functions provide a more convenient way to access
655 LDAP directories hiding the subtleties of handling the connection,
656 translating arguments and ensuring compliance with LDAP
657 internationalization rules and formats (currently partly implemented
658 only.)  This layer provides atomic operations for searches,
659 modification, addition and deletion of multiple entries at once:
660 `ldap-search-entries', `ldap-add-entries', `ldap-delete-entries', and
661 `ldap-modify-entries'.
662
663 *** To maintain compatibility with previous code, the now obsolete
664 function `ldap-search' is now merely a wrapper that calls either
665 `ldap-search-basic' or `ldap-search-entries'.  Please don't use the
666 `ldap-search' function in your new programs -- a direct call to one of
667 the two replacements is more efficient and unambiguous.
668
669 ** The arguments to `locate-file' are now more Lisp-like.  As before,
670 the usage is:
671
672     (locate-file FILENAME PATH-LIST &optional SUFFIXES MODE)
673
674 Except that SUFFIXES are now a list of strings instead of a single,
675 colon-separated string.  MODE is now a symbol or a list of symbols
676 (symbols `exists', `executable', `writable', and `readable' are
677 supported) instead of an integer code.  See the documentation for
678 details.  Of course, the old form is still accepted for backward
679 compatibility.
680
681 Several bugs in locate-file have been fixed, most notably its failure
682 to call expand-file-name on elements of PATH-LIST.  Because of that
683 elements of load-path of the form "~/..." used to not work.
684 locate-file is now guaranteed to expand files during its course of
685 operation.
686
687 ** `translate-region' has been improved in several ways.  Its TABLE
688 argument used to be a 256-character string.  In addition to this, it
689 can now also be a vector or a char-table, which makes the function
690 useful for Mule, which it wasn't.  If TABLE is a vector or a generic
691 char-table, you can map characters to strings instead of to other
692 characters.  For instance:
693
694     (let ((table (make-char-table 'generic)))
695       (put-char-table ?a "the letter a" table)
696       (put-char-table ?b "" table)
697       (put-char-table ?c ?\n table)
698       (translate-region (point-min) (point-max) table))
699
700 ** The new form `ignore-file-errors', similar to `ignore-errors' may
701 be used as a short-hand for condition-case when you wish to ignore
702 file-related error.  For example:
703
704     (ignore-file-errors (delete-file "foo"))
705
706 ** The first argument to `intern-soft' may now also be a symbol, like
707 with `unintern'.  If given a symbol, `intern-soft' will look for that
708 exact symbol rather than for any string.  This is useful when you want
709 to check whether a specific symbol is interned in an obarray, e.g.:
710
711     (intern "foo")
712     (intern-soft "foo")
713       => foo
714     (intern-soft (make-symbol "foo"))
715       => nil
716
717 ** The `keywordp' function now returns non-nil only on symbols
718 interned in the global obarray.  For example:
719
720     (keywordp (intern ":foo" [0]))
721       => nil
722     (keywordp (intern ":foo"))       ; The same as (keywordp :foo)
723       => t
724
725 This behavior is compatible with other code which treats symbols
726 beginning with colon as keywords only if they are interned in the
727 global obarray.  `keywordp' used to wrongly return t in both above
728 cases.
729
730 ** The function `replace-in-string' has been rewritten to use
731 `replace-match'.  This not only makes it much faster, but adds all the
732 features of `replace-match'.
733
734 ** New variables `this-command-properties' and
735 `last-command-properties' are now available for communication between
736 consecutive commands.  Commands should use these to communicate with
737 the pre/post-command hooks, subsequent commands, wrapping commands,
738 etc. in preference to looking at and/or setting `this-command'.
739
740 ** New functions `add-one-shot-hook' and `add-local-one-shot-hook' make
741 it possible to add a "one-shot" hook, which is to say a hook that runs
742 only once, and automatically removes itself after the first time it
743 has run.
744
745 ** The descriptor that specifies the text of a menu item can now be an
746 evaluated expression.  This makes it parallel with other descriptors,
747 which can also be expressions.
748
749 \f
750 * Changes in XEmacs 21.0
751 ========================
752
753 ** XEmacs has been unbundled into constituent installable packages.
754 See the Info documentation under "Packages" for more information.
755 See the file `etc/PACKAGES' in the distribution for a partial list of
756 packages available at the time of the 21.0 release.
757
758 ** XEmacs is now supported under Microsoft Windows 95/98 and Windows
759 NT operating systems.  For starters, look at the XEmacs on Windows FAQ
760 at <URL:http://jagor.srce.hr/~hniksic/xemacs-on-windows-faq.txt>.  To
761 discuss Windows-specific issues, subscribe to the mailing list at
762 <xemacs-nt-request@xemacs.org>.
763
764 ** XEmacs will now use `XEmacs' as its application class if it finds
765 any `XEmacs' resources in the resource database.  Otherwise, it will
766 continue to use the `Emacs' class.
767
768 ** The options menu has been ported to Custom.
769 This means that each entry in the options menu acts as if you had customized
770 the corresponding variable by hand.  ### WARNING: there is currently no
771 upgrading function to help you port your old options settings to the new
772 format. Consequently, if you want to modify the options for XEmacs 21, you
773 will have to set them all again through the menu, and remove the code loading
774 .xemacs-options from your .emacs.
775
776 ** When the Zmacs region is active, `M-x query-replace' and the other
777 replace commands now operate on the region contents only.
778
779 ** XEmacs now is able to choose X visuals and use private colormaps.
780 The '-visual <visualStr>' command line option or the '.EmacsVisual'
781 Xresource controls which visual XEmacs will use, and
782 '-privateColormap' or '.privateColormap' will force XEmacs to create a
783 private colormap for use.  The syntax for the visual string is
784 "<visual><bitdepth>" where <visual> is one of 'StaticColor',
785 'TrueColor', 'GrayScale', 'PseudoColor' or 'DirectColor' and
786 <bitdepth> is the appropriate number of bits per pixel.  If an invalid
787 or non-supported combination is entered, XEmacs attempts to find a happy
788 medium.  The X creation mechanism will then determine if it needs to
789 create a colormap for use, or the presence of the private flags will
790 force it to create it.
791
792 ** The `imenu' package has been ported to XEmacs and is available as a
793 package.
794
795 ** `echo-keystrokes' can now be a floating-point number, so that you
796 can set it to intervals shorter than one second.
797
798    (setq echo-keystrokes 0.1)
799
800 ** The new command `center-to-window-line' works like `recenter'
801 (bound to `C-l'), only it does not redisplay the whole display area.
802
803 ** The M-. command will now first search through exact tags matches,
804 and then through inexact matches, as one would expect.
805
806 ** The new variable `user-full-name' can be used to customize one's
807 name when using the Emacs mail and news reading facilities.
808
809 Normally, `user-full-name' is a function that returns the full name of
810 a user or UID, as specified by the system -- for instance,
811 (user-full-name "root") returns something like "Super-User".  However,
812 when the function is called without arguments, it will return the
813 value of the `user-full-name' variable.  The `user-full-name' variable
814 is initialized using the environment variable NAME and (failing that)
815 the user's system name.
816
817 The behavior of the `user-full-name' function with an argument
818 specified is unchanged.
819
820 ** The new command `M-x customize-changed-options' lets you customize
821 all the options whose default values have changed in recent Emacs
822 versions.  You specify a previous Emacs version number as argument,
823 and the command creates a customization buffer showing all the
824 customizable options whose default values were changed since that
825 version.
826
827 If you don't specify a particular version number argument, then the
828 customization buffer shows all the customizable options for which
829 Emacs versions of changes are recorded.
830
831 ** The new command `add-log-convert' can be used to convert the
832 old-style (pre-20.3) ChangeLog buffers to new style, for
833 consistency.  A reminder: if you wish to revert to old-style
834 ChangeLogs instead, customize the value of `add-log-time-format'
835 variable.
836
837 ** The new command `zap-up-to-char' is now available.  It is similar
838 to `zap-to-char', except that it does not delete the searched-for
839 character.  It is not bound to a key by default.
840
841 ** You can now store a number into a register with `C-u NUMBER C-x r n'
842 REG, increment it by INC with `C-u INC C-x r + REG' (to increment by
843 one, omit C-u INC), and insert it in the buffer with `C-x r g REG'.
844 This is useful for writing keyboard macros.
845
846 ** The M-: command, when given a prefix argument, will now insert its
847 result to the current buffer.
848
849 ** The `C-h c' command, when given a prefix argument, will now insert
850 the message into the current buffer.
851
852 ** Horizontally split windows may now be dragged using the mouse.
853 Because of this, the dividers between vertical windows are always
854 visible.  To turn it off, set `vertical-divider-always-visible-p' to
855 nil.
856
857 ** XEmacs/Mule (internationalization) changes.
858
859 *** Mule support now works on TTY's.  Use `set-terminal-coding-system'
860 and `set-keyboard-coding-system' to specify the coding system of your
861 display and keyboard.
862
863 *** Egg/SJ3 input method is now officially supported.  Quail and
864 Egg/Skk have been available through the generalized Leim since 20.3.
865
866 *** Localized Japanese menubars are available if XEmacs is built with
867 XFONTSET and either the X11 libraries are built with X_LOCALE defined
868 or the native C libraries support Japanese localization.  This has
869 been available since 20.3, only it hasn't been announced before.
870
871 ** Jamie Zawinski's `gdb-highlight' extension is now distributed with
872 the `debug' package.  gdb-highlight makes most objects printed in a
873 gdb buffer be mouse-sensitive: as text shows up in the buffer, it is
874 parsed, and objects which are recognized have context-sensitive
875 commands attached to them.  To use it, add the following to `.emacs':
876
877   (add-hook 'gdb-mode-hook (lambda () (require 'gdb-highlight)))
878
879 ** The package popper.el is now included in the edit-utils package.
880 It has been greatly enhanced with respect to the one once included
881 with the ilisp package and should work well under XEmacs 21.0.
882
883 ** Gnuserv changes
884
885 *** Like the old 'gnudoit' program. Gnuclient -batch now can read from stdin.
886
887 *** Gnuclient -batch no longer breaks off the output at the first LF.
888
889 ** C mode changes
890
891 *** Multiline macros are now handled, both as they affect indentation,
892 and as recognized syntax.  New syntactic symbol cpp-macro-cont is
893 assigned to second and subsequent lines of a multiline macro
894 definition.
895
896 *** A new style "user" which captures all non-hook-ified
897 (i.e. top-level) .emacs file variable setings and customizations.
898 Style "cc-mode" is an alias for "user" and is deprecated.  "gnu" style
899 is still the default however.
900
901 *** "java" style now conforms to Sun's JDK coding style.
902
903 *** There are new commands c-beginning-of-defun, c-end-of-defun which
904 are alternatives which you could bind to C-M-a and C-M-e if you prefer
905 them.  They do not have key bindings by default.
906
907 *** New and improved implementations of M-a (c-beginning-of-statement)
908 and M-e (c-end-of-statement).
909
910 *** C++ namespace blocks are supported, with new syntactic symbols
911 namespace-open, namespace-close, and innamespace.
912
913 *** File local variable settings of c-file-style and c-file-offsets
914 makes the style variables local to that buffer only.
915
916 *** New indentation functions c-lineup-close-paren,
917 c-indent-one-line-block, c-lineup-dont-change.
918
919 *** Improvements (hopefully!) to the way CC Mode is loaded.  You
920 should now be able to do a (require 'cc-mode) to get the entire
921 package loaded properly for customization in your .emacs file.  A new
922 variable c-initialize-on-load controls this and is t by default.
923
924 ** In Text mode, now only blank lines separate paragraphs.
925 This makes it possible to get the full benefit of Adaptive Fill mode
926 in Text mode, and other modes derived from it (such as Mail mode).
927 TAB in Text mode now runs the command indent-relative; this makes a
928 practical difference only when you use indented paragraphs.
929
930 As a result, the old Indented Text mode is now identical to Text mode,
931 and is an alias for it.
932
933 If you want spaces at the beginning of a line to start a paragraph,
934 use the new mode, Paragraph Indent Text mode.
935
936 ** Changes to Gnus, the XEmacs newsreader.
937
938 *** New functionality for using Gnus as an offline newsreader has been
939 added.  A plethora of new commands and modes have been added.  See the
940 Gnus manual for the full story.
941
942 *** The nndraft backend has returned, but works differently than
943 before.  All Message buffers are now also articles in the nndraft
944 group, which is created automatically.
945
946 *** `gnus-alter-header-function' can now be used to alter header
947 values.
948
949 *** `gnus-summary-goto-article' now accept Message-ID's.
950
951 *** A new Message command for deleting text in the body of a message
952 outside the region: `C-c C-v'.
953
954 *** You can now post to component group in nnvirtual groups with
955 `C-u C-c C-c'.
956
957 *** `nntp-rlogin-program' -- new variable to ease customization.
958
959 *** `C-u C-c C-c' in `gnus-article-edit-mode' will now inhibit
960 re-highlighting of the article buffer.
961
962 *** New element in `gnus-boring-article-headers' -- `long-to'.
963
964 *** `M-i' symbolic prefix command.  See the section "Symbolic
965 Prefixes" in the Gnus manual for details.
966
967 *** `L' and `I' in the summary buffer now take the symbolic prefix
968 `a' to add the score rule to the "all.SCORE" file.
969
970 *** `gnus-simplify-subject-functions' variable to allow greater
971 control over simplification.
972
973 *** `A T' -- new command for fetching the current thread.
974
975 *** `/ T' -- new command for including the current thread in the
976 limit.
977
978 *** `M-RET' is a new Message command for breaking cited text.
979
980 *** \\1-expressions are now valid in `nnmail-split-methods'.
981
982 *** The `custom-face-lookup' function has been removed.
983 If you used this function in your initialization files, you must
984 rewrite them to use `face-spec-set' instead.
985
986 *** Cancelling now uses the current select method.  Symbolic prefix
987 `a' forces normal posting method.
988
989 *** New command to translate M******** sm*rtq**t*s into proper text
990 -- `W d'.
991
992 *** For easier debugging of nntp, you can set `nntp-record-commands'
993 to a non-nil value.
994
995 *** nntp now uses ~/.authinfo, a .netrc-like file, for controlling
996 where and how to send AUTHINFO to NNTP servers.
997
998 *** A command for editing group parameters from the summary buffer
999 has been added.
1000
1001 *** A history of where mails have been split is available.
1002
1003 *** A new article date command has been added -- `article-date-iso8601'.
1004
1005 *** Subjects can be simplified when threading by setting
1006 `gnus-score-thread-simplify'.
1007
1008 *** A new function for citing in Message has been added --
1009 `message-cite-original-without-signature'.
1010
1011 *** `article-strip-all-blank-lines' -- new article command.
1012
1013 *** A new Message command to kill to the end of the article has
1014 been added.
1015
1016 *** A minimum adaptive score can be specified by using the
1017 `gnus-adaptive-word-minimum' variable.
1018
1019 *** The "lapsed date" article header can be kept continually
1020 updated by the `gnus-start-date-timer' command.
1021
1022 *** Web listserv archives can be read with the nnlistserv backend.
1023
1024 *** Old dejanews archives can now be read by nnweb.
1025
1026 *** Byte-compilation of user-specs now works under XEmacs.
1027
1028 ** The `dir' files are no longer essential for functioning of the Info
1029 subsystem.  If the `dir' file does not exist in an Info directory, the
1030 relevant information will be generated on-the-fly.
1031
1032 This behavior can be customized, look for `Info-auto-generate-directory'
1033 and `Info-save-auto-generated-dir' in the `info' customization group.
1034
1035 \f
1036 * Lisp and internal changes in XEmacs 21.0
1037 ==========================================
1038
1039 ** It is now possible to build XEmacs with support for 31-bit Lisp
1040 integers (normally, Lisp integers are only 28 bits wide on 32-bit
1041 machines.)  Configure with --use-minimal-tagbits to test.  With this
1042 change, the maximum buffer size on 32-bit machines is increased from
1043 128M to 1G.  This setting will be made default in a future XEmacs
1044 version.
1045
1046 ** Specifier changes.
1047
1048 *** When instantiating a specifier, the window locale now has a higher
1049 precedence than the buffer locale.  This is because the window locale
1050 is more specific than the buffer locale.
1051
1052 *** The new macro `let-specifier' can be used to temporarily add
1053 specifications to specifiers.  See the documentation for details.
1054
1055 *** The new specifiers `vertical-scrollbar-visible-p' and
1056 `horizontal-scrollbar-visible-p' may be used to control scrollbar
1057 visibility.  Previously, the only way to remove a scrollbar was to set
1058 its size to 0.  This method is still supported for backward
1059 compatibility.
1060
1061 *** The new specifiers `scrollbar-on-left-p' and `scrollbar-on-top-p'
1062 may be used to control the position of the vertical and horizontal
1063 toolbar.  Previously, their position could be changed only through the
1064 use of X resources.
1065
1066 *** The new draggable vertical dividers between windows may be turned
1067 off using the `vertical-divider-always-visible-p' specifier.  When
1068 this is set to nil, the vertical dividers between windows are shown
1069 only when needed, and they are not draggable.
1070
1071 Other properties of the vertical dividers may be controlled using
1072 `vertical-divider-shadow-thickness', `vertical-divider-line-width' and
1073 `vertical-divider-spacing' specifiers, which see.
1074
1075 ** Frame focus management changes.
1076
1077 *** When the variable focus-follows-mouse is non-nil, `select-frame'
1078 no longer permanently selects a different frame.  The frame selection
1079 is temporary and is reverted when the current command terminates, much
1080 like the buffer selected by `set-buffer'.  This is the same as in FSF
1081 Emacs.
1082
1083 *** The new function `focus-frame' sets the window system focus to
1084 FRAME (and selects it), regardless of the value of
1085 `focus-follows-mouse'.  Doing this is not well behaved, so be
1086 absolutely sure that you want this.
1087
1088 The code that uses `select-frame' only to get the window manager focus
1089 should be changed to use `set-frame-focus' instead, so that they keep
1090 working when `focus-follows-mouse' is non-nil.
1091
1092 *** The special forms `save-selected-frame' and `with-selected-frame'
1093 can now be used to temporarily change selected frame.
1094
1095 *** The behavior of `other-frame' command (`C-x 5 o') is unaffected by
1096 these changes.
1097
1098 ** The function `select-window' now has an optional second argument
1099 NORECORD which if non-nil inhibits the recording of a buffer change.
1100
1101 ** The function `vertical-motion' now correctly handles the second,
1102 optional WINDOW argument.  A new third argument PIXELS, if non-nil,
1103 indicates that the returned motion should be in pixels.
1104
1105 ** The new function `vertical-motion-pixels' is similar to
1106 vertical-motion but takes as input a vertical motion in pixels.
1107
1108 ** The new functions window-text-area-pixel-{width,height,edges} can
1109 be used to obtain information about the text-displaying area of a
1110 window.
1111
1112 ** The new functions `shrink-window-pixels' and `enlarge-window-pixels'
1113 can be used to adjust the size of a window by a pixel amount.
1114
1115 ** The new function `window-displayed-text-pixel-height' can be used
1116 to determine the height of the text actually displayed in a window.
1117
1118 ** The arithmetic comparison functions <, >, =, /= now accept a
1119 variable number of arguments.
1120
1121 This means that if you want to test whether A < B < C, you can write
1122 it as (< A B C) instead of (and (< A B) (< B C)).  Likewise,
1123 (apply #'> LIST) now tests if LIST is monotonously increasing -- and
1124 so on.
1125
1126 ** The XEmacs hashtables now have a consistent read/print syntax.
1127 This means that a hashtable will be readably printed in a
1128 structure-like form:
1129
1130    #s(hashtable size 2 data (key1 value1 key2 value2))
1131
1132 When XEmacs reads this form, it will create a new hashtable according
1133 to description.  This allows you to easily dump hashtables to files
1134 using `prin1', and read them back in using `read'.
1135
1136 If `print-readably' is non-nil, a more relaxed syntax is used; for
1137 instance:
1138
1139    #<hashtable size 2/13 data (key1 value1 key2 value2) 0x874d>
1140
1141 ** It is now possible to build XEmacs with LDAP support.
1142 You will need to install a LDAP library first.  The following have
1143 been tested:
1144   - LDAP 3.3 from the University of Michigan
1145     (get it from <URL:http://www.umich.edu/~dirsvcs/ldap/>)
1146   - OpenLDAP 1.0.3 from the OpenLDAP Foundation
1147     (get it from <URL:http://www.openldap.org/>)
1148   - LDAP SDK 1.0 from Netscape Corp.
1149     (get it from <URL:http://developer.netscape.com/>)
1150
1151 ** When profiling is in effect, a call-count of all recorded functions
1152 is now calculated.  This information is stored in
1153 `call-count-profile-table', and is utilized by `profile-results' as
1154 well as the new command `profile-call-count-results'.
1155
1156 ** It is now an error to change the value of a symbol whose name
1157 starts with a colon, if it is interned in the standard obarray.
1158
1159 However, setting such a symbol to its proper value, which is that
1160 symbol itself, is not an error.  This is for the sake of programs that
1161 support pre-19.12 XEmacs and pre-20 GNU Emacs by explicitly setting
1162 these variables to themselves.
1163
1164 ** The `concat' function no longer accepts integer arguments.
1165
1166 ** The new function `string' concatenates all its argument characters
1167 and returns the resulting string.  This is consistent with other
1168 functions, like `list', `vector', etc.
1169
1170 ** The function `temp-directory' is now available to return the
1171 directory to store temporary files.  On Unix this will be obtained
1172 from TMPDIR, defaulting to `/tmp'.
1173
1174 ** The function load-average now accepts an optional argument
1175 USE-FLOATS.  If it is non-nil, the load average values are returned as
1176 floating point numbers, rather than as integers to be divided by 100.
1177
1178 ** The `make-event' function now supports the TYPE and PLIST
1179 arguments, which can be used to create various events from Lisp.  See
1180 the documentation for details.
1181
1182 ** `function-interactive' is a new function that returns the
1183 interactive specification of a funcallable object.
1184
1185 ** The new `lmessage' function allows printing of a formatted message
1186 with a particular label.
1187
1188    (lmessage 'progress "Processing... %d" counter)
1189
1190 This function is more convenient than `display-message' because it
1191 automatically applies `format' to its arguments.
1192
1193 ** The new `lwarn' function, analogous to `lmessage', allows printing
1194 a formatted warning, with a non-default CLASS or LABEL.
1195
1196 ** The new function `split-path' can now be used to explode the
1197 components of a colon-separated search path into a list.
1198
1199    (split-path "foo:bar")
1200      => ("foo" "bar")
1201
1202 ** Specifiers and symbols whose value is a specifier are now allowed
1203 as modeline specifications.
1204
1205 ** defcustom now accepts the keyword `:version'.  Use this to specify
1206 in which version of Emacs a certain variable's default value changed.
1207 For example,
1208
1209    (defcustom foo-max 34 "*Maximum number of foo's allowed."
1210      :type 'integer
1211      :group 'foo
1212      :version "21.0")
1213
1214 This information is used to control the customize-changed-options
1215 command.
1216
1217 ** The line number tracking in modeline is now efficient, even for
1218 very large buffers.  This is achieved by caching the line numbers of
1219 recent buffer positions, and reusing them.  This cache is used only in
1220 the buffers where `line-number-mode' is in effect.
1221
1222 ** When the new GNU Malloc aka Doug Lea Malloc is available, it will
1223 be used.  This should result in better performance on Linux systems
1224 with libc6.
1225
1226 ** The code XEmacs uses to assemble its various paths into the
1227 directory hierarchy has been rewritten to support the package system.
1228 Look under "Startup Paths" in the Info documentation for more
1229 information.
1230
1231 *** site-lisp is no longer part of the load-path by default.
1232 Its use is deprecated, but you can specify --with-site-lisp=yes at the
1233 configure command line to get it back.
1234
1235 *** `Info-default-directory-list' is now obsolete.  If you want to
1236 change the path which XEmacs uses to search for info files, set
1237 `Info-directory-list' instead.
1238
1239 \f
1240 * For older news, see the file ONEWS.