Mercurial > hg > xemacs-beta
diff etc/NEWS @ 124:9b50b4588a93 r20-1b15
Import from CVS: tag r20-1b15
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:26:39 +0200 |
parents | 9f59509498e1 |
children | 1370575f1259 |
line wrap: on
line diff
--- a/etc/NEWS Mon Aug 13 09:26:04 2007 +0200 +++ b/etc/NEWS Mon Aug 13 09:26:39 2007 +0200 @@ -84,1104 +84,6 @@ C-c C-k make all subheadings at all levels visible.x1 -* 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 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. - -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 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. - * XEmacs Release Notes ====================== @@ -1201,41 +103,6 @@ ** Major Differences between 20.0 and 20.1 -Many packages have been add and upgraded. - --- Gnus-5.4.17 Courtesy of Lars Magne Ingebrigtsen --- mic-paren.el-1.3.1 Courtesy of Mikael Sjödin --- hyperbole-4.022 Courtesy of Bob Weiner --- W3-3.0.62 Courtesy of William Perry --- AUCTeX-9.7k Courtesy of Per Abrahamsen --- hm--html-menus-5.3 Courtesy of Heiko Muenkel --- custom-1.46 Courtesy of Per Abrahamsen --- python-mode.el-2.90 Courtesy of Barry Warsaw --- balloon-help-1.04 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.01 Courtesy of Kyle Jones --- redo.el-1.01 Courtesy of Kyle Jones --- VM-6.15 Courtesy of Kyle Jones --- OO-Browser-2.10 Courtesy of Bob Weiner --- viper-2.93 Courtesy of Michael Kifer --- ediff-2.64 Courtesy of Michael Kifer --- edmacro.el-3.05 Courtesy of Dave Gillespie, port to XEmacs by - Hrvoje Niksic. --- detached-minibuf.el Courtesy of Alvin Shelton --- whitespace-mode.el Courtesy of Heiko Muenkel --- winmgr-mode.el Courtesy of David Konerding, Stefan Strobel & Barry Warsaw --- mine.el-1.17 Courtesy of Jacques Duthen --- 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.8 Courtesy of Noah Friedman --- tm-7.105 Courtesy of MORIOKA Tomohiko --- efs-1.15 courtesy of Andy Norman and Michael Sperber --- verilog-mode.el Courtesy of Michael McNamara & Adrian Aichner --- overlay.el Courtesy of Joseph Nuspl - *** User Interface changes. The keysyms mouse-1, mouse-2, mouse-3 and down-mouse-1, down-mouse-2, @@ -1248,6 +115,265 @@ The logo has been changed, and the default background color is now shade of gray instead of white. +Many packages have been add and upgraded. + +-- Gnus-5.4.43 Courtesy of Lars Magne Ingebrigtsen + +*** Gnus changes. + +**** 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.82 Courtesy of Per Abrahamsen + +The Customize library enables Emacs Lisp programmers to specify types +of their variables, so that the users can customize them. For +example, the old declaration + +(defvar foo-blurgoze nil + "*non-nil means that foo will act very blurgozely.") + +now becomes: + +(defcustom foo-blurgoze nil + "*non-nil means that foo will act very blurgozely." + :type 'boolean) + +Now the user can type `M-x customize RET foo-blurgoze RET' to +customize the variable. Other, more complex data structures can be +represented and customized too, e.g. + +(defcustom foo-hairy-alist '((somekey . "somestring") + (otherkey . (foo-doit)) + (thirdkey . [1 2 3])) +"*Alist describing the hairy options of 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." + :type '(repeat (cons (symbol :tag "Key") + (choice string + (vector (repeat :inline t integer)) + sexp)))) + +The user will be able to add and remove the entries to the list, as +well as save the settings to his/her `.emacs'. + +The Customize now has its submenu at the top of the Options menu, and +is 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, Calendar, 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. + +been converted to use the Customize features. + +-- mic-paren.el-1.3.1 Courtesy of Mikael Sjödin +-- hyperbole-4.022 Courtesy of Bob Weiner + +-- W3-3.0.80 Courtesy of William Perry + +Version 3 of Emacs/W3, the Emacs World Wide Web browser, has been +included. It is much faster than any of the previous versions, and +contains numerous other features. + +-- AUCTeX-9.7k Courtesy of Per Abrahamsen + + AUC TeX is a comprehensive customizable integrated environment for +writing input files for LaTeX using GNU 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. + +-- hm--html-menus-5.3 Courtesy of Heiko Muenkel +-- python-mode.el-2.90 Courtesy of Barry Warsaw +-- balloon-help-1.04 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.01 Courtesy of Kyle Jones + +-- redo.el-1.01 Courtesy of Kyle Jones + +redo.el is a package that implements true redo mechanism in XEmacs +buffers. 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: + 1. 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. + 2. 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. + +-- VM-6.15 Courtesy of Kyle Jones +-- OO-Browser-2.10 Courtesy of Bob Weiner +-- viper-2.93 Courtesy of Michael Kifer +-- ediff-2.64 Courtesy of Michael Kifer + +-- edmacro.el-3.05 Courtesy of Dave Gillespie, port to XEmacs by + Hrvoje Niksic. + +Edmacro is a utility that provides easy editing of keyboard macros. +Press `C-x C-k' to invoke the `edit-kbd-macro' command that lets you +edit and define new keyboard macros. You can also edit the last 100 +keystrokes and insert them into a macro to be bound to a key. The +macros can be conveniently dumped to `.emacs' file. + +The `read-kbd-macro' function is now available in XEmacs. The short +form `kbd' that evaluates at compile-time can be used instead. + +-- detached-minibuf.el Courtesy of Alvin Shelton +-- whitespace-mode.el Courtesy of Heiko Muenkel +-- winmgr-mode.el Courtesy of David Konerding, Stefan Strobel & Barry Warsaw + +-- xmine.el-1.4 Courtesy of Jens Lautenbacher + +XEmacs now includes a minesweeper game with a full-featured graphics +and mouse interface. Invoke with `M-x xmine'. + +-- 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.8 Courtesy of Noah Friedman +-- tm-7.105 Courtesy of MORIOKA Tomohiko + +-- efs-1.15 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. + +-- verilog-mode.el Courtesy of Michael McNamara & Adrian Aichner + +-- overlay.el Courtesy of Joseph Nuspl + +The overlay support in XEmacs is now functional. Overlays are +implemented on top of native extents, and can be used as a GNU +Emacs-compatible way of changing display properties. + *** Other changes First alpha level support of MS Windows NT is available courtesy of @@ -3121,3 +2247,1101 @@ 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 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. + +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 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.