Mercurial > hg > xemacs-beta
diff etc/NEWS @ 371:cc15677e0335 r21-2b1
Import from CVS: tag r21-2b1
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:03:08 +0200 |
parents | a4f53d9b3154 |
children | 6240c7796c7a |
line wrap: on
line diff
--- a/etc/NEWS Mon Aug 13 11:01:58 2007 +0200 +++ b/etc/NEWS Mon Aug 13 11:03:08 2007 +0200 @@ -30,6 +30,10 @@ particular version is implied, "Emacs" will be used. +* Changes in XEmacs 21.2 +======================== +None yet. + * Changes in XEmacs 21.0 ======================== @@ -38,10 +42,6 @@ See the file `etc/PACKAGES' in the distribution for a partial list of packages available at the time of the 21.0 release. -IMPORTANT NOTE: XEmacs currently expects the user-specific package -hierarchy in ~/.xemacs. This will probably change to -~/.xemacs/packages in a future version of XEmacs. - ** XEmacs is now supported under Microsoft Windows 95/98 and Windows NT operating systems. For starters, look at the XEmacs on Windows FAQ at <URL:http://jagor.srce.hr/~hniksic/xemacs-on-windows-faq.txt>. To @@ -63,18 +63,8 @@ ** When the Zmacs region is active, `M-x query-replace' and the other replace commands now operate on the region contents only. -** 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. +** Using the new `-private' option, you can make XEmacs use a private +colormap. ** The `imenu' package has been ported to XEmacs and is available as a package. @@ -101,7 +91,7 @@ is initialized using the environment variable NAME and (failing that) the user's system name. -The behavior of the `user-full-name' function with an argument +The behaviour of the `user-full-name' function with an argument specified is unchanged. ** The new command `M-x customize-changed-options' lets you customize @@ -167,12 +157,6 @@ 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, @@ -316,48 +300,13 @@ subsystem. If the `dir' file does not exist in an Info directory, the relevant information will be generated on-the-fly. -This behavior can be customized, look for `Info-auto-generate-directory' +This behaviour can be customized, look for `Info-auto-generate-directory' and `Info-save-auto-generated-dir' in the `info' customization group. -** Version Control is no longer automatically loaded. Users must -add: - -(require 'vc-hooks) - -to their .emacs file to get version control functionality. - -** The EDiff menus are no longer included in the default menubar. -Users must add: - -(require 'ediff-hook) - -to their .emacs file to get the menus. - -** An experimental version of dynamic linking is supported. - -There is no documentation and we are making no guarantees about what -might change in the future with the "C" level API. Examples of how to -make DLLs are in the modules subdirectory of the XEmacs source -distribution. - -Please note that XEmacs is a GPL'ed program and there are restrictions -on what kinds of binaries that can be linked with it. In particular, -proprietary DLLs without source cannot be distributed. See the file -COPYING for more details. * Lisp and internal changes in XEmacs 21.0 ========================================== -** There is a new configure option '--with-clash-detection' to - enable/disable 'lockdir' based clash detection. (Actually, it has - been there since 20.4, but was not documented then). The - implementation based on a central locking directory can cause - severe slowdowns on networked file systems. Therefore the default - has been changed to build with clash detection disabled, pending - reimplementation of the feature (most likely compatible with the - new implementation in recent FSF verions and Interleaf) in an - upcoming version. - ** It is now possible to build XEmacs with support for 31-bit Lisp integers (normally, Lisp integers are only 28 bits wide on 32-bit machines.) Configure with --use-minimal-tagbits to test. With this @@ -442,7 +391,7 @@ This means that if you want to test whether A < B < C, you can write it as (< A B C) instead of (and (< A B) (< B C)). Likewise, -(apply #'> LIST) now tests if LIST is monotonically increasing -- and +(apply #'> LIST) now tests if LIST is monotonously increasing -- and so on. ** The XEmacs hashtables now have a consistent read/print syntax. @@ -465,8 +414,6 @@ been tested: - 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/>) @@ -550,3885 +497,10 @@ Look under "Startup Paths" in the Info documentation for more information. -*** site-lisp is no longer part of the load-path by default. +*** site-lisp is now longer part of the load-path by default. Its use is deprecated, but you can specify --with-site-lisp=yes at the configure command line to get it back. *** `Info-default-directory-list' is now obsolete. If you want to change the path which XEmacs uses to search for info files, set `Info-directory-list' instead. - - -* Changes in XEmacs 20.4 -======================== - -** XEmacs 20.4 is a bugfix release with no user-visible changes. - - -* Changes in XEmacs 20.3 -======================== - -** Quail input method is now available. - -Quail is a simple key-translation system that allows users to input -any multilingual text from normal ASCII keyboard. This means that -XEmacs with Mule now supports a number of European languages. - -** More Windows NT support. - -Thanks to efforts of many people, coordinated by David Hobley -<davidh@wr.com.au> and Marc Paquette <marcpa@cam.org>, beta versions -of XEmacs now run on 32-bit Windows platforms (Windows NT and Windows -95). The current betas require having an X server to run XEmacs; -however, a native NT/95 port is in alpha, thanks to Jonathan Harris -<jhar@tardis.ed.ac.uk>. - -The NT development is now coordinated by a mailing list at -<xemacs-nt@xemacs.org>. Mail to <xemacs-nt-request@xemacs.org> to -subscribe. - -** Multiple TTY frames are now available. - -On consoles that display only one frame at a time (e.g. TTY consoles), -creating a new frame with `C-x 5 2' also raises and selects that -frame. The behavior of window system frames is unchanged. - -** Package starting changes. - -State of Emacs should never be changed with loading a package. The -following XEmacs packages that used to break this have been changed. - -*** Loading `paren' no longer enables paren-blinking. Use -`paren-set-mode' explicitly, or customize `paren-mode'. - -*** Loading `uniquify' no longer enables uniquify. Set -`uniquify-buffer-name-style' to a legal value. - -*** Loading `time' no longer enables display time. Invoke -`display-time' explicitly. - -*** Loading `jka-compr' no longer enables on-the-fly compression. Use -`toggle-auto-compression' instead. - -*** Loading `id-select' no longer enables its behavior. Use -`id-select-install' instead. - -** Zmacs region is not deactivated when an error is signaled. - -The behavior of the zmacs region can now be controlled in the event of -a signaled error. The new variable `errors-deactivate-region' may be -set to nil to revert to the old behavior. As before, typing C-g -deactivates the region. - -** Multiple Info `dir' functionality has been merged with GNU Emacs -19.34. - -XEmacs will now correctly merge all the `dir' files in -`Info-directory-list' (initialized from either the `INFOPATH' -env. variable or `Info-default-directory-list'.) These files may be -full-fledged info files containing subnodes or menus. Previously -supported `localdir' files are looked for also, secondary to `dir's. -See the manual for details. - -** Abbreviations can now contain non-word characters. - -This means that it is finally possible to do such simple things as -define `#in' to expand to `#include' in C mode, `s-c-b' to -`save-current-buffer' in Lisp mode, `call/cc' to -`call-with-current-continuation' in Scheme mode, etc. - -** `C-x n d' now runs the new command `narrow-to-defun', -which narrows the accessible parts of the buffer to just -the current defun. - -** The new command `C-x 4 0' (kill-buffer-and-window) kills the -current buffer and deletes the selected window. It asks for -confirmation first. - -** `ESC ESC ESC' (keyboard-escape-quit) will now correctly abort -recursive edits (as documented.) - -** arc-mode has a new function called `archive-quit' bound to q, which -quits archive mode in the same fashion dired-quit works. - -** A `tetris' clone is now available within XEmacs, written by Glynn -Clements. Try it out with `M-x tetris'. - -** The feature to teach the key bindings of extended commands now -prints the message after the command finishes. After some time, the -previous echo area contents are restored (in case the command prints -something useful). - -** If you set scroll-conservatively to a small number, then when you -move point a short distance off the screen, XEmacs will scroll the -screen just far enough to bring point back on screen, provided that -does not exceed `scroll-conservatively' lines. - -** Face background colors now take precedence over the default face -background pixmap, which means that background pixmaps no longer clash -with zmacs-regions, or clickable buttons. - -** Regexps can now contain additional Perl-like constructs. - -** Modifiers can be added to a keystroke by preceding it with a `C-x @ -<x>' sequence where <x> is one of letters `S', `c', `m', `a', `h', `s' -corresponding to shift, control, meta, alt, hyper, and super modifiers, -respectively. It is possible to add several modifiers by repeating this -sequence. This feature is especially useful on text terminals where it -allows one to enter keystrokes like, e.g., `M-home'. - -** An arbitrary keystroke can be generated by entering `C-x @ k -<keysym-name> RET'. For example a sequence: - - C-x @ c C-x @ k b a c k s p a c e RET - -will result in a `C-backspace' keystroke even on text terminals. - -** Customize changes. - -*** Customize has undergone a massive speedup, and should now operate -acceptably fast. Slowness of the interface used to be the biggest -gripe. - -*** Many more packages have been modified to use the facility, so -almost all of XEmacs options can now be examined through the Customize -groups. - -*** There is a new `browser' mode of traversing customizations, in -many ways easier to follow than the standard one. Try it out with -`M-x customize-browse'. - -** Pending-delete changes. - -*** Pending-delete is now a minor mode, with the normal minor-mode -semantics and toggle functions. Old functions are left for -compatibility. - -*** Loading pending-del no longer turns on pending-delete mode. In -fact, it is no longer necessary to explicitly load pending-del. All -you need to do to turn on pending-delete is run the pending-delete -function: - - Within XEmacs: Type M-x pending-delete <ret> - not M-x load-library <ret> pending-delete <ret> - - In .emacs: Use (turn-on-pending-delete) - not (load "pending-del") - -** XEmacs can now save the minibuffer histories from various -minibuffers. To use this feature, add the line: - - (savehist-load) - -to your .emacs. This will load the minibuffer histories (if any) at -startup, as well as instruct XEmacs to save them before exiting. You -can use Customize to add or remove the histories being saved. - -** The default format for ChangeLog entries (as created by `C-x 4 a') -is now the international ISO 8601 format. - -To revert to the old behavior, use: - - (setq add-log-time-format 'current-time-string) - -Or `M-x customize RET add-log RET'. - -** In ChangeLog mode, you can now press `C-c C-c' to save the file -and restore old window configuration, or `C-c C-k' to abandon the -changes. - -** The key `C-x m' no longer runs the `mail' command directly. -Instead, it runs the command `compose-mail', which invokes the mail -composition mechanism you have selected with the variable -`mail-user-agent'. The default choice of user agent is -`sendmail-user-agent', which gives behavior compatible with the old -behavior. - -C-x 4 m now runs compose-mail-other-window, and C-x 5 m runs -compose-mail-other-frame. - -** When you kill a buffer that visits a file, if there are any -registers that save positions in the file, these register values no -longer become completely useless. If you try to go to such a register -with `C-x j', then you are asked whether to visit the file again. If -you say yes, it visits the file and then goes to the same position. - -** When you visit a file that changes frequently outside Emacs--for -example, a log of output from a process that continues to run--it may -be useful for Emacs to revert the file without querying you whenever -you visit the file afresh with `C-x C-f'. - -You can request this behavior for certain files by setting the -variable revert-without-query to a list of regular expressions. If a -file's name matches any of these regular expressions, find-file and -revert-buffer revert the buffer without asking for permission--but -only if you have not edited the buffer text yourself. - -** Gnuserv changes - -*** The Lisp part of gnuserv has been rewritten to allow for more -flexibility and features. - -*** Many new options and variables are now customizable. Try -`M-x customize RET gnuserv RET'. - -*** The functionality of `gnuattach' and `gnudoit' programs is -provided by `gnuclient', which now accepts the standard `-nw', -`-display', `-eval' and `-f' options. - -** Etags changes. - -*** In C, C++, Objective C and Java, Etags tags global variables by -default. The resulting tags files are inflated by 30% on average. -Use --no-globals to turn this feature off. Etags can also tag -variables that are members of structure-like constructs, but it does -not by default. Use --members to turn this feature on. - -*** C++ member functions are now recognized as tags. - -*** Java is tagged like C++. In addition, "extends" and "implements" -constructs are tagged. Files are recognised by the extension .java. - -*** Etags can now handle programs written in Postscript. Files are -recognised by the extensions .ps and .pdb (Postscript with C syntax). -In Postscript, tags are lines that start with a slash. - -*** Etags now handles Objective C and Objective C++ code. The usual C and -C++ tags are recognized in these languages; in addition, etags -recognizes special Objective C syntax for classes, class categories, -methods and protocols. - -*** Etags also handles Cobol. Files are recognised by the extension -.cobol. The tagged lines are those containing a word that begins in -column 8 and ends in a full stop, i.e. anything that could be a -paragraph name. - -*** Regexps in Etags now support intervals, as in ed or grep. The syntax of -an interval is \{M,N\}, and it means to match the preceding expression -at least M times and as many as N times. - -** Ada mode changes. - -*** There is now better support for using find-file.el with Ada mode. -If you switch between spec and body, the cursor stays in the same -procedure (modulo overloading). If a spec has no body file yet, but -you try to switch to its body file, Ada mode now generates procedure -stubs. - -*** There are two new commands: - - `ada-make-local' : invokes gnatmake on the current buffer - - `ada-check-syntax' : check syntax of current buffer. - -The user options `ada-compiler-make', `ada-make-options', -`ada-language-version', `ada-compiler-syntax-check', and -`ada-compile-options' are used within these commands. - -*** Ada mode can now work with Outline minor mode. The outline level -is calculated from the indenting, not from syntactic constructs. -Outlining does not work if your code is not correctly indented. - -*** The new function `ada-gnat-style' converts the buffer to the style of -formatting used in GNAT. It places two blanks after a comment start, -places one blank between a word end and an opening '(', and puts one -space between a comma and the beginning of a word. - -** New demand based locking implementation - -A faster, but experimental replacement for lazy-lock (called lazy-shot) is -provided. Like lazy-lock it provides demand based and idle time -font-lock-ing. However the lazy-lock versions that came with previous -versions slowed down XEmacs (possibly quite a lot). Lazy-shot solves -this problem by relying on new support from the C code part of XEmacs. -The support however is experimental and will cause some flashing as -parts of the buffer are colored. This likely to change in the future -as the C support is completed. - -The current lazy-shot implementation is mostly interface compatible -with lazy-lock v2.06 (the version shipped with XEmacs is v1.x). - -*** To enable: - 1. Despite the flashing, lazy-shot was deemed such an improvement by - the majority of beta testers that it is now the standard method - provided by the options menu. Alternatively add - - (add-hook 'font-lock-mode-hook 'turn-on-lazy-shot) - - to '.emacs'. - 2. If you were using lazy-lock before, just replace all occurrences of - "lazy-lock" by "lazy-shot" in your '.emacs' file. - -*** To disable: - -If prefer to use lazy-lock in stead of lazy-shot, put - - (remove-hook 'font-lock-mode-hook 'turn-on-lazy-shot) - (add-hook 'font-lock-mode-hook 'turn-on-lazy-lock) - -at the END of `.emacs'. - -** RefTeX mode - -RefTeX mode is a new minor mode with special support for \label{}, \ref{} -and \cite{} macros in LaTeX documents. RefTeX distinguishes labels of -different environments (equation, figure, ...) and has full support for -multifile documents. To use it, select a buffer with a LaTeX document and -turn the mode on with M-x reftex-mode. Here are the main user commands: - -C-c ( reftex-label - Creates a label semi-automatically. RefTeX is context sensitive and - knows which kind of label is needed. - -C-c ) reftex-reference - Offers in a menu all labels in the document, along with context of the - label definition. The selected label is referenced as \ref{LABEL}. - -C-c [ reftex-citation - Prompts for a regular expression and displays a list of matching BibTeX - database entries. The selected entry is cited with a \cite{KEY} macro. - -C-c & reftex-view-crossref - Views the cross reference of a \ref{} or \cite{} command near point. - -C-c = reftex-toc - Shows a table of contents of the (multifile) document. From there you - can quickly jump to every section. - -Under X, RefTeX installs a "Ref" menu in the menu bar, with additional -commands. Full documentation and customization examples are in the file -reftex.el. You can use the finder to view this information: -C-h p --> tex --> reftex.el - - -* Lisp and internal changes in XEmacs 20.3 -========================================== - -** Autoconf 2 is supported, making XEmacs more conforming to -conventions used by other free software. - -** `tty-erase-char' is a new variable that reports which character -was set up as the terminal's erase character at the time Emacs was -started. - -** It is now possible to attach the menubar accelerator keys to menu -entries. Look at the Lispref under Menus->Menu Accelerators for -details. - -** `insert-file-contents' can now read from a special file, -as long as the arguments VISIT and REPLACE are nil. - -** `string-to-number' now accepts an optional BASE argument that -specifies which base to use. The default base is 10. - -** The TIME argument to `format-time-string' is now optional and -defaults to the current time. - -** The PATTERN argument to `split-string' is now optional and defaults -to whitespace ("[ \f\t\n\r\v]+"). - -** `set-extent-properties' is a new function that can be used to -change properties of an extent at once, and is analogous to -`set-frame-properties'. - -** If a format field width is specified as `*', the field width is -now assumed to have been specified as an argument (as in C.) - - (format "%*s" 10 "abc") - => " abc" - -** The new macro `with-current-buffer' lets you evaluate an expression -conveniently with a different current buffer. It looks like this: - - (with-current-buffer BUFFER BODY-FORMS...) - -BUFFER is the expression that says which buffer to use. -BODY-FORMS say what to do in that buffer. -The old `eval-in-buffer' macro is obsoleted by `with-current-buffer'. - -** The new primitive `save-current-buffer' saves and restores the -choice of current buffer, like `save-excursion', but without saving or -restoring the value of point or the mark. `with-current-buffer' -works using `save-current-buffer'. - -** The new macro `with-temp-file' lets you do some work in a new buffer and -write the output to a specified file. Like `progn', it returns the value -of the last form. - -** The variable `debug-ignored-errors' now works in XEmacs. It allows -one to ignore the debugger for some common errors, even when -`debug-on-error' is t. It has no effect when `debug-on-signal' is -non-nil. - -** The new function `current-message' returns the message currently -displayed in the echo area, or nil if there is none. - -** File-access primitive functions no longer discard an extra redundant -directory name from the beginning of the file name. In other words, -they no longer do anything special with // or /~. The same goes for -`expand-file-name'. That conversion is now done only in -`substitute-in-file-name'. - -This makes it possible for a Lisp program to open a file whose name -begins with ~. - -** The regexp matcher has been extended to recognize the following -constructs, borrowed from Perl: - -*** Additional quantifiers. - -In addition to `*', `+' and `?', XEmacs now recognizes the following -quantifiers: - - \{n\} Match exactly n times - \{n,\} Match at least n times - \{n,m\} Match at least n but not more than m times - -*** Non-greedy quantifiers. - -Any of the standard quantifiers (`*', `+' and others) can now be -followed by an optional `?', which will make them become "non-greedy", -i.e. they will match as little text as possible. Note that the -meanings don't change, just the "gravity." - -*** Shy groups. - -The \(?: ... \) groups things like \( ... \), but doesn't record the -context for backreferences or future use. This is useful when you -need a lot of groups for the sake of priorities, but actually want to -record only one or two. - -** The new function `regexp-opt' returns an efficient regexp to match -a string. The arguments are STRINGS and (optionally) PAREN. This -function can be used where regexp matching or searching is intensively -used and speed is important, e.g., in Font Lock mode. - -** The featurep syntax has been extended to resemble the Common Lisp -one, as suggested by Erik Naggum. - -*** The `xemacs' feature is defined in XEmacs by default. - -*** The expression `#+fexp form' is equivalent to -(when (featurep fexp) form), only it is evaluated at read-time. Also, -`#-fexp form' is equivalent to (unless (featurep fexp) form). - -*** In addition to symbols, a FEXP can also be a number, or a logical -operator. Here are some examples: - ;; evaluates to non-nil on XEmacs: - (featurep 'xemacs) - ;; evaluates to non-nil on XEmacs 20.3 or later: - (featurep '(and xemacs 20.03)) - ;; evaluates to non-nil either on Emacs, or on XEmacs built without - ;; X support: - (featurep '(or emacs (and xemacs (not x)))) - - - -* Changes in XEmacs 20.2 -======================== - -** Why XEmacs 20.1 is called 20.2 - -Testing of XEmacs 20.1 revealed a number of showstopping bugs at the -very final moment. Instead of confusing the version numbers further, -the `20.1' designation was abandoned, and the release was renamed to -`20.2'. - -** Delete/backspace keysyms have been separated - -The Delete and Backspace keysyms are now no longer identical. A better -version of delbackspace.el has been added called delbs.el. - -** XEmacs 20.0 MULE API supported for backwards compatibility - -XEmacs 20.2 primarily supports the MULE 3 API. It now also supports -the XEmacs 20.0 MULE API. - -** The logo has been changed, and the default background color is -now a shade of gray instead of the eye-burning white. - -The sample .Xdefaults and .emacs files contain examples of how to -revert to the old background color. - -** Default modeline colors are now less of a color-salad. - -** The `C-z' key now iconifies only the current X frame. You can use -`C-x C-z' to get the old behavior. - -On the tty frames `C-z' behaves as before. - -** The command `display-time' now draws a pretty image in the modeline -when new mail arrives. It also supports balloon-help messages. - -** Various commands that were previously disabled are now enabled, like -eval-expression (`M-:') and upcase-region (`C-x C-u')/downcase-region -(`C-x C-l'). - -** It is now possible to customize the functions called by XEmacs toolbar. - -Type `M-x customize RET toolbar RET' to customize it. Customizations -include the choice of functions for the buttons to invoke, as well as -a wide choice of mailers and newsreaders to invoked by the respective -functions. - -** `temp-buffer-shrink-to-fit' now defaults to nil. - -There are unresolved issues regarding this feature, which is why the -XEmacs developers decided to disable it by default. - -** `ps-print-color-p' now defaults to nil. - -This is because the new default background color is non-white. The -`Printing Options' in the `Options' menu now include an item that -enables color printing, and sets the white background. - -** `line-number-mode' should be used to get line numbers in the -modeline, and `column-number-mode' to get column numbers. Line -numbers now number from 1 by default. - -** font-lock-mode will now correctly fontify `int a, b, c;' -expressions in C mode. - -** The blinking cursor is always "on" during movement. - -** The XEmacs build process has been changed to make site -administration easier. See lisp/site-load.el for details. - -** Numerous causes of crashes have been fixed. XEmacs should now be -even more stable than before. - -** configure no longer defaults to using --with-xim=motif if Motif libraries -are linked. - -There are many bugs in the Xlib XIM support in X11R6.3. - -** A number of new packages are added, and many packages were -updated. - -** Gnus-5.4.52, courtesy of Lars Magne Ingebrigtsen - -*** nntp.el has been totally rewritten in an asynchronous fashion. - -*** Article prefetching functionality has been moved up into -Gnus. - -*** Scoring can now be performed with logical operators like -`and', `or', `not', and parent redirection. - -*** Article washing status can be displayed in the -article mode line. - -*** gnus.el has been split into many smaller files. - -*** Suppression of duplicate articles based on Message-ID. - -(setq gnus-suppress-duplicates t) - -*** New variables for specifying what score and adapt files -are to be considered home score and adapt files. See -`gnus-home-score-file' and `gnus-home-adapt-files'. - -*** Groups can inherit group parameters from parent topics. - -*** Article editing has been revamped and is now usable. - -*** Signatures can be recognized in more intelligent fashions. -See `gnus-signature-separator' and `gnus-signature-limit'. - -*** Summary pick mode has been made to look more nn-like. -Line numbers are displayed and the `.' command can be -used to pick articles. - -*** Commands for moving the .newsrc.eld from one server to -another have been added. - - `M-x gnus-change-server' - -*** A way to specify that "uninteresting" fields be suppressed when -generating lines in buffers. - -*** Several commands in the group buffer can be undone with -`M-C-_'. - -*** Scoring can be done on words using the new score type `w'. - -*** Adaptive scoring can be done on a Subject word-by-word basis: - - (setq gnus-use-adaptive-scoring '(word)) - -*** Scores can be decayed. - - (setq gnus-decay-scores t) - -*** Scoring can be performed using a regexp on the Date header. The -Date is normalized to compact ISO 8601 format first. - -*** A new command has been added to remove all data on articles from -the native server. - - `M-x gnus-group-clear-data-on-native-groups' - -*** A new command for reading collections of documents -(nndoc with nnvirtual on top) has been added -- `M-C-d'. - -*** Process mark sets can be pushed and popped. - -*** A new mail-to-news backend makes it possible to post -even when the NNTP server doesn't allow posting. - -*** A new backend for reading searches from Web search engines -(DejaNews, Alta Vista, InReference) has been added. - - Use the `G w' command in the group buffer to create such - a group. - -*** Groups inside topics can now be sorted using the standard -sorting functions, and each topic can be sorted independently. - - See the commands under the `T S' submap. - -*** Subsets of the groups can be sorted independently. - - See the commands under the `G P' submap. - -*** Cached articles can be pulled into the groups. - - Use the `Y c' command. - -*** Score files are now applied in a more reliable order. - -*** Reports on where mail messages end up can be generated. - - `M-x nnmail-split-history' - -*** More hooks and functions have been added to remove junk -from incoming mail before saving the mail. - - See `nnmail-prepare-incoming-header-hook'. - -*** The nnml mail backend now understands compressed article files. - -** Custom 1.86, courtesy of Per Abrahamsen - -The Customize library enables Emacs Lisp programmers to specify types -of their variables, so that the users can customize them. - -Invoke the customizations buffer using the menus (Customize is at the -top of the Options menu), or using commands `M-x customize', -`M-x customize-variable' and `M-x customize-face'. Customize can save -the changed settings to your `.emacs' file. - -Customize is now the preferred way to change XEmacs settings. Tens of -packages have been converted to take advantage of the Customize -features, including Gnus, Message, Supercite, Psgml, Comint, W3, -cc-mode (and many other programming language modes), ispell.el, -ps-print.el, id-select.el, most of the programming language modes, and -many many more. - -See the "Lisp Changes" section later for a short description of why -and how to add custom support to your Lisp packages. Custom is also -documented in the XEmacs info manuals. - -** W3-3.0.86, courtesy of William Perry - -Version 3 of Emacs/W3, the Emacs World Wide Web browser, has been -included. It is significantly faster than any of the previous -versions, and contains numerous new features. - -** AUCTeX-9.7k, courtesy of Per Abrahamsen - -AUC TeX is a comprehensive customizable integrated environment for -writing input files for LaTeX using Emacs. - -AUC TeX lets you run TeX/LaTeX and other LaTeX-related tools, such as -a output filters or post processor from inside Emacs. Especially -`running LaTeX' is interesting, as AUC TeX lets you browse through the -errors TeX reported, while it moves the cursor directly to the -reported error, and displays some documentation for that particular -error. This will even work when the document is spread over several -files. - -AUC TeX automatically indents your `LaTeX-source', not only as you -write it -- you can also let it indent and format an entire document. -It has a special outline feature, which can greatly help you `getting -an overview' of a document. - -Apart from these special features, AUC TeX provides an large range of -handy Emacs macros, which in several different ways can help you write -your LaTeX documents fast and painless. - -** redo.el-1.01, courtesy of Kyle Jones - -redo.el is a package that implements true redo mechanism in XEmacs -buffers. Once you load it from your `.emacs', you can bind the `redo' -command to a convenient key to use it. - -Emacs' normal undo system allows you to undo an arbitrary number of -buffer changes. These undos are recorded as ordinary buffer changes -themselves. So when you break the chain of undos by issuing some -other command, you can then undo all the undos. The chain of recorded -buffer modifications therefore grows without bound, truncated only at -garbage collection time. - -The redo/undo system is different in two ways: - -*** The undo/redo command chain is only broken by a buffer modification. - -You can move around the buffer or switch buffers and still come back -and do more undos or redos. - -*** The `redo' command rescinds the most recent undo without -recording the change as a _new_ buffer change. - -It completely reverses the effect of the undo, which includes making -the chain of buffer modification records shorter by one, to counteract -the effect of the undo command making the record list longer by one. - -** edmacro.el-3.10, courtesy of Dave Gillespie, ported to XEmacs by -Hrvoje Niksic. - -Edmacro is a utility that provides easy editing of keyboard macros. -Originally written by Dave Gillespie, it has been mostly rewritten by -Hrvoje Niksic, in order to make it distinguish characters and integer, -as well as to adapt it to XEmacs keysyms. - -Press `C-x C-k' to invoke the `edit-kbd-macro' command that lets you -edit old as well as define new keyboard macros. You can also edit the -last 100 keystrokes and insert them into a macro to be bound to a key -or named as a command. The recorded/edited macros can be dumped to -`.emacs' file. - -** xmine.el-1.8, courtesy of Jens Lautenbacher - -XEmacs now includes a minesweeper game with a full-featured graphics -and mouse interface. Invoke with `M-x xmine'. - -** efs-1.15-x5 courtesy of Andy Norman and Michael Sperber - -EFS is now integrated with XEmacs, and replaces the old ange-ftp. It -has many more features, including info documentation, support for many -different FTP servers, and integration with dired. - -** mic-paren.el-1.3.1, courtesy of Mikael Sjödin -** hyperbole-4.022, courtesy of Bob Weiner -** hm--html-menus-5.3, courtesy of Heiko Muenkel -** python-mode.el-2.90, courtesy of Barry Warsaw -** balloon-help-1.06, courtesy of Kyle Jones -** xrdb-mode.el-1.21, courtesy of Barry Warsaw -** igrep.el-2.56, courtesy of Kevin Rodgers -** frame-icon.el, courtesy of Michael Lamoureux and Bob Weiner -** itimer.el-1.05, courtesy of Kyle Jones -** VM-6.30, courtesy of Kyle Jones -** OO-Browser-2.10, courtesy of Bob Weiner -** viper-2.93, courtesy of Michael Kifer -** ediff-2.65, courtesy of Michael Kifer -** detached-minibuf-1.1, courtesy of Alvin Shelton -** whitespace-mode.el, courtesy of Heiko Muenkel -** winmgr-mode.el, courtesy of David Konerding, Stefan Strobel & Barry Warsaw -** fast-lock.el-3.11.01, courtesy of Simon Marshall -** lazy-lock.el-1.16, courtesy of Simon Marshall -** browse-cltl2.el-1.1, courtesy of Holger Schauer -** eldoc.el-1.10, courtesy of Noah Friedman -** tm-7.105, courtesy of MORIOKA Tomohiko -** verilog-mode.el-2.25, courtesy of Michael McNamara & Adrian Aichner -** overlay.el, courtesy of Joseph Nuspl -** live-icon.el-1.3, fixes courtesy of Karl Hegbloom -** tpu-edt.el, fixes courtesy of R. Kevin Oberman -** etags.c-11.86 Courtesy of F. Potortì - - -* Lisp and internal changes in XEmacs 20.2 -========================================== - -** `defcustom' and `defgroup' can now be used to specify types and -placement of the user-settable variables. - -You can now specify the types of user-settable variables in your Lisp -packages to be customized by users. To do so, use `defcustom' as a -replacement for `defvar'. - -For example, the old declaration: - -(defvar foo-blurgoze nil - "*non-nil means that foo will act very blurgozely.") - -can be rewritten as: - -(defcustom foo-blurgoze nil - "*non-nil means that foo will act very blurgozely." - :type 'boolean - :group 'foo) - -From a package writer's point of view, nothing has been changed -However, the user can now type `M-x customize RET foo-blurgoze RET' to -customize the variable. - -Other, more complex data structures can be described with `defcustom' -too, for instance: - -(defcustom foo-hairy-alist '((somekey . "somestring") - (otherkey . (foo-doit)) - (thirdkey . [1 2 3])) -"*Alist describing the hairy options of the foo package. -The CAR of each element is a symbol, whereas the CDR can be either a -string, a form to evaluate, or a vector of integers. -New Emacs users simply adore alists like this one." - :type '(repeat (cons (symbol :tag "Key") - (choice string - (vector (repeat :inline t integer)) - sexp))) - :group 'foo) - -The user will be able to add and remove the entries to the list in a -visually appealing way, as well as save the settings to his/her -`.emacs'. - -Note that `defcustom' will also be included in GNU Emacs 19.35, and -that both XEmacs and GNU Emacs will be using it in the future. -Although the user-interface of customize may change, the Lisp -interface will remain the same. This is why we recommend that you use -`defcustom' for user-settable variables in your new Lisp packages. - -** The `read-kbd-macro' function is now available. - -The `read-kbd-macro' function (as well as the read-time evaluated -`kbd' macro) from the edmacro package is now available in XEmacs. For -example: - -(define-key foo-mode-map (kbd "C-c <up>") 'foo-up) - -is completely equivalent to - -(define-key foo-mode-map [(control ?c) up] 'foo-up) - -The `kbd' macro is preferred over `read-kbd-macro' function , as it -evaluates before compiling, thus having no loading overhead. - -Using `kbd' is not necessary for GNU Emacs compatibility (GNU Emacs -supports the XEmacs-style keysyms), but adds to clarity. For example, -(kbd "C-?") is usually easier to read than [(control ??)]. The full -description of the syntax of keybindings accepted by `read-kbd-macro' -is documented in the docstring of `edmacro-mode'. - -** Overlay compatibility is implemented. - -The overlay support in XEmacs is now functional. Written by Joe -Nuspl, the overlay compatibility library overlay.el is implemented on -top of the native XEmacs extents, and can be used as a GNU -Emacs-compatible way of changing display properties. - -** You should use keysyms kp-* (kp-1, kp-2, ..., kp-enter etc.) -rather than the old form kp_*. The new form is also compatible with -GNU Emacs. - -** The keysyms mouse-1, mouse-2, mouse-3 and down-mouse-1, -down-mouse-2, and down-mouse-3 have been added for GNU Emacs -compatibility. - -** A new user variable `signal-error-on-buffer-boundary' has been -added. - -Set this to variable to nil to avoid XEmacs usual lossage of zmacs -region when moving up against a buffer boundary. - -** lib-complete.el was MULE-ized. - -The commands `find-library', `find-library-other-window' and -`find-library-other-frame' now take an optional coding system -argument. - -** Experimental support for Lisp reader macros #-, #+. - -The Common Lisp reader macros for feature test are now supported. This -feature is present for evaluation purposes and is subject to change. - -** `values' now has a setf method - -** The `eval-after-load' and `eval-next-after-load' functions are -now available. - -** A bug that prevented `current-display-table' to be correctly set -with `set-specifier' has been fixed. - -** The bug in easymenu which prevented multiple menus from being -accessible through button3 has been fixed. - -You can now safely use easymenu to define multiple menu entries in a -compatible way, with the added menus accessible via button3 as local -submenus. - -** Many bugs in the scrollbar code have been fixed. - -** First alpha level support of MS Windows NT is available, courtesy -of David Hobley and Marc Paquette. - -** Wnn/egg now has initial support Courtesy of Jareth Hein. - -** Some old non-working code has been removed until someone chooses -to work on it. - -This includes much of the NeXTStep stuff. The VMS support is also -likely to be removed in the future. - -** Many files have been purged out of the etc/ directory. - -If you still need the purged files, look for them in the GNU Emacs -distribution. - - -* Major Differences Between 19.14 and 20.0 -=========================================== - -XEmacs 20.0 is the first public release to have support for MULE -(Multi-Lingual Emacs). The --with-mule configuration flag must be -used to enable Mule support. - -Many bugs have been fixed. An effort has been made to eradicate all -XEmacs crashes, although we are not quite done yet. The overall -quality of XEmacs should be higher than any previous release. XEmacs -now compiles with nary a warning with some compilers. - --- Multiple character sets can be displayed in a buffer. The file - mule-doc/demo in the distribution contains a greeting in many - different languages. - --- Although the Mule work is for all languages, particular effort has - been invested in Japanese, with particular focus on Japanese users - of Sun WorkShop. Many menubar labels have been translated into - Japanese. Martin Buchholz, the maintainer of MULE features within - XEmacs normally runs XEmacs in a Japanese language environment. - Some of the other contributors are Japanese, most importantly - Morioka Tomohiko, author of the TM package, providing MIME support - for Mail and News. - --- Input for complex Asian languages is supported via XIM, a mechanism - introduced in X11R5 to allow applications to get localized input - without knowledge of the language. The way XIM works is that when - the locale has a complex character set, such as Japanese, and extra - minibuffer-like status window appears attached to various - application windows, and indicates the status of the input method. - Composed input in XEmacs should work the same as with other - applications. If Motif and Mule support is configured into XEmacs, - then XIM support is automatically configured in as well. - --- TM (Tools for Mime) now comes with XEmacs. This provides MIME - (Multipurpose Internet Mail Extensions) support for Mail and News. - The primary author is Morioka Tomohiko. - --- Japanese input can also be input using the `canna' input method. - This support was contributed by Morioka Tomohiko. Setting up canna - usually requires more user effort (and better knowledge of Japanese!) - than XIM, but provides a better-integrated input method. - --- A mini-tutorial on using Mule: - - -- Every time data passes between XEmacs and the rest of the - environment, via file or process input or output, XEmacs must - convert between its internal multi-character representation and - the external representation (`coding system'). Many - difficulties with Mule are related to controlling these coding - system conversions. - - -- file-coding-system, file-coding-system-for-read, - overriding-file-coding-system, and file-coding-system-alist - are used to determine the coding systems used on file input - and output. - - -- For each process, (set-process-input-coding-system) and - (set-process-output-coding-system) determine the coding - system used for I/O from the process. - - -- Many other things are encoded using pathname-coding-system: - -- file and directory names - -- window manager properties: window title, icon name - -- process names and process arguments - -- XIM input. - - -- In many cases, you will want to have the same values for all - the above variables in many cases. For example, in a - Japanese environment, you will want to use the 'euc-japan - coding system consistently, except when running certain - processes that do byte-oriented, rather than - character-oriented I/O, such as gzip, or when processing Mail - or News, where ISO2022-based coding systems are the norm, - since they support multiple character sets. - - -- To add support for a new language or character set, start by - trying to copy code in japanese-hooks.el. - - -- The traditional pre-Mule data conversion is equivalent to the - 'binary coding system under Mule. In this case all characters - are treated as iso8859-1 (i.e. characters for English + Western - European languages). - - -- many fileio-related commands such as find-file and write-file - take an extra argument, coding-system, which specifies the - encoding to be used with the file on disk. For example, here is - a command that converts from the Japanese EUC to ISO2022 format: - - xemacs -batch -eval '(progn (find-file - "locale-start.el.euc" (quote euc-japan)) (write-file - "locale-start.el" nil (quote iso-2022-8-unix)))' - - Interactively, you can be prompted for a coding system by - providing a prefix argument to the fileio command. In - particular, C-u C-x C-f is a useful sequence to edit a file - using a particular coding system. - - -- In an Asian locale (i.e. if $LANG is set to ja, ko, or zh), - XEmacs automatically sets up a language environment assuming - that the operating system encodes information in the national - version of EUC, which supports English and the national - language, but typically no other character sets. - --- Command line processing should work much better now - no more order - dependencies. - --- Many many package upgraded (thanks go to countless maintainers): - - -- ediff 2.64 (Michael Kifer) - -- Gnus 5.2.40 (Lars Magne Ingebrigtsen) - -- w3 3.0.51 (Bill Perry) - -- ilisp 5.8 (Chris McConnell, Ivan Vasquez, Marco Antoniotti, Rick - Campbell) - -- VM 5.97 (Kyle Jones) - -- etags 11.78 (Francesco Potorti`) - -- ksh-mode.el 2.9 - -- vhdl-mode.el 2.73 (Rod Whitby) - -- id-select.el (Bob Weiner) - -- EDT/TPU emulation modes should work now for the first time. - -- viper 2.92 (Michael Kifer) is now the `official' vi emulator for XEmacs. - -- big-menubar should work much better now. - -- mode-motion+.el 3.16 - -- backup-dir 2.0 (Greg Klanderman) - -- ps-print.el-3.05 (Jacques Duthen Prestataire) - -- lazy-lock-1.15 (Simon Marshall) - -- reporter 3.3 (Barry Warsaw) - -- hm--html-menus 5.0 (Heiko Muenkel) - -- cc-mode 4.322 (Barry Warsaw) - -- elp 2.37 (Barry Warsaw) - - --- Many new packages have been added: - -- m4-mode 1.8 (Andrew Csillag) - -- crisp.el - crisp/brief emulation (Gary D. Foster) - -- Johan Vroman's iso-acc.el has been ported to XEmacs by Alexandre Oliva - -- psgml-1.01 (Lennart Staflin, James Clark) - -- python-mode.el 2.83 (Barry Warsaw) - -- vrml-mode.el (Ben Wing) - -- enriched.el, face-menu.el (Boris Goldowsky, Michael Sperber) - -- sh-script.el (Daniel Pfeiffer) - -- decipher.el (Christopher J. Madsen) - --- New function x-keysym-on-keyboard-p helps determine keyboard - characteristics for key rebinding: - - x-keysym-on-keyboard-p: (KEYSYM &optional DEVICE) - -- a built-in function. - Return true if KEYSYM names a key on the keyboard of DEVICE. - More precisely, return true if pressing a physical key - on the keyboard of DEVICE without any modifier keys generates KEYSYM. - Valid keysyms are listed in the files /usr/include/X11/keysymdef.h and in - /usr/lib/X11/XKeysymDB, or whatever the equivalents are on your system. - --- Installed info files are now compressed (support courtesy of Joseph J Nuspl) - --- (load-average) works on Solaris, even if you're not root. Thanks to - Hrvoje Niksic. - --- OffiX drag-and-drop support added - --- lots of syncing with 19.34 elisp files, most by Steven Baur - - -** Major Differences Between 19.13 and 19.14 -============================================ - -XEmacs has a new address! The canonical ftp site is now -ftp.xemacs.org:/pub/xemacs and the Web page is now at -http://www.xemacs.org/. All mailing lists now have @xemacs.org -addresses. For the time being the @cs.uiuc.edu addresses will -continue to function. - -This is a major new release. Many features have been added, as well -as many bugs fixed. The Motif menubar has still _NOT_ been fixed for -19.14. You should use the Lucid menubar instead. - - - -Major user-visible changes: ---------------------------- - --- Color support in TTY mode is provided. You have to have a TTY capable - of displaying them, such as color xterm or the console under Linux. - If your terminal type supports colors (e.g. `xterm-color'), XEmacs - will automatically notice this and start using color. - --- blink-cursor-mode enables a blinking text cursor. There is a - menubar option for this also. - --- auto-show-mode is turned on by default; this means that XEmacs - will automatically scroll a window horizontally as necessary to - keep point in view. - --- a file dialog box is provided and will be used whenever you - are prompted for a filename as a result of a menubar selection. - --- XEmacs can be compiled with built-in GIF, JPEG, and PNG support. - The GIF libraries are supplied with XEmacs; for JPEG and PNG, - you have to obtain the appropriate libraries (this is well- - documented). This makes image display much easier and faster under - W3 (the web browser) and TM (adds MIME support to VM and GNUS; - not yet included with XEmacs but will be in 19.15). - --- XEmacs provides a really nice mode (PSGML with "Wing improvements") - for editing HTML and other SGML documents. It parses the document, - and as a result it does proper indentation, can show you the context - you're in, the allowed tags at a particular position, etc. - --- XEmacs comes standard with modes for editing Java and VRML code, - including font-lock support. - --- GNUS 5.2 comes standard with XEmacs. - --- You can now embed colors in the modeline, with different sections - of the modeline responding appropriately to various mouse gestures: - For example, clicking on the "read-only" indicator toggles the - read-only status of a buffer, and clicking on the buffer name - cycles to the next buffer. Pressing button3 on these areas brings - up a popup menu of appropriate commands. - --- There is a much nicer mode for completion lists and such. - At the minibuffer prompt, if you hit page-up or Meta-V, the completion - buffer will be displayed (if it wasn't already), you're moved into - it, and can move around and select filenames using the arrow keys - and the return key. Rather than a cursor, a filename is highlighted, - and the arrow keys change which filename is highlighted. - --- The edit-faces subsystem has also been much improved, in somewhat - similar ways to the completion list improvements. - --- Many improvements were made to the multi-device support. - We now provide an auxiliary utility called "gnuattach" that - lets you connect to an existing XEmacs process and display - a TTY frame on the current TTY connection, and commands - `make-frame-on-display' (with a corresponding menubar entry) - and `make-frame-on-tty' for more easily creating frames on - new TTY or X connections. - --- We have incorporated nearly all of the functionality of GNU Emacs - 19.30 into XEmacs. This includes support for lazy-loaded - byte code and documentation strings, improved paragraph filling, - better support for margins within documents, v19 regular expression - routines (including caching of compiled regexps), etc. - --- In accordance with GNU Emacs 19.30, the following key binding - changes have been made: - - C-x ESC -> C-x ESC ESC - ESC ESC -> ESC : - ESC ESC ESC is "abort anything" (keyboard-escape-quit). - --- All major packages have been updated to their latest-released - versions. - --- XEmacs now gracefully handles a full colormap (such as typically - results when running Netscape). The nearest available color - is automatically substituted. - --- Many bug fixes to the subprocess/PTY code, ps-print, menubar - functions, `set-text-properties', DEC Alpha support, toolbar - resizing (the "phantom VM toolbar" bug), and lots and lots - of other things were made. - --- The ncurses library (a replacement for curses, found especially - under Linux) is supported, and will be automatically used - if it can be found. - --- You can now undo in the minibuffer. - --- Surrogate minibuffers now work. These are also sometimes referred - to as "global" minibuffers. - --- font-lock has been merged with GNU Emacs 19.30, improved defaults - have been added, and changes have been made to the way it is - configured. - --- Many, many modes have menubar entries for them. - --- `recover-session' lets you recover whatever files can be recovered - after your XEmacs process has died unexpectedly. - --- C-h k followed by a toolbar button press correctly reports - the binding of the toolbar button. - --- `function-key-map', `key-translation-map', and `keyboard-translate-table' - are now correctly implemented. - --- `show-message-log' (and its menubar entry under Edit) have been - removed; instead use `view-lossage' (and its menubar entry under - Help). - --- There is a standard menubar entry for specifying which browser - (Netscape, W3, Mosaic, etc.) to use when dispatching URL's - in mail, Usenet news, etc. - --- Improved native sound support under Linux. - --- Lots of other things we forgot to mention. - - - -Significant Lisp-level changes: -------------------------------- - --- Many improvements to the E-Lisp documentation have been made; - it should now be up-to-date and complete in nearly all cases. - --- XEmacs has extensive documentation on its internals, for - would-be C hackers. - --- Common-Lisp support (the CL package) is now dumped standard - into XEmacs. No more need for (require 'cl) or anything - like that. - --- Full support for extents and text properties over strings is - provided. - --- The extent properties `start-open', `end-open', `start-closed', - and `end-closed' now work correctly w.r.t. text properties. - --- The `face' property of extents and text properties can now - be a list. - --- The `mouse-face' property from GNU Emacs is now supported. - It supersedes the `highlight' property. - --- `enriched' and `facemenu' packages from GNU Emacs have been ported. - --- New functions for easier creation of dialog boxes: - `get-dialog-box-response', `message-box', and `message-or-box'. - --- `function-min-args' and `function-max-args' allow you to determine - the minimum and maximum allowed arguments for any type of - function (i.e. subr, lambda expression, byte-compiled function, etc.). - --- Some C-level support for doing E-Lisp profiling is provided. - See `start-profiling', `stop-profiling', and - `pretty-print-profiling-info'. - --- `current-process-time' reports the user, system, and real times - for the currently running XEmacs process. - --- `next-window', `previous-window', `next-frame', `previous-frame', - `other-window', `get-lru-window', etc. have an extra device - argument that allows you to restrict which devices it includes - (normally all devices). Some functions that incorrectly ignored - frames on different devices (e.g. C-x 0) are fixed. - --- new functions `run-hook-with-args-until-success', - `run-hook-with-args-until-failure'. - --- generalized facility for local vs. global hooks. See `make-local-hook', - `add-hook'. - --- New functions for querying the window tree: `frame-leftmost-window', - `frame-rightmost-window', `window-first-hchild', `window-first-vchild', - `window-next-child', `window-previous-child', and `window-parent'. - --- Epoch support works. This gets you direct access to some X events - and objects (e.g. properties and property-notify events). - --- The multi-device support has been majorly revamped. There is now - a new concept of "consoles" (devices grouped together under a - common keyboard/mouse), console-local variables, and a generalized - concept of device/console connection. - --- `display-buffer' synched with GNU Emacs 19.30, giving you lots of - wondrous cruft such as - -- unsplittable frames - -- pop-up-frames, pop-up-frame-function - -- special-display-buffer-names, special-display-regexps, - special-display-function - -- same-window-buffer-names, same-window-regexps - --- XEmacs has support for accessing DBM- and/or DB-format databases, - provided that you have the appropriate libraries on your system. - --- There is a new font style: "strikethru" fonts. - --- New data type "weak list", which is a list with special - garbage-collection properties, similar to weak hash tables. - --- `set-face-parent' makes one face inherit all properties from another. - --- The junky frame parameters mechanism has been revamped as - frame properties, which a standard property-list interface. - --- Lots and lots of functions for working with property lists have - been added. - --- New functions `push-window-configuration', `pop-window-configuration', - `unpop-window-configuration' for maintain a stack of window - configurations. - --- Many fixups to the glyph code; icons and mouse pointers are now - properly merged into the glyph mechanism. - --- `set-specifier' works more sensibly, like `set-face-property'. - --- Many new specifiers for individually controlling toolbar height/width - and visibility and text cursor visibility. - --- New face `text-cursor' controls the colors of the text cursor. - --- Many new variables for turning on debug information about the - inner workings of XEmacs. - --- Hash tables can now compare their keys using `equal' or `eql' - as well as `eq'. - --- Other things too numerous to mention. - - - -Significant configuration/build changes: ----------------------------------------- - --- You can disable TTY support, toolbar support, scrollbar support, - menubar support, and/or dialog box support at configure time - to save memory. - --- New configure option `--extra-verbose' shows the diagnostic - output from feature testing; this should help track down - problems with incorrect feature detection. - --- `dont-have-xmu' is now `with-xmu', with the reversed sense. - (It defaults to `yes'.) - --- `with-mocklisp' lets you add Mocklisp support if you really - need this. - --- `with-term' for adding TERM support for Linux users. - - - -** Major Differences Between 19.12 and 19.13 -============================================ - -This is primarily a bug-fix release. Lots of bugs have been fixed. -Hopefully only a few have been introduced. The most noteworthy bug -fixes are: - - -- There should be no more problems connecting XEmacs to an X - server over SLIP or other slow connections. - -- Periodic crashes when using the Buffers menu should be gone. - -- etags would sometimes erase the current buffer; it doesn't - any more. - -- XEmacs will correctly exit if the X server dies. - -- uniconified frames are displayed properly under TVTWM. - -- Breakage in `add-menu-item' / `add-menu-button' is fixed. - -The Motif menubar has _NOT_ been fixed for 19.13. You should use the -Lucid menubar instead. - -Multi-device support should now be working properly. You can now open -an X device after having started out on a TTY device. - -Background pixmaps now work. See `set-face-background-pixmap'. - -Echo area messages are now saved to a buffer, " *Message Log*". To -see this buffer, use the command `show-message-log'. It is possible -to filter the message which are actually included by modifying the -variables `log-message-ignore-regexps' and `log-message-ignore-labels'. - -You can now control which warnings you want to see. See -`display-warning-suppressed-classes' and friends. - -You can now set the default location of an "other window" from the -Options menu. - -"Save Options" now saves the state of all faces. - -You can choose which file "Save Options" writes into; see -`save-options-file'. - -XPM support is no longer required for the toolbar. - -The relocating allocator is now enabled by default whenever possible. -This allows buffer memory to be returned to the system when no longer -in use which helps keep XEmacs process size down. - -The ability to have captioned toolbars has been added. Currently only -the default toolbar actually has a captioned version provided. A new -specifier variable, `toolbar-buttons-captioned-p' controls whether the -toolbar is captioned. - -A copy of the XEmacs FAQ is now included and is available through info. - -The on-line E-Lisp reference manual has been significantly updated. - -There is now audio support under Linux. - -Modifier keys can now be sticky. This is controlled by the variable -`modifier-keys-are-sticky'. - -manual-entry should now work correctly under Irix with the penalty of -a longer startup time the first time it is invoked. If you are having -problems with this on another system try setting -`Manual-use-subdirectory-list' to t. - -make-tty-device no longer automatically creates the first frame. - -Rectangular regions now work correctly. - -ediff no longer sets synchronize-minibuffers to t unless you first set -ediff-synchronize-minibuffers - -keyboard-translate-table has been implemented. This means that the -`enable-flow-control' command for dealing with TTY connections that -filter out ^S and ^Q now works. - -You can now create frames that are initially unmapped and frames that -are "transient for another frame", meaning that they behave more like -dialog-box frames. - -Other E-Lisp changes: - --- Specifier `menubar-visible-p' for controlling menubar visibility --- Local command hooks should be set using `local-pre-command-hook' - and `local-post-command-hook' instead of making the global - equivalents be buffer-local. --- `quit-char', `help-char', `meta-prefix-char' can be any key specifier - instead of just an integer. --- new functions `add-async-timeout' and `disable-async-timeout'. - These let you create asynchronous timeouts, which are like - normal timeouts except that they're executed even during - running Lisp code. Use this with care! --- `debug-on-error' and `stack-trace-on-error' now enter the debugger - only when an *unhandled* error occurs. If you want the old - behavior, use `debug-on-signal' and `stack-trace-on-signal'. --- \U, \L, \u, \l, \E recognized specially in `replace-match'. - These are standard ex/perl commands for changing the case of - replaced text. --- New function event-matches-key-specifier-p. This provides - a clean way of comparing keypress events with key specifiers - such as 65, (shift home), etc. without having to resort - to ugly `character-to-event' / `event-to-character' hacks. --- New function `add-to-list' --- New Common-Lisp functions `some', `every', `notevery', `notany', - `adjoin', `union', `intersection', `set-difference', - `set-exclusive-or', `subsetp' --- `remove-face-property' provides a clean way of removing a - face property. - -Many of the Emacs Lisp packages have been updated. Some of the new -Emacs Lisp packages --- - -ada-mode: major mode for editing Ada source - -arc-mode: simple editing of archives - -auto-show-mode: automatically scrolls horizontally to keep point on-screen - -completion: dynamic word completion mode - -dabbrev: the dynamic abbrev package has been rewritten and is much - more powerful -- e.g. it searches in other buffers as well - as the current one - -easymenu: menu support package - -live-icon: makes frame icons represent the current frame contents - -mailcrypt 3.2: mail encryption with PGP; included but v2.4 is still - the default - -two-column: for editing two-column text - - -** Major Differences Between 19.11 and 19.12 -============================================ - -This is a huge new release. Almost every aspect of XEmacs has been changed -at least somewhat. The highlights are: - --- TTY support (includes face support) --- new redisplay engine; should be faster, less buggy, and more powerful --- terminology change from "screen" to "frame" --- built-in toolbar --- toolbar support added to many packages --- multiple device support (still in beta; improvements to come in - 19.13) --- Purify used to ensure that there are no memory leaks or memory corruption - problems --- horizontal and vertical scrollbars in all windows --- new Lucid (i.e. look-alike Motif) scrollbar widget --- stay-up menus in the Lucid (look-alike Motif) menubar widget --- 3-d modeline --- new extents engine; should be faster, less buggy, and more powerful --- much more powerful control over faces --- expanded menubar --- more work on synching with GNU Emacs 19.28 --- new packages: Hyperbole, OOBR (object browser), hm--html-menus, viper, - lazy-lock.el, ksh-mode.el, rsz-minibuf.el --- package updates for all major packages --- dynodump package for Solaris: provides proper undumping and portable - binaries across different OS versions and machine types --- Greatly expanded concept of "glyphs" (pixmaps etc. in a buffer) --- built-in support for displaying X-Faces, if the X-Face library is - available --- built-in support for SOCKS if the SOCKS library is available --- graceful behavior when the colormap is full (e.g. Netscape ate - all the colors) --- built-in MD5 (secure hashing function) support - - -More specific information: - -*** TTY Support ---------------- - -The long-awaited TTY support is now available. XEmacs will start up -in TTY mode (using the tty you started XEmacs from) if the DISPLAY -environment variable is not set or if you use the `-nw' option. - -Faces are available on TTY's. For a demonstration, try editing a C -file and turning on font-lock-mode. - -You can also connect to additional TTY's using `make-tty-device', -whether your first frame was a TTY or an X window. This ability is -not yet completely finished. - -The full event-loop capabilities (processes, timeouts, etc.) are -available on TTY's. - - - -*** New Redisplay Engine ------------------------- - -The redisplay engine has been rewritten to improve its efficiency and -to increase its functionality. It should also be significantly more -bug-free than the previous redisplay engine. - -A line that is not big enough to display at the bottom of the window -will normally be clipped (so that it is partially visible) rather than -not displayed at all. The variable `pixel-vertical-clip-threshold' -can be used to control the minimum space that must be available for a -line to be clipped rather than not displayed at all. - -Tabs are displayed in such a way that things line up fairly well even -in the presence of variable-width fonts and/or lines with -multiply-sized fonts. - -Display tables are implemented, through the specifier variable -`current-display-table'. They can be buffer-local, window-local, -frame-local, or device-local. See below for info about specifiers. - - - -*** Toolbar ------------ - -There is now built-in support for a toolbar. A sample toolbar is -visible by default at the top of the frame. Four separate toolbars -can be configured (at the top, bottom, left, and right of the frame). -The toolbar specification is similar to the menubar specification. -The up, down, and disabled glyphs of a toolbar button can be -separately controlled. Explanatory text can be echoed in the echo -area when the mouse passes over a toolbar button. The size, contents, -and visibility of the various toolbars can be controlled on a -per-buffer, per-window, per-frame, and per-device basis through the -use of specifiers. See the chapter on toolbars in the Lisp Reference -Manual (included with XEmacs) for more information. - -The toolbar color and shadow thicknesses are currently controlled only -through `modify-frame-parameters' and through X resources. We are -planning on making these controllable through specifiers as well. (Our -hope is to make `modify-frame-parameters' obsolete, as it is a clunky -and not very powerful mechanism.) - -Info, GNUS, VM, W3, and various other packages include custom toolbars -with them. - - - -*** Menubar ------------ - -Stay-up menus are implemented in the look-alike Motif menubar. - -The default menubar has been expanded to include most commonly-used -functions in XEmacs. - -The options menu has been greatly expanded to include many more -options. - -The menubar specification format has been greatly expanded. Per-menu -activation hooks can be specified through the :filter keyword (thus -obsoleting `activate-menubar-hook'); this allows for fast response -time when you have a large and complex menu. You can dynamically -control whether menu items are present through the :included and -:config keywords. (The latter keyword implements a simple menubar -configuration scheme, in conjunction with the variable -`menubar-configuration'.) Many different menu-item separators (single -or double line; solid or dashed; flat, etched-in, or etched-out) are -available. See the chapter on menus in the Lisp Reference Manual for -more information about all of this. - -New functions `add-submenu' and `add-menu-button' are available. -These supersede the older `add-menu' and `add-menu-item' functions, -and provide a more powerful and consistent interface. - -New convenience functions for popping up the part or all of the -menubar in a pop-up menu are available: `popup-menubar-menu' and -`popup-buffer-menu'. - -Menus are now incrementally constructed greatly improving menubar -response time. - - - -*** Scrollbars --------------- - -A look-alike Motif scrollbar is now included with XEmacs. No longer -will you have to suffer with ugly Athena scrollbars. - -Windows can now have horizontal scrollbars. Normally they are visible -when the window's buffer is set to truncate lines rather than wrap -them (e.g. `(setq truncate-lines t)'). - -All windows, not only the right-most ones, can have vertical -scrollbars. - -The functions to change a scrollbar's width have been superseded by -the specifier variables `scrollbar-width' and `scrollbar-height'. -This allows their values to be controlled on a buffer-local, -window-local, frame-local, and device-local basis. See below. - -The scrollbars interact better with the event loop (for example, you -can type `C-h k', do a scrollbar action, and see a description of this -scrollbar action printed as if you had pressed a key sequence or -selected a menu item). - -The scrollbar behavior can be reprogrammed, by advising the -`scrollbar-*' functions. - - - -*** Key Bindings ----------------- - -The oft-used function `goto-line' now has its own binding: M-g. - -New bindings are available for scrolling the "other" window: M-next, -M-prior, M-home, M-end. (On many keyboards, `next' and `prior' -labelled `PgUp' and `PgDn'.) - -You can reactivate a deactivated Zmacs region, without having any -other effects, with the binding M-C-z. - -The bindings `M-u', `M-l', and `M-c' now work on the region (if a -region is active) or work on a word, as before. - -Shift-Control-G forces a "critical quit", which drops immediately into -the debugger; see below. - - - -*** Modeline ------------- - -The modeline can now have a 3-d look; this is enabled by default. The -specifier variable `modeline-shadow-thickness' controls the size. - -The modeline can now be turned off on a per-buffer, per-window, -per-frame, or per-device basis. The specifier variable -`has-modeline-p' controls whether the modeline is visible. See below -for details about the vastly powerful specifier mechanism. - -The modeline functions and variables have been renamed to be -`*-modeline-*' rather than `*-mode-line-*'. Aliases are provided for -all the old names. - -Variable width fonts now work correctly when used in the modeline. - - - -*** Minibuffer, Echo Area -------------------------- - -The minibuffer is no longer constrained to be one line high. The -package rsz-minibuf.el is included to automatically resize the -minibuffer when its contents are too big; enable this with -`resize-minibuffer-mode'. - -The echo area is now a true buffer, called " *Echo Area*". This -allows you to customize the echo area behavior through -before-change-functions and after-change-functions. - - - -*** Specifiers --------------- - -XEmacs has a new concept called "specifiers", used to configure most -display options (toolbar size and contents, scrollbar size, face -properties, modeline visibility and shadow-thickness, glyphs, display -tables, etc.). We are planning on converting all display -characteristics to use specifiers, and obsoleting the clunky functions -`frame-parameters' and `modify-frame-parameters'. Specifically: - --- You can specify values (called "instantiators") for particular - "locales" (i.e. buffers, windows, frames, devices, or a global value). - When determining what the actual value (or "instance") of a specifier - is, the specifications that are provided are searched from most - specific (i.e. buffer-local) to most general (i.e. global), looking - for a matching one. - --- You can specify multiple instantiators for a particular locale. - For example, when specifying what the foreground color of a face - is in a particular buffer, you could specify two instantiators: - "dark sea green" and "green". The color would then be dark sea - green on devices that recognize that color, and green on other - devices. You have effectively provided a fallback value to make - sure you get reasonable behavior on all devices. - --- You can add one or more tags to an instantiator, where a tag - is a symbol that has been previously registered with XEmacs. - This allows you to identify your instantiators for later - removal in a way that won't interfere with other applications - using the same specifier. Furthermore, particular tags can - be restricted to match only particular sorts of devices. - Any tagged instantiator will be ignored if the device over which - it is being instanced does not match any of its tags. This - allows you, for example, to restrict an instantiator to a - particular device type (X or TTY) and/or class (color, grayscale, - or mono). (You might want to specify, for example, that a - particular face is displayed in green on color devices and is - underlined on mono devices.) - --- A full API is provided for manipulating specifiers, and full - documentation is provided in the Lisp Reference Manual. - - - -*** Basic Lisp Stuff --------------------- - -Common-Lisp backquote syntax is recognized. For example, the old -expression - -(` (a b (, c))) - -can now be written - -`(a b ,c) - -The old backquote syntax is still accepted. - -The new function `type-of' returns a symbol describing the type of a -Lisp object (`integer', `string', `symbol', etc.) - -Symbols beginning with a colon (called "keywords") are treated -specially in that they are automatically made self-evaluating when -they are interned into `obarray'. The new function `keywordp' returns -whether a symbol begins with a colon. - -`get', `put', and `remprop' have been generalized to allow you to set -and retrieve properties on many different kinds of objects: symbols, -strings, faces, glyphs, and extents (for extents, however, this is not -yet implemented). They are joined by a new function `object-props' -that returns all of the properties that have been set on an object. - -New functions `plists-eq' and `plists-equal' are provided for -comparing property lists (a property list is an alternating list -of keys and values). - -The Common-Lisp functions `caar', `cadr', `cdar', `cddr', `caaar', etc. -(up to four a's and/or d's), `first', `second', `third', etc. (up to -`tenth'), `last', `rest', and `endp' have been added, for more -convenient manipulation of lists. - -New function `mapvector' maps over a sequence and returns a vector -of the results, analogous to `mapcar'. - -New functions `rassoc', `remassoc', `remassq', `remrassoc', and -`remrassq' are provided for working with alists. - -New functions `defvaralias', `variable-alias' and `indirect-variable' -are provided for creating variable aliases. - -Strings have a modified-tick that is bumped every time a string -is modified in-place with `aset' or `fillarray'. This is retrieved -with the new function `string-modified-tick'. - -New macro `push' destructively adds an element to the beginning of a -list. New macro `pop' destructively removes and returns the first -element of a list. - - - -*** Buffers ------------ - -Most functions that operate on buffer text now take an optional BUFFER -argument, specifying which buffer they operate on. (Previously, they -always operated on the current buffer.) - -The new function `transpose-regions' is provided, ported from GNU -Emacs. - -The new function `save-current-buffer' works like `save-excursion' -but only saves the current buffer, not the location of point in -that buffer. - - - -*** Devices ------------ - -XEmacs has a new concept of "device", which is represents a particular -X display or TTY connection. `make-frame' has a new, optional device -parameter that allows you to specify which device the frame is to be -created on. - -Multiple simultaneous TTY and/or X connections may be made. The -specifier mechanism provides reasonable behavior of glyphs, faces, -etc. over heterogeneous device types and over devices whose individual -capabilities may vary. - -There is also a device type called "stream" that represents a STDIO -device that has no redisplay or cursor-motion capabilities, such as -the "glass terminal" that XEmacs uses when it is run noninteractively. -There is not all that much you can do with stream devices currently; -please let us know if there are good uses you can think of for this -capability. (For example, log files?) - -A new device API is provided. Functions are provided such as -`device-name' (the name of the device, which generally is based on the -X display or TTY file name), `device-type' (X, TTY, or stream), -`device-class' (color, grayscale, or mono), etc. See the Lisp -Reference Manual. - -Many functions have been extended to contain an additional, optional -device argument, where such an extension makes sense. In general, if -the argument is omitted, it is equivalent to specifying -`(selected-device)'. - -Many previous functions and variables are obsoleted in favor of the -device API. For example, `window-system' is obsoleted by -`device-type', and `x-color-display-p' and friends are obsoleted by -`device-class'. - -** NOTE **: The obsolete variable `window-system' is going -to be deleted soon, probably in 19.14. Please correct all -your code to use `device-type'. - -** INCOMPATIBLE CHANGE **: The function `x-display-visual-class' -returns different values from previous versions of XEmacs. - - - -*** Errors, Warnings, C-g -------------------------- - -There is a new warnings system implemented. Many warnings that were -formerly displayed in various ad-hoc ways (e.g. warnings about screwy -modifier mappings, messages about failures handling the mouse cursor -and errors in a gc-hook) have been regularized through this system. -The new function `warn' displays a warning before the next redisplay -(the actually display of the warning messages is accomplished through -`display-warning-buffer'). Both `warn' and `display-warning-buffer' -are Lisp functions (the C code calls out to them as necessary), and -thus you can customize the warning system. - -Under an X display, you can press Shift-Control-G to force a "critical -quit". This will immediately display a backtrace and pop you into the -debugger, regardless of the settings of `inhibit-quit' and -`debug-on-quit'. - -C-g now works properly even on systems that don't implement SIGIO or -for which SIGIO is broken (e.g. IRIX 5.3 and older versions of Linux). -In addition, the SIGIO support has been fixed for many systems on -which it didn't always work properly before (e.g. HPUX and Solaris). - - - -*** Events ----------- - -** INCOMPATIBLE CHANGE **: Many event functions have been changed to -accept and return windows instead of frames. - -New function: `event-live-p', specifying whether `deallocate-event' -has been called on an event. - -The "menu event" type has been renamed to "misc-user event", and -encompasses scrollbar events as well as menu events. We are planning -on making it also encompass toolbar events in a future release. - -New functions are provided for determining whether an particular -sections of a frame: `event-over-border-p', `event-over-glyph-p', -`event-over-modeline-p', `event-over-text-area-p', and -`event-over-toolbar-p'. The old, kludgey methods of checking the -window-height, the internal-border-width, etc. are unreliable and -should not be used. - -New functions `event-window-x-pixel' and `event-window-y-pixel' are -provided for determining where in a particular window an event -happened. - -New functions `event-glyph-x-pixel' and `event-glyph-y-pixel' are -provided for determining where in a particular glyph an event -happened. - -New function `event-closest-point', which returns the closest buffer -position to the event even if the event did not occur over any text. - -New variable `unread-command-events', superseding the older -`unread-command-event'. - -Many event-loop bugs have been fixed. - - - -*** Extents ------------ - -The extent code has been largely rewritten. It should be faster and -more reliable. - -The text-property implementation has been greatly improved. - -Some new extent primitives are provided to return the position of the -next or previous property change in a buffer. - -Extents can now have a parent specified; then all of its properties -(except for the buffer it's in and its position in that buffer) come -from that extent. Hierarchies of such extents can be created. - -Extents now have a `detachable' property that controls what happens -(they either get detached or shrink down to zero-length) when their -text is deleted. Previously, such extents would always be detached. - -The `invisible' property on extents now works. - -`map-extents' has three additional parameters that provide more -control over which extents are mapped. - -`map-extents' deals better with changes made to extents in the -buffer being mapped over. - -A new function `mapcar-extents' (an alternative to `map-extents') has -been provided and should be easier to use than `map-extents'. - - - -*** Faces ---------- - -Faces can now be buffer-local, window-local, and device-local as well -as frame-local, and can be further restricted to a particular device -type or class. The way in which faces can be controlled is now based -on the general and powerful specifier mechanism; see above. - -The new function `set-face-property' generalizes `set-face-font', -`set-face-foreground', etc. and takes many new optional arguments, in -accordance with the new specifier mechanism. - -The new functions `face-property' and `face-property-instance' -generalize `face-font', `face-foreground', etc. and take many new -optional arguments, in accordance with the new specifier mechanism. -(`face-property' returns the value, if any, that was specified for a -particular locale, and `face-property-instance' returns the actual -value that will be used for display. See the section on specifiers.) - -The functions `face-font', `face-foreground', `face-background', -`set-face-font', `set-face-foreground', `set-face-background', -etc. are now convenience functions, trivially implemented using -`face-property' and `set-face-property' and take new optional -arguments in accordance with those functions. New convenience -functions `face-font-instance', `face-foreground-instance', -`face-background-instance', etc. are provided and are trivially -implemented using `face-property-instance'. - -Inheritance of face properties can now be specified. Each individual -face property can inherit differently from other properties, or not -inherit at all. - -You can set user-defined properties on faces using -`set-face-property'. - -You can create "temporary" faces, which are faces that disappear -when they are no longer in use. This is as opposed to normal -faces, which stay around forever. - -The function `make-face' takes a new optional argument specifying -whether a face should be permanent or temporary, and returns the -actual face object rather than the face symbol, as in previous -versions of XEmacs. - -The function `face-list' takes a new optional argument specifying -whether permanent, temporary, or both kinds of faces should be -returned. - -Faces have new TTY-specific properties: `highlight', `reverse', -`alternate', `blinking', and `dim'. - -Redisplay is smarter about dealing with face changes: changes to a -particular face no longer cause all frames to be cleared and -redisplayed. - -The Edit-Faces package is provided for interactively changing faces. -A menu item on the options menu is provided for this. - -New functions are provided for retrieving the ascent, descent, height, -and width of a character in a particular face. - - - -*** Fonts, Colors ------------------ - -** INCOMPATIBLE CHANGE **: The old "font" and "pixel" objects are gone. -In place are new objects "font specifier", "font instance", "color -specifier", and "color instance". Functions `font-name', `pixel-name' -(an obsolete alias for `color-name'), etc. are now convenience -functions for working with font and color specifiers. Old code that -is not too sophisticated about working with font and pixel objects may -still work, though. (For example, the idiom `(font-name (face-font -'default))' still works.) - -You can now extract the RGB components of a color-instance object -(similar to the old pixel object) with the function -`color-instance-rgb-components'. There is also a convenience function -`color-rgb-components' for working with color specifiers. - -If there are no more colors available in the colormap, the nearest -existing color will be used when allocating a new color. - - - -*** Frames ----------- - -What used to be called "screens" are now called "frames", for clarity -and consistency with GNU Emacs. Aliases are provided for all the old -screen functions and variables, to avoid introducing a huge E-Lisp -incompatibility. - -The frame code has been merged with GNU Emacs 19.28, providing -improved functionality for many functions. - - - -*** Glyphs, Images, and Pixmaps -------------------------------- - -Glyphs (used in various places, i.e. as begin-glyphs and end-glyphs -attached to extents and appearing in a buffer or in marginal -annotations; as the truncator and continuor glyphs marking line wrap -or truncation; as an overlay at the beginning of a line; as the -displayable element in a toolbar button; etc.) can now be -buffer-local, window-local, frame-local, and device-local, and can be -further restricted to a particular device type or class. The way in -which faces can be controlled is now based on the general and powerful -specifier mechanism; see above. - -** INCOMPATIBLE CHANGE **: The glyph and pixmap API has been completely -overhauled. A new Lisp object "glyph" is provided and should be used -where the old "pixmap" object would have been used. The pixmap object -exists no longer. There are also new Lisp objects "image specifier" -and "image instance" (an image-instance is the closest equivalent to -what a pixmap object was). More work on glyphs and images is slated -for 19.13. The glyph and image docs in the Lisp Reference Manual are -incomplete and will be finished in 19.13. - -The new function `set-glyph-property' allows setting of all the -glyph properties (`baseline', `contrib-p', etc.). Convenience -functions for particular properties are also provided, just like -for faces. - -You can set user-defined properties on glyphs using the new function -`set-glyph-property'. - -When displaying pixmaps, existing, closest-matching colors will be -used if the colormap is full. - -If the compface library is compiled into XEmacs, there is built-in -support for displaying X-Face bitmaps. (These are typically small -pictures of people's faces, included in a mail message through the -X-Face: header.) VM and highlight-headers will automatically use the -built-in X-Face support if it is available. - -Annotations in the right margin (as well as the left margin) are now -implemented. The left and right margin width functions have been -superseded by the specifier variables `left-margin-width' and -`right-margin-width', allowing much more flexible control through the -specifier mechanism. - -** INCOMPATIBLE CHANGE **: The variable `use-left-overflow', -for controlling annotations in the left margin, is now a specifier -variable instead of a buffer-local variable. (There is also a new -variable `use-right-overflow', that is complementary.) - - - -*** Hashing ------------ - -Two new types of weak hashtables can be created: key-weak and -value-weak. In a key-weak hashtable, an entry remains around -if its key is referenced elsewhere, regardless of whether this -is also the case for the value. Value-weak hashtables are -complementary. (This is as opposed to the traditional weak -hashtables, where an entry remains around only if both the -key and value are referenced elsewhere.) New functions -`make-key-weak-hashtable' and `make-value-weak-hashtable' -are provided for creating these hashtables. - -The new function `md5' is provided for performing an MD5 -hash of an object. MD5 is a secure message digest algorithm -developed by RSA, inc. - - - -*** Keymaps ------------ - -The GNU Emacs concept of `function-key-map' is now partially -implemented. This allows conversion of function-key escape sequences -such as `ESC [ 1 1 ~' into an equivalent human-readable keysym such as -`F1'. This work will be completed in 19.14. The function-key map is -device-local and controllable through the functions -`device-function-key-map' and `set-device-function-key-map'. - -`where-is-internal' now correctly searches minor-mode keymaps, -extent-local keymaps, etc. As a side effect of this, menu items will -now correctly show the keyboard equivalent for commands that are -available through a minor-mode keymap, extent-local keymap, etc. - -** INCOMPATIBLE CHANGE **: The modifier key "Symbol" has -been renamed to "Alt", for compatibility with the rest of the world. -Keep in mind that on many keyboards, the key labelled "Alt" actually -generates the "Meta" modifier. (On Sun keyboards, however, the key -labelled "Alt" does indeed generate the "Alt" modifier, and the key -labelled with a diamond generates the "Meta" modifier.) - - - -*** Mouse, Active Region ------------------------- - -The mouse internals in mouse.el have been rewritten. Hooks have been -provided for easier customization of mouse behavior. For example, you -can now easily specify an action to be invoked on single-click -(i.e. down-up without appreciable motion), double-click, drag-up, etc. - -Some code from GNU Emacs has been ported over, generalizing some of -the X-specific mouse stuff. - -** INCOMPATIBLE CHANGE **: The function `set-mouse-position' accepts -a window instead of a frame. - -New function `mouse-position' that obsoletes and is more powerful than -`read-mouse-position'. - -New functions `mouse-pixel-position' and `set-mouse-pixel-position' for -working with pixels instead of characters. - -The active (Zmacs) region is now highlighted using the `zmacs-region-face' -instead of the `primary-selection-face'; this generalizes what used -to be X-specific. - -New functions `region-active-p', `region-exists-p', and `activate-region' -provide a uniform API for dealing with the region irrespective of -whether the variable `zmacs-regions' is set. - -XEmacs is now a better X citizen with respect to the primary selection: -it does not stomp on the primary selection quite so much. This makes -things more manageable if you set `zmacs-regions' to nil. - - - -*** Processes -------------- - -Various process race conditions and bugs have been fixed. Problems -with process termination not getting noticed until much later (if at -all) should be gone now, as well as problems with zombie processes -under some systems. - -SOCKS support is now included. SOCKS is a package that allows hosts -behind a firewall to gain full access to the Internet without -requiring direct IP reachability. - - - -*** Windows ------------ - -Windows 95 is still not out yet. - -** INCOMPATIBLE CHANGE **: The functions `locate-window-from-coordinates' -and `window-edges' have been eliminated. It no longer makes sense to -work with windows in terms of character positions, because windows can -(and often do) have many differently-sized fonts in them, because the -3-D modeline is not exactly one line high, etc. - -The new functions `window-pixel-edges', `window-highest-p', -`window-lowest-p', `frame-highest-window', and `frame-lowest-window' -are provided as substitutes for the above-mentioned, deleted -functions. - -The function `window-end' now takes an optional GUARANTEE argument -that will ensure that the value is actually correct as of the next -redisplay. - -The window code has been merged with GNU Emacs 19.28, providing -improved functionality for many functions. - - - -*** System-Specific Information -------------------------------- - -Georg Nikodym's dynodump package is provided, for proper unexec()ing -on Solaris systems. Executables built on Solaris 2.3 can now run on -Solaris 2.4 without crashing; similarly with executables built on one -type of Sun machine and run on another. - -AIX 4.x is supported. - -The NeXTstep operating system is supported in TTY mode (this is still -in beta). There are plans to port XEmacs to the NeXTstep window -system, but it may be awhile before this is complete. - -Problems with the `round' function causing arithmetic errors on HPUX 9 -have been fixed. - -You can now build XEmacs as an ELF executable on Linux systems that -support ELF. - -Various other new system configurations are supported. - - - -*** Packages ------------- - -Most packages have been updated to the latest available versions. - - -Some of the new Emacs Lisp packages --- - -Hyperbole: the everyday information manager. Provides a Rolodex, - allows links to be embedded in text, etc. - -OOBR: a sophisticated class browser for object-oriented languages. - -viper: a better VI emulator that allows Emacs and VI features - to coexist happily. - -hm--html-menus: a sophisticated package for editing HTML code, - from Heiko Muenkel. - -ksh-mode.el: for editing shell scripts. - -lazy-lock.el: a lazy, on-the-fly fontifier. - -paren.el: an improved matching paren highlighter - - - -Major changes to existing packages -- - -VM: has a toolbar, many other nice features. - -w3: has a toolbar, many other nice features. - -ediff: provides three-way merging, has a better user interface. - -info: has a toolbar. - -highlight-headers.el: now highlights URL's and makes them active so - that when clicked either Netscape 1.1 is called - or Emacs W3 is run. - - -** Major Differences Between 19.10 and 19.11 -============================================ - -The name has changed from "Lucid Emacs" to "XEmacs". Along with this is a -new canonical ftp site: cs.uiuc.edu:/pub/xemacs. - -XEmacs now has its very own World Wide Web page! It contains a -complete list of the FTP distribution sites, the most recent FAQ, -pointers to Emacs Lisp packages not included with the distribution, and -other useful stuff. Check it out at http://xemacs.cs.uiuc.edu/. - -A preliminary New Users Guide. - -cc-mode.el now provides the default C, C++ and Objective-C modes. - -The primary goal of this release is stability. Very few new features have -been introduced but lots of bugs have been fixed. Many of the Emacs Lisp -packages have been updated. - -Some of the new Emacs Lisp packages --- - -tcl-mode.el: major mode for editing TCL code - -fast-lock.el: saves and restores font-lock highlighting, greatly - reducing the time necessary for loading a font-lock'ed - file - -ps-print.el: prints buffers to Postscript printers preserving the - buffer's bold and italic text attributes - -toolbar.el: provides a "fake" toolbar for use with XEmacs (an - integrated one will be included with 19.12) - - -** Major Differences Between 19.9 and 19.10 -=========================================== - -The GNU `configure' system is now used to build lemacs. - -The Emacs Manual and Emacs Lisp Reference Manual now document version 19.10. -If you notice any errors, please let us know. - -When pixmaps are displayed in a buffer, they contribute to the line height - -that is, if the glyph is taller than the rest of the text on the line, the -line will be as tall as necessary to display the glyph. - -In addition to using arbitrary sound files as emacs beeps, one can control -the pitch and duration of the standard X beep, on X servers which allow that -(Note: most don't.) - -There is support for playing sounds on systems with NetAudio servers. - -Minor modes may have mode-specific key bindings; keymaps may have an arbitrary -number of parent maps. - -Menus can have toggle and radio buttons in them. - -There is a font selection menu. - -Some default key bindings have changed to match FSF19; the new bindings are - - Screen-related commands: - C-x 5 2 make-screen - C-x 5 0 delete-screen - C-x 5 b switch-to-buffer-other-screen - C-x 5 f find-file-other-screen - C-x 5 C-f find-file-other-screen - C-x 5 m mail-other-screen - C-x 5 o other-screen - C-x 5 r find-file-read-only-other-screen - Abbrev-related commands: - C-x a l add-mode-abbrev - C-x a C-a add-mode-abbrev - C-x a g add-global-abbrev - C-x a + add-mode-abbrev - C-x a i g inverse-add-global-abbrev - C-x a i l inverse-add-mode-abbrev - C-x a - inverse-add-global-abbrev - C-x a e expand-abbrev - C-x a ' expand-abbrev - Register-related commands: - C-x r C-SPC point-to-register - C-x r SPC point-to-register - C-x r j jump-to-register - C-x r s copy-to-register - C-x r x copy-to-register - C-x r i insert-register - C-x r g insert-register - C-x r r copy-rectangle-to-register - C-x r c clear-rectangle - C-x r k kill-rectangle - C-x r y yank-rectangle - C-x r o open-rectangle - C-x r t string-rectangle - C-x r w window-configuration-to-register - Narrowing-related commands: - C-x n n narrow-to-region - C-x n w widen - Other changes: - C-x 3 split-window-horizontally (was undefined) - C-x - shrink-window-if-larger-than-buffer - C-x + balance-windows - -The variable allow-deletion-of-last-visible-screen has been removed, since -it was widely hated. You can now always delete the last visible screen if -there are other iconified screens in existence. - -ToolTalk support is provided. - -An Emacs screen can be placed within an "external client widget" managed -by another application. This allows an application to use an Emacs screen -as its text pane rather than the standard Text widget that is provided -with Motif or Athena. - -Additional compatibility with Epoch is provided (though this is not yet -complete.) - - -** Major Differences Between 19.8 and 19.9 -========================================== - -Scrollbars! If you have Motif, these are real Motif scrollbars; otherwise, -Athena scrollbars are used. They obey all the usual resources of their -respective toolkits. - -There is now an implementation of dialog boxes based on the Athena -widgets, as well as the existing Motif implementation. - -This release works with Motif 1.2 as well as 1.1. If you link with Motif, -you do not also need to link with Athena. - -If you compile lwlib with both USE_MOTIF and USE_LUCID defined (which is the -recommended configuration) then the Lucid menus will draw text using the Motif -string-drawing library, instead of the Xlib one. The reason for this is that -one can take advantage of the XmString facilities for including non-Latin1 -characters in resource specifications. However, this is a user-visible change -in that, in this configuration, the menubar will use the "*fontList" resource -in preference to the "*font" resource, if it is set. - -It's possible to make extents which are copied/pasted by kill and undo. -There is an implementation of FSF19-style text properties based on this. - -There is a new variable, minibuffer-max-depth, which is intended to circumvent -a common source of confusion among new Emacs users. Since, under a window -system, it's easy to jump out of the minibuffer (by doing M-x, then getting -distracted, and clicking elsewhere) many, many novice users have had the -problem of having multiple minibuffers build up, even to the point of -exhausting the lisp stack. So the default behavior is to disallow the -minibuffer to ever be reinvoked while active; if you attempt to do so, you -will be prompted about it. - -There is a new variable, teach-extended-commands-p, which if set, will cause -`M-x' to remind you of any key bindings of the command you just invoked the -"long way." - -There are menus in Dired, Tar, Comint, Compile, and Grep modes. - -There is a menu of window management commands on the right mouse button over -the modelines. - -Popup menus now have titles at the top; this is controlled by the new -variable `popup-menu-titles'. - -The `Find' key on Sun keyboards will search for the next (or previous) -occurrence of the selected text, as in OpenWindows programs. - -The `timer' package has been renamed to `itimer' to avoid a conflict with -a different package called `timer'. - -VM 5.40 is included. - -W3, the emacs interface to the World Wide Web, is included. - -Felix Lee's GNUS speedups have been installed, including his new version of -nntp.el which makes GNUS efficiently utilize the NNTP XOVER command if -available (which is much faster.) - -GNUS should also be much friendlier to new users: it starts up much faster, -and doesn't (necessarily) subscribe you to every single newsgroup. - -The byte-compiler issues a new class of warnings: variables which are -bound but not used. This is merely an advisory, and does not mean the -code is incorrect; you can disable these warnings in the usual way with -the `byte-compiler-options' macro. - -the `start-open' and `end-open' extent properties, for specifying whether -characters inserted exactly at a boundary of an extent should go into the -extent or out of it, now work correctly. - -The `extent-data' slot has been generalized/replaced with a property list, -so it's easier to attach arbitrary data to extent objects. - -The `event-modifiers' and `event-modifier-bits' functions work on motion -events as well as other mouse and keyboard events. - -Forms-mode uses fonts and read-only regions. - -The behavior of the -geometry command line option should be correct now. - -The `iconic' screen parameter works when passed to x-create-screen. - -The user's manual now documents Lucid Emacs 19.9. - -The relocating buffer allocator is turned on by default; this means that when -buffers are killed, their storage will be returned to the operating system, -and the size of the emacs process will shrink. - -CAVEAT: code which contains calls to certain `face' accessor functions will -need to be recompiled by version 19.9 before it will work. The functions -whose callers must be recompiled are: face-font, face-foreground, -face-background, face-background-pixmap, and face-underline-p. The symptom -of this problem is the error "Wrong type argument, arrayp, #<face ... >". -The .elc files generated by version 19.9 will work in 19.6 and 19.8, but -older .elc files which contain calls to these functions will not work in 19.9. - -Work In Progress: - - - We have been in the process of internationalizing Lucid Emacs. This code is - ***not*** ready for general use yet. However, the code is included (and - turned off by default) in this release. - - - If you define I18N2 at compile-time, then sorting/collation will be done - according to the locale returned by setlocale(). - - - If you define I18N3 at compile-time, then all messages printed by lemacs - will be filtered through the gettext() library routine, to enable the use - of locale-specific translation catalogues. The current implementation of - this is quite dependent on Solaris 2, and has a very large impact on - existing code, therefore we are going to be making major changes soon. - (You'll notice calls to `gettext' and `GETTEXT' scattered around much of - the lisp and C code; ignore it, this will be going away.) - - - If you define I18N4 at compile-time, then lemacs will internally use a - wide representation of characters, enabling the use of large character - sets such as Kanji. This code is very OS dependent: it requires X11R5, - and several OS-supplied library routines for reading and writing wide - characters (getwc(), putwc(), and a few others.) Performance is also a - problem. This code is also scheduled for a major overhaul, with the - intent of improving performance and portability. - - Our eventual goal is to merge with MULE, or at least provide the same base - level of functionality. If you would like to help out with this, let us - know. - - - Other work-in-progress includes Motif drag-and-drop support, ToolTalk - support, and support for embedding an Emacs widget inside another - application (where it can function as that other application's text-entry - area). This code has not been extensively tested, and may (or may not) - have portability problems, but it's there for the adventurous. Comments, - suggestions, bug reports, and especially fixes are welcome. But have no - expectations that this experimental code will work at all. - - -** Major Differences Between 19.6 and 19.8 -========================================== - -There were almost no differences between versions 19.6 and 19.7; version 19.7 -was a bug-fix release that was distributed with Energize 2.1. - -Lucid Emacs 19.8 represents the first stage of the Lucid Emacs/Epoch merger. -The redisplay engine now in lemacs is an improved descendant of the Epoch -redisplay. As a result, many bugs have been eliminated, and several disabled -features have been re-enabled. Notably: - -Selective display (and outline-mode) work. - -Horizontally split windows work. - -The height of a line is the height of the tallest font displayed on that line; -it is possible for a screen to display lines of differing heights. (Previously, -the height of all lines was the height of the tallest font loaded.) - -There is lisp code to scale fonts up and down, for example, to load the next- -taller version of a font. - -There is a new internal representation for lisp objects, giving emacs-lisp 28 -bit integers and a 28 bit address space, up from the previous maximum of 26. -We expect eventually to increase this to 30 bit integers and a 32 bit address -space, eliminating the need for DATA_SEG_BITS on some architectures. (On 64 -bit machines, add 32 to all of these numbers.) - -GC performance is improved. - -Various X objects (fonts, colors, cursors, pixmaps) are accessible as first- -class lisp objects, with finalization. - -An alternate interface to embedding images in the text is provided, called -"annotations." You may create an "annotation margin" which is whitespace at -the left side of the screen that contains only annotations, not buffer text. - -When using XPM files, one can specify the values of logical color names to be -used when loading the files. - -It is possible to resize windows by dragging their modelines up and down. More -generally, it is possible to add bindings for mouse gestures on the modelines. - -There is support for playing sound files on HP machines. - -ILISP version 5.5 is included. - -The Common Lisp #' read syntax is supported (#' is to "function" as ' is to -"quote".) - -The `active-p' slot of menu items is now evaluated, so one can put arbitrary -lisp code in a menu to decide whether that item should be selectable, rather -than doing this with an `activate-menubar-hook'. - -The X resource hierarchy has changed slightly, to be more consistent. It used -to be - argv[0] SCREEN-NAME pane screen - ApplicationShell EmacsShell Paned EmacsFrame - - now it is - - argv[0] shell pane SCREEN-NAME - ApplicationShell EmacsShell Paned EmacsFrame - -The Lucid Emacs sources have been largely merged with FSF version 19; this -means that the lisp library contains the most recent releases of various -packages, and many new features of FSF 19 have been incorporated. - -Because of this, the lemacs sources should also be substantially more portable. - - -** Major Differences Between 19.4 and 19.6 -========================================== - -There were almost no differences between versions 19.4 and 19.5; we fixed -a few minor bugs and repacked 19.4 as 19.5 for a CD-ROM that we gave away -as a trade show promotion. - -The primary goal of the 19.6 release is stability, rather than improved -functionality, so there aren't many user-visible changes. The most notable -changes are: - - - The -geometry command-line option now correctly overrides geometry - specifications in the resource database. - - The `width' and `height' screen-parameters work. - - Font-lock-mode considers the comment start and end characters to be - a part of the comment. - - The lhilit package has been removed. Use font-lock-mode instead. - - vm-isearch has been fixed to work with isearch-mode. - - new versions of ispell and calendar. - - sccs.el has menus. - -Lots of bugs were fixed, including the problem that lemacs occasionally -grabbed the keyboard focus. - -Also, as of Lucid Emacs 19.6 and Energize 2.0 (shipping now) it is possible -to compile the public release of Lucid Emacs with support for Energize; so -now Energize users will be able to build their own Energize-aware versions -of lemacs, and will be able to use newer versions of lemacs as they are -released to the net. (Of course, this is not behavior covered by your -Energize support contract; you do it at your own risk.) - -I have not incorporated all portability patches that I have been sent since -19.4; I will try to get to them soon. However, if you need to make any -changes to lemacs to get it to compile on your system, it would be quite -helpful if you would send me context diffs (diff -c) against version 19.6. - - -** Major Differences Between 19.3 and 19.4 -========================================== - -Prototypes have been added for all functions. Emacs compiles in the strict -ANSI modes of lcc and gcc, so portability should be vastly improved. - -Many many many many core leaks have been plugged, especially in screen -creation and deletion. - -The float support reworked to be more portable and ANSI conformant. This -resulted in these new configuration parameters: HAVE_INVERSE_HYPERBOLIC, -HAVE_CBRT, HAVE_RINT, FLOAT_CHECK_ERRNO, FLOAT_CATCH_SIGILL, -FLOAT_CHECK_DOMAIN. Let us know if you had to change the defaults on your -architecture. - -The SunOS unexec has been rewritten, and now works with either static or -dynamic libraries, depending on whether -Bstatic or -Bdynamic were specified -at link-time. - -Small (character-sized) bitmaps can be mixed in with buffer text via the new -functions set-extent-begin-glyph and set-extent-end-glyph. (This is actually -a piece of functionality that Energize has been using for a while, but we've -just gotten around to making it possible to use it without Energize. See how -nice we are? Go buy our product.) - -If compiled with Motif support, one can pop up dialog boxes from emacs lisp. -We encourage someone to contribute Athena an version of this code; it -shouldn't be much work. - -If dialog boxes are available, then y-or-n-p and yes-or-no-p use dialog boxes -instead of the minibuffer if invoked as a result of a command that was -executed from a menu instead of from the keyboard. - -Multiple screen support works better; check out doc of get-screen-for-buffer. - -The default binding of backspace is the same as delete. (C-h is still help.) - -A middle click while the minibuffer is active does completion if you click on -a highlighted completion, otherwise it executes the global binding of button2. - -New versions of Barry Warsaw's c++-mode and syntax.c. Font-lock-mode works -with C++ mode now. - -The semantics of activate-menubar-hook has changed; the functions are called -with no arguments now. - -`truename' no longer hacks the automounter; use directory-abbrev-alist instead. - -Most minibuffer handling has been reimplemented in emacs-lisp. - -There is now a builtin minibuffer history mechanism which replaces gmhist. - - -** Major Differences Between 19.2 and 19.3 -========================================== - -The ISO characters have correct case and syntax tables now, so the word-motion -and case-converting commands work sensibly on them. - -If you set ctl-arrow to an integer, you can control exactly which characters -are printable. (There will be a less crufty way to do this eventually.) - -Menubars can now be buffer local; the function set-screen-menubar no longer -exists. Look at GNUS and VM for examples of how to do this, or read -menubar.el. - -When emacs is reading from the minibuffer with completions, any completions -which are visible on the screen will highlight when the mouse moves over them; -clicking middle on a completion is the same as typing it at the minibuffer. -Some implications of this: The *Completions* buffer is always mousable. If -you're using the completion feature of find-tag, your source code will be -mousable when you type M-. Dired buffers will be mousable as soon as you -type ^X^F. And so on. - -The old isearch code has been replaced with a descendant of Dan LaLiberte's -excellent isearch-mode; it is more customizable, and generally less bogus. -You can search for "composed" characters. There are new commands, too; see -the doc for ^S, or the NEWS file. - -A patched GNUS 3.14 is included. - -The user's manual now documents Lucid Emacs 19.3. - -A few more modes have mouse and menu support. - -The startup code should be a little more robust, and give you more reasonable -error messages when things aren't installed quite right (instead of the -ubiquitous "cannot open DISPLAY"...) - -Subdirectories of the lisp directory whose names begin with a hyphen or dot -are not automatically added to the load-path, so you can use this to avoid -accidentally inflicting experimental software on your users. - -I've tried to incorporate all of the portability patches that were sent to -me; I tried to solve some of the problems in different ways than the -patches did, so let me know if I missed something. - -Some systems will need to define NEED_STRDUP, NEED_REALPATH, HAVE_DREM, or -HAVE_REMAINDER in config.h. Really this should be done in the appropriate -s- or m- files, but I don't know which systems need these and which don't. -If yours does, let me know which file it should be in. - -Check out these new packages: - -blink-paren.el: causes the matching parenthesis to flash on and off whenever - the cursor is sitting on a paren-syntax character. - -pending-del.el: Certain commands implicitly delete the highlighted region: - Typing a character when there is a highlighted region replaces - that region with the typed character. - -font-lock.el: A code-highlighting package, driven off of syntax tables, so - that it understands block comments, strings, etc. The - insertion hook is used to fontify text as you type it in. - -shell-font.el: Displays your shell-buffer prompt in boldface. - -* The History of XEmacs -======================= - -This product is an extension of GNU Emacs, previously known to some as -"Lucid Emacs" or "ERA". It was initially based on an early version of Emacs -Version 19 from the Free Software Foundation and has since been kept -up-to-date with recent versions of that product. It stems from a -collaboration of Lucid, Inc. with SunSoft DevPro (a division of Sun -Microsystems, Inc.; formerly called SunPro) and the University of Illinois. - -NOTE: Lucid, Inc. is currently out of business but development on XEmacs -continues strong. Recently, Amdahl Corporation and INS Engineering have -both contributed significantly to the development of XEmacs. - - -* What's Different? -=================== - - -** Differences between XEmacs and GNU Emacs 19 -================================================== -In XEmacs 20, characters are first-class objects. Characters can be -converted to integers, but are not integers. FSF 19, XEmacs 19, and Mule -represent them as integers. - -In XEmacs, events are first-class objects. FSF 19 represents them as -integers, which obscures the differences between a key gesture and the -ancient ASCII code used to represent a particular overlapping subset of them. - -In XEmacs, keymaps are first-class opaque objects. FSF 19 represents them as -complicated combinations of association lists and vectors. If you use the -advertised functional interface to manipulation of keymaps, the same code -will work in XEmacs, Emacs 18, and GNU Emacs 19; if your code depends -on the underlying implementation of keymaps, it will not. - -XEmacs uses "extents" to represent all non-textual aspects of buffers; -FSF 19 uses two distinct objects, "text properties" and "overlays", -which divide up the functionality between them. Extents are a -superset of the functionality of the two FSF data types. The full FSF -19 interface to text properties and overlays is supported in XEmacs -(with extents being the underlying representation). - -Extents can be made to be copied into strings, and thus restored by kill -and yank. Thus, one can specify this behavior on either "extents" or -"text properties", whereas in FSF 19 text properties always have this -behavior and overlays never do. - -Many more packages are provided standard with XEmacs than with FSF 19. - -Images of arbitrary size can be embedded in a buffer. - -Variable width fonts work. - -The height of a line is the height of the tallest font on that line, instead -of all lines having the same height. - -XEmacs uses the MIT "Xt" toolkit instead of raw Xlib calls, which -makes it be a more well-behaved X citizen (and also improves -portability). A result of this is that it is possible to include -other Xt "Widgets" in the XEmacs window. Also, XEmacs understands the -standard Xt command-line arguments. - -XEmacs provides support for ToolTalk on systems that have it. - -XEmacs can ask questions using popup dialog boxes. Any command executed from -a menu will ask yes/no questions with dialog boxes, while commands executed -via the keyboard will use the minibuffer. - -XEmacs has a built-in toolbar. Four toolbars can actually be configured: -top, bottom, left, and right toolbars. - -XEmacs has vertical and horizontal scrollbars. Unlike in FSF 19 (which -provides a primitive form of vertical scrollbar), these are true toolkit -scrollbars. A look-alike Motif scrollbar is provided for those who -don't have Motif. (Even for those who do, the look-alike may be preferable -as it is faster.) - -If you're running on a machine with audio hardware, you can specify sound -files for XEmacs to play instead of the default X beep. See the documentation -of the function load-sound-file and the variable sound-alist. - -An XEmacs frame can be placed within an "external client widget" managed by -another application. This allows an application to use an XEmacs frame as its -text pane rather than the standard Text widget that is provided with Motif or -Athena. XEmacs supports Motif applications, generic Xt (e.g. Athena) -applications, and raw Xlib applications. - -Here are some more specifics about the XEmacs implementation: - -*** The Input Model -------------------- - -The fundamental unit of input is an "event" instead of a character. An -event is a new data type that contains several pieces of information. -There are several kinds of event, and corresponding accessor and utility -functions. We tried to abstract them so that they would apply equally -well to a number of window systems. - -NOTE: All timestamps are measured as milliseconds since Emacs started. - - key_press_event - event_channel A token representing which keyboard generated it. - For this kind of event, this is a console object. - timestamp When it happened - key What keysym this is; a character or a symbol. - If it is a character, it will be a printing - ASCII character. - modifiers Bucky-bits on that key: control, meta, etc. - For most keys, Shift is not a bit; that is implicit - in the keyboard layout. - - button_press_event - button_release_event - event_channel A token representing which mouse generated it. - For this kind of event, this is a frame object. - timestamp When it happened - button What button went down or up. - modifiers Bucky-bits on that button: shift, control, meta, etc. - x, y Where it was at the button-state-change (in pixels). - - pointer_motion_event - event_channel A token representing which mouse generated it. - For this kind of event, this is a frame object. - timestamp When it happened - x, y Where it was after it moved (in pixels). - modifiers Bucky-bits down when the motion was detected. - (Possibly not all window systems will provide this?) - - process_event - timestamp When it happened - process the emacs "process" object in question - - timeout_event - timestamp Now (really, when the timeout was signaled) - interval_id The ID returned when the associated call to - add_timeout_cb() was made - ------ the rest of the fields are filled in by Emacs ----- - id_number The Emacs timeout ID for this timeout (more - than one timeout event can have the same value - here, since Emacs timeouts, as opposed to - add_timeout_cb() timeouts, can resignal - themselves) - function An elisp function to call when this timeout is - processed. - object The object passed to that function. - - eval_event - timestamp When it happened - function An elisp function to call with this event object. - object Anything. - This kind of event is used internally; sometimes the - window system interface would like to inform emacs of - some user action (such as focusing on another frame) - but needs that to happen synchronously with the other - user input, like keypresses. This is useful when - events are reported through callbacks rather - than in the standard event stream. - - misc_user_event - timestamp When it happened - function An elisp function to call with this event object. - object Anything. - This is similar to an eval_event, except that it is - generated by user actions: selections in the - menubar or scrollbar actions. It is a "command" - event, like key and mouse presses (and unlike mouse - motion, process output, and enter and leave window - hooks). In many ways, eval_events are not the same - as keypresses or misc_user_events. - - magic_event - No user-serviceable parts within. This is for things - like KeymapNotify and ExposeRegion events and so on - that emacs itself doesn't care about, but which it - must do something with for proper interaction with - the window system. - - Magic_events are handled somewhat asynchronously, just - like subprocess filters. However, occasionally a - magic_event needs to be handled synchronously; in that - case, the asynchronous handling of the magic_event will - push an eval_event back onto the queue, which will be - handled synchronously later. This is one of the - reasons why eval_events exist; I'm not entirely happy - with this aspect of this event model. - - -The function `next-event' blocks and returns one of the above-described -event objects. The function `dispatch-event' takes an event and processes -it in the appropriate way. - -For a process-event, dispatch-event calls the process's handler; for a -mouse-motion event, the mouse-motion-handler hook is called, and so on. -For magic-events, dispatch-event does window-system-dependent things, -including calling some non-window-system-dependent hooks: map-frame-hook, -unmap-frame-hook, mouse-enter-frame-hook, and mouse-leave-frame-hook. - -The function `next-command-event' calls `next-event' until it gets a key or -button from the user (that is, not a process, motion, timeout, or magic -event). If it gets an event that is not a key or button, it calls -`dispatch-event' on it immediately and reads another one. The -next-command-event function could be implemented in Emacs Lisp, though it -isn't. Generally one should call `next-command-event' instead of -`next-event'. - -read-char calls next-command-event; if it doesn't get an event that can be -converted to an ASCII character, it signals an error. Otherwise it returns -an integer. - -The variable `last-command-char' always contains an integer, or nil (if the -last read event has no ASCII equivalent, as when it is a mouse-click or a -non-ASCII character chord.) - -The new variable `last-command-event' holds an event object, that could be -a non-ASCII character, a button click, a menu selection, etc. - -The variable `unread-command-char' no longer exists, and has been replaced -by `unread-command-events'. With the new event model, it is incorrect for -code to do (setq unread-command-char (read-char)), because all user-input -can't be represented as ASCII characters. *** This is an incompatible -change. Code which sets `unread-command-char' must be updated to use the -combination of `next-command-event' and `unread-command-events' instead. - -The functions `this-command-keys' and `recent-keys' return a vector of -event objects, instead of a string of ASCII characters. *** This also -is an incompatible change. - -Almost nothing happens at interrupt level; the SIGIO handler simply sets a -flag, and later, the X event queue is scanned for KeyPress events which map -to ^G. All redisplay happens in the main thread of the process. - - -*** Keymaps ------------ - -Instead of keymaps being alists or obarrays, they are a new primary data -type. The only user access to the contents of a keymap is through the -existing keymap-manipulation functions, and a new function, map-keymap. -This means that existing code that manipulates keymaps may need to -be changed. - -One of our goals with the new input and keymap code was to make more -character combinations available for binding, besides just ASCII and -function keys. We want to be able bind different commands to Control-a -and Control-Shift-a; we also want it to be possible for the keys Control-h -and Backspace (and Control-M and Return, and Control-I and Tab, etc) to -be distinct. - -One of the most common complaints that new Emacs users have is that backspace -is help. The answer is to play around with the keyboard-translate-table, or -be lucky enough to have a system administrator who has done this for you -already; but if it were possible to bind backspace and C-h to different -things, then (under a window manager at least) both backspace and delete -would delete a character, and ^H would be help. There's no need to deal -with xmodmap, kbd-translate-table, etc. - -Here are some more examples: suppose you want to bind one function to Tab, -and another to Control-Tab. This can't be done if Tab and Control-I are the -same thing. What about control keys that have no ASCII equivalent, like -Control-< ? One might want that to be bound to set-mark-at-point-min. We -want M-C-Backspace to be kill-backward-sexp. But we want M-Backspace to be -kill-backward-word. Again, this can't be done if Backspace and C-h are -indistinguishable. - -The user represents keys as a string of ASCII characters (when possible and -convenient), or as a vector of event objects, or as a vector of "key -description lists", that looks like (control a), or (control meta delete) -or (shift f1). The order of the modifier-names is not significant, so -(meta control x) and (control meta x) are the same. - -`define-key' knows how to take any of the above representations and store them -into a keymap. When Emacs wants to return a key sequence (this-command-keys, -recent-keys, keyboard-macros, and read-key-sequence, for example) it returns -a vector of event objects. Keyboard macros can also be represented as ASCII -strings or as vectors of key description lists. - -This is an incompatible change: code which calls `this-command-keys', -`recent-keys', `read-key-sequence', or manipulates keyboard-macros probably -needs to be changed so that it no longer assumes that the returned value is a -string. - -Control-Shift-a is specified as (control A), not (control shift a), since A -is a two-case character. But for keys that don't have an upper case -version, like F1, Backspace, and Escape, you use the (shift backspace) syntax. - -See the doc string for our version of define-key, reproduced below in the -`Changed Functions' section. Note that when the KEYS argument is a string, -it has the same semantics as the v18 define-key. - - -*** Xt Integration ------------------- - -The heart of the event loop is implemented in terms of the Xt event functions -(specifically XtAppProcessEvent), and uses Xt's concept of timeouts and -file-descriptor callbacks, eliminating a large amount of system-dependent code -(Xt does it for you.) - -If Emacs is compiled with support for X, it uses the Xt event loop even when -Emacs is not running on an X display (the Xt event loop supports this). This -makes it possible to run Emacs on a dumb TTY, and later connect it to one or -more X servers. It should also be possible to later connect an existing Emacs -process to additional TTY's, although this code is still experimental. (Our -intent at this point is not to have an Emacs that is being used by multiple -people at the same time: it is to make it possible for someone to go home, log -in on a dialup line, and connect to the same Emacs process that is running -under X in their office without having to recreate their buffer state and so -on.) - -If Emacs is not compiled with support for X, then it instead uses more general -code, something like what v18 does; but this way of doing things is a lot more -modular. - -(Linking Emacs with Xt seems to only add about 300k to the executable size, -compared with an Emacs linked with Xlib only.) - - -*** Region Highlighting ------------------------ - -If the variable `zmacs-regions' is true, then the region between point and -mark will be highlighted when "active". Those commands which push a mark -(such as C-SPC, and C-x C-x) make the region become "active" and thus -highlighted. Most commands (all non-motion commands, basically) cause it to -become non-highlighted (non-"active"). Commands that operate on the region -(such as C-w, C-x C-l, etc.) only work if the region is in the highlighted -state. - -zmacs-activate-region-hook and zmacs-deactivate-region-hook are run at the -appropriate times; under X, zmacs-activate-region-hook makes the X selection -be the region between point and mark, thus doing two things at once: making -the region and the X selection be the same; and making the region highlight -in the same way as the X selection. - -If `zmacs-regions' is true, then the `mark-marker' command returns nil unless -the region is currently in the active (highlighted) state. With an argument -of t, this returns the mark (if there is one) regardless of the active-region -state. You should *generally* not use the mark unless the region is active, -if the user has expressed a preference for the active-region model. Watch -out! Moving this marker changes the mark position. If you set the marker not -to point anywhere, the buffer will have no mark. - -In this way, the primary selection is a fairly transitory entity; but -when something is copied to the kill ring, it is made the Clipboard -selection. It is also stored into CUT_BUFFER0, for compatibility with -X applications that don't understand selections (like Emacs18). - -Compatibility note: if you have code which uses (mark) or (mark-marker), -then you need to either: change those calls to (mark t) or (mark-marker t); -or simply bind `zmacs-regions' to nil around the call to mark or mark-marker. -This is probably the best solution, since it will work in Emacs 18 as well. - - -*** Menubars and Dialog Boxes ------------------------------ - -Here is an example of a menubar definition: - -(defvar default-menubar - '(("File" ["Open File..." find-file t] - ["Save Buffer" save-buffer t] - ["Save Buffer As..." write-file t] - ["Revert Buffer" revert-buffer t] - "-----" - ["Print Buffer" lpr-buffer t] - "-----" - ["Delete Frame" delete-frame t] - ["Kill Buffer..." kill-buffer t] - ["Exit Emacs" save-buffers-kill-emacs t] - ) - ("Edit" ["Undo" advertised-undo t] - ["Cut" kill-primary-selection t] - ["Copy" copy-primary-selection t] - ["Paste" yank-clipboard-selection t] - ["Clear" delete-primary-selection t] - ) - ...)) - -The first element of each menu item is the string to print on the menu. - -The second element is the callback function; if it is a symbol, it is -invoked with `call-interactively.' If it is a list, it is invoked with -`eval'. - -If the second element is a symbol, then the menu also displays the key that -is bound to that command (if any). - -The third element of the menu items determines whether the item is selectable. -It may be t, nil, or a form to evaluate. Also, a hook is run just before a -menu is exposed, which can be used to change the value of these slots. -For example, there is a hook that makes the "undo" menu item be selectable -only in the cases when `advertised-undo' would not signal an error. - -Menus may have other menus nested within them; they will cascade. - -There are utility functions for adding items to menus, deleting items, -disabling them, etc. - -The function `popup-menu' takes a menu description and pops it up. - -The function `popup-dialog-box' takes a dialog-box description and pops -it up. Dialog box descriptions look a lot like menu descriptions. - -The menubar, menu, and dialog-box code is implemented as a library, -with an interface which hides the toolkit that implements it. - - -*** Isearch Changes -------------------- - -Isearch has been reimplemented in a different way, adding some new features, -and causing a few incompatible changes. - - - the old isearch-*-char variables are no longer supported. In the old - system, one could make ^A mean "repeat the search" by doing something - like (setq search-repeat-char ?C-a). In the new system, this is - accomplished with - - (define-key isearch-mode-map "\C-a" 'isearch-repeat-forward) - - - The advantage of using the normal keymap mechanism for this is that you - can bind more than one key to an isearch command: for example, both C-a - and C-s could do the same thing inside isearch mode. You can also bind - multi-key sequences inside of isearch mode, and bind non-ASCII keys. - For example, to use the F1 key to terminate a search: - - (define-key isearch-mode-map 'f1 'isearch-exit) - - or to make ``C-c C-c'' terminate a search: - - (define-key isearch-mode-map "\C-c\C-c" 'isearch-exit) - - - If isearch is behaving case-insensitively (the default) and you type an - upper case character, then the search will become case-sensitive. This - can be disabled by setting `search-caps-disable-folding' to nil. - - - There is a history ring of the strings previously searched for; typing - M-p or M-n while searching will cycle through this ring. Typing M-TAB - will do completion across the set of items in the history ring. - - - The ESC key is no longer used to terminate an incremental search. The - RET key should be used instead. This change is necessary for it to be - possible to bind "meta" characters to isearch commands. - - -*** Startup Code Changes ------------------------- - -The initial X frame is mapped before the user's .emacs file is executed. -Without this, there is no way for the user to see any error messages -generated by their .emacs file, any windows created by the .emacs file -don't show up, and the copyleft notice isn't shown. - -The default values for load-path, exec-path, lock-directory, and -Info-directory-list are not (necessarily) built into Emacs, but are -computed at startup time. - -First, Emacs looks at the directory in which its executable file resides: - - o If that directory contains subdirectories named "lisp" and "lib-src", - then those directories are used as the lisp library and exec directory. - - o If the parent of the directory in which the emacs executable is located - contains "lisp" and "lib-src" subdirectories, then those are used. - - o If ../lib/xemacs-<version> (starting from the directory in which the - emacs executable is located) contains a "lisp" subdirectory and either - a "lib-src" subdirectory or a <configuration-name> subdirectory, then - those are used. - - o If the emacs executable that was run is a symbolic link, then the link - is chased, and the resultant directory is checked as above. - -(Actually, it doesn't just look for "lisp/", it looks for "lisp/prim/", -which reduces the chances of a false positive.) - -If the lisp directory contains subdirectories, they are added to the default -load-path as well. If the site-lisp directory exists and contains -subdirectories, they are then added. Subdirectories whose names begin with -a dot or a hyphen are not added to the load-path. - -These heuristics fail if the Emacs binary was copied from the main Emacs -tree to some other directory, and links for the lisp directory were not put -in. This isn't much of a restriction: either make there be subdirectories -(or symbolic links) of the directory of the emacs executable, or make the -"installed" emacs executable be a symbolic link to an executable in a more -appropriate directory structure. For example, this setup works: - - /usr/local/xemacs/xemacs* ; The executable. - /usr/local/xemacs/lisp/ ; The associated directories. - /usr/local/xemacs/etc/ ; Any of the files in this list - /usr/local/xemacs/lock/ ; could be symbolic links as well. - /usr/local/xemacs/info/ - -As does this: - - /usr/local/bin/xemacs -> ../xemacs/src/xemacs-19.14 ; A link... - /usr/local/xemacs/src/xemacs-19.14* ; The executable, - /usr/local/xemacs/lisp/ ; and the rest of - /usr/local/xemacs/etc/ ; the source tree - /usr/local/xemacs/lock/ - /usr/local/xemacs/info/ - -This configuration might be used for a multi-architecture installation; assume -that $LOCAL refers to a directory which contains only files specific to a -particular architecture (i.e., executables) and $SHARED refers to those files -which are not machine specific (i.e., lisp code and documentation.) - - $LOCAL/bin/xemacs@ -> $LOCAL/xemacs-19.14/xemacs* - $LOCAL/xemacs-19.14/lisp@ -> $SHARED/xemacs-19.14/lisp/ - $LOCAL/xemacs-19.14/etc@ -> $SHARED/xemacs-19.14/etc/ - $LOCAL/xemacs-19.14/info@ -> $SHARED/xemacs-19.14/info/ - -The following would also work, but the above is probably more attractive: - - $LOCAL/bin/xemacs* - $LOCAL/bin/lisp@ -> $SHARED/xemacs-19.14/lisp/ - $LOCAL/bin/etc@ -> $SHARED/xemacs-19.14/etc/ - $LOCAL/bin/info@ -> $SHARED/xemacs-19.14/info/ - -If Emacs can't find the requisite directories, it writes a message like this -(or some appropriate subset of it) to stderr: - - WARNING: - couldn't find an obvious default for load-path, exec-directory, and - lock-directory, and there were no defaults specified in paths.h when - Emacs was built. Perhaps some directories don't exist, or the Emacs - executable, /cadillac-th/jwz/somewhere/xemacs is in a strange place? - - Without both exec-directory and load-path, Emacs will be very broken. - Consider making a symbolic link from /cadillac-th/jwz/somewhere/etc - to wherever the appropriate Emacs etc/ directory is, and from - /cadillac-th/jwz/somewhere/lisp/ to wherever the appropriate Emacs - lisp library is. - - Without lock-directory set, file locking won't work. Consider - creating /cadillac-th/jwz/somewhere/lock as a directory or symbolic - link for use as the lock directory. - -The default installation tree is the following: - - /usr/local/bin/b2m ; - ctags ; executables that - emacsclient ; should be in - etags ; user's path - xemacs -> xemacs-<version> ; - xemacs ; - /usr/local/lib/xemacs/site-lisp - /usr/local/lib/xemacs/lock - /usr/local/lib/xemacs-<version>/etc ; architecture ind. files - /usr/local/lib/xemacs-<version>/info - /usr/local/lib/xemacs-<version>/lisp - /usr/local/lib/xemacs-<version>/<configuration> ; binaries emacs may run - - -*** X Resources ---------------- - -(Note: This section is copied verbatim from the XEmacs Reference Manual.) - - The Emacs resources are generally set per-frame. Each Emacs frame -can have its own name or the same name as another, depending on the -name passed to the `make-frame' function. - - You can specify resources for all frames with the syntax: - - Emacs*parameter: value - -or - - Emacs*EmacsFrame.parameter:value - -You can specify resources for a particular frame with the syntax: - - Emacs*FRAME-NAME.parameter: value - - -**** Geometry Resources ------------------------ - - To make the default size of all Emacs frames be 80 columns by 55 -lines, do this: - - Emacs*EmacsFrame.geometry: 80x55 - -To set the geometry of a particular frame named `fred', do this: - - Emacs*fred.geometry: 80x55 - -Important! Do not use the following syntax: - - Emacs*geometry: 80x55 - -You should never use `*geometry' with any X application. It does not -say "make the geometry of Emacs be 80 columns by 55 lines." It really -says, "make Emacs and all subwindows thereof be 80x55 in whatever units -they care to measure in." In particular, that is both telling the -Emacs text pane to be 80x55 in characters, and telling the menubar pane -to be 80x55 pixels, which is surely not what you want. - - As a special case, this geometry specification also works (and sets -the default size of all Emacs frames to 80 columns by 55 lines): - - Emacs.geometry: 80x55 - -since that is the syntax used with most other applications (since most -other applications have only one top-level window, unlike Emacs). In -general, however, the top-level shell (the unmapped ApplicationShell -widget named `Emacs' that is the parent of the shell widgets that -actually manage the individual frames) does not have any interesting -resources on it, and you should set the resources on the frames instead. - - The `-geometry' command-line argument sets only the geometry of the -initial frame created by Emacs. - - A more complete explanation of geometry-handling is - - * The `-geometry' command-line option sets the `Emacs.geometry' - resource, that is, the geometry of the ApplicationShell. - - * For the first frame created, the size of the frame is taken from - the ApplicationShell if it is specified, otherwise from the - geometry of the frame. - - * For subsequent frames, the order is reversed: First the frame, and - then the ApplicationShell. - - * For the first frame created, the position of the frame is taken - from the ApplicationShell (`Emacs.geometry') if it is specified, - otherwise from the geometry of the frame. - - * For subsequent frames, the position is taken only from the frame, - and never from the ApplicationShell. - - This is rather complicated, but it does seem to provide the most -intuitive behavior with respect to the default sizes and positions of -frames created in various ways. - - -**** Iconic Resources ---------------------- - - Analogous to `-geometry', the `-iconic' command-line option sets the -iconic flag of the ApplicationShell (`Emacs.iconic') and always applies -to the first frame created regardless of its name. However, it is -possible to set the iconic flag on particular frames (by name) by using -the `Emacs*FRAME-NAME.iconic' resource. - - -**** Resource List ------------------- - - Emacs frames accept the following resources: - -`geometry' (class `Geometry'): string - Initial geometry for the frame. *Note Geometry Resources:: for a - complete discussion of how this works. - -`iconic' (class `Iconic'): boolean - Whether this frame should appear in the iconified state. - -`internalBorderWidth' (class `InternalBorderWidth'): int - How many blank pixels to leave between the text and the edge of the - window. - -`interline' (class `Interline'): int - How many pixels to leave between each line (may not be - implemented). - -`menubar' (class `Menubar'): boolean - Whether newly-created frames should initially have a menubar. Set - to true by default. - -`initiallyUnmapped' (class `InitiallyUnmapped'): boolean - Whether XEmacs should leave the initial frame unmapped when it - starts up. This is useful if you are starting XEmacs as a server - (e.g. in conjunction with gnuserv or the external client widget). - You can also control this with the `-unmapped' command-line option. - -`barCursor' (class `BarColor'): boolean - Whether the cursor should be displayed as a bar, or the - traditional box. - -`textPointer' (class `Cursor'): cursor-name - The cursor to use when the mouse is over text. This resource is - used to initialize the variable `x-pointer-shape'. - -`selectionPointer' (class `Cursor'): cursor-name - The cursor to use when the mouse is over a selectable text region - (an extent with the `highlight' property; for example, an Info - cross-reference). This resource is used to initialize the variable - `x-selection-pointer-shape'. - -`spacePointer' (class `Cursor'): cursor-name - The cursor to use when the mouse is over a blank space in a buffer - (that is, after the end of a line or after the end-of-file). This - resource is used to initialize the variable - `x-nontext-pointer-shape'. - -`modeLinePointer' (class `Cursor'): cursor-name - The cursor to use when the mouse is over a mode line. This - resource is used to initialize the variable `x-mode-pointer-shape'. - -`gcPointer' (class `Cursor'): cursor-name - The cursor to display when a garbage-collection is in progress. - This resource is used to initialize the variable - `x-gc-pointer-shape'. - -`scrollbarPointer' (class `Cursor'): cursor-name - The cursor to use when the mouse is over the scrollbar. This - resource is used to initialize the variable - `x-scrollbar-pointer-shape'. - -`pointerColor' (class `Foreground'): color-name -`pointerBackground' (class `Background'): color-name - The foreground and background colors of the mouse cursor. These - resources are used to initialize the variables - `x-pointer-foreground-color' and `x-pointer-background-color'. - -`scrollBarWidth' (class `ScrollBarWidth'): integer - How wide the vertical scrollbars should be, in pixels; 0 means no - vertical scrollbars. You can also use a resource specification of - the form `*scrollbar.width', or the usual toolkit scrollbar - resources: `*XmScrollBar.width' (Motif), `*XlwScrollBar.width' - (Lucid), or `*Scrollbar.thickness' (Athena). We don't recommend - that you use the toolkit resources, though, because they're - dependent on how exactly your particular build of XEmacs was - configured. - -`scrollBarHeight' (class `ScrollBarHeight'): integer - How high the horizontal scrollbars should be, in pixels; 0 means no - horizontal scrollbars. You can also use a resource specification - of the form `*scrollbar.height', or the usual toolkit scrollbar - resources: `*XmScrollBar.height' (Motif), `*XlwScrollBar.height' - (Lucid), or `*Scrollbar.thickness' (Athena). We don't recommend - that you use the toolkit resources, though, because they're - dependent on how exactly your particular build of XEmacs was - configured. - -`scrollBarPlacement' (class `ScrollBarPlacement'): string - Where the horizontal and vertical scrollbars should be positioned. - This should be one of the four strings `bottom-left', - `bottom-right', `top-left', and `top-right'. Default is - `bottom-right' for the Motif and Lucid scrollbars and - `bottom-left' for the Athena scrollbars. - -`topToolBarHeight' (class `TopToolBarHeight'): integer -`bottomToolBarHeight' (class `BottomToolBarHeight'): integer -`leftToolBarWidth' (class `LeftToolBarWidth'): integer -`rightToolBarWidth' (class `RightToolBarWidth'): integer - Height and width of the four possible toolbars. - -`topToolBarShadowColor' (class `TopToolBarShadowColor'): color-name -`bottomToolBarShadowColor' (class `BottomToolBarShadowColor'): color-name - Color of the top and bottom shadows for the toolbars. NOTE: These - resources do *not* have anything to do with the top and bottom - toolbars (i.e. the toolbars at the top and bottom of the frame)! - Rather, they affect the top and bottom shadows around the edges of - all four kinds of toolbars. - -`topToolBarShadowPixmap' (class `TopToolBarShadowPixmap'): pixmap-name -`bottomToolBarShadowPixmap' (class `BottomToolBarShadowPixmap'): pixmap-name - Pixmap of the top and bottom shadows for the toolbars. If set, - these resources override the corresponding color resources. NOTE: - These resources do *not* have anything to do with the top and - bottom toolbars (i.e. the toolbars at the top and bottom of the - frame)! Rather, they affect the top and bottom shadows around the - edges of all four kinds of toolbars. - -`toolBarShadowThickness' (class `ToolBarShadowThickness'): integer - Thickness of the shadows around the toolbars, in pixels. - -`visualBell' (class `VisualBell'): boolean - Whether XEmacs should flash the screen rather than making an - audible beep. - -`bellVolume' (class `BellVolume'): integer - Volume of the audible beep. - -`useBackingStore' (class `UseBackingStore'): boolean - Whether XEmacs should set the backing-store attribute of the X - windows it creates. This increases the memory usage of the X - server but decreases the amount of X traffic necessary to update - the screen, and is useful when the connection to the X server goes - over a low-bandwidth line such as a modem connection. - - -**** Face Resources -------------------- - - The attributes of faces are also per-frame. They can be specified as: - - Emacs.FACE_NAME.parameter: value - - (*do not* use `Emacs*FACE_NAME...') - -or - - Emacs*FRAME_NAME.FACE_NAME.parameter: value - -Faces accept the following resources: - -`attributeFont' (class `AttributeFont'): font-name - The font of this face. - -`attributeForeground' (class `AttributeForeground'): color-name -`attributeBackground' (class `AttributeBackground'): color-name - The foreground and background colors of this face. - -`attributeBackgroundPixmap' (class `AttributeBackgroundPixmap'): file-name - The name of an XBM file (or XPM file, if your version of Emacs - supports XPM), to use as a background stipple. - -`attributeUnderline' (class `AttributeUnderline'): boolean - Whether text in this face should be underlined. - - All text is displayed in some face, defaulting to the face named -`default'. To set the font of normal text, use -`Emacs*default.attributeFont'. To set it in the frame named `fred', use -`Emacs*fred.default.attributeFont'. - - These are the names of the predefined faces: - -`default' - Everything inherits from this. - -`bold' - If this is not specified in the resource database, Emacs tries to - find a bold version of the font of the default face. - -`italic' - If this is not specified in the resource database, Emacs tries to - find an italic version of the font of the default face. - -`bold-italic' - If this is not specified in the resource database, Emacs tries to - find a bold-italic version of the font of the default face. - -`modeline' - This is the face that the modeline is displayed in. If not - specified in the resource database, it is determined from the - default face by reversing the foreground and background colors. - -`highlight' - This is the face that highlighted extents (for example, Info - cross-references and possible completions, when the mouse passes - over them) are displayed in. - -`left-margin' -`right-margin' - These are the faces that the left and right annotation margins are - displayed in. - -`zmacs-region' - This is the face that mouse selections are displayed in. - -`text-cursor' - This is the face that the cursor is displayed in. - -`isearch' - This is the face that the matched text being searched for is - displayed in. - -`info-node' - This is the face of info menu items. If unspecified, it is copied - from `bold-italic'. - -`info-xref' - This is the face of info cross-references. If unspecified, it is - copied from `bold'. (Note that, when the mouse passes over a - cross-reference, the cross-reference's face is determined from a - combination of the `info-xref' and `highlight' faces.) - - Other packages might define their own faces; to see a list of all -faces, use any of the interactive face-manipulation commands such as -`set-face-font' and type `?' when you are prompted for the name of a -face. - - If the `bold', `italic', and `bold-italic' faces are not specified -in the resource database, then XEmacs attempts to derive them from the -font of the default face. It can only succeed at this if you have -specified the default font using the XLFD (X Logical Font Description) -format, which looks like - - *-courier-medium-r-*-*-*-120-*-*-*-*-*-* - -If you use any of the other, less strict font name formats, some of -which look like - - lucidasanstypewriter-12 - fixed - 9x13 - - then XEmacs won't be able to guess the names of the bold and italic -versions. All X fonts can be referred to via XLFD-style names, so you -should use those forms. See the man pages for `X(1)', `xlsfonts(1)', -and `xfontsel(1)'. - - -**** Widgets ------------- - - There are several structural widgets between the terminal EmacsFrame -widget and the top level ApplicationShell; the exact names and types of -these widgets change from release to release (for example, they changed -in 19.9, 19.10, 19.12, and 19.13) and are subject to further change in -the future, so you should avoid mentioning them in your resource database. -The above-mentioned syntaxes should be forward-compatible. As of 19.14, -the exact widget hierarchy is as follows: - - INVOCATION-NAME "shell" "container" FRAME-NAME - x-emacs-application-class "TopLevelEmacsShell" "EmacsManager" "EmacsFrame" - -(for normal frames) - -or - - INVOCATION-NAME "shell" "container" FRAME-NAME - x-emacs-application-class "TransientEmacsShell" "EmacsManager" "EmacsFrame" - -(for popup/dialog-box frames) - -where INVOCATION-NAME is the terminal component of the name of the -XEmacs executable (usually `xemacs'), and `x-emacs-application-class' -is generally `Emacs'. - - -**** Menubar Resources ----------------------- - - As the menubar is implemented as a widget which is not a part of -XEmacs proper, it does not use the face mechanism for specifying fonts -and colors: It uses whatever resources are appropriate to the type of -widget which is used to implement it. - - If Emacs was compiled to use only the Motif-lookalike menu widgets, -then one way to specify the font of the menubar would be - - Emacs*menubar*font: *-courier-medium-r-*-*-*-120-*-*-*-*-*-* - - If the Motif library is being used, then one would have to use - - Emacs*menubar*fontList: *-courier-medium-r-*-*-*-120-*-*-*-*-*-* - - because the Motif library uses the `fontList' resource name instead -of `font', which has subtly different semantics. - - The same is true of the scrollbars: They accept whichever resources -are appropriate for the toolkit in use. - - -*** Source Code Highlighting ----------------------------- - -It's possible to have your buffers "decorated" with fonts or colors -indicating syntactic structures (such as strings, comments, function names, -"reserved words", etc.). In XEmacs, the preferred way to do this is with -font-lock-mode; activate it by adding the following code to your .emacs file: - - (add-hook 'emacs-lisp-mode-hook 'turn-on-font-lock) - (add-hook 'c-mode-hook 'turn-on-font-lock) - (add-hook 'c++-mode-hook 'turn-on-font-lock) - (add-hook 'dired-mode-hook 'turn-on-font-lock) - ...etc... - -To customize it, see the descriptions of the function `font-lock-mode' and -the variables `font-lock-keywords', `c-font-lock-keywords', etc. - -There exist several other source code highlighting packages, but font-lock -does one thing that most others don't do: highlights as you type new text; -and one thing that no others do: bases part of its decoration on the -syntax table of the major mode. Font-lock has C-level support to do this -efficiently, so it should also be significantly faster than the others. - -If there's something that another highlighting package does that you can't -make font-lock do, let us know. We would prefer to consolidate all of the -desired functionality into one package rather than ship several different -packages which do essentially the same thing in different ways. - - -** Differences Between XEmacs and Emacs 18 -========================================== - -Auto-configure support has been added, so it should be fairly easy to compile -XEmacs on different systems. If you have any problems or feedback about -compiling on your system, please let us know. - -We have reimplemented the basic input model in a more general way; instead of -X input being a special-case of the normal ASCII input stream, XEmacs has a -concept of "input events", and ASCII characters are a subset of that. The -events that XEmacs knows about are not X events, but are a generalization of -them, so that XEmacs can eventually be ported to different window systems. - -We have reimplemented keymaps so that sequences of events can be stored into -them instead of just ASCII codes; it is possible to, for example, bind -different commands to each of the chords Control-h, Control-H, Backspace, -Control-Backspace, and Super-Shift-Backspace. Key bindings, function key -bindings, and mouse bindings live in the same keymaps. - -Input and display of all ISO-8859-1 characters is supported. - -You can have multiple X windows ("frames" in XEmacs terminology). - -XEmacs has objects called "extents" and "faces", which are roughly -analogous to Epoch's "buttons," "zones," and "styles." An extent is a -region of text (a start position and an end position) and a face is a -collection of textual attributes like fonts and colors. Every extent -is displayed in some "face", so changing the properties of a face -immediately updates the display of all associated extents. Faces can -be frame-local: you can have a region of text which displays with -completely different attributes when its buffer is viewed from a -different X window. - -The display attributes of faces may be specified either in lisp or through -the X resource manager. - -Pixmaps of arbitrary size can be embedded in a buffer. - -Variable width fonts work. - -The height of a line is the height of the tallest font on that line, instead -of all lines having the same height. - -XEmacs uses the MIT "Xt" toolkit instead of raw Xlib calls, which -makes it be a more well-behaved X citizen (and also improves -portability). A result of this is that it is possible to include -other Xt "Widgets" in the XEmacs window. Also, XEmacs understands the -standard Xt command-line arguments. - -XEmacs understands the X11 "Selection" mechanism; it's possible to define -and customize selection converter functions and new selection types from -Emacs Lisp, without having to recompile XEmacs. - -XEmacs provides support for ToolTalk on systems that have it. - -XEmacs supports the Zmacs/Lispm style of region highlighting, where the -region between the point and mark is highlighted when in its "active" state. - -XEmacs has a menubar, whose contents are customizable from emacs-lisp. -This menubar looks Motif-ish, but does not require Motif. If you already -own Motif, however, you can configure XEmacs to use a *real* Motif menubar -instead. - -XEmacs can ask questions using popup dialog boxes. Any command executed from -a menu will ask yes/no questions with dialog boxes, while commands executed -via the keyboard will use the minibuffer. - -XEmacs has vertical and horizontal scrollbars. - -The initial load-path is computed at run-time, instead of at compile-time. -This means that if you move the XEmacs executable and associated directories -to somewhere else, you don't have to recompile anything. - -You can specify what the title of the XEmacs windows and icons should be -with the variables `frame-title-format' and `frame-icon-title-format', -which have the same syntax as `mode-line-format'. - -XEmacs now supports floating-point numbers. - -XEmacs now knows about timers directly, instead of them being simulated by -a subprocess. - -XEmacs understands truenames, and can be configured to notice when you are -visiting two names of the same file. See the variables find-file-use-truenames -and find-file-compare-truenames. - -If you're running on a machine with audio hardware, you can specify sound -files for XEmacs to play instead of the default X beep. See the documentation -of the function load-sound-file and the variable sound-alist. - -An XEmacs frame can be placed within an "external client widget" managed by -another application. This allows an application to use an XEmacs frame as its -text pane rather than the standard Text widget that is provided with Motif or -Athena. XEmacs supports Motif applications, generic Xt (e.g. Athena) -applications, and raw Xlib applications. - -Random changes to the emacs-lisp library: (some of this was not written by -us, but is included because it's free software and we think it's good stuff) - - - there is a new optimizing byte-compiler - - there is a new abbrev-based mail-alias mechanism - - the -*- line can contain local-variable settings - - there is a new TAGS package - - there is a new VI-emulation mode (viper) - - there is a new implementation of Dired - - there is a new implementation of Isearch - - the VM package for reading mail is provided - - the W3 package for browsing the World Wide Web hypertext information - system is provided - - the Hyperbole package, a programmable information management and - hypertext system - - the OO-Browser package, a multi-language object-oriented browser - -There are many more specifics in the "Miscellaneous Changes" section, below. - -The online Emacs Manual and Emacs-Lisp Manual are now both relatively -up-to-date.