Use `C-c C-f' to move to the next equal level of outline, and
`C-c C-b' to move to previous equal level. `C-h m' will give more
-info about the Outline mode. Many commands are also available through
+info about the Outline mode. Many commands are also available through
the menubar.
Users who would like to know which capabilities have been introduced
\f
* Changes in XEmacs 21.2
========================
-None yet.
+** The functions in rect.el have been almost completely rewritten...
+to avoid inserting undesirable spaces, notably at the end of lines.
+Two typical examples of this old behavior are `string-rectangle', which filled
+all lines up to the right side of the rectangle, and `clear-rectangle', which
+filled even empty lines up to the left side.
+
+This is not the case any more. All these functions have been rewritten to
+avoid inserting unwanted spaces, and an optional prefix now allows them to
+behave the old way.
+
+As a side effect, `move-to-column' now also accepts 'coerce as its second
+argument, meaning that the line shouldn't be filled if its too short to reach
+the desired column.
+
+** You can now customize and save comments for faces and variables.
+
+In Custom buffers, a new menu entry allows you to add and edit a comment.
+Comments for variables can also be assigned by calling
+`customize-set-(value|variable)' with a prefix argument.
+
+** XEmacs now locates the early package hierarchy at ~/.xemacs/packages.
+
+This has changed from simply ~/.xemacs.
+
+** `delete-key-deletes-forward' now defaults to t.
+
+`delete-key-deletes-forward' is the variable that regulates the
+behaviour of the delete key on the systems that offer both a backspace
+and a delete key. If set to nil, the key labeled "Delete" will delete
+backward. If set to non-nil, the "Delete" key will delete forward,
+except on keyboards where a "Backspace" key is not provided.
+
+Unless our implementation has bugs, the only reason why you would want
+to set `delete-key-deletes-forward' to nil is if you want to use the
+Delete key to delete backwards, despite the presence (according to
+Xlib) of a BackSpace key on the keyboard.
+
+** Interactive searching and matching case improvements.
+
+Case sensitiveness in searching operations is normally controlled by
+the variable `case-fold-search' (if non-nil, case is ignored while
+searching). This mechanism has now been slightly improved for
+interactive searches: if the search string (or regexp) contains
+uppercase characters, the searching is forced to be case-sensitive,
+`case-fold-search'.
+
+The new behavior affects all functions performing interactive
+searches, like `zap-to-char', `list-matching-lines', `tags-search'
+etc. The incremental search facility has always behaved that way.
+
+** You can now create "indirect buffers", like in GNU Emacs. An
+indirect buffer shares its text with another buffer ("base buffer"),
+but has its own major mode, local variables, extents, and narrowing.
+An indirect buffer has a name of its own, distinct from those of the
+base buffer and all other buffers. An indirect buffer cannot itself
+be visiting a file (though its base buffer can be). The base buffer
+cannot itself be indirect.
+
+Use (make-indirect-buffer BASE-BUFFER NAME) to make an indirect buffer
+named NAME whose base is BASE-BUFFER. If BASE-BUFFER is itself an
+indirect buffer, its base buffer is used as the base for the new
+buffer.
+
+You can make an indirect buffer current, or switch to it in a window,
+just as you would a non-indirect buffer.
+
+The function `buffer-base-buffer' returns a buffer's base buffer or
+nil, if given an ordinary (non-indirect) buffer. The function
+`buffer-indirect-children' returns a list of the indirect children of
+a base buffer.
+
+** User names following the tilde character can now be completed at
+file name prompts; e.g. `C-x C-f ~hni<TAB>' will complete to
+`~hniksic/'. To make this operation faster, a cache of user names is
+maintained internally.
+
+The new primitives available for this purpose are functions named
+`user-name-completion' and `user-name-all-completions'.
+
+** Native widgets can be displayed in buffers.
+
+The glyph system has been extended to allow the display of glyphs that
+are implemented as native window-system widgets. Thus you can embed
+buttons, scrollbars, combo boxes, edit fields and progress gauges in a
+buffer. As a side effect subwindow support now works once again.
+
+This support is currently only available under MS-Windows.
+
+** X-Face support is now available under MS-Windows
+
+If an X-Face libary built under MS-Windows is available then XEmacs
+will use this at build time.
+
+** The font-menu is now available under MS-Windows
+
+** MS-Windows support for selection is much more robust
+
+Generally selection should now do what you would expect under
+MS-Windows: the middle mouse button will paste your current selection
+or the clipboard; conversions from different types of selection to the
+clipboard can be made; the kill-ring and friends will be updated as
+per X.
+
+The only thing selection doesn't do is set the clipboard automatically
+as this would break the MS-Windows model. If you want this behaviour
+then set `selection-sets-clipboard' to t
+
+\f
+* Lisp and internal changes in XEmacs 21.2
+==========================================
+
+** Much effort has been invested to make XEmacs Lisp faster:
+
+*** Many basic lisp operations are now faster.
+This is especially the case when running a Mule-enabled XEmacs.
+
+A general overhaul of the lisp engine should produce a speedup of 1.4
+in a Latin-1 XEmacs, and 2.1 in a Mule XEmacs. These numbers were
+obtained running `(byte-compile "simple.el")', which should be a
+pretty typical test of "pure" Lisp.
+
+*** Lisp hash tables have been re-implemented. The Common Lisp style
+hash table interface has been made standard, and moved from cl.el into
+fast C code (See the section on hash tables in the XEmacs Lisp
+Reference). A speedup factor of 3 can be expected with code that
+makes intensive use of hash tables.
+
+*** The garbage collector has been tuned, leading to a speedup of
+1.16.
+
+*** The family of functions that iterate over lists, like `memq', and
+`rassq', have been made a little faster (typically 1.3).
+
+*** Lisp function calls are faster, by approximately a factor of two.
+However, defining inline functions (via defsubst) still makes sense
+for tight loops.
+
+*** Finally, a few functions have had dramatic performance
+improvements. For example, `(last long-list)' is now 30 times faster.
+
+Of course, your mileage will vary.
+
+Many operations do not see any improvement. Surprisingly, running
+(font-lock-fontify-buffer) does not use the Lisp engine much at all.
+Speeding up your favorite slow operation is an excellent project to
+improve XEmacs. Don't forget to profile!
+
+** XEmacs finally has an automated test suite!
+Although this is not yet very sophisticated, it is already responsible
+for several important bug fixes in XEmacs. To try it out, simply use
+the makefile target `make check' after building XEmacs.
+
+** Hash tables have been reimplemented.
+As was pointed out above, the standard interface to hash tables is now
+the Common Lisp interface, as described in Common Lisp, the Language
+(CLtL2, by Steele). The older interface (functions with names
+containing the phrase `hashtable') will continue to work, but the
+preferred interface now has names containing the phrase `hash-table'.
+
+Here's the executive overview: create hash tables using
+make-hash-table, and use gethash, puthash, remhash, maphash and
+clrhash to manipulate entries in the hash table. See the (updated)
+Lisp Reference Manual for details.
+
+** Lisp code handles circular lists much more robustly.
+Many basic lisp functions used to loop forever when given a circular
+list, expecting you to C-g (quit) out of the loop. Now this is more
+likely to trigger a `circular-list' error. Printing a circular list
+now results in something like this:
+
+ (let ((x (cons 'foo 'foo)))
+ (setcdr x x)
+ x)
+ => (foo ... <circular list>)
+
+An extra bonus is that checking for circularities is not just
+friendlier, but actually faster than checking for C-g.
+
+** The new form `ignore-file-errors', similar to `ignore-errors' may
+be used as a short-hand for condition-case when you wish to ignore
+file-related error. For example:
+
+ (ignore-file-errors (delete-file "foo"))
+
+** The arguments to `locate-file' are now much more "lispy". As
+before, the usage is:
+
+ (locate-file FILENAME PATH-LIST &optional SUFFIXES MODE)
+
+Except that SUFFIXES are now a list of strings instead of a single,
+colon-separated string. MODE is now a symbol or a list of symbols
+(symbols `exists', `executable', `writable', and `readable' are
+supported) instead of an integer code. See the documentation for
+details.
+
+Of course, the old form is still accepted for backward compatibility.
+
+** `translate-region' has been improved in several ways. Its TABLE
+argument used to be a 256-character string. In addition to this, it
+can now also be a vector or a char-table (which is useful for Mule.)
+If TABLE a vector or a generic char-table, you can map characters to
+strings instead of to other characters. For instance:
+
+ (let ((table (make-char-table 'generic)))
+ (put-char-table ?a "the letter a" table)
+ (put-char-table ?b "" table)
+ (put-char-table ?c ?\n table)
+ (translate-region (point-min) (point-max) table))
+
+** The `keywordp' function now returns non-nil only on symbols
+interned in the global obarray. For example:
+
+ (keywordp (intern ":foo" [0]))
+ => nil
+ (keywordp (intern ":foo")) ; The same as (keywordp :foo)
+ => t
+
+This behaviour is compatible with other code which treats symbols
+beginning with colon as keywords only if they are interned in the
+global obarray. `keywordp' used to wrongly return t in both cases
+above.
+
+** The first argument to `intern-soft' may now also be a symbol, like
+with `unintern'. If given a symbol, `intern-soft' will look for that
+exact symbol rather than for any string. This is useful when you want
+to check whether a specific symbol is interned in an obarray, e.g.:
+
+ (intern "foo")
+ (intern-soft "foo")
+ => foo
+ (intern-soft (make-symbol "foo"))
+ => nil
+
+** Functions for decoding base64 encoding are now available; see
+`base64-encode-region', `base64-encode-string', `base64-decode-region'
+and `base64-decode-string'.
+
+\f
* Changes in XEmacs 21.0
========================
** When the Zmacs region is active, `M-x query-replace' and the other
replace commands now operate on the region contents only.
-** Using the new `-private' option, you can make XEmacs use a private
-colormap.
+** XEmacs now is able to choose X visuals and use private colormaps.
+The '-visual <visualStr>' command line option or the '.EmacsVisual'
+Xresource controls which visual XEmacs will use, and
+'-privateColormap' or '.privateColormap' will force XEmacs to create a
+private colormap for use. The syntax for the visual string is
+"<visual><bitdepth>" where <visual> is one of 'StaticColor',
+'TrueColor', 'GrayScale', 'PseudoColor' or 'DirectColor' and
+<bitdepth> is the appropriate number of bits per pixel. If an invalid
+or non-supported combination is entered, XEmacs attempts to find a happy
+medium. The X creation mechanism will then determine if it needs to
+create a colormap for use, or the presence of the private flags will
+force it to create it.
** The `imenu' package has been ported to XEmacs and is available as a
package.
** The new variable `user-full-name' can be used to customize one's
name when using the Emacs mail and news reading facilities.
-Normally, `user-full-name' is a function that returns the full name of
+Normally, `user-full-name' is a function that returns the full name of
a user or UID, as specified by the system -- for instance,
-(user-full-name "root") returns something like "Super-User". However,
+(user-full-name "root") returns something like "Super-User". However,
when the function is called without arguments, it will return the
-value of the `user-full-name' variable. The `user-full-name' variable
+value of the `user-full-name' variable. The `user-full-name' variable
is initialized using the environment variable NAME and (failing that)
the user's system name.
-The behaviour of the `user-full-name' function with an argument
+The behavior of the `user-full-name' function with an argument
specified is unchanged.
** The new command `M-x customize-changed-options' lets you customize
It has been greatly enhanced with respect to the one once included
with the ilisp package and should work well under XEmacs 21.0.
+** Gnuserv changes
+
+*** Like the old 'gnudoit' program. Gnuclient -batch now can read from stdin.
+
+*** Gnuclient -batch no longer breaks off the output at the first LF.
+
** C mode changes
*** Multiline macros are now handled, both as they affect indentation,
*** \\1-expressions are now valid in `nnmail-split-methods'.
-*** The `custom-face-lookup' function has been removed.
+*** The `custom-face-lookup' function has been removed.
If you used this function in your initialization files, you must
rewrite them to use `face-spec-set' instead.
subsystem. If the `dir' file does not exist in an Info directory, the
relevant information will be generated on-the-fly.
-This behaviour can be customized, look for `Info-auto-generate-directory'
+This behavior can be customized, look for `Info-auto-generate-directory'
and `Info-save-auto-generated-dir' in the `info' customization group.
\f
only when needed, and they are not draggable.
Other properties of the vertical dividers may be controlled using
-`vertical-divider-shadow-thickness', `vertical-divider-line-width' and
+`vertical-divider-shadow-thickness', `vertical-divider-line-width' and
`vertical-divider-spacing' specifiers, which see.
** Frame focus management changes.
** It is now possible to build XEmacs with LDAP support.
You will need to install a LDAP library first. The following have
been tested:
- - LDAP 3.3 from the University of Michigan
+ - LDAP 3.3 from the University of Michigan
(get it from <URL:http://www.umich.edu/~dirsvcs/ldap/>)
+ - OpenLDAP 1.0.3 from the OpenLDAP Foundation
+ (get it from <URL:http://www.openldap.org/>)
- LDAP SDK 1.0 from Netscape Corp.
(get it from <URL:http://developer.netscape.com/>)