# HG changeset patch # User Kim F. Storm # Date 1149382911 0 # Node ID 25fa0038a52d449b84b3c80042d3d7e80b34f930 # Parent 86cedfd9ade6b62a3596e9a223919e06d668075a Reorganize NEWS and ONEWS.* files into NEWS for current major version and NEWS.21, NEWS.20, NEWS.19, NEWS.18, and NEWS.1-17 for older version. Update copyright notices. diff -r 86cedfd9ade6 -r 25fa0038a52d etc/NEWS --- a/etc/NEWS Sat Jun 03 22:51:32 2006 +0000 +++ b/etc/NEWS Sun Jun 04 01:01:51 2006 +0000 @@ -1,12 +1,18 @@ -GNU Emacs NEWS -- history of user-visible changes. 2006-05-21 -Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +GNU Emacs NEWS -- history of user-visible changes. 2006-06-04 +Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. See the end for copying conditions. Please send Emacs bug reports to bug-gnu-emacs@gnu.org. -For older news, see the file ONEWS -You can narrow news to the specific version by calling -`view-emacs-news' with a prefix argument or by typing C-u C-h C-n. +If possible, use M-x report-emacs-bug. + +This file is about changes in emacs version 22. + +See files NEWS.21, NEWS.20, NEWS.19, NEWS.18, and NEWS.1-17 for changes +in older emacs versions. + +You can narrow news to a specific version by calling `view-emacs-news' +with a prefix argument or by typing C-u C-h C-n. Temporary note: +++ indicates that the appropriate manual has already been updated. @@ -5656,9345 +5662,14 @@ return. The macro `1value' suppresses a brown splotch for its argument. This macro is a no-op except during test-coverage -- then it signals an error if the argument actually returns differing values. - -* Installation changes in Emacs 21.3 - -** Support for GNU/Linux on little-endian MIPS and on IBM S390 has -been added. - - -* Changes in Emacs 21.3 - -** The obsolete C mode (c-mode.el) has been removed to avoid problems -with Custom. - -** UTF-16 coding systems are available, encoding the same characters -as mule-utf-8. - -** There is a new language environment for UTF-8 (set up automatically -in UTF-8 locales). - -** Translation tables are available between equivalent characters in -different Emacs charsets -- for instance `e with acute' coming from the -Latin-1 and Latin-2 charsets. User options `unify-8859-on-encoding-mode' -and `unify-8859-on-decoding-mode' respectively turn on translation -between ISO 8859 character sets (`unification') on encoding -(e.g. writing a file) and decoding (e.g. reading a file). Note that -`unify-8859-on-encoding-mode' is useful and safe, but -`unify-8859-on-decoding-mode' can cause text to change when you read -it and write it out again without edits, so it is not generally advisable. -By default `unify-8859-on-encoding-mode' is turned on. - -** In Emacs running on the X window system, the default value of -`selection-coding-system' is now `compound-text-with-extensions'. - -If you want the old behavior, set selection-coding-system to -compound-text, which may be significantly more efficient. Using -compound-text-with-extensions seems to be necessary only for decoding -text from applications under XFree86 4.2, whose behavior is actually -contrary to the compound text specification. - - -* Installation changes in Emacs 21.2 - -** Support for BSD/OS 5.0 has been added. - -** Support for AIX 5.1 was added. - - -* Changes in Emacs 21.2 - -** Emacs now supports compound-text extended segments in X selections. - -X applications can use `extended segments' to encode characters in -compound text that belong to character sets which are not part of the -list of approved standard encodings for X, e.g. Big5. To paste -selections with such characters into Emacs, use the new coding system -compound-text-with-extensions as the value of selection-coding-system. - -** The default values of `tooltip-delay' and `tooltip-hide-delay' -were changed. - -** On terminals whose erase-char is ^H (Backspace), Emacs -now uses normal-erase-is-backspace-mode. - -** When the *scratch* buffer is recreated, its mode is set from -initial-major-mode, which normally is lisp-interaction-mode, -instead of using default-major-mode. - -** The new option `Info-scroll-prefer-subnodes' causes Info to behave -like the stand-alone Info reader (from the GNU Texinfo package) as far -as motion between nodes and their subnodes is concerned. If it is t -(the default), Emacs behaves as before when you type SPC in a menu: it -visits the subnode pointed to by the first menu entry. If this option -is nil, SPC scrolls to the end of the current node, and only then goes -to the first menu item, like the stand-alone reader does. - -This change was already in Emacs 21.1, but wasn't advertised in the -NEWS. - - -* Lisp Changes in Emacs 21.2 - -** The meanings of scroll-up-aggressively and scroll-down-aggressively -have been interchanged, so that the former now controls scrolling up, -and the latter now controls scrolling down. - -** The variable `compilation-parse-errors-filename-function' can -be used to transform filenames found in compilation output. - - -* Installation Changes in Emacs 21.1 - -See the INSTALL file for information on installing extra libraries and -fonts to take advantage of the new graphical features and extra -charsets in this release. - -** Support for GNU/Linux on IA64 machines has been added. - -** Support for LynxOS has been added. - -** There are new configure options associated with the support for -images and toolkit scrollbars. Use the --help option in `configure' -to list them. - -** You can build a 64-bit Emacs for SPARC/Solaris systems which -support 64-bit executables and also on Irix 6.5. This increases the -maximum buffer size. See etc/MACHINES for instructions. Changes to -build on other 64-bit systems should be straightforward modulo any -necessary changes to unexec. - -** There is a new configure option `--disable-largefile' to omit -Unix-98-style support for large files if that is available. - -** There is a new configure option `--without-xim' that instructs -Emacs to not use X Input Methods (XIM), if these are available. - -** `movemail' defaults to supporting POP. You can turn this off using -the --without-pop configure option, should that be necessary. - -** This version can be built for the Macintosh, but does not implement -all of the new display features described below. The port currently -lacks unexec, asynchronous processes, and networking support. See the -"Emacs and the Mac OS" appendix in the Emacs manual, for the -description of aspects specific to the Mac. - -** Note that the MS-Windows port does not yet implement various of the -new display features described below. - - -* Changes in Emacs 21.1 - -** Emacs has a new redisplay engine. - -The new redisplay handles characters of variable width and height. -Italic text can be used without redisplay problems. Fonts containing -oversized characters, i.e. characters larger than the logical height -of a font can be used. Images of various formats can be displayed in -the text. - -** Emacs has a new face implementation. - -The new faces no longer fundamentally use X font names to specify the -font. Instead, each face has several independent attributes--family, -height, width, weight and slant--that it may or may not specify. -These attributes can be merged from various faces, and then together -specify a font. - -Faces are supported on terminals that can display color or fonts. -These terminal capabilities are auto-detected. Details can be found -under Lisp changes, below. - -** Emacs can display faces on TTY frames. - -Emacs automatically detects terminals that are able to display colors. -Faces with a weight greater than normal are displayed extra-bright, if -the terminal supports it. Faces with a weight less than normal and -italic faces are displayed dimmed, if the terminal supports it. -Underlined faces are displayed underlined if possible. Other face -attributes such as `overline', `strike-through', and `box' are ignored -on terminals. - -The command-line options `-fg COLOR', `-bg COLOR', and `-rv' are now -supported on character terminals. - -Emacs automatically remaps all X-style color specifications to one of -the colors supported by the terminal. This means you could have the -same color customizations that work both on a windowed display and on -a TTY or when Emacs is invoked with the -nw option. - -** New default font is Courier 12pt under X. - -** Sound support - -Emacs supports playing sound files on GNU/Linux and FreeBSD (Voxware -driver and native BSD driver, a.k.a. Luigi's driver). Currently -supported file formats are RIFF-WAVE (*.wav) and Sun Audio (*.au). -You must configure Emacs with the option `--with-sound=yes' to enable -sound support. - -** Emacs now resizes mini-windows if appropriate. - -If a message is longer than one line, or minibuffer contents are -longer than one line, Emacs can resize the minibuffer window unless it -is on a frame of its own. You can control resizing and the maximum -minibuffer window size by setting the following variables: - -- User option: max-mini-window-height - -Maximum height for resizing mini-windows. If a float, it specifies a -fraction of the mini-window frame's height. If an integer, it -specifies a number of lines. - -Default is 0.25. - -- User option: resize-mini-windows - -How to resize mini-windows. If nil, don't resize. If t, always -resize to fit the size of the text. If `grow-only', let mini-windows -grow only, until they become empty, at which point they are shrunk -again. - -Default is `grow-only'. - -** LessTif support. - -Emacs now runs with the LessTif toolkit (see -). You will need version 0.92.26, or later. - -** LessTif/Motif file selection dialog. - -When Emacs is configured to use LessTif or Motif, reading a file name -from a menu will pop up a file selection dialog if `use-dialog-box' is -non-nil. - -** File selection dialog on MS-Windows is supported. - -When a file is visited by clicking File->Open, the MS-Windows version -now pops up a standard file selection dialog where you can select a -file to visit. File->Save As also pops up that dialog. - -** Toolkit scroll bars. - -Emacs now uses toolkit scroll bars if available. When configured for -LessTif/Motif, it will use that toolkit's scroll bar. Otherwise, when -configured for Lucid and Athena widgets, it will use the Xaw3d scroll -bar if Xaw3d is available. You can turn off the use of toolkit scroll -bars by specifying `--with-toolkit-scroll-bars=no' when configuring -Emacs. - -When you encounter problems with the Xaw3d scroll bar, watch out how -Xaw3d is compiled on your system. If the Makefile generated from -Xaw3d's Imakefile contains a `-DNARROWPROTO' compiler option, and your -Emacs system configuration file `s/your-system.h' does not contain a -define for NARROWPROTO, you might consider adding it. Take -`s/freebsd.h' as an example. - -Alternatively, if you don't have access to the Xaw3d source code, take -a look at your system's imake configuration file, for example in the -directory `/usr/X11R6/lib/X11/config' (paths are different on -different systems). You will find files `*.cf' there. If your -system's cf-file contains a line like `#define NeedWidePrototypes NO', -add a `#define NARROWPROTO' to your Emacs system configuration file. - -The reason for this is that one Xaw3d function uses `double' or -`float' function parameters depending on the setting of NARROWPROTO. -This is not a problem when Imakefiles are used because each system's -imake configuration file contains the necessary information. Since -Emacs doesn't use imake, this has do be done manually. - -** Tool bar support. - -Emacs supports a tool bar at the top of a frame under X. For details -of how to define a tool bar, see the page describing Lisp-level -changes. Tool-bar global minor mode controls whether or not it is -displayed and is on by default. The appearance of the bar is improved -if Emacs has been built with XPM image support. Otherwise monochrome -icons will be used. - -To make the tool bar more useful, we need contributions of extra icons -for specific modes (with copyright assignments). - -** Tooltips. - -Tooltips are small X windows displaying a help string at the current -mouse position. The Lisp package `tooltip' implements them. You can -turn them off via the user option `tooltip-mode'. - -Tooltips also provides support for GUD debugging. If activated, -variable values can be displayed in tooltips by pointing at them with -the mouse in source buffers. You can customize various aspects of the -tooltip display in the group `tooltip'. - -** Automatic Hscrolling - -Horizontal scrolling now happens automatically if -`automatic-hscrolling' is set (the default). This setting can be -customized. - -If a window is scrolled horizontally with set-window-hscroll, or -scroll-left/scroll-right (C-x <, C-x >), this serves as a lower bound -for automatic horizontal scrolling. Automatic scrolling will scroll -the text more to the left if necessary, but won't scroll the text more -to the right than the column set with set-window-hscroll etc. - -** When using a windowing terminal, each Emacs window now has a cursor -of its own. By default, when a window is selected, the cursor is -solid; otherwise, it is hollow. The user-option -`cursor-in-non-selected-windows' controls how to display the -cursor in non-selected windows. If nil, no cursor is shown, if -non-nil a hollow box cursor is shown. - -** Fringes to the left and right of windows are used to display -truncation marks, continuation marks, overlay arrows and alike. The -foreground, background, and stipple of these areas can be changed by -customizing face `fringe'. - -** The mode line under X is now drawn with shadows by default. -You can change its appearance by modifying the face `mode-line'. -In particular, setting the `:box' attribute to nil turns off the 3D -appearance of the mode line. (The 3D appearance makes the mode line -occupy more space, and thus might cause the first or the last line of -the window to be partially obscured.) - -The variable `mode-line-inverse-video', which was used in older -versions of emacs to make the mode-line stand out, is now deprecated. -However, setting it to nil will cause the `mode-line' face to be -ignored, and mode-lines to be drawn using the default text face. - -** Mouse-sensitive mode line. - -Different parts of the mode line have been made mouse-sensitive on all -systems which support the mouse. Moving the mouse to a -mouse-sensitive part in the mode line changes the appearance of the -mouse pointer to an arrow, and help about available mouse actions is -displayed either in the echo area, or in the tooltip window if you -have enabled one. - -Currently, the following actions have been defined: - -- Mouse-1 on the buffer name in the mode line goes to the next buffer. - -- Mouse-3 on the buffer-name goes to the previous buffer. - -- Mouse-2 on the read-only or modified status in the mode line (`%' or -`*') toggles the status. - -- Mouse-3 on the major mode name displays a major mode menu. - -- Mouse-3 on the mode name displays a minor-mode menu. - -** Hourglass pointer - -Emacs can optionally display an hourglass pointer under X. You can -turn the display on or off by customizing group `cursor'. - -** Blinking cursor - -M-x blink-cursor-mode toggles a blinking cursor under X and on -terminals having terminal capabilities `vi', `vs', and `ve'. Blinking -and related parameters like frequency and delay can be customized in -the group `cursor'. - -** New font-lock support mode `jit-lock-mode'. - -This support mode is roughly equivalent to `lazy-lock' but is -generally faster. It supports stealth and deferred fontification. -See the documentation of the function `jit-lock-mode' for more -details. - -Font-lock uses jit-lock-mode as default support mode, so you don't -have to do anything to activate it. - -** The default binding of the Delete key has changed. - -The new user-option `normal-erase-is-backspace' can be set to -determine the effect of the Delete and Backspace function keys. - -On window systems, the default value of this option is chosen -according to the keyboard used. If the keyboard has both a Backspace -key and a Delete key, and both are mapped to their usual meanings, the -option's default value is set to t, so that Backspace can be used to -delete backward, and Delete can be used to delete forward. On -keyboards which either have only one key (usually labeled DEL), or two -keys DEL and BS which produce the same effect, the option's value is -set to nil, and these keys delete backward. - -If not running under a window system, setting this option accomplishes -a similar effect by mapping C-h, which is usually generated by the -Backspace key, to DEL, and by mapping DEL to C-d via -`keyboard-translate'. The former functionality of C-h is available on -the F1 key. You should probably not use this setting on a text-only -terminal if you don't have both Backspace, Delete and F1 keys. - -Programmatically, you can call function normal-erase-is-backspace-mode -to toggle the behavior of the Delete and Backspace keys. - -** The default for user-option `next-line-add-newlines' has been -changed to nil, i.e. C-n will no longer add newlines at the end of a -buffer by default. - -** The and keys now move to the beginning or end of the -current line, respectively. C- and C- move to the -beginning and end of the buffer. - -** Emacs now checks for recursive loads of Lisp files. If the -recursion depth exceeds `recursive-load-depth-limit', an error is -signaled. - -** When an error is signaled during the loading of the user's init -file, Emacs now pops up the *Messages* buffer. - -** Emacs now refuses to load compiled Lisp files which weren't -compiled with Emacs. Set `load-dangerous-libraries' to t to change -this behavior. - -The reason for this change is an incompatible change in XEmacs's byte -compiler. Files compiled with XEmacs can contain byte codes that let -Emacs dump core. - -** Toggle buttons and radio buttons in menus. - -When compiled with LessTif (or Motif) support, Emacs uses toolkit -widgets for radio and toggle buttons in menus. When configured for -Lucid, Emacs draws radio buttons and toggle buttons similar to Motif. - -** The menu bar configuration has changed. The new configuration is -more CUA-compliant. The most significant change is that Options is -now a separate menu-bar item, with Mule and Customize as its submenus. - -** Item Save Options on the Options menu allows saving options set -using that menu. - -** Highlighting of trailing whitespace. - -When `show-trailing-whitespace' is non-nil, Emacs displays trailing -whitespace in the face `trailing-whitespace'. Trailing whitespace is -defined as spaces or tabs at the end of a line. To avoid busy -highlighting when entering new text, trailing whitespace is not -displayed if point is at the end of the line containing the -whitespace. - -** C-x 5 1 runs the new command delete-other-frames which deletes -all frames except the selected one. - -** The new user-option `confirm-kill-emacs' can be customized to -let Emacs ask for confirmation before exiting. - -** The header line in an Info buffer is now displayed as an emacs -header-line (which is like a mode-line, but at the top of the window), -so that it remains visible even when the buffer has been scrolled. -This behavior may be disabled by customizing the option -`Info-use-header-line'. - -** Polish, Czech, German, and French translations of Emacs' reference card -have been added. They are named `pl-refcard.tex', `cs-refcard.tex', -`de-refcard.tex' and `fr-refcard.tex'. Postscript files are included. - -** An `Emacs Survival Guide', etc/survival.tex, is available. - -** A reference card for Dired has been added. Its name is -`dired-ref.tex'. A French translation is available in -`fr-drdref.tex'. - -** C-down-mouse-3 is bound differently. Now if the menu bar is not -displayed it pops up a menu containing the items which would be on the -menu bar. If the menu bar is displayed, it pops up the major mode -menu or the Edit menu if there is no major mode menu. - -** Variable `load-path' is no longer customizable through Customize. - -You can no longer use `M-x customize-variable' to customize `load-path' -because it now contains a version-dependent component. You can still -use `add-to-list' and `setq' to customize this variable in your -`~/.emacs' init file or to modify it from any Lisp program in general. - -** C-u C-x = provides detailed information about the character at -point in a pop-up window. - -** Emacs can now support 'wheeled' mice (such as the MS IntelliMouse) -under XFree86. To enable this, use the `mouse-wheel-mode' command, or -customize the variable `mouse-wheel-mode'. - -The variables `mouse-wheel-follow-mouse' and `mouse-wheel-scroll-amount' -determine where and by how much buffers are scrolled. - -** Emacs' auto-save list files are now by default stored in a -sub-directory `.emacs.d/auto-save-list/' of the user's home directory. -(On MS-DOS, this subdirectory's name is `_emacs.d/auto-save.list/'.) -You can customize `auto-save-list-file-prefix' to change this location. - -** The function `getenv' is now callable interactively. - -** The new user-option `even-window-heights' can be set to nil -to prevent `display-buffer' from evening out window heights. - -** The new command M-x delete-trailing-whitespace RET will delete the -trailing whitespace within the current restriction. You can also add -this function to `write-file-hooks' or `local-write-file-hooks'. - -** When visiting a file with M-x find-file-literally, no newlines will -be added to the end of the buffer even if `require-final-newline' is -non-nil. - -** The new user-option `find-file-suppress-same-file-warnings' can be -set to suppress warnings ``X and Y are the same file'' when visiting a -file that is already visited under a different name. - -** The new user-option `electric-help-shrink-window' can be set to -nil to prevent adjusting the help window size to the buffer size. - -** New command M-x describe-character-set reads a character set name -and displays information about that. - -** The new variable `auto-mode-interpreter-regexp' contains a regular -expression matching interpreters, for file mode determination. - -This regular expression is matched against the first line of a file to -determine the file's mode in `set-auto-mode' when Emacs can't deduce a -mode from the file's name. If it matches, the file is assumed to be -interpreted by the interpreter matched by the second group of the -regular expression. The mode is then determined as the mode -associated with that interpreter in `interpreter-mode-alist'. - -** New function executable-make-buffer-file-executable-if-script-p is -suitable as an after-save-hook as an alternative to `executable-chmod'. - -** The most preferred coding-system is now used to save a buffer if -buffer-file-coding-system is `undecided' and it is safe for the buffer -contents. (The most preferred is set by set-language-environment or -by M-x prefer-coding-system.) Thus if you visit an ASCII file and -insert a non-ASCII character from your current language environment, -the file will be saved silently with the appropriate coding. -Previously you would be prompted for a safe coding system. - -** The many obsolete language `setup-...-environment' commands have -been removed -- use `set-language-environment'. - -** The new Custom option `keyboard-coding-system' specifies a coding -system for keyboard input. - -** New variable `inhibit-iso-escape-detection' determines if Emacs' -coding system detection algorithm should pay attention to ISO2022's -escape sequences. If this variable is non-nil, the algorithm ignores -such escape sequences. The default value is nil, and it is -recommended not to change it except for the special case that you -always want to read any escape code verbatim. If you just want to -read a specific file without decoding escape codes, use C-x RET c -(`universal-coding-system-argument'). For instance, C-x RET c latin-1 -RET C-x C-f filename RET. - -** Variable `default-korean-keyboard' is initialized properly from the -environment variable `HANGUL_KEYBOARD_TYPE'. - -** New command M-x list-charset-chars reads a character set name and -displays all characters in that character set. - -** M-x set-terminal-coding-system (C-x RET t) now allows CCL-based -coding systems such as cpXXX and cyrillic-koi8. - -** Emacs now attempts to determine the initial language environment -and preferred and locale coding systems systematically from the -LC_ALL, LC_CTYPE, and LANG environment variables during startup. - -** New language environments `Polish', `Latin-8' and `Latin-9'. -Latin-8 and Latin-9 correspond respectively to the ISO character sets -8859-14 (Celtic) and 8859-15 (updated Latin-1, with the Euro sign). -GNU Intlfonts doesn't support these yet but recent X releases have -8859-15. See etc/INSTALL for information on obtaining extra fonts. -There are new Leim input methods for Latin-8 and Latin-9 prefix (only) -and Polish `slash'. - -** New language environments `Dutch' and `Spanish'. -These new environments mainly select appropriate translations -of the tutorial. - -** In Ethiopic language environment, special key bindings for -function keys are changed as follows. This is to conform to "Emacs -Lisp Coding Convention". - - new command old-binding - --- ------- ----------- - f3 ethio-fidel-to-sera-buffer f5 - S-f3 ethio-fidel-to-sera-region f5 - C-f3 ethio-fidel-to-sera-mail-or-marker f5 - - f4 ethio-sera-to-fidel-buffer unchanged - S-f4 ethio-sera-to-fidel-region unchanged - C-f4 ethio-sera-to-fidel-mail-or-marker unchanged - - S-f5 ethio-toggle-punctuation f3 - S-f6 ethio-modify-vowel f6 - S-f7 ethio-replace-space f7 - S-f8 ethio-input-special-character f8 - S-f9 ethio-replace-space unchanged - C-f9 ethio-toggle-space f2 - -** There are new Leim input methods. -New input methods "turkish-postfix", "turkish-alt-postfix", -"greek-mizuochi", "TeX", and "greek-babel" are now part of the Leim -package. - -** The rule of input method "slovak" is slightly changed. Now the -rules for translating "q" and "Q" to "`" (backquote) are deleted, thus -typing them inserts "q" and "Q" respectively. Rules for translating -"=q", "+q", "=Q", and "+Q" to "`" are also deleted. Now, to input -"`", you must type "=q". - -** When your terminal can't display characters from some of the ISO -8859 character sets but can display Latin-1, you can display -more-or-less mnemonic sequences of ASCII/Latin-1 characters instead of -empty boxes (under a window system) or question marks (not under a -window system). Customize the option `latin1-display' to turn this -on. - -** M-; now calls comment-dwim which tries to do something clever based -on the context. M-x kill-comment is now an alias to comment-kill, -defined in newcomment.el. You can choose different styles of region -commenting with the variable `comment-style'. - -** New user options `display-time-mail-face' and -`display-time-use-mail-icon' control the appearance of mode-line mail -indicator used by the display-time package. On a suitable display the -indicator can be an icon and is mouse-sensitive. - -** On window-systems, additional space can be put between text lines -on the display using several methods - -- By setting frame parameter `line-spacing' to PIXELS. PIXELS must be -a positive integer, and specifies that PIXELS number of pixels should -be put below text lines on the affected frame or frames. - -- By setting X resource `lineSpacing', class `LineSpacing'. This is -equivalent to specifying the frame parameter. - -- By specifying `--line-spacing=N' or `-lsp N' on the command line. - -- By setting buffer-local variable `line-spacing'. The meaning is -the same, but applies to the a particular buffer only. - -** The new command `clone-indirect-buffer' can be used to create -an indirect buffer that is a twin copy of the current buffer. The -command `clone-indirect-buffer-other-window', bound to C-x 4 c, -does the same but displays the indirect buffer in another window. - -** New user options `backup-directory-alist' and -`make-backup-file-name-function' control the placement of backups, -typically in a single directory or in an invisible sub-directory. - -** New commands iso-iso2sgml and iso-sgml2iso convert between Latin-1 -characters and the corresponding SGML (HTML) entities. - -** New X resources recognized - -*** The X resource `synchronous', class `Synchronous', specifies -whether Emacs should run in synchronous mode. Synchronous mode -is useful for debugging X problems. - -Example: - - emacs.synchronous: true - -*** The X resource `visualClass, class `VisualClass', specifies the -visual Emacs should use. The resource's value should be a string of -the form `CLASS-DEPTH', where CLASS is the name of the visual class, -and DEPTH is the requested color depth as a decimal number. Valid -visual class names are - - TrueColor - PseudoColor - DirectColor - StaticColor - GrayScale - StaticGray - -Visual class names specified as X resource are case-insensitive, i.e. -`pseudocolor', `Pseudocolor' and `PseudoColor' all have the same -meaning. - -The program `xdpyinfo' can be used to list the visual classes -supported on your display, and which depths they have. If -`visualClass' is not specified, Emacs uses the display's default -visual. - -Example: - - emacs.visualClass: TrueColor-8 - -*** The X resource `privateColormap', class `PrivateColormap', -specifies that Emacs should use a private colormap if it is using the -default visual, and that visual is of class PseudoColor. Recognized -resource values are `true' or `on'. - -Example: - - emacs.privateColormap: true - -** Faces and frame parameters. - -There are four new faces `scroll-bar', `border', `cursor' and `mouse'. -Setting the frame parameters `scroll-bar-foreground' and -`scroll-bar-background' sets foreground and background color of face -`scroll-bar' and vice versa. Setting frame parameter `border-color' -sets the background color of face `border' and vice versa. Likewise -for frame parameters `cursor-color' and face `cursor', and frame -parameter `mouse-color' and face `mouse'. - -Changing frame parameter `font' sets font-related attributes of the -`default' face and vice versa. Setting frame parameters -`foreground-color' or `background-color' sets the colors of the -`default' face and vice versa. - -** New face `menu'. - -The face `menu' can be used to change colors and font of Emacs' menus. - -** New frame parameter `screen-gamma' for gamma correction. - -The new frame parameter `screen-gamma' specifies gamma-correction for -colors. Its value may be nil, the default, in which case no gamma -correction occurs, or a number > 0, usually a float, that specifies -the screen gamma of a frame's display. - -PC monitors usually have a screen gamma of 2.2. smaller values result -in darker colors. You might want to try a screen gamma of 1.5 for LCD -color displays. The viewing gamma Emacs uses is 0.4545. (1/2.2). - -The X resource name of this parameter is `screenGamma', class -`ScreenGamma'. - -** Tabs and variable-width text. - -Tabs are now displayed with stretch properties; the width of a tab is -defined as a multiple of the normal character width of a frame, and is -independent of the fonts used in the text where the tab appears. -Thus, tabs can be used to line up text in different fonts. - -** Enhancements of the Lucid menu bar - -*** The Lucid menu bar now supports the resource "margin". - - emacs.pane.menubar.margin: 5 - -The default margin is 4 which makes the menu bar appear like the -LessTif/Motif one. - -*** Arrows that indicate sub-menus are now drawn with shadows, as in -LessTif and Motif. - -** A block cursor can be drawn as wide as the glyph under it under X. - -As an example: if a block cursor is over a tab character, it will be -drawn as wide as that tab on the display. To do this, set -`x-stretch-cursor' to a non-nil value. - -** Empty display lines at the end of a buffer may be marked with a -bitmap (this is similar to the tilde displayed by vi and Less). - -This behavior is activated by setting the buffer-local variable -`indicate-empty-lines' to a non-nil value. The default value of this -variable is found in `default-indicate-empty-lines'. - -** There is a new "aggressive" scrolling method. - -When scrolling up because point is above the window start, if the -value of the buffer-local variable `scroll-up-aggressively' is a -number, Emacs chooses a new window start so that point ends up that -fraction of the window's height from the top of the window. - -When scrolling down because point is below the window end, if the -value of the buffer-local variable `scroll-down-aggressively' is a -number, Emacs chooses a new window start so that point ends up that -fraction of the window's height from the bottom of the window. - -** You can now easily create new *Info* buffers using either -M-x clone-buffer, C-u m RET or C-u g RET. -M-x clone-buffer can also be used on *Help* and several other special -buffers. - -** The command `Info-search' now uses a search history. - -** Listing buffers with M-x list-buffers (C-x C-b) now shows -abbreviated file names. Abbreviations can be customized by changing -`directory-abbrev-alist'. - -** A new variable, backup-by-copying-when-privileged-mismatch, gives -the highest file uid for which backup-by-copying-when-mismatch will be -forced on. The assumption is that uids less than or equal to this -value are special uids (root, bin, daemon, etc.--not real system -users) and that files owned by these users should not change ownership, -even if your system policy allows users other than root to edit them. - -The default is 200; set the variable to nil to disable the feature. - -** The rectangle commands now avoid inserting undesirable spaces, -notably at the end of lines. - -All these functions have been rewritten to avoid inserting unwanted -spaces, and an optional prefix now allows them to behave the old way. - -** The function `replace-rectangle' is an alias for `string-rectangle'. - -** The new command M-x string-insert-rectangle is like `string-rectangle', -but inserts text instead of replacing it. - -** The new command M-x query-replace-regexp-eval acts like -query-replace-regexp, but takes a Lisp expression which is evaluated -after each match to get the replacement text. - -** M-x query-replace recognizes a new command `e' (or `E') that lets -you edit the replacement string. - -** The new command mail-abbrev-complete-alias, bound to `M-TAB' -(if you load the library `mailabbrev'), lets you complete mail aliases -in the text, analogous to lisp-complete-symbol. - -** The variable `echo-keystrokes' may now have a floating point value. - -** If your init file is compiled (.emacs.elc), `user-init-file' is set -to the source name (.emacs.el), if that exists, after loading it. - -** The help string specified for a menu-item whose definition contains -the property `:help HELP' is now displayed under X, on MS-Windows, and -MS-DOS, either in the echo area or with tooltips. Many standard menus -displayed by Emacs now have help strings. - --- -** New user option `read-mail-command' specifies a command to use to -read mail from the menu etc. - -** The environment variable `EMACSLOCKDIR' is no longer used on MS-Windows. -This environment variable was used when creating lock files. Emacs on -MS-Windows does not use this variable anymore. This change was made -before Emacs 21.1, but wasn't documented until now. - -** Highlighting of mouse-sensitive regions is now supported in the -MS-DOS version of Emacs. - -** The new command `msdos-set-mouse-buttons' forces the MS-DOS version -of Emacs to behave as if the mouse had a specified number of buttons. -This comes handy with mice that don't report their number of buttons -correctly. One example is the wheeled mice, which report 3 buttons, -but clicks on the middle button are not passed to the MS-DOS version -of Emacs. - -** Customize changes - -*** Customize now supports comments about customized items. Use the -`State' menu to add comments, or give a prefix argument to -M-x customize-set-variable or M-x customize-set-value. Note that -customization comments will cause the customizations to fail in -earlier versions of Emacs. - -*** The new option `custom-buffer-done-function' says whether to kill -Custom buffers when you've done with them or just bury them (the -default). - -*** If Emacs was invoked with the `-q' or `--no-init-file' options, it -does not allow you to save customizations in your `~/.emacs' init -file. This is because saving customizations from such a session would -wipe out all the other customizationss you might have on your init -file. - -** If Emacs was invoked with the `-q' or `--no-init-file' options, it -does not save disabled and enabled commands for future sessions, to -avoid overwriting existing customizations of this kind that are -already in your init file. - -** New features in evaluation commands - -*** The commands to evaluate Lisp expressions, such as C-M-x in Lisp -modes, C-j in Lisp Interaction mode, and M-:, now bind the variables -print-level, print-length, and debug-on-error based on the new -customizable variables eval-expression-print-level, -eval-expression-print-length, and eval-expression-debug-on-error. - -The default values for the first two of these variables are 12 and 4 -respectively, which means that `eval-expression' now prints at most -the first 12 members of a list and at most 4 nesting levels deep (if -the list is longer or deeper than that, an ellipsis `...' is -printed). - - or on the printed text toggles between an abbreviated -printed representation and an unabbreviated one. - -The default value of eval-expression-debug-on-error is t, so any error -during evaluation produces a backtrace. - -*** The function `eval-defun' (C-M-x) now loads Edebug and instruments -code when called with a prefix argument. - -** CC mode changes. - -Note: This release contains changes that might not be compatible with -current user setups (although it's believed that these -incompatibilities will only show in very uncommon circumstances). -However, since the impact is uncertain, these changes may be rolled -back depending on user feedback. Therefore there's no forward -compatibility guarantee wrt the new features introduced in this -release. - -*** The hardcoded switch to "java" style in Java mode is gone. -CC Mode used to automatically set the style to "java" when Java mode -is entered. This has now been removed since it caused too much -confusion. - -However, to keep backward compatibility to a certain extent, the -default value for c-default-style now specifies the "java" style for -java-mode, but "gnu" for all other modes (as before). So you won't -notice the change if you haven't touched that variable. - -*** New cleanups, space-before-funcall and compact-empty-funcall. -Two new cleanups have been added to c-cleanup-list: - -space-before-funcall causes a space to be inserted before the opening -parenthesis of a function call, which gives the style "foo (bar)". - -compact-empty-funcall causes any space before a function call opening -parenthesis to be removed if there are no arguments to the function. -It's typically useful together with space-before-funcall to get the -style "foo (bar)" and "foo()". - -*** Some keywords now automatically trigger reindentation. -Keywords like "else", "while", "catch" and "finally" have been made -"electric" to make them reindent automatically when they continue an -earlier statement. An example: - -for (i = 0; i < 17; i++) - if (a[i]) - res += a[i]->offset; -else - -Here, the "else" should be indented like the preceding "if", since it -continues that statement. CC Mode will automatically reindent it after -the "else" has been typed in full, since it's not until then it's -possible to decide whether it's a new statement or a continuation of -the preceding "if". - -CC Mode uses Abbrev mode to achieve this, which is therefore turned on -by default. - -*** M-a and M-e now moves by sentence in multiline strings. -Previously these two keys only moved by sentence in comments, which -meant that sentence movement didn't work in strings containing -documentation or other natural language text. - -The reason it's only activated in multiline strings (i.e. strings that -contain a newline, even when escaped by a '\') is to avoid stopping in -the short strings that often reside inside statements. Multiline -strings almost always contain text in a natural language, as opposed -to other strings that typically contain format specifications, -commands, etc. Also, it's not that bothersome that M-a and M-e misses -sentences in single line strings, since they're short anyway. - -*** Support for autodoc comments in Pike mode. -Autodoc comments for Pike are used to extract documentation from the -source, like Javadoc in Java. Pike mode now recognize this markup in -comment prefixes and paragraph starts. - -*** The comment prefix regexps on c-comment-prefix may be mode specific. -When c-comment-prefix is an association list, it specifies the comment -line prefix on a per-mode basis, like c-default-style does. This -change came about to support the special autodoc comment prefix in -Pike mode only. - -*** Better handling of syntactic errors. -The recovery after unbalanced parens earlier in the buffer has been -improved; CC Mode now reports them by dinging and giving a message -stating the offending line, but still recovers and indent the -following lines in a sane way (most of the time). An "else" with no -matching "if" is handled similarly. If an error is discovered while -indenting a region, the whole region is still indented and the error -is reported afterwards. - -*** Lineup functions may now return absolute columns. -A lineup function can give an absolute column to indent the line to by -returning a vector with the desired column as the first element. - -*** More robust and warning-free byte compilation. -Although this is strictly not a user visible change (well, depending -on the view of a user), it's still worth mentioning that CC Mode now -can be compiled in the standard ways without causing trouble. Some -code have also been moved between the subpackages to enhance the -modularity somewhat. Thanks to Martin Buchholz for doing the -groundwork. - -*** c-style-variables-are-local-p now defaults to t. -This is an incompatible change that has been made to make the behavior -of the style system wrt global variable settings less confusing for -non-advanced users. If you know what this variable does you might -want to set it to nil in your .emacs, otherwise you probably don't -have to bother. - -Defaulting c-style-variables-are-local-p to t avoids the confusing -situation that occurs when a user sets some style variables globally -and edits both a Java and a non-Java file in the same Emacs session. -If the style variables aren't buffer local in this case, loading of -the second file will cause the default style (either "gnu" or "java" -by default) to override the global settings made by the user. - -*** New initialization procedure for the style system. -When the initial style for a buffer is determined by CC Mode (from the -variable c-default-style), the global values of style variables now -take precedence over the values specified by the chosen style. This -is different than the old behavior: previously, the style-specific -settings would override the global settings. This change makes it -possible to do simple configuration in the intuitive way with -Customize or with setq lines in one's .emacs file. - -By default, the global value of every style variable is the new -special symbol set-from-style, which causes the value to be taken from -the style system. This means that in effect, only an explicit setting -of a style variable will cause the "overriding" behavior described -above. - -Also note that global settings override style-specific settings *only* -when the initial style of a buffer is chosen by a CC Mode major mode -function. When a style is chosen in other ways --- for example, by a -call like (c-set-style "gnu") in a hook, or via M-x c-set-style --- -then the style-specific values take precedence over any global style -values. In Lisp terms, global values override style-specific values -only when the new second argument to c-set-style is non-nil; see the -function documentation for more info. - -The purpose of these changes is to make it easier for users, -especially novice users, to do simple customizations with Customize or -with setq in their .emacs files. On the other hand, the new system is -intended to be compatible with advanced users' customizations as well, -such as those that choose styles in hooks or whatnot. This new system -is believed to be almost entirely compatible with current -configurations, in spite of the changed precedence between style and -global variable settings when a buffer's default style is set. - -(Thanks to Eric Eide for clarifying this explanation a bit.) - -**** c-offsets-alist is now a customizable variable. -This became possible as a result of the new initialization behavior. - -This variable is treated slightly differently from the other style -variables; instead of using the symbol set-from-style, it will be -completed with the syntactic symbols it doesn't already contain when -the style is first initialized. This means it now defaults to the -empty list to make all syntactic elements get their values from the -style system. - -**** Compatibility variable to restore the old behavior. -In case your configuration doesn't work with this change, you can set -c-old-style-variable-behavior to non-nil to get the old behavior back -as far as possible. - -*** Improvements to line breaking and text filling. -CC Mode now handles this more intelligently and seamlessly wrt the -surrounding code, especially inside comments. For details see the new -chapter about this in the manual. - -**** New variable to recognize comment line prefix decorations. -The variable c-comment-prefix-regexp has been added to properly -recognize the line prefix in both block and line comments. It's -primarily used to initialize the various paragraph recognition and -adaptive filling variables that the text handling functions uses. - -**** New variable c-block-comment-prefix. -This is a generalization of the now obsolete variable -c-comment-continuation-stars to handle arbitrary strings. - -**** CC Mode now uses adaptive fill mode. -This to make it adapt better to the paragraph style inside comments. - -It's also possible to use other adaptive filling packages inside CC -Mode, notably Kyle E. Jones' Filladapt mode (http://wonderworks.com/). -A new convenience function c-setup-filladapt sets up Filladapt for use -inside CC Mode. - -Note though that the 2.12 version of Filladapt lacks a feature that -causes it to work suboptimally when c-comment-prefix-regexp can match -the empty string (which it commonly does). A patch for that is -available from the CC Mode web site (http://www.python.org/emacs/ -cc-mode/). - -**** The variables `c-hanging-comment-starter-p' and -`c-hanging-comment-ender-p', which controlled how comment starters and -enders were filled, are not used anymore. The new version of the -function `c-fill-paragraph' keeps the comment starters and enders as -they were before the filling. - -**** It's now possible to selectively turn off auto filling. -The variable c-ignore-auto-fill is used to ignore auto fill mode in -specific contexts, e.g. in preprocessor directives and in string -literals. - -**** New context sensitive line break function c-context-line-break. -It works like newline-and-indent in normal code, and adapts the line -prefix according to the comment style when used inside comments. If -you're normally using newline-and-indent, you might want to switch to -this function. - -*** Fixes to IDL mode. -It now does a better job in recognizing only the constructs relevant -to IDL. E.g. it no longer matches "class" as the beginning of a -struct block, but it does match the CORBA 2.3 "valuetype" keyword. -Thanks to Eric Eide. - -*** Improvements to the Whitesmith style. -It now keeps the style consistently on all levels and both when -opening braces hangs and when they don't. - -**** New lineup function c-lineup-whitesmith-in-block. - -*** New lineup functions c-lineup-template-args and c-indent-multi-line-block. -See their docstrings for details. c-lineup-template-args does a -better job of tracking the brackets used as parens in C++ templates, -and is used by default to line up continued template arguments. - -*** c-lineup-comment now preserves alignment with a comment on the -previous line. It used to instead preserve comments that started in -the column specified by comment-column. - -*** c-lineup-C-comments handles "free form" text comments. -In comments with a long delimiter line at the start, the indentation -is kept unchanged for lines that start with an empty comment line -prefix. This is intended for the type of large block comments that -contain documentation with its own formatting. In these you normally -don't want CC Mode to change the indentation. - -*** The `c' syntactic symbol is now relative to the comment start -instead of the previous line, to make integers usable as lineup -arguments. - -*** All lineup functions have gotten docstrings. - -*** More preprocessor directive movement functions. -c-down-conditional does the reverse of c-up-conditional. -c-up-conditional-with-else and c-down-conditional-with-else are -variants of these that also stops at "#else" lines (suggested by Don -Provan). - -*** Minor improvements to many movement functions in tricky situations. - -** Dired changes - -*** New variable `dired-recursive-deletes' determines if the delete -command will delete non-empty directories recursively. The default -is, delete only empty directories. - -*** New variable `dired-recursive-copies' determines if the copy -command will copy directories recursively. The default is, do not -copy directories recursively. - -*** In command `dired-do-shell-command' (usually bound to `!') a `?' -in the shell command has a special meaning similar to `*', but with -the difference that the command will be run on each file individually. - -*** The new command `dired-find-alternate-file' (usually bound to `a') -replaces the Dired buffer with the buffer for an alternate file or -directory. - -*** The new command `dired-show-file-type' (usually bound to `y') shows -a message in the echo area describing what type of file the point is on. -This command invokes the external program `file' do its work, and so -will only work on systems with that program, and will be only as -accurate or inaccurate as it is. - -*** Dired now properly handles undo changes of adding/removing `-R' -from ls switches. - -*** Dired commands that prompt for a destination file now allow the use -of the `M-n' command in the minibuffer to insert the source filename, -which the user can then edit. This only works if there is a single -source file, not when operating on multiple marked files. - -** Gnus changes. - -The Gnus NEWS entries are short, but they reflect sweeping changes in -four areas: Article display treatment, MIME treatment, -internationalization and mail-fetching. - -*** The mail-fetching functions have changed. See the manual for the -many details. In particular, all procmail fetching variables are gone. - -If you used procmail like in - -(setq nnmail-use-procmail t) -(setq nnmail-spool-file 'procmail) -(setq nnmail-procmail-directory "~/mail/incoming/") -(setq nnmail-procmail-suffix "\\.in") - -this now has changed to - -(setq mail-sources - '((directory :path "~/mail/incoming/" - :suffix ".in"))) - -More information is available in the info doc at Select Methods -> -Getting Mail -> Mail Sources - -*** Gnus is now a MIME-capable reader. This affects many parts of -Gnus, and adds a slew of new commands. See the manual for details. -Separate MIME packages like RMIME, mime-compose etc., will probably no -longer work; remove them and use the native facilities. - -The FLIM/SEMI package still works with Emacs 21, but if you want to -use the native facilities, you must remove any mailcap.el[c] that was -installed by FLIM/SEMI version 1.13 or earlier. - -*** Gnus has also been multilingualized. This also affects too many -parts of Gnus to summarize here, and adds many new variables. There -are built-in facilities equivalent to those of gnus-mule.el, which is -now just a compatibility layer. - -*** gnus-mule.el is now just a compatibility layer over the built-in -Gnus facilities. - -*** gnus-auto-select-first can now be a function to be -called to position point. - -*** The user can now decide which extra headers should be included in -summary buffers and NOV files. - -*** `gnus-article-display-hook' has been removed. Instead, a number -of variables starting with `gnus-treat-' have been added. - -*** The Gnus posting styles have been redone again and now work in a -subtly different manner. - -*** New web-based backends have been added: nnslashdot, nnwarchive -and nnultimate. nnweb has been revamped, again, to keep up with -ever-changing layouts. - -*** Gnus can now read IMAP mail via nnimap. - -*** There is image support of various kinds and some sound support. - -** Changes in Texinfo mode. - -*** A couple of new key bindings have been added for inserting Texinfo -macros - - Key binding Macro - ------------------------- - C-c C-c C-s @strong - C-c C-c C-e @emph - C-c C-c u @uref - C-c C-c q @quotation - C-c C-c m @email - C-c C-o @ ... @end - M-RET @item - -*** The " key now inserts either " or `` or '' depending on context. - -** Changes in Outline mode. - -There is now support for Imenu to index headings. A new command -`outline-headers-as-kill' copies the visible headings in the region to -the kill ring, e.g. to produce a table of contents. - -** Changes to Emacs Server - -*** The new option `server-kill-new-buffers' specifies what to do -with buffers when done with them. If non-nil, the default, buffers -are killed, unless they were already present before visiting them with -Emacs Server. If nil, `server-temp-file-regexp' specifies which -buffers to kill, as before. - -Please note that only buffers are killed that still have a client, -i.e. buffers visited with `emacsclient --no-wait' are never killed in -this way. - -** Both emacsclient and Emacs itself now accept command line options -of the form +LINE:COLUMN in addition to +LINE. - -** Changes to Show Paren mode. - -*** Overlays used by Show Paren mode now use a priority property. -The new user option show-paren-priority specifies the priority to -use. Default is 1000. - -** New command M-x check-parens can be used to find unbalanced paren -groups and strings in buffers in Lisp mode (or other modes). - -** Changes to hideshow.el - -*** Generalized block selection and traversal - -A block is now recognized by its start and end regexps (both strings), -and an integer specifying which sub-expression in the start regexp -serves as the place where a `forward-sexp'-like function can operate. -See the documentation of variable `hs-special-modes-alist'. - -*** During incremental search, if Hideshow minor mode is active, -hidden blocks are temporarily shown. The variable `hs-headline' can -be used in the mode line format to show the line at the beginning of -the open block. - -*** User option `hs-hide-all-non-comment-function' specifies a -function to be called at each top-level block beginning, instead of -the normal block-hiding function. - -*** The command `hs-show-region' has been removed. - -*** The key bindings have changed to fit the Emacs conventions, -roughly imitating those of Outline minor mode. Notably, the prefix -for all bindings is now `C-c @'. For details, see the documentation -for `hs-minor-mode'. - -*** The variable `hs-show-hidden-short-form' has been removed, and -hideshow.el now always behaves as if this variable were set to t. - -** Changes to Change Log mode and Add-Log functions - -*** If you invoke `add-change-log-entry' from a backup file, it makes -an entry appropriate for the file's parent. This is useful for making -log entries by comparing a version with deleted functions. - -**** New command M-x change-log-merge merges another log into the -current buffer. - -*** New command M-x change-log-redate fixes any old-style date entries -in a log file. - -*** Change Log mode now adds a file's version number to change log -entries if user-option `change-log-version-info-enabled' is non-nil. -Unless the file is under version control the search for a file's -version number is performed based on regular expressions from -`change-log-version-number-regexp-list' which can be customized. -Version numbers are only found in the first 10 percent of a file. - -*** Change Log mode now defines its own faces for font-lock highlighting. - -** Changes to cmuscheme - -*** The user-option `scheme-program-name' has been renamed -`cmuscheme-program-name' due to conflicts with xscheme.el. - -** Changes in Font Lock - -*** The new function `font-lock-remove-keywords' can be used to remove -font-lock keywords from the current buffer or from a specific major mode. - -*** Multi-line patterns are now supported. Modes using this, should -set font-lock-multiline to t in their font-lock-defaults. - -*** `font-lock-syntactic-face-function' allows major-modes to choose -the face used for each string/comment. - -*** A new standard face `font-lock-doc-face'. -Meant for Lisp docstrings, Javadoc comments and other "documentation in code". - -** Changes to Shell mode - -*** The `shell' command now accepts an optional argument to specify the buffer -to use, which defaults to "*shell*". When used interactively, a -non-default buffer may be specified by giving the `shell' command a -prefix argument (causing it to prompt for the buffer name). - -** Comint (subshell) changes - -These changes generally affect all modes derived from comint mode, which -include shell-mode, gdb-mode, scheme-interaction-mode, etc. - -*** Comint now by default interprets some carriage-control characters. -Comint now removes CRs from CR LF sequences, and treats single CRs and -BSs in the output in a way similar to a terminal (by deleting to the -beginning of the line, or deleting the previous character, -respectively). This is achieved by adding `comint-carriage-motion' to -the `comint-output-filter-functions' hook by default. - -*** By default, comint no longer uses the variable `comint-prompt-regexp' -to distinguish prompts from user-input. Instead, it notices which -parts of the text were output by the process, and which entered by the -user, and attaches `field' properties to allow emacs commands to use -this information. Common movement commands, notably beginning-of-line, -respect field boundaries in a fairly natural manner. To disable this -feature, and use the old behavior, customize the user option -`comint-use-prompt-regexp-instead-of-fields'. - -*** Comint now includes new features to send commands to running processes -and redirect the output to a designated buffer or buffers. - -*** The command M-x comint-redirect-send-command reads a command and -buffer name from the mini-buffer. The command is sent to the current -buffer's process, and its output is inserted into the specified buffer. - -The command M-x comint-redirect-send-command-to-process acts like -M-x comint-redirect-send-command but additionally reads the name of -the buffer whose process should be used from the mini-buffer. - -*** Packages based on comint now highlight user input and program prompts, -and support choosing previous input with mouse-2. To control these features, -see the user-options `comint-highlight-input' and `comint-highlight-prompt'. - -*** The new command `comint-write-output' (usually bound to `C-c C-s') -saves the output from the most recent command to a file. With a prefix -argument, it appends to the file. - -*** The command `comint-kill-output' has been renamed `comint-delete-output' -(usually bound to `C-c C-o'); the old name is aliased to it for -compatibility. - -*** The new function `comint-add-to-input-history' adds commands to the input -ring (history). - -*** The new variable `comint-input-history-ignore' is a regexp for -identifying history lines that should be ignored, like tcsh time-stamp -strings, starting with a `#'. The default value of this variable is "^#". - -** Changes to Rmail mode - -*** The new user-option rmail-user-mail-address-regexp can be -set to fine tune the identification of the correspondent when -receiving new mail. If it matches the address of the sender, the -recipient is taken as correspondent of a mail. If nil, the default, -`user-login-name' and `user-mail-address' are used to exclude yourself -as correspondent. - -Usually you don't have to set this variable, except if you collect -mails sent by you under different user names. Then it should be a -regexp matching your mail addresses. - -*** The new user-option rmail-confirm-expunge controls whether and how -to ask for confirmation before expunging deleted messages from an -Rmail file. You can choose between no confirmation, confirmation -with y-or-n-p, or confirmation with yes-or-no-p. Default is to ask -for confirmation with yes-or-no-p. - -*** RET is now bound in the Rmail summary to rmail-summary-goto-msg, -like `j'. - -*** There is a new user option `rmail-digest-end-regexps' that -specifies the regular expressions to detect the line that ends a -digest message. - -*** The new user option `rmail-automatic-folder-directives' specifies -in which folder to put messages automatically. - -*** The new function `rmail-redecode-body' allows to fix a message -with non-ASCII characters if Emacs happens to decode it incorrectly -due to missing or malformed "charset=" header. - -** The new user-option `mail-envelope-from' can be used to specify -an envelope-from address different from user-mail-address. - -** The variable mail-specify-envelope-from controls whether to -use the -f option when sending mail. - -** The Rmail command `o' (`rmail-output-to-rmail-file') now writes the -current message in the internal `emacs-mule' encoding, rather than in -the encoding taken from the variable `buffer-file-coding-system'. -This allows to save messages whose characters cannot be safely encoded -by the buffer's coding system, and makes sure the message will be -displayed correctly when you later visit the target Rmail file. - -If you want your Rmail files be encoded in a specific coding system -other than `emacs-mule', you can customize the variable -`rmail-file-coding-system' to set its value to that coding system. - -** Changes to TeX mode - -*** The default mode has been changed from `plain-tex-mode' to -`latex-mode'. - -*** latex-mode now has a simple indentation algorithm. - -*** M-f and M-p jump around \begin...\end pairs. - -*** Added support for outline-minor-mode. - -** Changes to RefTeX mode - -*** RefTeX has new support for index generation. Index entries can be - created with `C-c <', with completion available on index keys. - Pressing `C-c /' indexes the word at the cursor with a default - macro. `C-c >' compiles all index entries into an alphabetically - sorted *Index* buffer which looks like the final index. Entries - can be edited from that buffer. - -*** Label and citation key selection now allow to select several - items and reference them together (use `m' to mark items, `a' or - `A' to use all marked entries). - -*** reftex.el has been split into a number of smaller files to reduce - memory use when only a part of RefTeX is being used. - -*** a new command `reftex-view-crossref-from-bibtex' (bound to `C-c &' - in BibTeX-mode) can be called in a BibTeX database buffer in order - to show locations in LaTeX documents where a particular entry has - been cited. - -** Emacs Lisp mode now allows multiple levels of outline headings. -The level of a heading is determined from the number of leading -semicolons in a heading line. Toplevel forms starting with a `(' -in column 1 are always made leaves. - -** The M-x time-stamp command (most commonly used on write-file-hooks) -has the following new features: - -*** The patterns for finding the time stamp and for updating a pattern -may match text spanning multiple lines. For example, some people like -to have the filename and date on separate lines. The new variable -time-stamp-inserts-lines controls the matching for multi-line patterns. - -*** More than one time stamp can be updated in the same file. This -feature is useful if you need separate time stamps in a program source -file to both include in formatted documentation and insert in the -compiled binary. The same time-stamp will be written at each matching -pattern. The variable time-stamp-count enables this new feature; it -defaults to 1. - -** Partial Completion mode now completes environment variables in -file names. - -** Ispell changes - -*** The command `ispell' now spell-checks a region if -transient-mark-mode is on, and the mark is active. Otherwise it -spell-checks the current buffer. - -*** Support for synchronous subprocesses - DOS/Windoze - has been -added. - -*** An "alignment error" bug was fixed when a manual spelling -correction is made and re-checked. - -*** Italian, Portuguese, and Slovak dictionary definitions have been added. - -*** Region skipping performance has been vastly improved in some -cases. - -*** Spell checking HTML buffers has been improved and isn't so strict -on syntax errors. - -*** The buffer-local words are now always placed on a new line at the -end of the buffer. - -*** Spell checking now works in the MS-DOS version of Emacs. - -*** The variable `ispell-format-word' has been renamed to -`ispell-format-word-function'. The old name is still available as -alias. - -** Makefile mode changes - -*** The mode now uses the abbrev table `makefile-mode-abbrev-table'. - -*** Conditionals and include statements are now highlighted when -Fontlock mode is active. - -** Isearch changes - -*** Isearch now puts a call to `isearch-resume' in the command history, -so that searches can be resumed. - -*** In Isearch mode, C-M-s and C-M-r are now bound like C-s and C-r, -respectively, i.e. you can repeat a regexp isearch with the same keys -that started the search. - -*** In Isearch mode, mouse-2 in the echo area now yanks the current -selection into the search string rather than giving an error. - -*** There is a new lazy highlighting feature in incremental search. - -Lazy highlighting is switched on/off by customizing variable -`isearch-lazy-highlight'. When active, all matches for the current -search string are highlighted. The current match is highlighted as -before using face `isearch' or `region'. All other matches are -highlighted using face `isearch-lazy-highlight-face' which defaults to -`secondary-selection'. - -The extra highlighting makes it easier to anticipate where the cursor -will end up each time you press C-s or C-r to repeat a pending search. -Highlighting of these additional matches happens in a deferred fashion -using "idle timers," so the cycles needed do not rob isearch of its -usual snappy response. - -If `isearch-lazy-highlight-cleanup' is set to t, highlights for -matches are automatically cleared when you end the search. If it is -set to nil, you can remove the highlights manually with `M-x -isearch-lazy-highlight-cleanup'. - -** VC Changes - -VC has been overhauled internally. It is now modular, making it -easier to plug-in arbitrary version control backends. (See Lisp -Changes for details on the new structure.) As a result, the mechanism -to enable and disable support for particular version systems has -changed: everything is now controlled by the new variable -`vc-handled-backends'. Its value is a list of symbols that identify -version systems; the default is '(RCS CVS SCCS). When finding a file, -each of the backends in that list is tried in order to see whether the -file is registered in that backend. - -When registering a new file, VC first tries each of the listed -backends to see if any of them considers itself "responsible" for the -directory of the file (e.g. because a corresponding subdirectory for -master files exists). If none of the backends is responsible, then -the first backend in the list that could register the file is chosen. -As a consequence, the variable `vc-default-back-end' is now obsolete. - -The old variable `vc-master-templates' is also obsolete, although VC -still supports it for backward compatibility. To define templates for -RCS or SCCS, you should rather use the new variables -vc-{rcs,sccs}-master-templates. (There is no such feature under CVS -where it doesn't make sense.) - -The variables `vc-ignore-vc-files' and `vc-handle-cvs' are also -obsolete now, you must set `vc-handled-backends' to nil or exclude -`CVS' from the list, respectively, to achieve their effect now. - -*** General Changes - -The variable `vc-checkout-carefully' is obsolete: the corresponding -checks are always done now. - -VC Dired buffers are now kept up-to-date during all version control -operations. - -`vc-diff' output is now displayed in `diff-mode'. -`vc-print-log' uses `log-view-mode'. -`vc-log-mode' (used for *VC-Log*) has been replaced by `log-edit-mode'. - -The command C-x v m (vc-merge) now accepts an empty argument as the -first revision number. This means that any recent changes on the -current branch should be picked up from the repository and merged into -the working file (``merge news''). - -The commands C-x v s (vc-create-snapshot) and C-x v r -(vc-retrieve-snapshot) now ask for a directory name from which to work -downwards. - -*** Multiple Backends - -VC now lets you register files in more than one backend. This is -useful, for example, if you are working with a slow remote CVS -repository. You can then use RCS for local editing, and occasionally -commit your changes back to CVS, or pick up changes from CVS into your -local RCS archives. - -To make this work, the ``more local'' backend (RCS in our example) -should come first in `vc-handled-backends', and the ``more remote'' -backend (CVS) should come later. (The default value of -`vc-handled-backends' already has it that way.) - -You can then commit changes to another backend (say, RCS), by typing -C-u C-x v v RCS RET (i.e. vc-next-action now accepts a backend name as -a revision number). VC registers the file in the more local backend -if that hasn't already happened, and commits to a branch based on the -current revision number from the more remote backend. - -If a file is registered in multiple backends, you can switch to -another one using C-x v b (vc-switch-backend). This does not change -any files, it only changes VC's perspective on the file. Use this to -pick up changes from CVS while working under RCS locally. - -After you are done with your local RCS editing, you can commit your -changes back to CVS using C-u C-x v v CVS RET. In this case, the -local RCS archive is removed after the commit, and the log entry -buffer is initialized to contain the entire RCS change log of the file. - -*** Changes for CVS - -There is a new user option, `vc-cvs-stay-local'. If it is `t' (the -default), then VC avoids network queries for files registered in -remote repositories. The state of such files is then only determined -by heuristics and past information. `vc-cvs-stay-local' can also be a -regexp to match against repository hostnames; only files from hosts -that match it are treated locally. If the variable is nil, then VC -queries the repository just as often as it does for local files. - -If `vc-cvs-stay-local' is on, then VC also makes local backups of -repository versions. This means that ordinary diffs (C-x v =) and -revert operations (C-x v u) can be done completely locally, without -any repository interactions at all. The name of a local version -backup of FILE is FILE.~REV.~, where REV is the repository version -number. This format is similar to that used by C-x v ~ -(vc-version-other-window), except for the trailing dot. As a matter -of fact, the two features can each use the files created by the other, -the only difference being that files with a trailing `.' are deleted -automatically after commit. (This feature doesn't work on MS-DOS, -since DOS disallows more than a single dot in the trunk of a file -name.) - -If `vc-cvs-stay-local' is on, and there have been changes in the -repository, VC notifies you about it when you actually try to commit. -If you want to check for updates from the repository without trying to -commit, you can either use C-x v m RET to perform an update on the -current file, or you can use C-x v r RET to get an update for an -entire directory tree. - -The new user option `vc-cvs-use-edit' indicates whether VC should call -"cvs edit" to make files writeable; it defaults to `t'. (This option -is only meaningful if the CVSREAD variable is set, or if files are -"watched" by other developers.) - -The commands C-x v s (vc-create-snapshot) and C-x v r -(vc-retrieve-snapshot) are now also implemented for CVS. If you give -an empty snapshot name to the latter, that performs a `cvs update', -starting at the given directory. - -*** Lisp Changes in VC - -VC has been restructured internally to make it modular. You can now -add support for arbitrary version control backends by writing a -library that provides a certain set of backend-specific functions, and -then telling VC to use that library. For example, to add support for -a version system named SYS, you write a library named vc-sys.el, which -provides a number of functions vc-sys-... (see commentary at the top -of vc.el for a detailed list of them). To make VC use that library, -you need to put it somewhere into Emacs' load path and add the symbol -`SYS' to the list `vc-handled-backends'. - -** The customizable EDT emulation package now supports the EDT -SUBS command and EDT scroll margins. It also works with more -terminal/keyboard configurations and it now works under XEmacs. -See etc/edt-user.doc for more information. - -** New modes and packages - -*** The new global minor mode `minibuffer-electric-default-mode' -automatically hides the `(default ...)' part of minibuffer prompts when -the default is not applicable. - -*** Artist is an Emacs lisp package that allows you to draw lines, -rectangles and ellipses by using your mouse and/or keyboard. The -shapes are made up with the ascii characters |, -, / and \. - -Features are: - -- Intersecting: When a `|' intersects with a `-', a `+' is - drawn, like this: | \ / - --+-- X - | / \ - -- Rubber-banding: When drawing lines you can interactively see the - result while holding the mouse button down and moving the mouse. If - your machine is not fast enough (a 386 is a bit too slow, but a - pentium is well enough), you can turn this feature off. You will - then see 1's and 2's which mark the 1st and 2nd endpoint of the line - you are drawing. - -- Arrows: After having drawn a (straight) line or a (straight) - poly-line, you can set arrows on the line-ends by typing < or >. - -- Flood-filling: You can fill any area with a certain character by - flood-filling. - -- Cut copy and paste: You can cut, copy and paste rectangular - regions. Artist also interfaces with the rect package (this can be - turned off if it causes you any trouble) so anything you cut in - artist can be yanked with C-x r y and vice versa. - -- Drawing with keys: Everything you can do with the mouse, you can - also do without the mouse. - -- Aspect-ratio: You can set the variable artist-aspect-ratio to - reflect the height-width ratio for the font you are using. Squares - and circles are then drawn square/round. Note, that once your - ascii-file is shown with font with a different height-width ratio, - the squares won't be square and the circles won't be round. - -- Drawing operations: The following drawing operations are implemented: - - lines straight-lines - rectangles squares - poly-lines straight poly-lines - ellipses circles - text (see-thru) text (overwrite) - spray-can setting size for spraying - vaporize line vaporize lines - erase characters erase rectangles - - Straight lines are lines that go horizontally, vertically or - diagonally. Plain lines go in any direction. The operations in - the right column are accessed by holding down the shift key while - drawing. - - It is possible to vaporize (erase) entire lines and connected lines - (rectangles for example) as long as the lines being vaporized are - straight and connected at their endpoints. Vaporizing is inspired - by the drawrect package by Jari Aalto . - -- Picture mode compatibility: Artist is picture mode compatible (this - can be turned off). - -*** The new package Eshell is an operating system command shell -implemented entirely in Emacs Lisp. Use `M-x eshell' to invoke it. -It functions similarly to bash and zsh, and allows running of Lisp -functions and external commands using the same syntax. It supports -history lists, aliases, extended globbing, smart scrolling, etc. It -will work on any platform Emacs has been ported to. And since most of -the basic commands -- ls, rm, mv, cp, ln, du, cat, etc. -- have been -rewritten in Lisp, it offers an operating-system independent shell, -all within the scope of your Emacs process. - -*** The new package timeclock.el is a mode is for keeping track of time -intervals. You can use it for whatever purpose you like, but the -typical scenario is to keep track of how much time you spend working -on certain projects. - -*** The new package hi-lock.el provides commands to highlight matches -of interactively entered regexps. For example, - - M-x highlight-regexp RET clearly RET RET - -will highlight all occurrences of `clearly' using a yellow background -face. New occurrences of `clearly' will be highlighted as they are -typed. `M-x unhighlight-regexp RET' will remove the highlighting. -Any existing face can be used for highlighting and a set of -appropriate faces is provided. The regexps can be written into the -current buffer in a form that will be recognized the next time the -corresponding file is read. There are commands to highlight matches -to phrases and to highlight entire lines containing a match. - -*** The new package zone.el plays games with Emacs' display when -Emacs is idle. - -*** The new package tildify.el allows to add hard spaces or other text -fragments in accordance with the current major mode. - -*** The new package xml.el provides a simple but generic XML -parser. It doesn't parse the DTDs however. - -*** The comment operations are now provided by the newcomment.el -package which allows different styles of comment-region and should -be more robust while offering the same functionality. -`comment-region' now doesn't always comment a-line-at-a-time, but only -comments the region, breaking the line at point if necessary. - -*** The Ebrowse package implements a C++ class browser and tags -facilities tailored for use with C++. It is documented in a -separate Texinfo file. - -*** The PCL-CVS package available by either running M-x cvs-examine or -by visiting a CVS administrative directory (with a prefix argument) -provides an alternative interface to VC-dired for CVS. It comes with -`log-view-mode' to view RCS and SCCS logs and `log-edit-mode' used to -enter check-in log messages. - -*** The new package called `woman' allows to browse Unix man pages -without invoking external programs. - -The command `M-x woman' formats manual pages entirely in Emacs Lisp -and then displays them, like `M-x manual-entry' does. Unlike -`manual-entry', `woman' does not invoke any external programs, so it -is useful on systems such as MS-DOS/MS-Windows where the `man' and -Groff or `troff' commands are not readily available. - -The command `M-x woman-find-file' asks for the file name of a man -page, then formats and displays it like `M-x woman' does. - -*** The new command M-x re-builder offers a convenient interface for -authoring regular expressions with immediate visual feedback. - -The buffer from which the command was called becomes the target for -the regexp editor popping up in a separate window. Matching text in -the target buffer is immediately color marked during the editing. -Each sub-expression of the regexp will show up in a different face so -even complex regexps can be edited and verified on target data in a -single step. - -On displays not supporting faces the matches instead blink like -matching parens to make them stand out. On such a setup you will -probably also want to use the sub-expression mode when the regexp -contains such to get feedback about their respective limits. - -*** glasses-mode is a minor mode that makes -unreadableIdentifiersLikeThis readable. It works as glasses, without -actually modifying content of a buffer. - -*** The package ebnf2ps translates an EBNF to a syntactic chart in -PostScript. - -Currently accepts ad-hoc EBNF, ISO EBNF and Bison/Yacc. - -The ad-hoc default EBNF syntax has the following elements: - - ; comment (until end of line) - A non-terminal - "C" terminal - ?C? special - $A default non-terminal - $"C" default terminal - $?C? default special - A = B. production (A is the header and B the body) - C D sequence (C occurs before D) - C | D alternative (C or D occurs) - A - B exception (A excluding B, B without any non-terminal) - n * A repetition (A repeats n (integer) times) - (C) group (expression C is grouped together) - [C] optional (C may or not occurs) - C+ one or more occurrences of C - {C}+ one or more occurrences of C - {C}* zero or more occurrences of C - {C} zero or more occurrences of C - C / D equivalent to: C {D C}* - {C || D}+ equivalent to: C {D C}* - {C || D}* equivalent to: [C {D C}*] - {C || D} equivalent to: [C {D C}*] - -Please, see ebnf2ps documentation for EBNF syntax and how to use it. - -*** The package align.el will align columns within a region, using M-x -align. Its mode-specific rules, based on regular expressions, -determine where the columns should be split. In C and C++, for -example, it will align variable names in declaration lists, or the -equal signs of assignments. - -*** `paragraph-indent-minor-mode' is a new minor mode supporting -paragraphs in the same style as `paragraph-indent-text-mode'. - -*** bs.el is a new package for buffer selection similar to -list-buffers or electric-buffer-list. Use M-x bs-show to display a -buffer menu with this package. See the Custom group `bs'. - -*** find-lisp.el is a package emulating the Unix find command in Lisp. - -*** calculator.el is a small calculator package that is intended to -replace desktop calculators such as xcalc and calc.exe. Actually, it -is not too small - it has more features than most desktop calculators, -and can be customized easily to get many more functions. It should -not be confused with "calc" which is a much bigger mathematical tool -which answers different needs. - -*** The minor modes cwarn-mode and global-cwarn-mode highlights -suspicious C and C++ constructions. Currently, assignments inside -expressions, semicolon following `if', `for' and `while' (except, of -course, after a `do .. while' statement), and C++ functions with -reference parameters are recognized. The modes require font-lock mode -to be enabled. - -*** smerge-mode.el provides `smerge-mode', a simple minor-mode for files -containing diff3-style conflict markers, such as generated by RCS. - -*** 5x5.el is a simple puzzle game. - -*** hl-line.el provides `hl-line-mode', a minor mode to highlight the -current line in the current buffer. It also provides -`global-hl-line-mode' to provide the same behavior in all buffers. - -*** ansi-color.el translates ANSI terminal escapes into text-properties. - -Please note: if `ansi-color-for-comint-mode' and -`global-font-lock-mode' are non-nil, loading ansi-color.el will -disable font-lock and add `ansi-color-apply' to -`comint-preoutput-filter-functions' for all shell-mode buffers. This -displays the output of "ls --color=yes" using the correct foreground -and background colors. - -*** delphi.el provides a major mode for editing the Delphi (Object -Pascal) language. - -*** quickurl.el provides a simple method of inserting a URL based on -the text at point. - -*** sql.el provides an interface to SQL data bases. - -*** fortune.el uses the fortune program to create mail/news signatures. - -*** whitespace.el is a package for warning about and cleaning bogus -whitespace in a file. - -*** PostScript mode (ps-mode) is a new major mode for editing PostScript -files. It offers: interaction with a PostScript interpreter, including -(very basic) error handling; fontification, easily customizable for -interpreter messages; auto-indentation; insertion of EPSF templates and -often used code snippets; viewing of BoundingBox; commenting out / -uncommenting regions; conversion of 8bit characters to PostScript octal -codes. All functionality is accessible through a menu. - -*** delim-col helps to prettify columns in a text region or rectangle. - -Here is an example of columns: - -horse apple bus -dog pineapple car EXTRA -porcupine strawberry airplane - -Doing the following settings: - - (setq delimit-columns-str-before "[ ") - (setq delimit-columns-str-after " ]") - (setq delimit-columns-str-separator ", ") - (setq delimit-columns-separator "\t") - - -Selecting the lines above and typing: - - M-x delimit-columns-region - -It results: - -[ horse , apple , bus , ] -[ dog , pineapple , car , EXTRA ] -[ porcupine, strawberry, airplane, ] - -delim-col has the following options: - - delimit-columns-str-before Specify a string to be inserted - before all columns. - - delimit-columns-str-separator Specify a string to be inserted - between each column. - - delimit-columns-str-after Specify a string to be inserted - after all columns. - - delimit-columns-separator Specify a regexp which separates - each column. - -delim-col has the following commands: - - delimit-columns-region Prettify all columns in a text region. - delimit-columns-rectangle Prettify all columns in a text rectangle. - -*** Recentf mode maintains a menu for visiting files that were -operated on recently. User option recentf-menu-filter specifies a -menu filter function to change the menu appearance. For example, the -recent file list can be displayed: - -- organized by major modes, directories or user defined rules. -- sorted by file paths, file names, ascending or descending. -- showing paths relative to the current default-directory - -The `recentf-filter-changer' menu filter function allows to -dynamically change the menu appearance. - -*** elide-head.el provides a mechanism for eliding boilerplate header -text. - -*** footnote.el provides `footnote-mode', a minor mode supporting use -of footnotes. It is intended for use with Message mode, but isn't -specific to Message mode. - -*** diff-mode.el provides `diff-mode', a major mode for -viewing/editing context diffs (patches). It is selected for files -with extension `.diff', `.diffs', `.patch' and `.rej'. - -*** EUDC, the Emacs Unified Directory Client, provides a common user -interface to access directory servers using different directory -protocols. It has a separate manual. - -*** autoconf.el provides a major mode for editing configure.in files -for Autoconf, selected automatically. - -*** windmove.el provides moving between windows. - -*** crm.el provides a facility to read multiple strings from the -minibuffer with completion. - -*** todo-mode.el provides management of TODO lists and integration -with the diary features. - -*** autoarg.el provides a feature reported from Twenex Emacs whereby -numeric keys supply prefix args rather than self inserting. - -*** The function `turn-off-auto-fill' unconditionally turns off Auto -Fill mode. - -*** pcomplete.el is a library that provides programmable completion -facilities for Emacs, similar to what zsh and tcsh offer. The main -difference is that completion functions are written in Lisp, meaning -they can be profiled, debugged, etc. - -*** antlr-mode is a new major mode for editing ANTLR grammar files. -It is automatically turned on for files whose names have the extension -`.g'. - -** Changes in sort.el - -The function sort-numeric-fields interprets numbers starting with `0' -as octal and numbers starting with `0x' or `0X' as hexadecimal. The -new user-option sort-numeric-base can be used to specify a default -numeric base. - -** Changes to Ange-ftp - -*** Ange-ftp allows you to specify of a port number in remote file -names cleanly. It is appended to the host name, separated by a hash -sign, e.g. `/foo@bar.org#666:mumble'. (This syntax comes from EFS.) - -*** If the new user-option `ange-ftp-try-passive-mode' is set, passive -ftp mode will be used if the ftp client supports that. - -*** Ange-ftp handles the output of the w32-style clients which -output ^M at the end of lines. - -** The recommended way of using Iswitchb is via the new global minor -mode `iswitchb-mode'. - -** Just loading the msb package doesn't switch on Msb mode anymore. -If you have `(require 'msb)' in your .emacs, please replace it with -`(msb-mode 1)'. - -** Changes in Flyspell mode - -*** Flyspell mode has various new options. See the `flyspell' Custom -group. - -*** The variable `flyspell-generic-check-word-p' has been renamed -to `flyspell-generic-check-word-predicate'. The old name is still -available as alias. - -** The user option `backward-delete-char-untabify-method' controls the -behavior of `backward-delete-char-untabify'. The following values -are recognized: - -`untabify' -- turn a tab to many spaces, then delete one space; -`hungry' -- delete all whitespace, both tabs and spaces; -`all' -- delete all whitespace, including tabs, spaces and newlines; -nil -- just delete one character. - -Default value is `untabify'. - -[This change was made in Emacs 20.3 but not mentioned then.] - -** In Cperl mode `cperl-invalid-face' should now be a normal face -symbol, not double-quoted. - -** Some packages are declared obsolete, to be removed in a future -version. They are: auto-show, c-mode, hilit19, hscroll, ooutline, -profile, rnews, rnewspost, and sc. Their implementations have been -moved to lisp/obsolete. - -** auto-compression mode is no longer enabled just by loading jka-compr.el. -To control it, set `auto-compression-mode' via Custom or use the -`auto-compression-mode' command. - -** `browse-url-gnome-moz' is a new option for -`browse-url-browser-function', invoking Mozilla in GNOME, and -`browse-url-kde' can be chosen for invoking the KDE browser. - -** The user-option `browse-url-new-window-p' has been renamed to -`browse-url-new-window-flag'. - -** The functions `keep-lines', `flush-lines' and `how-many' now -operate on the active region in Transient Mark mode. - -** `gnus-user-agent' is a new possibility for `mail-user-agent'. It -is like `message-user-agent', but with all the Gnus paraphernalia. - -** The Strokes package has been updated. If your Emacs has XPM -support, you can use it for pictographic editing. In Strokes mode, -use C-mouse-2 to compose a complex stoke and insert it into the -buffer. You can encode or decode a strokes buffer with new commands -M-x strokes-encode-buffer and M-x strokes-decode-buffer. There is a -new command M-x strokes-list-strokes. - -** Hexl contains a new command `hexl-insert-hex-string' which inserts -a string of hexadecimal numbers read from the mini-buffer. - -** Hexl mode allows to insert non-ASCII characters. - -The non-ASCII characters are encoded using the same encoding as the -file you are visiting in Hexl mode. - -** Shell script mode changes. - -Shell script mode (sh-script) can now indent scripts for shells -derived from sh and rc. The indentation style is customizable, and -sh-script can attempt to "learn" the current buffer's style. - -** Etags changes. - -*** In DOS, etags looks for file.cgz if it cannot find file.c. - -*** New option --ignore-case-regex is an alternative to --regex. It is now -possible to bind a regexp to a language, by prepending the regexp with -{lang}, where lang is one of the languages that `etags --help' prints out. -This feature is useful especially for regex files, where each line contains -a regular expression. The manual contains details. - -*** In C and derived languages, etags creates tags for function -declarations when given the --declarations option. - -*** In C++, tags are created for "operator". The tags have the form -"operator+", without spaces between the keyword and the operator. - -*** You shouldn't generally need any more the -C or -c++ option: etags -automatically switches to C++ parsing when it meets the `class' or -`template' keywords. - -*** Etags now is able to delve at arbitrary deeps into nested structures in -C-like languages. Previously, it was limited to one or two brace levels. - -*** New language Ada: tags are functions, procedures, packages, tasks, and -types. - -*** In Fortran, `procedure' is not tagged. - -*** In Java, tags are created for "interface". - -*** In Lisp, "(defstruct (foo", "(defun (operator" and similar constructs -are now tagged. - -*** In makefiles, tags the targets. - -*** In Perl, the --globals option tags global variables. my and local -variables are tagged. - -*** New language Python: def and class at the beginning of a line are tags. - -*** .ss files are Scheme files, .pdb is Postscript with C syntax, .psw is -for PSWrap. - -** Changes in etags.el - -*** The new user-option tags-case-fold-search can be used to make -tags operations case-sensitive or case-insensitive. The default -is to use the same setting as case-fold-search. - -*** You can display additional output with M-x tags-apropos by setting -the new variable tags-apropos-additional-actions. - -If non-nil, the variable's value should be a list of triples (TITLE -FUNCTION TO-SEARCH). For each triple, M-x tags-apropos processes -TO-SEARCH and lists tags from it. TO-SEARCH should be an alist, -obarray, or symbol. If it is a symbol, the symbol's value is used. - -TITLE is a string to use to label the list of tags from TO-SEARCH. - -FUNCTION is a function to call when an entry is selected in the Tags -List buffer. It is called with one argument, the selected symbol. - -A useful example value for this variable might be something like: - - '(("Emacs Lisp" Info-goto-emacs-command-node obarray) - ("Common Lisp" common-lisp-hyperspec common-lisp-hyperspec-obarray) - ("SCWM" scwm-documentation scwm-obarray)) - -*** The face tags-tag-face can be used to customize the appearance -of tags in the output of M-x tags-apropos. - -*** Setting tags-apropos-verbose to a non-nil value displays the -names of tags files in the *Tags List* buffer. - -*** You can now search for tags that are part of the filename itself. -If you have tagged the files topfile.c subdir/subfile.c -/tmp/tempfile.c, you can now search for tags "topfile.c", "subfile.c", -"dir/sub", "tempfile", "tempfile.c". If the tag matches the file name, -point will go to the beginning of the file. - -*** Compressed files are now transparently supported if -auto-compression-mode is active. You can tag (with Etags) and search -(with find-tag) both compressed and uncompressed files. - -*** Tags commands like M-x tags-search no longer change point -in buffers where no match is found. In buffers where a match is -found, the original value of point is pushed on the marker ring. - -** Fortran mode has a new command `fortran-strip-sequence-nos' to -remove text past column 72. The syntax class of `\' in Fortran is now -appropriate for C-style escape sequences in strings. - -** SGML mode's default `sgml-validate-command' is now `nsgmls'. - -** A new command `view-emacs-problems' (C-h P) displays the PROBLEMS file. - -** The Dabbrev package has a new user-option `dabbrev-ignored-regexps' -containing a list of regular expressions. Buffers matching a regular -expression from that list, are not checked. - -** Emacs can now figure out modification times of remote files. -When you do C-x C-f /user@host:/path/file RET and edit the file, -and someone else modifies the file, you will be prompted to revert -the buffer, just like for the local files. - -** The buffer menu (C-x C-b) no longer lists the *Buffer List* buffer. - -** When invoked with a prefix argument, the command `list-abbrevs' now -displays local abbrevs, only. - -** Refill minor mode provides preliminary support for keeping -paragraphs filled as you modify them. - -** The variable `double-click-fuzz' specifies how much the mouse -may be moved between clicks that are recognized as a pair. Its value -is measured in pixels. - -** The new global minor mode `auto-image-file-mode' allows image files -to be visited as images. - -** Two new user-options `grep-command' and `grep-find-command' -were added to compile.el. - -** Withdrawn packages - -*** mldrag.el has been removed. mouse.el provides the same -functionality with aliases for the mldrag functions. - -*** eval-reg.el has been obsoleted by changes to edebug.el and removed. - -*** ph.el has been obsoleted by EUDC and removed. - - -* Incompatible Lisp changes - -There are a few Lisp changes which are not backwards-compatible and -may require changes to existing code. Here is a list for reference. -See the sections below for details. - -** Since `format' preserves text properties, the idiom -`(format "%s" foo)' no longer works to copy and remove properties. -Use `copy-sequence' to copy the string, then use `set-text-properties' -to remove the properties of the copy. - -** Since the `keymap' text property now has significance, some code -which uses both `local-map' and `keymap' properties (for portability) -may, for instance, give rise to duplicate menus when the keymaps from -these properties are active. - -** The change in the treatment of non-ASCII characters in search -ranges may affect some code. - -** A non-nil value for the LOCAL arg of add-hook makes the hook -buffer-local even if `make-local-hook' hasn't been called, which might -make a difference to some code. - -** The new treatment of the minibuffer prompt might affect code which -operates on the minibuffer. - -** The new character sets `eight-bit-control' and `eight-bit-graphic' -cause `no-conversion' and `emacs-mule-unix' coding systems to produce -different results when reading files with non-ASCII characters -(previously, both coding systems would produce the same results). -Specifically, `no-conversion' interprets each 8-bit byte as a separate -character. This makes `no-conversion' inappropriate for reading -multibyte text, e.g. buffers written to disk in their internal MULE -encoding (auto-saving does that, for example). If a Lisp program -reads such files with `no-conversion', each byte of the multibyte -sequence, including the MULE leading codes such as \201, is treated as -a separate character, which prevents them from being interpreted in -the buffer as multibyte characters. - -Therefore, Lisp programs that read files which contain the internal -MULE encoding should use `emacs-mule-unix'. `no-conversion' is only -appropriate for reading truly binary files. - -** Code that relies on the obsolete `before-change-function' and -`after-change-function' to detect buffer changes will now fail. Use -`before-change-functions' and `after-change-functions' instead. - -** Code that uses `concat' with integer args now gets an error, as -long promised. So does any code that uses derivatives of `concat', -such as `mapconcat'. - -** The function base64-decode-string now always returns a unibyte -string. - -** Not a Lisp incompatibility as such but, with the introduction of -extra private charsets, there is now only one slot free for a new -dimension-2 private charset. User code which tries to add more than -one extra will fail unless you rebuild Emacs with some standard -charset(s) removed; that is probably inadvisable because it changes -the emacs-mule encoding. Also, files stored in the emacs-mule -encoding using Emacs 20 with additional private charsets defined will -probably not be read correctly by Emacs 21. - -** The variable `directory-sep-char' is slated for removal. -Not really a change (yet), but a projected one that you should be -aware of: The variable `directory-sep-char' is deprecated, and should -not be used. It was always ignored on GNU/Linux and Unix systems and -on MS-DOS, but the MS-Windows port tried to support it by adapting the -behavior of certain primitives to the value of this variable. It -turned out that such support cannot be reliable, so it was decided to -remove this variable in the near future. Lisp programs are well -advised not to set it to anything but '/', because any different value -will not have any effect when support for this variable is removed. - - -* Lisp changes made after edition 2.6 of the Emacs Lisp Manual, -(Display-related features are described in a page of their own below.) - -** Function assq-delete-all replaces function assoc-delete-all. - -** The new function animate-string, from lisp/play/animate.el -allows the animated display of strings. - -** The new function `interactive-form' can be used to obtain the -interactive form of a function. - -** The keyword :set-after in defcustom allows to specify dependencies -between custom options. Example: - - (defcustom default-input-method nil - "*Default input method for multilingual text (a string). - This is the input method activated automatically by the command - `toggle-input-method' (\\[toggle-input-method])." - :group 'mule - :type '(choice (const nil) string) - :set-after '(current-language-environment)) - -This specifies that default-input-method should be set after -current-language-environment even if default-input-method appears -first in a custom-set-variables statement. - -** The new hook `kbd-macro-termination-hook' is run at the end of -function execute-kbd-macro. Functions on this hook are called with no -args. The hook is run independent of how the macro was terminated -(signal or normal termination). - -** Functions `butlast' and `nbutlast' for removing trailing elements -from a list are now available without requiring the CL package. - -** The new user-option `even-window-heights' can be set to nil -to prevent `display-buffer' from evening out window heights. - -** The user-option `face-font-registry-alternatives' specifies -alternative font registry names to try when looking for a font. - -** Function `md5' calculates the MD5 "message digest"/"checksum". - -** Function `delete-frame' runs `delete-frame-hook' before actually -deleting the frame. The hook is called with one arg, the frame -being deleted. - -** `add-hook' now makes the hook local if called with a non-nil LOCAL arg. - -** The treatment of non-ASCII characters in search ranges has changed. -If a range in a regular expression or the arg of -skip-chars-forward/backward starts with a unibyte character C and ends -with a multibyte character C2, the range is divided into two: one is -C..?\377, the other is C1..C2, where C1 is the first character of C2's -charset. - -** The new function `display-message-or-buffer' displays a message in -the echo area or pops up a buffer, depending on the length of the -message. - -** The new macro `with-auto-compression-mode' allows evaluating an -expression with auto-compression-mode enabled. - -** In image specifications, `:heuristic-mask' has been replaced -with the more general `:mask' property. - -** Image specifications accept more `:conversion's. - -** A `?' can be used in a symbol name without escaping it with a -backslash. - -** Reading from the mini-buffer now reads from standard input if Emacs -is running in batch mode. For example, - - (message "%s" (read t)) - -will read a Lisp expression from standard input and print the result -to standard output. - -** The argument of `down-list', `backward-up-list', `up-list', -`kill-sexp', `backward-kill-sexp' and `mark-sexp' is now optional. - -** If `display-buffer-reuse-frames' is set, function `display-buffer' -will raise frames displaying a buffer, instead of creating a new -frame or window. - -** Two new functions for removing elements from lists/sequences -were added - -- Function: remove ELT SEQ - -Return a copy of SEQ with all occurrences of ELT removed. SEQ must be -a list, vector, or string. The comparison is done with `equal'. - -- Function: remq ELT LIST - -Return a copy of LIST with all occurrences of ELT removed. The -comparison is done with `eq'. - -** The function `delete' now also works with vectors and strings. - -** The meaning of the `:weakness WEAK' argument of make-hash-table -has been changed: WEAK can now have new values `key-or-value' and -`key-and-value', in addition to `nil', `key', `value', and `t'. - -** Function `aset' stores any multibyte character in any string -without signaling "Attempt to change char length of a string". It may -convert a unibyte string to multibyte if necessary. - -** The value of the `help-echo' text property is called as a function -or evaluated, if it is not a string already, to obtain a help string. - -** Function `make-obsolete' now has an optional arg to say when the -function was declared obsolete. - -** Function `plist-member' is renamed from `widget-plist-member' (which is -retained as an alias). - -** Easy-menu's :filter now takes the unconverted form of the menu and -the result is automatically converted to Emacs' form. - -** The new function `window-list' has been defined - -- Function: window-list &optional FRAME WINDOW MINIBUF - -Return a list of windows on FRAME, starting with WINDOW. FRAME nil or -omitted means use the selected frame. WINDOW nil or omitted means use -the selected window. MINIBUF t means include the minibuffer window, -even if it isn't active. MINIBUF nil or omitted means include the -minibuffer window only if it's active. MINIBUF neither nil nor t -means never include the minibuffer window. - -** There's a new function `get-window-with-predicate' defined as follows - -- Function: get-window-with-predicate PREDICATE &optional MINIBUF ALL-FRAMES DEFAULT - -Return a window satisfying PREDICATE. - -This function cycles through all visible windows using `walk-windows', -calling PREDICATE on each one. PREDICATE is called with a window as -argument. The first window for which PREDICATE returns a non-nil -value is returned. If no window satisfies PREDICATE, DEFAULT is -returned. - -Optional second arg MINIBUF t means count the minibuffer window even -if not active. MINIBUF nil or omitted means count the minibuffer iff -it is active. MINIBUF neither t nor nil means not to count the -minibuffer even if it is active. - -Several frames may share a single minibuffer; if the minibuffer -counts, all windows on all frames that share that minibuffer count -too. Therefore, if you are using a separate minibuffer frame -and the minibuffer is active and MINIBUF says it counts, -`walk-windows' includes the windows in the frame from which you -entered the minibuffer, as well as the minibuffer window. - -ALL-FRAMES is the optional third argument. -ALL-FRAMES nil or omitted means cycle within the frames as specified above. -ALL-FRAMES = `visible' means include windows on all visible frames. -ALL-FRAMES = 0 means include windows on all visible and iconified frames. -ALL-FRAMES = t means include windows on all frames including invisible frames. -If ALL-FRAMES is a frame, it means include windows on that frame. -Anything else means restrict to the selected frame. - -** The function `single-key-description' now encloses function key and -event names in angle brackets. When called with a second optional -argument non-nil, angle brackets won't be printed. - -** If the variable `message-truncate-lines' is bound to t around a -call to `message', the echo area will not be resized to display that -message; it will be truncated instead, as it was done in 20.x. -Default value is nil. - -** The user option `line-number-display-limit' can now be set to nil, -meaning no limit. - -** The new user option `line-number-display-limit-width' controls -the maximum width of lines in a buffer for which Emacs displays line -numbers in the mode line. The default is 200. - -** `select-safe-coding-system' now also checks the most preferred -coding-system if buffer-file-coding-system is `undecided' and -DEFAULT-CODING-SYSTEM is not specified, - -** The function `subr-arity' provides information about the argument -list of a primitive. - -** `where-is-internal' now also accepts a list of keymaps. - -** The text property `keymap' specifies a key map which overrides the -buffer's local map and the map specified by the `local-map' property. -This is probably what most current uses of `local-map' want, rather -than replacing the local map. - -** The obsolete variables `before-change-function' and -`after-change-function' are no longer acted upon and have been -removed. Use `before-change-functions' and `after-change-functions' -instead. - -** The function `apropos-mode' runs the hook `apropos-mode-hook'. - -** `concat' no longer accepts individual integer arguments, -as promised long ago. - -** The new function `float-time' returns the current time as a float. - -** The new variable auto-coding-regexp-alist specifies coding systems -for reading specific files, analogous to auto-coding-alist, but -patterns are checked against file contents instead of file names. - - -* Lisp changes in Emacs 21.1 (see following page for display-related features) - -** The new package rx.el provides an alternative sexp notation for -regular expressions. - -- Function: rx-to-string SEXP - -Translate SEXP into a regular expression in string notation. - -- Macro: rx SEXP - -Translate SEXP into a regular expression in string notation. - -The following are valid subforms of regular expressions in sexp -notation. - -STRING - matches string STRING literally. - -CHAR - matches character CHAR literally. - -`not-newline' - matches any character except a newline. - . -`anything' - matches any character - -`(any SET)' - matches any character in SET. SET may be a character or string. - Ranges of characters can be specified as `A-Z' in strings. - -'(in SET)' - like `any'. - -`(not (any SET))' - matches any character not in SET - -`line-start' - matches the empty string, but only at the beginning of a line - in the text being matched - -`line-end' - is similar to `line-start' but matches only at the end of a line - -`string-start' - matches the empty string, but only at the beginning of the - string being matched against. - -`string-end' - matches the empty string, but only at the end of the - string being matched against. - -`buffer-start' - matches the empty string, but only at the beginning of the - buffer being matched against. - -`buffer-end' - matches the empty string, but only at the end of the - buffer being matched against. - -`point' - matches the empty string, but only at point. - -`word-start' - matches the empty string, but only at the beginning or end of a - word. - -`word-end' - matches the empty string, but only at the end of a word. - -`word-boundary' - matches the empty string, but only at the beginning or end of a - word. - -`(not word-boundary)' - matches the empty string, but not at the beginning or end of a - word. - -`digit' - matches 0 through 9. - -`control' - matches ASCII control characters. - -`hex-digit' - matches 0 through 9, a through f and A through F. - -`blank' - matches space and tab only. - -`graphic' - matches graphic characters--everything except ASCII control chars, - space, and DEL. - -`printing' - matches printing characters--everything except ASCII control chars - and DEL. - -`alphanumeric' - matches letters and digits. (But at present, for multibyte characters, - it matches anything that has word syntax.) - -`letter' - matches letters. (But at present, for multibyte characters, - it matches anything that has word syntax.) - -`ascii' - matches ASCII (unibyte) characters. - -`nonascii' - matches non-ASCII (multibyte) characters. - -`lower' - matches anything lower-case. - -`upper' - matches anything upper-case. - -`punctuation' - matches punctuation. (But at present, for multibyte characters, - it matches anything that has non-word syntax.) - -`space' - matches anything that has whitespace syntax. - -`word' - matches anything that has word syntax. - -`(syntax SYNTAX)' - matches a character with syntax SYNTAX. SYNTAX must be one - of the following symbols. - - `whitespace' (\\s- in string notation) - `punctuation' (\\s.) - `word' (\\sw) - `symbol' (\\s_) - `open-parenthesis' (\\s() - `close-parenthesis' (\\s)) - `expression-prefix' (\\s') - `string-quote' (\\s\") - `paired-delimiter' (\\s$) - `escape' (\\s\\) - `character-quote' (\\s/) - `comment-start' (\\s<) - `comment-end' (\\s>) - -`(not (syntax SYNTAX))' - matches a character that has not syntax SYNTAX. - -`(category CATEGORY)' - matches a character with category CATEGORY. CATEGORY must be - either a character to use for C, or one of the following symbols. - - `consonant' (\\c0 in string notation) - `base-vowel' (\\c1) - `upper-diacritical-mark' (\\c2) - `lower-diacritical-mark' (\\c3) - `tone-mark' (\\c4) - `symbol' (\\c5) - `digit' (\\c6) - `vowel-modifying-diacritical-mark' (\\c7) - `vowel-sign' (\\c8) - `semivowel-lower' (\\c9) - `not-at-end-of-line' (\\c<) - `not-at-beginning-of-line' (\\c>) - `alpha-numeric-two-byte' (\\cA) - `chinse-two-byte' (\\cC) - `greek-two-byte' (\\cG) - `japanese-hiragana-two-byte' (\\cH) - `indian-two-byte' (\\cI) - `japanese-katakana-two-byte' (\\cK) - `korean-hangul-two-byte' (\\cN) - `cyrillic-two-byte' (\\cY) - `ascii' (\\ca) - `arabic' (\\cb) - `chinese' (\\cc) - `ethiopic' (\\ce) - `greek' (\\cg) - `korean' (\\ch) - `indian' (\\ci) - `japanese' (\\cj) - `japanese-katakana' (\\ck) - `latin' (\\cl) - `lao' (\\co) - `tibetan' (\\cq) - `japanese-roman' (\\cr) - `thai' (\\ct) - `vietnamese' (\\cv) - `hebrew' (\\cw) - `cyrillic' (\\cy) - `can-break' (\\c|) - -`(not (category CATEGORY))' - matches a character that has not category CATEGORY. - -`(and SEXP1 SEXP2 ...)' - matches what SEXP1 matches, followed by what SEXP2 matches, etc. - -`(submatch SEXP1 SEXP2 ...)' - like `and', but makes the match accessible with `match-end', - `match-beginning', and `match-string'. - -`(group SEXP1 SEXP2 ...)' - another name for `submatch'. - -`(or SEXP1 SEXP2 ...)' - matches anything that matches SEXP1 or SEXP2, etc. If all - args are strings, use `regexp-opt' to optimize the resulting - regular expression. - -`(minimal-match SEXP)' - produce a non-greedy regexp for SEXP. Normally, regexps matching - zero or more occurrences of something are \"greedy\" in that they - match as much as they can, as long as the overall regexp can - still match. A non-greedy regexp matches as little as possible. - -`(maximal-match SEXP)' - produce a greedy regexp for SEXP. This is the default. - -`(zero-or-more SEXP)' - matches zero or more occurrences of what SEXP matches. - -`(0+ SEXP)' - like `zero-or-more'. - -`(* SEXP)' - like `zero-or-more', but always produces a greedy regexp. - -`(*? SEXP)' - like `zero-or-more', but always produces a non-greedy regexp. - -`(one-or-more SEXP)' - matches one or more occurrences of A. - -`(1+ SEXP)' - like `one-or-more'. - -`(+ SEXP)' - like `one-or-more', but always produces a greedy regexp. - -`(+? SEXP)' - like `one-or-more', but always produces a non-greedy regexp. - -`(zero-or-one SEXP)' - matches zero or one occurrences of A. - -`(optional SEXP)' - like `zero-or-one'. - -`(? SEXP)' - like `zero-or-one', but always produces a greedy regexp. - -`(?? SEXP)' - like `zero-or-one', but always produces a non-greedy regexp. - -`(repeat N SEXP)' - matches N occurrences of what SEXP matches. - -`(repeat N M SEXP)' - matches N to M occurrences of what SEXP matches. - -`(eval FORM)' - evaluate FORM and insert result. If result is a string, - `regexp-quote' it. - -`(regexp REGEXP)' - include REGEXP in string notation in the result. - -*** The features `md5' and `overlay' are now provided by default. - -*** The special form `save-restriction' now works correctly even if the -buffer is widened inside the save-restriction and changes made outside -the original restriction. Previously, doing this would cause the saved -restriction to be restored incorrectly. - -*** The functions `find-charset-region' and `find-charset-string' include -`eight-bit-control' and/or `eight-bit-graphic' in the returned list -when they find 8-bit characters. Previously, they included `ascii' in a -multibyte buffer and `unknown' in a unibyte buffer. - -*** The functions `set-buffer-multibyte', `string-as-multibyte' and -`string-as-unibyte' change the byte sequence of a buffer or a string -if it contains a character from the `eight-bit-control' character set. - -*** The handling of multibyte sequences in a multibyte buffer is -changed. Previously, a byte sequence matching the pattern -[\200-\237][\240-\377]+ was interpreted as a single character -regardless of the length of the trailing bytes [\240-\377]+. Thus, if -the sequence was longer than what the leading byte indicated, the -extra trailing bytes were ignored by Lisp functions. Now such extra -bytes are independent 8-bit characters belonging to the charset -eight-bit-graphic. - -** Fontsets are now implemented using char-tables. - -A fontset can now be specified for each independent character, for -a group of characters or for a character set rather than just for a -character set as previously. - -*** The arguments of the function `set-fontset-font' are changed. -They are NAME, CHARACTER, FONTNAME, and optional FRAME. The function -modifies fontset NAME to use FONTNAME for CHARACTER. - -CHARACTER may be a cons (FROM . TO), where FROM and TO are non-generic -characters. In that case FONTNAME is used for all characters in the -range FROM and TO (inclusive). CHARACTER may be a charset. In that -case FONTNAME is used for all character in the charset. - -FONTNAME may be a cons (FAMILY . REGISTRY), where FAMILY is the family -name of a font and REGISTRY is a registry name of a font. - -*** Variable x-charset-registry has been deleted. The default charset -registries of character sets are set in the default fontset -"fontset-default". - -*** The function `create-fontset-from-fontset-spec' ignores the second -argument STYLE-VARIANT. It never creates style-variant fontsets. - -** The method of composing characters is changed. Now character -composition is done by a special text property `composition' in -buffers and strings. - -*** Charset composition is deleted. Emacs never creates a `composite -character' which is an independent character with a unique character -code. Thus the following functions handling `composite characters' -have been deleted: composite-char-component, -composite-char-component-count, composite-char-composition-rule, -composite-char-composition-rule and decompose-composite-char delete. -The variables leading-code-composition and min-composite-char have -also been deleted. - -*** Three more glyph reference points are added. They can be used to -specify a composition rule. See the documentation of the variable -`reference-point-alist' for more detail. - -*** The function `compose-region' takes new arguments COMPONENTS and -MODIFICATION-FUNC. With COMPONENTS, you can specify not only a -composition rule but also characters to be composed. Such characters -may differ between buffer and string text. - -*** The function `compose-string' takes new arguments START, END, -COMPONENTS, and MODIFICATION-FUNC. - -*** The function `compose-string' puts text property `composition' -directly on the argument STRING instead of returning a new string. -Likewise, the function `decompose-string' just removes text property -`composition' from STRING. - -*** The new function `find-composition' returns information about -a composition at a specified position in a buffer or a string. - -*** The function `decompose-composite-char' is now labeled as -obsolete. - -** The new coding system `mac-roman' is primarily intended for use on -the Macintosh but may be used generally for Macintosh-encoded text. - -** The new character sets `mule-unicode-0100-24ff', -`mule-unicode-2500-33ff', and `mule-unicode-e000-ffff' have been -introduced for Unicode characters in the range U+0100..U+24FF, -U+2500..U+33FF, U+E000..U+FFFF respectively. - -Note that the character sets are not yet unified in Emacs, so -characters which belong to charsets such as Latin-2, Greek, Hebrew, -etc. and the same characters in the `mule-unicode-*' charsets are -different characters, as far as Emacs is concerned. For example, text -which includes Unicode characters from the Latin-2 locale cannot be -encoded by Emacs with ISO 8859-2 coding system. - -** The new coding system `mule-utf-8' has been added. -It provides limited support for decoding/encoding UTF-8 text. For -details, please see the documentation string of this coding system. - -** The new character sets `japanese-jisx0213-1' and -`japanese-jisx0213-2' have been introduced for the new Japanese -standard JIS X 0213 Plane 1 and Plane 2. - -** The new character sets `latin-iso8859-14' and `latin-iso8859-15' -have been introduced. - -** The new character sets `eight-bit-control' and `eight-bit-graphic' -have been introduced for 8-bit characters in the ranges 0x80..0x9F and -0xA0..0xFF respectively. Note that the multibyte representation of -eight-bit-control is never exposed; this leads to an exception in the -emacs-mule coding system, which encodes everything else to the -buffer/string internal representation. Note that to search for -eight-bit-graphic characters in a multibyte buffer, the search string -must be multibyte, otherwise such characters will be converted to -their multibyte equivalent. - -** If the APPEND argument of `write-region' is an integer, it seeks to -that offset in the file before writing. - -** The function `add-minor-mode' has been added for convenience and -compatibility with XEmacs (and is used internally by define-minor-mode). - -** The function `shell-command' now sets the default directory of the -`*Shell Command Output*' buffer to the default directory of the buffer -from which the command was issued. - -** The functions `query-replace', `query-replace-regexp', -`query-replace-regexp-eval' `map-query-replace-regexp', -`replace-string', `replace-regexp', and `perform-replace' take two -additional optional arguments START and END that specify the region to -operate on. - -** The new function `count-screen-lines' is a more flexible alternative -to `window-buffer-height'. - -- Function: count-screen-lines &optional BEG END COUNT-FINAL-NEWLINE WINDOW - -Return the number of screen lines in the region between BEG and END. -The number of screen lines may be different from the number of actual -lines, due to line breaking, display table, etc. - -Optional arguments BEG and END default to `point-min' and `point-max' -respectively. - -If region ends with a newline, ignore it unless optional third argument -COUNT-FINAL-NEWLINE is non-nil. - -The optional fourth argument WINDOW specifies the window used for -obtaining parameters such as width, horizontal scrolling, and so -on. The default is to use the selected window's parameters. - -Like `vertical-motion', `count-screen-lines' always uses the current -buffer, regardless of which buffer is displayed in WINDOW. This makes -possible to use `count-screen-lines' in any buffer, whether or not it -is currently displayed in some window. - -** The new function `mapc' is like `mapcar' but doesn't collect the -argument function's results. - -** The functions base64-decode-region and base64-decode-string now -signal an error instead of returning nil if decoding fails. Also, -`base64-decode-string' now always returns a unibyte string (in Emacs -20, it returned a multibyte string when the result was a valid multibyte -sequence). - -** The function sendmail-user-agent-compose now recognizes a `body' -header in the list of headers passed to it. - -** The new function member-ignore-case works like `member', but -ignores differences in case and text representation. - -** The buffer-local variable cursor-type can be used to specify the -cursor to use in windows displaying a buffer. Values are interpreted -as follows: - - t use the cursor specified for the frame (default) - nil don't display a cursor - `bar' display a bar cursor with default width - (bar . WIDTH) display a bar cursor with width WIDTH - others display a box cursor. - -** The variable open-paren-in-column-0-is-defun-start controls whether -an open parenthesis in column 0 is considered to be the start of a -defun. If set, the default, it is considered a defun start. If not -set, an open parenthesis in column 0 has no special meaning. - -** The new function `string-to-syntax' can be used to translate syntax -specifications in string form as accepted by `modify-syntax-entry' to -the cons-cell form that is used for the values of the `syntax-table' -text property, and in `font-lock-syntactic-keywords'. - -Example: - - (string-to-syntax "()") - => (4 . 41) - -** Emacs' reader supports CL read syntax for integers in bases -other than 10. - -*** `#BINTEGER' or `#bINTEGER' reads INTEGER in binary (radix 2). -INTEGER optionally contains a sign. - - #b1111 - => 15 - #b-1111 - => -15 - -*** `#OINTEGER' or `#oINTEGER' reads INTEGER in octal (radix 8). - - #o666 - => 438 - -*** `#XINTEGER' or `#xINTEGER' reads INTEGER in hexadecimal (radix 16). - - #xbeef - => 48815 - -*** `#RADIXrINTEGER' reads INTEGER in radix RADIX, 2 <= RADIX <= 36. - - #2R-111 - => -7 - #25rah - => 267 - -** The function `documentation-property' now evaluates the value of -the given property to obtain a string if it doesn't refer to etc/DOC -and isn't a string. - -** If called for a symbol, the function `documentation' now looks for -a `function-documentation' property of that symbol. If it has a non-nil -value, the documentation is taken from that value. If the value is -not a string, it is evaluated to obtain a string. - -** The last argument of `define-key-after' defaults to t for convenience. - -** The new function `replace-regexp-in-string' replaces all matches -for a regexp in a string. - -** `mouse-position' now runs the abnormal hook -`mouse-position-function'. - -** The function string-to-number now returns a float for numbers -that don't fit into a Lisp integer. - -** The variable keyword-symbols-constants-flag has been removed. -Keywords are now always considered constants. - -** The new function `delete-and-extract-region' deletes text and -returns it. - -** The function `clear-this-command-keys' now also clears the vector -returned by function `recent-keys'. - -** Variables `beginning-of-defun-function' and `end-of-defun-function' -can be used to define handlers for the functions that find defuns. -Major modes can define these locally instead of rebinding C-M-a -etc. if the normal conventions for defuns are not appropriate for the -mode. - -** easy-mmode-define-minor-mode now takes an additional BODY argument -and is renamed `define-minor-mode'. - -** If an abbrev has a hook function which is a symbol, and that symbol -has a non-nil `no-self-insert' property, the return value of the hook -function specifies whether an expansion has been done or not. If it -returns nil, abbrev-expand also returns nil, meaning "no expansion has -been performed." - -When abbrev expansion is done by typing a self-inserting character, -and the abbrev has a hook with the `no-self-insert' property, and the -hook function returns non-nil meaning expansion has been done, -then the self-inserting character is not inserted. - -** The function `intern-soft' now accepts a symbol as first argument. -In this case, that exact symbol is looked up in the specified obarray, -and the function's value is nil if it is not found. - -** The new macro `with-syntax-table' can be used to evaluate forms -with the syntax table of the current buffer temporarily set to a -specified table. - - (with-syntax-table TABLE &rest BODY) - -Evaluate BODY with syntax table of current buffer set to a copy of -TABLE. The current syntax table is saved, BODY is evaluated, and the -saved table is restored, even in case of an abnormal exit. Value is -what BODY returns. - -** Regular expressions now support intervals \{n,m\} as well as -Perl's shy-groups \(?:...\) and non-greedy *? +? and ?? operators. -Also back-references like \2 are now considered as an error if the -corresponding subgroup does not exist (or is not closed yet). -Previously it would have been silently turned into `2' (ignoring the `\'). - -** The optional argument BUFFER of function file-local-copy has been -removed since it wasn't used by anything. - -** The file name argument of function `file-locked-p' is now required -instead of being optional. - -** The new built-in error `text-read-only' is signaled when trying to -modify read-only text. - -** New functions and variables for locales. - -The new variable `locale-coding-system' specifies how to encode and -decode strings passed to low-level message functions like strerror and -time functions like strftime. The new variables -`system-messages-locale' and `system-time-locale' give the system -locales to be used when invoking these two types of functions. - -The new function `set-locale-environment' sets the language -environment, preferred coding system, and locale coding system from -the system locale as specified by the LC_ALL, LC_CTYPE, and LANG -environment variables. Normally, it is invoked during startup and need -not be invoked thereafter. It uses the new variables -`locale-language-names', `locale-charset-language-names', and -`locale-preferred-coding-systems' to make its decisions. - -** syntax tables now understand nested comments. -To declare a comment syntax as allowing nesting, just add an `n' -modifier to either of the characters of the comment end and the comment -start sequences. - -** The function `pixmap-spec-p' has been renamed `bitmap-spec-p' -because `bitmap' is more in line with the usual X terminology. - -** New function `propertize' - -The new function `propertize' can be used to conveniently construct -strings with text properties. - -- Function: propertize STRING &rest PROPERTIES - -Value is a copy of STRING with text properties assigned as specified -by PROPERTIES. PROPERTIES is a sequence of pairs PROPERTY VALUE, with -PROPERTY being the name of a text property and VALUE being the -specified value of that property. Example: - - (propertize "foo" 'face 'bold 'read-only t) - -** push and pop macros. - -Simple versions of the push and pop macros of Common Lisp -are now defined in Emacs Lisp. These macros allow only symbols -as the place that holds the list to be changed. - -(push NEWELT LISTNAME) add NEWELT to the front of LISTNAME's value. -(pop LISTNAME) return first elt of LISTNAME, and remove it - (thus altering the value of LISTNAME). - -** New dolist and dotimes macros. - -Simple versions of the dolist and dotimes macros of Common Lisp -are now defined in Emacs Lisp. - -(dolist (VAR LIST [RESULT]) BODY...) - Execute body once for each element of LIST, - using the variable VAR to hold the current element. - Then return the value of RESULT, or nil if RESULT is omitted. - -(dotimes (VAR COUNT [RESULT]) BODY...) - Execute BODY with VAR bound to successive integers running from 0, - inclusive, to COUNT, exclusive. - Then return the value of RESULT, or nil if RESULT is omitted. - -** Regular expressions now support Posix character classes such as -[:alpha:], [:space:] and so on. These must be used within a character -class--for instance, [-[:digit:].+] matches digits or a period -or a sign. - -[:digit:] matches 0 through 9 -[:cntrl:] matches ASCII control characters -[:xdigit:] matches 0 through 9, a through f and A through F. -[:blank:] matches space and tab only -[:graph:] matches graphic characters--everything except ASCII control chars, - space, and DEL. -[:print:] matches printing characters--everything except ASCII control chars - and DEL. -[:alnum:] matches letters and digits. - (But at present, for multibyte characters, - it matches anything that has word syntax.) -[:alpha:] matches letters. - (But at present, for multibyte characters, - it matches anything that has word syntax.) -[:ascii:] matches ASCII (unibyte) characters. -[:nonascii:] matches non-ASCII (multibyte) characters. -[:lower:] matches anything lower-case. -[:punct:] matches punctuation. - (But at present, for multibyte characters, - it matches anything that has non-word syntax.) -[:space:] matches anything that has whitespace syntax. -[:upper:] matches anything upper-case. -[:word:] matches anything that has word syntax. - -** Emacs now has built-in hash tables. - -The following functions are defined for hash tables: - -- Function: make-hash-table ARGS - -The argument list ARGS consists of keyword/argument pairs. All arguments -are optional. The following arguments are defined: - -:test TEST - -TEST must be a symbol specifying how to compare keys. Default is `eql'. -Predefined are `eq', `eql' and `equal'. If TEST is not predefined, -it must have been defined with `define-hash-table-test'. - -:size SIZE - -SIZE must be an integer > 0 giving a hint to the implementation how -many elements will be put in the hash table. Default size is 65. - -:rehash-size REHASH-SIZE - -REHASH-SIZE specifies by how much to grow a hash table once it becomes -full. If REHASH-SIZE is an integer, add that to the hash table's old -size to get the new size. Otherwise, REHASH-SIZE must be a float > -1.0, and the new size is computed by multiplying REHASH-SIZE with the -old size. Default rehash size is 1.5. - -:rehash-threshold THRESHOLD - -THRESHOLD must be a float > 0 and <= 1.0 specifying when to resize the -hash table. It is resized when the ratio of (number of entries) / -(size of hash table) is >= THRESHOLD. Default threshold is 0.8. - -:weakness WEAK - -WEAK must be either nil, one of the symbols `key, `value', -`key-or-value', `key-and-value', or t, meaning the same as -`key-and-value'. Entries are removed from weak tables during garbage -collection if their key and/or value are not referenced elsewhere -outside of the hash table. Default are non-weak hash tables. - -- Function: makehash &optional TEST - -Similar to make-hash-table, but only TEST can be specified. - -- Function: hash-table-p TABLE - -Returns non-nil if TABLE is a hash table object. - -- Function: copy-hash-table TABLE - -Returns a copy of TABLE. Only the table itself is copied, keys and -values are shared. - -- Function: hash-table-count TABLE - -Returns the number of entries in TABLE. - -- Function: hash-table-rehash-size TABLE - -Returns the rehash size of TABLE. - -- Function: hash-table-rehash-threshold TABLE - -Returns the rehash threshold of TABLE. - -- Function: hash-table-rehash-size TABLE - -Returns the size of TABLE. - -- Function: hash-table-test TABLE - -Returns the test TABLE uses to compare keys. - -- Function: hash-table-weakness TABLE - -Returns the weakness specified for TABLE. - -- Function: clrhash TABLE - -Clear TABLE. - -- Function: gethash KEY TABLE &optional DEFAULT - -Look up KEY in TABLE and return its associated VALUE or DEFAULT if -not found. - -- Function: puthash KEY VALUE TABLE - -Associate KEY with VALUE in TABLE. If KEY is already associated with -another value, replace the old value with VALUE. - -- Function: remhash KEY TABLE - -Remove KEY from TABLE if it is there. - -- Function: maphash FUNCTION TABLE - -Call FUNCTION for all elements in TABLE. FUNCTION must take two -arguments KEY and VALUE. - -- Function: sxhash OBJ - -Return a hash code for Lisp object OBJ. - -- Function: define-hash-table-test NAME TEST-FN HASH-FN - -Define a new hash table test named NAME. If NAME is specified as -a test in `make-hash-table', the table created will use TEST-FN for -comparing keys, and HASH-FN to compute hash codes for keys. Test -and hash function are stored as symbol property `hash-table-test' -of NAME with a value of (TEST-FN HASH-FN). - -TEST-FN must take two arguments and return non-nil if they are the same. - -HASH-FN must take one argument and return an integer that is the hash -code of the argument. The function should use the whole range of -integer values for hash code computation, including negative integers. - -Example: The following creates a hash table whose keys are supposed to -be strings that are compared case-insensitively. - - (defun case-fold-string= (a b) - (compare-strings a nil nil b nil nil t)) - - (defun case-fold-string-hash (a) - (sxhash (upcase a))) - - (define-hash-table-test 'case-fold 'case-fold-string= - 'case-fold-string-hash)) - - (make-hash-table :test 'case-fold) - -** The Lisp reader handles circular structure. - -It now works to use the #N= and #N# constructs to represent -circular structures. For example, #1=(a . #1#) represents -a cons cell which is its own cdr. - -** The Lisp printer handles circular structure. - -If you bind print-circle to a non-nil value, the Lisp printer outputs -#N= and #N# constructs to represent circular and shared structure. - -** If the second argument to `move-to-column' is anything but nil or -t, that means replace a tab with spaces if necessary to reach the -specified column, but do not add spaces at the end of the line if it -is too short to reach that column. - -** perform-replace has a new feature: the REPLACEMENTS argument may -now be a cons cell (FUNCTION . DATA). This means to call FUNCTION -after each match to get the replacement text. FUNCTION is called with -two arguments: DATA, and the number of replacements already made. - -If the FROM-STRING contains any upper-case letters, -perform-replace also turns off `case-fold-search' temporarily -and inserts the replacement text without altering case in it. - -** The function buffer-size now accepts an optional argument -to specify which buffer to return the size of. - -** The calendar motion commands now run the normal hook -calendar-move-hook after moving point. - -** The new variable small-temporary-file-directory specifies a -directory to use for creating temporary files that are likely to be -small. (Certain Emacs features use this directory.) If -small-temporary-file-directory is nil, they use -temporary-file-directory instead. - -** The variable `inhibit-modification-hooks', if non-nil, inhibits all -the hooks that track changes in the buffer. This affects -`before-change-functions' and `after-change-functions', as well as -hooks attached to text properties and overlay properties. - -** assq-delete-all is a new function that deletes all the -elements of an alist which have a car `eq' to a particular value. - -** make-temp-file provides a more reliable way to create a temporary file. - -make-temp-file is used like make-temp-name, except that it actually -creates the file before it returns. This prevents a timing error, -ensuring that no other job can use the same name for a temporary file. - -** New exclusive-open feature in `write-region' - -The optional seventh arg is now called MUSTBENEW. If non-nil, it insists -on a check for an existing file with the same name. If MUSTBENEW -is `excl', that means to get an error if the file already exists; -never overwrite. If MUSTBENEW is neither nil nor `excl', that means -ask for confirmation before overwriting, but do go ahead and -overwrite the file if the user gives confirmation. - -If the MUSTBENEW argument in `write-region' is `excl', -that means to use a special feature in the `open' system call -to get an error if the file exists at that time. -The error reported is `file-already-exists'. - -** Function `format' now handles text properties. - -Text properties of the format string are applied to the result string. -If the result string is longer than the format string, text properties -ending at the end of the format string are extended to the end of the -result string. - -Text properties from string arguments are applied to the result -string where arguments appear in the result string. - -Example: - - (let ((s1 "hello, %s") - (s2 "world")) - (put-text-property 0 (length s1) 'face 'bold s1) - (put-text-property 0 (length s2) 'face 'italic s2) - (format s1 s2)) - -results in a bold-face string with an italic `world' at the end. - -** Messages can now be displayed with text properties. - -Text properties are handled as described above for function `format'. -The following example displays a bold-face message with an italic -argument in it. - - (let ((msg "hello, %s!") - (arg "world")) - (put-text-property 0 (length msg) 'face 'bold msg) - (put-text-property 0 (length arg) 'face 'italic arg) - (message msg arg)) - -** Sound support - -Emacs supports playing sound files on GNU/Linux and the free BSDs -(Voxware driver and native BSD driver, aka as Luigi's driver). - -Currently supported file formats are RIFF-WAVE (*.wav) and Sun Audio -(*.au). You must configure Emacs with the option `--with-sound=yes' -to enable sound support. - -Sound files can be played by calling (play-sound SOUND). SOUND is a -list of the form `(sound PROPERTY...)'. The function is only defined -when sound support is present for the system on which Emacs runs. The -functions runs `play-sound-functions' with one argument which is the -sound to play, before playing the sound. - -The following sound properties are supported: - -- `:file FILE' - -FILE is a file name. If FILE isn't an absolute name, it will be -searched relative to `data-directory'. - -- `:data DATA' - -DATA is a string containing sound data. Either :file or :data -may be present, but not both. - -- `:volume VOLUME' - -VOLUME must be an integer in the range 0..100 or a float in the range -0..1. This property is optional. - -- `:device DEVICE' - -DEVICE is a string specifying the system device on which to play the -sound. The default device is system-dependent. - -Other properties are ignored. - -An alternative interface is called as -(play-sound-file FILE &optional VOLUME DEVICE). - -** `multimedia' is a new Finder keyword and Custom group. - -** keywordp is a new predicate to test efficiently for an object being -a keyword symbol. - -** Changes to garbage collection - -*** The function garbage-collect now additionally returns the number -of live and free strings. - -*** There is a new variable `strings-consed' holding the number of -strings that have been consed so far. - - -* Lisp-level Display features added after release 2.6 of the Emacs -Lisp Manual - -** The user-option `resize-mini-windows' controls how Emacs resizes -mini-windows. - -** The function `pos-visible-in-window-p' now has a third optional -argument, PARTIALLY. If a character is only partially visible, nil is -returned, unless PARTIALLY is non-nil. - -** On window systems, `glyph-table' is no longer used. - -** Help strings in menu items are now used to provide `help-echo' text. - -** The function `image-size' can be used to determine the size of an -image. - -- Function: image-size SPEC &optional PIXELS FRAME - -Return the size of an image as a pair (WIDTH . HEIGHT). - -SPEC is an image specification. PIXELS non-nil means return sizes -measured in pixels, otherwise return sizes measured in canonical -character units (fractions of the width/height of the frame's default -font). FRAME is the frame on which the image will be displayed. -FRAME nil or omitted means use the selected frame. - -** The function `image-mask-p' can be used to determine if an image -has a mask bitmap. - -- Function: image-mask-p SPEC &optional FRAME - -Return t if image SPEC has a mask bitmap. -FRAME is the frame on which the image will be displayed. FRAME nil -or omitted means use the selected frame. - -** The function `find-image' can be used to find a usable image -satisfying one of a list of specifications. - -** The STRING argument of `put-image' and `insert-image' is now -optional. - -** Image specifications may contain the property `:ascent center' (see -below). - - -* New Lisp-level Display features in Emacs 21.1 - -** The function tty-suppress-bold-inverse-default-colors can be used -to make Emacs avoid displaying text with bold black foreground on TTYs. - -Some terminals, notably PC consoles, emulate bold text by displaying -text in brighter colors. On such a console, a bold black foreground -is displayed in a gray color. If this turns out to be hard to read on -your monitor---the problem occurred with the mode line on -laptops---you can instruct Emacs to ignore the text's boldness, and to -just display it black instead. - -This situation can't be detected automatically. You will have to put -a line like - - (tty-suppress-bold-inverse-default-colors t) - -in your `.emacs'. - -** New face implementation. - -Emacs faces have been reimplemented from scratch. They don't use XLFD -font names anymore and face merging now works as expected. - -*** New faces. - -Each face can specify the following display attributes: - - 1. Font family or fontset alias name. - - 2. Relative proportionate width, aka character set width or set - width (swidth), e.g. `semi-compressed'. - - 3. Font height in 1/10pt - - 4. Font weight, e.g. `bold'. - - 5. Font slant, e.g. `italic'. - - 6. Foreground color. - - 7. Background color. - - 8. Whether or not characters should be underlined, and in what color. - - 9. Whether or not characters should be displayed in inverse video. - - 10. A background stipple, a bitmap. - - 11. Whether or not characters should be overlined, and in what color. - - 12. Whether or not characters should be strike-through, and in what - color. - - 13. Whether or not a box should be drawn around characters, its - color, the width of the box lines, and 3D appearance. - -Faces are frame-local by nature because Emacs allows to define the -same named face (face names are symbols) differently for different -frames. Each frame has an alist of face definitions for all named -faces. The value of a named face in such an alist is a Lisp vector -with the symbol `face' in slot 0, and a slot for each of the face -attributes mentioned above. - -There is also a global face alist `face-new-frame-defaults'. Face -definitions from this list are used to initialize faces of newly -created frames. - -A face doesn't have to specify all attributes. Those not specified -have a nil value. Faces specifying all attributes are called -`fully-specified'. - -*** Face merging. - -The display style of a given character in the text is determined by -combining several faces. This process is called `face merging'. Any -aspect of the display style that isn't specified by overlays or text -properties is taken from the `default' face. Since it is made sure -that the default face is always fully-specified, face merging always -results in a fully-specified face. - -*** Face realization. - -After all face attributes for a character have been determined by -merging faces of that character, that face is `realized'. The -realization process maps face attributes to what is physically -available on the system where Emacs runs. The result is a `realized -face' in form of an internal structure which is stored in the face -cache of the frame on which it was realized. - -Face realization is done in the context of the charset of the -character to display because different fonts and encodings are used -for different charsets. In other words, for characters of different -charsets, different realized faces are needed to display them. - -Except for composite characters, faces are always realized for a -specific character set and contain a specific font, even if the face -being realized specifies a fontset. The reason is that the result of -the new font selection stage is better than what can be done with -statically defined font name patterns in fontsets. - -In unibyte text, Emacs' charsets aren't applicable; function -`char-charset' reports ASCII for all characters, including those > -0x7f. The X registry and encoding of fonts to use is determined from -the variable `face-default-registry' in this case. The variable is -initialized at Emacs startup time from the font the user specified for -Emacs. - -Currently all unibyte text, i.e. all buffers with -`enable-multibyte-characters' nil are displayed with fonts of the same -registry and encoding `face-default-registry'. This is consistent -with the fact that languages can also be set globally, only. - -**** Clearing face caches. - -The Lisp function `clear-face-cache' can be called to clear face caches -on all frames. If called with a non-nil argument, it will also unload -unused fonts. - -*** Font selection. - -Font selection tries to find the best available matching font for a -given (charset, face) combination. This is done slightly differently -for faces specifying a fontset, or a font family name. - -If the face specifies a fontset name, that fontset determines a -pattern for fonts of the given charset. If the face specifies a font -family, a font pattern is constructed. Charset symbols have a -property `x-charset-registry' for that purpose that maps a charset to -an XLFD registry and encoding in the font pattern constructed. - -Available fonts on the system on which Emacs runs are then matched -against the font pattern. The result of font selection is the best -match for the given face attributes in this font list. - -Font selection can be influenced by the user. - -The user can specify the relative importance he gives the face -attributes width, height, weight, and slant by setting -face-font-selection-order (faces.el) to a list of face attribute -names. The default is (:width :height :weight :slant), and means -that font selection first tries to find a good match for the font -width specified by a face, then---within fonts with that width---tries -to find a best match for the specified font height, etc. - -Setting `face-font-family-alternatives' allows the user to specify -alternative font families to try if a family specified by a face -doesn't exist. - -Setting `face-font-registry-alternatives' allows the user to specify -all alternative font registry names to try for a face specifying a -registry. - -Please note that the interpretations of the above two variables are -slightly different. - -Setting face-ignored-fonts allows the user to ignore specific fonts. - - -**** Scalable fonts - -Emacs can make use of scalable fonts but doesn't do so by default, -since the use of too many or too big scalable fonts may crash XFree86 -servers. - -To enable scalable font use, set the variable -`scalable-fonts-allowed'. A value of nil, the default, means never use -scalable fonts. A value of t means any scalable font may be used. -Otherwise, the value must be a list of regular expressions. A -scalable font may then be used if it matches a regular expression from -that list. Example: - - (setq scalable-fonts-allowed '("muleindian-2$")) - -allows the use of scalable fonts with registry `muleindian-2'. - -*** Functions and variables related to font selection. - -- Function: x-family-fonts &optional FAMILY FRAME - -Return a list of available fonts of family FAMILY on FRAME. If FAMILY -is omitted or nil, list all families. Otherwise, FAMILY must be a -string, possibly containing wildcards `?' and `*'. - -If FRAME is omitted or nil, use the selected frame. Each element of -the result is a vector [FAMILY WIDTH POINT-SIZE WEIGHT SLANT FIXED-P -FULL REGISTRY-AND-ENCODING]. FAMILY is the font family name. -POINT-SIZE is the size of the font in 1/10 pt. WIDTH, WEIGHT, and -SLANT are symbols describing the width, weight and slant of the font. -These symbols are the same as for face attributes. FIXED-P is non-nil -if the font is fixed-pitch. FULL is the full name of the font, and -REGISTRY-AND-ENCODING is a string giving the registry and encoding of -the font. The result list is sorted according to the current setting -of the face font sort order. - -- Function: x-font-family-list - -Return a list of available font families on FRAME. If FRAME is -omitted or nil, use the selected frame. Value is a list of conses -(FAMILY . FIXED-P) where FAMILY is a font family, and FIXED-P is -non-nil if fonts of that family are fixed-pitch. - -- Variable: font-list-limit - -Limit for font matching. If an integer > 0, font matching functions -won't load more than that number of fonts when searching for a -matching font. The default is currently 100. - -*** Setting face attributes. - -For the most part, the new face implementation is interface-compatible -with the old one. Old face attribute related functions are now -implemented in terms of the new functions `set-face-attribute' and -`face-attribute'. - -Face attributes are identified by their names which are keyword -symbols. All attributes can be set to `unspecified'. - -The following attributes are recognized: - -`:family' - -VALUE must be a string specifying the font family, e.g. ``courier'', -or a fontset alias name. If a font family is specified, wild-cards `*' -and `?' are allowed. - -`:width' - -VALUE specifies the relative proportionate width of the font to use. -It must be one of the symbols `ultra-condensed', `extra-condensed', -`condensed', `semi-condensed', `normal', `semi-expanded', `expanded', -`extra-expanded', or `ultra-expanded'. - -`:height' - -VALUE must be either an integer specifying the height of the font to use -in 1/10 pt, a floating point number specifying the amount by which to -scale any underlying face, or a function, which is called with the old -height (from the underlying face), and should return the new height. - -`:weight' - -VALUE specifies the weight of the font to use. It must be one of the -symbols `ultra-bold', `extra-bold', `bold', `semi-bold', `normal', -`semi-light', `light', `extra-light', `ultra-light'. - -`:slant' - -VALUE specifies the slant of the font to use. It must be one of the -symbols `italic', `oblique', `normal', `reverse-italic', or -`reverse-oblique'. - -`:foreground', `:background' - -VALUE must be a color name, a string. - -`:underline' - -VALUE specifies whether characters in FACE should be underlined. If -VALUE is t, underline with foreground color of the face. If VALUE is -a string, underline with that color. If VALUE is nil, explicitly -don't underline. - -`:overline' - -VALUE specifies whether characters in FACE should be overlined. If -VALUE is t, overline with foreground color of the face. If VALUE is a -string, overline with that color. If VALUE is nil, explicitly don't -overline. - -`:strike-through' - -VALUE specifies whether characters in FACE should be drawn with a line -striking through them. If VALUE is t, use the foreground color of the -face. If VALUE is a string, strike-through with that color. If VALUE -is nil, explicitly don't strike through. - -`:box' - -VALUE specifies whether characters in FACE should have a box drawn -around them. If VALUE is nil, explicitly don't draw boxes. If -VALUE is t, draw a box with lines of width 1 in the foreground color -of the face. If VALUE is a string, the string must be a color name, -and the box is drawn in that color with a line width of 1. Otherwise, -VALUE must be a property list of the form `(:line-width WIDTH -:color COLOR :style STYLE)'. If a keyword/value pair is missing from -the property list, a default value will be used for the value, as -specified below. WIDTH specifies the width of the lines to draw; it -defaults to 1. COLOR is the name of the color to draw in, default is -the foreground color of the face for simple boxes, and the background -color of the face for 3D boxes. STYLE specifies whether a 3D box -should be draw. If STYLE is `released-button', draw a box looking -like a released 3D button. If STYLE is `pressed-button' draw a box -that appears like a pressed button. If STYLE is nil, the default if -the property list doesn't contain a style specification, draw a 2D -box. - -`:inverse-video' - -VALUE specifies whether characters in FACE should be displayed in -inverse video. VALUE must be one of t or nil. - -`:stipple' - -If VALUE is a string, it must be the name of a file of pixmap data. -The directories listed in the `x-bitmap-file-path' variable are -searched. Alternatively, VALUE may be a list of the form (WIDTH -HEIGHT DATA) where WIDTH and HEIGHT are the size in pixels, and DATA -is a string containing the raw bits of the bitmap. VALUE nil means -explicitly don't use a stipple pattern. - -For convenience, attributes `:family', `:width', `:height', `:weight', -and `:slant' may also be set in one step from an X font name: - -`:font' - -Set font-related face attributes from VALUE. VALUE must be a valid -XLFD font name. If it is a font name pattern, the first matching font -is used--this is for compatibility with the behavior of previous -versions of Emacs. - -For compatibility with Emacs 20, keywords `:bold' and `:italic' can -be used to specify that a bold or italic font should be used. VALUE -must be t or nil in that case. A value of `unspecified' is not allowed." - -Please see also the documentation of `set-face-attribute' and -`defface'. - -`:inherit' - -VALUE is the name of a face from which to inherit attributes, or a list -of face names. Attributes from inherited faces are merged into the face -like an underlying face would be, with higher priority than underlying faces. - -*** Face attributes and X resources - -The following X resource names can be used to set face attributes -from X resources: - - Face attribute X resource class ------------------------------------------------------------------------ - :family attributeFamily . Face.AttributeFamily - :width attributeWidth Face.AttributeWidth - :height attributeHeight Face.AttributeHeight - :weight attributeWeight Face.AttributeWeight - :slant attributeSlant Face.AttributeSlant - foreground attributeForeground Face.AttributeForeground - :background attributeBackground . Face.AttributeBackground - :overline attributeOverline Face.AttributeOverline - :strike-through attributeStrikeThrough Face.AttributeStrikeThrough - :box attributeBox Face.AttributeBox - :underline attributeUnderline Face.AttributeUnderline - :inverse-video attributeInverse Face.AttributeInverse - :stipple attributeStipple Face.AttributeStipple - or attributeBackgroundPixmap - Face.AttributeBackgroundPixmap - :font attributeFont Face.AttributeFont - :bold attributeBold Face.AttributeBold - :italic attributeItalic . Face.AttributeItalic - :font attributeFont Face.AttributeFont - -*** Text property `face'. - -The value of the `face' text property can now be a single face -specification or a list of such specifications. Each face -specification can be - -1. A symbol or string naming a Lisp face. - -2. A property list of the form (KEYWORD VALUE ...) where each - KEYWORD is a face attribute name, and VALUE is an appropriate value - for that attribute. Please see the doc string of `set-face-attribute' - for face attribute names. - -3. Conses of the form (FOREGROUND-COLOR . COLOR) or - (BACKGROUND-COLOR . COLOR) where COLOR is a color name. This is - for compatibility with previous Emacs versions. - -** Support functions for colors on text-only terminals. - -The function `tty-color-define' can be used to define colors for use -on TTY and MSDOS frames. It maps a color name to a color number on -the terminal. Emacs defines a couple of common color mappings by -default. You can get defined colors with a call to -`defined-colors'. The function `tty-color-clear' can be -used to clear the mapping table. - -** Unified support for colors independent of frame type. - -The new functions `defined-colors', `color-defined-p', `color-values', -and `display-color-p' work for any type of frame. On frames whose -type is neither x nor w32, these functions transparently map X-style -color specifications to the closest colors supported by the frame -display. Lisp programs should use these new functions instead of the -old `x-defined-colors', `x-color-defined-p', `x-color-values', and -`x-display-color-p'. (The old function names are still available for -compatibility; they are now aliases of the new names.) Lisp programs -should no more look at the value of the variable window-system to -modify their color-related behavior. - -The primitives `color-gray-p' and `color-supported-p' also work for -any frame type. - -** Platform-independent functions to describe display capabilities. - -The new functions `display-mouse-p', `display-popup-menus-p', -`display-graphic-p', `display-selections-p', `display-screens', -`display-pixel-width', `display-pixel-height', `display-mm-width', -`display-mm-height', `display-backing-store', `display-save-under', -`display-planes', `display-color-cells', `display-visual-class', and -`display-grayscale-p' describe the basic capabilities of a particular -display. Lisp programs should call these functions instead of testing -the value of the variables `window-system' or `system-type', or calling -platform-specific functions such as `x-display-pixel-width'. - -The new function `display-images-p' returns non-nil if a particular -display can display image files. - -** The minibuffer prompt is now actually inserted in the minibuffer. - -This makes it possible to scroll through the prompt, if you want to. -To disallow this completely (like previous versions of emacs), customize -the variable `minibuffer-prompt-properties', and turn on the -`Inviolable' option. - -The function `minibuffer-prompt-end' returns the current position of the -end of the minibuffer prompt, if the minibuffer is current. -Otherwise, it returns `(point-min)'. - -** New `field' abstraction in buffers. - -There is now code to support an abstraction called `fields' in emacs -buffers. A field is a contiguous region of text with the same `field' -property (which can be a text property or an overlay). - -Many emacs functions, such as forward-word, forward-sentence, -forward-paragraph, beginning-of-line, etc., stop moving when they come -to the boundary between fields; beginning-of-line and end-of-line will -not let the point move past the field boundary, but other movement -commands continue into the next field if repeated. Stopping at field -boundaries can be suppressed programmatically by binding -`inhibit-field-text-motion' to a non-nil value around calls to these -functions. - -Now that the minibuffer prompt is inserted into the minibuffer, it is in -a separate field from the user-input part of the buffer, so that common -editing commands treat the user's text separately from the prompt. - -The following functions are defined for operating on fields: - -- Function: constrain-to-field NEW-POS OLD-POS &optional ESCAPE-FROM-EDGE ONLY-IN-LINE INHIBIT-CAPTURE-PROPERTY - -Return the position closest to NEW-POS that is in the same field as OLD-POS. - -A field is a region of text with the same `field' property. -If NEW-POS is nil, then the current point is used instead, and set to the -constrained position if that is different. - -If OLD-POS is at the boundary of two fields, then the allowable -positions for NEW-POS depends on the value of the optional argument -ESCAPE-FROM-EDGE: If ESCAPE-FROM-EDGE is nil, then NEW-POS is -constrained to the field that has the same `field' char-property -as any new characters inserted at OLD-POS, whereas if ESCAPE-FROM-EDGE -is non-nil, NEW-POS is constrained to the union of the two adjacent -fields. Additionally, if two fields are separated by another field with -the special value `boundary', then any point within this special field is -also considered to be `on the boundary'. - -If the optional argument ONLY-IN-LINE is non-nil and constraining -NEW-POS would move it to a different line, NEW-POS is returned -unconstrained. This useful for commands that move by line, like -C-n or C-a, which should generally respect field boundaries -only in the case where they can still move to the right line. - -If the optional argument INHIBIT-CAPTURE-PROPERTY is non-nil, and OLD-POS has -a non-nil property of that name, then any field boundaries are ignored. - -Field boundaries are not noticed if `inhibit-field-text-motion' is non-nil. - -- Function: delete-field &optional POS - -Delete the field surrounding POS. -A field is a region of text with the same `field' property. -If POS is nil, the value of point is used for POS. - -- Function: field-beginning &optional POS ESCAPE-FROM-EDGE - -Return the beginning of the field surrounding POS. -A field is a region of text with the same `field' property. -If POS is nil, the value of point is used for POS. -If ESCAPE-FROM-EDGE is non-nil and POS is at the beginning of its -field, then the beginning of the *previous* field is returned. - -- Function: field-end &optional POS ESCAPE-FROM-EDGE - -Return the end of the field surrounding POS. -A field is a region of text with the same `field' property. -If POS is nil, the value of point is used for POS. -If ESCAPE-FROM-EDGE is non-nil and POS is at the end of its field, -then the end of the *following* field is returned. - -- Function: field-string &optional POS - -Return the contents of the field surrounding POS as a string. -A field is a region of text with the same `field' property. -If POS is nil, the value of point is used for POS. - -- Function: field-string-no-properties &optional POS - -Return the contents of the field around POS, without text-properties. -A field is a region of text with the same `field' property. -If POS is nil, the value of point is used for POS. - -** Image support. - -Emacs can now display images. Images are inserted into text by giving -strings or buffer text a `display' text property containing one of -(AREA IMAGE) or IMAGE. The display of the `display' property value -replaces the display of the characters having that property. - -If the property value has the form (AREA IMAGE), AREA must be one of -`(margin left-margin)', `(margin right-margin)' or `(margin nil)'. If -AREA is `(margin nil)', IMAGE will be displayed in the text area of a -window, otherwise it will be displayed in the left or right marginal -area. - -IMAGE is an image specification. - -*** Image specifications - -Image specifications are lists of the form `(image PROPS)' where PROPS -is a property list whose keys are keyword symbols. Each -specifications must contain a property `:type TYPE' with TYPE being a -symbol specifying the image type, e.g. `xbm'. Properties not -described below are ignored. - -The following is a list of properties all image types share. - -`:ascent ASCENT' - -ASCENT must be a number in the range 0..100, or the symbol `center'. -If it is a number, it specifies the percentage of the image's height -to use for its ascent. - -If not specified, ASCENT defaults to the value 50 which means that the -image will be centered with the base line of the row it appears in. - -If ASCENT is `center' the image is vertically centered around a -centerline which is the vertical center of text drawn at the position -of the image, in the manner specified by the text properties and -overlays that apply to the image. - -`:margin MARGIN' - -MARGIN must be either a number >= 0 specifying how many pixels to put -as margin around the image, or a pair (X . Y) with X specifying the -horizontal margin and Y specifying the vertical margin. Default is 0. - -`:relief RELIEF' - -RELIEF is analogous to the `:relief' attribute of faces. Puts a relief -around an image. - -`:conversion ALGO' - -Apply an image algorithm to the image before displaying it. - -ALGO `laplace' or `emboss' means apply a Laplace or ``emboss'' -edge-detection algorithm to the image. - -ALGO `(edge-detection :matrix MATRIX :color-adjust ADJUST)' means -apply a general edge-detection algorithm. MATRIX must be either a -nine-element list or a nine-element vector of numbers. A pixel at -position x/y in the transformed image is computed from original pixels -around that position. MATRIX specifies, for each pixel in the -neighborhood of x/y, a factor with which that pixel will influence the -transformed pixel; element 0 specifies the factor for the pixel at -x-1/y-1, element 1 the factor for the pixel at x/y-1 etc. as shown -below. - - (x-1/y-1 x/y-1 x+1/y-1 - x-1/y x/y x+1/y - x-1/y+1 x/y+1 x+1/y+1) - -The resulting pixel is computed from the color intensity of the color -resulting from summing up the RGB values of surrounding pixels, -multiplied by the specified factors, and dividing that sum by the sum -of the factors' absolute values. - -Laplace edge-detection currently uses a matrix of - - (1 0 0 - 0 0 0 - 9 9 -1) - -Emboss edge-detection uses a matrix of - - ( 2 -1 0 - -1 0 1 - 0 1 -2) - -ALGO `disabled' means transform the image so that it looks -``disabled''. - -`:mask MASK' - -If MASK is `heuristic' or `(heuristic BG)', build a clipping mask for -the image, so that the background of a frame is visible behind the -image. If BG is not specified, or if BG is t, determine the -background color of the image by looking at the 4 corners of the -image, assuming the most frequently occurring color from the corners is -the background color of the image. Otherwise, BG must be a list `(RED -GREEN BLUE)' specifying the color to assume for the background of the -image. - -If MASK is nil, remove a mask from the image, if it has one. Images -in some formats include a mask which can be removed by specifying -`:mask nil'. - -`:file FILE' - -Load image from FILE. If FILE is not absolute after expanding it, -search for the image in `data-directory'. Some image types support -building images from data. When this is done, no `:file' property -may be present in the image specification. - -`:data DATA' - -Get image data from DATA. (As of this writing, this is not yet -supported for image type `postscript'). Either :file or :data may be -present in an image specification, but not both. All image types -support strings as DATA, some types allow additional types of DATA. - -*** Supported image types - -**** XBM, image type `xbm'. - -XBM images don't require an external library. Additional image -properties supported are: - -`:foreground FG' - -FG must be a string specifying the image foreground color, or nil -meaning to use the default. Default is the frame's foreground color. - -`:background BG' - -BG must be a string specifying the image background color, or nil -meaning to use the default. Default is the frame's background color. - -XBM images can be constructed from data instead of file. In this -case, the image specification must contain the following properties -instead of a `:file' property. - -`:width WIDTH' - -WIDTH specifies the width of the image in pixels. - -`:height HEIGHT' - -HEIGHT specifies the height of the image in pixels. - -`:data DATA' - -DATA must be either - - 1. a string large enough to hold the bitmap data, i.e. it must - have a size >= (WIDTH + 7) / 8 * HEIGHT - - 2. a bool-vector of size >= WIDTH * HEIGHT - - 3. a vector of strings or bool-vectors, one for each line of the - bitmap. - - 4. a string that's an in-memory XBM file. Neither width nor - height may be specified in this case because these are defined - in the file. - -**** XPM, image type `xpm' - -XPM images require the external library `libXpm', package -`xpm-3.4k.tar.gz', version 3.4k or later. Make sure the library is -found when Emacs is configured by supplying appropriate paths via -`--x-includes' and `--x-libraries'. - -Additional image properties supported are: - -`:color-symbols SYMBOLS' - -SYMBOLS must be a list of pairs (NAME . COLOR), with NAME being the -name of color as it appears in an XPM file, and COLOR being an X color -name. - -XPM images can be built from memory instead of files. In that case, -add a `:data' property instead of a `:file' property. - -The XPM library uses libz in its implementation so that it is able -to display compressed images. - -**** PBM, image type `pbm' - -PBM images don't require an external library. Color, gray-scale and -mono images are supported. Additional image properties supported for -mono images are: - -`:foreground FG' - -FG must be a string specifying the image foreground color, or nil -meaning to use the default. Default is the frame's foreground color. - -`:background FG' - -BG must be a string specifying the image background color, or nil -meaning to use the default. Default is the frame's background color. - -**** JPEG, image type `jpeg' - -Support for JPEG images requires the external library `libjpeg', -package `jpegsrc.v6a.tar.gz', or later. There are no additional image -properties defined. - -**** TIFF, image type `tiff' - -Support for TIFF images requires the external library `libtiff', -package `tiff-v3.4-tar.gz', or later. There are no additional image -properties defined. - -**** GIF, image type `gif' - -Support for GIF images requires the external library `libungif', package -`libungif-4.1.0', or later. - -Additional image properties supported are: - -`:index INDEX' - -INDEX must be an integer >= 0. Load image number INDEX from a -multi-image GIF file. If INDEX is too large, the image displays -as a hollow box. - -This could be used to implement limited support for animated GIFs. -For example, the following function displays a multi-image GIF file -at point-min in the current buffer, switching between sub-images -every 0.1 seconds. - -(defun show-anim (file max) - "Display multi-image GIF file FILE which contains MAX subimages." - (display-anim (current-buffer) file 0 max t)) - -(defun display-anim (buffer file idx max first-time) - (when (= idx max) - (setq idx 0)) - (let ((img (create-image file nil nil :index idx))) - (save-excursion - (set-buffer buffer) - (goto-char (point-min)) - (unless first-time (delete-char 1)) - (insert-image img "x")) - (run-with-timer 0.1 nil 'display-anim buffer file (1+ idx) max nil))) - -**** PNG, image type `png' - -Support for PNG images requires the external library `libpng', -package `libpng-1.0.2.tar.gz', or later. There are no additional image -properties defined. - -**** Ghostscript, image type `postscript'. - -Additional image properties supported are: - -`:pt-width WIDTH' - -WIDTH is width of the image in pt (1/72 inch). WIDTH must be an -integer. This is a required property. - -`:pt-height HEIGHT' - -HEIGHT specifies the height of the image in pt (1/72 inch). HEIGHT -must be a integer. This is an required property. - -`:bounding-box BOX' - -BOX must be a list or vector of 4 integers giving the bounding box of -the PS image, analogous to the `BoundingBox' comment found in PS -files. This is an required property. - -Part of the Ghostscript interface is implemented in Lisp. See -lisp/gs.el. - -*** Lisp interface. - -The variable `image-types' contains a list of those image types -which are supported in the current configuration. - -Images are stored in an image cache and removed from the cache when -they haven't been displayed for `image-cache-eviction-delay seconds. -The function `clear-image-cache' can be used to clear the image cache -manually. Images in the cache are compared with `equal', i.e. all -images with `equal' specifications share the same image. - -*** Simplified image API, image.el - -The new Lisp package image.el contains functions that simplify image -creation and putting images into text. The function `create-image' -can be used to create images. The macro `defimage' can be used to -define an image based on available image types. The functions -`put-image' and `insert-image' can be used to insert an image into a -buffer. - -** Display margins. - -Windows can now have margins which are used for special text -and images. - -To give a window margins, either set the buffer-local variables -`left-margin-width' and `right-margin-width', or call -`set-window-margins'. The function `window-margins' can be used to -obtain the current settings. To make `left-margin-width' and -`right-margin-width' take effect, you must set them before displaying -the buffer in a window, or use `set-window-buffer' to force an update -of the display margins. - -You can put text in margins by giving it a `display' text property -containing a pair of the form `(LOCATION . VALUE)', where LOCATION is -one of `left-margin' or `right-margin' or nil. VALUE can be either a -string, an image specification or a stretch specification (see later -in this file). - -** Help display - -Emacs displays short help messages in the echo area, when the mouse -moves over a tool-bar item or a piece of text that has a text property -`help-echo'. This feature also applies to strings in the mode line -that have a `help-echo' property. - -If the value of the `help-echo' property is a function, that function -is called with three arguments WINDOW, OBJECT and POSITION. WINDOW is -the window in which the help was found. - -If OBJECT is a buffer, POS is the position in the buffer where the -`help-echo' text property was found. - -If OBJECT is an overlay, that overlay has a `help-echo' property, and -POS is the position in the overlay's buffer under the mouse. - -If OBJECT is a string (an overlay string or a string displayed with -the `display' property), POS is the position in that string under the -mouse. - -If the value of the `help-echo' property is neither a function nor a -string, it is evaluated to obtain a help string. - -For tool-bar and menu-bar items, their key definition is used to -determine the help to display. If their definition contains a -property `:help FORM', FORM is evaluated to determine the help string. -For tool-bar items without a help form, the caption of the item is -used as help string. - -The hook `show-help-function' can be set to a function that displays -the help string differently. For example, enabling a tooltip window -causes the help display to appear there instead of in the echo area. - -** Vertical fractional scrolling. - -The display of text in windows can be scrolled smoothly in pixels. -This is useful, for example, for making parts of large images visible. - -The function `window-vscroll' returns the current value of vertical -scrolling, a non-negative fraction of the canonical character height. -The function `set-window-vscroll' can be used to set the vertical -scrolling value. Here is an example of how these function might be -used. - - (global-set-key [A-down] - #'(lambda () - (interactive) - (set-window-vscroll (selected-window) - (+ 0.5 (window-vscroll))))) - (global-set-key [A-up] - #'(lambda () - (interactive) - (set-window-vscroll (selected-window) - (- (window-vscroll) 0.5))))) - -** New hook `fontification-functions'. - -Functions from `fontification-functions' are called from redisplay -when it encounters a region of text that is not yet fontified. This -variable automatically becomes buffer-local when set. Each function -is called with one argument, POS. - -At least one of the hook functions should fontify one or more -characters starting at POS in the current buffer. It should mark them -as fontified by giving them a non-nil value of the `fontified' text -property. It may be reasonable for these functions to check for the -`fontified' property and not put it back on, but they do not have to. - -** Tool bar support. - -Emacs supports a tool bar at the top of a frame under X. The frame -parameter `tool-bar-lines' (X resource "toolBar", class "ToolBar") -controls how may lines to reserve for the tool bar. A zero value -suppresses the tool bar. If the value is non-zero and -`auto-resize-tool-bars' is non-nil the tool bar's size will be changed -automatically so that all tool bar items are visible. - -*** Tool bar item definitions - -Tool bar items are defined using `define-key' with a prefix-key -`tool-bar'. For example `(define-key global-map [tool-bar item1] ITEM)' -where ITEM is a list `(menu-item CAPTION BINDING PROPS...)'. - -CAPTION is the caption of the item, If it's not a string, it is -evaluated to get a string. The caption is currently not displayed in -the tool bar, but it is displayed if the item doesn't have a `:help' -property (see below). - -BINDING is the tool bar item's binding. Tool bar items with keymaps as -binding are currently ignored. - -The following properties are recognized: - -`:enable FORM'. - -FORM is evaluated and specifies whether the tool bar item is enabled -or disabled. - -`:visible FORM' - -FORM is evaluated and specifies whether the tool bar item is displayed. - -`:filter FUNCTION' - -FUNCTION is called with one parameter, the same list BINDING in which -FUNCTION is specified as the filter. The value FUNCTION returns is -used instead of BINDING to display this item. - -`:button (TYPE SELECTED)' - -TYPE must be one of `:radio' or `:toggle'. SELECTED is evaluated -and specifies whether the button is selected (pressed) or not. - -`:image IMAGES' - -IMAGES is either a single image specification or a vector of four -image specifications. If it is a vector, this table lists the -meaning of each of the four elements: - - Index Use when item is - ---------------------------------------- - 0 enabled and selected - 1 enabled and deselected - 2 disabled and selected - 3 disabled and deselected - -If IMAGE is a single image specification, a Laplace edge-detection -algorithm is used on that image to draw the image in disabled state. - -`:help HELP-STRING'. - -Gives a help string to display for the tool bar item. This help -is displayed when the mouse is moved over the item. - -The function `toolbar-add-item' is a convenience function for adding -toolbar items generally, and `tool-bar-add-item-from-menu' can be used -to define a toolbar item with a binding copied from an item on the -menu bar. - -The default bindings use a menu-item :filter to derive the tool-bar -dynamically from variable `tool-bar-map' which may be set -buffer-locally to override the global map. - -*** Tool-bar-related variables. - -If `auto-resize-tool-bar' is non-nil, the tool bar will automatically -resize to show all defined tool bar items. It will never grow larger -than 1/4 of the frame's size. - -If `auto-raise-tool-bar-buttons' is non-nil, tool bar buttons will be -raised when the mouse moves over them. - -You can add extra space between tool bar items by setting -`tool-bar-button-margin' to a positive integer specifying a number of -pixels, or a pair of integers (X . Y) specifying horizontal and -vertical margins . Default is 1. - -You can change the shadow thickness of tool bar buttons by setting -`tool-bar-button-relief' to an integer. Default is 3. - -*** Tool-bar clicks with modifiers. - -You can bind commands to clicks with control, shift, meta etc. on -a tool bar item. If - - (define-key global-map [tool-bar shell] - '(menu-item "Shell" shell - :image (image :type xpm :file "shell.xpm"))) - -is the original tool bar item definition, then - - (define-key global-map [tool-bar S-shell] 'some-command) - -makes a binding to run `some-command' for a shifted click on the same -item. - -** Mode line changes. - -*** Mouse-sensitive mode line. - -The mode line can be made mouse-sensitive by displaying strings there -that have a `local-map' text property. There are three ways to display -a string with a `local-map' property in the mode line. - -1. The mode line spec contains a variable whose string value has -a `local-map' text property. - -2. The mode line spec contains a format specifier (e.g. `%12b'), and -that format specifier has a `local-map' property. - -3. The mode line spec contains a list containing `:eval FORM'. FORM -is evaluated. If the result is a string, and that string has a -`local-map' property. - -The same mechanism is used to determine the `face' and `help-echo' -properties of strings in the mode line. See `bindings.el' for an -example. - -*** If a mode line element has the form `(:eval FORM)', FORM is -evaluated and the result is used as mode line element. - -*** You can suppress mode-line display by setting the buffer-local -variable mode-line-format to nil. - -*** A headerline can now be displayed at the top of a window. - -This mode line's contents are controlled by the new variable -`header-line-format' and `default-header-line-format' which are -completely analogous to `mode-line-format' and -`default-mode-line-format'. A value of nil means don't display a top -line. - -The appearance of top mode lines is controlled by the face -`header-line'. - -The function `coordinates-in-window-p' returns `header-line' for a -position in the header-line. - -** Text property `display' - -The `display' text property is used to insert images into text, -replace text with other text, display text in marginal area, and it is -also used to control other aspects of how text displays. The value of -the `display' property should be a display specification, as described -below, or a list or vector containing display specifications. - -*** Replacing text, displaying text in marginal areas - -To replace the text having the `display' property with some other -text, use a display specification of the form `(LOCATION STRING)'. - -If LOCATION is `(margin left-margin)', STRING is displayed in the left -marginal area, if it is `(margin right-margin)', it is displayed in -the right marginal area, and if LOCATION is `(margin nil)' STRING -is displayed in the text. In the latter case you can also use the -simpler form STRING as property value. - -*** Variable width and height spaces - -To display a space of fractional width or height, use a display -specification of the form `(LOCATION STRECH)'. If LOCATION is -`(margin left-margin)', the space is displayed in the left marginal -area, if it is `(margin right-margin)', it is displayed in the right -marginal area, and if LOCATION is `(margin nil)' the space is -displayed in the text. In the latter case you can also use the -simpler form STRETCH as property value. - -The stretch specification STRETCH itself is a list of the form `(space -PROPS)', where PROPS is a property list which can contain the -properties described below. - -The display of the fractional space replaces the display of the -characters having the `display' property. - -- :width WIDTH - -Specifies that the space width should be WIDTH times the normal -character width. WIDTH can be an integer or floating point number. - -- :relative-width FACTOR - -Specifies that the width of the stretch should be computed from the -first character in a group of consecutive characters that have the -same `display' property. The computation is done by multiplying the -width of that character by FACTOR. - -- :align-to HPOS - -Specifies that the space should be wide enough to reach HPOS. The -value HPOS is measured in units of the normal character width. - -Exactly one of the above properties should be used. - -- :height HEIGHT - -Specifies the height of the space, as HEIGHT, measured in terms of the -normal line height. - -- :relative-height FACTOR - -The height of the space is computed as the product of the height -of the text having the `display' property and FACTOR. - -- :ascent ASCENT - -Specifies that ASCENT percent of the height of the stretch should be -used for the ascent of the stretch, i.e. for the part above the -baseline. The value of ASCENT must be a non-negative number less or -equal to 100. - -You should not use both `:height' and `:relative-height' together. - -*** Images - -A display specification for an image has the form `(LOCATION -. IMAGE)', where IMAGE is an image specification. The image replaces, -in the display, the characters having this display specification in -their `display' text property. If LOCATION is `(margin left-margin)', -the image will be displayed in the left marginal area, if it is -`(margin right-margin)' it will be displayed in the right marginal -area, and if LOCATION is `(margin nil)' the image will be displayed in -the text. In the latter case you can also use the simpler form IMAGE -as display specification. - -*** Other display properties - -- (space-width FACTOR) - -Specifies that space characters in the text having that property -should be displayed FACTOR times as wide as normal; FACTOR must be an -integer or float. - -- (height HEIGHT) - -Display text having this property in a font that is smaller or larger. - -If HEIGHT is a list of the form `(+ N)', where N is an integer, that -means to use a font that is N steps larger. If HEIGHT is a list of -the form `(- N)', that means to use a font that is N steps smaller. A -``step'' is defined by the set of available fonts; each size for which -a font is available counts as a step. - -If HEIGHT is a number, that means to use a font that is HEIGHT times -as tall as the frame's default font. - -If HEIGHT is a symbol, it is called as a function with the current -height as argument. The function should return the new height to use. - -Otherwise, HEIGHT is evaluated to get the new height, with the symbol -`height' bound to the current specified font height. - -- (raise FACTOR) - -FACTOR must be a number, specifying a multiple of the current -font's height. If it is positive, that means to display the characters -raised. If it is negative, that means to display them lower down. The -amount of raising or lowering is computed without taking account of the -`height' subproperty. - -*** Conditional display properties - -All display specifications can be conditionalized. If a specification -has the form `(when CONDITION . SPEC)', the specification SPEC applies -only when CONDITION yields a non-nil value when evaluated. During the -evaluation, `object' is bound to the string or buffer having the -conditional display property; `position' and `buffer-position' are -bound to the position within `object' and the buffer position where -the display property was found, respectively. Both positions can be -different when object is a string. - -The normal specification consisting of SPEC only is equivalent to -`(when t . SPEC)'. - -** New menu separator types. - -Emacs now supports more than one menu separator type. Menu items with -item names consisting of dashes only (including zero dashes) are -treated like before. In addition, the following item names are used -to specify other menu separator types. - -- `--no-line' or `--space', or `--:space', or `--:noLine' - -No separator lines are drawn, but a small space is inserted where the -separator occurs. - -- `--single-line' or `--:singleLine' - -A single line in the menu's foreground color. - -- `--double-line' or `--:doubleLine' - -A double line in the menu's foreground color. - -- `--single-dashed-line' or `--:singleDashedLine' - -A single dashed line in the menu's foreground color. - -- `--double-dashed-line' or `--:doubleDashedLine' - -A double dashed line in the menu's foreground color. - -- `--shadow-etched-in' or `--:shadowEtchedIn' - -A single line with 3D sunken appearance. This is the form -displayed for item names consisting of dashes only. - -- `--shadow-etched-out' or `--:shadowEtchedOut' - -A single line with 3D raised appearance. - -- `--shadow-etched-in-dash' or `--:shadowEtchedInDash' - -A single dashed line with 3D sunken appearance. - -- `--shadow-etched-out-dash' or `--:shadowEtchedOutDash' - -A single dashed line with 3D raise appearance. - -- `--shadow-double-etched-in' or `--:shadowDoubleEtchedIn' - -Two lines with 3D sunken appearance. - -- `--shadow-double-etched-out' or `--:shadowDoubleEtchedOut' - -Two lines with 3D raised appearance. - -- `--shadow-double-etched-in-dash' or `--:shadowDoubleEtchedInDash' - -Two dashed lines with 3D sunken appearance. - -- `--shadow-double-etched-out-dash' or `--:shadowDoubleEtchedOutDash' - -Two dashed lines with 3D raised appearance. - -Under LessTif/Motif, the last four separator types are displayed like -the corresponding single-line separators. - -** New frame parameters for scroll bar colors. - -The new frame parameters `scroll-bar-foreground' and -`scroll-bar-background' can be used to change scroll bar colors. -Their value must be either a color name, a string, or nil to specify -that scroll bars should use a default color. For toolkit scroll bars, -default colors are toolkit specific. For non-toolkit scroll bars, the -default background is the background color of the frame, and the -default foreground is black. - -The X resource name of these parameters are `scrollBarForeground' -(class ScrollBarForeground) and `scrollBarBackground' (class -`ScrollBarBackground'). - -Setting these parameters overrides toolkit specific X resource -settings for scroll bar colors. - -** You can set `redisplay-dont-pause' to a non-nil value to prevent -display updates from being interrupted when input is pending. - -** Changing a window's width may now change its window start if it -starts on a continuation line. The new window start is computed based -on the window's new width, starting from the start of the continued -line as the start of the screen line with the minimum distance from -the original window start. - -** The variable `hscroll-step' and the functions -`hscroll-point-visible' and `hscroll-window-column' have been removed -now that proper horizontal scrolling is implemented. - -** Windows can now be made fixed-width and/or fixed-height. - -A window is fixed-size if its buffer has a buffer-local variable -`window-size-fixed' whose value is not nil. A value of `height' makes -windows fixed-height, a value of `width' makes them fixed-width, any -other non-nil value makes them both fixed-width and fixed-height. - -The following code makes all windows displaying the current buffer -fixed-width and fixed-height. - - (set (make-local-variable 'window-size-fixed) t) - -A call to enlarge-window on a window gives an error if that window is -fixed-width and it is tried to change the window's width, or if the -window is fixed-height, and it is tried to change its height. To -change the size of a fixed-size window, bind `window-size-fixed' -temporarily to nil, for example - - (let ((window-size-fixed nil)) - (enlarge-window 10)) - -Likewise, an attempt to split a fixed-height window vertically, -or a fixed-width window horizontally results in a error. - -** The cursor-type frame parameter is now supported on MS-DOS -terminals. When Emacs starts, it by default changes the cursor shape -to a solid box, as it does on Unix. The `cursor-type' frame parameter -overrides this as it does on Unix, except that the bar cursor is -horizontal rather than vertical (since the MS-DOS display doesn't -support a vertical-bar cursor). -* Emacs 20.7 is a bug-fix release with few user-visible changes - -** It is now possible to use CCL-based coding systems for keyboard -input. - -** ange-ftp now handles FTP security extensions, like Kerberos. - -** Rmail has been extended to recognize more forms of digest messages. - -** Now, most coding systems set in keyboard coding system work not -only for character input, but also in incremental search. The -exceptions are such coding systems that handle 2-byte character sets -(e.g euc-kr, euc-jp) and that use ISO's escape sequence -(e.g. iso-2022-jp). They are ignored in incremental search. - -** Support for Macintosh PowerPC-based machines running GNU/Linux has -been added. - - -* Emacs 20.6 is a bug-fix release with one user-visible change - -** Support for ARM-based non-RISCiX machines has been added. - - - -* Emacs 20.5 is a bug-fix release with no user-visible changes. - -** Not new, but not mentioned before: -M-w when Transient Mark mode is enabled disables the mark. - -* Changes in Emacs 20.4 - -** Init file may be called .emacs.el. - -You can now call the Emacs init file `.emacs.el'. -Formerly the name had to be `.emacs'. If you use the name -`.emacs.el', you can byte-compile the file in the usual way. - -If both `.emacs' and `.emacs.el' exist, the latter file -is the one that is used. - -** shell-command, and shell-command-on-region, now return -the exit code of the command (unless it is asynchronous). -Also, you can specify a place to put the error output, -separate from the command's regular output. -Interactively, the variable shell-command-default-error-buffer -says where to put error output; set it to a buffer name. -In calls from Lisp, an optional argument ERROR-BUFFER specifies -the buffer name. - -When you specify a non-nil error buffer (or buffer name), any error -output is inserted before point in that buffer, with \f\n to separate -it from the previous batch of error output. The error buffer is not -cleared, so error output from successive commands accumulates there. - -** Setting the default value of enable-multibyte-characters to nil in -the .emacs file, either explicitly using setq-default, or via Custom, -is now essentially equivalent to using --unibyte: all buffers -created during startup will be made unibyte after loading .emacs. - -** C-x C-f now handles the wildcards * and ? in file names. For -example, typing C-x C-f c*.c RET visits all the files whose names -match c*.c. To visit a file whose name contains * or ?, add the -quoting sequence /: to the beginning of the file name. - -** The M-x commands keep-lines, flush-lines and count-matches -now have the same feature as occur and query-replace: -if the pattern contains any upper case letters, then -they never ignore case. - -** The end-of-line format conversion feature previously mentioned -under `* Emacs 20.1 changes for MS-DOS and MS-Windows' actually -applies to all operating systems. Emacs recognizes from the contents -of a file what convention it uses to separate lines--newline, CRLF, or -just CR--and automatically converts the contents to the normal Emacs -convention (using newline to separate lines) for editing. This is a -part of the general feature of coding system conversion. - -If you subsequently save the buffer, Emacs converts the text back to -the same format that was used in the file before. - -You can turn off end-of-line conversion by setting the variable -`inhibit-eol-conversion' to non-nil, e.g. with Custom in the MULE group. - -** The character set property `prefered-coding-system' has been -renamed to `preferred-coding-system', for the sake of correct spelling. -This is a fairly internal feature, so few programs should be affected. - -** Mode-line display of end-of-line format is changed. -The indication of the end-of-line format of the file visited by a -buffer is now more explicit when that format is not the usual one for -your operating system. For example, the DOS-style end-of-line format -is displayed as "(DOS)" on Unix and GNU/Linux systems. The usual -end-of-line format is still displayed as a single character (colon for -Unix, backslash for DOS and Windows, and forward slash for the Mac). - -The values of the variables eol-mnemonic-unix, eol-mnemonic-dos, -eol-mnemonic-mac, and eol-mnemonic-undecided, which are strings, -control what is displayed in the mode line for each end-of-line -format. You can now customize these variables. - -** In the previous version of Emacs, tar-mode didn't work well if a -filename contained non-ASCII characters. Now this is fixed. Such a -filename is decoded by file-name-coding-system if the default value of -enable-multibyte-characters is non-nil. - -** The command temp-buffer-resize-mode toggles a minor mode -in which temporary buffers (such as help buffers) are given -windows just big enough to hold the whole contents. - -** If you use completion.el, you must now run the function -dynamic-completion-mode to enable it. Just loading the file -doesn't have any effect. - -** In Flyspell mode, the default is now to make just one Ispell process, -not one per buffer. - -** If you use iswitchb but do not call (iswitchb-default-keybindings) to -use the default keybindings, you will need to add the following line: - (add-hook 'minibuffer-setup-hook 'iswitchb-minibuffer-setup) - -** Auto-show mode is no longer enabled just by loading auto-show.el. -To control it, set `auto-show-mode' via Custom or use the -`auto-show-mode' command. - -** Handling of X fonts' ascent/descent parameters has been changed to -avoid redisplay problems. As a consequence, compared with previous -versions the line spacing and frame size now differ with some font -choices, typically increasing by a pixel per line. This change -occurred in version 20.3 but was not documented then. - -** If you select the bar cursor style, it uses the frame's -cursor-color, rather than the cursor foreground pixel. - -** In multibyte mode, Rmail decodes incoming MIME messages using the -character set specified in the message. If you want to disable this -feature, set the variable rmail-decode-mime-charset to nil. - -** Not new, but not mentioned previously in NEWS: when you use #! at -the beginning of a file to make it executable and specify an -interpreter program, Emacs looks on the second line for the -*- mode -and variable specification, as well as on the first line. - -** Support for IBM codepage encoding of non-ASCII characters. - -The new command M-x codepage-setup creates a special coding system -that can be used to convert text between a specific IBM codepage and -one of the character sets built into Emacs which matches that -codepage. For example, codepage 850 corresponds to Latin-1 character -set, codepage 855 corresponds to Cyrillic-ISO character set, etc. - -Windows codepages 1250, 1251 and some others, where Windows deviates -from the corresponding ISO character set, are also supported. - -IBM box-drawing characters and other glyphs which don't have -equivalents in the corresponding ISO character set, are converted to -a character defined by dos-unsupported-char-glyph on MS-DOS, and to -`?' on other systems. - -IBM codepages are widely used on MS-DOS and MS-Windows, so this -feature is most useful on those platforms, but it can also be used on -Unix. - -Emacs compiled for MS-DOS automatically loads the support for the -current codepage when it starts. - -** Mail changes - -*** When mail is sent using compose-mail (C-x m), and if -`mail-send-nonascii' is set to the new default value `mime', -appropriate MIME headers are added. The headers are added only if -non-ASCII characters are present in the body of the mail, and no other -MIME headers are already present. For example, the following three -headers are added if the coding system used in the *mail* buffer is -latin-1: - - MIME-version: 1.0 - Content-type: text/plain; charset=iso-8859-1 - Content-Transfer-Encoding: 8bit - -*** The new variable default-sendmail-coding-system specifies the -default way to encode outgoing mail. This has higher priority than -default-buffer-file-coding-system but has lower priority than -sendmail-coding-system and the local value of -buffer-file-coding-system. - -You should not set this variable manually. Instead, set -sendmail-coding-system to specify a fixed encoding for all outgoing -mail. - -*** When you try to send a message that contains non-ASCII characters, -if the coding system specified by those variables doesn't handle them, -Emacs will ask you to select a suitable coding system while showing a -list of possible coding systems. - -** CC Mode changes - -*** c-default-style can now take an association list that maps major -modes to style names. When this variable is an alist, Java mode no -longer hardcodes a setting to "java" style. See the variable's -docstring for details. - -*** It's now possible to put a list as the offset on a syntactic -symbol. The list is evaluated recursively until a non-nil offset is -found. This is useful to combine several lineup functions to act in a -prioritized order on a single line. However, none of the supplied -lineup functions use this feature currently. - -*** New syntactic symbol catch-clause, which is used on the "catch" and -"finally" lines in try-catch constructs in C++ and Java. - -*** New cleanup brace-catch-brace on c-cleanup-list, which does for -"catch" lines what brace-elseif-brace does for "else if" lines. - -*** The braces of Java anonymous inner classes are treated separately -from the braces of other classes in auto-newline mode. Two new -symbols inexpr-class-open and inexpr-class-close may be used on -c-hanging-braces-alist to control the automatic newlines used for -anonymous classes. - -*** Support for the Pike language added, along with new Pike specific -syntactic symbols: inlambda, lambda-intro-cont - -*** Support for Java anonymous classes via new syntactic symbol -inexpr-class. New syntactic symbol inexpr-statement for Pike -support and gcc-style statements inside expressions. New lineup -function c-lineup-inexpr-block. - -*** New syntactic symbol brace-entry-open which is used in brace lists -(i.e. static initializers) when a list entry starts with an open -brace. These used to be recognized as brace-list-entry's. -c-electric-brace also recognizes brace-entry-open braces -(brace-list-entry's can no longer be electrified). - -*** New command c-indent-line-or-region, not bound by default. - -*** `#' is only electric when typed in the indentation of a line. - -*** Parentheses are now electric (via the new command c-electric-paren) -for auto-reindenting lines when parens are typed. - -*** In "gnu" style, inline-open offset is now set to zero. - -*** Uniform handling of the inclass syntactic symbol. The indentation -associated with it is now always relative to the class opening brace. -This means that the indentation behavior has changed in some -circumstances, but only if you've put anything besides 0 on the -class-open syntactic symbol (none of the default styles do that). - -** Gnus changes. - -*** New functionality for using Gnus as an offline newsreader has been -added. A plethora of new commands and modes have been added. See the -Gnus manual for the full story. - -*** The nndraft backend has returned, but works differently than -before. All Message buffers are now also articles in the nndraft -group, which is created automatically. - -*** `gnus-alter-header-function' can now be used to alter header -values. - -*** `gnus-summary-goto-article' now accept Message-ID's. - -*** A new Message command for deleting text in the body of a message -outside the region: `C-c C-v'. - -*** You can now post to component group in nnvirtual groups with -`C-u C-c C-c'. - -*** `nntp-rlogin-program' -- new variable to ease customization. - -*** `C-u C-c C-c' in `gnus-article-edit-mode' will now inhibit -re-highlighting of the article buffer. - -*** New element in `gnus-boring-article-headers' -- `long-to'. - -*** `M-i' symbolic prefix command. See the section "Symbolic -Prefixes" in the Gnus manual for details. - -*** `L' and `I' in the summary buffer now take the symbolic prefix -`a' to add the score rule to the "all.SCORE" file. - -*** `gnus-simplify-subject-functions' variable to allow greater -control over simplification. - -*** `A T' -- new command for fetching the current thread. - -*** `/ T' -- new command for including the current thread in the -limit. - -*** `M-RET' is a new Message command for breaking cited text. - -*** \\1-expressions are now valid in `nnmail-split-methods'. - -*** The `custom-face-lookup' function has been removed. -If you used this function in your initialization files, you must -rewrite them to use `face-spec-set' instead. - -*** Canceling now uses the current select method. Symbolic prefix -`a' forces normal posting method. - -*** New command to translate M******** sm*rtq**t*s into proper text --- `W d'. - -*** For easier debugging of nntp, you can set `nntp-record-commands' -to a non-nil value. - -*** nntp now uses ~/.authinfo, a .netrc-like file, for controlling -where and how to send AUTHINFO to NNTP servers. - -*** A command for editing group parameters from the summary buffer -has been added. - -*** A history of where mails have been split is available. - -*** A new article date command has been added -- `article-date-iso8601'. - -*** Subjects can be simplified when threading by setting -`gnus-score-thread-simplify'. - -*** A new function for citing in Message has been added -- -`message-cite-original-without-signature'. - -*** `article-strip-all-blank-lines' -- new article command. - -*** A new Message command to kill to the end of the article has -been added. - -*** A minimum adaptive score can be specified by using the -`gnus-adaptive-word-minimum' variable. - -*** The "lapsed date" article header can be kept continually -updated by the `gnus-start-date-timer' command. - -*** Web listserv archives can be read with the nnlistserv backend. - -*** Old dejanews archives can now be read by nnweb. - -*** `gnus-posting-styles' has been re-activated. - -** Changes to TeX and LaTeX mode - -*** The new variable `tex-start-options-string' can be used to give -options for the TeX run. The default value causes TeX to run in -nonstopmode. For an interactive TeX run set it to nil or "". - -*** The command `tex-feed-input' sends input to the Tex Shell. In a -TeX buffer it is bound to the keys C-RET, C-c RET, and C-c C-m (some -of these keys may not work on all systems). For instance, if you run -TeX interactively and if the TeX run stops because of an error, you -can continue it without leaving the TeX buffer by typing C-RET. - -*** The Tex Shell Buffer is now in `compilation-shell-minor-mode'. -All error-parsing commands of the Compilation major mode are available -but bound to keys that don't collide with the shell. Thus you can use -the Tex Shell for command line executions like a usual shell. - -*** The commands `tex-validate-region' and `tex-validate-buffer' check -the matching of braces and $'s. The errors are listed in a *Occur* -buffer and you can use C-c C-c or mouse-2 to go to a particular -mismatch. - -** Changes to RefTeX mode - -*** The table of contents buffer can now also display labels and -file boundaries in addition to sections. Use `l', `i', and `c' keys. - -*** Labels derived from context (the section heading) are now -lowercase by default. To make the label legal in LaTeX, latin-1 -characters will lose their accent. All Mule characters will be -removed from the label. - -*** The automatic display of cross reference information can also use -a window instead of the echo area. See variable `reftex-auto-view-crossref'. - -*** kpsewhich can be used by RefTeX to find TeX and BibTeX files. See the -customization group `reftex-finding-files'. - -*** The option `reftex-bibfile-ignore-list' has been renamed to -`reftex-bibfile-ignore-regexps' and indeed can be fed with regular -expressions. - -*** Multiple Selection buffers are now hidden buffers. - -** New/deleted modes and packages - -*** The package snmp-mode.el provides major modes for editing SNMP and -SNMPv2 MIBs. It has entries on `auto-mode-alist'. - -*** The package sql.el provides a major mode, M-x sql-mode, for -editing SQL files, and M-x sql-interactive-mode for interacting with -SQL interpreters. It has an entry on `auto-mode-alist'. - -*** ispell4.el has been deleted. It got in the way of ispell.el and -this was hard to fix reliably. It has long been obsolete -- use -Ispell 3.1 and ispell.el. - -* MS-DOS changes in Emacs 20.4 - -** Emacs compiled for MS-DOS now supports MULE features better. -This includes support for display of all ISO 8859-N character sets, -conversion to and from IBM codepage encoding of non-ASCII characters, -and automatic setup of the MULE environment at startup. For details, -check out the section `MS-DOS and MULE' in the manual. - -The MS-DOS installation procedure automatically configures and builds -Emacs with input method support if it finds an unpacked Leim -distribution when the config.bat script is run. - -** Formerly, the value of lpr-command did not affect printing on -MS-DOS unless print-region-function was set to nil, but now it -controls whether an external program is invoked or output is written -directly to a printer port. Similarly, in the previous version of -Emacs, the value of ps-lpr-command did not affect PostScript printing -on MS-DOS unless ps-printer-name was set to something other than a -string (eg. t or `pipe'), but now it controls whether an external -program is used. (These changes were made so that configuration of -printing variables would be almost identical across all platforms.) - -** In the previous version of Emacs, PostScript and non-PostScript -output was piped to external programs, but because most print programs -available for MS-DOS and MS-Windows cannot read data from their standard -input, on those systems the data to be output is now written to a -temporary file whose name is passed as the last argument to the external -program. - -An exception is made for `print', a standard program on Windows NT, -and `nprint', a standard program on Novell Netware. For both of these -programs, the command line is constructed in the appropriate syntax -automatically, using only the value of printer-name or ps-printer-name -as appropriate--the value of the relevant `-switches' variable is -ignored, as both programs have no useful switches. - -** The value of the variable dos-printer (cf. dos-ps-printer), if it has -a value, overrides the value of printer-name (cf. ps-printer-name), on -MS-DOS and MS-Windows only. This has been true since version 20.3, but -was not documented clearly before. - -** All the Emacs games now work on MS-DOS terminals. -This includes Tetris and Snake. - -* Lisp changes in Emacs 20.4 - -** New functions line-beginning-position and line-end-position -return the position of the beginning or end of the current line. -They both accept an optional argument, which has the same -meaning as the argument to beginning-of-line or end-of-line. - -** find-file and allied functions now have an optional argument -WILDCARD. If this is non-nil, they do wildcard processing, -and visit all files that match the wildcard pattern. - -** Changes in the file-attributes function. - -*** The file size returned by file-attributes may be an integer or a float. -It is an integer if the size fits in a Lisp integer, float otherwise. - -*** The inode number returned by file-attributes may be an integer (if -the number fits in a Lisp integer) or a cons cell containing two -integers. - -** The new function directory-files-and-attributes returns a list of -files in a directory and their attributes. It accepts the same -arguments as directory-files and has similar semantics, except that -file names and attributes are returned. - -** The new function file-attributes-lessp is a helper function for -sorting the list generated by directory-files-and-attributes. It -accepts two arguments, each a list of a file name and its attributes. -It compares the file names of each according to string-lessp and -returns the result. - -** The new function file-expand-wildcards expands a wildcard-pattern -to produce a list of existing files that match the pattern. - -** New functions for base64 conversion: - -The function base64-encode-region converts a part of the buffer -into the base64 code used in MIME. base64-decode-region -performs the opposite conversion. Line-breaking is supported -optionally. - -Functions base64-encode-string and base64-decode-string do a similar -job on the text in a string. They return the value as a new string. - -** -The new function process-running-child-p -will tell you if a subprocess has given control of its -terminal to its own child process. - -** interrupt-process and such functions have a new feature: -when the second argument is `lambda', they send a signal -to the running child of the subshell, if any, but if the shell -itself owns its terminal, no signal is sent. - -** There are new widget types `plist' and `alist' which can -be used for customizing variables whose values are plists or alists. - -** easymenu.el now understands `:key-sequence' and `:style button'. -:included is an alias for :visible. - -easy-menu-add-item now understands the values returned by -easy-menu-remove-item and easy-menu-item-present-p. This can be used -to move or copy menu entries. - -** Multibyte editing changes - -*** The definitions of sref and char-bytes are changed. Now, sref is -an alias of aref and char-bytes always returns 1. This change is to -make some Emacs Lisp code which works on 20.2 and earlier also -work on the latest Emacs. Such code uses a combination of sref and -char-bytes in a loop typically as below: - (setq char (sref str idx) - idx (+ idx (char-bytes idx))) -The byte-compiler now warns that this is obsolete. - -If you want to know how many bytes a specific multibyte character -(say, CH) occupies in a multibyte buffer, use this code: - (charset-bytes (char-charset ch)) - -*** In multibyte mode, when you narrow a buffer to some region, and the -region is preceded or followed by non-ASCII codes, inserting or -deleting at the head or the end of the region may signal this error: - - Byte combining across boundary of accessible buffer text inhibited - -This is to avoid some bytes being combined together into a character -across the boundary. - -*** The functions find-charset-region and find-charset-string include -`unknown' in the returned list in the following cases: - o The current buffer or the target string is unibyte and - contains 8-bit characters. - o The current buffer or the target string is multibyte and - contains invalid characters. - -*** The functions decode-coding-region and encode-coding-region remove -text properties of the target region. Ideally, they should correctly -preserve text properties, but for the moment, it's hard. Removing -text properties is better than preserving them in a less-than-correct -way. - -*** prefer-coding-system sets EOL conversion of default coding systems. -If the argument to prefer-coding-system specifies a certain type of -end of line conversion, the default coding systems set by -prefer-coding-system will specify that conversion type for end of line. - -*** The new function thai-compose-string can be used to properly -compose Thai characters in a string. - -** The primitive `define-prefix-command' now takes an optional third -argument NAME, which should be a string. It supplies the menu name -for the created keymap. Keymaps created in order to be displayed as -menus should always use the third argument. - -** The meanings of optional second arguments for read-char, -read-event, and read-char-exclusive are flipped. Now the second -arguments are INHERIT-INPUT-METHOD. These functions use the current -input method (if any) if and only if INHERIT-INPUT-METHOD is non-nil. - -** The new function clear-this-command-keys empties out the contents -of the vector that (this-command-keys) returns. This is useful in -programs that read passwords, to prevent the passwords from echoing -inadvertently as part of the next command in certain cases. - -** The new macro `with-temp-message' displays a temporary message in -the echo area, while executing some Lisp code. Like `progn', it -returns the value of the last form, but it also restores the previous -echo area contents. - - (with-temp-message MESSAGE &rest BODY) - -** The function `require' now takes an optional third argument -NOERROR. If it is non-nil, then there is no error if the -requested feature cannot be loaded. - -** In the function modify-face, an argument of (nil) for the -foreground color, background color or stipple pattern -means to clear out that attribute. - -** The `outer-window-id' frame property of an X frame -gives the window number of the outermost X window for the frame. - -** Temporary buffers made with with-output-to-temp-buffer are now -read-only by default, and normally use the major mode Help mode -unless you put them in some other non-Fundamental mode before the -end of with-output-to-temp-buffer. - -** The new functions gap-position and gap-size return information on -the gap of the current buffer. - -** The new functions position-bytes and byte-to-position provide a way -to convert between character positions and byte positions in the -current buffer. - -** vc.el defines two new macros, `edit-vc-file' and `with-vc-file', to -facilitate working with version-controlled files from Lisp programs. -These macros check out a given file automatically if needed, and check -it back in after any modifications have been made. - -* Installation Changes in Emacs 20.3 - -** The default value of load-path now includes most subdirectories of -the site-specific directories /usr/local/share/emacs/site-lisp and -/usr/local/share/emacs/VERSION/site-lisp, in addition to those -directories themselves. Both immediate subdirectories and -subdirectories multiple levels down are added to load-path. - -Not all subdirectories are included, though. Subdirectories whose -names do not start with a letter or digit are excluded. -Subdirectories named RCS or CVS are excluded. Also, a subdirectory -which contains a file named `.nosearch' is excluded. You can use -these methods to prevent certain subdirectories from being searched. - -Emacs finds these subdirectories and adds them to load-path when it -starts up. While it would be cleaner to find the subdirectories each -time Emacs loads a file, that would be much slower. - -This feature is an incompatible change. If you have stored some Emacs -Lisp files in a subdirectory of the site-lisp directory specifically -to prevent them from being used, you will need to rename the -subdirectory to start with a non-alphanumeric character, or create a -`.nosearch' file in it, in order to continue to achieve the desired -results. - -** Emacs no longer includes an old version of the C preprocessor from -GCC. This was formerly used to help compile Emacs with C compilers -that had limits on the significant length of an identifier, but in -fact we stopped supporting such compilers some time ago. - -* Changes in Emacs 20.3 - -** The new command C-x z (repeat) repeats the previous command -including its argument. If you repeat the z afterward, -it repeats the command additional times; thus, you can -perform many repetitions with one keystroke per repetition. - -** Emacs now supports "selective undo" which undoes only within a -specified region. To do this, set point and mark around the desired -region and type C-u C-x u (or C-u C-_). You can then continue undoing -further, within the same region, by repeating the ordinary undo -command C-x u or C-_. This will keep undoing changes that were made -within the region you originally specified, until either all of them -are undone, or it encounters a change which crosses the edge of that -region. - -In Transient Mark mode, undoing when a region is active requests -selective undo. - -** If you specify --unibyte when starting Emacs, then all buffers are -unibyte, except when a Lisp program specifically creates a multibyte -buffer. Setting the environment variable EMACS_UNIBYTE has the same -effect. The --no-unibyte option overrides EMACS_UNIBYTE and directs -Emacs to run normally in multibyte mode. - -The option --unibyte does not affect the reading of Emacs Lisp files, -though. If you want a Lisp file to be read in unibyte mode, use --*-unibyte: t;-*- on its first line. That will force Emacs to -load that file in unibyte mode, regardless of how Emacs was started. - -** toggle-enable-multibyte-characters no longer has a key binding and -no longer appears in the menu bar. We've realized that changing the -enable-multibyte-characters variable in an existing buffer is -something that most users not do. - -** You can specify a coding system to use for the next cut or paste -operations through the window system with the command C-x RET X. -The coding system can make a difference for communication with other -applications. - -C-x RET x specifies a coding system for all subsequent cutting and -pasting operations. - -** You can specify the printer to use for commands that do printing by -setting the variable `printer-name'. Just what a printer name looks -like depends on your operating system. You can specify a different -printer for the Postscript printing commands by setting -`ps-printer-name'. - -** Emacs now supports on-the-fly spell checking by the means of a -minor mode. It is called M-x flyspell-mode. You don't have to remember -any other special commands to use it, and you will hardly notice it -except when you make a spelling error. Flyspell works by highlighting -incorrect words as soon as they are completed or as soon as the cursor -hits a new word. - -Flyspell mode works with whichever dictionary you have selected for -Ispell in Emacs. In TeX mode, it understands TeX syntax so as not -to be confused by TeX commands. - -You can correct a misspelled word by editing it into something -correct. You can also correct it, or accept it as correct, by -clicking on the word with Mouse-2; that gives you a pop-up menu -of various alternative replacements and actions. - -Flyspell mode also proposes "automatic" corrections. M-TAB replaces -the current misspelled word with a possible correction. If several -corrections are made possible, M-TAB cycles through them in -alphabetical order, or in order of decreasing likelihood if -flyspell-sort-corrections is nil. - -Flyspell mode also flags an error when a word is repeated, if -flyspell-mark-duplications-flag is non-nil. - -** Changes in input method usage. - -Now you can use arrow keys (right, left, down, up) for selecting among -the alternatives just the same way as you do by C-f, C-b, C-n, and C-p -respectively. - -You can use the ENTER key to accept the current conversion. - -If you type TAB to display a list of alternatives, you can select one -of the alternatives with Mouse-2. - -The meaning of the variable `input-method-verbose-flag' is changed so -that you can set it to t, nil, `default', or `complex-only'. - - If the value is nil, extra guidance is never given. - - If the value is t, extra guidance is always given. - - If the value is `complex-only', extra guidance is always given only - when you are using complex input methods such as chinese-py. - - If the value is `default' (this is the default), extra guidance is - given in the following case: - o When you are using a complex input method. - o When you are using a simple input method but not in the minibuffer. - -If you are using Emacs through a very slow line, setting -input-method-verbose-flag to nil or to complex-only is a good choice, -and if you are using an input method you are not familiar with, -setting it to t is helpful. - -The old command select-input-method is now called set-input-method. - -In the language environment "Korean", you can use the following -keys: - Shift-SPC toggle-korean-input-method - C-F9 quail-hangul-switch-symbol-ksc - F9 quail-hangul-switch-hanja -These key bindings are canceled when you switch to another language -environment. - -** The minibuffer history of file names now records the specified file -names, not the entire minibuffer input. For example, if the -minibuffer starts out with /usr/foo/, you might type in /etc/passwd to -get - - /usr/foo//etc/passwd - -which stands for the file /etc/passwd. - -Formerly, this used to put /usr/foo//etc/passwd in the history list. -Now this puts just /etc/passwd in the history list. - -** If you are root, Emacs sets backup-by-copying-when-mismatch to t -at startup, so that saving a file will be sure to preserve -its owner and group. - -** find-func.el can now also find the place of definition of Emacs -Lisp variables in user-loaded libraries. - -** C-x r t (string-rectangle) now deletes the existing rectangle -contents before inserting the specified string on each line. - -** There is a new command delete-whitespace-rectangle -which deletes whitespace starting from a particular column -in all the lines on a rectangle. The column is specified -by the left edge of the rectangle. - -** You can now store a number into a register with C-u NUMBER C-x r n REG, -increment it by INC with C-u INC C-x r + REG (to increment by one, omit -C-u INC), and insert it in the buffer with C-x r g REG. This is useful -for writing keyboard macros. - -** The new command M-x speedbar displays a frame in which directories, -files, and tags can be displayed, manipulated, and jumped to. The -frame defaults to 20 characters in width, and is the same height as -the frame that it was started from. Some major modes define -additional commands for the speedbar, including Rmail, GUD/GDB, and -info. - -** query-replace-regexp is now bound to C-M-%. - -** In Transient Mark mode, when the region is active, M-x -query-replace and the other replace commands now operate on the region -contents only. - -** M-x write-region, when used interactively, now asks for -confirmation before overwriting an existing file. When you call -the function from a Lisp program, a new optional argument CONFIRM -says whether to ask for confirmation in this case. - -** If you use find-file-literally and the file is already visited -non-literally, the command asks you whether to revisit the file -literally. If you say no, it signals an error. - -** Major modes defined with the "derived mode" feature -now use the proper name for the mode hook: WHATEVER-mode-hook. -Formerly they used the name WHATEVER-mode-hooks, but that is -inconsistent with Emacs conventions. - -** shell-command-on-region (and shell-command) reports success or -failure if the command produces no output. - -** Set focus-follows-mouse to nil if your window system or window -manager does not transfer focus to another window when you just move -the mouse. - -** mouse-menu-buffer-maxlen has been renamed to -mouse-buffer-menu-maxlen to be consistent with the other related -function and variable names. - -** The new variable auto-coding-alist specifies coding systems for -reading specific files. This has higher priority than -file-coding-system-alist. - -** If you set the variable unibyte-display-via-language-environment to -t, then Emacs displays non-ASCII characters are displayed by -converting them to the equivalent multibyte characters according to -the current language environment. As a result, they are displayed -according to the current fontset. - -** C-q's handling of codes in the range 0200 through 0377 is changed. - -The codes in the range 0200 through 0237 are inserted as one byte of -that code regardless of the values of nonascii-translation-table and -nonascii-insert-offset. - -For the codes in the range 0240 through 0377, if -enable-multibyte-characters is non-nil and nonascii-translation-table -nor nonascii-insert-offset can't convert them to valid multibyte -characters, they are converted to Latin-1 characters. - -** If you try to find a file that is not read-accessible, you now get -an error, rather than an empty buffer and a warning. - -** In the minibuffer history commands M-r and M-s, an upper case -letter in the regular expression forces case-sensitive search. - -** In the *Help* buffer, cross-references to commands and variables -are inferred and hyperlinked. Use C-h m in Help mode for the relevant -command keys. - -** M-x apropos-command, with a prefix argument, no longer looks for -user option variables--instead it looks for noninteractive functions. - -Meanwhile, the command apropos-variable normally searches for -user option variables; with a prefix argument, it looks at -all variables that have documentation. - -** When you type a long line in the minibuffer, and the minibuffer -shows just one line, automatically scrolling works in a special way -that shows you overlap with the previous line of text. The variable -minibuffer-scroll-overlap controls how many characters of overlap -it should show; the default is 20. - -Meanwhile, Resize Minibuffer mode is still available; in that mode, -the minibuffer grows taller (up to a point) as needed to show the whole -of your input. - -** The new command M-x customize-changed-options lets you customize -all the options whose meanings or default values have changed in -recent Emacs versions. You specify a previous Emacs version number as -argument, and the command creates a customization buffer showing all -the customizable options which were changed since that version. -Newly added options are included as well. - -If you don't specify a particular version number argument, -then the customization buffer shows all the customizable options -for which Emacs versions of changes are recorded. - -This function is also bound to the Changed Options entry in the -Customize menu. - -** When you run M-x grep with a prefix argument, it figures out -the tag around point and puts that into the default grep command. - -** The new command M-* (pop-tag-mark) pops back through a history of -buffer positions from which M-. or other tag-finding commands were -invoked. - -** The new variable comment-padding specifies the number of spaces -that `comment-region' will insert before the actual text of the comment. -The default is 1. - -** In Fortran mode the characters `.', `_' and `$' now have symbol -syntax, not word syntax. Fortran mode now supports `imenu' and has -new commands fortran-join-line (M-^) and fortran-narrow-to-subprogram -(C-x n d). M-q can be used to fill a statement or comment block -sensibly. - -** GUD now supports jdb, the Java debugger, and pdb, the Python debugger. - -** If you set the variable add-log-keep-changes-together to a non-nil -value, the command `C-x 4 a' will automatically notice when you make -two entries in one day for one file, and combine them. - -** You can use the command M-x diary-mail-entries to mail yourself a -reminder about upcoming diary entries. See the documentation string -for a sample shell script for calling this function automatically -every night. - -** Desktop changes - -*** All you need to do to enable use of the Desktop package, is to set -the variable desktop-enable to t with Custom. - -*** Minor modes are now restored. Which minor modes are restored -and how modes are restored is controlled by `desktop-minor-mode-table'. - -** There is no need to do anything special, now, to enable Gnus to -read and post multi-lingual articles. - -** Outline mode has now support for showing hidden outlines when -doing an isearch. In order for this to happen search-invisible should -be set to open (the default). If an isearch match is inside a hidden -outline the outline is made visible. If you continue pressing C-s and -the match moves outside the formerly invisible outline, the outline is -made invisible again. - -** Mail reading and sending changes - -*** The Rmail e command now switches to displaying the whole header of -the message before it lets you edit the message. This is so that any -changes you make in the header will not be lost if you subsequently -toggle. - -*** The w command in Rmail, which writes the message body into a file, -now works in the summary buffer as well. (The command to delete the -summary buffer is now Q.) The default file name for the w command, if -the message has no subject, is stored in the variable -rmail-default-body-file. - -*** Most of the commands and modes that operate on mail and netnews no -longer depend on the value of mail-header-separator. Instead, they -handle whatever separator the buffer happens to use. - -*** If you set mail-signature to a value which is not t, nil, or a string, -it should be an expression. When you send a message, this expression -is evaluated to insert the signature. - -*** The new Lisp library feedmail.el (version 8) enhances processing of -outbound email messages. It works in coordination with other email -handling packages (e.g., rmail, VM, gnus) and is responsible for -putting final touches on messages and actually submitting them for -transmission. Users of the emacs program "fakemail" might be -especially interested in trying feedmail. - -feedmail is not enabled by default. See comments at the top of -feedmail.el for set-up instructions. Among the bigger features -provided by feedmail are: - -**** you can park outgoing messages into a disk-based queue and -stimulate sending some or all of them later (handy for laptop users); -there is also a queue for draft messages - -**** you can get one last look at the prepped outbound message and -be prompted for confirmation - -**** does smart filling of address headers - -**** can generate a MESSAGE-ID: line and a DATE: line; the date can be -the time the message was written or the time it is being sent; this -can make FCC copies more closely resemble copies that recipients get - -**** you can specify an arbitrary function for actually transmitting -the message; included in feedmail are interfaces for /bin/[r]mail, -/usr/lib/sendmail, and Emacs Lisp smtpmail; it's easy to write a new -function for something else (10-20 lines of Lisp code). - -** Dired changes - -*** The Dired function dired-do-toggle, which toggles marked and unmarked -files, is now bound to "t" instead of "T". - -*** dired-at-point has been added to ffap.el. It allows one to easily -run Dired on the directory name at point. - -*** Dired has a new command: %g. It searches the contents of -files in the directory and marks each file that contains a match -for a specified regexp. - -** VC Changes - -*** New option vc-ignore-vc-files lets you turn off version control -conveniently. - -*** VC Dired has been completely rewritten. It is now much -faster, especially for CVS, and works very similar to ordinary -Dired. - -VC Dired is invoked by typing C-x v d and entering the name of the -directory to display. By default, VC Dired gives you a recursive -listing of all files at or below the given directory which are -currently locked (for CVS, all files not up-to-date are shown). - -You can change the listing format by setting vc-dired-recurse to nil, -then it shows only the given directory, and you may also set -vc-dired-terse-display to nil, then it shows all files under version -control plus the names of any subdirectories, so that you can type `i' -on such lines to insert them manually, as in ordinary Dired. - -All Dired commands operate normally in VC Dired, except for `v', which -is redefined as the version control prefix. That means you may type -`v l', `v =' etc. to invoke `vc-print-log', `vc-diff' and the like on -the file named in the current Dired buffer line. `v v' invokes -`vc-next-action' on this file, or on all files currently marked. - -The new command `v t' (vc-dired-toggle-terse-mode) allows you to -toggle between terse display (only locked files) and full display (all -VC files plus subdirectories). There is also a special command, -`* l', to mark all files currently locked. - -Giving a prefix argument to C-x v d now does the same thing as in -ordinary Dired: it allows you to supply additional options for the ls -command in the minibuffer, to fine-tune VC Dired's output. - -*** Under CVS, if you merge changes from the repository into a working -file, and CVS detects conflicts, VC now offers to start an ediff -session to resolve them. - -Alternatively, you can use the new command `vc-resolve-conflicts' to -resolve conflicts in a file at any time. It works in any buffer that -contains conflict markers as generated by rcsmerge (which is what CVS -uses as well). - -*** You can now transfer changes between branches, using the new -command vc-merge (C-x v m). It is implemented for RCS and CVS. When -you invoke it in a buffer under version-control, you can specify -either an entire branch or a pair of versions, and the changes on that -branch or between the two versions are merged into the working file. -If this results in any conflicts, they may be resolved interactively, -using ediff. - -** Changes in Font Lock - -*** The face and variable previously known as font-lock-reference-face -are now called font-lock-constant-face to better reflect their typical -use for highlighting constants and labels. (Its face properties are -unchanged.) The variable font-lock-reference-face remains for now for -compatibility reasons, but its value is font-lock-constant-face. - -** Frame name display changes - -*** The command set-frame-name lets you set the name of the current -frame. You can use the new command select-frame-by-name to select and -raise a frame; this is mostly useful on character-only terminals, or -when many frames are invisible or iconified. - -*** On character-only terminal (not a window system), changing the -frame name is now reflected on the mode line and in the Buffers/Frames -menu. - -** Comint (subshell) changes - -*** In Comint modes, the commands to kill, stop or interrupt a -subjob now also kill pending input. This is for compatibility -with ordinary shells, where the signal characters do this. - -*** There are new commands in Comint mode. - -C-c C-x fetches the "next" line from the input history; -that is, the line after the last line you got. -You can use this command to fetch successive lines, one by one. - -C-c SPC accumulates lines of input. More precisely, it arranges to -send the current line together with the following line, when you send -the following line. - -C-c C-a if repeated twice consecutively now moves to the process mark, -which separates the pending input from the subprocess output and the -previously sent input. - -C-c M-r now runs comint-previous-matching-input-from-input; -it searches for a previous command, using the current pending input -as the search string. - -*** New option compilation-scroll-output can be set to scroll -automatically in compilation-mode windows. - -** C mode changes - -*** Multiline macros are now handled, both as they affect indentation, -and as recognized syntax. New syntactic symbol cpp-macro-cont is -assigned to second and subsequent lines of a multiline macro -definition. - -*** A new style "user" which captures all non-hook-ified -(i.e. top-level) .emacs file variable settings and customizations. -Style "cc-mode" is an alias for "user" and is deprecated. "gnu" -style is still the default however. - -*** "java" style now conforms to Sun's JDK coding style. - -*** There are new commands c-beginning-of-defun, c-end-of-defun which -are alternatives which you could bind to C-M-a and C-M-e if you prefer -them. They do not have key bindings by default. - -*** New and improved implementations of M-a (c-beginning-of-statement) -and M-e (c-end-of-statement). - -*** C++ namespace blocks are supported, with new syntactic symbols -namespace-open, namespace-close, and innamespace. - -*** File local variable settings of c-file-style and c-file-offsets -makes the style variables local to that buffer only. - -*** New indentation functions c-lineup-close-paren, -c-indent-one-line-block, c-lineup-dont-change. - -*** Improvements (hopefully!) to the way CC Mode is loaded. You -should now be able to do a (require 'cc-mode) to get the entire -package loaded properly for customization in your .emacs file. A new -variable c-initialize-on-load controls this and is t by default. - -** Changes to hippie-expand. - -*** New customization variable `hippie-expand-dabbrev-skip-space'. If -non-nil, trailing spaces may be included in the abbreviation to search for, -which then gives the same behavior as the original `dabbrev-expand'. - -*** New customization variable `hippie-expand-dabbrev-as-symbol'. If -non-nil, characters of syntax '_' is considered part of the word when -expanding dynamically. - -*** New customization variable `hippie-expand-no-restriction'. If -non-nil, narrowed buffers are widened before they are searched. - -*** New customization variable `hippie-expand-only-buffers'. If -non-empty, buffers searched are restricted to the types specified in -this list. Useful for example when constructing new special-purpose -expansion functions with `make-hippie-expand-function'. - -*** Text properties of the expansion are no longer copied. - -** Changes in BibTeX mode. - -*** Any titleword matching a regexp in the new variable -bibtex-autokey-titleword-ignore (case sensitive) is ignored during -automatic key generation. This replaces variable -bibtex-autokey-titleword-first-ignore, which only checked for matches -against the first word in the title. - -*** Autokey generation now uses all words from the title, not just -capitalized words. To avoid conflicts with existing customizations, -bibtex-autokey-titleword-ignore is set up such that words starting with -lowerkey characters will still be ignored. Thus, if you want to use -lowercase words from the title, you will have to overwrite the -bibtex-autokey-titleword-ignore standard setting. - -*** Case conversion of names and title words for automatic key -generation is more flexible. Variable bibtex-autokey-preserve-case is -replaced by bibtex-autokey-titleword-case-convert and -bibtex-autokey-name-case-convert. - -** Changes in vcursor.el. - -*** Support for character terminals is available: there is a new keymap -and the vcursor will appear as an arrow between buffer text. A -variable `vcursor-interpret-input' allows input from the vcursor to be -entered exactly as if typed. Numerous functions, including -`vcursor-compare-windows', have been rewritten to improve consistency -in the selection of windows and corresponding keymaps. - -*** vcursor options can now be altered with M-x customize under the -Editing group once the package is loaded. - -*** Loading vcursor now does not define keys by default, as this is -generally a bad side effect. Use M-x customize to set -vcursor-key-bindings to t to restore the old behavior. - -*** vcursor-auto-disable can be `copy', which turns off copying from the -vcursor, but doesn't disable it, after any non-vcursor command. - -** Ispell changes. - -*** You can now spell check comments and strings in the current -buffer with M-x ispell-comments-and-strings. Comments and strings -are identified by syntax tables in effect. - -*** Generic region skipping implemented. -A single buffer can be broken into a number of regions where text will -and will not be checked. The definitions of the regions can be user -defined. New applications and improvements made available by this -include: - - o URLs are automatically skipped - o EMail message checking is vastly improved. - -*** Ispell can highlight the erroneous word even on non-window terminals. - -** Changes to RefTeX mode - -RefTeX has been updated in order to make it more usable with very -large projects (like a several volume math book). The parser has been -re-written from scratch. To get maximum speed from RefTeX, check the -section `Optimizations' in the manual. - -*** New recursive parser. - -The old version of RefTeX created a single large buffer containing the -entire multifile document in order to parse the document. The new -recursive parser scans the individual files. - -*** Parsing only part of a document. - -Reparsing of changed document parts can now be made faster by enabling -partial scans. To use this feature, read the documentation string of -the variable `reftex-enable-partial-scans' and set the variable to t. - - (setq reftex-enable-partial-scans t) - -*** Storing parsing information in a file. - -This can improve startup times considerably. To turn it on, use - - (setq reftex-save-parse-info t) - -*** Using multiple selection buffers - -If the creation of label selection buffers is too slow (this happens -for large documents), you can reuse these buffers by setting - - (setq reftex-use-multiple-selection-buffers t) - -*** References to external documents. - -The LaTeX package `xr' allows to cross-reference labels in external -documents. RefTeX can provide information about the external -documents as well. To use this feature, set up the \externaldocument -macros required by the `xr' package and rescan the document with -RefTeX. The external labels can then be accessed with the `x' key in -the selection buffer provided by `reftex-reference' (bound to `C-c )'). -The `x' key also works in the table of contents buffer. - -*** Many more labeled LaTeX environments are recognized by default. - -The built-in command list now covers all the standard LaTeX commands, -and all of the major packages included in the LaTeX distribution. - -Also, RefTeX now understands the \appendix macro and changes -the enumeration of sections in the *toc* buffer accordingly. - -*** Mouse support for selection and *toc* buffers - -The mouse can now be used to select items in the selection and *toc* -buffers. See also the new option `reftex-highlight-selection'. - -*** New keymaps for selection and table of contents modes. - -The selection processes for labels and citation keys, and the table of -contents buffer now have their own keymaps: `reftex-select-label-map', -`reftex-select-bib-map', `reftex-toc-map'. The selection processes -have a number of new keys predefined. In particular, TAB lets you -enter a label with completion. Check the on-the-fly help (press `?' -at the selection prompt) or read the Info documentation to find out -more. - -*** Support for the varioref package - -The `v' key in the label selection buffer toggles \ref versus \vref. - -*** New hooks - -Three new hooks can be used to redefine the way labels, references, -and citations are created. These hooks are -`reftex-format-label-function', `reftex-format-ref-function', -`reftex-format-cite-function'. - -*** Citations outside LaTeX - -The command `reftex-citation' may also be used outside LaTeX (e.g. in -a mail buffer). See the Info documentation for details. - -*** Short context is no longer fontified. - -The short context in the label menu no longer copies the -fontification from the text in the buffer. If you prefer it to be -fontified, use - - (setq reftex-refontify-context t) - -** file-cache-minibuffer-complete now accepts a prefix argument. -With a prefix argument, it does not try to do completion of -the file name within its directory; it only checks for other -directories that contain the same file name. - -Thus, given the file name Makefile, and assuming that a file -Makefile.in exists in the same directory, ordinary -file-cache-minibuffer-complete will try to complete Makefile to -Makefile.in and will therefore never look for other directories that -have Makefile. A prefix argument tells it not to look for longer -names such as Makefile.in, so that instead it will look for other -directories--just as if the name were already complete in its present -directory. - -** New modes and packages - -*** There is a new alternative major mode for Perl, Cperl mode. -It has many more features than Perl mode, and some people prefer -it, but some do not. - -*** There is a new major mode, M-x vhdl-mode, for editing files of VHDL -code. - -*** M-x which-function-mode enables a minor mode that displays the -current function name continuously in the mode line, as you move -around in a buffer. - -Which Function mode is effective in major modes which support Imenu. - -*** Gametree is a major mode for editing game analysis trees. The author -uses it for keeping notes about his postal Chess games, but it should -be helpful for other two-player games as well, as long as they have an -established system of notation similar to Chess. - -*** The new minor mode checkdoc-minor-mode provides Emacs Lisp -documentation string checking for style and spelling. The style -guidelines are found in the Emacs Lisp programming manual. - -*** The net-utils package makes some common networking features -available in Emacs. Some of these functions are wrappers around -system utilities (ping, nslookup, etc.); others are implementations of -simple protocols (finger, whois) in Emacs Lisp. There are also -functions to make simple connections to TCP/IP ports for debugging and -the like. - -*** highlight-changes-mode is a minor mode that uses colors to -identify recently changed parts of the buffer text. - -*** The new package `midnight' lets you specify things to be done -within Emacs at midnight--by default, kill buffers that you have not -used in a considerable time. To use this feature, customize -the user option `midnight-mode' to t. - -*** The file generic-x.el defines a number of simple major modes. - - apache-generic-mode: For Apache and NCSA httpd configuration files - samba-generic-mode: Samba configuration files - fvwm-generic-mode: For fvwm initialization files - x-resource-generic-mode: For X resource files - hosts-generic-mode: For hosts files (.rhosts, /etc/hosts, etc.) - mailagent-rules-generic-mode: For mailagent .rules files - javascript-generic-mode: For JavaScript files - vrml-generic-mode: For VRML files - java-manifest-generic-mode: For Java MANIFEST files - java-properties-generic-mode: For Java property files - mailrc-generic-mode: For .mailrc files - - Platform-specific modes: - - prototype-generic-mode: For Solaris/Sys V prototype files - pkginfo-generic-mode: For Solaris/Sys V pkginfo files - alias-generic-mode: For C shell alias files - inf-generic-mode: For MS-Windows INF files - ini-generic-mode: For MS-Windows INI files - reg-generic-mode: For MS-Windows Registry files - bat-generic-mode: For MS-Windows BAT scripts - rc-generic-mode: For MS-Windows Resource files - rul-generic-mode: For InstallShield scripts - -* Lisp changes in Emacs 20.3 since the Emacs Lisp Manual was published - -** If you want a Lisp file to be read in unibyte mode, -use -*-unibyte: t;-*- on its first line. -That will force Emacs to read that file in unibyte mode. -Otherwise, the file will be loaded and byte-compiled in multibyte mode. - -Thus, each lisp file is read in a consistent way regardless of whether -you started Emacs with --unibyte, so that a Lisp program gives -consistent results regardless of how Emacs was started. - -** The new function assoc-default is useful for searching an alist, -and using a default value if the key is not found there. You can -specify a comparison predicate, so this function is useful for -searching comparing a string against an alist of regular expressions. - -** The functions unibyte-char-to-multibyte and -multibyte-char-to-unibyte convert between unibyte and multibyte -character codes, in a way that is appropriate for the current language -environment. - -** The functions read-event, read-char and read-char-exclusive now -take two optional arguments. PROMPT, if non-nil, specifies a prompt -string. SUPPRESS-INPUT-METHOD, if non-nil, says to disable the -current input method for reading this one event. - -** Two new variables print-escape-nonascii and print-escape-multibyte -now control whether to output certain characters as -backslash-sequences. print-escape-nonascii applies to single-byte -non-ASCII characters; print-escape-multibyte applies to multibyte -characters. Both of these variables are used only when printing -in readable fashion (prin1 uses them, princ does not). - -* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published - -** Compiled Emacs Lisp files made with the modified "MBSK" version -of Emacs 20.2 do not work in Emacs 20.3. - -** Buffer positions are now measured in characters, as they were -in Emacs 19 and before. This means that (forward-char 1) -always increases point by 1. - -The function chars-in-region now just subtracts its arguments. It is -considered obsolete. The function char-boundary-p has been deleted. - -See below for additional changes relating to multibyte characters. - -** defcustom, defface and defgroup now accept the keyword `:version'. -Use this to specify in which version of Emacs a certain variable's -default value changed. For example, - - (defcustom foo-max 34 "*Maximum number of foo's allowed." - :type 'integer - :group 'foo - :version "20.3") - - (defgroup foo-group nil "The foo group." - :version "20.3") - -If an entire new group is added or the variables in it have the -default values changed, then just add a `:version' to that group. It -is recommended that new packages added to the distribution contain a -`:version' in the top level group. - -This information is used to control the customize-changed-options command. - -** It is now an error to change the value of a symbol whose name -starts with a colon--if it is interned in the standard obarray. - -However, setting such a symbol to its proper value, which is that -symbol itself, is not an error. This is for the sake of programs that -support previous Emacs versions by explicitly setting these variables -to themselves. - -If you set the variable keyword-symbols-constant-flag to nil, -this error is suppressed, and you can set these symbols to any -values whatever. - -** There is a new debugger command, R. -It evaluates an expression like e, but saves the result -in the buffer *Debugger-record*. - -** Frame-local variables. - -You can now make a variable local to various frames. To do this, call -the function make-variable-frame-local; this enables frames to have -local bindings for that variable. - -These frame-local bindings are actually frame parameters: you create a -frame-local binding in a specific frame by calling -modify-frame-parameters and specifying the variable name as the -parameter name. - -Buffer-local bindings take precedence over frame-local bindings. -Thus, if the current buffer has a buffer-local binding, that binding is -active; otherwise, if the selected frame has a frame-local binding, -that binding is active; otherwise, the default binding is active. - -It would not be hard to implement window-local bindings, but it is not -clear that this would be very useful; windows tend to come and go in a -very transitory fashion, so that trying to produce any specific effect -through a window-local binding would not be very robust. - -** `sregexq' and `sregex' are two new functions for constructing -"symbolic regular expressions." These are Lisp expressions that, when -evaluated, yield conventional string-based regexps. The symbolic form -makes it easier to construct, read, and maintain complex patterns. -See the documentation in sregex.el. - -** parse-partial-sexp's return value has an additional element which -is used to pass information along if you pass it to another call to -parse-partial-sexp, starting its scan where the first call ended. -The contents of this field are not yet finalized. - -** eval-region now accepts a fourth optional argument READ-FUNCTION. -If it is non-nil, that function is used instead of `read'. - -** unload-feature by default removes the feature's functions from -known hooks to avoid trouble, but a package providing FEATURE can -define a hook FEATURE-unload-hook to be run by unload-feature instead. - -** read-from-minibuffer no longer returns the argument DEFAULT-VALUE -when the user enters empty input. It now returns the null string, as -it did in Emacs 19. The default value is made available in the -history via M-n, but it is not applied here as a default. - -The other, more specialized minibuffer-reading functions continue to -return the default value (not the null string) when the user enters -empty input. - -** The new variable read-buffer-function controls which routine to use -for selecting buffers. For example, if you set this variable to -`iswitchb-read-buffer', iswitchb will be used to read buffer names. -Other functions can also be used if they accept the same arguments as -`read-buffer' and return the selected buffer name as a string. - -** The new function read-passwd reads a password from the terminal, -echoing a period for each character typed. It takes three arguments: -a prompt string, a flag which says "read it twice to make sure", and a -default password to use if the user enters nothing. - -** The variable fill-nobreak-predicate gives major modes a way to -specify not to break a line at certain places. Its value is a -function which is called with no arguments, with point located at the -place where a break is being considered. If the function returns -non-nil, then the line won't be broken there. - -** window-end now takes an optional second argument, UPDATE. -If this is non-nil, then the function always returns an accurate -up-to-date value for the buffer position corresponding to the -end of the window, even if this requires computation. - -** other-buffer now takes an optional argument FRAME -which specifies which frame's buffer list to use. -If it is nil, that means use the selected frame's buffer list. - -** The new variable buffer-display-time, always local in every buffer, -holds the value of (current-time) as of the last time that a window -was directed to display this buffer. - -** It is now meaningful to compare two window-configuration objects -with `equal'. Two window-configuration objects are equal if they -describe equivalent arrangements of windows, in the same frame--in -other words, if they would give the same results if passed to -set-window-configuration. - -** compare-window-configurations is a new function that compares two -window configurations loosely. It ignores differences in saved buffer -positions and scrolling, and considers only the structure and sizes of -windows and the choice of buffers to display. - -** The variable minor-mode-overriding-map-alist allows major modes to -override the key bindings of a minor mode. The elements of this alist -look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP). - -If the VARIABLE in an element of minor-mode-overriding-map-alist has a -non-nil value, the paired KEYMAP is active, and totally overrides the -map (if any) specified for the same variable in minor-mode-map-alist. - -minor-mode-overriding-map-alist is automatically local in all buffers, -and it is meant to be set by major modes. - -** The function match-string-no-properties is like match-string -except that it discards all text properties from the result. - -** The function load-average now accepts an optional argument -USE-FLOATS. If it is non-nil, the load average values are returned as -floating point numbers, rather than as integers to be divided by 100. - -** The new variable temporary-file-directory specifies the directory -to use for creating temporary files. The default value is determined -in a reasonable way for your operating system; on GNU and Unix systems -it is based on the TMP and TMPDIR environment variables. - -** Menu changes - -*** easymenu.el now uses the new menu item format and supports the -keywords :visible and :filter. The existing keyword :keys is now -better supported. - -The variable `easy-menu-precalculate-equivalent-keybindings' controls -a new feature which calculates keyboard equivalents for the menu when -you define the menu. The default is t. If you rarely use menus, you -can set the variable to nil to disable this precalculation feature; -then the calculation is done only if you use the menu bar. - -*** A new format for menu items is supported. - -In a keymap, a key binding that has the format - (STRING . REAL-BINDING) or (STRING HELP-STRING . REAL-BINDING) -defines a menu item. Now a menu item definition may also be a list that -starts with the symbol `menu-item'. - -The format is: - (menu-item ITEM-NAME) or - (menu-item ITEM-NAME REAL-BINDING . ITEM-PROPERTY-LIST) -where ITEM-NAME is an expression which evaluates to the menu item -string, and ITEM-PROPERTY-LIST has the form of a property list. -The supported properties include - -:enable FORM Evaluate FORM to determine whether the - item is enabled. -:visible FORM Evaluate FORM to determine whether the - item should appear in the menu. -:filter FILTER-FN - FILTER-FN is a function of one argument, - which will be REAL-BINDING. - It should return a binding to use instead. -:keys DESCRIPTION - DESCRIPTION is a string that describes an equivalent keyboard - binding for REAL-BINDING. DESCRIPTION is expanded with - `substitute-command-keys' before it is used. -:key-sequence KEY-SEQUENCE - KEY-SEQUENCE is a key-sequence for an equivalent - keyboard binding. -:key-sequence nil - This means that the command normally has no - keyboard equivalent. -:help HELP HELP is the extra help string (not currently used). -:button (TYPE . SELECTED) - TYPE is :toggle or :radio. - SELECTED is a form, to be evaluated, and its - value says whether this button is currently selected. - -Buttons are at the moment only simulated by prefixes in the menu. -Eventually ordinary X-buttons may be supported. - -(menu-item ITEM-NAME) defines unselectable item. - -** New event types - -*** The new event type `mouse-wheel' is generated by a wheel on a -mouse (such as the MS Intellimouse). The event contains a delta that -corresponds to the amount and direction that the wheel is rotated, -which is typically used to implement a scroll or zoom. The format is: - - (mouse-wheel POSITION DELTA) - -where POSITION is a list describing the position of the event in the -same format as a mouse-click event, and DELTA is a signed number -indicating the number of increments by which the wheel was rotated. A -negative DELTA indicates that the wheel was rotated backwards, towards -the user, and a positive DELTA indicates that the wheel was rotated -forward, away from the user. - -As of now, this event type is generated only on MS Windows. - -*** The new event type `drag-n-drop' is generated when a group of -files is selected in an application outside of Emacs, and then dragged -and dropped onto an Emacs frame. The event contains a list of -filenames that were dragged and dropped, which are then typically -loaded into Emacs. The format is: - - (drag-n-drop POSITION FILES) - -where POSITION is a list describing the position of the event in the -same format as a mouse-click event, and FILES is the list of filenames -that were dragged and dropped. - -As of now, this event type is generated only on MS Windows. - -** Changes relating to multibyte characters. - -*** The variable enable-multibyte-characters is now read-only; -any attempt to set it directly signals an error. The only way -to change this value in an existing buffer is with set-buffer-multibyte. - -*** In a string constant, `\ ' now stands for "nothing at all". You -can use it to terminate a hex escape which is followed by a character -that could otherwise be read as part of the hex escape. - -*** String indices are now measured in characters, as they were -in Emacs 19 and before. - -The function chars-in-string has been deleted. -The function concat-chars has been renamed to `string'. - -*** The function set-buffer-multibyte sets the flag in the current -buffer that says whether the buffer uses multibyte representation or -unibyte representation. If the argument is nil, it selects unibyte -representation. Otherwise it selects multibyte representation. - -This function does not change the contents of the buffer, viewed -as a sequence of bytes. However, it does change the contents -viewed as characters; a sequence of two bytes which is treated as -one character when the buffer uses multibyte representation -will count as two characters using unibyte representation. - -This function sets enable-multibyte-characters to record which -representation is in use. It also adjusts various data in the buffer -(including its markers, overlays and text properties) so that they are -consistent with the new representation. - -*** string-make-multibyte takes a string and converts it to multibyte -representation. Most of the time, you don't need to care -about the representation, because Emacs converts when necessary; -however, it makes a difference when you compare strings. - -The conversion of non-ASCII characters works by adding the value of -nonascii-insert-offset to each character, or by translating them -using the table nonascii-translation-table. - -*** string-make-unibyte takes a string and converts it to unibyte -representation. Most of the time, you don't need to care about the -representation, but it makes a difference when you compare strings. - -The conversion from multibyte to unibyte representation -loses information; the only time Emacs performs it automatically -is when inserting a multibyte string into a unibyte buffer. - -*** string-as-multibyte takes a string, and returns another string -which contains the same bytes, but treats them as multibyte. - -*** string-as-unibyte takes a string, and returns another string -which contains the same bytes, but treats them as unibyte. - -*** The new function compare-strings lets you compare -portions of two strings. Unibyte strings are converted to multibyte, -so that a unibyte string can match a multibyte string. -You can specify whether to ignore case or not. - -*** assoc-ignore-case now uses compare-strings so that -it can treat unibyte and multibyte strings as equal. - -*** Regular expression operations and buffer string searches now -convert the search pattern to multibyte or unibyte to accord with the -buffer or string being searched. - -One consequence is that you cannot always use \200-\377 inside of -[...] to match all non-ASCII characters. This does still work when -searching or matching a unibyte buffer or string, but not when -searching or matching a multibyte string. Unfortunately, there is no -obvious choice of syntax to use within [...] for that job. But, what -you want is just to match all non-ASCII characters, the regular -expression [^\0-\177] works for it. - -*** Structure of coding system changed. - -All coding systems (including aliases and subsidiaries) are named -by symbols; the symbol's `coding-system' property is a vector -which defines the coding system. Aliases share the same vector -as the principal name, so that altering the contents of this -vector affects the principal name and its aliases. You can define -your own alias name of a coding system by the function -define-coding-system-alias. - -The coding system definition includes a property list of its own. Use -the new functions `coding-system-get' and `coding-system-put' to -access such coding system properties as post-read-conversion, -pre-write-conversion, character-translation-table-for-decode, -character-translation-table-for-encode, mime-charset, and -safe-charsets. For instance, (coding-system-get 'iso-latin-1 -'mime-charset) gives the corresponding MIME-charset parameter -`iso-8859-1'. - -Among the coding system properties listed above, safe-charsets is new. -The value of this property is a list of character sets which this -coding system can correctly encode and decode. For instance: -(coding-system-get 'iso-latin-1 'safe-charsets) => (ascii latin-iso8859-1) - -Here, "correctly encode" means that the encoded character sets can -also be handled safely by systems other than Emacs as far as they -are capable of that coding system. Though, Emacs itself can encode -the other character sets and read it back correctly. - -*** The new function select-safe-coding-system can be used to find a -proper coding system for encoding the specified region or string. -This function requires a user interaction. - -*** The new functions find-coding-systems-region and -find-coding-systems-string are helper functions used by -select-safe-coding-system. They return a list of all proper coding -systems to encode a text in some region or string. If you don't want -a user interaction, use one of these functions instead of -select-safe-coding-system. - -*** The explicit encoding and decoding functions, such as -decode-coding-region and encode-coding-string, now set -last-coding-system-used to reflect the actual way encoding or decoding -was done. - -*** The new function detect-coding-with-language-environment can be -used to detect a coding system of text according to priorities of -coding systems used by some specific language environment. - -*** The functions detect-coding-region and detect-coding-string always -return a list if the arg HIGHEST is nil. Thus, if only ASCII -characters are found, they now return a list of single element -`undecided' or its subsidiaries. - -*** The new functions coding-system-change-eol-conversion and -coding-system-change-text-conversion can be used to get a different -coding system than what specified only in how end-of-line or text is -converted. - -*** The new function set-selection-coding-system can be used to set a -coding system for communicating with other X clients. - -*** The function `map-char-table' now passes as argument only valid -character codes, plus generic characters that stand for entire -character sets or entire subrows of a character set. In other words, -each time `map-char-table' calls its FUNCTION argument, the key value -either will be a valid individual character code, or will stand for a -range of characters. - -*** The new function `char-valid-p' can be used for checking whether a -Lisp object is a valid character code or not. - -*** The new function `charset-after' returns a charset of a character -in the current buffer at position POS. - -*** Input methods are now implemented using the variable -input-method-function. If this is non-nil, its value should be a -function; then, whenever Emacs reads an input event that is a printing -character with no modifier bits, it calls that function, passing the -event as an argument. Often this function will read more input, first -binding input-method-function to nil. - -The return value should be a list of the events resulting from input -method processing. These events will be processed sequentially as -input, before resorting to unread-command-events. Events returned by -the input method function are not passed to the input method function, -not even if they are printing characters with no modifier bits. - -The input method function is not called when reading the second and -subsequent events of a key sequence. - -*** You can customize any language environment by using -set-language-environment-hook and exit-language-environment-hook. - -The hook `exit-language-environment-hook' should be used to undo -customizations that you made with set-language-environment-hook. For -instance, if you set up a special key binding for a specific language -environment by set-language-environment-hook, you should set up -exit-language-environment-hook to restore the normal key binding. - -* Changes in Emacs 20.1 - -** Emacs has a new facility for customization of its many user -options. It is called M-x customize. With this facility you can look -at the many user options in an organized way; they are grouped into a -tree structure. - -M-x customize also knows what sorts of values are legitimate for each -user option and ensures that you don't use invalid values. - -With M-x customize, you can set options either for the present Emacs -session or permanently. (Permanent settings are stored automatically -in your .emacs file.) - -** Scroll bars are now on the left side of the window. -You can change this with M-x customize-option scroll-bar-mode. - -** The mode line no longer includes the string `Emacs'. -This makes more space in the mode line for other information. - -** When you select a region with the mouse, it is highlighted -immediately afterward. At that time, if you type the DELETE key, it -kills the region. - -The BACKSPACE key, and the ASCII character DEL, do not do this; they -delete the character before point, as usual. - -** In an incremental search the whole current match is highlighted -on terminals which support this. (You can disable this feature -by setting search-highlight to nil.) - -** In the minibuffer, in some cases, you can now use M-n to -insert the default value into the minibuffer as text. In effect, -the default value (if the minibuffer routines know it) is tacked -onto the history "in the future". (The more normal use of the -history list is to use M-p to insert minibuffer input used in the -past.) - -** In Text mode, now only blank lines separate paragraphs. -This makes it possible to get the full benefit of Adaptive Fill mode -in Text mode, and other modes derived from it (such as Mail mode). -TAB in Text mode now runs the command indent-relative; this -makes a practical difference only when you use indented paragraphs. - -As a result, the old Indented Text mode is now identical to Text mode, -and is an alias for it. - -If you want spaces at the beginning of a line to start a paragraph, -use the new mode, Paragraph Indent Text mode. - -** Scrolling changes - -*** Scroll commands to scroll a whole screen now preserve the screen -position of the cursor, if scroll-preserve-screen-position is non-nil. - -In this mode, if you scroll several screens back and forth, finishing -on the same screen where you started, the cursor goes back to the line -where it started. - -*** If you set scroll-conservatively to a small number, then when you -move point a short distance off the screen, Emacs will scroll the -screen just far enough to bring point back on screen, provided that -does not exceed `scroll-conservatively' lines. - -*** The new variable scroll-margin says how close point can come to the -top or bottom of a window. It is a number of screen lines; if point -comes within that many lines of the top or bottom of the window, Emacs -recenters the window. - -** International character set support (MULE) - -Emacs now supports a wide variety of international character sets, -including European variants of the Latin alphabet, as well as Chinese, -Devanagari (Hindi and Marathi), Ethiopian, Greek, IPA, Japanese, -Korean, Lao, Russian, Thai, Tibetan, and Vietnamese scripts. These -features have been merged from the modified version of Emacs known as -MULE (for "MULti-lingual Enhancement to GNU Emacs") - -Users of these scripts have established many more-or-less standard -coding systems for storing files. Emacs uses a single multibyte -character encoding within Emacs buffers; it can translate from a wide -variety of coding systems when reading a file and can translate back -into any of these coding systems when saving a file. - -Keyboards, even in the countries where these character sets are used, -generally don't have keys for all the characters in them. So Emacs -supports various "input methods", typically one for each script or -language, to make it possible to type them. - -The Emacs internal multibyte encoding represents a non-ASCII -character as a sequence of bytes in the range 0200 through 0377. - -The new prefix key C-x RET is used for commands that pertain -to multibyte characters, coding systems, and input methods. - -You can disable multibyte character support as follows: - - (setq-default enable-multibyte-characters nil) - -Calling the function standard-display-european turns off multibyte -characters, unless you specify a non-nil value for the second -argument, AUTO. This provides compatibility for people who are -already using standard-display-european to continue using unibyte -characters for their work until they want to change. - -*** Input methods - -An input method is a kind of character conversion which is designed -specifically for interactive input. In Emacs, typically each language -has its own input method (though sometimes several languages which use -the same characters can share one input method). Some languages -support several input methods. - -The simplest kind of input method works by mapping ASCII letters into -another alphabet. This is how the Greek and Russian input methods -work. - -A more powerful technique is composition: converting sequences of -characters into one letter. Many European input methods use -composition to produce a single non-ASCII letter from a sequence which -consists of a letter followed by diacritics. For example, a' is one -sequence of two characters that might be converted into a single -letter. - -The input methods for syllabic scripts typically use mapping followed -by conversion. The input methods for Thai and Korean work this way. -First, letters are mapped into symbols for particular sounds or tone -marks; then, sequences of these which make up a whole syllable are -mapped into one syllable sign--most often a "composite character". - -None of these methods works very well for Chinese and Japanese, so -they are handled specially. First you input a whole word using -phonetic spelling; then, after the word is in the buffer, Emacs -converts it into one or more characters using a large dictionary. - -Since there is more than one way to represent a phonetically spelled -word using Chinese characters, Emacs can only guess which one to use; -typically these input methods give you a way to say "guess again" if -the first guess is wrong. - -*** The command C-x RET m (toggle-enable-multibyte-characters) -turns multibyte character support on or off for the current buffer. - -If multibyte character support is turned off in a buffer, then each -byte is a single character, even codes 0200 through 0377--exactly as -they did in Emacs 19.34. This includes the features for support for -the European characters, ISO Latin-1 and ISO Latin-2. - -However, there is no need to turn off multibyte character support to -use ISO Latin-1 or ISO Latin-2; the Emacs multibyte character set -includes all the characters in these character sets, and Emacs can -translate automatically to and from either one. - -*** Visiting a file in unibyte mode. - -Turning off multibyte character support in the buffer after visiting a -file with multibyte code conversion will display the multibyte -sequences already in the buffer, byte by byte. This is probably not -what you want. - -If you want to edit a file of unibyte characters (Latin-1, for -example), you can do it by specifying `no-conversion' as the coding -system when reading the file. This coding system also turns off -multibyte characters in that buffer. - -If you turn off multibyte character support entirely, this turns off -character conversion as well. - -*** Displaying international characters on X Windows. - -A font for X typically displays just one alphabet or script. -Therefore, displaying the entire range of characters Emacs supports -requires using many fonts. - -Therefore, Emacs now supports "fontsets". Each fontset is a -collection of fonts, each assigned to a range of character codes. - -A fontset has a name, like a font. Individual fonts are defined by -the X server; fontsets are defined within Emacs itself. But once you -have defined a fontset, you can use it in a face or a frame just as -you would use a font. - -If a fontset specifies no font for a certain character, or if it -specifies a font that does not exist on your system, then it cannot -display that character. It will display an empty box instead. - -The fontset height and width are determined by the ASCII characters -(that is, by the font in the fontset which is used for ASCII -characters). - -*** Defining fontsets. - -Emacs does not use any fontset by default. Its default font is still -chosen as in previous versions. You can tell Emacs to use a fontset -with the `-fn' option or the `Font' X resource. - -Emacs creates a standard fontset automatically according to the value -of standard-fontset-spec. This fontset's short name is -`fontset-standard'. Bold, italic, and bold-italic variants of the -standard fontset are created automatically. - -If you specify a default ASCII font with the `Font' resource or `-fn' -argument, a fontset is generated from it. This works by replacing the -FOUNDARY, FAMILY, ADD_STYLE, and AVERAGE_WIDTH fields of the font name -with `*' then using this to specify a fontset. This fontset's short -name is `fontset-startup'. - -Emacs checks resources of the form Fontset-N where N is 0, 1, 2... -The resource value should have this form: - FONTSET-NAME, [CHARSET-NAME:FONT-NAME]... -FONTSET-NAME should have the form of a standard X font name, except: - * most fields should be just the wild card "*". - * the CHARSET_REGISTRY field should be "fontset" - * the CHARSET_ENCODING field can be any nickname of the fontset. -The construct CHARSET-NAME:FONT-NAME can be repeated any number -of times; each time specifies the font for one character set. -CHARSET-NAME should be the name of a character set, and FONT-NAME -should specify an actual font to use for that character set. - -Each of these fontsets has an alias which is made from the -last two font name fields, CHARSET_REGISTRY and CHARSET_ENCODING. -You can refer to the fontset by that alias or by its full name. - -For any character sets that you don't mention, Emacs tries to choose a -font by substituting into FONTSET-NAME. For instance, with the -following resource, - Emacs*Fontset-0: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24 -the font for ASCII is generated as below: - -*-fixed-medium-r-normal-*-24-*-ISO8859-1 -Here is the substitution rule: - Change CHARSET_REGISTRY and CHARSET_ENCODING to that of the charset - defined in the variable x-charset-registries. For instance, ASCII has - the entry (ascii . "ISO8859-1") in this variable. Then, reduce - sequences of wild cards -*-...-*- with a single wildcard -*-. - (This is to prevent use of auto-scaled fonts.) - -The function which processes the fontset resource value to create the -fontset is called create-fontset-from-fontset-spec. You can also call -that function explicitly to create a fontset. - -With the X resource Emacs.Font, you can specify a fontset name just -like an actual font name. But be careful not to specify a fontset -name in a wildcard resource like Emacs*Font--that tries to specify the -fontset for other purposes including menus, and they cannot handle -fontsets. - -*** The command M-x set-language-environment sets certain global Emacs -defaults for a particular choice of language. - -Selecting a language environment typically specifies a default input -method and which coding systems to recognize automatically when -visiting files. However, it does not try to reread files you have -already visited; the text in those buffers is not affected. The -language environment may also specify a default choice of coding -system for new files that you create. - -It makes no difference which buffer is current when you use -set-language-environment, because these defaults apply globally to the -whole Emacs session. - -For example, M-x set-language-environment RET Latin-1 RET -chooses the Latin-1 character set. In the .emacs file, you can do this -with (set-language-environment "Latin-1"). - -*** The command C-x RET f (set-buffer-file-coding-system) -specifies the file coding system for the current buffer. This -specifies what sort of character code translation to do when saving -the file. As an argument, you must specify the name of one of the -coding systems that Emacs supports. - -*** The command C-x RET c (universal-coding-system-argument) -lets you specify a coding system when you read or write a file. -This command uses the minibuffer to read a coding system name. -After you exit the minibuffer, the specified coding system -is used for *the immediately following command*. - -So if the immediately following command is a command to read or -write a file, it uses the specified coding system for that file. - -If the immediately following command does not use the coding system, -then C-x RET c ultimately has no effect. - -For example, C-x RET c iso-8859-1 RET C-x C-f temp RET -visits the file `temp' treating it as ISO Latin-1. - -*** You can specify the coding system for a file using the -*- -construct. Include `coding: CODINGSYSTEM;' inside the -*-...-*- -to specify use of coding system CODINGSYSTEM. You can also -specify the coding system in a local variable list at the end -of the file. - -*** The command C-x RET t (set-terminal-coding-system) specifies -the coding system for terminal output. If you specify a character -code for terminal output, all characters output to the terminal are -translated into that character code. - -This feature is useful for certain character-only terminals built in -various countries to support the languages of those countries. - -By default, output to the terminal is not translated at all. - -*** The command C-x RET k (set-keyboard-coding-system) specifies -the coding system for keyboard input. - -Character code translation of keyboard input is useful for terminals -with keys that send non-ASCII graphic characters--for example, -some terminals designed for ISO Latin-1 or subsets of it. - -By default, keyboard input is not translated at all. - -Character code translation of keyboard input is similar to using an -input method, in that both define sequences of keyboard input that -translate into single characters. However, input methods are designed -to be convenient for interactive use, while the code translations are -designed to work with terminals. - -*** The command C-x RET p (set-buffer-process-coding-system) -specifies the coding system for input and output to a subprocess. -This command applies to the current buffer; normally, each subprocess -has its own buffer, and thus you can use this command to specify -translation to and from a particular subprocess by giving the command -in the corresponding buffer. - -By default, process input and output are not translated at all. - -*** The variable file-name-coding-system specifies the coding system -to use for encoding file names before operating on them. -It is also used for decoding file names obtained from the system. - -*** The command C-\ (toggle-input-method) activates or deactivates -an input method. If no input method has been selected before, the -command prompts for you to specify the language and input method you -want to use. - -C-u C-\ (select-input-method) lets you switch to a different input -method. C-h C-\ (or C-h I) describes the current input method. - -*** Some input methods remap the keyboard to emulate various keyboard -layouts commonly used for particular scripts. How to do this -remapping properly depends on your actual keyboard layout. To specify -which layout your keyboard has, use M-x quail-set-keyboard-layout. - -*** The command C-h C (describe-coding-system) displays -the coding systems currently selected for various purposes, plus -related information. - -*** The command C-h h (view-hello-file) displays a file called -HELLO, which has examples of text in many languages, using various -scripts. - -*** The command C-h L (describe-language-support) displays -information about the support for a particular language. -You specify the language as an argument. - -*** The mode line now contains a letter or character that identifies -the coding system used in the visited file. It normally follows the -first dash. - -A dash indicates the default state of affairs: no code conversion -(except CRLF => newline if appropriate). `=' means no conversion -whatsoever. The ISO 8859 coding systems are represented by digits -1 through 9. Other coding systems are represented by letters: - - A alternativnyj (Russian) - B big5 (Chinese) - C cn-gb-2312 (Chinese) - C iso-2022-cn (Chinese) - D in-is13194-devanagari (Indian languages) - E euc-japan (Japanese) - I iso-2022-cjk or iso-2022-ss2 (Chinese, Japanese, Korean) - J junet (iso-2022-7) or old-jis (iso-2022-jp-1978-irv) (Japanese) - K euc-korea (Korean) - R koi8 (Russian) - Q tibetan - S shift_jis (Japanese) - T lao - T tis620 (Thai) - V viscii or vscii (Vietnamese) - i iso-2022-lock (Chinese, Japanese, Korean) - k iso-2022-kr (Korean) - v viqr (Vietnamese) - z hz (Chinese) - -When you are using a character-only terminal (not a window system), -two additional characters appear in between the dash and the file -coding system. These two characters describe the coding system for -keyboard input, and the coding system for terminal output. - -*** The new variable rmail-file-coding-system specifies the code -conversion to use for RMAIL files. The default value is nil. - -When you read mail with Rmail, each message is decoded automatically -into Emacs' internal format. This has nothing to do with -rmail-file-coding-system. That variable controls reading and writing -Rmail files themselves. - -*** The new variable sendmail-coding-system specifies the code -conversion for outgoing mail. The default value is nil. - -Actually, there are three different ways of specifying the coding system -for sending mail: - -- If you use C-x RET f in the mail buffer, that takes priority. -- Otherwise, if you set sendmail-coding-system non-nil, that specifies it. -- Otherwise, the default coding system for new files is used, - if that is non-nil. That comes from your language environment. -- Otherwise, Latin-1 is used. - -*** The command C-h t (help-with-tutorial) accepts a prefix argument -to specify the language for the tutorial file. Currently, English, -Japanese, Korean and Thai are supported. We welcome additional -translations. - -** An easy new way to visit a file with no code or format conversion -of any kind: Use M-x find-file-literally. There is also a command -insert-file-literally which inserts a file into the current buffer -without any conversion. - -** C-q's handling of octal character codes is changed. -You can now specify any number of octal digits. -RET terminates the digits and is discarded; -any other non-digit terminates the digits and is then used as input. - -** There are new commands for looking up Info documentation for -functions, variables and file names used in your programs. - -Type M-x info-lookup-symbol to look up a symbol in the buffer at point. -Type M-x info-lookup-file to look up a file in the buffer at point. - -Precisely which Info files are used to look it up depends on the major -mode. For example, in C mode, the GNU libc manual is used. - -** M-TAB in most programming language modes now runs the command -complete-symbol. This command performs completion on the symbol name -in the buffer before point. - -With a numeric argument, it performs completion based on the set of -symbols documented in the Info files for the programming language that -you are using. - -With no argument, it does completion based on the current tags tables, -just like the old binding of M-TAB (complete-tag). - -** File locking works with NFS now. - -The lock file for FILENAME is now a symbolic link named .#FILENAME, -in the same directory as FILENAME. - -This means that collision detection between two different machines now -works reasonably well; it also means that no file server or directory -can become a bottleneck. - -The new method does have drawbacks. It means that collision detection -does not operate when you edit a file in a directory where you cannot -create new files. Collision detection also doesn't operate when the -file server does not support symbolic links. But these conditions are -rare, and the ability to have collision detection while using NFS is -so useful that the change is worth while. - -When Emacs or a system crashes, this may leave behind lock files which -are stale. So you may occasionally get warnings about spurious -collisions. When you determine that the collision is spurious, just -tell Emacs to go ahead anyway. - -** If you wish to use Show Paren mode to display matching parentheses, -it is no longer sufficient to load paren.el. Instead you must call -show-paren-mode. - -** If you wish to use Delete Selection mode to replace a highlighted -selection when you insert new text, it is no longer sufficient to load -delsel.el. Instead you must call the function delete-selection-mode. - -** If you wish to use Partial Completion mode to complete partial words -within symbols or filenames, it is no longer sufficient to load -complete.el. Instead you must call the function partial-completion-mode. - -** If you wish to use uniquify to rename buffers for you, -it is no longer sufficient to load uniquify.el. You must also -set uniquify-buffer-name-style to one of the non-nil legitimate values. - -** Changes in View mode. - -*** Several new commands are available in View mode. -Do H in view mode for a list of commands. - -*** There are two new commands for entering View mode: -view-file-other-frame and view-buffer-other-frame. - -*** Exiting View mode does a better job of restoring windows to their -previous state. - -*** New customization variable view-scroll-auto-exit. If non-nil, -scrolling past end of buffer makes view mode exit. - -*** New customization variable view-exits-all-viewing-windows. If -non-nil, view-mode will at exit restore all windows viewing buffer, -not just the selected window. - -*** New customization variable view-read-only. If non-nil, visiting a -read-only file automatically enters View mode, and toggle-read-only -turns View mode on or off. - -*** New customization variable view-remove-frame-by-deleting controls -how to remove a not needed frame at view mode exit. If non-nil, -delete the frame, if nil make an icon of it. - -** C-x v l, the command to print a file's version control log, -now positions point at the entry for the file's current branch version. - -** C-x v =, the command to compare a file with the last checked-in version, -has a new feature. If the file is currently not locked, so that it is -presumably identical to the last checked-in version, the command now asks -which version to compare with. - -** When using hideshow.el, incremental search can temporarily show hidden -blocks if a match is inside the block. - -The block is hidden again if the search is continued and the next match -is outside the block. By customizing the variable -isearch-hide-immediately you can choose to hide all the temporarily -shown blocks only when exiting from incremental search. - -By customizing the variable hs-isearch-open you can choose what kind -of blocks to temporarily show during isearch: comment blocks, code -blocks, all of them or none. - -** The new command C-x 4 0 (kill-buffer-and-window) kills the -current buffer and deletes the selected window. It asks for -confirmation first. - -** C-x C-w, which saves the buffer into a specified file name, -now changes the major mode according to that file name. -However, the mode will not be changed if -(1) a local variables list or the `-*-' line specifies a major mode, or -(2) the current major mode is a "special" mode, - not suitable for ordinary files, or -(3) the new file name does not particularly specify any mode. - -This applies to M-x set-visited-file-name as well. - -However, if you set change-major-mode-with-file-name to nil, then -these commands do not change the major mode. - -** M-x occur changes. - -*** If the argument to M-x occur contains upper case letters, -it performs a case-sensitive search. - -*** In the *Occur* buffer made by M-x occur, -if you type g or M-x revert-buffer, this repeats the search -using the same regular expression and the same buffer as before. - -** In Transient Mark mode, the region in any one buffer is highlighted -in just one window at a time. At first, it is highlighted in the -window where you set the mark. The buffer's highlighting remains in -that window unless you select to another window which shows the same -buffer--then the highlighting moves to that window. - -** The feature to suggest key bindings when you use M-x now operates -after the command finishes. The message suggesting key bindings -appears temporarily in the echo area. The previous echo area contents -come back after a few seconds, in case they contain useful information. - -** Each frame now independently records the order for recently -selected buffers, so that the default for C-x b is now based on the -buffers recently selected in the selected frame. - -** Outline mode changes. - -*** Outline mode now uses overlays (this is the former noutline.el). - -*** Incremental searches skip over invisible text in Outline mode. - -** When a minibuffer window is active but not the selected window, if -you try to use the minibuffer, you used to get a nested minibuffer. -Now, this not only gives an error, it also cancels the minibuffer that -was already active. - -The motive for this change is so that beginning users do not -unknowingly move away from minibuffers, leaving them active, and then -get confused by it. - -If you want to be able to have recursive minibuffers, you must -set enable-recursive-minibuffers to non-nil. - -** Changes in dynamic abbrevs. - -*** Expanding dynamic abbrevs with M-/ is now smarter about case -conversion. If the expansion has mixed case not counting the first -character, and the abbreviation matches the beginning of the expansion -including case, then the expansion is copied verbatim. - -The expansion is also copied verbatim if the abbreviation itself has -mixed case. And using SPC M-/ to copy an additional word always -copies it verbatim except when the previous copied word is all caps. - -*** The values of `dabbrev-case-replace' and `dabbrev-case-fold-search' -are no longer Lisp expressions. They have simply three possible -values. - -`dabbrev-case-replace' has these three values: nil (don't preserve -case), t (do), or `case-replace' (do like M-x query-replace). -`dabbrev-case-fold-search' has these three values: nil (don't ignore -case), t (do), or `case-fold-search' (do like search). - -** Minibuffer history lists are truncated automatically now to a -certain length. The variable history-length specifies how long they -can be. The default value is 30. - -** Changes in Mail mode. - -*** The key C-x m no longer runs the `mail' command directly. -Instead, it runs the command `compose-mail', which invokes the mail -composition mechanism you have selected with the variable -`mail-user-agent'. The default choice of user agent is -`sendmail-user-agent', which gives behavior compatible with the old -behavior. - -C-x 4 m now runs compose-mail-other-window, and C-x 5 m runs -compose-mail-other-frame. - -*** While composing a reply to a mail message, from Rmail, you can use -the command C-c C-r to cite just the region from the message you are -replying to. This copies the text which is the selected region in the -buffer that shows the original message. - -*** The command C-c C-i inserts a file at the end of the message, -with separator lines around the contents. - -*** The command M-x expand-mail-aliases expands all mail aliases -in suitable mail headers. Emacs automatically extracts mail alias -definitions from your mail alias file (e.g., ~/.mailrc). You do not -need to expand mail aliases yourself before sending mail. - -*** New features in the mail-complete command. - -**** The mail-complete command now inserts the user's full name, -for local users or if that is known. The variable mail-complete-style -controls the style to use, and whether to do this at all. -Its values are like those of mail-from-style. - -**** The variable mail-passwd-command lets you specify a shell command -to run to fetch a set of password-entries that add to the ones in -/etc/passwd. - -**** The variable mail-passwd-file now specifies a list of files to read -to get the list of user ids. By default, one file is used: -/etc/passwd. - -** You can "quote" a file name to inhibit special significance of -special syntax, by adding `/:' to the beginning. Thus, if you have a -directory named `/foo:', you can prevent it from being treated as a -reference to a remote host named `foo' by writing it as `/:/foo:'. - -Emacs uses this new construct automatically when necessary, such as -when you start it with a working directory whose name might otherwise -be taken to be magic. - -** There is a new command M-x grep-find which uses find to select -files to search through, and grep to scan them. The output is -available in a Compile mode buffer, as with M-x grep. - -M-x grep now uses the -e option if the grep program supports that. -(-e prevents problems if the search pattern starts with a dash.) - -** In Dired, the & command now flags for deletion the files whose names -suggest they are probably not needed in the long run. - -In Dired, * is now a prefix key for mark-related commands. - -new key dired.el binding old key -------- ---------------- ------- - * c dired-change-marks c - * m dired-mark m - * * dired-mark-executables * (binding deleted) - * / dired-mark-directories / (binding deleted) - * @ dired-mark-symlinks @ (binding deleted) - * u dired-unmark u - * DEL dired-unmark-backward DEL - * ? dired-unmark-all-files C-M-? - * ! dired-unmark-all-marks - * % dired-mark-files-regexp % m - * C-n dired-next-marked-file M-} - * C-p dired-prev-marked-file M-{ - -** Rmail changes. - -*** When Rmail cannot convert your incoming mail into Babyl format, it -saves the new mail in the file RMAILOSE.n, where n is an integer -chosen to make a unique name. This way, Rmail will not keep crashing -each time you run it. - -*** In Rmail, the variable rmail-summary-line-count-flag now controls -whether to include the line count in the summary. Non-nil means yes. - -*** In Rmail summary buffers, d and C-d (the commands to delete -messages) now take repeat counts as arguments. A negative argument -means to move in the opposite direction. - -*** In Rmail, the t command now takes an optional argument which lets -you specify whether to show the message headers in full or pruned. - -*** In Rmail, the new command w (rmail-output-body-to-file) writes -just the body of the current message into a file, without the headers. -It takes the file name from the message subject, by default, but you -can edit that file name in the minibuffer before it is actually used -for output. - -** 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 -`C-M-_'. - -*** 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 -- `C-M-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. - -*** To enable Gnus to read/post multi-lingual articles, you must execute -the following code, for instance, in your .emacs. - - (add-hook 'gnus-startup-hook 'gnus-mule-initialize) - -Then, when you start Gnus, it will decode non-ASCII text automatically -and show appropriate characters. (Note: if you are using gnus-mime -from the SEMI package, formerly known as TM, you should NOT add this -hook to gnus-startup-hook; gnus-mime has its own method of handling -this issue.) - -Since it is impossible to distinguish all coding systems -automatically, you may need to specify a choice of coding system for a -particular news group. This can be done by: - - (gnus-mule-add-group NEWSGROUP 'CODING-SYSTEM) - -Here NEWSGROUP should be a string which names a newsgroup or a tree -of newsgroups. If NEWSGROUP is "XXX.YYY", all news groups under -"XXX.YYY" (including "XXX.YYY.ZZZ") will use the specified coding -system. CODING-SYSTEM specifies which coding system to use (for both -for reading and posting). - -CODING-SYSTEM can also be a cons cell of the form - (READ-CODING-SYSTEM . POST-CODING-SYSTEM) -Then READ-CODING-SYSTEM is used when you read messages from the -newsgroups, while POST-CODING-SYSTEM is used when you post messages -there. - -Emacs knows the right coding systems for certain newsgroups by -default. Here are some of these default settings: - - (gnus-mule-add-group "fj" 'iso-2022-7) - (gnus-mule-add-group "alt.chinese.text" 'hz-gb-2312) - (gnus-mule-add-group "alt.hk" 'hz-gb-2312) - (gnus-mule-add-group "alt.chinese.text.big5" 'cn-big5) - (gnus-mule-add-group "soc.culture.vietnamese" '(nil . viqr)) - -When you reply by mail to an article, these settings are ignored; -the mail is encoded according to sendmail-coding-system, as usual. - -** CC mode changes. - -*** If you edit primarily one style of C (or C++, Objective-C, Java) -code, you may want to make the CC Mode style variables have global -values so that you can set them directly in your .emacs file. To do -this, set c-style-variables-are-local-p to nil in your .emacs file. -Note that this only takes effect if you do it *before* cc-mode.el is -loaded. - -If you typically edit more than one style of C (or C++, Objective-C, -Java) code in a single Emacs session, you may want to make the CC Mode -style variables have buffer local values. By default, all buffers -share the same style variable settings; to make them buffer local, set -c-style-variables-are-local-p to t in your .emacs file. Note that you -must do this *before* CC Mode is loaded. - -*** The new variable c-indentation-style holds the C style name -of the current buffer. - -*** The variable c-block-comments-indent-p has been deleted, because -it is no longer necessary. C mode now handles all the supported styles -of block comments, with no need to say which one you will use. - -*** There is a new indentation style "python", which specifies the C -style that the Python developers like. - -*** There is a new c-cleanup-list option: brace-elseif-brace. -This says to put ...} else if (...) {... on one line, -just as brace-else-brace says to put ...} else {... on one line. - -** VC Changes [new] - -*** In vc-retrieve-snapshot (C-x v r), if you don't specify a snapshot -name, it retrieves the *latest* versions of all files in the current -directory and its subdirectories (aside from files already locked). - -This feature is useful if your RCS directory is a link to a common -master directory, and you want to pick up changes made by other -developers. - -You can do the same thing for an individual file by typing C-u C-x C-q -RET in a buffer visiting that file. - -*** VC can now handle files under CVS that are being "watched" by -other developers. Such files are made read-only by CVS. To get a -writable copy, type C-x C-q in a buffer visiting such a file. VC then -calls "cvs edit", which notifies the other developers of it. - -*** vc-version-diff (C-u C-x v =) now suggests reasonable defaults for -version numbers, based on the current state of the file. - -** Calendar changes. - -*** A new function, list-holidays, allows you list holidays or -subclasses of holidays for ranges of years. Related menu items allow -you do this for the year of the selected date, or the -following/previous years. - -*** There is now support for the Baha'i calendar system. Use `pb' in -the *Calendar* buffer to display the current Baha'i date. The Baha'i -calendar, or "Badi calendar" is a system of 19 months with 19 days -each, and 4 intercalary days (5 during a Gregorian leap year). The -calendar begins May 23, 1844, with each of the months named after a -supposed attribute of God. - -** ps-print changes - -There are some new user variables and subgroups for customizing the page -layout. - -*** Headers & Footers (subgroup) - -Some printer systems print a header page and force the first page to -be printed on the back of the header page when using duplex. If your -printer system has this behavior, set variable -`ps-banner-page-when-duplexing' to t. - -If variable `ps-banner-page-when-duplexing' is non-nil, it prints a -blank page as the very first printed page. So, it behaves as if the -very first character of buffer (or region) were a form feed ^L (\014). - -The variable `ps-spool-config' specifies who is responsible for -setting duplex mode and page size. Valid values are: - - lpr-switches duplex and page size are configured by `ps-lpr-switches'. - Don't forget to set `ps-lpr-switches' to select duplex - printing for your printer. - - setpagedevice duplex and page size are configured by ps-print using the - setpagedevice PostScript operator. - - nil duplex and page size are configured by ps-print *not* using - the setpagedevice PostScript operator. - -The variable `ps-spool-tumble' specifies how the page images on -opposite sides of a sheet are oriented with respect to each other. If -`ps-spool-tumble' is nil, ps-print produces output suitable for -bindings on the left or right. If `ps-spool-tumble' is non-nil, -ps-print produces output suitable for bindings at the top or bottom. -This variable takes effect only if `ps-spool-duplex' is non-nil. -The default value is nil. - -The variable `ps-header-frame-alist' specifies a header frame -properties alist. Valid frame properties are: - - fore-color Specify the foreground frame color. - Value should be a float number between 0.0 (black - color) and 1.0 (white color), or a string which is a - color name, or a list of 3 float numbers which - correspond to the Red Green Blue color scale, each - float number between 0.0 (dark color) and 1.0 (bright - color). The default is 0 ("black"). - - back-color Specify the background frame color (similar to fore-color). - The default is 0.9 ("gray90"). - - shadow-color Specify the shadow color (similar to fore-color). - The default is 0 ("black"). - - border-color Specify the border color (similar to fore-color). - The default is 0 ("black"). - - border-width Specify the border width. - The default is 0.4. - -Any other property is ignored. - -Don't change this alist directly; instead use Custom, or the -`ps-value', `ps-get', `ps-put' and `ps-del' functions (see there for -documentation). - -Ps-print can also print footers. The footer variables are: -`ps-print-footer', `ps-footer-offset', `ps-print-footer-frame', -`ps-footer-font-family', `ps-footer-font-size', `ps-footer-line-pad', -`ps-footer-lines', `ps-left-footer', `ps-right-footer' and -`ps-footer-frame-alist'. These variables are similar to those -controlling headers. - -*** Color management (subgroup) - -If `ps-print-color-p' is non-nil, the buffer's text will be printed in -color. - -*** Face Management (subgroup) - -If you need to print without worrying about face background colors, -set the variable `ps-use-face-background' which specifies if face -background should be used. Valid values are: - - t always use face background color. - nil never use face background color. - (face...) list of faces whose background color will be used. - -*** N-up printing (subgroup) - -The variable `ps-n-up-printing' specifies the number of pages per -sheet of paper. - -The variable `ps-n-up-margin' specifies the margin in points (pt) -between the sheet border and the n-up printing. - -If variable `ps-n-up-border-p' is non-nil, a border is drawn around -each page. - -The variable `ps-n-up-filling' specifies how the page matrix is filled -on each sheet of paper. Following are the valid values for -`ps-n-up-filling' with a filling example using a 3x4 page matrix: - - `left-top' 1 2 3 4 `left-bottom' 9 10 11 12 - 5 6 7 8 5 6 7 8 - 9 10 11 12 1 2 3 4 - - `right-top' 4 3 2 1 `right-bottom' 12 11 10 9 - 8 7 6 5 8 7 6 5 - 12 11 10 9 4 3 2 1 - - `top-left' 1 4 7 10 `bottom-left' 3 6 9 12 - 2 5 8 11 2 5 8 11 - 3 6 9 12 1 4 7 10 - - `top-right' 10 7 4 1 `bottom-right' 12 9 6 3 - 11 8 5 2 11 8 5 2 - 12 9 6 3 10 7 4 1 - -Any other value is treated as `left-top'. - -*** Zebra stripes (subgroup) - -The variable `ps-zebra-color' controls the zebra stripes grayscale or -RGB color. - -The variable `ps-zebra-stripe-follow' specifies how zebra stripes -continue on next page. Visually, valid values are (the character `+' -to the right of each column indicates that a line is printed): - - `nil' `follow' `full' `full-follow' - Current Page -------- ----------- --------- ---------------- - 1 XXXXX + 1 XXXXXXXX + 1 XXXXXX + 1 XXXXXXXXXXXXX + - 2 XXXXX + 2 XXXXXXXX + 2 XXXXXX + 2 XXXXXXXXXXXXX + - 3 XXXXX + 3 XXXXXXXX + 3 XXXXXX + 3 XXXXXXXXXXXXX + - 4 + 4 + 4 + 4 + - 5 + 5 + 5 + 5 + - 6 + 6 + 6 + 6 + - 7 XXXXX + 7 XXXXXXXX + 7 XXXXXX + 7 XXXXXXXXXXXXX + - 8 XXXXX + 8 XXXXXXXX + 8 XXXXXX + 8 XXXXXXXXXXXXX + - 9 XXXXX + 9 XXXXXXXX + 9 XXXXXX + 9 XXXXXXXXXXXXX + - 10 + 10 + - 11 + 11 + - -------- ----------- --------- ---------------- - Next Page -------- ----------- --------- ---------------- - 12 XXXXX + 12 + 10 XXXXXX + 10 + - 13 XXXXX + 13 XXXXXXXX + 11 XXXXXX + 11 + - 14 XXXXX + 14 XXXXXXXX + 12 XXXXXX + 12 + - 15 + 15 XXXXXXXX + 13 + 13 XXXXXXXXXXXXX + - 16 + 16 + 14 + 14 XXXXXXXXXXXXX + - 17 + 17 + 15 + 15 XXXXXXXXXXXXX + - 18 XXXXX + 18 + 16 XXXXXX + 16 + - 19 XXXXX + 19 XXXXXXXX + 17 XXXXXX + 17 + - 20 XXXXX + 20 XXXXXXXX + 18 XXXXXX + 18 + - 21 + 21 XXXXXXXX + - 22 + 22 + - -------- ----------- --------- ---------------- - -Any other value is treated as `nil'. - - -*** Printer management (subgroup) - -The variable `ps-printer-name-option' determines the option used by -some utilities to indicate the printer name; it's used only when -`ps-printer-name' is a non-empty string. If you're using the lpr -utility to print, for example, `ps-printer-name-option' should be set -to "-P". - -The variable `ps-manual-feed' indicates if the printer requires manual -paper feeding. If it's nil, automatic feeding takes place. If it's -non-nil, manual feeding takes place. - -The variable `ps-end-with-control-d' specifies whether C-d (\x04) -should be inserted at end of the generated PostScript. Non-nil means -do so. - -*** Page settings (subgroup) - -If variable `ps-warn-paper-type' is nil, it's *not* treated as an -error if the PostScript printer doesn't have a paper with the size -indicated by `ps-paper-type'; the default paper size will be used -instead. If `ps-warn-paper-type' is non-nil, an error is signaled if -the PostScript printer doesn't support a paper with the size indicated -by `ps-paper-type'. This is used when `ps-spool-config' is set to -`setpagedevice'. - -The variable `ps-print-upside-down' determines the orientation for -printing pages: nil means `normal' printing, non-nil means -`upside-down' printing (that is, the page is rotated by 180 degrees). - -The variable `ps-selected-pages' specifies which pages to print. If -it's nil, all pages are printed. If it's a list, list elements may be -integers specifying a single page to print, or cons cells (FROM . TO) -specifying to print from page FROM to TO. Invalid list elements, that -is integers smaller than one, or elements whose FROM is greater than -its TO, are ignored. - -The variable `ps-even-or-odd-pages' specifies how to print even/odd -pages. Valid values are: - - nil print all pages. - - `even-page' print only even pages. - - `odd-page' print only odd pages. - - `even-sheet' print only even sheets. - That is, if `ps-n-up-printing' is 1, it behaves like - `even-page', but for values greater than 1, it'll - print only the even sheet of paper. - - `odd-sheet' print only odd sheets. - That is, if `ps-n-up-printing' is 1, it behaves like - `odd-page'; but for values greater than 1, it'll print - only the odd sheet of paper. - -Any other value is treated as nil. - -If you set `ps-selected-pages' (see there for documentation), pages -are filtered by `ps-selected-pages', and then by -`ps-even-or-odd-pages'. For example, if we have: - - (setq ps-selected-pages '(1 4 (6 . 10) (12 . 16) 20)) - -and we combine this with `ps-even-or-odd-pages' and -`ps-n-up-printing', we get: - -`ps-n-up-printing' = 1: - `ps-even-or-odd-pages' PAGES PRINTED - nil 1, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 20 - even-page 4, 6, 8, 10, 12, 14, 16, 20 - odd-page 1, 7, 9, 13, 15 - even-sheet 4, 6, 8, 10, 12, 14, 16, 20 - odd-sheet 1, 7, 9, 13, 15 - -`ps-n-up-printing' = 2: - `ps-even-or-odd-pages' PAGES PRINTED - nil 1/4, 6/7, 8/9, 10/12, 13/14, 15/16, 20 - even-page 4/6, 8/10, 12/14, 16/20 - odd-page 1/7, 9/13, 15 - even-sheet 6/7, 10/12, 15/16 - odd-sheet 1/4, 8/9, 13/14, 20 - -*** Miscellany (subgroup) - -The variable `ps-error-handler-message' specifies where error handler -messages should be sent. - -It is also possible to add a user-defined PostScript prologue code in -front of all generated prologue code by setting the variable -`ps-user-defined-prologue'. - -The variable `ps-line-number-font' specifies the font for line numbers. - -The variable `ps-line-number-font-size' specifies the font size in -points for line numbers. - -The variable `ps-line-number-color' specifies the color for line -numbers. See `ps-zebra-color' for documentation. - -The variable `ps-line-number-step' specifies the interval in which -line numbers are printed. For example, if `ps-line-number-step' is set -to 2, the printing will look like: - - 1 one line - one line - 3 one line - one line - 5 one line - one line - ... - -Valid values are: - -integer an integer specifying the interval in which line numbers are - printed. If it's smaller than or equal to zero, 1 - is used. - -`zebra' specifies that only the line number of the first line in a - zebra stripe is to be printed. - -Any other value is treated as `zebra'. - -The variable `ps-line-number-start' specifies the starting point in -the interval given by `ps-line-number-step'. For example, if -`ps-line-number-step' is set to 3, and `ps-line-number-start' is set to -3, the output will look like: - - one line - one line - 3 one line - one line - one line - 6 one line - one line - one line - 9 one line - one line - ... - -The variable `ps-postscript-code-directory' specifies the directory -where the PostScript prologue file used by ps-print is found. - -The variable `ps-line-spacing' determines the line spacing in points, -for ordinary text, when generating PostScript (similar to -`ps-font-size'). - -The variable `ps-paragraph-spacing' determines the paragraph spacing, -in points, for ordinary text, when generating PostScript (similar to -`ps-font-size'). - -The variable `ps-paragraph-regexp' specifies the paragraph delimiter. - -The variable `ps-begin-cut-regexp' and `ps-end-cut-regexp' specify the -start and end of a region to cut out when printing. - -** hideshow changes. - -*** now supports hiding of blocks of single line comments (like // for -C++, ; for lisp). - -*** Support for java-mode added. - -*** When doing `hs-hide-all' it is now possible to also hide the comments -in the file if `hs-hide-comments-when-hiding-all' is set. - -*** The new function `hs-hide-initial-comment' hides the comments at -the beginning of the files. Finally those huge RCS logs don't stay in your -way! This is run by default when entering the `hs-minor-mode'. - -*** Now uses overlays instead of `selective-display', so is more -robust and a lot faster. - -*** A block beginning can span multiple lines. - -*** The new variable `hs-show-hidden-short-form' if t, directs hideshow -to show only the beginning of a block when it is hidden. See the -documentation for more details. - -** Changes in Enriched mode. - -*** When you visit a file in enriched-mode, Emacs will make sure it is -filled to the current fill-column. This behavior is now independent -of the size of the window. When you save the file, the fill-column in -use is stored as well, so that the whole buffer need not be refilled -the next time unless the fill-column is different. - -*** use-hard-newlines is now a minor mode. When it is enabled, Emacs -distinguishes between hard and soft newlines, and treats hard newlines -as paragraph boundaries. Otherwise all newlines inserted are marked -as soft, and paragraph boundaries are determined solely from the text. - -** Font Lock mode - -*** Custom support - -The variables font-lock-face-attributes, font-lock-display-type and -font-lock-background-mode are now obsolete; the recommended way to specify -the faces to use for Font Lock mode is with M-x customize-group on the new -custom group font-lock-faces. If you set font-lock-face-attributes in your -~/.emacs file, Font Lock mode will respect its value. However, you should -consider converting from setting that variable to using M-x customize. - -You can still use X resources to specify Font Lock face appearances. - -*** Maximum decoration - -Fontification now uses the maximum level of decoration supported by -default. Previously, fontification used a mode-specific default level -of decoration, which is typically the minimum level of decoration -supported. You can set font-lock-maximum-decoration to nil -to get the old behavior. - -*** New support - -Support is now provided for Java, Objective-C, AWK and SIMULA modes. - -Note that Font Lock mode can be turned on without knowing exactly what modes -support Font Lock mode, via the command global-font-lock-mode. - -*** Configurable support - -Support for C, C++, Objective-C and Java can be more easily configured for -additional types and classes via the new variables c-font-lock-extra-types, -c++-font-lock-extra-types, objc-font-lock-extra-types and, you guessed it, -java-font-lock-extra-types. These value of each of these variables should be a -list of regexps matching the extra type names. For example, the default value -of c-font-lock-extra-types is ("\\sw+_t") which means fontification follows the -convention that C type names end in _t. This results in slower fontification. - -Of course, you can change the variables that specify fontification in whatever -way you wish, typically by adding regexps. However, these new variables make -it easier to make specific and common changes for the fontification of types. - -*** Adding highlighting patterns to existing support - -You can use the new function font-lock-add-keywords to add your own -highlighting patterns, such as for project-local or user-specific constructs, -for any mode. - -For example, to highlight `FIXME:' words in C comments, put: - - (font-lock-add-keywords 'c-mode '(("\\ tex --> reftex.el - -** Changes in BibTeX mode. - -*** Info documentation is now available. - -*** Don't allow parentheses in string constants anymore. This confused -both the BibTeX program and Emacs BibTeX mode. - -*** Renamed variable bibtex-mode-user-optional-fields to -bibtex-user-optional-fields. - -*** Removed variable bibtex-include-OPTannote -(use bibtex-user-optional-fields instead). - -*** New interactive functions to copy and kill fields and complete -entries to the BibTeX kill ring, from where they can be yanked back by -appropriate functions. - -*** New interactive functions for repositioning and marking of -entries. They are bound by default to C-M-l and C-M-h. - -*** New hook bibtex-clean-entry-hook. It is called after entry has -been cleaned. - -*** New variable bibtex-field-delimiters, which replaces variables -bibtex-field-{left|right}-delimiter. - -*** New variable bibtex-entry-delimiters to determine how entries -shall be delimited. - -*** Allow preinitialization of fields. See documentation of -bibtex-user-optional-fields, bibtex-entry-field-alist, and -bibtex-include-OPTkey for details. - -*** Book and InBook entries require either an author or an editor -field. This is now supported by bibtex.el. Alternative fields are -prefixed with `ALT'. - -*** New variable bibtex-entry-format, which replaces variable -bibtex-clean-entry-zap-empty-opts and allows specification of many -formatting options performed on cleaning an entry (see variable -documentation). - -*** Even more control on how automatic keys are generated. See -documentation of bibtex-generate-autokey for details. Transcriptions -for foreign languages other than German are now handled, too. - -*** New boolean user option bibtex-comma-after-last-field to decide if -comma should be inserted at end of last field. - -*** New boolean user option bibtex-align-at-equal-sign to determine if -alignment should be made at left side of field contents or at equal -signs. New user options to control entry layout (e.g. indentation). - -*** New function bibtex-fill-entry to realign entries. - -*** New function bibtex-reformat to reformat region or buffer. - -*** New function bibtex-convert-alien to convert a BibTeX database -from alien sources. - -*** New function bibtex-complete-key (similar to bibtex-complete-string) -to complete prefix to a key defined in buffer. Mainly useful in -crossref entries. - -*** New function bibtex-count-entries to count entries in buffer or -region. - -*** Added support for imenu. - -*** The function `bibtex-validate' now checks current region instead -of buffer if mark is active. Now it shows all errors of buffer in a -`compilation mode' buffer. You can use the normal commands (e.g. -`next-error') for compilation modes to jump to errors. - -*** New variable `bibtex-string-file-path' to determine where the files -from `bibtex-string-files' are searched. - -** Iso Accents mode now supports Latin-3 as an alternative. - -** The command next-error now opens blocks hidden by hideshow. - -** The function using-unix-filesystems has been replaced by the -functions add-untranslated-filesystem and remove-untranslated-filesystem. -Each of these functions takes the name of a drive letter or directory -as an argument. - -When a filesystem is added as untranslated, all files on it are read -and written in binary mode (no cr/lf translation is performed). - -** browse-url changes - -*** New methods for: Grail (browse-url-generic), MMM (browse-url-mmm), -Lynx in a separate xterm (browse-url-lynx-xterm) or in an Emacs window -(browse-url-lynx-emacs), remote W3 (browse-url-w3-gnudoit), generic -non-remote-controlled browsers (browse-url-generic) and associated -customization variables. - -*** New commands `browse-url-of-region' and `browse-url'. - -*** URLs marked up with (RFC1738) work if broken across -lines. Browsing methods can be associated with URL regexps -(e.g. mailto: URLs) via `browse-url-browser-function'. - -** Changes in Ediff - -*** Clicking Mouse-2 on a brief command description in Ediff control panel -pops up the Info file for this command. - -*** There is now a variable, ediff-autostore-merges, which controls whether -the result of a merge is saved in a file. By default, this is done only when -merge is done from a session group (eg, when merging files in two different -directories). - -*** Since Emacs 19.31 (this hasn't been announced before), Ediff can compare -and merge groups of files residing in different directories, or revisions of -files in the same directory. - -*** Since Emacs 19.31, Ediff can apply multi-file patches interactively. -The patches must be in the context format or GNU unified format. (The bug -related to the GNU format has now been fixed.) - -** Changes in Viper - -*** The startup file is now .viper instead of .vip -*** All variable/function names have been changed to start with viper- - instead of vip-. -*** C-\ now simulates the meta-key in all Viper states. -*** C-z in Insert state now escapes to Vi for the duration of the next -Viper command. In Vi and Insert states, C-z behaves as before. -*** C-c \ escapes to Vi for one command if Viper is in Insert or Emacs states. -*** _ is no longer the meta-key in Vi state. -*** The variable viper-insert-state-cursor-color can be used to change cursor -color when Viper is in insert state. -*** If search lands the cursor near the top or the bottom of the window, -Viper pulls the window up or down to expose more context. The variable -viper-adjust-window-after-search controls this behavior. - -** Etags changes. - -*** In C, C++, Objective C and Java, Etags tags global variables by -default. The resulting tags files are inflated by 30% on average. -Use --no-globals to turn this feature off. Etags can also tag -variables which are members of structure-like constructs, but it does -not by default. Use --members to turn this feature on. - -*** C++ member functions are now recognized as tags. - -*** Java is tagged like C++. In addition, "extends" and "implements" -constructs are tagged. Files are recognized by the extension .java. - -*** Etags can now handle programs written in Postscript. Files are -recognized by the extensions .ps and .pdb (Postscript with C syntax). -In Postscript, tags are lines that start with a slash. - -*** Etags now handles Objective C and Objective C++ code. The usual C and -C++ tags are recognized in these languages; in addition, etags -recognizes special Objective C syntax for classes, class categories, -methods and protocols. - -*** Etags also handles Cobol. Files are recognized by the extension -.cobol. The tagged lines are those containing a word that begins in -column 8 and ends in a full stop, i.e. anything that could be a -paragraph name. - -*** Regexps in Etags now support intervals, as in ed or grep. The syntax of -an interval is \{M,N\}, and it means to match the preceding expression -at least M times and as many as N times. - -** The format for specifying a custom format for time-stamp to insert -in files has changed slightly. - -With the new enhancements to the functionality of format-time-string, -time-stamp-format will change to be eventually compatible with it. -This conversion is being done in two steps to maintain compatibility -with old time-stamp-format values. - -In the new scheme, alternate case is signified by the number-sign -(`#') modifier, rather than changing the case of the format character. -This feature is as yet incompletely implemented for compatibility -reasons. - -In the old time-stamp-format, all numeric fields defaulted to their -natural width. (With format-time-string, each format has a -fixed-width default.) In this version, you can specify the colon -(`:') modifier to a numeric conversion to mean "give me the historical -time-stamp-format width default." Do not use colon if you are -specifying an explicit width, as in "%02d". - -Numbers are no longer truncated to the requested width, except in the -case of "%02y", which continues to give a two-digit year. Digit -truncation probably wasn't being used for anything else anyway. - -The new formats will work with old versions of Emacs. New formats are -being recommended now to allow time-stamp-format to change in the -future to be compatible with format-time-string. The new forms being -recommended now will continue to work then. - -See the documentation string for the variable time-stamp-format for -details. - -** There are some additional major modes: - -dcl-mode, for editing VMS DCL files. -m4-mode, for editing files of m4 input. -meta-mode, for editing MetaFont and MetaPost source files. - -** In Shell mode, the command shell-copy-environment-variable lets you -copy the value of a specified environment variable from the subshell -into Emacs. - -** New Lisp packages include: - -*** battery.el displays battery status for laptops. - -*** M-x bruce (named after Lenny Bruce) is a program that might -be used for adding some indecent words to your email. - -*** M-x crisp-mode enables an emulation for the CRiSP editor. - -*** M-x dirtrack arranges for better tracking of directory changes -in shell buffers. - -*** The new library elint.el provides for linting of Emacs Lisp code. -See the documentation for `elint-initialize', `elint-current-buffer' -and `elint-defun'. - -*** M-x expand-add-abbrevs defines a special kind of abbrev which is -meant for programming constructs. These abbrevs expand like ordinary -ones, when you type SPC, but only at the end of a line and not within -strings or comments. - -These abbrevs can act as templates: you can define places within an -abbrev for insertion of additional text. Once you expand the abbrev, -you can then use C-x a p and C-x a n to move back and forth to these -insertion points. Thus you can conveniently insert additional text -at these points. - -*** filecache.el remembers the location of files so that you -can visit them by short forms of their names. - -*** find-func.el lets you find the definition of the user-loaded -Emacs Lisp function at point. - -*** M-x handwrite converts text to a "handwritten" picture. - -*** M-x iswitchb-buffer is a command for switching to a buffer, much like -switch-buffer, but it reads the argument in a more helpful way. - -*** M-x landmark implements a neural network for landmark learning. - -*** M-x locate provides a convenient interface to the `locate' program. - -*** M4 mode is a new mode for editing files of m4 input. - -*** mantemp.el creates C++ manual template instantiations -from the GCC error messages which indicate which instantiations are needed. - -*** mouse-copy.el provides a one-click copy and move feature. -You can drag a region with M-mouse-1, and it is automatically -inserted at point. M-Shift-mouse-1 deletes the text from its -original place after inserting the copy. - -*** mouse-drag.el lets you do scrolling by dragging Mouse-2 -on the buffer. - -You click the mouse and move; that distance either translates into the -velocity to scroll (with mouse-drag-throw) or the distance to scroll -(with mouse-drag-drag). Horizontal scrolling is enabled when needed. - -Enable mouse-drag with: - (global-set-key [down-mouse-2] 'mouse-drag-throw) --or- - (global-set-key [down-mouse-2] 'mouse-drag-drag) - -*** mspools.el is useful for determining which mail folders have -mail waiting to be read in them. It works with procmail. - -*** Octave mode is a major mode for editing files of input for Octave. -It comes with a facility for communicating with an Octave subprocess. - -*** ogonek - -The ogonek package provides functions for changing the coding of -Polish diacritic characters in buffers. Codings known from various -platforms are supported such as ISO8859-2, Mazovia, IBM Latin2, and -TeX. For example, you can change the coding from Mazovia to -ISO8859-2. Another example is a change of coding from ISO8859-2 to -prefix notation (in which `/a' stands for the aogonek character, for -instance) and vice versa. - -To use this package load it using - M-x load-library [enter] ogonek -Then, you may get an explanation by calling one of - M-x ogonek-jak -- in Polish - M-x ogonek-how -- in English -The info specifies the commands and variables provided as well as the -ways of customization in `.emacs'. - -*** Interface to ph. - -Emacs provides a client interface to CCSO Nameservers (ph/qi) - -The CCSO nameserver is used in many universities to provide directory -services about people. ph.el provides a convenient Emacs interface to -these servers. - -*** uce.el is useful for replying to unsolicited commercial email. - -*** vcursor.el implements a "virtual cursor" feature. -You can move the virtual cursor with special commands -while the real cursor does not move. - -*** webjump.el is a "hot list" package which you can set up -for visiting your favorite web sites. - -*** M-x winner-mode is a minor mode which saves window configurations, -so you can move back to other configurations that you have recently used. - -** movemail change - -Movemail no longer needs to be installed setuid root in order for POP -mail retrieval to function properly. This is because it no longer -supports the RPOP (reserved-port POP) protocol; instead, it uses the -user's POP password to authenticate to the mail server. - -This change was made earlier, but not reported in NEWS before. - -* Emacs 20.1 changes for MS-DOS and MS-Windows. - -** Changes in handling MS-DOS/MS-Windows text files. - -Emacs handles three different conventions for representing -end-of-line: CRLF for MSDOS, LF for Unix and GNU, and CR (used on the -Macintosh). Emacs determines which convention is used in a specific -file based on the contents of that file (except for certain special -file names), and when it saves the file, it uses the same convention. - -To save the file and change the end-of-line convention, you can use -C-x RET f (set-buffer-file-coding-system) to specify a different -coding system for the buffer. Then, when you save the file, the newly -specified coding system will take effect. For example, to save with -LF, specify undecided-unix (or some other ...-unix coding system); to -save with CRLF, specify undecided-dos. - -* Lisp Changes in Emacs 20.1 - -** Byte-compiled files made with Emacs 20 will, in general, work in -Emacs 19 as well, as long as the source code runs in Emacs 19. And -vice versa: byte-compiled files made with Emacs 19 should also run in -Emacs 20, as long as the program itself works in Emacs 20. - -** Windows-specific functions and variables have been renamed -to start with w32- instead of win32-. - -In hacker language, calling something a "win" is a form of praise. We -don't want to praise a non-free Microsoft system, so we don't call it -"win". - -** Basic Lisp changes - -*** A symbol whose name starts with a colon now automatically -evaluates to itself. Therefore such a symbol can be used as a constant. - -*** The defined purpose of `defconst' has been changed. It should now -be used only for values that should not be changed whether by a program -or by the user. - -The actual behavior of defconst has not been changed. - -*** There are new macros `when' and `unless' - -(when CONDITION BODY...) is short for (if CONDITION (progn BODY...)) -(unless CONDITION BODY...) is short for (if CONDITION nil BODY...) - -*** Emacs now defines functions caar, cadr, cdar and cddr with their -usual Lisp meanings. For example, caar returns the car of the car of -its argument. - -*** equal, when comparing strings, now ignores their text properties. - -*** The new function `functionp' tests whether an object is a function. - -*** arrayp now returns t for char-tables and bool-vectors. - -*** Certain primitives which use characters (as integers) now get an -error if the integer is not a valid character code. These primitives -include insert-char, char-to-string, and the %c construct in the -`format' function. - -*** The `require' function now insists on adding a suffix, either .el -or .elc, to the file name. Thus, (require 'foo) will not use a file -whose name is just foo. It insists on foo.el or foo.elc. - -*** The `autoload' function, when the file name does not contain -either a directory name or the suffix .el or .elc, insists on -adding one of these suffixes. - -*** string-to-number now takes an optional second argument BASE -which specifies the base to use when converting an integer. -If BASE is omitted, base 10 is used. - -We have not implemented other radices for floating point numbers, -because that would be much more work and does not seem useful. - -*** substring now handles vectors as well as strings. - -*** The Common Lisp function eql is no longer defined normally. -You must load the `cl' library to define it. - -*** The new macro `with-current-buffer' lets you evaluate an expression -conveniently with a different current buffer. It looks like this: - - (with-current-buffer BUFFER BODY-FORMS...) - -BUFFER is the expression that says which buffer to use. -BODY-FORMS say what to do in that buffer. - -*** The new primitive `save-current-buffer' saves and restores the -choice of current buffer, like `save-excursion', but without saving or -restoring the value of point or the mark. `with-current-buffer' -works using `save-current-buffer'. - -*** The new macro `with-temp-file' lets you do some work in a new buffer and -write the output to a specified file. Like `progn', it returns the value -of the last form. - -*** The new macro `with-temp-buffer' lets you do some work in a new buffer, -which is discarded after use. Like `progn', it returns the value of the -last form. If you wish to return the buffer contents, use (buffer-string) -as the last form. - -*** The new function split-string takes a string, splits it at certain -characters, and returns a list of the substrings in between the -matches. - -For example, (split-string "foo bar lose" " +") returns ("foo" "bar" "lose"). - -*** The new macro with-output-to-string executes some Lisp expressions -with standard-output set up so that all output feeds into a string. -Then it returns that string. - -For example, if the current buffer name is `foo', - -(with-output-to-string - (princ "The buffer is ") - (princ (buffer-name))) - -returns "The buffer is foo". - -** Non-ASCII characters are now supported, if enable-multibyte-characters -is non-nil. - -These characters have character codes above 256. When inserted in the -buffer or stored in a string, they are represented as multibyte -characters that occupy several buffer positions each. - -*** When enable-multibyte-characters is non-nil, a single character in -a buffer or string can be two or more bytes (as many as four). - -Buffers and strings are still made up of unibyte elements; -character positions and string indices are always measured in bytes. -Therefore, moving forward one character can increase the buffer -position by 2, 3 or 4. The function forward-char moves by whole -characters, and therefore is no longer equivalent to - (lambda (n) (goto-char (+ (point) n))). - -ASCII characters (codes 0 through 127) are still single bytes, always. -Sequences of byte values 128 through 255 are used to represent -non-ASCII characters. These sequences are called "multibyte -characters". - -The first byte of a multibyte character is always in the range 128 -through 159 (octal 0200 through 0237). These values are called -"leading codes". The second and subsequent bytes are always in the -range 160 through 255 (octal 0240 through 0377). The first byte, the -leading code, determines how many bytes long the sequence is. - -*** The function forward-char moves over characters, and therefore -(forward-char 1) may increase point by more than 1 if it moves over a -multibyte character. Likewise, delete-char always deletes a -character, which may be more than one buffer position. - -This means that some Lisp programs, which assume that a character is -always one buffer position, need to be changed. - -However, all ASCII characters are always one buffer position. - -*** The regexp [\200-\377] no longer matches all non-ASCII characters, -because when enable-multibyte-characters is non-nil, these characters -have codes that are not in the range octal 200 to octal 377. However, -the regexp [^\000-\177] does match all non-ASCII characters, -guaranteed. - -*** The function char-boundary-p returns non-nil if position POS is -between two characters in the buffer (not in the middle of a -character). - -When the value is non-nil, it says what kind of character follows POS: - - 0 if POS is at an ASCII character or at the end of range, - 1 if POS is before a 2-byte length multi-byte form, - 2 if POS is at a head of 3-byte length multi-byte form, - 3 if POS is at a head of 4-byte length multi-byte form, - 4 if POS is at a head of multi-byte form of a composite character. - -*** The function char-bytes returns how many bytes the character CHAR uses. - -*** Strings can contain multibyte characters. The function -`length' returns the string length counting bytes, which may be -more than the number of characters. - -You can include a multibyte character in a string constant by writing -it literally. You can also represent it with a hex escape, -\xNNNNNNN..., using as many digits as necessary. Any character which -is not a valid hex digit terminates this construct. If you want to -follow it with a character that is a hex digit, write backslash and -newline in between; that will terminate the hex escape. - -*** The function concat-chars takes arguments which are characters -and returns a string containing those characters. - -*** The function sref access a multibyte character in a string. -(sref STRING INDX) returns the character in STRING at INDEX. INDEX -counts from zero. If INDEX is at a position in the middle of a -character, sref signals an error. - -*** The function chars-in-string returns the number of characters -in a string. This is less than the length of the string, if the -string contains multibyte characters (the length counts bytes). - -*** The function chars-in-region returns the number of characters -in a region from BEG to END. This is less than (- END BEG) if the -region contains multibyte characters (the length counts bytes). - -*** The function string-to-list converts a string to a list of -the characters in it. string-to-vector converts a string -to a vector of the characters in it. - -*** The function store-substring alters part of the contents -of a string. You call it as follows: - - (store-substring STRING IDX OBJ) - -This says to alter STRING, by storing OBJ starting at index IDX in -STRING. OBJ may be either a character or a (smaller) string. -This function really does alter the contents of STRING. -Since it is impossible to change the length of an existing string, -it is an error if OBJ doesn't fit within STRING's actual length. - -*** char-width returns the width (in columns) of the character CHAR, -if it were displayed in the current buffer and the selected window. - -*** string-width returns the width (in columns) of the text in STRING, -if it were displayed in the current buffer and the selected window. - -*** truncate-string-to-width shortens a string, if necessary, -to fit within a certain number of columns. (Of course, it does -not alter the string that you give it; it returns a new string -which contains all or just part of the existing string.) - -(truncate-string-to-width STR END-COLUMN &optional START-COLUMN PADDING) - -This returns the part of STR up to column END-COLUMN. - -The optional argument START-COLUMN specifies the starting column. -If this is non-nil, then the first START-COLUMN columns of the string -are not included in the resulting value. - -The optional argument PADDING, if non-nil, is a padding character to be added -at the beginning and end the resulting string, to extend it to exactly -WIDTH columns. If PADDING is nil, that means do not pad; then, if STRING -is narrower than WIDTH, the value is equal to STRING. - -If PADDING and START-COLUMN are both non-nil, and if there is no clean -place in STRING that corresponds to START-COLUMN (because one -character extends across that column), then the padding character -PADDING is added one or more times at the beginning of the result -string, so that its columns line up as if it really did start at -column START-COLUMN. - -*** When the functions in the list after-change-functions are called, -the third argument is the number of bytes in the pre-change text, not -necessarily the number of characters. It is, in effect, the -difference in buffer position between the beginning and the end of the -changed text, before the change. - -*** The characters Emacs uses are classified in various character -sets, each of which has a name which is a symbol. In general there is -one character set for each script, not for each language. - -**** The function charsetp tests whether an object is a character set name. - -**** The variable charset-list holds a list of character set names. - -**** char-charset, given a character code, returns the name of the character -set that the character belongs to. (The value is a symbol.) - -**** split-char, given a character code, returns a list containing the -name of the character set, followed by one or two byte-values -which identify the character within that character set. - -**** make-char, given a character set name and one or two subsequent -byte-values, constructs a character code. This is roughly the -opposite of split-char. - -**** find-charset-region returns a list of the character sets -of all the characters between BEG and END. - -**** find-charset-string returns a list of the character sets -of all the characters in a string. - -*** Here are the Lisp facilities for working with coding systems -and specifying coding systems. - -**** The function coding-system-list returns a list of all coding -system names (symbols). With optional argument t, it returns a list -of all distinct base coding systems, not including variants. -(Variant coding systems are those like latin-1-dos, latin-1-unix -and latin-1-mac which specify the end-of-line conversion as well -as what to do about code conversion.) - -**** coding-system-p tests a symbol to see if it is a coding system -name. It returns t if so, nil if not. - -**** file-coding-system-alist specifies which coding systems to use -for certain file names. It works like network-coding-system-alist, -except that the PATTERN is matched against the file name. - -Each element has the format (PATTERN . VAL), where PATTERN determines -which file names the element applies to. PATTERN should be a regexp -to match against a file name. - -VAL is a coding system, a cons cell containing two coding systems, or -a function symbol. If VAL is a coding system, it is used for both -decoding what received from the network stream and encoding what sent -to the network stream. If VAL is a cons cell containing two coding -systems, the car specifies the coding system for decoding, and the cdr -specifies the coding system for encoding. - -If VAL is a function symbol, the function must return a coding system -or a cons cell containing two coding systems, which is used as above. - -**** The variable network-coding-system-alist specifies -the coding system to use for network sockets. - -Each element has the format (PATTERN . VAL), where PATTERN determines -which network sockets the element applies to. PATTERN should be -either a port number or a regular expression matching some network -service names. - -VAL is a coding system, a cons cell containing two coding systems, or -a function symbol. If VAL is a coding system, it is used for both -decoding what received from the network stream and encoding what sent -to the network stream. If VAL is a cons cell containing two coding -systems, the car specifies the coding system for decoding, and the cdr -specifies the coding system for encoding. - -If VAL is a function symbol, the function must return a coding system -or a cons cell containing two coding systems, which is used as above. - -**** process-coding-system-alist specifies which coding systems to use -for certain subprocess. It works like network-coding-system-alist, -except that the PATTERN is matched against the program name used to -start the subprocess. - -**** The variable default-process-coding-system specifies the coding -systems to use for subprocess (and net connection) input and output, -when nothing else specifies what to do. The value is a cons cell -(OUTPUT-CODING . INPUT-CODING). OUTPUT-CODING applies to output -to the subprocess, and INPUT-CODING applies to input from it. - -**** The variable coding-system-for-write, if non-nil, specifies the -coding system to use for writing a file, or for output to a synchronous -subprocess. - -It also applies to any asynchronous subprocess or network connection, -but in a different way: the value of coding-system-for-write when you -start the subprocess or connection affects that subprocess or -connection permanently or until overridden. - -The variable coding-system-for-write takes precedence over -file-coding-system-alist, process-coding-system-alist and -network-coding-system-alist, and all other methods of specifying a -coding system for output. But most of the time this variable is nil. -It exists so that Lisp programs can bind it to a specific coding -system for one operation at a time. - -**** coding-system-for-read applies similarly to input from -files, subprocesses or network connections. - -**** The function process-coding-system tells you what -coding systems(s) an existing subprocess is using. -The value is a cons cell, - (DECODING-CODING-SYSTEM . ENCODING-CODING-SYSTEM) -where DECODING-CODING-SYSTEM is used for decoding output from -the subprocess, and ENCODING-CODING-SYSTEM is used for encoding -input to the subprocess. - -**** The function set-process-coding-system can be used to -change the coding systems in use for an existing subprocess. - -** Emacs has a new facility to help users manage the many -customization options. To make a Lisp program work with this facility, -you need to use the new macros defgroup and defcustom. - -You use defcustom instead of defvar, for defining a user option -variable. The difference is that you specify two additional pieces of -information (usually): the "type" which says what values are -legitimate, and the "group" which specifies the hierarchy for -customization. - -Thus, instead of writing - - (defvar foo-blurgoze nil - "*Non-nil means that foo will act very blurgozely.") - -you would now write this: - - (defcustom foo-blurgoze nil - "*Non-nil means that foo will act very blurgozely." - :type 'boolean - :group foo) - -The type `boolean' means that this variable has only -two meaningful states: nil and non-nil. Other type values -describe other possibilities; see the manual for Custom -for a description of them. - -The "group" argument is used to specify a group which the option -should belong to. You define a new group like this: - - (defgroup ispell nil - "Spell checking using Ispell." - :group 'processes) - -The "group" argument in defgroup specifies the parent group. The root -group is called `emacs'; it should not contain any variables itself, -but only other groups. The immediate subgroups of `emacs' correspond -to the keywords used by C-h p. Under these subgroups come -second-level subgroups that belong to individual packages. - -Each Emacs package should have its own set of groups. A simple -package should have just one group; a more complex package should -have a hierarchy of its own groups. The sole or root group of a -package should be a subgroup of one or more of the "keyword" -first-level subgroups. - -** New `widget' library for inserting UI components in buffers. - -This library, used by the new custom library, is documented in a -separate manual that accompanies Emacs. - -** easy-mmode - -The easy-mmode package provides macros and functions that make -developing minor modes easier. Roughly, the programmer has to code -only the functionality of the minor mode. All the rest--toggles, -predicate, and documentation--can be done in one call to the macro -`easy-mmode-define-minor-mode' (see the documentation). See also -`easy-mmode-define-keymap'. - -** Text property changes - -*** The `intangible' property now works on overlays as well as on a -text property. - -*** The new functions next-char-property-change and -previous-char-property-change scan through the buffer looking for a -place where either a text property or an overlay might change. The -functions take two arguments, POSITION and LIMIT. POSITION is the -starting position for the scan. LIMIT says where to stop the scan. - -If no property change is found before LIMIT, the value is LIMIT. If -LIMIT is nil, scan goes to the beginning or end of the accessible part -of the buffer. If no property change is found, the value is the -position of the beginning or end of the buffer. - -*** In the `local-map' text property or overlay property, the property -value can now be a symbol whose function definition is a keymap. This -is an alternative to using the keymap itself. - -** Changes in invisibility features - -*** Isearch can now temporarily show parts of the buffer which are -hidden by an overlay with a invisible property, when the search match -is inside that portion of the buffer. To enable this the overlay -should have a isearch-open-invisible property which is a function that -would be called having the overlay as an argument, the function should -make the overlay visible. - -During incremental search the overlays are shown by modifying the -invisible and intangible properties, if beside this more actions are -needed the overlay should have a isearch-open-invisible-temporary -which is a function. The function is called with 2 arguments: one is -the overlay and the second is nil when it should show the overlay and -t when it should hide it. - -*** add-to-invisibility-spec, remove-from-invisibility-spec - -Modes that use overlays to hide portions of a buffer should set the -invisible property of the overlay to the mode's name (or another symbol) -and modify the `buffer-invisibility-spec' to include that symbol. -Use `add-to-invisibility-spec' and `remove-from-invisibility-spec' to -manipulate the `buffer-invisibility-spec'. -Here is an example of how to do this: - - ;; If we want to display an ellipsis: - (add-to-invisibility-spec '(my-symbol . t)) - ;; If you don't want ellipsis: - (add-to-invisibility-spec 'my-symbol) - - ... - (overlay-put (make-overlay beginning end) 'invisible 'my-symbol) - - ... - ;; When done with the overlays: - (remove-from-invisibility-spec '(my-symbol . t)) - ;; Or respectively: - (remove-from-invisibility-spec 'my-symbol) - -** Changes in syntax parsing. - -*** The syntax-directed buffer-scan functions (such as -`parse-partial-sexp', `forward-word' and similar functions) can now -obey syntax information specified by text properties, if the variable -`parse-sexp-lookup-properties' is non-nil. - -If the value of `parse-sexp-lookup-properties' is nil, the behavior -is as before: the syntax-table of the current buffer is always -used to determine the syntax of the character at the position. - -When `parse-sexp-lookup-properties' is non-nil, the syntax of a -character in the buffer is calculated thus: - - a) if the `syntax-table' text-property of that character - is a cons, this cons becomes the syntax-type; - - Valid values of `syntax-table' text-property are: nil, a valid - syntax-table, and a valid syntax-table element, i.e., - a cons cell of the form (SYNTAX-CODE . MATCHING-CHAR). - - b) if the character's `syntax-table' text-property - is a syntax table, this syntax table is used - (instead of the syntax-table of the current buffer) to - determine the syntax type of the character. - - c) otherwise the syntax-type is determined by the syntax-table - of the current buffer. - -*** The meaning of \s in regular expressions is also affected by the -value of `parse-sexp-lookup-properties'. The details are the same as -for the syntax-directed buffer-scan functions. - -*** There are two new syntax-codes, `!' and `|' (numeric values 14 -and 15). A character with a code `!' starts a comment which is ended -only by another character with the same code (unless quoted). A -character with a code `|' starts a string which is ended only by -another character with the same code (unless quoted). - -These codes are mainly meant for use as values of the `syntax-table' -text property. - -*** The function `parse-partial-sexp' has new semantics for the sixth -arg COMMENTSTOP. If it is `syntax-table', parse stops after the start -of a comment or a string, or after end of a comment or a string. - -*** The state-list which the return value from `parse-partial-sexp' -(and can also be used as an argument) now has an optional ninth -element: the character address of the start of last comment or string; -nil if none. The fourth and eighth elements have special values if the -string/comment is started by a "!" or "|" syntax-code. - -*** Since new features of `parse-partial-sexp' allow a complete -syntactic parsing, `font-lock' no longer supports -`font-lock-comment-start-regexp'. - -** Changes in face features - -*** The face functions are now unconditionally defined in Emacs, even -if it does not support displaying on a device that supports faces. - -*** The function face-documentation returns the documentation string -of a face (or nil if it doesn't have one). - -*** The function face-bold-p returns t if a face should be bold. -set-face-bold-p sets that flag. - -*** The function face-italic-p returns t if a face should be italic. -set-face-italic-p sets that flag. - -*** You can now specify foreground and background colors for text -by adding elements of the form (foreground-color . COLOR-NAME) -and (background-color . COLOR-NAME) to the list of faces in -the `face' property (either the character's text property or an -overlay property). - -This means that you no longer need to create named faces to use -arbitrary colors in a Lisp package. - -** Changes in file-handling functions - -*** File-access primitive functions no longer discard an extra redundant -directory name from the beginning of the file name. In other words, -they no longer do anything special with // or /~. That conversion -is now done only in substitute-in-file-name. - -This makes it possible for a Lisp program to open a file whose name -begins with ~. - -*** If copy-file is unable to set the date of the output file, -it now signals an error with the condition file-date-error. - -*** The inode number returned by file-attributes may be an integer (if -the number fits in a Lisp integer) or a list of integers. - -*** insert-file-contents can now read from a special file, -as long as the arguments VISIT and REPLACE are nil. - -*** The RAWFILE arg to find-file-noselect, if non-nil, now suppresses -character code conversion as well as other things. - -Meanwhile, this feature does work with remote file names -(formerly it did not). - -*** Lisp packages which create temporary files should use the TMPDIR -environment variable to decide which directory to put them in. - -*** interpreter-mode-alist elements now specify regexps -instead of constant strings. - -*** expand-file-name no longer treats `//' or `/~' specially. It used -to delete all the text of a file name up through the first slash of -any `//' or `/~' sequence. Now it passes them straight through. - -substitute-in-file-name continues to treat those sequences specially, -in the same way as before. - -*** The variable `format-alist' is more general now. -The FROM-FN and TO-FN in a format definition can now be strings -which specify shell commands to use as filters to perform conversion. - -*** The new function access-file tries to open a file, and signals an -error if that fails. If the open succeeds, access-file does nothing -else, and returns nil. - -*** The function insert-directory now signals an error if the specified -directory cannot be listed. - -** Changes in minibuffer input - -*** The functions read-buffer, read-variable, read-command, read-string -read-file-name, read-from-minibuffer and completing-read now take an -additional argument which specifies the default value. If this -argument is non-nil, it should be a string; that string is used in two -ways: - - It is returned if the user enters empty input. - It is available through the history command M-n. - -*** The functions read-string, read-from-minibuffer, -read-no-blanks-input and completing-read now take an additional -argument INHERIT-INPUT-METHOD. If this is non-nil, then the -minibuffer inherits the current input method and the setting of -enable-multibyte-characters from the previously current buffer. - -In an interactive spec, you can use M instead of s to read an -argument in this way. - -*** All minibuffer input functions discard text properties -from the text you enter in the minibuffer, unless the variable -minibuffer-allow-text-properties is non-nil. - -** Echo area features - -*** Clearing the echo area now runs the normal hook -echo-area-clear-hook. Note that the echo area can be used while the -minibuffer is active; in that case, the minibuffer is still active -after the echo area is cleared. - -*** The function current-message returns the message currently displayed -in the echo area, or nil if there is none. - -** Keyboard input features - -*** tty-erase-char is a new variable that reports which character was -set up as the terminal's erase character when time Emacs was started. - -*** num-nonmacro-input-events is the total number of input events -received so far from the terminal. It does not count those generated -by keyboard macros. - -** Frame-related changes - -*** make-frame runs the normal hook before-make-frame-hook just before -creating a frame, and just after creating a frame it runs the abnormal -hook after-make-frame-functions with the new frame as arg. - -*** The new hook window-configuration-change-hook is now run every time -the window configuration has changed. The frame whose configuration -has changed is the selected frame when the hook is run. - -*** Each frame now independently records the order for recently -selected buffers, in its buffer-list frame parameter, so that the -value of other-buffer is now based on the buffers recently displayed -in the selected frame. - -*** The value of the frame parameter vertical-scroll-bars -is now `left', `right' or nil. A non-nil value specifies -which side of the window to put the scroll bars on. - -** X Windows features - -*** You can examine X resources for other applications by binding -x-resource-class around a call to x-get-resource. The usual value of -x-resource-class is "Emacs", which is the correct value for Emacs. - -*** In menus, checkboxes and radio buttons now actually work. -The menu displays the current status of the box or button. - -*** The function x-list-fonts now takes an optional fourth argument -MAXIMUM which sets a limit on how many matching fonts to return. -A smaller value of MAXIMUM makes the function faster. - -If the only question is whether *any* font matches the pattern, -it is good to supply 1 for this argument. - -** Subprocess features - -*** A reminder: it is no longer necessary for subprocess filter -functions and sentinels to do save-match-data, because Emacs does this -automatically. - -*** The new function shell-command-to-string executes a shell command -and returns the output from the command as a string. - -*** The new function process-contact returns t for a child process, -and (HOSTNAME SERVICE) for a net connection. - -** An error in running pre-command-hook or post-command-hook -does clear the variable to nil. The documentation was wrong before. - -** In define-key-after, if AFTER is t, the new binding now always goes -at the end of the keymap. If the keymap is a menu, this means it -goes after the other menu items. - -** If you have a program that makes several changes in the same area -of the buffer, you can use the macro combine-after-change-calls -around that Lisp code to make it faster when after-change hooks -are in use. - -The macro arranges to call the after-change functions just once for a -series of several changes--if that seems safe. - -Don't alter the variables after-change-functions and -after-change-function within the body of a combine-after-change-calls -form. - -** If you define an abbrev (with define-abbrev) whose EXPANSION -is not a string, then the abbrev does not expand in the usual sense, -but its hook is still run. - -** Normally, the Lisp debugger is not used (even if you have enabled it) -for errors that are handled by condition-case. - -If you set debug-on-signal to a non-nil value, then the debugger is called -regardless of whether there is a handler for the condition. This is -useful for debugging problems that happen inside of a condition-case. - -This mode of operation seems to be unreliable in other ways. Errors that -are normal and ought to be handled, perhaps in timers or process -filters, will instead invoke the debugger. So don't say you weren't -warned. - -** The new variable ring-bell-function lets you specify your own -way for Emacs to "ring the bell". - -** If run-at-time's TIME argument is t, the action is repeated at -integral multiples of REPEAT from the epoch; this is useful for -functions like display-time. - -** You can use the function locate-library to find the precise file -name of a Lisp library. This isn't new, but wasn't documented before. - -** Commands for entering view mode have new optional arguments that -can be used from Lisp. Low-level entrance to and exit from view mode -is done by functions view-mode-enter and view-mode-exit. - -** batch-byte-compile-file now makes Emacs return a nonzero status code -if there is an error in compilation. - -** pop-to-buffer, switch-to-buffer-other-window and -switch-to-buffer-other-frame now accept an additional optional -argument NORECORD, much like switch-to-buffer. If it is non-nil, -they don't put the buffer at the front of the buffer list. - -** If your .emacs file leaves the *scratch* buffer non-empty, -Emacs does not display the startup message, so as to avoid changing -the *scratch* buffer. - -** The new function regexp-opt returns an efficient regexp to match a string. -The arguments are STRINGS and (optionally) PAREN. This function can be used -where regexp matching or searching is intensively used and speed is important, -e.g., in Font Lock mode. - -** The variable buffer-display-count is local to each buffer, -and is incremented each time the buffer is displayed in a window. -It starts at 0 when the buffer is created. - -** The new function compose-mail starts composing a mail message -using the user's chosen mail composition agent (specified with the -variable mail-user-agent). It has variants compose-mail-other-window -and compose-mail-other-frame. - -** The `user-full-name' function now takes an optional parameter which -can either be a number (the UID) or a string (the login name). The -full name of the specified user will be returned. - -** Lisp packages that load files of customizations, or any other sort -of user profile, should obey the variable init-file-user in deciding -where to find it. They should load the profile of the user name found -in that variable. If init-file-user is nil, meaning that the -q -option was used, then Lisp packages should not load the customization -files at all. - -** format-time-string now allows you to specify the field width -and type of padding. This works as in printf: you write the field -width as digits in the middle of a %-construct. If you start -the field width with 0, it means to pad with zeros. - -For example, %S normally specifies the number of seconds since the -minute; %03S means to pad this with zeros to 3 positions, %_3S to pad -with spaces to 3 positions. Plain %3S pads with zeros, because that -is how %S normally pads to two positions. - -** thing-at-point now supports a new kind of "thing": url. - -** imenu.el changes. - -You can now specify a function to be run when selecting an -item from menu created by imenu. - -An example of using this feature: if we define imenu items for the -#include directives in a C file, we can open the included file when we -select one of those items. - -* For older news, see the file ONEWS - ---------------------------------------------------------------------- Copyright information: -Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, - 2005, 2006 Free Software Foundation, Inc. +Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the diff -r 86cedfd9ade6 -r 25fa0038a52d etc/NEWS.1-17 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/NEWS.1-17 Sun Jun 04 01:01:51 2006 +0000 @@ -0,0 +1,2530 @@ +GNU Emacs NEWS -- history of user-visible changes. 26-Mar-1986 +Copyright (C) 1985, 1986, 2006 Richard M. Stallman. +See the end for copying conditions. + +This file is about changes in emacs versions 1 through 17. + + + +Changes in Emacs 17 + +* Frustrated? + +Try M-x doctor. + +* Bored? + +Try M-x hanoi. + +* Brain-damaged? + +Try M-x yow. + +* Sun3, Tahoe, Apollo, HP9000s300, Celerity, NCR Tower 32, + Sequent, Stride, Encore, Plexus and AT&T 7300 machines supported. + +The Tahoe, Sun3, Sequent and Celerity use 4.2. In regard to the +Apollo, see the file APOLLO in this directory. NCR Tower32, +HP9000s300, Stride and Nu run forms of System V. System V rel 2 also +works on Vaxes now. See etc/MACHINES. + +* System V Unix supported, including subprocesses. + +It should be possible now to bring up Emacs on a machine running +mere unameliorated system V Unix with no major work; just possible bug +fixes. But you can expect to find a handful of those on any machine +that Emacs has not been run on before. + +* Berkeley 4.1 Unix supported. + +See etc/MACHINES. + +* Portable `alloca' provided. + +Emacs can now run on machines that do not and cannot support the library +subroutine `alloca' in the canonical fashion, using an `alloca' emulation +written in C. + +* On-line manual. + +Info now contains an Emacs manual, with essentially the same text +as in the printed manual. + +The manual can now be printed with a standard TeX. + +Nicely typeset and printed copies of the manual are available +from the Free Software Foundation. + +* Backup file version numbers. + +Emacs now supports version numbers in backup files. + +The first time you save a particular file in one editing session, +the old file is copied or renamed to serve as a backup file. +In the past, the name for the backup file was made by appending `~' +to the end of the original file name. + +Now the backup file name can instead be made by appending ".~NN~" to +the original file name, where NN stands for a numeric version. Each +time this is done, the new version number is one higher than the +highest previously used. + +Thus, the active, current file does not have a version number. +Only the backups have them. + +This feature is controlled by the variable `version-control'. If it +is `nil', as normally, then numbered backups are made only for files +that already have numbered backups. Backup names with just `~' are +used for files that have no numbered backups. + +If `version-control' is `never', then the backup file's name is +made with just `~' in any case. + +If `version-control' is not `nil' or `never', numbered backups are +made unconditionally. + +To prevent unlimited consumption of disk space, Emacs can delete +old backup versions automatically. Generally Emacs keeps the first +few backups and the latest few backups, deleting any in between. +This happens every time a new backup is made. The two variables that +control the deletion are `kept-old-versions' and `kept-new-versions'. +Their values are, respectively, the number of oldest backups to keep +and the number of newest ones to keep, each time a new backup is made. +The value of `kept-new-versions' includes the backup just created. +By default, both values are 2. + +If `trim-versions-without-asking' is non-`nil', the excess middle versions +are deleted without a murmur. If it is `nil', the default, then you +are asked whether the excess middle versions should really be deleted. + +Dired has a new command `.' which marks for deletion all but the latest +and oldest few of every numeric series of backups. `kept-old-versions' +controls the number of oldest versions to keep, and `dired-kept-versions' +controls the number of latest versions to keep. A numeric argument to +the `.' command, if positive, specifies the number of latest versions +to keep, overriding `dired-kept-versions'. A negative argument specifies +the number of oldest versions to keep, using minus the argument to override +`kept-old-versions'. + +* Immediate conflict detection. + +Emacs now locks the files it is modifying, so that if +you start to modify within Emacs a file that is being +modified in another Emacs, you get an immediate warning. + +The warning gives you three choices: +1. Give up, and do not make any changes. +2. Make changes anyway at your own risk. +3. Make changes anyway, and record yourself as + the person locking the file (instead of whoever + was previously recorded.) + +Just visiting a file does not lock it. It is locked +when you try to change the buffer that is visiting the file. +Saving the file unlocks it until you make another change. + +Locking is done by writing a lock file in a special designated +directory. If such a directory is not provided and told to +Emacs as part of configuring it for your machine, the lock feature +is turned off. + +* M-x recover-file. + +This command is used to get a file back from an auto-save +(after a system crash, for example). It takes a file name +as argument and visits that file, but gets the data from the +file's last auto save rather than from the file itself. + +* M-x normal-mode. + +This command resets the current buffer's major mode and local +variables to be as specified by the visit filename, the -*- line +and/or the Local Variables: block at the end of the buffer. +It is the same thing normally done when a file is first visited. + +* Echo area messages disappear shortly if minibuffer is in use. + +Any message in the echo area disappears after 2 seconds +if the minibuffer is active. This allows the minibuffer +to become visible again. + +* C-z on System V runs a subshell. + +On systems which do not allow programs to be suspended, the C-z command +forks a subshell that talks directly to the terminal, and then waits +for the subshell to exit. This gets almost the effect of suspending +in that you can run other programs and then return to Emacs. However, +you cannot log out from the subshell. + +* C-c is always a prefix character. + +Also, subcommands of C-c which are letters are always +reserved for the user. No standard Emacs major mode +defines any of them. + +* Picture mode C-c commands changed. + +The old C-c k command is now C-c C-w. +The old C-c y command is now C-c C-x. + +* Shell mode commands changed. + +All the special commands of Shell mode are now moved onto +the C-c prefix. Most are not changed aside from that. +Thus, the old Shell mode C-c command (kill current job) +is now C-c C-c; the old C-z (suspend current job) is now C-c C-z, +etc. + +The old C-x commands are now C-c commands. C-x C-k (kill output) +is now C-c C-o, and C-x C-v (show output) is now C-c C-r. + +The old M-= (copy previous input) command is now C-c C-y. + +* Shell mode recognizes aliases for `pushd', `popd' and `cd'. + +Shell mode now uses the variable `shell-pushd-regexp' as a +regular expression to recognize any command name that is +equivalent to a `pushd' command. By default it is set up +to recognize just `pushd' itself. If you use aliases for +`pushd', change the regexp to recognize them as well. + +There are also `shell-popd-regexp' to recognize commands +with the effect of a `popd', and `shell-cd-regexp' to recognize +commands with the effect of a `cd'. + +* "Exit" command in certain modes now C-c C-c. + +These include electric buffer menu mode, electric command history +mode, Info node edit mode, and Rmail edit mode. In all these +modes, the command to exit used to be just C-c. + +* Outline mode changes. + +Lines that are not heading lines are now called "body" lines. +The command `hide-text' is renamed to `hide-body'. +The key M-H is renamed to C-c C-h. +The key M-S is renamed to C-c C-s. +The key M-s is renamed to C-c C-i. + +Changes of line visibility are no longer undoable. As a result, +they no longer use up undo memory and no longer interfere with +undoing earlier commands. + +* Rmail changes. + +The s and q commands now both expunge deleted messages before saving; +use C-x C-s to save without expunging. + +The u command now undeletes the current message if it is deleted; +otherwise, it backs up as far as necessary to reach a deleted message, +and undeletes that one. The u command in the summary behaves likewise, +but considers only messages listed in the summary. The M-u command +has been eliminated. + +The o and C-o keys' meanings are interchanged. +o now outputs to an Rmail file, and C-o to a Unix mail file. + +The F command (rmail-find) is renamed to M-s (rmail-search). +Various new commands and features exist; see the Emacs manual. + +* Local bindings described first in describe-bindings. + +* [...], {...} now balance in Fundamental mode. + +* Nroff mode and TeX mode. + +The are two new major modes for editing nroff input and TeX input. +See the Emacs manual for full information. + +* New C indentation style variable `c-brace-imaginary-offset'. + +The value of `c-brace-imaginary-offset', normally zero, controls the +indentation of a statement inside a brace-group where the open-brace +is not the first thing on a line. The value says where the open-brace +is imagined to be, relative to the first nonblank character on the line. + +* Dired improvements. + +Dired now normally keeps the cursor at the beginning of the file name, +not at the beginning of the line. The most used motion commands are +redefined in Dired to position the cursor this way. + +`n' and `p' are now equivalent in dired to `C-n' and `C-p'. + +If any files to be deleted cannot be deleted, their names are +printed in an error message. + +If the `v' command is invoked on a file which is a directory, +dired is run on that directory. + +* `visit-tag-table' renamed `visit-tags-table'. + +This is so apropos of `tags' finds everything you need to +know about in connection with Tags. + +* `mh-e' library uses C-c as prefix. + +All the special commands of `mh-rmail' now are placed on a +C-c prefix rather than on the C-x prefix. This is for +consistency with other special modes with their own commands. + +* M-$ or `spell-word' checks word before point. + +It used to check the word after point. + +* Quitting during autoloading no longer causes trouble. + +Now, when a file is autoloaded, all function redefinitions +and `provide' calls are recorded and are undone if you quit +before the file is finished loading. + +As a result, it no longer happens that some of the entry points +which are normally autoloading have been defined already, but the +entire file is not really present to support them. + +* `else' can now be indented correctly in C mode. + +TAB in C mode now knows which `if' statement an `else' matches +up with, and can indent the `else' correctly under the `if', +even if the `if' contained such things as another `if' statement, +or a `while' or `for' statement, with no braces around it. + +* `batch-byte-compile' + +Runs byte-compile-file on the files specified on the command line. +All the rest of the command line arguments are taken as files to +compile (or, if directories, to do byte-recompile-directory on). +Must be used only with -batch, and kills emacs on completion. +Each file will be processed even if an error occurred previously. +For example, invoke `emacs -batch -f batch-byte-compile *.el'. + +* `-batch' changes. + +`-batch' now implies `-q': no init file is loaded by Emacs when +`-batch' is used. Also, no `term/TERMTYPE.el' file is loaded. Auto +saving is not done except in buffers in which it is explicitly +requested. Also, many echo-area printouts describing what is going on +are inhibited in batch mode, so that the only output you get is the +output you program specifically. + +One echo-area message that is not suppressed is the one that says +that a file is being loaded. That is because you can prevent this +message by passing `t' as the third argument to `load'. + +* Display of search string in incremental search. + +Now, when you type C-s or C-r to reuse the previous search +string, that search string is displayed immediately in the echo area. + +Three dots are displayed after the search string while search +is actually going on. + +* View commands. + +The commands C-x ], C-x [, C-x /, C-x j and C-x o are now +available inside `view-buffer' and `view-file', with their +normal meanings. + +* Full-width windows preferred. + +The ``other-window'' commands prefer other full width windows, +and will split only full width windows. + +* M-x rename-file can copy if necessary. + +When used between different file systems, since actual renaming does +not work, the old file will be copied and deleted. + +* Within C-x ESC, you can pick the command to repeat. + +While editing a previous command to be repeated, inside C-x ESC, +you can now use the commands M-p and M-n to pick an earlier or +later command to repeat. M-n picks the next earlier command +and M-p picks the next later one. The new command appears in +the minibuffer, and you can go ahead and edit it, and repeat it +when you exit the minibuffer. + +Using M-n or M-p within C-x ESC is like having used a different +numeric argument when you ran C-x ESC in the first place. + +The command you finally execute using C-x ESC is added to the +front of the command history, unless it is identical with the +first thing in the command history. + +* Use C-c C-c to exit from editing within Info. + +It used to be C-z for this. Somehow this use of C-z was +left out when all the others were moved. The intention is that +C-z should always suspend Emacs. + +* Default arg to C-x < and C-x > now window width minus 2. + +These commands, which scroll the current window horizontally +by a specified number of columns, now scroll a considerable +distance rather than a single column if used with no argument. + +* Auto Save Files Deleted. + +The default value of `delete-auto-save-files' is now `t', so that +when you save a file for real, its auto save file is deleted. + +* Rnews changes. + +The N, P and J keys in Rnews are renamed to M-n, M-p and M-j. +These keys move among newsgroups. + +The n and p keys for moving sequentially between news articles now +accept repeat count arguments, and the + and - keys, made redundant by +this change, are eliminated. + +The s command for outputting the current article to a file +is renamed as o, to be compatible with Rmail. + +* Sendmail changes. + +If you have a ~/.mailrc file, Emacs searches it for mailing address +aliases, and these aliases are expanded when you send mail in Emacs. + +Fcc fields can now be used in the headers in the *mail* buffer +to specify files in which copies of the message should be put. +The message is written into those files in Unix mail file format. +The message as sent does not contain any Fcc fields in its header. +You can use any number of Fcc fields, but only one file name in each one. +The variable `mail-archive-file-name', if non-`nil', can be a string +which is a file name; an Fcc to that file will be inserted in every +message when you begin to compose it. + +A new command C-c q now exists in Mail mode. It fills the +paragraphs of an old message that had been inserted with C-c y. + +When the *mail* buffer is put in Mail mode, text-mode-hook +is now run in addition to mail-mode-hook. text-mode-hook +is run first. + +The new variable `mail-header-separator' now specifies the string +to use on the line that goes between the headers and the message text. +By default it is still "--text follows this line--". + +* Command history truncated automatically. + +Just before each garbage collection, all but the last 30 elements +of the command history are discarded. + + +Incompatible Lisp Programming Changes in Emacs 17 + +* `"e' no longer supported. + +This feature, which allowed Lisp functions to take arguments +that were not evaluated, has been eliminated, because it is +inescapably hard to make the compiler work properly with such +functions. + +You should use macros instead. A simple way to change any +code that uses `"e' is to replace + + (defun foo ("e x y z) ... + +with + + (defmacro foo (x y z) + (list 'foo-1 (list 'quote x) (list 'quote y) (list 'quote z))) + + (defun foo-1 (x y z) ... + +* Functions `region-to-string' and `region-around-match' removed. + +These functions were made for compatibility with Gosling Emacs, but it +turns out to be undesirable to use them in GNU Emacs because they use +the mark. They have been eliminated from Emacs proper, but are +present in mlsupport.el for the sake of converted mocklisp programs. + +If you were using `region-to-string', you should instead use +`buffer-substring'; then you can pass the bounds as arguments and +can avoid setting the mark. + +If you were using `region-around-match', you can use instead +the two functions `match-beginning' and `match-end'. These give +you one bound at a time, as a numeric value, without changing +point or the mark. + +* Function `function-type' removed. + +This just appeared not to be very useful. It can easily be written in +Lisp if you happen to want it. Just use `symbol-function' to get the +function definition of a symbol, and look at its data type or its car +if it is a list. + +* Variable `buffer-number' removed. + +You can still use the function `buffer-number' to find out +a buffer's unique number (assigned in order of creation). + +* Variable `executing-macro' renamed `executing-kbd-macro'. + +This variable is the currently executing keyboard macro, as +a string, or `nil' when no keyboard macro is being executed. + +* Loading term/$TERM. + +The library term/$TERM (where $TERM get replaced by your terminal +type), which is done by Emacs automatically when it starts up, now +happens after the user's .emacs file is loaded. + +In previous versions of Emacs, these files had names of the form +term-$TERM; thus, for example, term-vt100.el, but now they live +in a special subdirectory named term, and have names like +term/vt100.el. + +* `command-history' format changed. + +The elements of this list are now Lisp expressions which can +be evaluated directly to repeat a command. + +* Unused editing commands removed. + +The functions `forward-to-word', `backward-to-word', +`upcase-char', `mark-beginning-of-buffer' and `mark-end-of-buffer' +have been removed. Their definitions can be found in file +lisp/unused.el if you need them. + + +Upward Compatible Lisp Programming Changes in Emacs 17 + +* You can now continue after errors and quits. + +When the debugger is entered because of a C-g, due to +a non-`nil' value of `debug-on-quit', the `c' command in the debugger +resumes execution of the code that was running when the quit happened. +Use the `q' command to go ahead and quit. + +The same applies to some kinds of errors, but not all. Errors +signaled with the Lisp function `signal' can be continued; the `c' +command causes `signal' to return. The `r' command causes `signal' to +return the value you specify. The `c' command is equivalent to `r' +with the value `nil'. + +For a `wrong-type-argument' error, the value returned with the `r' +command is used in place of the invalid argument. If this new value +is not valid, another error occurs. + +Errors signaled with the function `error' cannot be continued. +If you try to continue, the error just happens again. + +* `dot' renamed `point'. + +The word `dot' has been replaced with `point' in all +function and variable names, including: + + point, point-min, point-max, + point-marker, point-min-marker, point-max-marker, + window-point, set-window-point, + point-to-register, register-to-point, + exchange-point-and-mark. + +The old names are still supported, for now. + +* `string-match' records position of end of match. + +After a successful call to `string-match', `(match-end 0)' will +return the index in the string of the first character after the match. +Also, `match-begin' and `match-end' with nonzero arguments can be +used to find the indices of beginnings and ends of substrings matched +by subpatterns surrounded by parentheses. + +* New function `insert-before-markers'. + +This function is just like `insert' except in the handling of any +relocatable markers that are located at the point of insertion. +With `insert', such markers end up pointing before the inserted text. +With `insert-before-markers', they end up pointing after the inserted +text. + +* New function `copy-alist'. + +This function takes one argument, a list, and makes a disjoint copy +of the alist structure. The list itself is copied, and each element +that is a cons cell is copied, but the cars and cdrs of elements +remain shared with the original argument. + +This is what it takes to get two alists disjoint enough that changes +in one do not change the result of `assq' on the other. + +* New function `copy-keymap'. + +This function takes a keymap as argument and returns a new keymap +containing initially the same bindings. Rebindings in either one of +them will not alter the bindings in the other. + +* New function `copy-syntax-table'. + +This function takes a syntax table as argument and returns a new +syntax table containing initially the same syntax settings. Changes +in either one of them will not alter the other. + +* Randomizing the random numbers. + +`(random t)' causes the random number generator's seed to be set +based on the current time and Emacs's process id. + +* Third argument to `modify-syntax-entry'. + +The optional third argument to `modify-syntax-entry', if specified +should be a syntax table. The modification is made in that syntax table +rather than in the current syntax table. + +* New function `run-hooks'. + +This function takes any number of symbols as arguments. +It processes the symbols in order. For each symbol which +has a value (as a variable) that is non-nil, the value is +called as a function, with no arguments. + +This is useful in major mode commands. + +* Second arg to `switch-to-buffer'. + +If this function is given a non-`nil' second argument, then the +selection being done is not recorded on the selection history. +The buffer's position in the history remains unchanged. This +feature is used by the view commands, so that the selection history +after exiting from viewing is the same as it was before. + +* Second arg to `display-buffer' and `pop-to-buffer'. + +These two functions both accept an optional second argument which +defaults to `nil'. If the argument is not `nil', it means that +another window (not the selected one) must be found or created to +display the specified buffer in, even if it is already shown in +the selected window. + +This feature is used by `switch-to-buffer-other-window'. + +* New variable `completion-ignore-case'. + +If this variable is non-`nil', completion allows strings +in different cases to be considered matching. The global value +is `nil' + +This variable exists for the sake of commands that are completing +an argument in which case is not significant. It is possible +to change the value globally, but you might not like the consequences +in the many situations (buffer names, command names, file names) +where case makes a difference. + +* Major modes related to Text mode call text-mode-hook, then their own hooks. + +For example, turning on Outline mode first calls the value of +`text-mode-hook' as a function, if it exists and is non-`nil', +and then does likewise for the variable `outline-mode-hook'. + +* Defining new command line switches. + +You can define a new command line switch in your .emacs file +by putting elements on the value of `command-switch-alist'. +Each element of this list should look like + (SWITCHSTRING . FUNCTION) +where SWITCHSTRING is a string containing the switch to be +defined, such as "-foo", and FUNCTION is a function to be called +if such an argument is found in the command line. FUNCTION +receives the command line argument, a string, as its argument. + +To implement a switch that uses up one or more following arguments, +use the fact that the remaining command line arguments are kept +as a list in the variable `command-line-args'. FUNCTION can +examine this variable, and do + (setq command-line-args (cdr command-line-args) +to "use up" an argument. + +* New variable `load-in-progress'. + +This variable is non-`nil' when a file of Lisp code is being read +and executed by `load'. + +* New variable `print-length'. + +The value of this variable is normally `nil'. It may instead be +a number; in that case, when a list is printed by `prin1' or +`princ' only that many initial elements are printed; the rest are +replaced by `...'. + +* New variable `find-file-not-found-hook'. + +If `find-file' or any of its variants is used on a nonexistent file, +the value of `find-file-not-found-hook' is called (if it is not `nil') +with no arguments, after creating an empty buffer. The file's name +can be found as the value of `buffer-file-name'. + +* Processes without buffers. + +In the function `start-process', you can now specify `nil' as +the process's buffer. You can also set a process's buffer to `nil' +using `set-process-buffer'. + +The reason you might want to do this is to prevent the process +from being killed because any particular buffer is killed. +When a process has a buffer, killing that buffer kills the +process too. + +When a process has no buffer, its output is lost unless it has a +filter, and no indication of its being stopped or killed is given +unless it has a sentinel. + +* New function `user-variable-p'. `v' arg prompting changed. + +This function takes a symbol as argument and returns `t' if +the symbol is defined as a user option variable. This means +that it has a `variable-documentation' property whose value is +a string starting with `*'. + +Code `v' in an interactive arg reading string now accepts +user variables only, and completion is limited to the space of +user variables. + +The function `read-variable' also now accepts and completes +over user variables only. + +* CBREAK mode input is the default in Unix 4.3 bsd. + +In Berkeley 4.3 Unix, there are sufficient features for Emacs to +work fully correctly using CBREAK mode and not using SIGIO. +Therefore, this mode is the default when running under 4.3. +This mode corresponds to `nil' as the first argument to +`set-input-mode'. You can still select either mode by calling +that function. + +* Information on memory usage. + +The new variable `data-bytes-used' contains the number +of bytes of impure space allocated in Emacs. +`data-bytes-free' contains the number of additional bytes +Emacs could allocate. Note that space formerly allocated +and freed again still counts as `used', since it is still +in Emacs's address space. + +* No limit on size of output from `format'. + +The string output from `format' used to be truncated to +100 characters in length. Now it can have any length. + +* New errors `void-variable' and `void-function' replace `void-symbol'. + +This change makes it possible to have error messages that +clearly distinguish undefined variables from undefined functions. +It also allows `condition-case' to handle one case without the other. + +* `replace-match' handling of `\'. + +In `replace-match', when the replacement is not literal, +`\' in the replacement string is always treated as an +escape marker. The only two special `\' constructs +are `\&' and `\DIGIT', so `\' followed by anything other than +`&' or a digit has no effect. `\\' is necessary to include +a `\' in the replacement text. + +This level of escaping is comparable with what goes on in +a regular expression. It is over and above the level of `\' +escaping that goes on when strings are read in Lisp syntax. + +* New error `invalid-regexp'. + +A regexp search signals this type of error if the argument does +not meet the rules for regexp syntax. + +* `kill-emacs' with argument. + +If the argument is a number, it is returned as the exit status code +of the Emacs process. If the argument is a string, its contents +are stuffed as pending terminal input, to be read by another program +after Emacs is dead. + +* New fifth argument to `subst-char-in-region'. + +This argument is optional and defaults to `nil'. If it is not `nil', +then the substitutions made by this function are not recorded +in the Undo mechanism. + +This feature should be used with great care. It is now used +by Outline mode to make lines visible or invisible. + +* ` *Backtrace*' buffer renamed to `*Backtrace*'. + +As a result, you can now reselect this buffer easily if you switch to +another while in the debugger. + +Exiting from the debugger kills the `*Backtrace*' buffer, so you will +not try to give commands in it when no longer really in the debugger. + +* New function `switch-to-buffer-other-window'. + +This is the new primitive to select a specified buffer (the +argument) in another window. It is not quite the same as +`pop-to-buffer', because it is guaranteed to create another +window (assuming there is room on the screen) so that it can +leave the current window's old buffer displayed as well. + +All functions to select a buffer in another window should +do so by calling this new function. + +* New variable `minibuffer-help-form'. + +At entry to the minibuffer, the variable `help-form' is bound +to the value of `minibuffer-help-form'. + +`help-form' is expected at all times to contain either `nil' +or an expression to be executed when C-h is typed (overriding +teh definition of C-h as a command). `minibuffer-help-form' +can be used to provide a different default way of handling +C-h while in the minibuffer. + +* New \{...} documentation construct. + +It is now possible to set up the documentation string for +a major mode in such a way that it always describes the contents +of the major mode's keymap, as it has been customized. +To do this, include in the documentation string the characters `\{' +followed by the name of the variable containing the keymap, +terminated with `}'. (The `\' at the beginning probably needs to +be quoted with a second `\', to include it in the doc string.) +This construct is normally used on a line by itself, with no blank +lines before or after. + +For example, the documentation string for the function `c-mode' contains + ... + Paragraphs are separated by blank lines only. + Delete converts tabs to spaces as it moves back. + \\{c-mode-map} + Variables controlling indentation style: + ... + +* New character syntax class "punctuation". + +Punctuation characters behave like whitespace in word and +list parsing, but can be distinguished in regexps and in the +function `char-syntax'. Punctuation syntax is represented by +a period in `modify-syntax-entry'. + +* `auto-mode-alist' no longer needs entries for backup-file names, + +Backup suffixes of all kinds are now stripped from a file's name +before searching `auto-mode-alist'. + + + +Changes in Emacs 16 + +* No special code for Ambassadors, VT-100's and Concept-100's. + +Emacs now controls these terminals based on the termcap entry, like +all other terminals. Formerly it did not refer to the termcap entries +for those terminal types, and often the termcap entries for those +terminals are wrong or inadequate. If you experience worse behavior +on these terminals than in version 15, you can probably correct it by +fixing up the termcap entry. See ./TERMS for more info. + +See ./TERMS in any case if you find that some terminal does not work +right with Emacs now. + +* Minibuffer default completion character is TAB (and not ESC). + +So that ESC can be used in minibuffer for more useful prefix commands. + +* C-z suspends Emacs in all modes. + +Formerly, C-z was redefined for other purposes by certain modes, +such as Buffer Menu mode. Now other keys are used for those purposes, +to keep the meaning of C-z uniform. + +* C-x ESC (repeat-complex-command) allows editing the command it repeats. + +Instead of asking for confirmation to re-execute a command from the +command history, the command is placed, in its Lisp form, into the +minibuffer for editing. You can confirm by typing RETURN, change some +arguments and then confirm, or abort with C-g. + +* Incremental search does less redisplay on slow terminals. + +If the terminal baud rate is <= the value of `isearch-slow-speed', +incremental searching outside the text on the screen creates +a single-line window and uses that to display the line on which +a match has been found. Exiting or quitting the search restores +the previous window configuration and redisplays the window you +were searching in. + +The initial value of `isearch-slow-speed' is 1200. + +This feature is courtesy of crl@purdue. + +* Recursive minibuffers not allowed. + +If the minibuffer window is selected, most commands that would +use the minibuffer gets an error instead. (Specific commands +may override this feature and therefore still be allowed.) + +Strictly speaking, recursive entry to the minibuffer is still +possible, because you can switch to another window after +entering the minibuffer, and then minibuffer-using commands +are allowed. This is still allowed by a deliberate decision: +if you know enough to switch windows while in the minibuffer, +you can probably understand recursive minibuffers. + +This may be overridden by binding the variable +`enable-recursive-minibuffers' to t. + +* New major mode Emacs-Lisp mode, for editing Lisp code to run in Emacs. + +The mode in which emacs lisp files is edited is now called emacs-lisp-mode +and is distinct from lisp-mode. The latter is intended for use with +lisps external to emacs. + +The hook which is funcalled (if non-nil) on entry to elisp-mode is now +called emacs-lisp-mode-hook. A consequence of this changes is that +.emacs init files which set the value of lisp-mode-hook may need to be +changed to use the new names. + +* Correct matching of parentheses is checked on insertion. + +When you insert a close-paren, the matching open-paren +is checked for validity. The close paren must be the kind +of close-paren that the open-paren says it should match. +Otherwise, a warning message is printed. close-paren immediately +preceded by quoting backslash syntax character is not matched. + +This feature was originally written by shane@mit-ajax. + +* M-x list-command-history +* M-x command-history-mode +* M-x electric-command-history + +`list-command-history' displays forms from the command history subject +to user controlled filtering and limit on number of forms. It leaves +the buffer in `command-history-mode'. M-x command-history-mode +recomputes the command history each time it is invoked via +`list-command-history'. It is like Emacs-Lisp mode except that characters +don't insert themselves and provision is made for re-evaluating an +expression from the list. `electric-command-history' pops up a type +out window with the command history displayed. If the very next +character is Space, the window goes away and the previous window +configuration is restored. Otherwise you can move around in the +history and select an expression for evaluation *inside* the buffer +which invoked `electric-command-history'. The original window +configuration is restored on exit unless the command selected changes +it. + +* M-x edit-picture + +Enters a temporary major mode (the previous major mode is remembered +and can is restored on exit) designed for editing pictures and tables. +Printing characters replace rather than insert themselves with motion +afterwards that is user controlled (you can specify any of the 8 +compass directions). Special commands for movement are provided. +Special commands for hacking tabs and tab stops are provided. Special +commands for killing rectangles and overlaying them are provided. See +the documentation of function edit-picture for more details. + +Calls value of `edit-picture-hook' on entry if non-nil. + +* Stupid C-s/C-q `flow control' supported. + +Do (set-input-mode nil t) to tell Emacs to use CBREAK mode and interpret +C-s and C-q as flow control commands. (set-input-mode t nil) switches +back to interrupt-driven input. (set-input-mode nil nil) uses CBREAK +mode but no `flow control'; this may make it easier to run Emacs under +certain debuggers that have trouble dealing with inferiors that use SIGIO. + +CBREAK mode has certain inherent disadvantages, which are why it is +not the default: + + Meta-keys are ignored; CBREAK mode discards the 8th bit of + input characters. + + Control-G as keyboard input discards buffered output, + and therefore can cause incorrect screen updating. + +The use of `flow control' has its own additional disadvantage: the +characters C-s and C-q are not available as editing commands. You can +partially compensate for this by setting up a keyboard-translate-table +(see file ONEWS) that maps two other characters (such as C-^ and C-\) into +C-s and C-q. Of course, C-^ and C-\ are commonly used as escape +characters in remote-terminal programs. You really can't win except +by getting rid of this sort of `flow control.' + +The configuration switch CBREAK_INPUT is now eliminated. +INTERRUPT_INPUT exists only to specify the default mode of operation; +#define it to make interrupt-driven input the default. + +* Completion of directory names provides a slash. + +If file name completion yields the name of a directory, +a slash is appended to it. + +* Undo can clear modified-flag. + +If you undo changes in a buffer back to a state in which the +buffer was not considered "modified", then it is labelled as +once again "unmodified". + +* M-x run-lisp. + +This command creates an inferior Lisp process whose input and output +appear in the Emacs buffer named `*lisp*'. That buffer uses a major mode +called inferior-lisp-mode, which has many of the commands of lisp-mode +and those of shell-mode. Calls the value of shell-mode-hook and +lisp-mode-hook, in that order, if non-nil. + +Meanwhile, in lisp-mode, the command C-M-x is defined to +send the current defun as input to the `*lisp*' subprocess. + +* Mode line says `Narrow' when buffer is clipped. + +If a buffer has a clipping restriction (made by `narrow-to-region') +then its mode line contains the word `Narrow' after the major and +minor modes. + +* Mode line says `Abbrev' when abbrev mode is on. + +* add-change-log-entry takes prefix argument + +Giving a prefix argument makes it prompt for login name, full name, +and site name, with defaults. Otherwise the defaults are used +with no confirmation. + +* M-x view-buffer and M-x view-file + +view-buffer selects the named buffer, view-file finds the named file; the +resulting buffer is placed into view-mode (a recursive edit). The normal +emacs commands are not available. Instead a set of special commands is +provided which faclitate moving around in the buffer, searching and +scrolling by screenfuls. Exiting view-mode returns to the buffer in which +the view-file or view-buffer command was given. +Type ? or h when viewing for a complete list of view commands. +Each calls value of `view-hook' if non-nil on entry. + +written by shane@mit-ajax. + +* New key commands in dired. + +`v' views (like more) the file on the current line. +`#' marks auto-save files for deletion. +`~' marks backup files for deletion. +`r' renames a file and updates the directory listing if the +file is renamed to same directory. +`c' copies a file and updates the directory listing if the file is +copied to the same directory. + +* New function `electric-buffer-list'. + +This pops up a buffer describing the set of emacs buffers. +Immediately typing space makes the buffer list go away and returns +to the buffer and window which were previously selected. + +Otherwise one may use the c-p and c-n commands to move around in the +buffer-list buffer and type Space or C-z to select the buffer on the +cursor's line. There are a number of other commands which are the same +as those of buffer-menu-mode. + +This is a useful thing to bind to c-x c-b in your `.emacs' file if the +rather non-standard `electric' behaviour of the buffer list suits your taste. +Type C-h after invoking electric-buffer-list for more information. + +Calls value of `electric-buffer-menu-mode-hook' if non-nil on entry. +Calls value of `after-electric-buffer-menu' on exit (select) if non-nil. + +Changes in version 16 for mail reading and sending + +* sendmail prefix character is C-c (and not C-z). New command C-c w. + +For instance C-c C-c (or C-c C-s) sends mail now rather than C-z C-z. +C-c w inserts your `signature' (contents of ~/.signature) at the end +of mail. + +* New feature in C-c y command in sending mail. + +C-c y is the command to insert the message being replied to. +Normally it deletes most header fields and indents everything +by three spaces. + +Now, C-c y does not delete header fields or indent. +C-c y with any other numeric argument does delete most header +fields, but indents by the amount specified in the argument. + +* C-r command in Rmail edits current message. + +It does this by switching to a different major mode +which is nearly the same as Text mode. The only difference +between it and text mode are the two command C-c and C-]. +C-c is defined to switch back to Rmail mode, and C-] +is defined to restore the original contents of the message +and then switch back to Rmail mode. + +C-c and C-] are the only ways "back into Rmail", but you +can switch to other buffers and edit them as usual. +C-r in Rmail changes only the handling of the Rmail buffer. + +* Rmail command `t' toggles header display. + +Normally Rmail reformats messages to hide most header fields. +`t' switches to display of all the header fields of the +current message, as long as it remains current. +Another `t' switches back to the usual display. + +* Rmail command '>' goes to the last message. + +* Rmail commands `a' and `k' set message attributes. +`a' adds an attribute and `k' removes one. You specify +the attrbute by name. You can specify either a built-in +flag such as "deleted" or "filed", or a user-defined keyword +(anything not recognized as built-in). + +* Rmail commands `l' and `L' summarize by attributes. + +These commands create a summary with one line per message, +like `h', but they list only some of the messages. You +specify which attribute (for `l') or attributes (for `L') +the messages should have. + +* Rmail can parse mmdf mail files. + +* Interface to MH mail system. + +mh-e is a front end for GNU emacs and the MH mail system. It +provides a friendly and convient interface to the MH commands. + +To read mail, invoke mh-rmail. This will inc new mail and display the +scan listing on the screen. To see a summary of the mh-e commands, +type ?. Help is available through the usual facilities. + +To send mail, invoke mh-smail. + +mh-e requires a copy of MH.5 that has been compiled with the MHE +compiler switch. + +From larus@berkeley. + +New hooks and parameters in version 16 + +* New variable `blink-matching-paren-distance'. + +This is the maximum number of characters to search for +an open-paren to match an inserted close-paren. +The matching open-paren is shown and checked if it is found +within this distance. + +`nil' means search all the way to the beginning of the buffer. +In this case, a warning message is printed if no matching +open-paren is found. + +This feature was originally written by shane@mit-ajax. + +* New variable `find-file-run-dired' + +If nil, find-file will report an error if an attempt to visit a +directory is detected; otherwise, it runs dired on that directory. +The default is t. + +* Variable `dired-listing-switches' holds switches given to `ls' by dired. + +The value should be a string containing `-' followed by letters. +The letter `l' had better be included and letter 'F' had better be excluded! +The default is "-al". + +This feature was originally written by shane@mit-ajax. + +* New variable `display-time-day-and-date'. + +If this variable is set non-`nil', the function M-x display-time +displays the day and date, as well as the time. + +* New parameter `c-continued-statement-indent'. + +This controls the extra indentation given to a line +that continues a C statement started on the previous line. +By default it is 2, which is why you would see + + if (foo) + bar (); + + +* Changed meaning of `c-indent-level'. + +The value of `c-brace-offset' used to be +subtracted from the value of `c-indent-level' whenever +that value was used. Now it is not. + +As a result, `c-indent-level' is now the offset of +statements within a block, relative to the line containing +the open-brace that starts the block. + +* turn-on-auto-fill is useful value for text-mode-hook. + +(setq text-mode-hook 'turn-on-auto-fill) +is all you have to do to make sure Auto Fill mode is turned +on whenever you enter Text mode. + +* Parameter explicit-shell-file-name for M-x shell. + +This variable, if non-nil, specifies the file name to use +for the shell to run if you do M-x shell. + +Changes in version 16 affecting Lisp programming: + +* Documentation strings adapt to customization. + +Often the documentation string for a command wants to mention +another command. Simply stating the other command as a +character sequence has a disadvantage: if the user customizes +Emacs by moving that function to a different command, the +cross reference in the documentation becomes wrong. + +A new feature allows you to write the documentation string +using a function name, and the command to run that function +is looked up when the documentation is printed. + +If a documentation string contains `\[' (two characters) then +the following text, up to the next `]', is taken as a function name. +Instead of printing that function name, the command that runs it is printed. +(M-x is used to construct a command if no shorter one exists.) + +For example, instead of putting `C-n' in a documentation string +to refer to the C-n command, put in `\[next-line]'. (In practice +you will need to quote the backslash with another backslash, +due to the syntax for strings in Lisp and C.) + +To include the literal characters `\[' in a documentation string, +precede them with `\='. To include the characters `\=', precede +them with `\='. For example, "\\=\\= is the way to quote \\=\\[" +will come out as `\= is the way to quote \['. + +The new function `substitute-command-keys' takes a string possibly +contaning \[...] constructs and replaces those constructs with +the key sequences they currently stand for. + +* Primitives `find-line-comment' and `find-line-comment-body' flushed. + +Search for the value of `comment-start-skip' if you want to find +whether and where a line has a comment. + +* New function `auto-save-file-name-p' + +Should return non-`nil' iff given a string which is the name of an +auto-save file (sans directory name). If you redefine +`make-auto-save-file-name', you should redefine this accordingly. By +default, this function returns `t' for filenames beginning with +character `#'. + +* The value of `exec-directory' now ends in a slash. + +This is to be compatible with most directory names in GNU Emacs. + +* Dribble files and termscript files. + +(open-dribble-file FILE) opens a dribble file named FILE. When a +dribble file is open, every character Emacs reads from the terminal is +written to the dribble file. + +(open-termscript FILE) opens a termscript file named FILE. When a +termscript file is open, all characters sent to the terminal by Emacs +are also written in the termscript file. + +The two of these together are very useful for debugging Emacs problems +in redisplay. + +* Upper case command characters by default are same as lower case. + +If a character in a command is an upper case letter, and is not defined, +Emacs uses the definition of the corresponding lower case letter. +For example, if C-x U is not directly undefined, it is treated as +a synonym for C-x u (undo). + +* Undefined function errors versus undefined variable errors. + +Void-symbol errors now say "boundp" if the symbol's value was void +or "fboundp" if the function definition was void. + +* New function `bury-buffer'. + +The new function `bury-buffer' takes one argument, a buffer object, +and puts that buffer at the end of the internal list of buffers. +So it is the least preferred candidate for use as the default value +of C-x b, or for other-buffer to return. + +* Already-displayed buffers have low priority for display. + +When a buffer is chosen automatically for display, or to be the +default in C-x b, buffers already displayed in windows have lower +priority than buffers not currently visible. + +* `set-window-start' accepts a third argument NOFORCE. + +This argument, if non-nil, prevents the window's force_start flag +from being set. Setting the force_start flag causes the next +redisplay to insist on starting display at the specified starting +point, even if dot must be moved to get it onto the screen. + +* New function `send-string-to-terminal'. + +This function takes one argument, a string, and outputs its contents +to the terminal exactly as specified: control characters, escape +sequences, and all. + +* Keypad put in command mode. + +The terminal's keypad is now put into command mode, as opposed to +numeric mode, while Emacs is running. This is done by means of the +termcap `ks' and `ke' strings. + +* New function `generate-new-buffer' + +This function takes a string as an argument NAME and looks for a +creates and returns a buffer called NAME if one did not already exist. +Otherwise, it successively tries appending suffixes of the form "<1>", +"<2>" etc to NAME until it creates a string which does not name an +existing buffer. A new buffer with that name is the created and returned. + +* New function `prin1-to-string' +This function takes one argument, a lisp object, and returns a string +containing that object's printed representation, such as `prin1' +would output. + +* New function `read-from-minibuffer' +Lets you supply a prompt, initial-contents, a keymap, and specify +whether the result should be interpreted as a string or a lisp object. + +Old functions `read-minibuffer', `eval-minibuffer', `read-string' all +take second optional string argument which is initial contents of +minibuffer. + +* minibuffer variable names changed (names of keymaps) + +minibuf-local-map -> minibuffer-local-map +minibuf-local-ns-map -> minibuffer-local-ns-map +minibuf-local-completion-map -> minibuffer-local-completion-map +minibuf-local-must-match-map -> minibuffer-local-must-match-map + +Changes in version 16 affecting configuring and building Emacs + +* Configuration switch VT100_INVERSE eliminated. + +You can control the use of inverse video on any terminal by setting +the variable `inverse-video', or by changing the termcap entry. If +you like, set `inverse-video' in your `.emacs' file based on +examination of (getenv "TERM"). + +* New switch `-batch' makes Emacs run noninteractively. + +If the switch `-batch' is used, Emacs treats its standard output +and input like ordinary files (even if they are a terminal). +It does not display buffers or windows; the only output to standard output +is what would appear as messages in the echo area, and each +message is followed by a newline. + +The terminal modes are not changed, so that C-z and C-c retain +their normal Unix meanings. Emacs does still read commands from +the terminal, but the idea of `-batch' is that you use it with +other command line arguments that tell Emacs a complete task to perform, +including killing itself. `-kill' used as the last argument is a good +way to accomplish this. + +The Lisp variable `noninteractive' is now defined, to be `nil' +except when `-batch' has been specified. + +* Emacs can be built with output redirected to a file. + +This is because -batch (see above) is now used in building Emacs. + + + +Changes in Emacs 15 + +* Emacs now runs on Sun and Megatest 68000 systems; + also on at least one 16000 system running 4.2. + +* Emacs now alters the output-start and output-stop characters + to prevent C-s and C-q from being considered as flow control + by cretinous rlogin software in 4.2. + +* It is now possible convert Mocklisp code (for Gosling Emacs) to Lisp code + that can run in GNU Emacs. M-x convert-mocklisp-buffer + converts the contents of the current buffer from Mocklisp to + GNU Emacs Lisp. You should then save the converted buffer with C-x C-w + under a name ending in ".el" + + There are probably some Mocklisp constructs that are not handled. + If you encounter one, feel free to report the failure as a bug. + The construct will be handled in a future Emacs release, if that is not + not too hard to do. + + Note that lisp code converted from Mocklisp code will not necessarily + run as fast as code specifically written for GNU Emacs, nor will it use + the many features of GNU Emacs which are not present in Gosling's emacs. + (In particular, the byte-compiler (m-x byte-compile-file) knows little + about compilation of code directly converted from mocklisp.) + It is envisaged that old mocklisp code will be incrementally converted + to GNU lisp code, with M-x convert-mocklisp-buffer being the first + step in this process. + +* Control-x n (narrow-to-region) is now by default a disabled command. + + This means that, if you issue this command, it will ask whether + you really mean it. You have the opportunity to enable the + command permanently at that time, so you will not be asked again. + This will place the form "(put 'narrow-to-region 'disabled nil)" in your + .emacs file. + +* Tags now prompts for the tag table file name to use. + + All the tags commands ask for the tag table file name + if you have not yet specified one. + + Also, the command M-x visit-tag-table can now be used to + specify the tag table file name initially, or to switch + to a new tag table. + +* If truncate-partial-width-windows is non-nil (as it intially is), + all windows less than the full screen width (that is, + made by side-by-side splitting) truncate lines rather than continuing + them. + +* Emacs now checks for Lisp stack overflow to avoid fatal errors. + The depth in eval, apply and funcall may not exceed max-lisp-eval-depth. + The depth in variable bindings and unwind-protects may not exceed + max-specpdl-size. If either limit is exceeded, an error occurs. + You can set the limits to larger values if you wish, but if you make them + too large, you are vulnerable to a fatal error if you invoke + Lisp code that does infinite recursion. + +* New hooks find-file-hook and write-file-hook. + Both of these variables if non-nil should be functions of no arguments. + At the time they are called (current-buffer) will be the buffer being + read or written respectively. + + find-file-hook is called whenever a file is read into its own buffer, + such as by calling find-file, revert-buffer, etc. It is not called by + functions such as insert-file which do not read the file into a buffer of + its own. + find-file-hook is called after the file has been read in and its + local variables (if any) have been processed. + + write-file-hook is called just before writing out a file from a buffer. + +* The initial value of shell-prompt-pattern is now "^[^#$%>]*[#$%>] *" + +* If the .emacs file sets inhibit-startup-message to non-nil, + the messages normally printed by Emacs at startup time + are inhibited. + +* Facility for run-time conditionalization on the basis of emacs features. + + The new variable features is a list of symbols which represent "features" + of the executing emacs, for use in run-time conditionalization. + + The function featurep of one argument may be used to test for the + presence of a feature. It is just the same as + (not (null (memq FEATURE features))) where FEATURE is its argument. + For example, (if (featurep 'magic-window-hack) + (transmogrify-window 'vertical) + (split-window-vertically)) + + The function provide of one argument "announces" that FEATURE is present. + It is much the same as (if (not (featurep FEATURE)) + (setq features (cons FEATURE features))) + + The function require with arguments FEATURE and FILE-NAME loads FILE-NAME + (which should contain the form (provide FEATURE)) unless FEATURE is present. + It is much the same as (if (not (featurep FEATURE)) + (progn (load FILE-NAME) + (if (not featurep FEATURE) (error ...)))) + FILE-NAME is optional and defaults to FEATURE. + +* New function load-average. + + This returns a list of three integers, which are + the current 1 minute, 5 minute and 15 minute load averages, + each multiplied by a hundred (since normally they are floating + point numbers). + +* Per-terminal libraries loaded automatically. + + Emacs when starting up on terminal type T automatically loads + a library named term-T. T is the value of the TERM environment variable. + Thus, on terminal type vt100, Emacs would do (load "term-vt100" t t). + Such libraries are good places to set the character translation table. + + It is a bad idea to redefine lots of commands in a per-terminal library, + since this affects all users. Instead, define a command to do the + redefinitions and let the user's init file, which is loaded later, + call that command or not, as the user prefers. + +* Programmer's note: detecting killed buffers. + + Buffers are eliminated by explicitly killing them, using + the function kill-buffer. This does not eliminate or affect + the pointers to the buffer which may exist in list structure. + If you have a pointer to a buffer and wish to tell whether + the buffer has been killed, use the function buffer-name. + It returns nil on a killed buffer, and a string on a live buffer. + +* New ways to access the last command input character. + + The function last-key-struck, which used to return the last + input character that was read by command input, is eliminated. + Instead, you can find this information as the value of the + variable last-command-char. (This variable used to be called + last-key). + + Another new variable, last-input-char, holds the last character + read from the command input stream regardless of what it was + read for. last-input-char and last-command-char are different + only inside a command that has called read-char to read input. + +* The new switch -kill causes Emacs to exit after processing the + preceding command line arguments. Thus, + emacs -l lib data -e do-it -kill + means to load lib, find file data, call do-it on no arguments, + and then exit. + +* The config.h file has been modularized. + + Options that depend on the machine you are running on are defined + in a file whose name starts with "m-", such as m-vax.h. + Options that depend on the operating system software version you are + running on are defined in a file whose name starts with "s-", + such as s-bsd4.2.h. + + config.h includes one m- file and one s- file. It also defines a + few other options whose values do not follow from the machine type + and system type being used. Installers normally will have to + select the correct m- and s- files but will never have to change their + contents. + +* Termcap AL and DL strings are understood. + + If the termcap entry defines AL and DL strings, for insertion + and deletion of multiple lines in one blow, Emacs now uses them. + This matters most on certain bit map display terminals for which + scrolling is comparatively slow. + +* Bias against scrolling screen far on fast terminals. + + Emacs now prefers to redraw a few lines rather than + shift them a long distance on the screen, when the terminal is fast. + +* New major mode, mim-mode. + + This major mode is for editing MDL code. Perhaps a MDL + user can explain why it is not called mdl-mode. + You must load the library mim-mode explicitly to use this. + +* GNU documentation formatter `texinfo'. + + The `texinfo' library defines a format for documentation + files which can be passed through Tex to make a printed manual + or passed through texinfo to make an Info file. Texinfo is + documented fully by its own Info file; compare this file + with its source, texinfo.texinfo, for additional guidance. + + All documentation files for GNU utilities should be written + in texinfo input format. + + Tex processing of texinfo files requires the Botex macro package. + This is not ready for distribution yet, but will appear at + a later time. + +* New function read-from-string (emacs 15.29) + + read-from-string takes three arguments: a string to read from, + and optionally start and end indices which delimit a substring + from which to read. (They default to 0 and the length of the string, + respectively.) + + This function returns a cons cell whose car is the object produced + by reading from the string and whose cdr is a number giving the + index in the string of the first character not read. That index may + be passed as the second argument to a later call to read-from-string + to read the next form represented by the string. + + In addition, the function read now accepts a string as its argument. + In this case, it calls read-from-string on the whole string, and + returns the car of the result. (ie the actual object read.) + + + +Changes in Emacs 14 + +* Completion now prints various messages such as [Sole Completion] + or [Next Character Not Unique] to describe the results obtained. + These messages appear after the text in the minibuffer, and remain + on the screen until a few seconds go by or you type a key. + +* The buffer-read-only flag is implemented. + Setting or binding this per-buffer variable to a non-nil value + makes illegal any operation which would modify the textual content of + the buffer. (Such operations signal a buffer-read-only error) + The read-only state of a buffer may be altered using toggle-read-only + (C-x C-q) + The buffers used by Rmail, Dired, Rnews, and Info are now read-only + by default to prevent accidental damage to the information in those + buffers. + +* Functions car-safe and cdr-safe. + These functions are like car and cdr when the argument is a cons. + Given an argument not a cons, car-safe always returns nil, with + no error; the same for cdr-safe. + +* The new function user-real-login-name returns the name corresponding + to the real uid of the Emacs process. This is usually the same + as what user-login-name returns; however, when Emacs is invoked + from su, user-real-login-name returns "root" but user-login-name + returns the name of the user who invoked su. + + + +Changes in Emacs 13 + +* There is a new version numbering scheme. + + What used to be the first version number, which was 1, + has been discarded since it does not seem that I need three + levels of version number. + + However, a new third version number has been added to represent + changes by user sites. This number will always be zero in + Emacs when I distribute it; it will be incremented each time + Emacs is built at another site. + +* There is now a reader syntax for Meta characters: + \M-CHAR means CHAR or'ed with the Meta bit. For example: + + ?\M-x is (+ ?x 128) + ?\M-\n is (+ ?\n 128) + ?\M-\^f is (+ ?\^f 128) + + This syntax can be used in strings too. Note, however, that + Meta characters are not meaningful in key sequences being passed + to define-key or lookup-key; you must use ESC characters (\e) + in them instead. + + ?\C- can be used likewise for control characters. (13.9) + +* Installation change + The string "../lisp" now adds to the front of the load-path + used for searching for Lisp files during Emacs initialization. + It used to replace the path specified in paths.h entirely. + Now the directory ../lisp is searched first and the directoris + specified in paths.h are searched afterward. + + + +Changes in Emacs 1.12 + +* There is a new installation procedure. + See the file INSTALL that comes in the top level + directory in the tar file or tape. + +* The Meta key is now supported on terminals that have it. + This is a shift key which causes the high bit to be turned on + in all input characters typed while it is held down. + + read-char now returns a value in the range 128-255 if + a Meta character is typed. When interpreted as command + input, a Meta character is equivalent to a two character + sequence, the meta prefix character followed by the un-metized + character (Meta-G unmetized is G). + + The meta prefix character + is specified by the value of the variable meta-prefix-char. + If this character (normally Escape) has been redefined locally + with a non-prefix definition (such as happens in completing + minibuffers) then the local redefinition is suppressed when + the character is not the last one in a key sequence. + So the local redefinition is effective if you type the character + explicitly, but not effective if the character comes from + the use of the Meta key. + +* `-' is no longer a completion command in the minibuffer. + It is an ordinary self-inserting character. + +* The list load-path of directories load to search for Lisp files + is now controlled by the EMACSLOADPATH environment variable +[[ Note this was originally EMACS-LOAD-PATH and has been changed + again; sh does not deal properly with hyphens in env variable names]] + rather than the EPATH environment variable. This is to avoid + conflicts with other Emacses. + + While Emacs is being built initially, the load-path + is now just ("../lisp"), ignoring paths.h. It does not + ignore EMACSLOADPATH, however; you should avoid having + this variable set while building Emacs. + +* You can now specify a translation table for keyboard + input characters, as a way of exchanging or substituting + keys on the keyboard. + + If the value of keyboard-translate-table is a string, + every character received from the keyboard is used as an + index in that string, and the character at that index in + the string is used as input instead of what was actually + typed. If the actual input character is >= the length of + the string, it is used unchanged. + + One way this feature can be used is to fix bad keyboard + designes. For example, on some terminals, Delete is + Shift-Underscore. Since Delete is a more useful character + than Underscore, it is an improvement to make the unshifted + character Delete and the shifted one Underscore. This can + be done with + + ;; First make a translate table that does the identity translation. + (setq keyboard-translate-table (make-string 128 0)) + (let ((i 0)) + (while (< i 128) + (aset keyboard-translate-table i i) + (setq i (1+ i)))) + + ;; Now alter translations of some characters. + (aset keyboard-translate-table ?\_ ?\^?) + (aset keyboard-translate-table ?\^? ?\_) + + If your terminal has a Meta key and can therefore send + codes up to 255, Meta characters are translated through + elements 128 through 255 of the translate table, and therefore + are translated independently of the corresponding non-Meta + characters. You must therefore establish translations + independently for the Meta characters if you want them too: + + ;; First make a translate table that does the identity translation. + (setq keyboard-translate-table (make-string 256 0)) + (let ((i 0)) + (while (< i 256) + (aset keyboard-translate-table i i) + (setq i (1+ i)))) + + ;; Now alter translations of some characters. + (aset keyboard-translate-table ?\_ ?\^?) + (aset keyboard-translate-table ?\^? ?\_) + + ;; Now alter translations of some Meta characters. + (aset keyboard-translate-table (+ 128 ?\_) (+ 128 ?\^?)) + (aset keyboard-translate-table (+ 128 ?\^?) (+ 128 ?\_)) + +* (process-kill-without-query PROCESS) + +This marks the process so that, when you kill Emacs, +you will not on its account be queried about active subprocesses. + + + +Changes in Emacs 1.11 + +* The commands C-c and C-z have been interchanged, + for greater compatibility with normal Unix usage. + C-z now runs suspend-emacs and C-c runs exit-recursive-edit. + +* The value returned by file-name-directory now ends + with a slash. (file-name-directory "foo/bar") => "foo/". + This avoids confusing results when dealing with files + in the root directory. + + The value of the per-buffer variable default-directory + is also supposed to have a final slash now. + +* There are now variables to control the switches passed to + `ls' by the C-x C-d command (list-directory). + list-directory-brief-switches is a string, initially "-CF", + used for brief listings, and list-directory-verbose-switches + is a string, initially "-l", used for verbose ones. + +* For Ann Arbor Ambassador terminals, the termcap "ti" string + is now used to initialize the screen geometry on entry to Emacs, + and the "te" string is used to set it back on exit. + If the termcap entry does not define the "ti" or "te" string, + Emacs does what it used to do. + + + +Changes in Emacs 1.10 + +* GNU Emacs has been made almost 1/3 smaller. + It now dumps out as only 530kbytes on Vax 4.2bsd. + +* The term "checkpoint" has been replaced by "auto save" + throughout the function names, variable names and documentation + of GNU Emacs. + +* The function load now tries appending ".elc" and ".el" + to the specified filename BEFORE it tries the filename + without change. + +* rmail now makes the mode line display the total number + of messages and the current message number. + The "f" command now means forward a message to another user. + The command to search through all messages for a string is now "F". + The "u" command now means to move back to the previous + message and undelete it. To undelete the selected message, use Meta-u. + +* The hyphen character is now equivalent to a Space while + in completing minibuffers. Both mean to complete an additional word. + +* The Lisp function error now takes args like format + which are used to construct the error message. + +* Redisplay will refuse to start its display at the end of the buffer. + It will pick a new place to display from, rather than use that. + +* The value returned by garbage-collect has been changed. + Its first element is no longer a number but a cons, + whose car is the number of cons cells now in use, + and whose cdr is the number of cons cells that have been + made but are now free. + The second element is similar but describes symbols rather than cons cells. + The third element is similar but describes markers. + +* The variable buffer-name has been eliminated. + The function buffer-name still exists. This is to prevent + user programs from changing buffer names without going + through the rename-buffer function. + + + +Changes in Emacs 1.9 + +* When a fill prefix is in effect, paragraphs are started + or separated by lines that do not start with the fill prefix. + Also, a line which consists of the fill prefix followed by + white space separates paragraphs. + +* C-x C-v runs the new function find-alternate-file. + It finds the specified file, switches to that buffer, + and kills the previous current buffer. (It requires + confirmation if that buffer had changes.) This is + most useful after you find the wrong file due to a typo. + +* Exiting the minibuffer moves the cursor to column 0, + to show you that it has really been exited. + +* Meta-g (fill-region) now fills each paragraph in the + region individually. To fill the region as if it were + a single paragraph (for when the paragraph-delimiting mechanism + does the wrong thing), use fill-region-as-paragraph. + +* Tab in text mode now runs the function tab-to-tab-stop. + A new mode called indented-text-mode is like text-mode + except that in it Tab runs the function indent-relative, + which indents the line under the previous line. + If auto fill is enabled while in indented-text-mode, + the new lines that it makes are indented. + +* Functions kill-rectangle and yank-rectangle. + kill-rectangle deletes the rectangle specified by dot and mark + (or by two arguments) and saves it in the variable killed-rectangle. + yank-rectangle inserts the rectangle in that variable. + + Tab characters in a rectangle being saved are replaced + by spaces in such a way that their appearance will + not be changed if the rectangle is later reinserted + at a different column position. + +* `+' in a regular expression now means + to repeat the previous expression one or more times. + `?' means to repeat it zero or one time. + They are in all regards like `*' except for the + number of repetitions they match. + + \< in a regular expression now matches the null string + when it is at the beginning of a word; \> matches + the null string at the end of a word. + +* C-x p narrows the buffer so that only the current page + is visible. + +* C-x ) with argument repeats the kbd macro just + defined that many times, counting the definition + as one repetition. + +* C-x ( with argument begins defining a kbd macro + starting with the last one defined. It executes that + previous kbd macro initially, just as if you began + by typing it over again. + +* C-x q command queries the user during kbd macro execution. + With prefix argument, enters recursive edit, + reading keyboard commands even within a kbd macro. + You can give different commands each time the macro executes. + Without prefix argument, reads a character. Your options are: + Space -- execute the rest of the macro. + Delete -- skip the rest of the macro; start next repetition. + C-d -- skip rest of the macro and don't repeat it any more. + C-r -- enter a recursive edit, then on exit ask again for a character + C-l -- redisplay screen and ask again." + +* write-kbd-macro and append-kbd-macro are used to save + a kbd macro definition in a file (as Lisp code to + redefine the macro when the file is loaded). + These commands differ in that write-kbd-macro + discards the previous contents of the file. + If given a prefix argument, both commands + record the keys which invoke the macro as well as the + macro's definition. + +* The variable global-minor-modes is used to display + strings in the mode line of all buffers. It should be + a list of elements thaht are conses whose cdrs are strings + to be displayed. This complements the variable + minor-modes, which has the same effect but has a separate + value in each buffer. + +* C-x = describes horizontal scrolling in effect, if any. + +* Return now auto-fills the line it is ending, in auto fill mode. + Space with zero as argument auto-fills the line before it + just like Space without an argument. + + + +Changes in Emacs 1.8 + +This release mostly fixes bugs. There are a few new features: + +* apropos now sorts the symbols before displaying them. + Also, it returns a list of the symbols found. + + apropos now accepts a second arg PRED which should be a function + of one argument; if PRED is non-nil, each symbol is tested + with PRED and only symbols for which PRED returns non-nil + appear in the output or the returned list. + + If the third argument to apropos is non-nil, apropos does not + display anything; it merely returns the list of symbols found. + + C-h a now runs the new function command-apropos rather than + apropos, and shows only symbols with definitions as commands. + +* M-x shell sends the command + if (-f ~/.emacs_NAME)source ~/.emacs_NAME + invisibly to the shell when it starts. Here NAME + is replaced by the name of shell used, + as it came from your ESHELL or SHELL environment variable + but with directory name, if any, removed. + +* M-, now runs the command tags-loop-continue, which is used + to resume a terminated tags-search or tags-query-replace. + + + +Changes in Emacs 1.7 + +It's Beat CCA Week. + +* The initial buffer is now called "*scratch*" instead of "scratch", + so that all buffer names used automatically by Emacs now have *'s. + +* Undo information is now stored separately for each buffer. + The Undo command (C-x u) always applies to the current + buffer only. + + C-_ is now a synonym for C-x u. + + (buffer-flush-undo BUFFER) causes undo information not to + be kept for BUFFER, and frees the space that would have + been used to hold it. In any case, no undo information is + kept for buffers whose names start with spaces. (These + buffers also do not appear in the C-x C-b display.) + +* Rectangle operations are now implemented. + C-x r stores the rectangle described by dot and mark + into a register; it reads the register name from the keyboard. + C-x g, the command to insert the contents of a register, + can be used to reinsert the rectangle elsewhere. + + Other rectangle commands include + open-rectangle: + insert a blank rectangle in the position and size + described by dot and mark, at its corners; + the existing text is pushed to the right. + clear-rectangle: + replace the rectangle described by dot ane mark + with blanks. The previous text is deleted. + delete-rectangle: + delete the text of the specified rectangle, + moving the text beyond it on each line leftward. + +* Side-by-side windows are allowed. Use C-x 5 to split the + current window into two windows side by side. + C-x } makes the selected window ARG columns wider at the + expense of the windows at its sides. C-x { makes the selected + window ARG columns narrower. An argument to C-x 5 specifies + how many columns to give to the leftmost of the two windows made. + + C-x 2 now accepts a numeric argument to specify the number of + lines to give to the uppermost of the two windows it makes. + +* Horizontal scrolling of the lines in a window is now implemented. + C-x < (scroll-left) scrolls all displayed lines left, + with the numeric argument (default 1) saying how far to scroll. + When the window is scrolled left, some amount of the beginning + of each nonempty line is replaced by an "$". + C-x > scrolls right. If a window has no text hidden at the left + margin, it cannot be scrolled any farther right than that. + When nonzero leftwards scrolling is in effect in a window. + lines are automatically truncated at the window's right margin + regardless of the value of the variable truncate-lines in the + buffer being displayed. + +* C-x C-d now uses the default output format of `ls', + which gives just file names in multiple columns. + C-u C-x C-d passes the -l switch to `ls'. + +* C-t at the end of a line now exchanges the two preceding characters. + + All the transpose commands now interpret zero as an argument + to mean to transpose the textual unit after or around dot + with the one after or around the mark. + +* M-! executes a shell command in an inferior shell + and displays the output from it. With a prefix argument, + it inserts the output in the current buffer after dot + and sets the mark after the output. The shell command + gets /dev/null as its standard input. + + M-| is like M-! but passes the contents of the region + as input to the shell command. A prefix argument makes + the output from the command replace the contents of the region. + +* The mode line will now say "Def" after the major mode + while a keyboard macro is being defined. + +* The variable fill-prefix is now used by Meta-q. + Meta-q removes the fill prefix from lines that start with it + before filling, and inserts the fill prefix on each line + after filling. + + The command C-x . sets the fill prefix equal to the text + on the current line before dot. + +* The new command Meta-j (indent-new-comment-line), + is like Linefeed (indent-new-line) except when dot is inside a comment; + in that case, Meta-j inserts a comment starter on the new line, + indented under the comment starter above. It also inserts + a comment terminator at the end of the line above, + if the language being edited calls for one. + +* Rmail should work correctly now, and has some C-h m documentation. + + + +Changes in Emacs 1.6 + +* save-buffers-kill-emacs is now on C-x C-c + while C-x C-z does suspend-emacs. This is to make + C-x C-c like the normal Unix meaning of C-c + and C-x C-z linke the normal Unix meaning of C-z. + +* M-ESC (eval-expression) is now a disabled command by default. + This prevents users who type ESC ESC accidentally from + getting confusing results. Put + (put 'eval-expression 'disabled nil) + in your ~/.emacs file to enable the command. + +* Self-inserting text is grouped into bunches for undoing. + Each C-x u command undoes up to 20 consecutive self-inserting + characters. + +* Help f now uses as a default the function being called + in the innermost Lisp expression that dot is in. + This makes it more convenient to use while writing + Lisp code to run in Emacs. + (If the text around dot does not appear to be a call + to a Lisp function, there is no default.) + + Likewise, Help v uses the symbol around or before dot + as a default, if that is a variable name. + +* Commands that read filenames now insert the default + directory in the minibuffer, to become part of your input. + This allows you to see what the default is. + You may type a filename which goes at the end of the + default directory, or you may edit the default directory + as you like to create the input you want to give. + You may also type an absolute pathname (starting with /) + or refer to a home directory (input starting with ~) + after the default; the presence of // or /~ causes + everything up through the slash that precedes your + type-in to be ignored. + + Returning the default directory without change, + including the terminating slash, requests the use + of the default file name (usually the visited file's name). + + Set the variable insert-default-directory to nil + to turn off this feature. + +* M-x shell now uses the environment variable ESHELL, + if it exists, as the file name of the shell to run. + If there is no ESHELL variable, the SHELL variable is used. + This is because some shells do not work properly as inferiors + of Emacs (or anything like Emacs). + +* A new variable minor-modes now exists, with a separate value + in each buffer. Its value should be an alist of elements + (MODE-FUNCTION-SYMBOL . PRETTY-NAME-STRING), one for each + minor mode that is turned on in the buffer. The pretty + name strings are displayed in the mode line after the name of the + major mode (with spaces between them). The mode function + symbols should be symbols whose function definitions will + turn on the minor mode if given 1 as an argument; they are present + so that Help m can find their documentation strings. + +* The format of tag table files has been changed. + The new format enables Emacs to find tags much faster. + + A new program, etags, exists to make the kind of + tag table that Emacs wants. etags is invoked just + like ctags; in fact, if you give it any switches, + it does exactly what ctags would do. Give it the + empty switch ("-") to make it act like ctags with no switches. + + etags names the tag table file "TAGS" rather than "tags", + so that these tag tables and the standard Unix ones + can coexist. + + The tags library can no longer use standard ctags-style + tag tables files. + +* The file of Lisp code Emacs reads on startup is now + called ~/.emacs rather than ~/.emacs_pro. + +* copy-file now gives the copied file the same mode bits + as the original file. + +* Output from a process inserted into the process's buffer + no longer sets the buffer's mark. Instead it sets a + marker associated with the process to point to the end + of the inserted text. You can access this marker with + (process-mark PROCESS) + and then either examine its position with marker-position + or set its position with set-marker. + +* completing-read takes a new optional fifth argument which, + if non-nil, should be a string of text to insert into + the minibuffer before reading user commands. + +* The Lisp function elt now exists: + (elt ARRAY N) is like (aref ARRAY N), + (elt LIST N) is like (nth N LIST). + +* rplaca is now a synonym for setcar, and rplacd for setcdr. + eql is now a synonym for eq; it turns out that the Common Lisp + distinction between eq and eql is insignificant in Emacs. + numberp is a new synonym for integerp. + +* auto-save has been renamed to auto-save-mode. + +* Auto save file names for buffers are now created by the + function make-auto-save-file-name. This is so you can + redefine that function to change the way auto save file names + are chosen. + +* expand-file-name no longer discards a final slash. + (expand-file-name "foo" "/lose") => "/lose/foo" + (expand-file-name "foo/" "/lose") => "/lose/foo/" + + Also, expand-file-name no longer substitutes $ constructs. + A new function substitute-in-file-name does this. Reading + a file name with read-file-name or the `f' or`F' option + of interactive calling uses substitute-in-file-name + on the file name that was read and returns the result. + + All I/O primitives including insert-file-contents and + delete-file call expand-file-name on the file name supplied. + This change makes them considerably faster in the usual case. + +* Interactive calling spec strings allow the new code letter 'D' + which means to read a directory name. It is like 'f' except + that the default if the user makes no change in the minibuffer + is to return the current default directory rather than the + current visited file name. + + + +Changes in Emacs 1.5 + +* suspend-emacs now accepts an optional argument + which is a string to be stuffed as terminal input + to be read by Emacs's superior shell after Emacs exits. + + A library called ledit exists which uses this feature + to transmit text to a Lisp job running as a sibling of + Emacs. + +* If find-file is given the name of a directory, + it automatically invokes dired on that directory + rather than reading in the binary data that make up + the actual contents of the directory according to Unix. + +* Saving an Emacs buffer now preserves the file modes + of any previously existing file with the same name. + This works using new Lisp functions file-modes and + set-file-modes, which can be used to read or set the mode + bits of any file. + +* The Lisp function cond now exists, with its traditional meaning. + +* defvar and defconst now permit the documentation string + to be omitted. defvar also permits the initial value + to be omitted; then it acts only as a comment. + + + +Changes in Emacs 1.4 + +* Auto-filling now normally indents the new line it creates + by calling indent-according-to-mode. This function, meanwhile, + has in Fundamental and Text modes the effect of making the line + have an indentation of the value of left-margin, a per-buffer variable. + + Tab no longer precisely does indent-according-to-mode; + it does that in all modes that supply their own indentation routine, + but in Fundamental, Text and allied modes it inserts a tab character. + +* The command M-x grep now invokes grep (on arguments + supplied by the user) and reads the output from grep + asynchronously into a buffer. The command C-x ` can + be used to move to the lines that grep has found. + This is an adaptation of the mechanism used for + running compilations and finding the loci of error messages. + + You can now use C-x ` even while grep or compilation + is proceeding; as more matches or error messages arrive, + C-x ` will parse them and be able to find them. + +* M-x mail now provides a command to send the message + and "exit"--that is, return to the previously selected + buffer. It is C-z C-z. + +* Tab in C mode now tries harder to adapt to all indentation styles. + If the line being indented is a statement that is not the first + one in the containing compound-statement, it is aligned under + the beginning of the first statement. + +* The functions screen-width and screen-height return the + total width and height of the screen as it is now being used. + set-screen-width and set-screen-height tell Emacs how big + to assume the screen is; they each take one argument, + an integer. + +* The Lisp function 'function' now exists. function is the + same as quote, except that it serves as a signal to the + Lisp compiler that the argument should be compiled as + a function. Example: + (mapcar (function (lambda (x) (+ x 5))) list) + +* The function set-key has been renamed to global-set-key. + undefine-key and local-undefine-key has been renamed to + global-unset-key and local-unset-key. + +* Emacs now collects input from asynchronous subprocesses + while waiting in the functions sleep-for and sit-for. + +* Shell mode's Newline command attempts to distinguish subshell + prompts from user input when issued in the middle of the buffer. + It no longer reexecutes from dot to the end of the line; + it reeexecutes the entire line minus any prompt. + The prompt is recognized by searching for the value of + shell-prompt-pattern, starting from the beginning of the line. + Anything thus skipped is not reexecuted. + + + +Changes in Emacs 1.3 + +* An undo facility exists now. Type C-x u to undo a batch of + changes (usually one command's changes, but some commands + such as query-replace divide their changes into multiple + batches. You can repeat C-x u to undo further. As long + as no commands other than C-x u intervene, each one undoes + another batch. A numeric argument to C-x u acts as a repeat + count. + + If you keep on undoing, eventually you may be told that + you have used up all the recorded undo information. + Some actions, such as reading in files, discard all + undo information. + + The undo information is not currently stored separately + for each buffer, so it is mainly good if you do something + totally spastic. [This has since been fixed.] + +* A learn-by-doing tutorial introduction to Emacs now exists. + Type C-h t to enter it. + +* An Info documentation browser exists. Do M-x info to enter it. + It contains a tutorial introduction so that no more documentation + is needed here. As of now, the only documentation in it + is that of Info itself. + +* Help k and Help c are now different. Help c prints just the + name of the function which the specified key invokes. Help k + prints the documentation of the function as well. + +* A document of the differences between GNU Emacs and Twenex Emacs + now exists. It is called DIFF, in the same directory as this file. + +* C mode can now indent comments better, including multi-line ones. + Meta-Control-q now reindents comment lines within the expression + being aligned. + +* Insertion of a close-parenthesis now shows the matching open-parenthesis + even if it is off screen, by printing the text following it on its line + in the minibuffer. + +* A file can now contain a list of local variable values + to be in effect when the file is edited. See the file DIFF + in the same directory as this file for full details. + +* A function nth is defined. It means the same thing as in Common Lisp. + +* The function install-command has been renamed to set-key. + It now takes the key sequence as the first argument + and the definition for it as the second argument. + Likewise, local-install-command has been renamed to local-set-key. + + + +Changes in Emacs 1.2 + +* A Lisp single-stepping and debugging facility exists. + To cause the debugger to be entered when an error + occurs, set the variable debug-on-error non-nil. + + To cause the debugger to be entered whenever function foo + is called, do (debug-on-entry 'foo). To cancel this, + do (cancel-debug-on-entry 'foo). debug-on-entry does + not work for primitives (written in C), only functions + written in Lisp. Most standard Emacs commands are in Lisp. + + When the debugger is entered, the selected window shows + a buffer called " *Backtrace" which displays a series + of stack frames, most recently entered first. For each + frame, the function name called is shown, usually followed + by the argument values unless arguments are still being + calculated. At the beginning of the buffer is a description + of why the debugger was entered: function entry, function exit, + error, or simply that the user called the function `debug'. + + To exit the debugger and return to top level, type `q'. + + In the debugger, you can evaluate Lisp expressions by + typing `e'. This is equivalent to `M-ESC'. + + When the debugger is entered due to an error, that is + all you can do. When it is entered due to function entry + (such as, requested by debug-on-entry), you have two + options: + Continue execution and reenter debugger after the + completion of the function being entered. Type `c'. + Continue execution but enter the debugger before + the next subexpression. Type `d'. + + You will see that some stack frames are marked with *. + This means the debugger will be entered when those + frames exit. You will see the value being returned + in the first line of the backtrace buffer. Your options: + Continue execution, and return that value. Type `c'. + Continue execution, and return a specified value. Type `r'. + + You can mark a frame to enter the debugger on exit + with the `b' command, or clear such a mark with `u'. + +* Lisp macros now exist. + For example, you can write + (defmacro cadr (arg) (list 'car (list 'cdr arg))) + and then the expression + (cadr foo) + will expand into + (car (cdr foo)) + + + +Changes in Emacs 1.1 + +* The initial buffer is now called "scratch" and is in a + new major mode, Lisp Interaction mode. This mode is + intended for typing Lisp expressions, evaluating them, + and having the values printed into the buffer. + + Type Linefeed after a Lisp expression, to evaluate the + expression and have its value printed into the buffer, + advancing dot. + + The other commands of Lisp mode are available. + +* The C-x C-e command for evaluating the Lisp expression + before dot has been changed to print the value in the + minibuffer line rather than insert it in the buffer. + A numeric argument causes the printed value to appear + in the buffer instead. + +* In Lisp mode, the command M-C-x evaluates the defun + containing or following dot. The value is printed in + the minibuffer. + +* The value of a Lisp expression evaluated using M-ESC + is now printed in the minibuffer. + +* M-q now runs fill-paragraph, independent of major mode. + +* C-h m now prints documentation on the current buffer's + major mode. What it prints is the documentation of the + major mode name as a function. All major modes have been + equipped with documentation that describes all commands + peculiar to the major mode, for this purpose. + +* You can display a Unix manual entry with + the M-x manual-entry command. + +* You can run a shell, displaying its output in a buffer, + with the M-x shell command. The Return key sends input + to the subshell. Output is printed inserted automatically + in the buffer. Commands C-c, C-d, C-u, C-w and C-z are redefined + for controlling the subshell and its subjobs. + "cd", "pushd" and "popd" commands are recognized as you + enter them, so that the default directory of the Emacs buffer + always remains the same as that of the subshell. + +* C-x $ (that's a real dollar sign) controls line-hiding based + on indentation. With a numeric arg N > 0, it causes all lines + indented by N or more columns to become invisible. + They are, effectively, tacked onto the preceding line, where + they are represented by " ..." on the screen. + (The end of the preceding visible line corresponds to a + screen cursor position before the "...". Anywhere in the + invisible lines that follow appears on the screen as a cursor + position after the "...".) + Currently, all editing commands treat invisible lines just + like visible ones, except for C-n and C-p, which have special + code to count visible lines only. + C-x $ with no argument turns off this mode, which in any case + is remembered separately for each buffer. + +* Outline mode is another form of selective display. + It is a major mode invoked with M-x outline-mode. + It is intended for editing files that are structured as + outlines, with heading lines (lines that begin with one + or more asterisks) and text lines (all other lines). + The number of asterisks in a heading line are its level; + the subheadings of a heading line are all following heading + lines at higher levels, until but not including the next + heading line at the same or a lower level, regardless + of intervening text lines. + + In outline mode, you have commands to hide (remove from display) + or show the text or subheadings under each heading line + independently. Hidden text or subheadings are invisibly + attached to the end of the preceding heading line, so that + if you kill the hading line and yank it back elsewhere + all the invisible lines accompany it. + + All editing commands treat hidden outline-mode lines + as part of the preceding visible line. + +* C-x C-z runs save-buffers-kill-emacs + offers to save each file buffer, then exits. + +* C-c's function is now called suspend-emacs. + +* The command C-x m runs mail, which switches to a buffer *mail* + and lets you compose a message to send. C-x 4 m runs mail in + another window. Type C-z C-s in the mail buffer to send the + message according to what you have entered in the buffer. + + You must separate the headers from the message text with + an empty line. + +* You can now dired partial directories (specified with names + containing *'s, etc, all processed by the shell). Also, you + can dired more than one directory; dired names the buffer + according to the filespec or directory name. Reinvoking + dired on a directory already direded just switches back to + the same directory used last time; do M-x revert if you want + to read in the current contents of the directory. + + C-x d runs dired, and C-x 4 d runs dired in another window. + + C-x C-d (list-directory) also allows partial directories now. + + +Lisp programming changes + +* t as an output stream now means "print to the minibuffer". + If there is already text in the minibuffer printed via t + as an output stream, the new text is appended to the old + (or is truncated and lost at the margin). If the minibuffer + contains text put there for some other reason, it is cleared + first. + + t is now the top-level value of standard-output. + + t as an input stream now means "read via the minibuffer". + The minibuffer is used to read a line of input, with editing, + and this line is then parsed. Any excess not used by `read' + is ignored; each `read' from t reads fresh input. + t is now the top-level value of standard-input. + +* A marker may be used as an input stream or an output stream. + The effect is to grab input from where the marker points, + advancing it over the characters read, or to insert output + at the marker and advance it. + +* Output from an asynchronous subprocess is now inserted at + the end of the associated buffer, not at the buffer's dot, + and the buffer's mark is set to the end of the inserted output + each time output is inserted. + +* (pos-visible-in-window-p POS WINDOW) + returns t if position POS in WINDOW's buffer is in the range + that is being displayed in WINDOW; nil if it is scrolled + vertically out of visibility. + + If display in WINDOW is not currently up to date, this function + calculates carefully whether POS would appear if display were + done immediately based on the current (window-start WINDOW). + + POS defaults to (dot), and WINDOW to (selected-window). + +* Variable buffer-alist replaced by function (buffer-list). + The actual alist of buffers used internally by Emacs is now + no longer accessible, to prevent the user from crashing Emacs + by modifying it. The function buffer-list returns a list + of all existing buffers. Modifying this list cannot hurt anything + as a new list is constructed by each call to buffer-list. + +* load now takes an optional third argument NOMSG which, if non-nil, + prevents load from printing a message when it starts and when + it is done. + +* byte-recompile-directory is a new function which finds all + the .elc files in a directory, and regenerates each one which + is older than the corresponding .el (Lisp source) file. + + + +---------------------------------------------------------------------- +Copyright information: + +Copyright (C) 1985, 1986, 2006 Richard M. Stallman + + Permission is granted to anyone to make or distribute verbatim copies + of this document as received, in any medium, provided that the + copyright notice and this permission notice are preserved, + thus giving the recipient permission to redistribute in turn. + + Permission is granted to distribute modified versions + of this document, or of portions of it, + under the above conditions, provided also that they + carry prominent notices stating who last changed them. + +Local variables: +mode: text +end: + +arch-tag: 33dc900d-9c58-473b-87c9-b6d7222323ea diff -r 86cedfd9ade6 -r 25fa0038a52d etc/NEWS.18 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/NEWS.18 Sun Jun 04 01:01:51 2006 +0000 @@ -0,0 +1,1620 @@ +GNU Emacs NEWS -- history of user-visible changes. 17-Aug-1988 +Copyright (C) 1988, 2006 Free Software Foundation, Inc. +See the end for copying conditions. + +This file is about changes in emacs version 18. + + + +Changes in version 18.52. + +* X windows version 10 is supported under system V. + +* Pop-up menus are now supported with the same Lisp interface in +both version 10 and 11 of X windows. + +* C-x 4 a is a new command to edit a change-log entry in another window. + +* The emacs client program now allows an option +NNN to specify the +line number to go to in the file whose name follows. Thus, + emacsclient foo.c +45 bar.c +will find the files `foo.c' and `bar.c', going to line 45 in `bar.c'. + +* Dired allows empty directories to be deleted like files. + +* When the terminal type is used to find a terminal-specific file to +run, Emacs now tries the entire terminal type first. If that doesn't +yield a file that exists, the last hyphen and what follows it is +stripped. If that doesn't yield a file that exists, the previous +hyphen is stripped, and so on until all hyphens are gone. For +example, if the terminal type is `aaa-48-foo', Emacs will try first +`term/aaa-48-foo.el', then `term/aaa-48.el' and finally `term/aaa.el'. + +Underscores now receive the same treatment as hyphens. + +* Texinfo features: @defun, etc. texinfo-show-structure. +New template commands. texinfo-format-region. + +* The special "local variable" `eval' is now ignored if you are running +as root. + +* New command `c-macro-expand' shows the result of C macro expansion +in the region. It works using the C preprocessor, so its results +are completely accurate. + +* Errors in trying to auto save now flash error messages for a few seconds. + +* Killing a buffer now sends SIGHUP to the buffer's process. + +* New hooks. + +** `spell-region' now allows you to filter the text before spelling-checking. +If the value of `spell-filter' is non-nil, it is called, with no arguments, +looking at a temporary buffer containing a copy of the text to be checked. +It can alter the text freely before the spell program sees it. + +** The variable `lpr-command' now specifies the command to be used when +you use the commands to print text (such as M-x print-buffer). + +** Posting netnews now calls the value of `news-inews-hook' (if not nil) +as a function of no arguments before the actual posting. + +** Rmail now calls the value of `rmail-show-message-hook' (if not nil) +as a function of no arguments, each time a new message is selected. + +** `kill-emacs' calls the value of `kill-emacs-hook' as a function of no args. + +* New libraries. +See the source code of each library for more information. + +** icon.el: a major mode for editing programs written in Icon. + +** life.el: a simulator for the cellular automaton "life". Load the +library and run M-x life. + +** doctex.el: a library for converting the Emacs `etc/DOC' file of +documentation strings into TeX input. + +** saveconf.el: a library which records the arrangement of windows and +buffers when you exit Emacs, and automatically recreates the same +setup the next time you start Emacs. + +** uncompress.el: a library that automatically uncompresses files +when you visit them. + +** c-fill.el: a mode for editing filled comments in C. + +** kermit.el: an extended version of shell-mode designed for running kermit. + +** spook.el: a library for adding some "distract the NSA" keywords to every +message you send. + +** hideif.el: a library for hiding parts of a C program based on preprocessor +conditionals. + +** autoinsert.el: a library to put in some initial text when you visit +a nonexistent file. The text used depends on the major mode, and +comes from a directory of files created by you. + +* New programming features. + +** The variable `window-system-version' now contains the version number +of the window system you are using (if appropriate). When using X windows, +its value is either 10 or 11. + +** (interactive "N") uses the prefix argument if any; otherwise, it reads +a number using the minibuffer. + +** VMS: there are two new functions `vms-system-info' and `shrink-to-icon'. +The former allows you to get many kinds of system status information. +See its self-documentation for full details. +The second is used with the window system: it iconifies the Emacs window. + +** VMS: the new function `define-logical-name' allows you to create +job-wide logical names. The old function `define-dcl-symbol' has been +removed. + + + +Changes in version 18.50. + +* X windows version 11 is supported. + +Define X11 in config.h if you want X version 11 instead of version 10. + +* The command M-x gdb runs the GDB debugger as an inferior. +It asks for the filename of the executable you want to debug. + +GDB runs as an inferior with I/O through an Emacs buffer. All the +facilities of Shell mode are available. In addition, each time your +program stops, and each time you select a new stack frame, the source +code is displayed in another window with an arrow added to the line +where the program is executing. + +Special GDB-mode commands include M-s, M-n, M-i, M-u, M-d, and C-c C-f +which send the GDB commands `step', `next', `stepi', `up', `down' +and `finish'. + +In any source file, the commands C-x SPC tells GDB to set a breakpoint +on the current line. + +* M-x calendar displays a three-month calendar. + +* C-u 0 C-x C-s never makes a backup file. + +This is a way you can explicitly request not to make a backup. + +* `term-setup-hook' is for users only. + +Emacs never uses this variable for internal purposes, so you can freely +set it in your `.emacs' file to make Emacs do something special after +loading any terminal-specific setup file from `lisp/term'. + +* `copy-keymap' now copies recursive submaps. + +* New overlay-arrow feature. + +If you set the variable `overlay-arrow-string' to a string +and `overlay-arrow-position' to a marker, that string is displayed on +the screen at the position of that marker, hiding whatever text would +have appeared there. If that position isn't on the screen, or if +the buffer the marker points into isn't displayed, there is no effect. + +* -batch mode can read from the terminal. + +It now works to use `read-char' to do terminal input in a noninteractive +Emacs run. End of file causes Emacs to exit. + +* Variables `data-bytes-used' and `data-bytes-free' removed. + +These variables cannot really work because the 24-bit range of an +integer in (most ports of) GNU Emacs is not large enough to hold their +values on many systems. + + + +Changes in version 18.45, since version 18.41. + +* C indentation parameter `c-continued-brace-offset'. + +This parameter's value is added to the indentation of any +line that is in a continuation context and starts with an open-brace. +For example, it applies to the open brace shown here: + + if (x) + { + +The default value is zero. + +* Dabbrev expansion (Meta-/) preserves case. + +When you use Meta-/ to search the buffer for an expansion of an +abbreviation, if the expansion found is all lower case except perhaps +for its first letter, then the case pattern of the abbreviation +is carried over to the expansion that replaces it. + +* TeX-mode syntax. + +\ is no longer given "escape character" syntax in TeX mode. It now +has the syntax of an ordinary punctuation character. As a result, +\[...\] and such like are considered to balance each other. + +* Mail-mode automatic Reply-to field. + +If the variable `mail-default-reply-to' is non-`nil', then each time +you start to compose a message, a Reply-to field is inserted with +its contents taken from the value of `mail-default-reply-to'. + +* Where is your .emacs file? + +If you run Emacs under `su', so your real and effective uids are +different, Emacs uses the home directory associated with the real uid +(the name you actually logged in under) to find the .emacs file. + +Otherwise, Emacs uses the environment variable HOME to find the .emacs +file. + +The .emacs file is not loaded at all if -batch is specified. + +* Prolog mode is the default for ".pl" files. + +* File names are not case-sensitive on VMS. + +On VMS systems, all file names that you specify are converted to upper +case. You can use either upper or lower case indiscriminately. + +* VMS-only function 'define-dcl-symbol'. + +This is a new name for the function formerly called +`define-logical-name'. + + + +Editing Changes in Emacs 18 + +* Additional systems and machines are supported. + +GNU Emacs now runs on Vax VMS. However, many facilities that are normally +implemented by running subprocesses do not work yet. This includes listing +a directory and sending mail. There are features for running subprocesses +but they are incompatible with those on Unix. I hope that some of +the VMS users can reimplement these features for VMS (compatibly for +the user, if possible). + +VMS wizards are also asked to work on making the subprocess facilities +more upward compatible with those on Unix, and also to rewrite their +internals to use the same Lisp objects that are used on Unix to +represent processes. + +In addition, the TI Nu machine running Unix system V, the AT&T 3b, and +the Wicat, Masscomp, Integrated Solutions, Alliant, Amdahl uts, Mips, +Altos 3068 and Gould Unix systems are now supported. The IBM PC-RT is +supported under 4.2, but not yet under system V. The GEC 93 is close +to working. The port for the Elxsi is partly merged. See the file +MACHINES for full status information and machine-specific installation +advice. + +* Searching is faster. + +Forward search for a text string, or for a regexp that is equivalent +to a text string, is now several times faster. Motion by lines and +counting lines is also faster. + +* Memory usage improvements. + +It is no longer possible to run out of memory during garbage +collection. As a result, running out of memory is never fatal. This +is due to a new garbage collection algorithm which compactifies +strings in place rather than copying them. Another consequence of the +change is a reduction in total memory usage and a slight increase in +garbage collection speed. + +* Display changes. + +** Editing above top of screen. + +When you delete or kill or alter text that reaches to the top of the +screen or above it, so that display would start in the middle of a +line, Emacs will usually attempt to scroll the text so that display +starts at the beginning of a line again. + +** Yanking in the minibuffer. + +The message "Mark Set" is no longer printed when the minibuffer is +active. This is convenient with many commands, including C-y, that +normally print such a message. + +** Cursor appears in last line during y-or-n questions. + +Questions that want a `y' or `n' answer now move the cursor +to the last line, following the question. + +* Library loading changes. + +`load' now considers all possible suffixes (`.elc', `.el' and none) +for each directory in `load-path' before going on to the next directory. +It now accepts an optional fourth argument which, if non-nil, says to +use no suffixes; then the file name must be given in full. The search +of the directories in `load-path' goes on as usual in this case, but +it too can be prevented by passing an absolute file name. + +The value of `load-path' no longer by default includes nil (meaning to +look in the current default directory). The idea is that `load' should +be used to search the path only for libraries to be found in the standard +places. If you want to override system libraries with your own, place +your own libraries in one special directory and add that directory to the +front of `load-path'. + +The function `load' is no longer a command; that is to say, `M-x load' +is no longer allowed. Instead, there are two commands for loading files. +`M-x load-library' is equivalent to the old meaning of `M-x load'. +`M-x load-file' reads a file name with completion and defaulting +and then loads exactly that file, with no searching and no suffixes. + +* Emulation of other editors. + +** `edt-emulation-on' starts emulating DEC's EDT editor. + +Do `edt-emulation-off' to return Emacs to normal. + +** `vi-mode' and `vip-mode' starts emulating vi. + +These are two different vi emulations provided by GNU Emacs users. +We are interested in feedback as to which emulation is preferable. + +See the documentation and source code for these functions +for more information. + +** `set-gosmacs-bindings' emulates Gosling Emacs. + +This command changes many global bindings to resemble those of +Gosling Emacs. The previous bindings are saved and can be restored using +`set-gnu-bindings'. + +* Emulation of a display terminal. + +Within Emacs it is now possible to run programs (such as emacs or +supdup) which expect to do output to a visual display terminal. + +See the function `terminal-emulator' for more information. + +* New support for keypads and function keys. + +There is now a first attempt at terminal-independent support for +keypad and function keys. + +Emacs now defines a standard set of key-names for function and keypad +keys, and provides standard hooks for defining them. Most of the +standard key-names have default definitions built into Emacs; you can +override these in a terminal-independent manner. The default definitions +and the conventions for redefining them are in the file `lisp/keypad.el'. + +These keys on the terminal normally work by sending sequences of +characters starting with ESC. The exact sequences used vary from +terminal to terminal. Emacs interprets them in two stages: +in the first stage, terminal-dependent sequences are mapped into +the standard key-names; then second stage maps the standard key-names +into their definitions in a terminal-independent fashion. + +The terminal-specific file `term/$TERM.el' now is responsible only for +establishing the mapping from the terminal's escape sequences into +standard key-names. It no longer knows what Emacs commands are +assigned to the standard key-names. + +One other change in terminal-specific files: if the value of the TERM +variable contains a hyphen, only the part before the first hyphen is +used in forming the name of the terminal-specific file. Thus, for +terminal type `aaa-48', the file loaded is now `term/aaa.el' rather +than `term/aaa-48.el'. + +* New startup command line options. + +`-i FILE' or `-insert FILE' in the command line to Emacs tells Emacs to +insert the contents of FILE into the current buffer at that point in +command line processing. This is like using the command M-x insert-file. + +`-funcall', `-load', `-user' and `-no-init-file' are new synonyms for +`-f', `-l', `-u' and `-q'. + +`-nw' means don't use a window system. If you are using a terminal +emulator on the X window system and you want to run Emacs to work through +the terminal emulator instead of working directly with the window system, +use this switch. + +* Buffer-sorting commands. + +Various M-x commands whose names start with `sort-' sort parts of +the region: + +sort-lines divides the region into lines and sorts them alphabetically. +sort-pages divides into pages and sorts them alphabetically. +sort-paragraphs divides into paragraphs and sorts them alphabetically. +sort-fields divides into lines and sorts them alphabetically + according to one field in the line. + The numeric argument specifies which field (counting + from field 1 at the beginning of the line). Fields in a line + are separated by whitespace. +sort-numeric-fields + is similar but converts the specified fields to numbers + and sorts them numerically. +sort-columns divides into lines and sorts them according to the contents + of a specified range of columns. + +Refer to the self-documentation of these commands for full usage information. + +* Changes in various commands. + +** `tags-query-replace' and `tags-search' change. + +These functions now display the name of the file being searched at the moment. + +** `occur' output now serves as a menu. `occur-menu' command deleted. + +`M-x occur' now allows you to move quickly to any of the occurrences +listed. Select the `*Occur*' buffer that contains the output of `occur', +move point to the occurrence you want, and type C-c C-c. +This will move point to the same occurrence in the buffer that the +occurrences were found in. + +The command `occur-menu' is thus obsolete, and has been deleted. + +One way to get a list of matching lines without line numbers is to +copy the text to another buffer and use the command `keep-lines'. + +** Incremental search changes. + +Ordinary and regexp incremental searches now have distinct default +search strings. Thus, regexp searches recall only previous regexp +searches. + +If you exit an incremental search when the search string is empty, +the old default search string is kept. The default does not become +empty. + +Reversing the direction of an incremental search with C-s or C-r +when the search string is empty now does not get the default search +string. It leaves the search string empty. A second C-s or C-r +will get the default search string. As a result, you can do a reverse +incremental regexp search with C-M-s C-r. + +If you add a `*', `?' or `\|' to an incremental search regexp, +point will back up if that is appropriate. For example, if +you have searched for `ab' and add a `*', point moves to the +first match for `ab*', which may be before the match for `ab' +that was previously found. + +If an incremental search is failing and you ask to repeat it, +it will start again from the beginning of the buffer (or the end, +if it is a backward search). + +The search-controlling parameters `isearch-slow-speed' and +`isearch-slow-window-lines' have now been renamed to start with +`search' instead of `isearch'. Now all the parameters' names start +with `search'. + +If `search-slow-window-lines' is negative, the slow search window +is put at the top of the screen, and the absolute value or the +negative number specifies the height of it. + +** Undo changes + +The undo command now will mark the buffer as unmodified only when it is +identical to the contents of the visited file. + +** C-M-v in minibuffer. + +If while in the minibuffer you request help in a way that uses a +window to display something, then until you exit the minibuffer C-M-v +in the minibuffer window scrolls the window of help. + +For example, if you request a list of possible completions, C-M-v can +be used reliably to scroll the completion list. + +** M-TAB command. + +Meta-TAB performs completion on the Emacs Lisp symbol names. The sexp +in the buffer before point is compared against all existing nontrivial +Lisp symbols and completed as far as is uniquely determined by them. +Nontrivial symbols are those with either function definitions, values +or properties. + +If there are multiple possibilities for the very next character, a +list of possible completions is displayed. + +** Dynamic abbreviation package. + +The new command Meta-/ expands an abbreviation in the buffer before point +by searching the buffer for words that start with the abbreviation. + +** Changes in saving kbd macros. + +The commands `write-kbd-macro' and `append-kbd-macro' have been +deleted. The way to save a keyboard macro is to use the new command +`insert-kbd-macro', which inserts Lisp code to define the macro as +it is currently defined into the buffer before point. Visit a Lisp +file such as your Emacs init file `~/.emacs', insert the macro +definition (perhaps deleting an old definition for the same macro) +and then save the file. + +** C-x ' command. + +The new command C-x ' (expand-abbrev) expands the word before point as +an abbrev, even if abbrev-mode is not turned on. + +** Sending to inferior Lisp. + +The command C-M-x in Lisp mode, which sends the current defun to +an inferior Lisp process, now works by writing the text into a temporary +file and actually sending only a `load'-form to load the file. +As a result, it avoids the Unix bugs that used to strike when the +text was above a certain length. + +With a prefix argument, this command now makes the inferior Lisp buffer +appear on the screen and scrolls it so that the bottom is showing. + +Two variables `inferior-lisp-load-command' and `inferior-lisp-prompt', +exist to customize these feature for different Lisp implementations. + +** C-x p now disabled. + +The command C-x p, a nonrecomended command which narrows to the current +page, is now initially disabled like C-x n. + +* Dealing with files. + +** C-x C-v generalized + +This command is now allowed even if the current buffer is not visiting +a file. As usual, it kills the current buffer and replaces it with a +newly found file. + +** M-x recover-file improved; auto save file names changed. + +M-x recover-file now checks whether the last auto-save file is more +recent than the real visited file before offering to read in the +auto-save file. If the auto-save file is newer, a directory listing +containing the two files is displayed while you are asked whether you +want the auto save file. + +Visiting a file also makes this check. If the auto-save file is more recent, +a message is printed suggesting that you consider using M-x recover file. + +Auto save file names now by default have a `#' at the end as well +as at the beginning. This is so that `*.c' in a shell command +will never match auto save files. + +On VMS, auto save file names are made by appending `_$' at the front +and `$' at the end. + +When you change the visited file name of a buffer, the auto save file +is now renamed to belong to the new visited file name. + +You can customize the way auto save file names are made by redefining +the two functions `make-auto-save-file-name' and `auto-save-file-name-p', +both of which are defined in `files.el'. + +** Modifying a buffer whose file is changed on disk is detected instantly. + +On systems where clash detection (locking of files being edited) is +implemented, Emacs also checks the first time you modify a buffer +whether the file has changed on disk since it was last visited or saved. +If it has, you are asked to confirm that you want to change the buffer. + +** Exiting Emacs offers to save `*mail*'. + +Emacs can now know about buffers that it should offer to save on exit +even though they are not visiting files. This is done for any buffer +which has a non-nil local value of `buffer-offer-save'. By default, +Mail mode provides such a local value. + +** Backup file changes. + +If a backup file cannot be written in the directory of the visited file +due to fascist file protection, a backup file is now written in your home +directory as `~/%backup%~'. Only one such file is made, ever, so only +the most recently made such backup is available. + +When backup files are made by copying, the last-modification time of the +original file is now preserved in the backup copy. + +** Visiting remote files. + +On an internet host, you can now visit and save files on any other +internet host directly from Emacs with the commands M-x ftp-find-file +and M-x ftp-write-file. Specify an argument of the form HOST:FILENAME. +Since standard internet FTP is used, the other host may be any kind +of machine and is not required to have any special facilities. + +The first time any one remote host is accessed, you will be asked to +give the user name and password for use on that host. FTP is reinvoked +each time you ask to use it, but previously specified user names and +passwords are remembered automatically. + +** Dired `g' command. + +`g' in Dired mode is equivalent to M-x revert-buffer; it causes the +current contents of the same directory to be read in. + +* Changes in major modes. + +** C mode indentation change. + +The binding of Linefeed is no longer changed by C mode. It once again +has its normal meaning, which is to insert a newline and then indent +afterward. + +The old definition did one additional thing: it reindented the line +before the new newline. This has been removed because it made the +command twice as slow. The only time it was really useful was after the +insertion of an `else', since the fact of starting with `else' may change +the way that line is indented. Now you will have to type TAB again +yourself to reindent the `else' properly. + +If the variable `c-tab-always-indent' is set to `nil', the TAB command +in C mode, with no argument, will just insert a tab character if there +is non-whitespace preceding point on the current line. Giving it a +prefix argument will force reindentation of the line (as well as +of the compound statement that begins after point, if any). + +** Fortran mode now exists. + +This mode provides commands for motion and indentation of Fortran code, +plus built-in abbrevs for Fortran keywords. For details, see the manual +or the on-line documentation of the command `fortran-mode'. + +** Scribe mode now exists. + +This mode does something useful for editing files of Scribe input. +It is used automatically for files with names ending in ".mss". + +** Modula2 and Prolog modes now exist. + +These modes are for editing programs in the languages of the same names. +They can be selected with M-x modula-2-mode and M-x prolog-mode. + +** Telnet mode changes. + +The telnet mode special commands have now been assigned to C-c keys. +Most of them are the same as in Shell mode. + +** Picture mode changes. + +The special picture-mode commands to specify the direction of cursor +motion after insertion have been moved to C-c keys. The commands to +specify diagonal motion were already C-c keys; they are unchanged. +The keys to specify horizontal or vertical motion are now +C-c < (left), C-c > (right), C-c ^ (up) and C-c . (down). + +** Nroff mode comments. + +Comments are now supported in Nroff mode. The standard comment commands +such as M-; and C-x ; know how to insert, align and delete comments +that start with backslash-doublequote. + +** LaTeX mode. + +LaTeX mode now exists. Use M-x latex-mode to select this mode, and +M-x plain-tex-mode to select the previously existing mode for Plain +TeX. M-x tex-mode attempts to examine the contents of the buffer and +choose between latex-mode and plain-tex-mode accordingly; if the +buffer is empty or it cannot tell, the variable `TeX-default-mode' +controls the choice. Its value should be the symbol for the mode to +be used. + +The facilities for running TeX on all or part of the buffer +work with LaTeX as well. + +Some new commands available in both modes: + +C-c C-l recenter the window showing the TeX output buffer + so most recent line of output can be seen. +C-c C-k kill the TeX subprocess. +C-c C-q show the printer queue. +C-c C-f close a block (appropriate for LaTeX only). + If the current line contains a \begin{...}, + this inserts an \end{...} on the following line + and puts point on a blank line between them. + +** Outline mode changes. + +Invisible lines in outline mode are now indicated by `...' at the +end of the previous visible line. + +The special outline heading motion commands are now all on C-c keys. +A few new ones have been added. Here is a full list: + +C-c C-n Move to next visible heading (formerly M-}) +C-c C-p Move to previous visible heading (formerly M-{) +C-c C-f Move to next visible heading at the same level. + Thus, if point is on a level-2 heading line, + this command moves to the next visible level-2 heading. +C-c C-b Move to previous visible heading at the same level. +C-c C-u Move up to previous visible heading at a higher level. + +The variable `outline-regexp' now controls recognition of heading lines. +Any line whose beginning matches this regexp is a heading line. +The depth in outline structure is determined by the length of +the string that matches. + +A line starting with a ^L (formfeed) is now by default considered +a header line. + +* Mail reading and sending. + +** MH-E changes. + +MH-E has been extensively modified and improved since the v17 release. +It contains many new features, including commands to: extracted failed +messages, kill a draft message, undo changes to a mail folder, monitor +delivery of a letter, print multiple messages, page digests backwards, +insert signatures, and burst digests. Also, many commands have been +made to able to deal with named sequences of messages, instead of +single messages. MH-E also has had numerous bugs fixed and commands +made to run faster. Furthermore, its keybindings have been changed to +be compatible with Rmail and the rest of GNU Emacs. + +** Mail mode changes. + +The C-c commands of mail mode have been rearranged: + +C-c s, C-c c, C-c t and C-c b (move point to various header fields) +have been reassigned as C-c C-f C-s, C-c C-f C-c, C-c C-f C-t and C-c +C-f C-b. C-c C-f is for "field". + +C-c y, C-c w and C-c q have been changed to C-c C-y, C-c C-w and C-c C-q. + +Thus, C-c LETTER is always unassigned. + +** Rmail C-r command changed to w. + +The Rmail command to edit the current message is now `w'. This change +has been made because people frequently type C-r while in Rmail hoping +to do a reverse incremental search. That now works. + +* Rnews changes. + +** Caesar rotation added. + +The function news-caesar-buffer-body performs encryption and +decryption of the body of a news message. It defaults to the USENET +standard of 13, and accepts any numeric arg between 1 to 25 and -25 to -1. +The function is bound to C-c C-r in both news-mode and news-reply-mode. + +** rmail-output command added. + +The C-o command has been bound to rmail-output in news-mode. +This allows one to append an article to a file which is in either Unix +mail or RMAIL format. + +** news-reply-mode changes. + +The C-c commands of news reply mode have been rearranged and changed, +so that C-c LETTER is always unassigned: + +C-c y, C-c w and C-c q have been changed to C-c C-y, C-c C-w and C-c C-q. + +C-c c, C-c t, and C-c b (move to various mail header fields) have been +deleted (they make no sense for posting and replying to USENET). + +C-c s (move to Subject: header field) has been reassigned as C-c C-f +C-s. C-c C-f is for "field". Several additional move to news header +field commands have been added. + +The local news-reply-mode bindings now look like this: + +C-c C-s news-inews (post the message) C-c C-c news-inews +C-c C-f move to a header field (and create it if there isn't): + C-c C-f C-n move to Newsgroups: C-c C-f C-s move to Subj: + C-c C-f C-f move to Followup-To: C-c C-f C-k move to Keywords: + C-c C-f C-d move to Distribution: C-c C-f C-a move to Summary: +C-c C-y news-reply-yank-original (insert current message, in NEWS). +C-c C-q mail-fill-yanked-message (fill what was yanked). +C-c C-r caesar rotate all letters by 13 places in the article's body (rot13). + +* Existing Emacs usable as a server. + +Programs such as mailers that invoke "the editor" as an inferior +to edit some text can now be told to use an existing Emacs process +instead of creating a new editor. + +To do this, you must have an Emacs process running and capable of +doing terminal I/O at the time you want to invoke it. This means that +either you are using a window system and give Emacs a separate window +or you run the other programs as inferiors of Emacs (such as, using +M-x shell). + +First prepare the existing Emacs process by loading the `server' +library and executing M-x server-start. (Your .emacs can do this +automatically.) + +Now tell the other programs to use, as "the editor", the Emacs client +program (etc/emacsclient, located in the same directory as this file). +This can be done by setting the environment variable EDITOR. + +When another program invokes the emacsclient as "the editor", the +client actually transfers the file names to be edited to the existing +Emacs, which automatically visits the files. + +When you are done editing a buffer for a client, do C-x # (server-edit). +This marks that buffer as done, and selects the next buffer that the client +asked for. When all the buffers requested by a client are marked in this +way, Emacs tells the client program to exit, so that the program that +invoked "the editor" will resume execution. + +You can only have one server Emacs at a time, but multiple client programs +can put in requests at the same time. + +The client/server work only on Berkeley Unix, since they use the Berkeley +sockets mechanism for their communication. + + +Changes in Lisp programming in Emacs version 18. + +* Init file changes. + +** Suffixes no longer accepted on `.emacs'. + +Emacs will no longer load a file named `.emacs.el' or `emacs.elc' +in place of `.emacs'. This is so that it will take less time to +find `.emacs'. If you want to compile your init file, give it another +name and make `.emacs' a link to the `.elc' file, or make it contain +a call to `load' to load the `.elc' file. + +** `default-profile' renamed to `default', and loaded after `.emacs'. + +It used to be the case that the file `default-profile' was loaded if +and only if `.emacs' was not found. + +Now the name `default-profile' is not used at all. Instead, a library +named `default' is loaded after the `.emacs' file. `default' is loaded +whether the `.emacs' file exists or not. However, loading of `default' +can be prevented if the `.emacs' file sets `inhibit-default-init' to non-nil. + +In fact, you would call the default file `default.el' and probably would +byte-compile it to speed execution. + +Note that for most purposes you are better off using a `site-init' library +since that will be loaded before the runnable Emacs is dumped. By using +a `site-init' library, you avoid taking up time each time Emacs is started. + +** inhibit-command-line has been eliminated. + +This variable used to exist for .emacs files to set. It has been +eliminated because you can get the same effect by setting +command-line-args to nil and setting inhibit-startup-message to t. + +* `apply' is more general. + +`apply' now accepts any number of arguments. The first one is a function; +the rest are individual arguments to pass to that function, except for the +last, which is a list of arguments to pass. + +Previously, `apply' required exactly two arguments. Its old behavior +follows as a special case of the new definition. + +* New code-letter for `interactive'. + +(interactive "NFoo: ") is like (interactive "nFoo: ") in reading +a number using the minibuffer to serve as the argument; however, +if a prefix argument was specified, it uses the prefix argument +value as the argument, and does not use the minibuffer at all. + +This is used by the `goto-line' and `goto-char' commands. + +* Semantics of variables. + +** Built-in per-buffer variables improved. + +Several built-in variables which in the past had a different value in +each buffer now behave exactly as if `make-variable-buffer-local' had +been done to them. + +These variables are `tab-width', `ctl-arrow', `truncate-lines', +`fill-column', `left-margin', `mode-line-format', `abbrev-mode', +`overwrite-mode', `case-fold-search', `auto-fill-hook', +`selective-display', `selective-display-ellipses'. + +To be precise, each variable has a default value which shows through +in most buffers and can be accessed with `default-value' and set with +`set-default'. Setting the variable with `setq' makes the variable +local to the current buffer. Changing the default value has retroactive +effect on all buffers in which the variable is not local. + +The variables `default-case-fold-search', etc., are now obsolete. +They now refer to the default value of the variable, which is not +quite the same behavior as before, but it should enable old init files +to continue to work. + +** New per-buffer variables. + +The variables `fill-prefix', `comment-column' and `indent-tabs-mode' +are now per-buffer. They work just like `fill-column', etc. + +** New function `setq-default'. + +`setq-default' sets the default value of a variable, and uses the +same syntax that `setq' accepts: the variable name is not evaluated +and need not be quoted. + +`(setq-default case-fold-search nil)' would make searches case-sensitive +in all buffers that do not have local values for `case-fold-search'. + +** Functions `global-set' and `global-value' deleted. + +These functions were never used except by mistake by users expecting +the functionality of `set-default' and `default-value'. + +* Changes in defaulting of major modes. + +When `default-major-mode' is `nil', new buffers are supposed to +get their major mode from the buffer that is current. However, +certain major modes (such as Dired mode, Rmail mode, Rmail Summary mode, +and others) are not reasonable to use in this way. + +Now such modes' names have been given non-`nil' `mode-class' properties. +If the current buffer's mode has such a property, Fundamental mode is +used as the default for newly created buffers. + +* `where-is-internal' requires additional arguments. + +This function now accepts three arguments, two of them required: +DEFINITION, the definition to search for; LOCAL-KEYMAP, the keymap +to use as the local map when doing the searching, and FIRST-ONLY, +which is nonzero to return only the first key found. + +This function returns a list of keys (strings) whose definitions +(in the LOCAL-KEYMAP or the current global map) are DEFINITION. + +If FIRST-ONLY is non-nil, it returns a single key (string). + +This function has changed incompatibly in that now two arguments +are required when previously only one argument was allowed. To get +the old behavior of this function, write `(current-local-map)' as +the expression for the second argument. + +The incompatibility is sad, but `nil' is a legitimate value for the +second argument (it means there is no local keymap), so it cannot also +serve as a default meaning to use the current local keymap. + +* Abbrevs with hooks. + +When an abbrev defined with a hook is expanded, it now performs the +usual replacement of the abbrev with the expansion before running the +hook. Previously the abbrev itself was deleted but the expansion was +not inserted. + +* Function `scan-buffer' deleted. + +Use `search-forward' or `search-backward' in place of `scan-buffer'. +You will have to rearrange the arguments. + +* X window interface improvements. + +** Detect release of mouse buttons. + +Button-up events can now be detected. See the file `lisp/x-mouse.el' +for details. + +** New pop-up menu facility. + +The new function `x-popup-menu' pops up a menu (in a X window) +and returns an indication of which selection the user made. +For more information, see its self-documentation. + +* M-x disassemble. + +This command prints the disassembly of a byte-compiled Emacs Lisp function. + +Would anyone like to interface this to the debugger? + +* `insert-buffer-substring' can insert part of the current buffer. + +The old restriction that the text being inserted had to come from +a different buffer is now lifted. + +When inserting text from the current buffer, the text to be inserted +is determined from the specified bounds before any copying takes place. + +* New function `substitute-key-definition'. + +This is a new way to replace one command with another command as the +binding of whatever keys may happen to refer to it. + +(substitute-key-definition OLDDEF NEWDEF KEYMAP) looks through KEYMAP +for keys defined to run OLDDEF, and rebinds those keys to run NEWDEF +instead. + +* New function `insert-char'. + +Insert a specified character, a specified number of times. + +* `mark-marker' changed. + +When there is no mark, this now returns a marker that points +nowhere, rather than `nil'. + +* `ding' accepts argument. + +When given an argument, the function `ding' does not terminate +execution of a keyboard macro. Normally, `ding' does terminate +all macros that are currently executing. + +* New function `minibuffer-depth'. + +This function returns the current depth in minibuffer activations. +The value is zero when the minibuffer is not in use. +Values greater than one are possible if the user has entered the +minibuffer recursively. + +* New function `documentation-property'. + +(documentation-property SYMBOL PROPNAME) is like (get SYMBOL PROPNAME), +except that if the property value is a number `documentation-property' +will take that number (or its absolute value) as a character position +in the DOC file and return the string found there. + +(documentation-property VAR 'variable-documentation) is the proper +way for a Lisp program to get the documentation of variable VAR. + +* New documentation-string expansion feature. + +If a documentation string (for a variable or function) contains text +of the form `\', it means that all command names specified in +`\[COMMAND]' construct from that point on should be turned into keys +using the value of the variable FOO as the local keymap. Thus, for example, + + `\\[eval-defun] evaluates the defun containing point.' + +will expand into + + "ESC C-x evaluates the defun containing point." + +regardless of the current major mode, because ESC C-x is defined to +run `eval-defun' in the keymap `emacs-lisp-mode-map'. The effect is +to show the key for `eval-defun' in Emacs Lisp mode regardless of the +current major mode. + +The `\<...>' construct applies to all `\[...]' constructs that follow it, +up to the end of the documentation string or the next `\<...>'. + +Without `\<...>', the keys for commands specified in `\[...]' are found +in the current buffer's local map. + +The current global keymap is always searched second, whether `\<...>' +has been used or not. + +* Multiple hooks allowed in certain contexts. + +The old hook variables `find-file-hook', `find-file-not-found-hook' and +`write-file-hook' have been replaced. + +The replacements are `find-file-hooks', `find-file-not-found-hooks' +and `write-file-hooks'. Each holds a list of functions to be called; +by default, `nil', for no functions. The functions are called in +order of appearance in the list. + +In the case of `find-file-hooks', all the functions are executed. + +In the case of `find-file-not-found-hooks', if any of the functions +returns non-`nil', the rest of the functions are not called. + +In the case of `write-file-hooks', if any of the functions returns +non-`nil', the rest of the functions are not called, and the file is +considered to have been written already; so actual writing in the +usual way is not done. If `write-file-hooks' is local to a buffer, +it is set to its global value if `set-visited-file-name' is called +(and thus by C-x C-w as well). + +`find-file-not-found-hooks' and `write-file-hooks' can be used +together to implement editing of files that are not stored as Unix +files: stored in archives, or inside version control systems, or on +other machines running other operating systems and accessible via ftp. + +* New hooks for suspending Emacs. + +Suspending Emacs runs the hook `suspend-hook' before suspending +and the hook `suspend-resume-hook' if the suspended Emacs is resumed. +Running a hook is done by applying the variable's value to no arguments +if the variable has a non-`nil' value. If `suspend-hook' returns +non-`nil', then suspending is inhibited and so is running the +`suspend-resume-hook'. The non-`nil' value means that the `suspend-hook' +has done whatever suspending is required. + +* Disabling commands can print a special message. + +A command is disabled by giving it a non-`nil' `disabled' property. +Now, if this property is a string, it is included in the message +printed when the user tries to run the command. + +* Emacs can open TCP connections. + +The function `open-network-stream' opens a TCP connection to +a specified host and service. Its value is a Lisp object that represents +the connection. The object is a kind of "subprocess", and I/O are +done like I/O to subprocesses. + +* Display-related changes. + +** New mode-line control features. + +The display of the mode line used to be controlled by a format-string +that was the value of the variable `mode-line-format'. + +This variable still exists, but it now allows more general values, +not just strings. Lists, cons cells and symbols are also meaningful. + +The mode line contents are created by outputting various mode elements +one after the other. Here are the kinds of objects that can be +used as mode elements, and what they do in the display: + + string the contents of the string are output to the mode line, + and %-constructs are replaced by other text. + + t or nil ignored; no output results. + + symbol the symbol's value is used. If the value is a string, + the string is output verbatim to the mode line + (so %-constructs are not interpreted). Otherwise, + the symbol's value is processed as a mode element. + + list (whose first element is a string or list or cons cell) + the elements of the list are treated as as mode elements, + so that the output they generate is concatenated, + + list (whose car is a symbol) + if the symbol's value is non-nil, the second element of the + list is treated as a mode element. Otherwise, the third + element (if any) of the list is treated as a mode element. + + cons (whose car is a positive integer) + the cdr of the cons is used as a mode element, but + the text it produces is padded, if necessary, to have + at least the width specified by the integer. + + cons (whose car is a negative integer) + the cdr of the cons is used as a mode element, but + the text it produces is truncated, if necessary, to have + at most the width specified by the integer. + +There is always one mode element to start with, that being the value of +`mode-line-format', but if this value is a list then it leads to several +more mode elements, which can lead to more, and so on. + +There is one new %-construct for mode elements that are strings: +`%n' displays ` Narrow' for a buffer that is narrowed. + +The default value of `mode-line-format' refers to several other variables. +These variables are `mode-name', `mode-line-buffer-identification', +`mode-line-process', `mode-line-modified', `global-mode-string' and +`minor-mode-alist'. The first four are local in every buffer in which they +are changed from the default. + +mode-name Name of buffer's major mode. Local in every buffer. + +mode-line-buffer-identification + Normally the list ("Emacs: %17b"), it is responsible + for displaying text to indicate what buffer is being shown + and what kind of editing it is doing. `Emacs' means + that a file of characters is being edited. Major modes + such as Info and Dired which edit or view other kinds + of data often change this value. This variables becomes + local to the current buffer if it is setq'd. + +mode-line-process + Normally nil, this variable is responsible for displaying + information about the process running in the current buffer. + M-x shell-mode and M-x compile alter this variable. + +mode-line-modified + This variable is responsible for displaying the indication + of whether the current buffer is modified or read-only. + By default its value is `("--%*%*-")'. + +minor-mode-alist + This variable is responsible for displaying text for those + minor modes that are currently enabled. Its value + is a list of elements of the form (VARIABLE STRING), + where STRING is to be displayed if VARIABLE's value + (in the buffer whose mode line is being displayed) + is non-nil. This variable is not made local to particular + buffers, but loading some libraries may add elements to it. + +global-mode-string + This variable is used to display the time, if you ask + for that. + +The idea of these variables is to eliminate the need for major modes +to alter mode-line-format itself. + +** `window-point' valid for selected window. + +The value returned by `window-point' used to be incorrect when its +argument was the selected window. Now the value is correct. + +** Window configurations may be saved as Lisp objects. + +The function `current-window-configuration' returns a special type of +Lisp object that represents the current layout of windows: the +sizes and positions of windows, which buffers appear in them, and +which parts of the buffers appear on the screen. + +The function `set-window-configuration' takes one argument, which must +be a window configuration object, and restores that configuration. + +** New hook `temp-output-buffer-show-hook'. + +This hook allows you to control how help buffers are displayed. +Whenever `with-output-to-temp-buffer' has executed its body and wants +to display the temp buffer, if this variable is bound and non-`nil' +then its value is called with one argument, the temp buffer. +The hook function is solely responsible for displaying the buffer. +The standard manner of display--making the buffer appear in a window--is +used only if there is no hook function. + +** New function `minibuffer-window'. + +This function returns the window used (sometimes) for displaying +the minibuffer. It can be used even when the minibuffer is not active. + +** New feature to `next-window'. + +If the optional second argument is neither `nil' nor `t', the minibuffer +window is omitted from consideration even when active; if the starting +window was the last non-minibuffer window, the value will be the first +non-minibuffer window. + +** New variable `minibuffer-scroll-window'. + +When this variable is non-`nil', the command `scroll-other-window' +uses it as the window to be scrolled. Displays of completion-lists +set this variable to the window containing the display. + +** New argument to `sit-for'. + +A non-nil second argument to `sit-for' means do not redisplay; +just wait for the specified time or until input is available. + +** Deleted function `set-minor-mode'; minor modes must be changed. + +The function `set-minor-mode' has been eliminated. The display +of minor mode names in the mode line is now controlled by the +variable `minor-mode-alist'. To specify display of a new minor +mode, it is sufficient to add an element to this list. Once that +is done, you can turn the mode on and off just by setting a variable, +and the display will show its status automatically. + +** New variable `cursor-in-echo-area'. + +If this variable is non-nil, the screen cursor appears on the +last line of the screen, at the end of the text displayed there. + +Binding this variable to t is useful at times when reading single +characters of input with `read-char'. + +** New per-buffer variable `selective-display-ellipses'. + +If this variable is non-nil, an ellipsis (`...') appears on the screen +at the end of each text line that is followed by invisible text. + +If this variable is nil, no ellipses appear. Then there is no sign +on the screen that invisible text is present. + +Text is made invisible under the control of the variable +`selective-display'; this is how Outline mode and C-x $ work. + +** New variable `no-redraw-on-reenter'. + +If you set this variable non-nil, Emacs will not clear the screen when +you resume it after suspending it. This is for the sake of terminals +with multiple screens of memory, where the termcap entry has been set +up to switch between screens when Emacs is suspended and resumed. + +** New argument to `set-screen-height' or `set-screen-width'. + +These functions now take an optional second argument which says +what significance the newly specified height or width has. + +If the argument is nil, or absent, it means that Emacs should +believe that the terminal height or width really is as just specified. + +If the argument is t, it means Emacs should not believe that the +terminal really is this high or wide, but it should use the +specific height or width as the number of lines or columns to display. +Thus, you could display only 24 lines on a screen known to have 48 lines. + +What practical difference is there between using only 24 lines for display +and really believing that the terminal has 24 lines? + +1. The ``real'' height of the terminal says what the terminal command +to move the cursor to the last line will do. + +2. The ``real'' height of the terminal determines how much padding is +needed. + +* File-related changes. + +** New parameter `backup-by-copying-when-mismatch'. + +If this variable is non-`nil', then when Emacs is about to save a +file, it will create the backup file by copying if that would avoid +changing the file's uid or gid. + +The default value of this variable is `nil', because usually it is +useful to have the uid of a file change according to who edited it +last. I recommend thet this variable be left normally `nil' and +changed with a local variables list in those particular files where +the uid needs to be preserved. + +** New parameter `file-precious-flag'. + +If this variable is non-`nil', saving the buffer tries to avoid +leaving an incomplete file due to disk full or other I/O errors. +It renames the old file before saving. If saving is successful, +the renamed file is deleted; if saving gets an error, the renamed +file is renamed back to the name you visited. + +Backups are always made by copying for such files. + +** New variable `buffer-offer-save'. + +If the value of this variable is non-`nil' in a buffer then exiting +Emacs will offer to save the buffer (if it is modified and nonempty) +even if the buffer is not visiting a file. This variable is +automatically made local to the current buffer whenever it is set. + +** `rename-file', `copy-file', `add-name-to-file' and `make-symbolic-link'. + +The third argument to these functions used to be `t' or `nil'; `t' +meaning go ahead even if the specified new file name already has a file, +and `nil' meaning to get an error. + +Now if the third argument is a number it means to ask the user for +confirmation in this case. + +** New optional argument to `copy-file'. + +If `copy-file' receives a non-nil fourth argument, it attempts +to give the new copy the same time-of-last-modification that the +original file has. + +** New function `file-newer-than-file-p'. + +(file-newer-than-file-p FILE1 FILE2) returns non-nil if FILE1 has been +modified more recently than FILE2. If FILE1 does not exist, the value +is always nil; otherwise, if FILE2 does not exist, the value is t. +This is meant for use when FILE2 depends on FILE1, to see if changes +in FILE1 make it necessary to recompute FILE2 from it. + +** Changed function `file-exists-p'. + +This function is no longer the same as `file-readable-p'. +`file-exists-p' can now return t for a file that exists but which +the fascists won't allow you to read. + +** New function `file-locked-p'. + +This function receives a file name as argument and returns `nil' +if the file is not locked, `t' if locked by this Emacs, or a +string giving the name of the user who has locked it. + +** New function `file-name-sans-versions'. + +(file-name-sans-versions NAME) returns a substring of NAME, with any +version numbers or other backup suffixes deleted from the end. + +** New functions for directory names. + +Although a directory is really a kind of file, specifying a directory +uses a somewhat different syntax from specifying a file. +In Emacs, a directory name is used as part of a file name. + +On Unix, the difference is small: a directory name ends in a slash, +while a file name does not: thus, `/usr/rms/' to name a directory, +while `/usr/rms' names the file which holds that directory. + +On VMS, the difference is considerable: `du:[rms.foo]' specifies a +directory, but the name of the file that holds that directory is +`du:[rms]foo.dir'. + +There are two new functions for converting between directory names +and file names. `directory-file-name' takes a directory name and +returns the name of the file in which that directory's data is stored. +`file-name-as-directory' takes the name of a file and returns +the corresponding directory name. These always understand Unix file name +syntax; on VMS, they understand VMS syntax as well. + +For example, (file-name-as-directory "/usr/rms") returns "/usr/rms/" +and (directory-file-name "/usr/rms/") returns "/usr/rms". +On VMS, (file-name-as-directory "du:[rms]foo.dir") returns "du:[rms.foo]" +and (directory-file-name "du:[rms.foo]") returns "du:[rms]foo.dir". + +** Value of `file-attributes' changed. + +The function file-attributes returns a list containing many kinds of +information about a file. Now the list has eleven elements. + +The tenth element is `t' if deleting the file and creating another +file of the same name would result in a change in the file's group; +`nil' if there would be no change. You can also think of this as +comparing the file's group with the default group for files created in +the same directory by you. + +The eleventh element is the inode number of the file. + +** VMS-only function `file-name-all-versions'. + +This function returns a list of all the completions, including version +number, of a specified version-number-less file name. This is like +`file-name-all-completions', except that the latter returns values +that do not include version numbers. + +** VMS-only variable `vms-stmlf-recfm'. + +On a VMS system, if this variable is non-nil, Emacs will give newly +created files the record format `stmlf'. This is necessary for files +that must contain lines of arbitrary length, such as compiled Emacs +Lisp. + +When writing a new version of an existing file, Emacs always keeps +the same record format as the previous version; so this variable has +no effect. + +This variable has no effect on Unix systems. + +** `insert-file-contents' on an empty file. + +This no longer sets the buffer's "modified" flag. + +** New function (VMS only) `define-logical-name': + +(define-logical-name LOGICAL TRANSLATION) defines a VMS logical name +LOGICAL whose translation is TRANSLATION. The new name applies to +the current process only. + +** Deleted variable `ask-about-buffer-names'. + +If you want buffer names for files to be generated in a special way, +you must redefine `create-file-buffer'. + +* Subprocess-related changes. + +** New function `process-list'. + +This function takes no arguments and returns a list of all +of Emacs's asynchronous subprocesses. + +** New function `process-exit-status'. + +This function, given a process, process name or buffer as argument, +returns the exit status code or signal number of the process. +If the process has not yet exited or died, this function returns 0. + +** Process output ignores `buffer-read-only'. + +Output from a process will go into the process's buffer even if the +buffer is read only. + +** Switching buffers in filter functions and sentinels. + +Emacs no longer saves and restore the current buffer around calling +the filter and sentinel functions, so these functions can now +permanently alter the selected buffer in a straightforward manner. + +** Specifying environment variables for subprocesses. + +When a subprocess is started with `start-process' or `call-process', +the value of the variable `process-environment' is taken to +specify the environment variables to give the subprocess. The +value should be a list of strings, each of the form "VAR=VALUE". + +`process-environment' is initialized when Emacs starts up +based on Emacs's environment. + +** New variable `process-connection-type'. + +If this variable is `nil', when a subprocess is created, Emacs uses +a pipe rather than a pty to communicate with it. Normally this +variable is `t', telling Emacs to use a pty if ptys are supported +and one is available. + +** New function `waiting-for-user-input-p'. + +This function, given a subprocess as argument, returns `t' if that +subprocess appears to be waiting for input sent from Emacs, +or `nil' otherwise. + +** New hook `shell-set-directory-error-hook'. + +The value of this variable is called, with no arguments, whenever +Shell mode gets an error trying to keep track of directory-setting +commands (such as `cd' and `pushd') used in the shell buffer. + +* New functions `user-uid' and `user-real-uid'. + +These functions take no arguments and return, respectively, +the effective uid and the real uid of the Emacs process. +The value in each case is an integer. + +* New variable `print-escape-newlines' controls string printing. + +If this variable is non-`nil', then when a Lisp string is printed +by the Lisp printing function `prin1' or `print', newline characters +are printed as `\n' rather than as a literal newline. + +* New function `sysnetunam' on HPUX. + +This function takes two arguments, a network address PATH and a +login string LOGIN, and executes the system call `netunam'. +It returns `t' if the call succeeds, otherwise `nil'. + +News regarding installation: + +* Many `s-...' file names changed. + +Many `s-...' files have been renamed. All periods in such names, +except the ones just before the final `h', have been changed to +hyphens. Thus, `s-bsd4.2.h' has been renamed to `s-bsd4-2.h'. + +This is so a Unix distribution can be moved mechanically to VMS. + +* `DOCSTR...' file now called `DOC-...'. + +The file of on-line documentation strings, that used to be +`DOCSTR.mm.nn.oo' in this directory, is now called `DOC-mm.nn.oo'. +This is so that it can port to VMS using the standard conventions +for translating filenames for VMS. + +This file also now contains the doc strings for variables as +well as functions. + +* Emacs no longer uses floating point arithmetic. + +This may make it easier to port to some machines. + +* Macros `XPNTR' and `XSETPNTR'; flag `DATA_SEG_BITS'. + +These macros exclusively are used to unpack a pointer from a Lisp_Object +and to insert a pointer into a Lisp_Object. Redefining them may help +port Emacs to machines in which all pointers to data objects have +certain high bits set. + +If `DATA_SEG_BITS' is defined, it should be a number which contains +the high bits to be inclusive or'ed with pointers that are unpacked. + +* New flag `HAVE_X_MENU'. + +Define this flag in `config.h' in addition to `HAVE_X_WINDOWS' +to enable use of the Emacs interface to X Menus. On some operating +systems, the rest of the X interface works properly but X Menus +do not work; hence this separate flag. See the file `src/xmenu.c' +for more information. + +* Macros `ARRAY_MARK_FLAG' and `DONT_COPY_FLAG'. + +* `HAVE_ALLOCA' prevents assembly of `alloca.s'. + +* `SYSTEM_MALLOC' prevents use of GNU `malloc.c'. + +SYSTEM_MALLOC, if defined, means use the system's own `malloc' routines +rather than those that come with Emacs. + +Use this only if absolutely necessary, because if it is used you do +not get warnings when space is getting low. + +* New flags to control unexec. + +See the file `unexec.c' for a long comment on the compilation +switches that suffice to make it work on many machines. + +* `PNTR_COMPARISON_TYPE' + +Pointers that need to be compared for ordering are converted to this type +first. Normally this is `unsigned int'. + +* `HAVE_VFORK', `HAVE_DUP2' and `HAVE_GETTIMEOFDAY'. + +These flags just say whether certain system calls are available. + +* New macros control compiler switches, linker switches and libraries. + +The m- and s- files can now control in a modular fashion the precise +arguments passed to `cc' and `ld'. + +LIBS_STANDARD defines the standard C libraries. Default is `-lc'. +LIBS_DEBUG defines the extra libraries to use when debugging. Default `-lg'. +LIBS_SYSTEM can be defined by the s- file to specify extra libraries. +LIBS_MACHINE can be defined by the m- file to specify extra libraries. +LIBS_TERMCAP defines the libraries for Termcap or Terminfo. + It is defined by default in a complicated fashion but the m- or s- file + can override it. + +LD_SWITCH_SYSTEM can be defined by the s- file to specify extra `ld' switches. + The default is `-X' on BSD systems except those few that use COFF object files. +LD_SWITCH_MACHINE can be defined by the m- file to specify extra `ld' switches. + +C_DEBUG_SWITCH defines the switches to give `cc' when debugging. Default `-g'. +C_OPTIMIZE_SWITCH defines the switches to give `cc' to optimize. Default `-O'. +C_SWITCH_MACHINE can be defined by the m- file to specify extra `cc' switches. + + + +---------------------------------------------------------------------- +Copyright information: + +Copyright (C) 1988, 2006 Free Software Foundation, Inc. + + Permission is granted to anyone to make or distribute verbatim copies + of this document as received, in any medium, provided that the + copyright notice and this permission notice are preserved, + thus giving the recipient permission to redistribute in turn. + + Permission is granted to distribute modified versions + of this document, or of portions of it, + under the above conditions, provided also that they + carry prominent notices stating who last changed them. + +Local variables: +mode: text +end: + +arch-tag: 8fed393b-c9c5-47d1-afbb-c0e7a135094a diff -r 86cedfd9ade6 -r 25fa0038a52d etc/NEWS.19 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/NEWS.19 Sun Jun 04 01:01:51 2006 +0000 @@ -0,0 +1,6540 @@ +GNU Emacs NEWS -- history of user-visible changes. 1992. +Copyright (C) 1993, 1994, 1995, 2001, 2006 Free Software Foundation, Inc. +See the end for copying conditions. + +This file is about changes in emacs versions 19. + + + +* Emacs 19.34 is a bug-fix release with no user-visible changes. + + + +* Changes in Emacs 19.33. + +** Bibtex mode no longer turns on Auto Fill automatically. (No major +mode should do that--it is the user's choice.) + +** The variable normal-auto-fill-function specifies the function to +use for auto-fill-function, if and when Auto Fill is turned on. +Major modes can set this locally to alter how Auto Fill works. + + + +* Editing Changes in Emacs 19.32 + +** C-x f with no argument now signals an error. +To set the fill column at the current column, use C-u C-x f. + +** Expanding dynamic abbrevs with M-/ is now smarter about case +conversion. If you type the abbreviation with mixed case, and it +matches the beginning of the expansion including case, then the +expansion is copied verbatim. Using SPC M-/ to copy an additional +word always copies it verbatim except when the previous copied word is +all caps. + +** On a non-windowing terminal, which can display only one Emacs frame +at a time, creating a new frame with C-x 5 2 also selects that frame. + +When using a display that can show multiple frames at once, C-x 5 2 +does make the frame visible, but does not select it. This is the same +as in previous Emacs versions. + +** You can use C-x 5 2 to create multiple frames on MSDOS, just as on a +non-X terminal on Unix. Of course, only one frame is visible at any +time, since your terminal doesn't have the ability to display multiple +frames. + +** On Windows, set win32-pass-alt-to-system to a non-nil value +if you would like tapping the Alt key to invoke the Windows menu. +This feature is not enabled by default; since the Alt key is also the +Meta key, it is too easy and painful to activate this feature by +accident. + +** The command apply-macro-to-region-lines repeats the last defined +keyboard macro once for each complete line within the current region. +It does this line by line, by moving point to the beginning of that +line and then executing the macro. + +This command is not new, but was never documented before. + +** You can now use Mouse-1 to place the region around a string constant +(something surrounded by doublequote characters or other delimiter +characters of like syntax) by double-clicking on one of the delimiting +characters. + +** Font Lock mode + +*** Font Lock support modes + +Font Lock can be configured to use Fast Lock mode and Lazy Lock mode (see +below) in a flexible way. Rather than adding the appropriate function to the +hook font-lock-mode-hook, you can use the new variable font-lock-support-mode +to control which modes have Fast Lock mode or Lazy Lock mode turned on when +Font Lock mode is enabled. + +For example, to use Fast Lock mode when Font Lock mode is turned on, put: + + (setq font-lock-support-mode 'fast-lock-mode) + +in your ~/.emacs. + +*** lazy-lock + +The lazy-lock package speeds up Font Lock mode by making fontification occur +only when necessary, such as when a previously unfontified part of the buffer +becomes visible in a window. When you create a buffer with Font Lock mode and +Lazy Lock mode turned on, the buffer is not fontified. When certain events +occur (such as scrolling), Lazy Lock makes sure that the visible parts of the +buffer are fontified. Lazy Lock also defers on-the-fly fontification until +Emacs has been idle for a given amount of time. + +To use this package, put in your ~/.emacs: + + (setq font-lock-support-mode 'lazy-lock-mode) + +To control the package behavior, see the documentation for `lazy-lock-mode'. + +** Changes in BibTeX mode. + +*** For all entries allow spaces and tabs between opening brace or +paren and key. + +*** Non-escaped double-quoted characters (as in `Sch"of') are now +supported. + +** Gnus changes. + +Gnus, the Emacs news reader, has undergone further rewriting. Many new +commands and variables have been added. There should be no +significant incompatibilities between this Gnus version and the +previously released version, except in the message composition area. + +Below is a list of the more user-visible changes. Coding changes +between Gnus 5.1 and 5.2 are more extensive. + +*** A new message composition mode is used. All old customization +variables for mail-mode, rnews-reply-mode and gnus-msg are now +obsolete. + +*** Gnus is now able to generate "sparse" threads -- threads where +missing articles are represented by empty nodes. + + (setq gnus-build-sparse-threads 'some) + +*** Outgoing articles are stored on a special archive server. + + To disable this: (setq gnus-message-archive-group nil) + +*** Partial thread regeneration now happens when articles are +referred. + +*** Gnus can make use of GroupLens predictions: + + (setq gnus-use-grouplens t) + +*** A trn-line tree buffer can be displayed. + + (setq gnus-use-trees t) + +*** An nn-like pick-and-read minor mode is available for the summary +buffers. + + (add-hook 'gnus-summary-mode-hook 'gnus-pick-mode) + +*** In binary groups you can use a special binary minor mode: + + `M-x gnus-binary-mode' + +*** Groups can be grouped in a folding topic hierarchy. + + (add-hook 'gnus-group-mode-hook 'gnus-topic-mode) + +*** Gnus can re-send and bounce mail. + + Use the `S D r' and `S D b'. + +*** Groups can now have a score, and bubbling based on entry frequency +is possible. + + (add-hook 'gnus-summary-exit-hook 'gnus-summary-bubble-group) + +*** Groups can be process-marked, and commands can be performed on +groups of groups. + +*** Caching is possible in virtual groups. + +*** nndoc now understands all kinds of digests, mail boxes, rnews news +batches, ClariNet briefs collections, and just about everything else. + +*** Gnus has a new backend (nnsoup) to create/read SOUP packets. + +*** The Gnus cache is much faster. + +*** Groups can be sorted according to many criteria. + + For instance: (setq gnus-group-sort-function 'gnus-group-sort-by-rank) + +*** New group parameters have been introduced to set list-address and +expiration times. + +*** All formatting specs allow specifying faces to be used. + +*** There are several more commands for setting/removing/acting on +process marked articles on the `M P' submap. + +*** The summary buffer can be limited to show parts of the available +articles based on a wide range of criteria. These commands have been +bound to keys on the `/' submap. + +*** Articles can be made persistent -- as an alternative to saving +articles with the `*' command. + +*** All functions for hiding article elements are now toggles. + +*** Article headers can be buttonized. + + (add-hook 'gnus-article-display-hook 'gnus-article-add-buttons-to-head) + +*** All mail backends support fetching articles by Message-ID. + +*** Duplicate mail can now be treated properly. See the +`nnmail-treat-duplicates' variable. + +*** All summary mode commands are available directly from the article +buffer. + +*** Frames can be part of `gnus-buffer-configuration'. + +*** Mail can be re-scanned by a daemonic process. + +*** Gnus can make use of NoCeM files to filter spam. + + (setq gnus-use-nocem t) + +*** Groups can be made permanently visible. + + (setq gnus-permanently-visible-groups "^nnml:") + +*** Many new hooks have been introduced to make customizing easier. + +*** Gnus respects the Mail-Copies-To header. + +*** Threads can be gathered by looking at the References header. + + (setq gnus-summary-thread-gathering-function + 'gnus-gather-threads-by-references) + +*** Read articles can be stored in a special backlog buffer to avoid +refetching. + + (setq gnus-keep-backlog 50) + +*** A clean copy of the current article is always stored in a separate +buffer to allow easier treatment. + +*** Gnus can suggest where to save articles. See `gnus-split-methods'. + +*** Gnus doesn't have to do as much prompting when saving. + + (setq gnus-prompt-before-saving t) + +*** gnus-uu can view decoded files asynchronously while fetching +articles. + + (setq gnus-uu-grabbed-file-functions 'gnus-uu-grab-view) + +*** Filling in the article buffer now works properly on cited text. + +*** Hiding cited text adds buttons to toggle hiding, and how much +cited text to hide is now customizable. + + (setq gnus-cited-lines-visible 2) + +*** Boring headers can be hidden. + + (add-hook 'gnus-article-display-hook 'gnus-article-hide-boring-headers) + +*** Default scoring values can now be set from the menu bar. + +*** Further syntax checking of outgoing articles have been added. + +The Gnus manual has been expanded. It explains all these new features +in greater detail. + + +* Lisp Changes in Emacs 19.32 + +** The function set-visited-file-name now accepts an optional +second argument NO-QUERY. If it is non-nil, then the user is not +asked for confirmation in the case where the specified file already +exists. + +** The variable print-length applies to printing vectors and bitvectors, +as well as lists. + +** The new function keymap-parent returns the parent keymap +of a given keymap. + +** The new function set-keymap-parent specifies a new parent for a +given keymap. The arguments are KEYMAP and PARENT. PARENT must be a +keymap or nil. + +** Sometimes menu keymaps use a command name, a symbol, which is really +an automatically generated alias for some other command, the "real" +name. In such a case, you should give that alias symbol a non-nil +menu-alias property. That property tells the menu system to look for +equivalent keys for the real name instead of equivalent keys for the +alias. + + + +* Editing Changes in Emacs 19.31 + +** Freedom of the press restricted in the United States. + +Emacs has been censored in accord with the Communications Decency Act. +This includes removing some features of the doctor program. That law +was described by its supporters as a ban on pornography, but it bans +far more than that. The Emacs distribution has never contained any +pornography, but parts of it were nonetheless prohibited. + +For information on US government censorship of the Internet, and what +you can do to bring back freedom of the press, see the web site +`http://www.vtw.org/'. + +** A note about C mode indentation customization. + +The old (Emacs 19.29) ways of specifying a C indentation style +do not normally work in the new implementation of C mode. +It has its own methods of customizing indentation, which are +much more powerful than the old C mode. See the Editing Programs +chapter of the manual for details. + +However, you can load the library cc-compat to make the old +customization variables take effect. + +** Marking with the mouse. + +When you mark a region with the mouse, the region now remains +highlighted until the next input event, regardless of whether you are +using M-x transient-mark-mode. + +** Improved Windows NT/95 support. + +*** Emacs now supports scroll bars on Windows NT and Windows 95. + +*** Emacs now supports subprocesses on Windows 95. (Subprocesses used +to work on NT only and not on 95.) + +*** There are difficulties with subprocesses, though, due to problems +in Windows, beyond the control of Emacs. They work fine as long as +you run Windows applications. The problems arise when you run a DOS +application in a subprocesses. Since current shells run as DOS +applications, these problems are significant. + +If you run a DOS application in a subprocess, then the application is +likely to busy-wait, which means that your machine will be 100% busy. +However, if you don't mind the temporary heavy load, the subprocess +will work OK as long as you tell it to terminate before you start any +other DOS application as a subprocess. + +Emacs is unable to terminate or interrupt a DOS subprocess. +You have to do this by providing input directly to the subprocess. + +If you run two DOS applications at the same time in two separate +subprocesses, even if one of them is asynchronous, you will probably +have to reboot your machine--until then, it will remain 100% busy. +Windows simply does not cope when one Windows process tries to run two +separate DOS subprocesses. Typing CTL-ALT-DEL and then choosing +Shutdown seems to work although it may take a few minutes. + +** M-x resize-minibuffer-mode. + +This command, not previously mentioned in NEWS, toggles a mode in +which the minibuffer window expands to show as many lines as the +minibuffer contains. + +** `title' frame parameter and resource. + +The `title' X resource now specifies just the frame title, nothing else. +It does not affect the name used for looking up other X resources. +It works by setting the new `title' frame parameter, which likewise +affects just the displayed title of the frame. + +The `name' parameter continues to do what it used to do: +it specifies the frame name for looking up X resources, +and also serves as the default for the displayed title +when the `title' parameter is unspecified or nil. + +** Emacs now uses the X toolkit by default, if you have a new +enough version of X installed (X11R5 or newer). + +** When you compile Emacs with the Motif widget set, Motif handles the +F10 key by activating the menu bar. To avoid confusion, the usual +Emacs binding of F10 is replaced with a no-op when using Motif. + +If you want to be able to use F10 in Emacs, you can rebind the Motif +menubar to some other key which you don't use. To do so, add +something like this to your X resources file. This example rebinds +the Motif menu bar activation key to S-F12: + + Emacs*defaultVirtualBindings: osfMenuBar : ShiftF12 + +** In overwrite mode, DEL now inserts spaces in most cases +to replace the characters it "deletes". + +** The Rmail summary now shows the number of lines in each message. + +** Rmail has a new command M-x unforward-rmail-message, which extracts +a forwarded message from the message that forwarded it. To use it, +select a message which contains a forwarded message and then type the command. +It inserts the forwarded message as a separate Rmail message +immediately after the selected one. + +This command also undoes the textual modifications that are standardly +made, as part of forwarding, by Rmail and other mail reader programs. + +** Turning off saving of .saves-... files in your home directory. + +Each Emacs session writes a file named .saves-... in your home +directory to record which files M-x recover-session should recover. +If you exit Emacs normally with C-x C-c, it deletes that file. If +Emacs or the operating system crashes, the file remains for M-x +recover-session. + +You can turn off the writing of these files by setting +auto-save-list-file-name to nil. If you do this, M-x recover-session +will not work. + +Some previous Emacs versions failed to delete these files even on +normal exit. This is fixed now. If you are thinking of turning off +this feature because of past experiences with versions that had this +bug, it would make sense to check whether you still want to do so +now that the bug is fixed. + +** Changes to Version Control (VC) + +There is a new variable, vc-follow-symlinks. It indicates what to do +when you visit a link to a file that is under version control. +Editing the file through the link bypasses the version control system, +which is dangerous and probably not what you want. + +If this variable is t, VC follows the link and visits the real file, +telling you about it in the echo area. If it is `ask' (the default), +VC asks for confirmation whether it should follow the link. If nil, +the link is visited and a warning displayed. + +** iso-acc.el now lets you specify a choice of language. +Languages include "latin-1" (the default) and "latin-2" (which +is designed for entering ISO Latin-2 characters). + +There are also choices for specific human languages such as French and +Portuguese. These are subsets of Latin-1, which differ in that they +enable only the accent characters needed for particular language. +The other accent characters, not needed for the chosen language, +remain normal. + +** Posting articles and sending mail now has M-TAB completion on various +header fields (Newsgroups, To, CC, ...). + +Completion in the Newsgroups header depends on the list of groups +known to your news reader. Completion in the Followup-To header +offers those groups which are in the Newsgroups header, since +Followup-To usually just holds one of those. + +Completion in fields that hold mail addresses works based on the list +of local users plus your aliases. Additionally, if your site provides +a mail directory or a specific host to use for any unrecognized user +name, you can arrange to query that host for completion also. (See the +documentation of variables `mail-directory-process' and +`mail-directory-stream'.) + +** A greatly extended sgml-mode offers new features such as (to be configured) +skeletons with completing read for tags and attributes, typing named +characters including optionally all 8bit characters, making tags invisible +with optional alternate display text, skipping and deleting tag(pair)s. + +Note: since Emacs' syntax feature cannot limit the special meaning of ', " and +- to inside <>, for some texts the result, especially of font locking, may be +wrong (see `sgml-specials' if you get wrong results). + +The derived html-mode configures this with tags and attributes more or +less HTML3ish. It also offers optional quick keys like C-c 1 for +headline or C-c u for unordered list (see `html-quick-keys'). Edit / +Text Properties / Face or M-g combinations create tags as applicable. +Outline minor mode is supported and level 1 font-locking tries to +fontify tag contents (which only works when they fit on one line, due +to a limitation in font-lock). + +External viewing via browse-url can occur automatically upon saving. + +** M-x imenu-add-to-menubar now adds to the menu bar for the current +buffer only. If you want to put an Imenu item in the menu bar for all +buffers that use a particular major mode, use the mode hook, as in +this example: + + (add-hook 'emacs-lisp-mode-hook + '(lambda () (imenu-add-to-menubar "Index"))) + +** Changes in BibTeX mode. + +*** Field names may now contain digits, hyphens, and underscores. + +*** Font Lock mode is now supported. + +*** bibtex-make-optional-field is no longer interactive. + +*** If bibtex-maintain-sorted-entries is non-nil, inserting new +entries is now done with a faster algorithm. However, inserting +will fail in this case if the buffer contains invalid entries or +isn't in sorted order, so you should finish each entry with C-c C-c +(bibtex-close-entry) after you have inserted or modified it. +The default value of bibtex-maintain-sorted-entries is nil. + +*** Function `show-all' is no longer bound to a key, since C-u C-c C-q +does the same job. + +*** Entries with quotes inside quote-delimited fields (as `author = +"Stefan Sch{\"o}f"') are now supported. + +*** Case in field names doesn't matter anymore when searching for help +text. + +** Font Lock mode + +*** Global Font Lock mode + +Font Lock mode can be turned on globally, in buffers that support it, by the +new command global-font-lock-mode. You can use the new variable +font-lock-global-modes to control which modes have Font Lock mode automagically +turned on. By default, this variable is set so that Font Lock mode is turned +on globally where the buffer mode supports it. + +For example, to automagically turn on Font Lock mode where supported, put: + + (global-font-lock-mode t) + +in your ~/.emacs. + +*** Local Refontification + +In Font Lock mode, editing a line automatically refontifies that line only. +However, if your change alters the syntactic context for following lines, +those lines remain incorrectly fontified. To refontify them, use the new +command M-g M-g (font-lock-fontify-block). + +In certain major modes, M-g M-g refontifies the entire current function. +(The variable font-lock-mark-block-function controls how to find the +current function.) In other major modes, M-g M-g refontifies 16 lines +above and below point. + +With a prefix argument N, M-g M-g refontifies N lines above and below point. + +** Follow mode + +Follow mode is a new minor mode combining windows showing the same +buffer into one tall "virtual window". The windows are typically two +side-by-side windows. Follow mode makes them scroll together as if +they were a unit. To use it, go to a frame with just one window, +split it into two side-by-side windows using C-x 3, and then type M-x +follow-mode. + +M-x follow-mode turns off Follow mode if it is already enabled. + +To display two side-by-side windows and activate Follow mode, use the +command M-x follow-delete-other-windows-and-split. + +** hide-show changes. + +The hooks hs-hide-hooks and hs-show-hooks have been renamed +to hs-hide-hook and hs-show-hook, to follow the convention for +normal hooks. + +** Simula mode now has a menu containing the most important commands. +The new command simula-indent-exp is bound to C-M-q. + +** etags can now handle programs written in Erlang. Files are +recognised by the extensions .erl and .hrl. The tagged lines are +those that begin a function, record, or macro. + +** MSDOS Changes + +*** It is now possible to compile Emacs with the version 2 of DJGPP. +Compilation with DJGPP version 1 also still works. + +*** The documentation of DOS-specific aspects of Emacs was rewritten +and expanded; see the ``MS-DOS'' node in the on-line docs. + +*** Emacs now uses ~ for backup file names, not .bak. + +*** You can simulate mouse-3 on two-button mice by simultaneously +pressing both mouse buttons. + +*** A number of packages and commands which previously failed or had +restricted functionality on MS-DOS, now work. The most important ones +are: + +**** Printing (both with `M-x lpr-buffer' and with `ps-print' package) +now works. + +**** `Ediff' works (in a single-frame mode). + +**** `M-x display-time' can be used on MS-DOS (due to the new +implementation of Emacs timers, see below). + +**** `Dired' supports Unix-style shell wildcards. + +**** The `c-macro-expand' command now works as on other platforms. + +**** `M-x recover-session' works. + +**** `M-x list-colors-display' displays all the available colors. + +**** The `TPU-EDT' package works. + + +* Lisp changes in Emacs 19.31. + +** The function using-unix-filesystems on Windows NT and Windows 95 +tells Emacs to read and write files assuming that they reside on a +remote Unix filesystem. No CR/LF translation is done on any files in +this case. Invoking using-unix-filesystems with t activates this +behavior, and invoking it with any other value deactivates it. + +** Change in system-type and system-configuration values. + +The value of system-type on a Linux-based GNU system is now `lignux', +not `linux'. This means that some programs which use `system-type' +need to be changed. The value of `system-configuration' will also +be different. + +It is generally recommended to use `system-configuration' rather +than `system-type'. + +See the file LINUX-GNU in this directory for more about this. + +** The functions shell-command and dired-call-process +now run file name handlers for default-directory, if it has them. + +** Undoing the deletion of text now restores the positions of markers +that pointed into or next to the deleted text. + +** Timers created with run-at-time now work internally to Emacs, and +no longer use a separate process. Therefore, they now work more +reliably and can be used for shorter time delays. + +The new function run-with-timer is a convenient way to set up a timer +to run a specified amount of time after the present. A call looks +like this: + + (run-with-timer SECS REPEAT FUNCTION ARGS...) + +SECS says how many seconds should elapse before the timer happens. +It may be an integer or a floating point number. When the timer +becomes ripe, the action is to call FUNCTION with arguments ARGS. + +REPEAT gives the interval for repeating the timer (measured in +seconds). It may be an integer or a floating point number. nil or 0 +means don't repeat at all--call FUNCTION just once. + +*** with-timeout provides an easy way to do something but give +up if too much time passes. + + (with-timeout (SECONDS TIMEOUT-FORMS...) BODY...) + +This executes BODY, but gives up after SECONDS seconds. +If it gives up, it runs the TIMEOUT-FORMS and returns the value +of the last one of them. Normally it returns the value of the last +form in BODY. + +*** You can now arrange to call a function whenever Emacs is idle for +a certain length of time. To do this, call run-with-idle-timer. A +call looks like this: + + (run-with-idle-timer SECS REPEAT FUNCTION ARGS...) + +SECS says how many seconds of idleness should elapse before the timer +runs. It may be an integer or a floating point number. When the +timer becomes ripe, the action is to call FUNCTION with arguments +ARGS. + +Emacs becomes idle whenever it finishes executing a keyboard or mouse +command. It remains idle until it receives another keyboard or mouse +command. + +REPEAT, if non-nil, means this timer should be activated again each +time Emacs becomes idle and remains idle for SECS seconds The timer +does not repeat if Emacs *remains* idle; it runs at most once after +each time Emacs becomes idle. + +If REPEAT is nil, the timer runs just once, the first time Emacs is +idle for SECS seconds. + +*** post-command-idle-hook is now obsolete; you shouldn't use it at +all, because it interferes with the idle timer mechanism. If your +programs use post-command-idle-hook, convert them to use idle timers +instead. + +*** y-or-n-p-with-timeout lets you ask a question but give up if +there is no answer within a certain time. + + (y-or-n-p-with-timeout PROMPT SECONDS DEFAULT-VALUE) + +asks the question PROMPT (just like y-or-n-p). If the user answers +within SECONDS seconds, it returns the answer that the user gave. +Otherwise it gives up after SECONDS seconds, and returns DEFAULT-VALUE. + +** Minor change to `encode-time': you can now pass more than seven +arguments. If you do that, the first six arguments have the usual +meaning, the last argument is interpreted as the time zone, and the +arguments in between are ignored. + +This means that it works to use the list returned by `decode-time' as +the list of arguments for `encode-time'. + +** The default value of load-path now includes the directory +/usr/local/share/emacs/VERSION/site-lisp In addition to +/usr/local/share/emacs/site-lisp. You can use this new directory for +site-specific Lisp packages that belong with a particular Emacs +version. + +It is not unusual for a Lisp package that works well in one Emacs +version to cause trouble in another. Sometimes packages need updating +for incompatible changes; sometimes they look at internal data that +has changed; sometimes the package has been installed in Emacs itself +and the installed version should be used. Whatever the reason for the +problem, this new feature makes it easier to solve. + +** When your program contains a fixed file name (like .completions or +.abbrev.defs), the file name usually needs to be different on operating +systems with limited file name syntax. + +Now you can avoid ad-hoc conditionals by using the function +convert-standard-filename to convert the file name to a proper form +for each operating system. Here is an example of use, from the file +completions.el: + +(defvar save-completions-file-name + (convert-standard-filename "~/.completions") + "*The filename to save completions to.") + +This sets the variable save-completions-file-name to a value that +depends on the operating system, because the definition of +convert-standard-filename depends on the operating system. On +Unix-like systems, it returns the specified file name unchanged. On +MS-DOS, it adapts the name to fit the limitations of that system. + +** The interactive spec N now returns the numeric prefix argument +rather than the raw prefix argument. (It still reads a number using the +minibuffer if there is no prefix argument at all.) + +** When a process is deleted, this no longer disconnects the process +marker from its buffer position. + +** The variable garbage-collection-messages now controls whether +Emacs displays a message at the beginning and end of garbage collection. +The default is nil, meaning there are no messages. + +** The variable debug-ignored-errors specifies certain kinds of errors +that should not enter the debugger. Its value is a list of error +condition symbols and/or regular expressions. If the error has any +of the condition symbols listed, or if any of the regular expressions +matches the error message, then that error does not enter the debugger, +regardless of the value of debug-on-error. + +This variable is initialized to match certain common but uninteresting +errors that happen often during editing. + +** The new function error-message-string converts an error datum +into its error message. The error datum is what condition-case +puts into the variable, to describe the error that happened. + +** Anything that changes which buffer appears in a given window +now runs the window-scroll-functions for that window. + +** The new function get-buffer-window-list returns a list of windows displaying +a buffer. The function is called with the buffer (a buffer object or a buffer +name) and two optional arguments specifying the minibuffer windows and frames +to search. Therefore this function takes optional args like next-window etc., +and not get-buffer-window. + +** buffer-substring now runs the hook buffer-access-fontify-functions, +calling each function with two arguments--the range of the buffer +being accessed. buffer-substring-no-properties does not call them. + +If you use this feature, you should set the variable +buffer-access-fontified-property to a non-nil symbol, which is a +property name. Then, if all the characters in the buffer range have a +non-nil value for that property, the buffer-access-fontify-functions +are not called. When called, these functions should put a non-nil +property on the text that they fontify, so that they won't get called +over and over for the same text. + +** Changes in lisp-mnt.el + +*** The lisp-mnt package can now recognize file headers that are written +in the formats used by the `what' command and the RCS `ident' command: + +;; @(#) HEADER: text +;; $HEADER: text $ + +in addition to the normal + +;; HEADER: text + +*** The commands lm-verify and lm-synopsis are now interactive. lm-verify +checks that the library file has proper sections and headers, and +lm-synopsis extracts first line "synopsis'"information. + + + +* Editing Changes in Emacs 19.30. + +** Be sure to recompile your byte-compiled Emacs Lisp files +if you last compiled them with Emacs 19.28 or earlier. +You can use M-x byte-force-recompile to recompile all the .elc files +in a specified directory. + +** Emacs now provides multiple-frame support on Windows NT +and Windows 95. + +** M-x column-number-mode toggles a minor mode which displays +the current column number in the mode line. + +** Line Number mode is now enabled by default. + +** M-x what-line now displays the line number in the accessible +portion of the buffer as well as the line number in the full buffer, +when narrowing is in effect. + +** If you type a M-x command that has an equivalent key binding, +the equivalent is shown in the minibuffer before the command executes. +This feature is enabled by default for the sake of beginning users. +You can turn the feature off by setting suggest-key-bindings to nil. + +** The menu bar is now visible on text-only terminals. To choose a +command from the menu bar when you have no mouse, type M-` +(Meta-Backquote) or F10. To turn off menu bar display, +do (menu-bar-mode -1). + +** Whenever you invoke a minibuffer, it appears in the minibuffer +window that the current frame uses. + +Emacs can only use one minibuffer window at a time. If you activate +the minibuffer while a minibuffer window is active in some other +frame, the outer minibuffer window disappears while the inner one is +active. + +** Echo area messages always appear in the minibuffer window that the +current frame uses. If a minibuffer is active in some other frame, +the echo area message does not hide it even temporarily. + +** The minibuffer now has a menu-bar menu. You can use it to exit or +abort the minibuffer, or to ask for completion. + +** Dead-key and composite character processing is done in the standard +X11R6 manner (through the default "input method" using the +/usr/lib/X11/locale/*/Compose databases of key combinations). I.e. if +it works in xterm, it should also work in emacs now. + +** Mouse changes + +*** You can now use the mouse when running Emacs in an xterm. +Use M-x xterm-mouse-mode to let emacs take control over the mouse. + +*** C-mouse-1 now once again provides a menu of buffers to select. +S-mouse-1 is now the way to select a default font for the frame. + +*** There is a new mouse-scroll-min-lines variable to control the +minimum number of lines scrolled by dragging the mouse outside a +window's edge. + +*** Dragging mouse-1 on a vertical line that separates windows +now moves the line, thus changing the widths of the two windows. +(This feature is available only if you don't have vertical scroll bars. +If you do use them, a scroll bar separates two side-by-side windows.) + +*** Double-click mouse-1 on a character with "symbol" syntax (such as +underscore, in C mode) selects the entire symbol surrounding that +character. (Double-click mouse-1 on a letter selects a whole word.) + +** When incremental search wraps around to the beginning (or end) of +the buffer, if you keep on searching until you go past the original +starting point of the search, the echo area changes from "Wrapped" to +"Overwrapped". That tells you that you are revisiting matches that +you have already seen. + +** Filling changes. + +*** If the variable colon-double-space is non-nil, the explicit fill +commands put two spaces after a colon. + +*** Auto-Fill mode now supports Adaptive Fill mode just as the +explicit fill commands do. The variable adaptive-fill-regexp +specifies a regular expression to match text at the beginning of +a line that should be the fill prefix. + +*** Adaptive Fill mode can take a fill prefix from the first line of a +paragraph, *provided* that line is not a paragraph-starter line. + +Paragraph-starter lines are indented lines that start a new +paragraph because they are indented. This indentation shouldn't +be copied to additional lines. + +Whether indented lines are paragraph lines depends on the value of the +variable paragraph-start. Some major modes set this; you can set it +by hand or in mode hooks as well. For editing text in which paragraph +first lines are not indented, and which contains paragraphs in which +all lines are indented, you should use Indented Text mode or arrange +for paragraph-start not to match these lines. + +*** You can specify more complex ways of choosing a fill prefix +automatically by setting `adaptive-fill-function'. This function +is called with point after the left margin of a line, and it should +return the appropriate fill prefix based on that line. +If it returns nil, that means it sees no fill prefix in that line. + +** Gnus changes. + +Gnus, the Emacs news reader, has been rewritten and expanded. Most +things that worked with the old version should still work with the new +version. Code that relies heavily on Gnus internals is likely to +fail, though. + +*** Incompatibilities with the old GNUS. + +**** All interactive commands have kept their names, but many internal +functions have changed names. + +**** The summary mode gnus-uu commands have been moved from the `C-c +C-v' keymap to the `X' keymap. + +**** There can now be several summary buffers active at once. +Variables that are relevant to each summary buffer are buffer-local to +that buffer. + +**** Old hilit code doesn't work at all. Gnus performs its own +highlighting based not only on what's visible in the buffer, but on +other data structures. + +**** Old packages like `expire-kill' will no longer work. + +**** `C-c C-l' in the group buffer no longer switches to a different +buffer, but instead lists killed groups in the group buffer. + +*** New features. + +**** The look of all buffers can be changed by setting format-like +variables. + +**** Local spool and several NNTP servers can be used at once. + +**** Groups can be combined into virtual groups. + +**** Different mail formats can be read much the same way as one would +read newsgroups. All the mail backends implement mail expiry schemes. + +**** Gnus can use various strategies for gathering threads that have +lost their roots (thereby gathering loose sub-threads into one thread) +or it can go back and retrieve enough headers to build a complete +thread. + +**** Killed groups can be read. + +**** Gnus can do partial group updates - you do not have to retrieve +the entire active file just to check for new articles in a few groups. + +**** Gnus implements a sliding scale of subscribedness to groups. + +**** You can score articles according to any number of criteria. You +can get Gnus to score articles for you using adaptive scoring. + +**** Gnus maintains a dribble buffer that is auto-saved the normal +Emacs manner, so it should be difficult to lose much data on what you +have read if your machine should go down. + +**** Gnus now has its own startup file (`.gnus.el') to avoid +cluttering up the `.emacs' file. + +**** You can set the process mark on both groups and articles and +perform operations on all the marked items. + +**** You can grep through a subset of groups and create a group from +the results. + +**** You can list subsets of groups using matches on group names or +group descriptions. + +**** You can browse foreign servers and subscribe to groups from those +servers. + +**** Gnus can pre-fetch articles asynchronously on a second connection +to the servers. + +**** You can cache articles locally. + +**** Gnus can fetch FAQs to and descriptions of groups. + +**** Digests (and other files) can be used as the basis for groups. + +**** Articles can be highlighted and customized. + +** Changes to Version Control (VC) + +*** General changes (all backends). + +VC directory listings (C-x v d) are now kept up to date when you do a +vc-next-action (C-x v v) on the marked files. The `g' command updates +the buffer properly. `=' in a VC dired buffer produces a version +control diff, not an ordinary diff. + +*** CVS changes. + +Under CVS, you no longer need to type C-x C-q before you can edit a +file. VC doesn't write-protect unmodified buffers anymore; you can +freely change them at any time. The mode line keeps track of the +file status. + +If you do want unmodified files to be write-protected, set your +CVSREAD environment variable. VC sees this and behaves accordingly; +that will give you the behavior of Emacs 19.29, similar to that under +RCS and SCCS. In this mode, if the variable vc-mistrust-permissions +is nil, VC learns the modification state from the file permissions. +When setting CVSREAD for the first time, you should check out the +whole module anew, so that the file permissions are set correctly. + +VC also works with remote repositories now. When you visit a file, it +doesn't run "cvs status" anymore, so there shouldn't be any long delays. + +Directory listings under VC/CVS have been enhanced. Type C-x v d, and +you get a list of all files in or below the current directory that are +not up-to-date. The actual status (modified, merge, conflict, ...) is +displayed for each file. If you give a prefix argument (C-u C-x v d), +up-to-date files are also listed. You can mark any number of files, +and execute the next logical version control command on them (C-x v v). + +*** Starting a new branch. + +If you try to lock a version that is not the latest on its branch, +VC asks for confirmation in the minibuffer. If you say no, it offers +to lock the latest version instead. + +*** RCS non-strict locking. + +VC can now handle RCS non-strict locking, too. In this mode, working +files are always writable and you needn't lock the file before making +changes, similar to the default mode under CVS. To enable non-strict +locking for a file, use the "rcs -U" command. + +*** Sharing RCS master files. + +If you share RCS subdirs with other users (through symbolic links), +and you always want to work on the latest version, set +vc-consult-headers to nil and vc-mistrust-permissions to `t'. +Then you see the state of the *latest* version on the mode line, not +that of your working file. When you do a check out, VC overwrites +your working file with the latest version from the master. + +*** RCS customization. + +There is a new variable vc-consult-headers. If it is t (the default), +VC searches for RCS headers in working files (like `$Id$') and +determines the state of the file from them, not from the master file. +This is fast and more reliable when you use branches. (The variable +was already present in Emacs 19.29, but didn't get mentioned in the +NEWS.) + +** Calendar changes. + +*** New calendars supported: Chinese, Coptic, Ethiopic + +Here are the commands for converting to and from these calendars: + + gC: calendar-goto-chinese-date + gk: calendar-goto-coptic-date + ge: calendar-goto-ethiopic-date + + pC: calendar-print-chinese-date + pk: calendar-print-coptic-date + pe: calendar-print-ethiopic-date + +*** Printed calendars + +Calendar mode now has commands to produce fancy printed calendars via +LaTeX. You can ask for a calendar for one or more days, weeks, months +or years. The commands all start with `t'; see the manual for a list +of them. + +*** New sexp diary entry type + +Reminders that apply in the days leading up to an event. + +** The CC-mode package now provides the default C and C++ modes. +See the manual for documentation of its features. + +** The uniquify package chooses buffer names differently when you +visit multiple files with the same name (in different directories). + +** RMAIL now always uses the movemail program when it renames an +inbox file, so that it can interlock properly with the mailer +no matter where it is delivering mail. + +** tex-start-of-header and tex-end-of-header are now regular expressions, +not strings. + +** To enable automatic uncompression of compressed files, +type M-x auto-compression-mode. (This command used to be called +toggle-auto-compression, but was not documented before.) In Lisp, +you can do + + (auto-compression-mode 1) + +to turn the mode on. + +** The new pc-select package emulates the key bindings for cutting and +pasting, and selection of regions, found in Windows, Motif, and the +Macintosh. + +** Help buffers now use a special major mode, Help mode. This mode +normally turns on View mode; it also provides a hook, help-mode-hook, +which you can use for other customization. + +** Apropos now uses faces for enhanced legibility. It now describes +symbol properties as well as their function definitions and variable +values. You can use Mouse-2 or RET to get more information about a +function definition, variable, or property. + +** Font Lock mode + +*** Supports Scheme, TCL and Help modes + +For example, to automatically turn on Font Lock mode in the *Help* +buffer, put: + + (add-hook 'help-mode-hook 'turn-on-font-lock) + +in your ~/.emacs. + +*** Enhanced fontification + +The structure of font-lock-keywords is extended to allow "anchored" keywords. +Typically, a keyword item of font-lock-keywords comprises a regexp to search +for and information to specify how the regexp should be highlighted. However, +the highlighting information is extended so that it can be another keyword +item. This keyword item, its regexp and highlighting information, is processed +before resuming with the keyword item of which it is part. + +For example, a typical keyword item might be: + + ("\\" (0 anchor-face)) + +which fontifies each occurrence of the discrete word "anchor" in the value of +the variable anchor-face. However, the highlighting information can be used to +fontify text that is anchored to the word "anchor". For example: + + ("\\" (0 anchor-face) ("\\=[ ,]*\\(item\\)" nil nil (1 item-face))) + +which fontifies each occurrence of "anchor" as above, but for each occurrence +of "anchor", each occurrence of "item", in any following comma separated list, +is fontified in the value of the variable item-face. Thus the "item" text is +anchored to the "anchor" text. See the variable documentation for further +information. + +This feature is used to extend the level and quality of fontification in a +number of modes. For example, C/C++ modes now have level 3 decoration that +includes the fontification of variable and function names in declaration lists. +In this instance, the "anchor" described in the above example is a type or +class name, and an "item" is a variable or function name. + +*** Fontification levels + +The variables font-lock-maximum-decoration and font-lock-maximum-size are +extended to specify levels and sizes for specific modes. The variable +font-lock-maximum-decoration specifies the preferred level of fontification for +modes that provide multiple levels (typically from "subdued" to "gaudy"). The +variable font-lock-maximum-size specifies the buffer size for which buffer +fontification is suppressed when Font Lock mode is turned on (typically because +it would take too long). + +These variables can now specify values for individual modes, by supplying +lists of mode names and values. For example, to use the above mentioned level +3 decoration for buffers in C/C++ modes, and default decoration otherwise, put: + + (setq font-lock-maximum-decoration '((c-mode . 3) (c++-mode . 3))) + +in your ~/.emacs. Maximum buffer size values for individual modes are +specified in the same way with the variable font-lock-maximum-size. + +*** Font Lock configuration + +The mechanism to provide default settings for Font Lock mode are the variables +font-lock-defaults and font-lock-maximum-decoration. Typically, you should +only need to change the value of font-lock-maximum-decoration. However, to +support Font Lock mode for buffers in modes that currently do not support Font +Lock mode, you should set a buffer local value of font-lock-defaults for that +mode, typically via its mode hook. + +These variables are used by Font Lock mode to set the values of the variables +font-lock-keywords, font-lock-keywords-only, font-lock-syntax-table, +font-lock-beginning-of-syntax-function and font-lock-keywords-case-fold-search. + +You need not set these variables directly, and should not set them yourself +since the underlining mechanism may change in future. + +** Archive mode is now the default mode for various sorts of +archive files (files whose names end with .arc, .lzh, .zip, and .zoo). + +** You can automatically update the years in copyright notice by +means of (add-hook 'write-file-hooks 'copyright-update). +Optionally it can update the GPL version as well. + +** Scripts of various languages (Shell, AWK, Perl, makefiles ...) can +be automatically provided with a magic number and be made executable +by their respective modes under control of various user variables. +The mode must call (executable-set-magic "perl") or +(executable-set-magic "make" "-f"). The latter for example has no +effect on [Mm]akefile. + +** Shell script mode now supports over 15 different shells. The new +command C-c ! executes the region, and optionally beginning of script +as well, by passing them to the shell. + +Cases such as `sh' being a `bash' are now accounted for. +Fontification now also does variables, the magic number and all +builtin commands. Shell script mode no longer mingles `tab-width' and +indentation style. The variable `sh-tab-width' has been renamed to +`sh-indentation'. Empty lines are now indented like previous +non-empty line, rather than just previous line. + +The annoying $ variable prompting has been eliminated. Instead, shell +script mode uses `comint-dynamic-completion' for commands, variables +and filenames. + +** Two-column mode now automatically scrolls both buffers together, +which makes it possible to eliminate the special scrolling commands +that used to do so. + +The commands that operate in two-column mode are no longer bound to +keys outside that mode. f2 o will now position at the same point in +associated buffer. + +the new command f2 RET inserts a newline in both buffers, at point and +at the corresponding position in the associated buffer. + +** Skeleton commands now work smoothly as abbrev definitions. The +element < no longer exists, ' is a new element. + +** The autoinsert insert facility for prefilling empty files as soon +as they are found has been extended to accommodate skeletons or calling +functions. See the function auto-insert. + +** TPU-edt Changes + +Loading tpu-edt no longer turns on tpu-edt mode. In fact, it is no +longer necessary to explicitly load tpu-edt. All you need to do to +turn on tpu-edt is run the tpu-edt function. Here's how to run +tpu-edt instead of loading the file: + + Running Emacs: Type emacs -f tpu-edt + not emacs -l tpu-edt + + Within Emacs: Type M-x tpu-edt + not M-x load-library tpu-edt + + In .emacs: Use (tpu-edt) + not (load "tpu-edt") + +The default name of the tpu-edt X key definition file has changed from +~/.tpu-gnu-keys to ~/.tpu-keys. If you don't rename the file yourself, +tpu-edt will offer to rename it the first time you invoke it under +x-windows. + +** MS-DOS Enhancements: + +*** Better mouse control by adding the following functions [in dosfns.c] +msdos-mouse-enable, msdos-mouse-disable, msdos-mouse-init. + +*** If another foreground/background color than the default is setup in +your ~/_emacs, then the screen briefly flickers with the default +colors before changing to the colors you have specified. To avoid +this, the EMACSCOLORS environment variable exists. It shall be +defined as a string with the following elements: + + set EMACSCOLORS=fb;fb + +The first set of "fb" defines the initial foreground and background +colors using standard dos color numbers (0=black,.., 7=white). +If specified, the second set of "fb" defines the colors which are +restored when you leave emacs. + +*** The new SUSPEND environment variable can now be set as the shell to +use when suspending emacs. This can be used to override the stupid +limitation on the environment of sub-shells in MS-DOS (they are just +large enough to hold the currently defined variables, not leaving +room for more); to overcome this limitation, add this to autoexec.bat: + + set SUSPEND=%COMSPEC% /E:2000 + +** The escape character can now be displayed on X frames. Try +this: + (aset standard-display-table 27 (vector 27)) +after first creating a display table (you can do that by loading +the disp-table library). + +** The new command-line option --eval specifies an expression to evaluate +from the command line. + +** etags has now the ability to tag Perl files. They are recognised +either by the .pm and .pl suffixes or by a first line which starts +with `#!' and specifies a Perl interpreter. The tagged lines are +those beginning with the `sub' keyword. + +New suffixes recognised are .hpp for C++; .f90 for Fortran; .bib, +.ltx, .TeX for TeX (.bbl, .dtx removed); .ml for Lisp; .prolog for +prolog (.pl is now Perl). + +** The files etc/termcap.dat and etc/termcap.ucb have been replaced +with a new, merged, and much more comprehensive termcap file. The +new file should include all the special entries from the old one. +This new file is under active development as part of the ncurses +project. If you have any questions about this file, or problems with +an entry in it, email terminfo@ccil.org. + + +* Lisp changes in Emacs 19.30. + +** New Data Types + +*** There is a new data type called a char-table which is an array +indexed by a character. Currently this is mostly equivalent to a +vector of length 256, but in the future, when a wider character set is +in use, it will be different. To create one, call + (make-char-table SUBTYPE INITIAL-VALUE) + +SUBTYPE is a symbol that identifies the specific use of this +character table. It can be any of these values: + + syntax-table + display-table + keyboard-translate-table + case-table + +The function `char-table-subtype' returns the subtype of a char-table. +You cannot alter the subtype of an existing char-table. + +A char-table has an element for each character code. It also has some +"extra slots". The number of extra slots depends on the subtype and +their use depends on the subtype. (Each subtype symbol has a +`char-table-extra-slots' property that says how many extra slots to +make.) Use (char-table-extra-slot TABLE N) to access extra slot N and +(set-char-table-extra-slot TABLE N VALUE) to store VALUE in slot N. + +A char-table T can have a parent, which should be another char-table +P. If you look for the value in T for character C, and the table T +actually holds nil, P's element for character C is used instead. +The functions `char-table-parent' and `set-char-table-parent' +let you read or set the parent of a char-table. + +To scan all the values in a char-table, do not try to loop through all +possible character codes. That would work for now, but will not work +in the future. Instead, call map-char-table. (map-char-table +FUNCTION TABLE) calls FUNCTION once for each character or character +set that has a distinct value in TABLE. FUNCTION gets two arguments, +RANGE and VALUE. RANGE specifies a range of TABLE that has one +uniform value, and VALUE is the value in TABLE for that range. + +Currently, RANGE is always a vector containing a single character +and it refers to that character alone. In the future, other kinds +of ranges will occur. You can set the value for a given range +with (set-char-table-range TABLE RANGE VALUE) and examine the value +for a range with (char-table-range TABLE RANGE). + +*** Syntax tables are now represented as char-tables. +All syntax tables other than the standard syntax table +normally have the standard syntax table as their parent. +Their subtype is `syntax-table'. + +*** Display tables are now represented as char-tables. +Their subtype is `display-table'. + +*** Case tables are now represented as char-tables. +Their subtype is `case-table'. + +*** The value of keyboard-translate-table may now be a char-table +instead of a string. Normally the char-tables used for this purpose +have the subtype `keyboard-translate-table', but that is not required. + +*** A new data type called a bool-vector is a vector of values +that are either t or nil. To create one, do + (make-bool-vector LENGTH INITIAL-VALUE) + +** You can now specify, for each marker, how it should relocate when +text is inserted at the place where the marker points. This is called +the "insertion type" of the marker. + +To set the insertion type, do (set-marker-insertion-type MARKER TYPE). +If TYPE is t, it means the marker advances when text is inserted. If +TYPE is nil, it means the marker does not advance. (In Emacs 19.29, +markers did not advance.) + +The function marker-insertion-type reports the insertion type of a +given marker. The function copy-marker takes a second argument TYPE +which specifies the insertion type of the new copied marker. + +** When you create an overlay, you can specify the insertion type of +the beginning and of the end. To do this, you can use two new +arguments to make-overlay: front-advance and rear-advance. + +** The new function overlays-in returns a list of the overlays that +overlap a specified range of the buffer. The returned list includes +empty overlays at the beginning of this range, as well as within the +range. + +** The new hook window-scroll-functions is run when a window has been +scrolled. The functions in this list are called just before +redisplay, after the new window-start has been computed. Each function +is called with two arguments--the window that has been scrolled, and its +new window-start position. + +This hook is useful for on-the-fly fontification and other features +that affect how the redisplayed text will look when it is displayed. + +The window-end value of the window is not valid when these functions +are called. The computation of window-end is byproduct of actual +redisplay of the window contents, which means it has not yet happened +when the hook is run. Computing window-end specially in advance for +the sake of these functions would cause a slowdown. + +The hook functions can determine where the text on the window will end +by calling vertical-motion starting with the window-start position. + +** The new hook redisplay-end-trigger-functions is run whenever +redisplay in window uses text that extends past a specified end +trigger position. You set the end trigger position with the function +set-window-redisplay-end-trigger. The functions are called with two +arguments: the window, and the end trigger position. Storing nil for +the end trigger position turns off the feature, and the trigger value +is automatically reset to nil just after the hook is run. + +You can use the function window-redisplay-end-trigger to read a +window's current end trigger value. + +** The new function insert-file-contents-literally inserts the +contents of a file without any character set translation or decoding. + +** The new function safe-length computes the length of a list. +It never gets an error--it treats any non-list like nil. +If given a circular list, it returns an upper bound for the number +of elements before the circularity. + +** replace-match now takes a fifth argument, SUBEXP. If SUBEXP is +non-nil, that says to replace just subexpression number SUBEXP of the +regexp that was matched, not the entire match. For example, after +matching `foo \(ba*r\)' calling replace-match with 1 as SUBEXP means +to replace just the text that matched `\(ba*r\)'. + +** The new keymap special-event-map defines bindings for certain +events that should be handled at a very low level--as soon as they +are read. The read-event function processes these events itself, +and never returns them. + +Events that are handled in this way do not echo, they are never +grouped into key sequences, and they never appear in the value of +last-command-event or (this-command-keys). They do not discard a +numeric argument, they cannot be unread with unread-command-events, +they may not appear in a keyboard macro, and they are not recorded +in a keyboard macro while you are defining one. + +These events do, however, appear in last-input-event immediately after +they are read, and this is the way for the event's definition to find +the actual event. + +The events types iconify-frame, make-frame-visible and delete-frame +are normally handled in this way. + +** encode-time now supports simple date arithmetic by means of +out-of-range values for its SEC, MINUTE, HOUR, DAY, and MONTH +arguments; for example, day 0 means the day preceding the given month. +Also, the ZONE argument can now be a TZ-style string. + +** command-execute and call-interactively now accept an optional third +argument KEYS. If specified and non-nil, this specifies the key +sequence containing the events that were used to invoke the command. + +** The environment variable NAME, if set, now specifies the value of +(user-full-name), when Emacs starts up. + + + +* User Editing Changes in Emacs 19.29 + +** If you run out of memory. + +If you get the error message "Virtual memory exhausted", type C-x s. +That way of saving files has the least additional memory needs. Emacs +19.29 keeps a reserve of memory which it makes available when this +error happens; that is to ensure that C-x s can complete its work. + +Once you have saved your data, you can exit and restart Emacs, or use +M-x kill-some-buffers to free up space. If you kill buffers +containing a substantial amount of text, you can go on editing. + +Do not use M-x buffer-menu to save or kill buffers when you are out of +memory, because that needs a fair amount memory itself and you may not +have enough to get it started. + +** The format of compiled files has changed incompatibly. + +Byte-compiled files made with Emacs 19.29 normally use a new format +that will not work in older Emacs versions. You can compile files +in the old format if you wish; see "Changes in compilation," below. + +** Emacs 19.29 supports the DEC Alpha. + +** Emacs runs on Windows NT. + +This port does not yet support windowing features. It works like a +text-only terminal, but it does support a mouse. + +In general, support for non-GNU-like operating systems is not a high +priority for the GNU project. We merged in the support for Windows NT +because that system is expected to be very widely used. + +** Emacs supports Motif widgets. + +You can build Emacs with Motif widgets by specifying --with-x-toolkit=motif +when you run configure. + +Motif defines collections of windows called "tab groups", and uses the +tab key and the cursor keys to move between windows in a tab group. +Emacs naturally does not support this--it has other uses for the tab +key and cursor keys. Emacs does not support Motif accelerators either, +because it uses its normal keymap event binding features. + +We give higher priority to operation with a free widget set than to +operation with a proprietary one. + +** If Emacs or the computer crashes, you can recover all the files you +were editing from their auto save files by typing M-x recover-session. +This first shows you a list of recorded interrupted sessions. Move +point to the one you choose, and type C-c C-c. + +Then recover-session asks about each of the files that were being +edited during that session, asking whether to recover that file. If +you answer y, it calls recover-file, which works in its normal +fashion. It shows the dates of the original file and its auto-save +file and asks once again whether to recover that file. + +When recover-session is done, the files you've chosen to recover +are present in Emacs buffers. You should then save them. +Only this--saving them--updates the files themselves. + +** Menu bar menus now stay up if you click on the menu bar item and +release the mouse button within a certain amount of time. This is in +the X Toolkit version. + +** The menu bar menus have been rearranged and split up to make for a +better organization. Two new menu bar menus, Tools and Search, +contain items that were formerly in the Files and Edit menus, as well +as some that did not exist in the menu bar menus before. + +** Emacs can now display on more than one X display at the same time. +Use the command make-frame-on-display to create a frame, specifying +which display to use. + +** M-x talk-connect sets up a multi-user talk connection +via Emacs. Specify the X display of the person you want to talk to. +You can talk to any number of people (within reason) by using +this command repeatedly to specify different people. + +Emacs does not make a fuss about security; the people who you talk to +can use all Emacs features, including visiting and editing files. If +this frightens you, don't use M-x talk-connect. + +** The range of integer values is now at least 2**28 on all machines. +This means the maximum size of a buffer is at least 2**27-1, +or 134,217,727. + +** When you start Emacs, you can now specify option names in +long GNU form (starting with `--') and you can abbreviate the names. + +You can now specify the options in any order. +The previous requirements about the order of options +have been eliminated. + +The -L or --directory option lets you specify an additional +directory to search for Lisp libraries (including libraries +that you specify with the -l or --load options). + +** Incremental search in Transient Mark mode, if the mark is already +active, now leaves the mark active and does not change its position. +You can make incremental search deactivate the mark once again with +this expression. + + (add-hook 'isearch-mode-hook 'deactivate-mark) + +** C-delete now deletes a word backwards. This is for compatibility +with some editors in the PC world. (This key is not available on +ordinary ASCII terminals, because C-delete is not a distinct character +on those terminals.) + +** ESC ESC ESC is now a command to escape from various temporary modes +and states. + +** M-x pc-bindings-mode sets up bindings compatible with many PC editors. +In particular, Delete and its variants delete forward instead of backward. +Use Backspace to delete backward. + +C-Backspace kills backward a word (as C-Delete normally would). +M-Backspace does undo. +Home and End move to beginning and end of line +C-Home and C-End move to beginning and end of buffer. + +** The key sequence for evaluating a Lisp expression using the minibuffer +is now ESC :. It used to be ESC ESC, but we moved it to make way for +the ESC ESC ESC feature, on the grounds that people who evaluate Lisp +expressions are experienced users and can cope with a change. +If you prefer the old ESC ESC binding, put in your `~/.emacs': + + (global-set-key "\e\e" 'eval-expression) + +** The f1 function key is now equivalent to the help key. This is +done with key-translation-map; delete the binding for f1 in that map +if you want to use f1 for something else. + +** Mouse-3, in the simplest case, still sets the region. But now, it +places the mark where point was, and sets point where you click. +(It used to set the mark where you click and leave point alone.) + +If you position point with Mouse-1, then scroll with the scroll bar +and use Mouse-3, Mouse-3 uses the position you specified with Mouse-1 +even if it has scrolled off the screen (and point is no longer there). +This makes it easier to select a region with the mouse which is bigger +than a screenful. + +Any editing of the buffer, and any cursor motion or scrolling for any +reason other than the scroll bar, cancels the special state set up by +Mouse-1--so that a subsequent Mouse-3 click will use the actual value +of point. + +** C-mouse-3 now pops up a mode-specific menu of commands--normally +the same ones available in the mode's own menu bar menus. + +** C-mouse-2 now pops up a menu of faces, indentation, justification, +and certain other text properties. This menu is also available +through the menu-bar Edit menu. It is meant for use with Enriched +mode. + +*** You can use this menu to change the face of the region. +You can also set the face of the region with the new M-g command. + +*** The menu also includes commands for indenting the region, +which locally changes the values of left-margin and fill-column that +are used. + +*** All fill functions now indent every line to the left-margin. If +there is also a fill-prefix, that goes after the margin indentation. + +*** Open-line and newline also make sure that the lines they create +are indented to the left margin. + +*** It also allows you to set the "justification" of the region: +whether it should be centered, flush right, and so forth. The fill +functions (including auto-fill-mode) will maintain the justification +and indentation that you request. + +*** The new function `list-colors-display' shows you what colors are +available. This is also accessible from the C-mouse-2 menu. + +** You can now save and load files including their faces and other +text-properties by using Enriched-mode. Files are saved in an +extended version of the MIME text/enriched format. You can use the +menus described above, or M-g and other keyboard commands, to +alter the formatting information. + +** C-mouse-1 now pops up the menu for changing the frame's default font. + +** You can input Hyper, Super, Meta, and Alt characters, as well as +non-ASCII control characters, on an ASCII-only terminal. +To do this, use + + C-x @ h -- hyper + C-x @ s -- super + C-x @ m -- meta + C-x @ a -- alt + C-x @ S -- shift + C-x @ c -- control + +These are not ordinary key sequences; they operate through +function-key-map, which means they can be used even in the +middle of an ordinary key sequence. + +** Outline minor mode and Hideif mode now use C-c @ as their prefix +character. + +** Echo area messages are now logged in the "*Messages*" buffer. The +size of this buffer is limited to message-log-max lines. + +** RET in various special modes for read-only buffers that contain +lists of items now selects the item point is on. These modes include +Dired, Compilation buffers, Buffer-menu, Tar mode, and Occur mode. +(In Info, RET follows the reference near point; in completion list +buffers, RET chooses the completion around point.) + +** set-background-color now updates the modeline face in a special +way. If that face was previously set up to be reverse video, the +reverse of the default face, then set-background-color updates it so +that it remains the reverse of the default face. + +** The functions raise-frame and lower-frame are now commands. +When used interactively, they apply to the selected frame. + +** M-x buffer-menu now displays the buffer list in the selected window. +Use M-x buffer-menu-other-window to display it in another window. + +** M-w followed by a kill command now *does not* append the text in +the kill ring. In consequence, M-w followed by C-w works as you would +expect: it leaves the top of the kill ring matching the region that +you killed. + +** In Lisp mode, the C-M-x command now executes defvar forms in a +special way: it unconditionally sets the variable to the specified +default value, if there is one. Normal execution of defvar does not +alter the variable if it already has a non-void value. + +** In completion list buffers, the left and right arrow keys run the +new commands previous-completion and next-completion. They move one +completion at a time. + +** While doing completion in the minibuffer, the `prior' or `pageup' +key switches to the completion list window. + +** When you exit the minibuffer with empty contents, the empty string +is not put in the minibuffer history. + +** The default buffer for insert-buffer is now the "first" buffer +other than the current one. If you have more than one window, this +is a buffer visible in another window. (Usually it is the buffer +that C-M-v would scroll.) + +** The etags program is now capable of recording tags based on regular +expressions provided on the command line. + +This new feature allows easy support for constructs not normally +handled by etags, such as the macros frequently used in big C/C++ +projects to define project-specific structures. It also enables the +use of etags and TAGS files for languages not supported by etags. + +The Emacs manual section on Tags contains explanations and examples +for Emacs's DEFVAR, VHDL, Cobol, Postscript and TCL. + +** Various mode-specific commands that used to be bound to C-c LETTER +have been moved. + +*** In gnus-uu mode, gnus-uu-interactive-scan-directory is now on C-c C-d, +and gnus-uu-interactive-save-current-file is on C-c C-z. + +*** In Scribe mode, scribe-insert-environment is now on C-c C-v, +scribe-chapter is on C-c C-c, scribe-subsection is on C-c C-s, +scribe-section is on C-c C-t, scribe-bracket-region-be is on C-c C-e, +scribe-italicize-word is on C-c C-i, scribe-bold-word is on C-c C-b, +and scribe-underline-word is on C-c C-u. + +*** In Gomoku mode, gomoku-human-takes-back is now on C-c C-b, +gomoku-human-plays is on C-c C-p, gomoku-human-resigns is on C-c C-r, +and gomoku-emacs-plays is on C-c C-e. + +*** In the Outline mode defined in allout.el, +outline-rebullet-current-heading is now on C-c *. + +** M-s in Info now searches through the nodes of the Info file, +just like s. The alias M-s was added so that you can use the same +command for searches in both Info and Rmail. + +** iso-acc.el now lets you enter inverted-! and inverted-? +with the sequences ~! and ~?. + +** M-x compare-windows now pushes mark in both windows before +it starts moving point. + +** There are two new commands in Dired, A (dired-do-search) +and Q (dired-do-query-replace). These are similar to tags-search and +tags-query-replace, but instead of searching the list of files that +appears in a tags table, they search all the files marked in Dired. + +** Changes to dabbrev. + +A new function, `dabbrev-completion' (bound to M-C-/), expands the +unique part of an abbreviation. + +Dabbrev now looks for expansions in other buffers, looks for symbols +instead of words and it works in the minibuffer. + +Dabbrev can be customized to work for shell scripts, with variables +that sometimes have and sometimes haven't a leading "$". See the +variable 'dabbrev-abbrev-skip-leading-regexp'. + +** In Rmail, the command rmail-input-menu has been eliminated. The +feature of selecting an Rmail file from a menu is now implemented in +another way. + +** Bookmarks changes. + +*** It now works to set bookmarks in Info nodes. + +*** Bookmarks can have annotations; type "C-h m" after doing +"M-x list-bookmarks", for more information on annotations. + +*** The bookmark-jump popup menu function is now `bookmark-menu-jump', for +those who bind it to a mouse click. + +*** The default bookmarks file name is now "~/.emacs.bmk". If you +already have a bookmarks file, it will be renamed automagically when +you next load it. + +** New package, ps-print. + +The ps-print package generates PostScript printouts of buffers or +regions, and includes face attributes such as color, underlining, +boldface and italics in the printed output. + +** New package, msb. + +The msb package provides a buffer-menu in the menubar with separate +menus for different types of buffers. + +** `cpp.el' is a new library that can highlight or hide parts of a C +file according to C preprocessor conditionals. To try it, run the +command M-x cpp-highlight-buffer. + +** Changes in CC mode. + +*** c-set-offset and related functions and variables can now accept +variable symbols. Also ++ and -- which mean 2* positive and negative +c-basic-offset respectively. + +*** New variable, c-recognize-knr-p, which controls whether K&R C +constructs will be recognized. Trying to recognize K&R constructs is a +time hog so if you're programming strictly in ANSI C, set this +variable to nil (it should already be nil in c++-mode). + +*** New variable, c-hanging-comment-ender-p for controlling +c-fill-paragraph's behavior. + +*** New syntactic symbol: statement-case-open. This is assigned to lines +containing an open brace just after a case/default label. + +*** New variable, c-progress-interval, which controls minibuffer update +message displays during long re-indention. This is a new feature +which prints percentage complete messages at specified intervals. + +** Makefile mode changes. + +*** The electric keys are not enabled by default. + +*** There is now a mode-specific menu bar menu. + +*** The mode supports font-lock, add-log, and imenu. + +*** The command M-TAB does completion of target names and variable names. + +** icomplete.el now works more like a minor mode. Use M-x icomplete-mode +to turn it on and off. + +Icomplete now supports an `icomplete-minibuffer-setup-hook', which is +run on minibuffer setup whenever icompletion will be occurring. This +hook can be used to customize interoperation of icomplete with other +minibuffer-specific packages, eg rsz-mini. See the doc string for +more info. + +** Ediff change. + +Use ediff-revision instead of vc-ediff. It also replaces rcs-ediff, +for those who use that; if you want to use a version control package +other than vc.el, you must set the variable +ediff-version-control-package to specify which package. + +** VC now supports branches with RCS. + +You can use C-u C-x C-q to select any branch or version by number. +It reads the version number or branch number with the minibuffer, +then checks out the file unlocked. + +Type C-x C-q again to lock the selected branch or version. +When you check in changes to that branch or version, there are two +possibilities: + +-- If you've selected a branch, or a version at the tip of a branch, +then the new version adds to that branch. If you wish to create a +new branch, use C-u C-x C-q to specify a version number when you check +in the new version. + +-- If you've selected an inner version which is not the latest in its +branch, then the new version automatically creates a new branch. + +** VC now supports CVS as well as RCS and SCCS. + +Since there are no locks in CVS, some things behave slightly +different when the backend is CVS. When vc-next-action is invoked +in a directory handled by CVS, it does the following: + + If the file is not already registered, this registers it for version +control. This does a "cvs add", but no "cvs commit". + If the file is added but not committed, it is committed. + If the file has not been changed, neither in your working area or +in the repository, a message is printed and nothing is done. + If your working file is changed, but the repository file is +unchanged, this pops up a buffer for entry of a log message; when you +finish the log message with C-c C-c, that checks in the resulting +changes along with the log message as change commentary. A writable +file remains in existence. + + If vc-next-action changes the repository file, it asks you +whether to merge in the changes into your working copy. + +vc-directory, when started in a CVS file hierarchy, reports +all files that are modified (and thus need to be committed). +(When the backend is RCS or SCCS vc-directory reports all +locked files). + +VC has no support for running the initial "cvs checkout" to get a +working copy of a module. You can only use VC in a working copy of +a module. + +You can disable the CVS support as follows: + + (setq vc-master-templates (delq 'vc-find-cvs-master vc-master-templates)) + +or by setting vc-handle-cvs to nil. + +This may be desirable if you run a non-standard version of CVS, or +if CVS was compiled with FORCE_USE_EDITOR or (possibly) +RELATIVE_REPOS. + +** Comint and shell mode changes: + +*** Completion works with file names containing quoted characters. + +File names containing special characters (such as " ", "!", etc.) that are +quoted with a "\" character are recognised during completion. Special +characters are quoted when they are inserted during completion. + +*** You can use M-x comint-truncate-buffer to truncate the buffer. + +When this command is run, the buffer is truncated to a maximum number +of lines, specified by the variable comint-buffer-maximum-size. Just +like the command comint-strip-ctrl-m, this can be run automatically +during process output by doing this: + +(add-hook 'comint-output-filter-functions + 'comint-truncate-buffer) + +** Telnet mode buffer name changed. + +The buffer name for a Telnet buffer is now *telnet-HOST*, not + *HOST-telnet*. This is for consistency with other Emacs packages. + +** M-x man (man) is now faster and more robust. On systems where the +entire man page is indented, the indentation is removed. + +The user option names that used to end in -p now end in -flag. The +new names are: Man-reuse-okay-flag, Man-downcase-section-letters-flag, +Man-circular-pages-flag. The Man-notify user option has been renamed to +Man-notify-method and accepts one more value, `pushy', that just +switches the current buffer to the manpage buffer, without switching +frames nor changing your windows configuration. + +A new user option Man-fontify-manpage-flag disables fontification +(thus speeding up man) when set to nil. Default is to fontify if a +window system is used. Two new user options Man-overstrike-face +(default 'bold) and Man-underline-face (default 'underline) can be set +to the preferred faces to be used for the words that man overstrikes +and underlines. Useful for those who like coloured man pages. + +Two new interactive functions are provided: Man-cleanup-manpage and +Man-fontify-manpage. Both can be used on a buffer that contains the +output of a `rsh host man manpage' command, or the output of an +`nroff -man -Tman manpage' command to make them readable. +Man-cleanup-manpage is faster, but does not fontify. + +** The new function modify-face makes it easy to specify +all the attributes of a face, all at once. + +** Faces now support background stippling. + +Use the command set-face-stipple to specify the stipple-pattern for a +face. Use face-stipple to access the specified stipple pattern. The +existing face functions now handle the stipple pattern when +appropriate. + +If you specify one of the standard gray colors as a face background +color, and your display doesn't handle gray, Emacs automatically uses +stipple instead to get the same effect. + +** Changes in Font Lock mode. + +*** Fontification + +Two new default faces are provided; `font-lock-variable-name-face' and +`font-lock-reference-face'. The face `font-lock-doc-string-face' has +been removed since it is the same as the existing +`font-lock-string-face'. Where appropriate, fontification +automatically uses these new faces. + +Fontification via commands `font-lock-mode' and +`font-lock-fontify-buffer' is now cleanly interruptible (i.e., with +C-g). If you interrupt during the fontification process, the buffer +remains in its previous modified state and all highlighting is removed +from the buffer. + +For C/C++ modes, Font Lock mode is much faster but highlights much +more. Other modes are faster/more extensive/more discriminatory, or a +combination of these. + +To enable Font Lock mode, add the new function `turn-on-font-lock' in +one of the following ways: + + (add-hook 'c-mode-hook 'turn-on-font-lock) + +Or for any visited file with: + + (add-hook 'find-file-hooks 'turn-on-font-lock) + +*** Supports color and grayscale displays + +Font Lock mode supports different ways of highlighting, depending on +the type of display and background shade. Attributes (face color, +bold, italic and underline, and display type and background mode) can +be controlled either from Emacs Lisp or X resources. + +See the new variables `font-lock-display-type' and +`font-lock-face-attributes'. + +*** Supports more modes + +The following modes are directly supported: + +ada-mode, asm-mode, bibtex-mode, c++-c-mode, c++-mode, c-mode, +change-log-mode, compilation-mode, dired-mode, emacs-lisp-mode, +fortran-mode, latex-mode, lisp-mode, mail-mode, makefile-mode, +outline-mode, pascal-mode, perl-mode, plain-tex-mode, rmail-mode, +rmail-summary-mode, scheme-mode, shell-mode, slitex-mode, tex-mode, +texinfo-mode. + +See the new variables `font-lock-defaults-alist' and +`font-lock-defaults'. + +Some modes support different levels of fontification. You can choose +to use the minimum or maximum available decoration by changing the +value of the new variable `font-lock-maximum-decoration'. + +Programmers are urged to make available to the community their own +keywords for modes not yet supported. See font-lock.el for +information about efficiency. + +*** fast-lock + +The fast-lock package speeds up Font Lock mode by saving font choices +in associated cache files. When you visit a file with Font Lock mode +and Fast Lock mode turned on for the first time, the file's buffer is +fontified as normal. When certain events occur (such as exiting +Emacs), Fast Lock saves the highlighting in a cache file. When you +subsequently visit this file, its cache is used to restore the +highlighting. + +To use this package, put in your `~/.emacs': + + (add-hook 'font-lock-mode-hook 'turn-on-fast-lock) + +To control the use of caches, see the documentation for `fast-lock-mode'. + +** You can tell pop-to-buffer to display certain buffers in the selected +window rather than finding some other window to display them in. +There are two variables you can use to specify these buffers. + +same-window-buffer-names holds a list of buffer names; if a buffer's +name appears in this list, pop-to-buffer puts it in the selected window. + +same-window-regexps holds a list of regexps--if any one of them +matches a buffer's name, then pop-to-buffer puts that buffer in the +selected window. + +The default values of these variables are not nil: they list various +buffers that normally appear, when you as for them, in the selected +window. These include shell buffers, mail buffers, telnet buffers, +and others. By removing elements from these variables, you can ask +Emacs to display those buffers in separate windows. + +** The special-display-buffer-names and special-display-regexps lists +have been generalized. An element may now be a list. The car of the list +is the buffer name or regular expression for matching buffer names. + +The cdr of the list can be an alist specifying additional frame +parameters for use in constructing the special display frame. + +Alternatively, the cdr can have this form: + + (FUNCTION ARGS...) + +where FUNCTION is a symbol. Then the frame is constructed by calling +FUNCTION; its first argument is the buffer, and its remaining +arguments are ARGS. + +** If the environment variable REPLYTO is set, its value is the default +for mail-default-reply-to. + +** When you send a message in Emacs, if you specify an Rmail file with +the FCC: header field, Emacs converts the message to Rmail format +before writing it. Thus, the file never contains anything but Rmail +format messages. + +** The new variable mail-from-style controls whether the From: header +should include the sender's full name, and if so, which format to use. + +** The new variable mail-personal-alias-file specifies the name of the +user's personal aliases. This defaults to the file ~/.mailrc. +mailabbrev.el used to have its own variable for this purpose +(mail-abbrev-mailrc-file). That variable is no longer used. + +** In Buffer-Menu mode, the d and C-d commands (which mark buffers for +deletion) now accept a prefix argument which serves as a repeat count. + +** Changes in BibTeX mode. + +*** Reference keys can now be entered with TAB completion. All +reference keys defined in that buffer and all labels that appear in +crossreference entries are object to completion. + +*** Braces are supported as field delimiters in addition to quotes. +BibTeX entries may have brace-delimited and quote-delimited fields +intermixed. The delimiters generated for new entries are specified by +the variables bibtex-field-left-delimiter and +bibtex-field-right-delimiter on a buffer-local basis. Those variables +default to braces, since it is easier to put quote accented characters +(as the german umlauts) into a brace-delimited entry. + +*** The function bibtex-clean-entry can now be invoked with a prefix +argument. In this case, a label is automatically generated from +various fields in the record. If bibtex-clean-entry is invoked on a +record without label, a label is also generated automatically. +Various variables (all beginning with `bibtex-autokey-') control the +creation of that key. The variable bibtex-autokey-edit-before-use +determines, if the user is allowed to edit auto-generated reference +keys before they are used. + +*** A New function bibtex-complete-string completes strings with +respect to the strings defined in this buffer and a set of predefined +strings (initialized to the string macros defined in the standard +BibTeX style files) in the same way in which ispell-complete-word +works with respect to words in a dictionary. Candidates for +bibtex-complete-string are initialized from variable +bibtex-predefined-strings and by parsing the files found in +bibtex-string-files for @String definitions. + +*** Every reference/field pair has now attached a comment which +appears in the echo area when this field is edited. These comments +should provide useful hints for BibTeX usage, especially for BibTeX +beginners. New variable bibtex-help-message determines if these help +messages are to appear in the minibuffer when moving to a text entry. + +*** Inscriptions of menu bar changed from "Entry Types" to +"Entry-Types" and "Bibtex Edit" to "BibTeX-Edit". + +*** The variable bibtex-include-OPTcrossref is now not longer a binary +switch but a list of reference names which should contain a crossref +field. E.g., you can tell bibtex-mode you want a crossref field for +@InProceedings and @InBook entries but for no other. + +*** The function validate-bibtex-buffer was completely rewritten to +validate if a buffer is syntactically correct. find-bibtex-duplicates +is no longer a function itself but was moved into +validate-bibtex-buffer. + +*** Cleaning a BibTeX entry tests, if necessary fields are there. +E.g., if you tell bibtex-mode to include a crossref entry, some fields +are optional which would be required without the crossref entry. If +you now leave the crossref entry empty and do a bibtex-clean-entry +with some now required fields left empty, version 2.0 of bibtex.el +complains about the absence of these fields, whereas version 1.3 +didn't. + +*** Default value for variables bibtex-maintain-sorted-entries and +bibtex-sort-ignore-string-entries is now t. + +*** All interactive functions are renamed to begin with `bibtex-'. + +*** Keybindings with \C-c\C-e entry changed for unification. Often +used reference types are now on control-modified keys, mediocre used +types are on unmodified keys, seldom used types are on shift-modified +keys and almost never used types on meta-modified keys. + + +* Configuration Changes in Emacs 19.29 + +** Emacs now uses directory /usr/local/share for most of its installed +files. This follows a GNU convention for directory usage. + +** The option --with-x11 is no longer supported. +X11 is the only version of X that Emacs 19.29 supports; +use --with-x if you need to request X support explicitly. +(Normally this should not be necessary, since configure should +automatically enable X support if X is installed on your machine.) + +** If you use the site-init.el file to set the variable +mail-host-address to a string in the dumped Emacs, that string becomes +the default host address for initializing user-mail-address. +It is used instead of the value of (system-name). + + +* Lisp-Level Changes in Emacs 19.29 + +** Basic Lisp + +*** The range of integer values is now at least 2**28 on all machines. +This means the maximum size of a buffer is at least 2**27-1, +or 134,217,727. + +*** You can now use Common Lisp syntax for the backquote and comma +macros. Thus, you can now write `(x ,y z) instead of (` (x (, y) z)). + +The old syntax is still accepted. + +*** The new function rassoc is like assoc, except that it compares the +key against the cdr of each alist element, where assoc would compare +it against the car of each alist element. + +*** The new function unintern deletes a symbol from an obarray. The +first argument can be the symbol to delete, or a string giving its +name. The second argument specifies the obarray (nil means the +current default obarray). + +If the specified symbol is not in the obarray, or if there's no symbol +in the obarray matching the specified string, unintern does nothing +and returns nil. If it does delete a symbol, it returns t. + +*** You can specify an alternative read function for use by load and +eval-region by binding the variable load-read-function to some other +function. This function should accept one argument just like read. +If load-read-function is nil, load and eval-region use ordinary read. + +*** The new function `type-of' takes any object as argument, and +returns a symbol identifying the type of that object--one of `symbol', +`integer', `float', `string', `cons', `vector', `marker', `overlay', +`window', `buffer', `subr', `compiled-function', +`window-configuration', `process'. + +*** When you use eval-after-load for a file that is already loaded, it +executes the FORM right away. As before, if the file is not yet +loaded, it arranges to execute FORM if and when the file is loaded +later. The result is: if you have called eval-after-load for a file, +and if that file has been loaded, then regardless of the order of +these two events, the specified form has been evaluated. + +*** The Lisp construct #@NUMBER now skips the next NUMBER characters, +treating them as a comment. + +You would not want to use this in a file you edit by hand, but it is +useful for commenting out parts of machine-generated files. + +*** Two new functions, `plist-get' and `plist-put', +allow you to modify and retrieve values from lists formatted as property-lists. +They work like `get' and `put', but operate on any list. +`plist-put' returns the modified property-list; you must store it +back where you got it. + +*** The new function add-to-list is called with two elements, +a variable that holds a list and a new element. +It adds the element to the list unless it is already present. +It compares elements using `equal'. Here is an example: + +(setq foo '(a b)) => (a b) + +(add-to-list 'foo 'c) => (c a b) + +(add-to-list 'foo 'b) => (c a b) + +foo => (c a b) + +** Changes in compilation. + +Functions and variables loaded from a byte-compiled file +now refer to the file for their doc strings. + +This has a few consequences: + +-- Loading the file is faster and uses less memory. +-- Reference to doc strings is a little slower (the same speed + as reference to the doc strings of primitive and preloaded functions). +-- The compiled files will not work in old versions of Emacs. +-- If you move the compiled file after loading it, Emacs can no longer + find these doc strings. +-- If you alter the compiled file (such as by compiling a new + version), then further access to documentation strings will get + nonsense results. + +The byte compiler now optionally supports lazy loading of compiled +functions' definitions. If you enable this feature when you compile, +loading the compiled file does not actually bring the function +definitions into core. Instead it creates references to the compiled +file, and brings each function's definition into core the first time +you call that function, or when you force it with the new function +`fetch-bytecode'. + +Using the lazy loading feature has a few consequences: + +-- Loading the file is faster and uses less memory. +-- Calling any function in the file for the first time is slower. +-- If you move the compiled file after loading it, Emacs can no longer + find the function definitions. +-- If you alter the compiled file (such as by compiling a new + version), then further access to functions not already loaded + will get nonsense results. + +To enable the lazy loading feature, set up a non-nil file local +variable binding for the variable `byte-compile-dynamic' in the Lisp +source file. For example, put this on the first line: + + -*-byte-compile-dynamic: t;-*- + +It's a good idea to use the lazy loading feature for a file that +contains many functions, most of which are not actually used by a +given user in a given session. + +To turn off the basic feature of referring to the file for doc +strings, set byte-compile-dynamic-docstrings to nil. You can do this +globally, or for one source file by adding this to the first line: + + -*-byte-compile-dynamic-docstrings: nil;-*- + +** Strings + +*** Do not pass integer arguments to `concat' (or `vconcat' or +`append'). We are phasing out the old unrecommended support for +integers as arguments to these functions, in preparation for treating +numbers as single characters in a future release. To concatenate +numbers in string form, use `number-to-string' first, or rewrite the +call to use `format' instead of `concat'. + +*** The new function match-string returns the string of text matched at +the given parenthesized expression by the last regexp search, or nil +if there was no match. If the last match was by `string-match' on a +string, the string must be given. Therefore, this function can be +used in place of `buffer-substring' and `substring', when using +`match-beginning' and `match-end' to find match positions. + + (match-string N) or (match-string N STRING) + +*** The function replace-match now accepts an optional fourth argument, +STRING. Use this after performing string-match on STRING, to replace +the portion of STRING that was matched. When used in this way, +replace-match returns a newly created string which is the same as +STRING except for the matched portion. + +*** The new function buffer-substring-no-properties +is like buffer-substring except that the string it returns +has no text properties. + +*** The function `equal' now considers two strings to be different +if they don't have the same text properties. + +** Completion + +*** all-completions now takes an optional fourth argument. +If that argument is non-nil, completions that start with a space +are ignored unless the initial string also starts with a space. +(This used to happen unconditionally.) + +** Local Variables + +*** Local hook variables. + +There is now a clean way to give a hook variable a buffer-local value. +Call the function `make-local-hook' to do this. + +Once a hook variable is buffer-local, you can add hooks to it either +globally or locally. run-hooks runs the local hook functions +of the current buffer, then all the global hook functions. + +The functions add-hook and remove-hook take an additional optional +argument LOCAL which says whether to add (or remove) a local hook +function or a global one. + +Local hooks use t as an element of the (local) value of the hook +variable as a flag meaning to use the global value also. + +*** The new function local-variable-p tells you whether a particular +variable is buffer-local in the current buffer or a specified buffer. + +** Editing Facilities + +*** The function copy-region-as-kill no longer sets this-command; +as a result, a following kill command will not normally append +to the text saved by copy-region-as-kill. + +*** Regular expression searching and matching no longer performs full +Posix backtracking by default. They now stop with the first match found +instead of looking for the longest match--just as they did in Emacs 18. +The reason for this change is to get higher speed. + +There are new functions you can use if you really want to search or +match with Posix behavior: posix-search-forward, +posix-search-backward, posix-looking-at, and posix-string-match. Call +these just like re-search-forward, re-search-backward, looking-at, and +string-match. + +** Files + +*** The new variable `format-alist' defines file formats, +which are ways of translating between the data in a file and things +(text, text-properties, and possibly other information) in a buffer. + +`format-alist' has one element for each format. Each element is a +list like this: + (NAME DOC-STRING REGEXP FROM-FN TO-FN MODIFY MODE-FN) +containing the name of the format, a documentation string, a regular +expression which is used to recognize files in that format, a decoding +function, an encoding function, a flag that indicates whether the +encoding function modifies the buffer, and a mode function. + +FROM-FN is called to decode files in that format; it gets two args, BEGIN + and END, and can make any modifications it likes, returning the new + end position. It must make sure that the beginning of the file no + longer matches REGEXP, or else it will get called again. +TO-FN is called to encode a region into that format; it is also passed BEGIN + and END, and either returns a list of annotations as in + `write-region-annotate-functions', or modifies the region and returns + the new end position. +MODIFY, if non-nil, means the TO-FN modifies the region. If nil, TO-FN may + not make any changes and should return a list of annotations. + +`insert-file-contents' checks the beginning of the file that it is +inserting to see if it matches one of the regexps. If so, then it +calls the decoding function, and then looks for another match. When +visiting a file, it also calls the mode function, and sets the +variable `buffer-file-format' to the list of formats that the file +used. + +`write-region' calls the encoding functions for each format in +`buffer-file-format' before it writes the file. To save a file in a +different format, either set `buffer-file-format' to a different +value, or call the new function `format-write-file'. + +Since some encoding functions may be slow, you can request that +auto-save use a format different from the buffer's default by setting +the variable `auto-save-file-format' to the desired format. This will +determine the format of all auto-save files. + +*** The new function file-ownership-preserved-p tells you whether +deleting a file and recreating it would keep the file's owner +unchanged. + +*** The new function file-regular-p returns t if a file +is a "regular" file (not a directory, symlink, named pipe, +terminal, or other I/O device). + +*** The new function file-name-sans-extension discards the extension +of a file name. You call it with a file name, and returns a string +lacking the extension. + +*** The variable path-separator is a string which says which +character separates directories in a search path. It is ":" +for Unix and GNU systems, ";" for MSDOG and Windows NT. + +** Commands and Key Sequences + +*** Key sequences consisting of C-c followed by {, }, <, >, : or ; are +now reserved for major modes. Sequences consisting of C-c followed by +any other punctuation character are now meant for minor modes. We don't +plan to convert all existing major modes to stop using those sequences, +but we hope to keep them to a minimum. + +*** When the post-command-hook or the pre-command-hook gets an error, the error +is silently ignored. Emacs no longer sets the hook variable to nil when this +happens. Meanwhile, the hook functions can now alter the hook variable in +a normal fashion; there is no need to do anything special. + +*** define-key, lookup-key, and various other functions for changing or +looking up key bindings now let you write an event type with a list +like (ctrl meta newline) or (meta ?d), as in XEmacs. (ctrl meta newline) +is equivalent to the event type symbol C-M-newline, and (meta ?d) +is equivalent to the character ?\M-d. + +*** The function event-convert-list converts a list such as +(meta ?d) into the corresponding event type (a symbol or integer). + +*** In an interactive spec, `k' means to read a key sequence. In this +key sequence, upper case characters and shifted function keys which +have no bindings are converted to lower case if that makes them +defined. + +The new interactive code `K' reads a key sequence similarly, but does +not convert the last event. `K' is useful for reading a key sequence +to be given a binding. + +*** The variable overriding-local-map now has no effect on the menu bar +display unless overriding-local-map-menu-flag is non-nil. This is why +incremental search no longer temporarily changes the menu bars. + +Note that overriding-local-map does still affect the execution of key +sequences entered using the menu bar. So if you use +overriding-local-map, and a menu bar key sequence comes in, you should +make sure to clear overriding-local-map before that key sequence gets +looked up and executed. But this is what you'd normally do anyway: +programs that use overriding-local-map normally exit and "put back" +any event such as menu-bar that they do not handle specially. + +*** The new variable `overriding-terminal-local-map' is like +overriding-local-map, but is specific to a single terminal. + +*** delete-frame events. + +When you use the X window manager's "delete window" command, this now +generates a delete-frame event. The standard definition of this event +is a command that deletes the frame that received the event, and kills +Emacs when the last visible or iconified frame is deleted. You can +rebind the event to some other command if you wish. + +*** Two new types of events, iconify-frame and make-frame-visible, +indicate that the user iconified or deiconified a frame with the +window manager. Since the window manager has already done the work, +the default definition for both event types in Emacs is to do nothing. + +** Frames and X + +*** Certain Lisp variables are now local to an X terminal (in other +words, all the screens of a single X server). The value in effect, at +any given time, is the one that belongs to the terminal of the +selected frame. The terminal-local variables are +default-minibuffer-frame, system-key-alist, defining-kbd-macro, and +last-kbd-macro. There is no way for Lisp programs to create others. + +The terminal-local variables cannot be buffer-local. + +*** When you create an X frame, for the `top' and `left' frame +parameters, you can now use values of the form (+ N) or (- N), where N +is an integer. (+ N) means N pixels to the right of the left edge of +the screen and (- N) means N pixels to the left of the right edge. In +both cases, N may be zero (exactly at the edge) or negative (putting +the window partly off the screen). + +The function x-parse-geometry can return values of these forms +for certain inputs. + +*** The variable menu-bar-file-menu has been renamed to +menu-bar-files-menu to match the actual item that appears in the menu. +(All the other such variable names do match.) + +*** The new function active-minibuffer-window returns the minibuffer window +currently active, or nil if none is now active. + +*** In the functions next-window, previous-window, next-frame, +previous-frame, get-buffer-window, get-lru-window, get-largest-window +and delete-windows-on, if you specify 0 for the last argument, +it means to consider all visible and iconified frames. + +*** When you set a frame's cursor type with modify-frame-parameters, +you can now specify (bar . INTEGER) as the cursor type. This stands +for a bar cursor of width INTEGER. + +*** The new function facep returns t if its argument is a face name +(or if it is a vector such as is used internally by the Lisp code +to represent a face). + +*** Each frame can now have a buffer-predicate function, +which is the `buffer-predicate' frame parameter. +When `other-buffer' looks for an alternative buffer, it considers +only the buffers that fit the selected frame's buffer predicate (if it +has one). This is useful for applications that make their own frames. + +*** When you create an X frame, you can now specify the frame parameter +`display'. This says which display to put the frame on. The value +should be a display name--a string of the form +"HOST:DPYNUMBER.SCREENNUMBER". + +The functions x-server-... and x-display-... now take an optional +argument which specifies the display to ask about. You can use either +a display name string or a frame. A value of nil stands for the +selected frame. + +To close the connection to an X display, use the function +x-close-connection. Specify which display with a display name. You +cannot close the connection if Emacs still has frames open on that +display. + +x-display-list returns a list indicating which displays Emacs has +connections to. Its elements are display names (strings). + +*** The icon-type frame parameter may now be a file name. +Then the contents of that file specify the icon bitmap to use +for that frame. + +*** The title of an Emacs frame, displayed by most window managers, is +set from frame-title-format or icon-title-format. These have the same +structure as mode-line-format. + +*** x-display-grayscale-p is a new function that returns non-nil if +your X server can display shades of gray. Currently it returns +non-nil for color displays (because they can display shades of gray); +we may change it in the next version to return nil for color displays. + +*** The frame parameter scroll-bar-width specifies the width of the +scrollbar in pixels. + +** Buffers + +*** Creating a buffer with get-buffer-create does not obey +default-major-mode. That variable is now handled in a separate +function, set-buffer-major-mode. get-buffer-create and generate-new-buffer +always leave the newly created buffer in Fundamental mode. + +Creating a new buffer by visiting a file or with switch-to-buffer, +pop-to-buffer, and similar functions does call set-buffer-major-mode +to select the default major mode specified with default-major-mode. + +*** You can now create an "indirect buffer". An indirect buffer shares +its text, including text properties, with another buffer (the "base +buffer"), but has its own major mode, local variables, overlays, and +narrowing. An indirect buffer has a name of its own, distinct from +those of the base buffer and all other buffers. An indirect buffer +cannot itself be visiting a file (though its base buffer can be). +The base buffer cannot itself be indirect. + +Use (make-indirect-buffer BASE-BUFFER NAME) to make an indirect buffer +named NAME whose base is BASE-BUFFER. If BASE-BUFFER is an indirect +buffer, its base buffer is used as the base for the new buffer. + +You can make an indirect buffer current, or switch to it in a window, +just as you would a non-indirect buffer. + +The function buffer-base-buffer, given an indirect buffer, returns its +base buffer. It returns nil when given an ordinary buffer (not +indirect). + +The library `noutline' has versions of Outline mode and Outline minor +mode which let you display different parts of the outline in different +indirect buffers. + +** Subprocesses + +*** The functions call-process and call-process-region now allow +you to direct error message output from the subprocess into a +separate destination, instead of mixing it with ordinary output. +To do this, specify for the third argument, BUFFER, a list of the form + (BUFFER-OR-NAME ERROR-DESTINATION) +BUFFER-OR-NAME specifies where to put ordinary output; it should +be a buffer or buffer name, or t, nil or 0. This is what would +have been the BUFFER argument, ordinarily. + +ERROR-DESTINATION specifies where to put the error output. +nil means discard it, t means mix it with the ordinary output, +and a string specifies a file name to write this output into. + +You can't specify a buffer to put the error output in; that is not +easy to implement directly. You can put the error output into a +buffer by sending it to a temporary file and then inserting the file +into a buffer. + +*** Comint mode changes: + +**** The variable comint-completion-addsuffix can also be a cons pair +of the form (DIRSUFFIX . FILESUFFIX), where DIRSUFFIX and FILESUFFIX are +strings added on unambiguous or exact completion of directories and file +names, respectively. + +** Text properties + +*** You can now specify which values of the `invisible' property +make text invisible in a given buffer. The variable +`buffer-invisibility-spec', which is always local in all buffers, +controls this. + +If its value is t, then any non-nil `invisible' property makes +a character invisible. + +If its value is a list, then a character is invisible if its +`invisible' property value appears as a member of the list, or if it +appears as the car of a member of the list. + +When the `invisible' property value appears as the car of a member of +the `buffer-invisibility-spec' list, then the cdr of that member has +an effect. If it is non-nil, then an ellipsis appears in place of the +character. (This happens only for the *last* invisible character in a +series of consecutive invisible characters, and only at the end of a +line.) + +If a character's `invisible' property is a list, then Emacs checks each +element of the list against `buffer-invisibility-spec'. If any element +matches, the character is invisible. + +*** The command `list-text-properties-at' shows what text properties +are in effect at point. + +*** Frame objects now exist in Emacs even on systems that don't support +X Windows. You can create multiple frames, and switch between them +using select-frame. The selected frame is actually displayed on your +terminal; other frames are not displayed at all. The selected frame +number appears in the mode line after `Emacs', except for frame 1. + +Switching frames on ASCII terminals is therefore more or less +equivalent to switching between different window configurations. + +*** The new variable window-size-change-functions holds a list of +functions to be called if window sizes change (or if windows are +created or deleted). The functions are called once for each frame on +which changes have occurred, with the frame as the sole argument. +This takes place shortly before redisplay. + +*** The modification hook functions of overlays now work differently. +They are called both before and after each change. This makes it +possible for the functions to determine exactly what the change was. + +This change affects three overlay properties: the modification-hooks +property, a list of functions called for deletions overlapping the +overlay's range and for insertions inside it; the +insert-in-front-hooks, a list of functions called for insertions at +the beginning of the overlay; and the insert-behind-hooks, a list of +functions called for insertions at the end of the overlay. + +Each function is called both before and after each change that it +applies to. Before the change, it is called with four arguments: + (funcall FUNCTION OVERLAY nil START END) +START and END are the same arguments that the before-change-functions +receive. + +After the change, each function is called with five arguments: + (funcall FUNCTION OVERLAY t START END OLDSIZE) +The last arguments, START and END and OLDSIZE, +are the same arguments that the after-change-functions receive. + +This means the function must accept either four or five arguments. + +*** You can set defaults for text-properties with the new variable +`default-text-properties'. Its value is a property list; the values +specified there are used whenever a character (or its category) does +not specify a value. + +*** The `face' property of a character or an overlay can now be a list +of face names. Formerly it had to be just one face name. + +*** Changes in handling the `intangible' text property. + +**** If inhibit-point-motion-hooks is non-nil, then `intangible' properties +are ignored. + +**** Moving to just before a stretch of intangible text +is no longer special in any way. Point stays at that place. + +**** When you move point backwards into the midst of intangible text, +point moves back to the beginning of that text. (It used to move +forward to the end of that text, which was not very useful.) + +**** When moving across intangible text, Emacs stops wherever the +property value changes. So if you have two stretches of intangible +text, with different non-nil intangible properties, it is possible to +place point between them. + +** Overlays + +*** Overlay changes. + +**** The new function previous-overlay-change returns the position of +the previous overlay start or end, before a specified position. This +is the backwards-moving counterpart of next-overlay-change. + +**** overlay-get now supports category properties on an overlay +the same way get-text-property supports them as text properties. + +Specifically, if an overlay does not have the property PROP that you +ask for, but it does have a `category' property which is a symbol, +then that symbol's PROP property is used. + +**** If an overlay has a non-nil `evaporate' property, it will be +deleted if it ever becomes empty (i.e., when it spans no characters). + +**** If an overlay has a `before-string' and/or `after-string' property, +these strings are displayed at the overlay's endpoints. + +** Filling + +*** The new variable fill-paragraph-function provides a way for major +modes to override the filling of paragraphs. If this is non-nil, +fill-paragraph calls it as a function, passing along its sole +argument. If the function returns non-nil, fill-paragraph assumes it +has done the job and simply passes on whatever value it returned. + +The usual use of this feature is to fill comments in programming +language modes. + +*** Text filling and justification changes: + +**** The new variable use-hard-newlines can be used to make a +distinction between "hard" and "soft" newlines; the fill functions +will then never remove a newline that was manually inserted. Hard +newlines are marked with a non-nil `hard' text-property. + +**** The fill-column and left-margin can now be modified by text-properties. +Most lisp programs should use the new functions (current-fill-column) and +(current-left-margin), which return the proper values to use for the +current line. + +**** There are new functions for dealing with margins: + +***** Set-left-margin and set-right-margin (set the value for a region +and re-fill). These functions take three arguments: two to specify +a region, and the desired margin value. + +***** Increase-left-margin, decrease-left-margin, increase-right-margin, and +decrease-right-margin (change settings relative to current values, and +re-fill). + +***** move-to-left-margin moves point there, optionally adding +indentation or changing tabs to spaces in order to make that possible. +beginning-of-line-text also moves past the fill-prefix and any +indentation added to center or right-justify a line, to the beginning +of the text that the user actually typed. + +***** delete-to-left-margin removes any left-margin indentation, but +does not change the property. + +**** The paragraph-movement functions look for the paragraph-start and +paragraph-separate regexps at the current left margin, not at the +beginning of the line. This means that those regexps should NOT use ^ +to anchor the search. However, for backwards compatibility, a ^ at +the beginning of the regexp will be ignored, so most packages won't break. + +**** justify-current-line is now capable of doing left, center, or +right justification as well as full justification. + +**** The fill functions can do any kind of justification based on the new +`justification' text-property and `default-justification' variable, +or arguments to the functions. They also have a new option which +defeats the normal removal of extra whitespace. + +**** The new function `current-justification' returns the kind of +justification used for the current line. The new function +`set-justification' can be used to change it, including re-justifying +the text of the region according to the new value. + +**** Filling and auto-fill are disabled if justification is `none'. + +**** The auto-fill-function is now called regardless of whether +the fill-column has been exceeded; the function can determine on its +own whether filling (or justification) is necessary. + +** Processes + +*** process-tty-name is a new function that returns the name of the +terminal that the process itself reads and writes on (not the name of +the pty that Emacs uses to talk with that terminal). + +*** Errors in process filters and sentinels are now normally caught +automatically, so that they don't abort other Lisp programs. + +Setting debug-on-error non-nil turns off this feature; then errors in +filters and sentinels are not caught. As a result, they can invoke +the debugger, under the control of debug-on-error. + +*** Emacs now preserves the match data around the execution of process +filters and sentinels. You can use search and match functions freely +in filters and sentinels without explicitly bothering to save the +match data. + +** Display + +*** The variable message-log-max controls how messages are logged in the +"*Messages*" buffer. An integer value means to keep that many lines; +t means to log with no limit; nil means disable message logging. Lisp +code that calls `message' excessively (e.g. isearch.el) should probably +bind this variable to nil. + +*** Display tables now have a new element, at index 261, specifying the +glyph to use for the separator between two side-by-side windows. By +default, this is the vertical bar character `|'. Probably the only +other useful character to store for this element is a space, to make +less visual separation between two side-by-side windows displaying +related information. + +*** The new mode-line-format spec %c displays the current column number. + +*** The new variable blink-matching-delay specifies how long to keep +the cursor at the matching open-paren, after you insert a close-paren. +This is useful mainly on systems which can wait for a fraction of a +second--you can then specify fractional values such as 0.5. + +*** Faster processing of buffers with long lines + +The new variable cache-long-line-scans determines whether Emacs +should use caches to handle long lines more quickly. This variable is +buffer-local, in all buffers. + +Normally, the line-motion functions work by scanning the buffer for +newlines. Columnar operations (like `move-to-column' and +`compute-motion') also work by scanning the buffer, summing character +widths as they go. This works well for ordinary text, but if the +buffer's lines are very long (say, more than 500 characters), these +motion functions will take longer to execute. Emacs may also take +longer to update the display. + +If cache-long-line-scans is non-nil, these motion functions cache +the results of their scans, and consult the cache to avoid rescanning +regions of the buffer until the text is modified. The caches are most +beneficial when they prevent the most searching---that is, when the +buffer contains long lines and large regions of characters with the +same, fixed screen width. + +When cache-long-line-scans is non-nil, processing short lines will +become slightly slower (because of the overhead of consulting the +cache), and the caches will use memory roughly proportional to the +number of newlines and characters whose screen width varies. + +The caches require no explicit maintenance; their accuracy is +maintained internally by the Emacs primitives. Enabling or disabling +the cache should not affect the behavior of any of the motion functions; +it should only affect their performance. + +** System Interface + +*** The function user-login-name now accepts an optional +argument uid. If the argument is non-nil, user-login-name +returns the login name for that user id. + +*** system-name, user-name, user-full-name and user-real-name are now +variables as well as functions. The variables hold the same values +that the functions would return. The new variable multiple-frames +is non-nil if at least two non-minibuffer frames are visible. These +variables may be useful in constructing the value of frame-title-format +or icon-title-format. + +*** Changes in time-conversion functions. + +**** The new function format-time-string takes a format string and a +time value. It converts the time to a string, according to the format +specified. You can specify what kind of conversion to use with +%-specifications. + +**** The new function decode-time converts a time value into a list of +specific items of information: the year, month, day of week, day of +month, hour, minute and second. (A time value is a list of two or +three integers.) + +**** The new function encode-time converts specific items of time +information--the second, minute, hour, day, month, year, and time +zone--into a time value. + + + +* Changes in Emacs 19.27 + +There are no changes; however, here is one bug fix made in 19.26 that users +think should be documented here. + +** SPC and DEL in Info now handle menus consistently. + +SPC and DEL scroll through an entire subtree an Info manual. Once you +scroll through a node far enough to reach a menu, SPC begins moving +into the subnodes of the menu, starting with the first one. When you +reach the end of a subnode, SPC moves into the next subnode, and so +on. + +DEL more or less scrolls through the same text in reverse order. + + + +* User Editing Changes in Emacs 19.26 + +** In the X toolkit version, if you click on a menu bar item and +release the button quickly outside the menu, the menu remains visible +until you click or type something else. If you click on the menu, you +select from the menu. Any other mouse click makes the menu disappear. +Keyboard input gets rid of the menu and then is processed normally. + +"Quickly" means within double-click-time milliseconds. + +** The C-x 5 commands to select a buffer in "another frame" now use an +existing iconified frame, if any, deiconifying it. They also raise +the frame. + +** Region highlighting on a black-and-white-only display now uses +underlining. Inverse-video had the problem that you couldn't see +the cursor. + +** You can now change the height of a window by pressing mouse-1 on +the mode line and dragging it up and down. + +** If you set the environment variable LC_CTYPE to iso_8859_1 or +iso-8859-1, Emacs automatically sets up for display and syntactic +handling of the ISO Latin-1 character set. + +This does not automatically load any of the packages for input of +these characters, because it's not yet clear what is right to do. +You must still explicitly load either iso-transl or iso-acc. + +** For a read-only buffer that is also modified, the mode line now displays +%* instead of %%. + +** M-prior (scroll-other-window-down) is a new command that works like +M-next (and C-M-v) but scrolls in the opposite direction. + +M-home moves to the beginning of the buffer, in the other window. +M-end moves to the end of the buffer, in the other window. These two +commands, along with M-next and M-prior, form a series of commands for +moving around in the other window. + +** In change logs, the mail address is now delimited with <...> instead +of (...). + +This makes it a little more convenient to extract the mail address for +use in mailing a message. + +** In Shell mode and other comint modes, C-a has now returned to +its ordinary meaning: move to the beginning of the line. +Use C-c C-a to move to the end of the prompt. + +** If you set mail-signature to t to cause automatic insertion of +your .signature file, you now get a -- before the signature. + +** Setting rmail-highlighted-headers to nil entirely turns off +highlighting in Rmail. However, if your motivation for doing this is +that the highlighted text doesn't look good on your display, it might +be better to change the appearance of the `highlight' face. Once +you've done that, you may find Rmail highlighting is useful. + +** In the calendar, mouse-2 is now used only for commands that apply to a date. +If you click it when not on a date, it gives an immediate error. + +Mouse-3 in the calendar now gives a menu of commands that do not apply +to a particular date. + +The D command displays diary entries from a specified diary file (not +your standard diary file). + +** In the gnus-uu package, the binding for gnus-uu-threaded-decode-and-view +is now C-c C-v C-d, not C-c C-v C-h. Thus, C-c C-v C-h is now available +for asking for a list of the subcommands of C-c C-v. + +** You can now specify "who you are" for various Emacs packages by +setting just one variable, user-mail-address. This currently applies +to posting news with GNUS and to making change log entries. It may +apply to additional Emacs features in the future. + + +* Lisp-Level Changes in Emacs 19.26: + +** The function insert-char now takes an optional third argument +which, if non-nil, says the inserted characters should inherit sticky +text properties from the surrounding text. + +** The `diary' library has been renamed to `diary-lib'. If you refer +to this library in your Lisp code, you must update the references. + +** Sending text to a subprocess can read input from subprocesses if it +has to wait because the destination subprocess's terminal input buffer +is full. + +It was already possible in unusual occasions for this operation to +read subprocess input, but it did not happen very often. It is now +more likely to happen. + +** last-nonmenu-event is now bound to t around filter functions and sentinels. +This is to ensure that y-or-n-p and yes-or-no-p use the keyboard by default. + +** In mode lines, %+ now displays as % for unmodified read-only +buffers. It is now the same as %* except in the case of a modified +read-only buffer; in that case, %+ displays as *. + +The old meaning of %+ is now available on %&. +It displays * for a modified buffer and - for an unmodified buffer, +regardless of read-only status. + +** You can now use `underline' in the color list of a face. +It serves as a last resort, and says to underline the face +(if previous color list elements can't be used). + +** The new function x-color-values returns the list of color values +for a given color name (a string). The list contains three integers +which give the amounts of red, green and blue in the color: (R G B). + +** In run-at-time, 0 as the repeat interval means "don't repeat". + +** The variable trim-versions-without-asking has been renamed to +delete-old-versions. + +** The new function other-window-for-scrolling returns the choice of +other window for C-M-v to scroll. + +** Note that the function fceiling was mistakenly documented as fceil before. + + +* Changes in cc-mode.el in Emacs 19.26: + +** A new syntactic symbol has been added: substatement-open. It + defines the open brace of a substatement block. These used to get: + ((block-open ...) (substatement . ...)). + + Non-block substatement lines still get just ((substatement . ...)) + + Note that the custom indent function c-adaptive-block-open has been + removed as obsolete. + +** You can now specify the `hanginess' of closing braces. See + c-hanging-braces-alist. + +** Recognizes try and catch blocks in C++. They are given the + substatement syntactic symbol. + +** should be generally more forgiving about non-GNU standard top-level + construct definition styles (i.e. where the function/class/struct + opening brace does not start in column zero). + + If you hang the braces that open a top-level construct on the right + edge, and you find you still need to define defun-open-prompt (Emacs + 19) please let me know. Note that there may still be performance + issues related to non-column zero opening braces. + +** c-macro-expand is put on C-c C-e + +** New style: "Default". Resets indentation to those shipped with + cc-mode.el. + +** internal defun c-indent-via-language-element has been renamed + c-indent-line for compatibility with c-mode.el and awk-mode. + +** new buffer-local variable c-comment-start-regexp for (potential) + flexibility in adding new modes based on cc-mode.el + + + +* Changes in Emacs 19.25 + +The variable x-cross-pointer-shape (which didn't really exist) has +been renamed to x-sensitive-text-pointer-shape, and now does exist. + + + +* Changes in Emacs 19.24 + +Here is a list of new Lisp packages introduced since 19.22. + +derived.el Define new major modes based on old ones. +dired-x.el Extra Dired features. +double.el New mode for conveniently inputting non-beyond chars. +easymenu.el Create menus easily. +ediff.el Snazzy diff interface. +foldout.el A kind of outline mode designed for editing programs. +gnus-uu.el UUdecode in GNUS buffers. +ielm.el Interactively evaluate Lisp. + This is a replacement for Lisp Interaction Mode. +iso-cvt.el Conversion of beyond-ASCII characters between + various different representations. +jka-compr.el Automatic compression/decompression. +mldrag.el Drag modeline to change heights of windows. +mail-hist.el Provides history for headers of outgoing mail. +rsz-mini.el Automatically resizing minibuffers. +s-region.el Set region by holding shift. +skeleton.el Templates for statement insertion. +soundex.el Classifying words by how they sound. +tempo.el Template insertion with hotspots. + + + +* User Editing Changes in 19.23. + +** Emacs 19.23 uses Ispell version 3. + +Previous Emacs 19 versions used Ispell version 4. That version had +improvements in storing the dictionary compactly, but these are not +very important nowadays. Meanwhile, in parallel to the work on Ispell +4, many useful features were added to Ispell 3. Until a few months +ago, the terms on Ispell 3 did not let us use it; but they have now +been changed, so now we are using it. We are dropping Ispell 4. + +** Emacs 19.23 can run on MS-DOG. See the file MSDOS in the same +directory as this file. + +** Emacs 19.23 can work with an X toolkit. You must specify toolkit +operation when you configure Emacs: use the option +--with-x-toolkit=yes. (This option uses code developed by Lucid; +thanks to Frederic Pierresteguy for helping to adapt it.) + +** Emacs now has dialog boxes; yes/no and y/n questions automatically +use them in commands invoked with the mouse. For more information, +see below under "Lisp programming changes". + +** Menus now display the keyboard equivalents (if any) of the menu +commands in parentheses after the menu item. + +** Kill commands, used in a read-only buffer, now move point across +the text they would otherwise have killed. This way, you can use +repeated kill commands to transfer text into the kill ring. + +** There is now a global mark ring in addition to the mark ring that is local +to each buffer. The global mark ring stores positions in any buffer. Any +time the mark is set and the current buffer is different from the last time +the mark was set, the new mark is pushed on the global mark ring as well. +The new command C-x C-SPC (pop-global-mark) pops the global mark ring and +jumps to the last mark pushed, first switching to that buffer. + +** Query Replace is now available in the Edit menu. + +** ESC no longer simply exits a Query Replace. It now exits the Query +Replace and remains pending. Thus, ESC A and M-A are now equivalent +in Query Replace. + +To simply exit a Query Replace, type RET or Period. + +** M-mouse-2 now puts point at the end of the yanked secondary selection. + +** Mouse-1 in the mode line now simply selects the window above that +mode line. Mouse-2 in the mode line selects that window and expands +it to fill the frame it is in. + +** You can now use mouse-2 in a Dired buffer or Tar mode buffer to find +a file you click on, in a compilation buffer to go to a particular +error message, and in a *Occur* buffer to go to a particular +occurrence. + +(It was already possible to do likewise in Info and in completion list +buffers.) + +What's more, the sensitive areas of the buffer now highlight when you +move the mouse over them. + +** In a completion list buffer, the command RET now chooses the completion +that is around or next to point. + +** If you specify the foreground color for the `mode-line' face, and +mode-line-inverse-video is non-nil, then the default background color +is the usual foreground color. + +** revert-buffer now preserves markers pointing within the unchanged +text (if any) at the beginning and end of the file. + +** Version control checkin and checkout preserve all markers if the +file does not contain any of the magic version header sequences that +are updated automatically by RCS and SCCS. If such version headers +are present, checkin and checkout preserve a marker unless it comes +between two such sequences. (So it's a good idea to put all the +header sequences close together.) + +** When a large deletion shuts off auto save temporarily in a buffer, +you can now turn it on again by saving the buffer with C-x C-s (as was +possible in Emacs 18). You can also turn it on again with M-1 M-x +auto-save (as has been possible in Emacs 19). + +** C-x r d now runs the command delete-rectangle. + +** The new command imenu shows you a menu of interesting places in the +current buffer and lets you select one; then it moves point there. +The definition of interesting places depends on the major mode, but +typically this includes function definitions and such. Normally, +imenu displays the menu in a buffer; but if you bind it to a mouse +event, it shows a mouse popup menu. + +** You can make certain chosen buffers, that normally appear in a +separate window, appear in special frames of their own. To do this, +set special-display-buffer-names to a list of buffer names; any buffer +whose name is in that list automatically gets a special frame when it +is to be displayed in another window. + +A good value to try is ("*compilation*" "*grep*" "*TeX Shell*"). + +More generally, you can set special-display-regexps to a list of regular +expressions; then each buffer whose name matches any of those regular +expressions gets its own frame. + +The variable special-display-frame-alist specifies the frame +parameters for these frames. It has a default value, so you don't +need to set it. + +** If you set sentence-end-double-space to nil, the fill commands +expect just one space at the end of a sentence. (If you want the +sentence commands to accept single spaces, you must modify the regexp +sentence-end also.) + +** You can suppress the startup echo area message by adding text like +this to your .emacs file: + +(setq inhibit-startup-echo-area-message "YOUR-LOGIN-NAME") + +Simply setting inhibit-startup-echo-area-message to your login name is +not sufficient to inhibit the message; Emacs explicitly checks whether +.emacs contains an expression as shown above. Your login name must +appear in the expression as a Lisp string constant. + +This way, you can easily inhibit the message for yourself if you wish, +but thoughtless copying of your .emacs file will not inhibit the +message for someone else. + +** Outline minor mode now uses C-c C-o as a prefix instead of just C-c. + +** In Outline mode, hide-subtree is now C-c C-d. (It was C-c C-h; but +that is now a conventional way to ask for help about C-c commands.) + +** There are two additional commands in Outline mode. +M-x hide-sublevels + hides all headers except the topmost N levels. +M-x hide-other + hides everything about the body that point is in + plus the headers leading up from there to the top of the tree. + +** In iso-transl and iso-insert, the sequences for entering A-ring and +the AE ligature are now just A and E (plus the initial C-x 8 or Alt). +You used to have to enter AA or AE, after the C-x 8 prefix of course. +Likewise for lower case a-ring and ae. + +** iso-transl now defines convenient Alt keys as well as the C-x 8 prefix. +Instead of prefixing a sequence with C-x 8, you can add Alt to the +first character of the sequence. For example, Alt-" a is now a way +to enter an a-umlaut. + +** CC mode is a greatly improved mode for C and C++. +See the following page. + +** tcl mode is a new major mode. It provides features for +editing, indenting and running tcl programs. + +** Compilation minor mode lets you parse error messages in any buffer, +not just a normal compilation output buffer. Type M-x +compilation-minor-mode to enable the minor mode; then C-c C-c jumps to +the source location for the error at point, as in the `*compilation*' +buffer. If you use compilation-minor-mode in an Rlogin buffer, it +automatically accesses remote source files by ftp. + +** Comint and shell mode changes: + +*** Comint modes (including Shell mode, GUD modes, etc.) now bind +C-M-l to the command comint-show-output. This command scrolls the +buffer to show the last batch of output from the subprogram. + +*** Completion in Comint modes now truly operates on the string before +point, rather than the word that point is within. + +*** Comint mode file name completion ignores those files that end with a +string in the new variable comint-completion-fignore. This variable's +default value is nil. + +*** Shell mode uses the variable shell-completion-fignore to set +comint-completion-fignore. The default value is nil, but some +people prefer ("~" "#" "%"). + +*** The function `comint-watch-for-password-prompt' can be used to +suppress echoing when a subprocess asks for a password. To use it, +do this: + +(add-hook 'comint-output-filter-functions + 'comint-watch-for-password-prompt) + +*** You can use M-x shell-strip-ctrl-m to strip ^M characters from +process output. + +*** In Shell mode, TAB now completes environment variables, if possible, +and expands directory references. + +*** You can use M-x comint-run to execute any program of your choice in +a comint mode. Some programs such as shells, rlogin, and debuggers +have their own specialized modes; this command is one way to use +comint to run programs for which no such specialized mode exits. (You +can also run a shell with M-x shell and run the program of your choice +under the shell--but that gives you the specializations of Shell +mode.) + +** When you run GUD (M-x gdb, M-x dbx, and so on), you can use TAB +to do file name completion in the minibuffer. + +The "Complete" menu includes an item for directory expansion. + +** GUD working with future versions of GDB will permit TAB for +GDB-style symbol completion. This will work with GDB 4.13. + +** Rmail no longer gets new mail automatically when you visit an Rmail +file specified by name--not even if it is your primary Rmail file. To +get new mail, type `g'. This feature is an advantage because you now +have a choice of whether to get new mail. (This change actually +occurred in an earlier version, but wasn't listed here then, since it +made the code do what the documentation already said.) + +** Rmail now highlights certain fields automatically, when you use X +windows. The variable rmail-highlighted-headers controls which +fields. + +** If you set rmail-summary-window-size to an integer, Rmail uses +a window that many lines high for the summary buffer. + +** rmail-input-menu is a new command that visits an Rmail file letting +you choose which file with a mouse menu. rmail-output-menu is +similar; it outputs the current message, using a mouse menu to choose +which Rmail file. These commands use the variables +rmail-secondary-file-directory and rmail-secondary-file-regexp. + +** The mh-e package has been changed substantially. +See the file ./MH-E-NEWS for details. + +** The calendar and diary have new features. + +The menu bar for the calendar contains most of the calendar commands, +arranged into logical categories. + +Mouse-2 now performs specific-date-related commands when clicked on a +date in the calendar window and common three-month-related commands +when clicked elsewhere in the calendar window. + +You can set up colored/shaded highlighting of holidays, diary entry +dates, and today's date, by setting calendar-holiday-marker, +diary-entry-marker, and calendar-today-marker to a face instead of a +character. Using a special face is now the default if you are using a +window system. + +** The appt package for displaying appointment reminders has new +features. + +*** The appt alarm window stays for the full duration of +appt-display-duration. It no longer disappears when you start typing +text. + +*** You can change the way the appointment window is created/deleted by +setting the variables appt-disp-window-function and +appt-delete-window-function. + +For instance, these variables can be set to functions that display +appointments in pop-up frames, which are lowered or iconified after +appt-display-duration seconds. + +** desktop.el can now save a list of buffer-local variables, +and saves more global ones. + +** Pascal mode has been completely rewritten. It now features +completing of function names, variables and type definitions around +current point (like M-TAB does with lisp-symbols). There's also an +outline mode (M-x pascal-outline) that hides the bodies of all +functions you're not working with. + +** Edebug has a number of changes: + +*** Edebug syntax error reporting is improved. + +*** Top-level forms and defining forms other than defun and defmacro may +now be debugged with Edebug. + +*** Edebug specifications may now contain body, &define, name, arg or +arglist, def-body, and def-form, to support definitions. + +*** edebug-all-defuns is renamed to edebug-all-defs. +def-edebug-form-spec is replaced by def-edebug-form whose arguments +are unevaluated. The old names are still available for now. + +*** Frequency counts and coverage data may be displayed for functions being +debugged. + +*** A global break condition is now checked at every stop point. + +*** The previous condition at a breakpoint may now be edited. + +*** A new "next" mode stops only after expression evaluation. + +*** A new command, top-level-nonstop, does not even stop for unwind-protect, +as top-level would. + + +* Changes in CC mode in Emacs 19.23. + +`cc-mode' provides ANSI C, K&R C, and ARM C++ language editing. It +represents the merge of c++-mode.el and c-mode.el. cc-mode provides a +new, more flexible indentation engine so that indentation +customization is more intuitive. There are two steps to calculating +indentation: first, CC mode analyzes the line for syntactic content, +then based on this content it applies user defined offsets and adds +this offset to the indentation of some previous line. + +The syntactic analysis determines if the line describes a `statement', +`substatement', `class-open', `member-init-intro', etc. These are +described in detail with C-h v c-offsets-alist. You can change the +offsets interactively with C-c C-o (c-set-offsets), or +programmatically in your c-mode-common-hook, which is run both by +c-mode and c++-mode. You can also set up "styles" in the same way +that you could with c-mode.el. The variable c-basic-offset controls +the basic offset given to a level of indentation. + +If, for example, you wanted to change this style: + +int foo (int i) +{ + switch (i) { + case 1: + printf ("its a foo\n"); + break; + default: + printf ("don't know what it is\n"); + break; + } +} + +into this: + +int foo (int i) +{ + switch (i) { + case 1: + printf ("its a foo\n"); + break; + default: + printf ("don't know what it is\n"); + break; + } +} + +you could add the following to your .emacs file: + +(defun my-c-mode-common-hook () + (c-set-offset 'case-label 2) + (c-set-offset 'statement-case-intro 2)) +(add-hook 'c-mode-common-hook 'my-c-mode-common-hook) + +** New variables: + +c-offsets-alist contains an association list of syntactic symbols and +their relative offsets. Do a "C-h v c-offsets-alist" to get a list of +all syntactic symbols currently defined, and their meanings. You +should not change this variable directly; use the supplied interface +commands c-set-offset and c-set-style. + +c-mode-common-hook is run by both c-mode and c++-mode during their +common initializations. You should put any customizations that are +the same for both C and C++ into this hook. + +The variable c-strict-semantics-p is used mainly for debugging. When +non-nil, CC mode signals an error if it returns a syntactic symbol +that can't be found in c-offsets-alist. + +If you want CC mode to echo the syntactic analysis for a particular +line when you hit the TAB key, set c-echo-semantic-information-p to +non-nil. + +c-basic-offset controls the standard amount of offset for a level of +indentation. You can set a syntactic symbol's offset to + or - as a +short-hand for positive or negative c-basic-offset. + +c-comment-only-line-offset lets you control indentation given to lines +which contain only a comment, in the case of C++ line style comments, +or the introduction to a C block comment. Comment-only lines at +column zero can be anchored there independent of the indentation given +to other comment-only lines. + +c-block-comments-indent-p controls the style of C block comment +re-indentation. If you put leading stars in front of comment +continuation lines, you should set this variable to nil. + +c-cleanup-list is a list describing certain C and C++ constructs to be +"cleaned up" as they are typed, but only when the auto-newline feature +is turned on. In C++, make sure this variable contains at least +'scope-operator so that double colons will not be separated by a +newline. + +Colons (`:') and braces (`{` and `}') are special in C and C++. For +certain constructs, you may like them to hang on the right edge of the +code, or you may like them to start a new line of code. You can use +the two variables c-hanging-braces-alist and c-hanging-colons-alist +to control whether newlines are placed before and/or after colons and +braces when certain C and C++ constructs are entered. For example, +you can control whether the colon that introduces a C++ member +initialization list hangs on the right edge, starts a new line, or has +no newlines either before or after it. + +c-special-indent-hook is run after a line is indented by CC mode. You +can perform any custom indentations here. + +c-delete-function is the function that is called when a single +character is deleted with the c-electric-delete command (DEL). + +c-electric-pound-behavior describes what happens when you enter the +`#' that introduces a cpp macro. + +If c-tab-always-indent is neither t nor nil, then TAB inserts a tab +when within strings, comments, and cpp directives, but it reindents +the line unconditionally. + +c-inhibit-startup-warnings-p inhibits warnings about any old +version of Emacs you might be running, which could be incompatible +with cc-mode. + +** There are two new minor-mode features in CC mode: auto-newline and +hungry-delete. Auto-newline inserts newlines automatically as you +type certain constructs. Hungry-delete consumes all preceding +whitespace (spaces, tabs, and newlines) when the delete key is hit. +You can toggle auto-newline on and off on a per-buffer basis by +hitting C-c C-a. You can toggle hungry-delete on and off by hitting +C-c C-d. You can toggle them both on and off together with C-c C-t. + +** Slash (`/') and star (`*') are now both electric characters. + +** New commands: + +The new C-c C-o (c-set-offset) command can be used to interactively change +the offset for a particular syntactic symbol. + +The new command C-c : (c-scope-operator) inserts the C++ scope operator in +c++-mode only. + +The new command C-c C-q (c-indent-defun) indents the entire enclosing +top-level function or class. + +The new command C-c C-s (c-show-semantic-information) echos the current +syntactic analysis without re-indenting the current line. + +The new commands M-x c-forward-into-nomenclature and M-x +c-backward-into-nomenclature (currently otherwise unbound to a key +sequence), make movement easier when using the C++ variable naming +convention of VariableNamesWithoutUnderscoresButEachWordCapitalized. + +** Command from c-mode.el that have been renamed in cc-mode.el: + + electric-c-brace => c-electric-brace + electric-c-semi => c-electric-semi&comma + electric-c-sharp-sign => c-electric-pound + mark-c-function => c-mark-function + electric-c-terminator => c-electric-colon + indent-c-exp => c-indent-exp + set-c-style => c-set-style + +** Variables from c-mode.el that are obsolete with cc-mode.el: + + c-indent-level + c-brace-imaginary-offset + c-brace-offset + c-argdecl-indent + c-label-offset + c-continued-statement-offset + c-continued-brace-offset + + +* Lisp programming changes in Emacs 19.23. + +** To pop up a dialog box, call x-popup-dialog. +It takes two arguments, POSITION and CONTENTS. + +POSITION specifies which frame to place the dialog box over; +the dialog box always goes on the center of the frame. +POSITION may be a mouse event, a window, a frame, +or t meaning use the frame that the mouse is in. + +CONTENTS specifies the contents of the dialog box. +It looks like a single pane of a popup menu: +(TITLE ITEM1 ITEM2 ...), where each ITEM has the form (STRING . VALUE). +The return value is VALUE from the chosen item. + +An ITEM may also be just a string--that makes a nonselectable item. +An ITEM may also be nil--that means to put all preceding items +on the left of the dialog box and all following items on the right. +(By default, approximately half appear on each side.) + +If your Emacs is not using an X toolkit, then it cannot display a +real dialog box; so instead it displays a pop-up menu in the center +of the frame. + +** y-or-n-p, yes-or-no-p and map-y-or-n-p now use menus or dialog boxes +to ask their question(s) if the command that is running was reached by +a mouse event. + +If you want to control which way these functions work, bind the +variable last-nonmenu-event around the call. These functions use the +keyboard if that variable holds a keyboard event (actually, any +non-list); they use the mouse if that variable holds a mouse event +(actually, any list). + +** The mouse-face property is now implemented, both in overlays and as +a text property. It specifies a face to use when the mouse is in the +range of text for which the property is specified. + +** When text has a non-nil `intangible' property, you cannot move point +within it or right before it. If you try, point actually moves to the +end of the intangible text. Note that this means that backward-char +is a no-op when there is an intangible character to the left of point. + +** minibuffer-exit-hook is a new normal hook that is run when you +exit the minibuffer. + +** The variable x-cross-pointer-shape specifies the cursor shape to use +when the mouse is over text that has a mouse-face property. + +** The new variable interpreter-mode-alist specifies major modes to use +for shell scripts that specify a command interpreter. Its elements +look like (INTERPRETER . MODE); for example, ("perl" . perl-mode) is +one element present by default. This feature applies only when the +file name doesn't indicate which mode to use. + +** If you use a minibuffer-only frame, set the variable +minibuffer-auto-raise to t, and entering the minibuffer will then +raise the minibuffer frame. + +** If pop-up-frames is t, display-buffer now looks for an existing +window in any visible frame, showing the specified buffer, and uses +such a window in preference to making a new frame. + +** In the functions next-window, previous-window, next-frame, +previous-frame, get-buffer-window, get-lru-window, get-largest-window +and delete-windows-on, if you specify `visible' for the last argument, +it means to consider all visible frames. + +** Mouse events now give the X and Y coordinates in pixels, rather than +in characters. You can convert these values to characters by dividing by +the values of (frame-char-width) and (frame-char-height). + +** The new functions mouse-pixel-position and set-mouse-pixel-position +read and set the mouse position in units of pixels. The existing +functions mouse-position and set-mouse-position continue to work with +units of characters. + +** The new function compute-motion is useful for computing the width +of certain text when it is displayed. + +** The function vertical-motion now takes an option second argument WINDOW +which says which window to use for the display calculations. + +vertical-motion always operates on the current buffer. +It is ok to specify a window displaying some other buffer. +Then vertical-motion uses the width, hscroll and display-table of +the specified window, but still scans the current buffer. + +** An error no longer sets last-command to t; the value of last-command +does reflect the previous command (the one that got an error). + +If you do not want a particular command to be recognized as the +previous command in the case where it got an error, you must code that +command to prevent this. Set this-command to t at the beginning of +the command, and set this-command back to its proper value at the end, +like this: + + (defun foo (args...) + (interactive ...) + (setq this-command t) + ...do the work... + (setq this-command 'foo)) + +or like this: + + (defun foo (args...) + (interactive ...) + (let ((old-this-command this-command)) + (setq this-command t) + ...do the work... + (setq this-command old-this-command))) + +The undo and yank commands do this. + +** If you specify an explicit title for a new frame when you create it, +the title is used as the resource name when looking up X resources to +control the shape of that frame. If you don't specify the frame title, +the value of x-resource-name is used, as before. + +** The frame parameter user-position, if non-nil, says that the user +has specified the frame position. Emacs reports this to the window +manager, to tell it not to override the position that the user +specified. + +** Major modes can now set change-major-mode-hook to arrange for state +to be cleaned up when the user switches to a new major mode. The function +kill-all-local-variables runs this hook. For best results, make the hook a +buffer-local variable so that it will disappear after doing its job and will +not interfere with the subsequent major mode. + +** The new variable overriding-local-map, if non-nil, specifies a keymap +that overrides the current local map, all minor mode keymaps, and all +text property keymaps. Incremental search uses this feature to override +all other keymaps temporarily. + +** A key definition in a menu keymap can now have additional structure: +in addition to (ITEMNAME [HELPSTRING] . COMMAND) which was allowed +before, the form (ITEMNAME [HELPSTRING] (...) . COMMAND) is +allowed. (HELPSTRING is optional, and is not currently used.) + +Here (...) represents a sublist containing information about keyboard +key sequences that run the same command COMMAND. Displaying the menu +automatically creates and updates the sublist when appropriate; you +need never set these up yourself. + +lookup-key, key-binding, and similar functions return just COMMAND, +not the whole binding. + +To precompute this information for a given keymap, you can do + (x-popup-menu nil KEYMAP). + +** When you specify coordinates for x-popup-menu as a list ((XOFFSET +YOFFSET) WINDOW), the coordinates are now measured in pixels. + +** where-is-internal now takes just four arguments: +DEFINITION KEYMAP FIRSTONLY NOINDIRECT. +The single argument KEYMAP replaces two arguments KEYMAP and KEYMAP1. + +If KEYMAP is non-nil, where-is-internal searches only KEYMAP and the +global keymap. + +If KEYMAP is nil, where-is-internal searches all the currently active +keymaps, but finds the active keymaps as if overriding-local-map were +nil. + +If you pass a list of the form (keymap) as KEYMAP, where-is-internal +searches only the global map. (This is not a special case--it follows +from the specifications above.) + +If you pass the value of overriding-local-map as KEYMAP, where-is-internal +searches in exactly the same was as command execution does. + +** Use the macro define-derived-mode to define a new major mode that +inherits the definition of another major mode. Here's how to define a +command named hypertext-mode that inherits from the command text-mode: + + (define-derived-mode hypertext-mode text-mode "Hypertext" + "Major mode for hypertext.\n\n\\{hypertext-mode-map}" + (setq case-fold-search nil)) + + (define-key hypertext-mode-map [down-mouse-3] 'do-hyper-link) + +The new mode has its own keymap, which inherits from that of the +original mode. It also has its own syntax and abbrev tables, which +are initialized by copying those of the original mode. It also has +its own mode hook. All are given names made by appending a suffix +to the name of the new mode. + +** A syntax table can now inherit the data for some characters from +standard-syntax-table, while specifying other characters itself. +Syntax code 13 means "inherit this character from the standard syntax +table." In modify-syntax-entry, the character `@' represents this code. + +The function `make-syntax-table' now creates a syntax table which +inherits all letters and control characters (0 to 31 and 128 to 255) +from the standard syntax table, while copying the other characters +from the standard syntax table. Most syntax tables in Emacs are set +up this way. + +This sort of inheritance is useful for people who set up character +sets with additional alphabetic characters in the range 128 to 255. +Just changing the standard syntax for these characters affects all +major modes. + +** The new function transpose-regions swaps two regions of the buffer. +It preserves the markers in those two regions, so that they stay with +the surrounding text as it is swapped. + +** revert-buffer now runs before-revert-hook at the beginning and +after-revert-hook at the end. These can be used by minor modes +that need to clean up state variables. + +** The new function get-char-property is like get-text-property, but +checks for overlays with properties as well as for text properties. +It checks for overlays first, in order of descending priority, and +text properties last. + +get-char-property allows windows as the OBJECT argument, as well +as buffers and strings. If you specify a window, then only overlays +active on that window are considered. + +** Overlays can have the `invisible' property. + +** The function insert-file-contents now takes an optional fifth +argument called REPLACE. If this is t, it means to replace the +contents of the buffer (actually, just the accessible portion) +with the contents of the file. + +This is better than simply deleting and inserting the whole thing +because (1) it preserves some marker positions and (2) it puts less +data in the undo list. + +** The variable inhibit-first-line-modes-regexps specifies classes of +file names for which -*- on the first line should not be looked for. + +** The variables before-change-functions and after-change-functions +hold lists of functions to call before and after a change in the +buffer's text. They work much like before-change-function and +after-change-function, except that they hold a list of functions +instead of just one. + +These variables will eventually make before-change-function and +after-change-function obsolete. + +** The variable kill-buffer-query-functions holds a list of functions +to be called with no arguments when a buffer is about to be killed. +(That buffer is the current buffer when the function is called.) +If any of the functions returns nil, the buffer is not killed +(and the remaining functions in the list are not called). + +** The variable kill-emacs-query-functions holds a list of functions +to be called with no arguments when you ask to exit Emacs. +If any of the functions returns nil, the exit is canceled +(and the remaining functions in the list are not called). + +** The argument for buffer-disable-undo is now optional, +like the argument for buffer-enable-undo. + +** The new variable system-configuration holds the canonical three-part +GNU configuration name for which Emacs was built. + +** The function system-name now tries harder to return a fully qualified +domain name. + +** The variable emacs-major-version holds the major version number +of Emacs. (Currently 19.) + +** The variable emacs-minor-version holds the minor version number +of Emacs. (Currently 23.) + +** The default value of comint-input-autoexpand is now nil. +However, Shell mode sets it from the value of shell-input-autoexpand, +whose default value is `history'. + +** The new function set-process-window-size specifies the terminal window +size for a subprocess. On some systems it sends the subprocess a signal +to let it know that the size has changed. + +** %P is a new way to display a percentage in the mode line. It +displays the percentage of the buffer text that is above the *bottom* +of the window (which includes the text visible, in the window as well +as the text above the top). It displays `Top' as well as the +percentage if the top of the buffer is visible on screen. + +** %+ in the mode line specs displays `*' if the buffer is modified, +and otherwise `-'. It never displays `%', as `%*' would do; whether the +buffer is read-only has no effect on %+. + +** The new functions ffloor, fceiling, fround and ftruncate take a +floating point argument and return a floating point result whose value +is a nearby integer. ffloor returns the nearest integer below; fceiling, +the nearest integer above; ftruncate, the nearest integer in the +direction towards zero; fround, the nearest integer. + +** Setting `print-escape-newlines' to a non-nil value now also makes +formfeeds print as ``\f''. + +** auto-mode-alist now has a new feature. If an element has the form +(REGEXP FUNCTION t), and REGEXP matches the file name, then after calling +FUNCTION, Emacs deletes the part of the file name that matched REGEXP +and then searches auto-mode-alist again for a new match. + +This is useful for uncompression packages. An entry of this sort for +.gz can uncompress the file and then put the uncompressed file in the +proper mode according to the name sans .gz. + +** The new function emacs-pid returns the process ID number of Emacs. + +** user-login-name now consistently checks the LOGNAME environment +variable before USER. user-original-login-name is obsolete, since it +provides the same functionality. To ignore the environment variables, +use user-real-login-name. + +** There is a more general way of handling the system-specific X +keysyms. Set the variable system-key-alist to an alist containing +elements of the form (CODE . SYMBOL), where CODE is the numeric keysym +code minus the "vendor specific" bit, and symbol is the name for the +function key. + +** You can use the variable command-line-functions to set up functions +to process unrecognized command line arguments. The variable's value +should be a list of functions of no arguments. The functions are +called successively until one of them returns non-nil. + +Each function should access the free variables argi (the current +argument) and command-line-args-left (the remaining arguments). The +function should return non-nil only if it recognizes and processes the +argument in argi. If it does so, it may consume following arguments +as well by removing them from command-line-args-left. + +** There's a new way for a magic file name handler to run a primitive +and inhibit handling of the file name. Here is how to do it: + +(let ((inhibit-file-name-handlers + (cons 'ange-ftp-file-handler + (and (eq inhibit-file-name-operation operation) + inhibit-file-name-handlers))) + (inhibit-file-name-operation operation)) + (apply this-operation args)) + +The function find-file-name-handler now takes two arguments. The +second argument is OPERATION, the operation for which the handler is +being sought. + +People have suggested that the second argument should be optional, for +backward compatibility. It would be nice if that were possible, but +it is not. There is simply no way for find-file-name-handler to do +the right thing without receiving the proper value for its second +argument. + +** The variable completion-regexp-list affects the completion +primitives try-completion and all-completions. They consider +only the possible completions that match each regexp in the list. + +** Case conversion in the function replace-match has been changed. + +The old behavior was this: if any word in the old text was +capitalized, replace-match capitalized each word of the replacement +text. + +The new behavior is this: if the first word in the old text is capitalized, +replace-match capitalizes the first word of the replacement text. + +** You can now specify a case table with CANON non-nil and EQV nil. +Then the EQV part of the case table is deduced from CANON. + +** The new function minibuffer-prompt takes no arguments and returns +the current minibuffer prompt string. + +The new function minibuffer-prompt-width takes no arguments and +returns the display width of the minibuffer prompt string. + +** The new function frame-first-window returns the window at the +upper left corner of a given frame. + +** wholenump is a new alias for natnump. + +** The variable installation-directory, if non-@code{nil}, names a +directory within which to look for the `lib-src' and `etc' +subdirectories. This is non-nil when Emacs can't find those +directories in their standard installed locations, but can find them +near where the Emacs executable was found. + +** invocation-name and invocation-directory are now variables as well +as functions. The variable values are the same values that the +functions return: the Emacs program name sans directories, and the +directory it was found in. (invocation-directory may be nil, if Emacs +can't determine which directory it should be.) + +** Installation change regarding version number counting. + +The version number of an Emacs executable contains three numbers. +The first two describe the Emacs release and the third increments +each time you build Emacs. + +Now the file version.el contains only the first two version numbers. +The third component is now determined on the basis of the names of the +existing executable files. This means that version.el is not altered +by building Emacs. + + + +* Changes in 19.22. + +** The mouse click M-mouse-2 now inserts the current secondary +selection (from Emacs or any other X client) where you click. +It does not move point. +This command is called mouse-yank-secondary. + +mouse-kill-secondary no longer has a key binding by default. +Clicking M-mouse-3 (mouse-secondary-save-then-kill) twice +may be a convenient enough way of killing the secondary selection. +Or perhaps there should be a keyboard binding for killing the +secondary selection. Any suggestions? + +** New packages: + +*** `icomplete' provides character-by-character information +about what you could complete if you type TAB. + +*** `avoid' moves the mouse away from point so that it doesn't hide +your typing. + +*** `shadowfile' helps you update files that are supposed to be stored +identically in different places (perhaps on different machines). + +** C-h p now knows about four additional keywords: data, faces, mouse, +and matching. + +** The key for starting an inferior Lisp process, in Lisp mode, +is now C-c C-z instead of C-c C-l. + +** When the VC commands ask whether to save the buffer, if you say no, +they signal an error. This is so that you won't operate on the wrong +data. + +** ISO Accents mode now supports `"s' as a way of typing German sharp s. + +** By default, comint buffers (including Shell mode and debuggers) +no longer try to scroll to keep the cursor on the bottom line. +This feature was added in 19.21 but did not work smoothly enough. + +** Emacs now handles the window manager "delete window" operation. + +** Display of buffers with text properties is much faster now. + +** The feature previously announced whereby `insert' does not inherit +text properties from surrounding text was not fully implemented +before; but now it is. use `insert-and-inherit' if you wish to +inherit sticky properties from the surrounding text. + +** The functions next-property-change, previous-property-change, +next-single-property-change, and previous-single-property-change +now take one additional optional argument LIMIT that is a position at +which to stop scanning. If scan ends without finding the property +change sought, these functions return the specified limit. + +The value returned by previous-single-property-change and +previous-property-change, when they do find a change, is now one +greater than what it used to be. It is the position between the two +characters whose properties differ, which is one greater than the +position of the first character found (while scanning back) with +different properties. + + + +* User editing changes in version 19.21. + +** ISO Accents mode supports four additional characters: +A-with-ring (entered as /A), AE ligature (entered as /E), +and their lower-case equivalents. + + + +* User editing changes in version 19.20. +(See following page for Lisp programming changes.) + +Note that some of these changes were made subsequent to the Emacs 19.20 +editions of the Emacs manual and Emacs Lisp manual; therefore, if you +have those editions, do read this page. + +** Dragging with mouse button 1 now puts the selected region +in the kill ring so you can paste it into other X applications. + +** Double and triple clicks with button 1 now behave as in xterm, +selecting the word or line surrounding where you click. If you drag +after the last click, you can select a range of words or lines. + +** You can use button 3 to extend a mouse-selected region, as in xterm. +This works for regions selected either by dragging Mouse-1 or by +multiple-clicking Mouse-1. Clicking Mouse-3 moves the end of the +region that is (initially) nearer to where you click. + +If the selection was first made by multiple-clicking Mouse-1, and thus +consists of entire words or lines, Mouse-3 preserves that state. + +As before, clicking Mouse-3 again in the same place kills the region +thus selected. + +** The secondary selection commands, M-Mouse-1 and M-Mouse-3, have been +likewise modified. + +** You can now search for strings and regexps using the Edit menu bar menu. + +** You can now access bookmarks using the Bookmark submenu in the File +menu in the menu bar. + +** ISO Accents mode, a buffer-local minor mode, provides a convenient +way to type certain non-ASCII characters. It makes the characters `, +', ", ^, ~ and / serve as modifiers for the following letter. ` and ' +add accents, " adds an umlaut or dieresis, ^ adds a circumflex, ~ +adds a tilde, and / adds a slash to the following letter. + +If the following character is not a letter, or cannot be modified as +requested, then both characters stand for themselves. If you +duplicate the modifier accent character, that enters the corresponding +ISO non-spacing accent character (thus, '' enters the ISO acute-accent +character). To enter a modifier character itself, type it followed by +a space. + +This feature can be used whenever a key sequence is expected: for +ordinary insertion, for searching, and for certain command arguments. + +A few special combinations: + +~c => c with cedilla +~d => d with stroke +~< => left guillemot +~> => right guillemot + +** iso-transl.el is a new library that replaces iso-insert.el. +It defines C-x 8 as an insertion prefix for the ISO characters +between 128 and 255, much like iso-insert, except that iso-transl +works even in searches and help commands--wherever a key sequence +is expected. + +To define case-conversion for these characters for ISO 8859/1, +load the library iso-syntax. (This is not new.) + +** M-TAB in Text mode now runs the command ispell-complete-word +which performs completion using the spelling dictionary. + +The spelling correction submenu now includes this command +and another command which completes a word fragment (that is, +it doesn't assume that the text to be completed starts at the +beginning of a word. + +** In incremental search, you can use M-y to yank the most recent kill +into the search string. + +** The new function ispell-message checks the spelling of a message +you are about to send or post. It ignores text cited from other +messages. + +To automatically check all your outgoing messages, include the +following line in your .emacs file: + (setq news-inews-hook (setq mail-send-hook 'ispell-message)) + +** There is now a separate minibuffer history list for the names of +extended commands. This history list is used by M-x when reading +the command name. The motivation for this is to prevent command +names from appearing in the history used for other minibuffer +arguments. + +Note that the history list for entire commands that use the minibuffer +is a separate feature. That history list records a command with all +its arguments, and you must use C-x ESC ESC to access it. + +** You can use the new command C-x v ~ VERSION RET to examine a +specified version of a file that is maintained with version control. + +** In Indented Text mode, only blank lines now separate paragraphs. +Indented lines continue the paragraph that is in progress. This makes +the user option variable adaptive-fill-mode have its intended effect. + +** Local variable specifications in files for variables whose names end +in `-hook' and `-function' are now controlled by the variable +`enable-local-eval', just like the `eval' variable. + +** C-x r j (jump-to-register) when restoring a frame configuration now +makes all unwanted frames (existing frames not mentioned in the +configuration) invisible. + +If you want to delete these unwanted frames, use a prefix argument for +C-x r j. + +** You can customize the calendar to display weeks beginning on +Monday: set the variable `calendar-week-start-day' to 1. + +** Rmail changes. + +If you save messages to a file in Unix format while viewing a message +with its whole header, this now copies to the file the entire header +of each message copied. + +** Comint mode changes. + +C-c C-e shows as much output as possible in the window. +C-c RET copies an old input (the one at point) +and places the copy after the latest prompt. +C-c C-p and C-c C-n move through the buffer, stopping at places +where the subshell prompted for input. +C-c C-h lists the input history in a `*Help*' buffer. + +There are new menu bar items for completion/input/output/signal commands. + +Input behavior is configurable. Variables control whether some windows +showing the buffer scroll to the bottom before insertion. These are +`comint-scroll-to-bottom-on-input' and `before-change-function'. By default, +insertion causes the selected window to scroll to the bottom before insertion +occurs. + +Subprocess output now keeps point at the end of the buffer in each +window individually if point was already at the end of the buffer in +that window. + +If `comint-scroll-show-maximum-output' is non-nil (which is the +default), then scrolling due to arrival of output tries to place the +last line of text at the bottom line of the window, so as to show as +much useful text as possible. (This mimics the scrolling behavior of +many terminals.) + +By setting `comint-scroll-to-bottom-on-output', you can opt for having +point jump to the end of the buffer whenever output arrives--no matter +where in the buffer point was before. If the value is `this', point +jumps in the selected window. If the value is `all', point jumps in +each window that shows the comint buffer. If the value is `other', +point jumps in all nonselected windows that show the current buffer. +The default value is nil, which means point does not jump to the end. + +Input history insertion is configurable. A variable controls whether only the +first instance of successive identical inputs is stored in the input history. +This is `comint-input-ignoredups'. + +Completion (bound to TAB) is now more general. Depending on context, +completion now operates on the input history, on command names, or (as +before) on filenames. + +Filename completion is configurable. Variables control whether +file/directory suffix characters are added (`comint-completion-addsuffix'), +whether shortest completion is acceptable when no further unambiguous +completion is possible (`comint-completion-recexact'), and the timing of +completion candidate listing (`comint-completion-autolist'). + +Comint mode now provides history expansion. Insert input using `!' +and `^', in the same syntax that typical shells use; then type TAB. +This searches the comint input history for a matching element, +performs substitution if necessary, and places the result in the +comint buffer in place of the original input. + +History references in the input may be expanded before insertion into +the input ring, or on input to the interpreter (and therefore +visibly). The variable `comint-input-autoexpand' specifies which. + +You can make the SPC key perform history expansion by binding +SPC to the command `comint-magic-space'. + +The command `comint-dynamic-complete-variable' does variable name +completion using the environment variables as set within Emacs. The +variables controlling filename completion apply to variable name +completion too. This command is normally available through the menu +bar. + +** Shell mode + +Paragraph motion and marking commands (default bindings M-{, M-}, M-h) operate +on output groups (i.e., shell prompt plus associated shell output). + +TAB now completes commands, as well as file names and expand history. +Commands are searched for along the path that Emacs has on startup. + +C-c C-f now moves forward a command (`shell-forward-command') and +C-c C-b now moves backward a command (`shell-backward-command'). + +Command completion is configurable. The variables controlling +filename completion in comint mode apply, together with a variable +controlling whether to restrict possible completions to only files +that are executable (`shell-command-execonly'). + +The input history is initialised from the file name given in the +variable `shell-input-ring-file-name'--normally `.history' in your +home directory. + +Directory tracking is more robust. It can cope with command sequences +and forked commands, and can detect the failure of directory changing +commands in most circumstances. It's still not infallible, of course. + +You can now configure the behavior of `pushd'. Variables control +whether `pushd' behaves like `cd' if no argument is given +(`shell-pushd-tohome'), pop rather than rotate with a numeric argument +(`shell-pushd-dextract'), and only add directories to the directory +stack if they are not already on it (`shell-pushd-dunique'). The +configuration you choose should match the underlying shell, of course. + + +* Emacs Lisp programming changes in Emacs 19.20. + +** A new function `remove-hook' is now used to remove a hook that you might +have added with `add-hook'. + +** There is now a Lisp pretty-printer in the library `pp'. + +** The partial Common Lisp support has been entirely reimplemented. + +** When you insert text using `insert', `insert-before-markers' or +`insert-buffer-substring', text properties are no longer inherited +from the surrounding text. + +When you want to inherit text properties, use the new functions +`insert-and-inherit' or `insert-before-markers-and-inherit'. + +The self-inserting character command does do inheritance. + +** Frame creation hooks. + +The function make-frame now runs the normal hooks +before-make-frame-hook and after-make-frame-hook. + +** You can now use function-key-map to make a key an alias for other +key sequences that can vary depending on circumstances. To do this, +give the key a definition in function-key-map which is a function +rather than a specific expansion key sequence. + +If the function reads input itself, it can have the effect of altering +the event that follows. For example, here's how to define C-c h to +turn the character that follows into a hyper character: + +(define-key function-key-map "\C-ch" 'hyperify) + +(defun hyperify (prompt) + (let ((e (read-event))) + (vector (if (numberp e) + (logior (lsh 1 20) e) + (if (memq 'hyper (event-modifiers e)) + e + (add-event-modifier "H-" e)))))) + +(defun add-event-modifier (string e) + (let ((symbol (if (symbolp e) e (car e)))) + (setq symbol (intern (concat string (symbol-name symbol)))) + (if (symbolp e) + symbol + (cons symbol (cdr e))))) + +The character translation function gets one argument, which is the +prompt that was specified in read-key-sequence--or nil if the key +sequence is being read by the editor command loop. In most cases +you can just ignore the prompt value. + +** Changes for reading and writing text properties. + +New low-level Lisp features make it possible to write Lisp programs to +save text properties in files, and read text properties from files. +You can program any file format you like. + +The variable `write-region-annotation-functions' should contain a list +of functions to be run by `write-region' to encode text properties in +some fashion as annotations to the text that is written. + +Each function in the list is called with two arguments: the start and +end of the region to be written. These functions should not alter the +contents of the buffer. Instead, they should return lists indicating +annotations to write in the file in addition to the text in the +buffer. + +Each function should return a list of elements of the form (POSITION +. STRING), where POSITION is an integer specifying the relative +position in the text to be written, and STRING is the annotation to +add there. + +Each list returned by one of these functions must be already sorted in +increasing order by POSITION. If there is more than one function, +`write-region' merges the lists destructively into one sorted list. + +When `write-region' actually writes the text from the buffer to the +file, it intermixes the specified annotations at the corresponding +positions. All this takes place without modifying the buffer. + +The variable `after-insert-file-functions' should contain a list of +functions to be run each time a file's contents have been inserted into +a buffer. Each function receives one argument, the length of the +inserted text; point indicates the start of that text. The function +should make whatever changes it wants to make, then return the updated +length of the inserted text, as it stands after those changes. The +value returned by one function is used as the argument to the next. +These functions should always return with point at the beginning of +the inserted text. + +The intended use of `after-insert-file-functions' is for converting +some sort of textual annotations into actual text properties. But many +other uses may be possible. + +We now invite users to begin implementing Lisp programs to store and +retrieve text properties in files, using these new primitive features, +and thus to experiment with various data formats and find good ones. + +We suggest not trying to handle arbitrary Lisp objects as property +names or property values--because a program that general is probably +difficult to write, and slow. Instead, choose a set of possible data +types that are reasonably flexible, and not too hard to encode. + +** Comint completion. + +Currently comint-dynamic-complete-command (and associated variable +comint-after-partial-pathname-command) are set by default to complete a +filename. Other comint-mode users should have their own functions to achieve +this. For example, gud-mode could complete debugger commands. A completion +function is provided solely for this reason (comint-dynamic-simple-complete). + +Other comint-mode users should bind comint-dynamic-complete (shell-mode does +already). + +** Comint history reference expansion + +Currently comint-input-autoexpand is 'history, which means only expand +history on insertion to comint-input-ring. For non-shell modes, this is +a strange default, since non-shells will not understand history references. +Perhaps it would be better for the variable to be 'input, which means expand +on RET. + +The value 'history might possibly be wrong even for shells, since the +expansion will be done both by comint and the underlying shell (except sh, of +course). It would be better for expansion to be done by one or the other, +not both since they may (ahem) disagree. Since it is silly to put a literal +history reference into comint-input-ring, perhaps it would be better for the +variable to be 'input too. + +The reason the variable is not 'input by default is that I was attempting to +adhere to The Principle of Least Astonishment. I didn't want to shock users +by having their input change in front of their eyes. + +** Argument delimiters and Comint mode. + +Currently comint-delimiter-argument-list is '(), which means no strings are +to be treated as delimiters and arguments. In shell-mode, this variable is +set to shell-delimiter-argument-list, '("|" "&" "<" ">" "(" ")" ";"). Other +comint-mode users should set this variable too. For example, a lisp-type +mode might want to set this to '("." "(" ")") or some such. + +** Comint output hook. + +There is now a hook, comint-output-filter-hook, that is run-hooks'ed by the +output filter, comint-output-filter. This is useful for scrolling (see +below), but also things like processing output for specific text, output +highlighting, etc. + +So that such output processing may be done efficiently, there is a new +variable, comint-last-output-start, that records the position of the start of +the lastest output inserted into the buffer (effectively the previous value +of process-mark). Output processing functions should process the text +between comint-last-output-start (or perhaps the beginning of the line that +the position lies on) and process-mark. + +** Comint scrolling. + +There is now automatic scrolling of process windows. + +Currently comint-scroll-show-maximum-output is t, which means when scrolling +output put process-mark at the bottom of the window. There is a good case +for it to be t, since the user is likely to want to see as much output as +possible. But, then again, there is a comint-show-maximum-output command. + +** Comint history retrieval. + +The input following point is not deleted when moving around the input history +(with M-p etc.). Emacs maintainers may not like this. However, I feel this +is a useful feature. The simple remedy is to put end-of-line in before +delete-region in comint-previous-matching-input. + +The input history retrieval commands still wrap-around the input ring, unlike +Emacs command history. + + + +* Changes in version 19.19. + +** The new package bookmark.el records named bookmarks: positions that +you can jump to. Bookmarks are saved automatically between Emacs +sessions. + +** Another simpler package saveplace.el records your position in each +file when you kill its buffer (or kill Emacs), and jumps to the same +position when you visit the file again (even in another Emacs +session). Use `toggle-save-place' to turn on place-saving in a given file; +use (setq-default save-place t) to turn it on for all files. + +** In Outline mode, you can now customize how to compute the level of a +heading line. Set `outline-level' to a function of no arguments which +returns the level, assuming point is at the beginning of a heading +line. + +** You can now specify the prefix key to use for Outline minor mode. +(The default is C-c.) Set the variable outline-minor-mode-prefix to +the key sequence you want to use (as a string or vector). + +** In Bibtex mode, C-c e has been changed to C-c C-b. This is because +C-c followed by a letter is reserved for users. + +** The `mod' function is no longer an alias for `%', but is a separate function +that yields a result with the same sign as the divisor. `floor' now takes an +optional second argument, which divides the first argument before the floor is +taken. + +** `%' no longer allows floating point arguments, since the results were often +inconsistent with integer `%'. + + + +* Changes in version 19.18. + +** Typing C-z in an iconified Emacs frame now deiconifies it. + +** hilit19 is a new library for automatic highlighting of parts of the +text in the buffer, based on its meaning and context. + +** Killing no longer sends the killed text to the X clipboard. +And large strings are not put in the cut buffer either. +The variable x-cut-buffer-max specifies the maximum number of characters +to put in the cut buffer. + +** The new command C-x 5 o (other-frame) selects different frames, +successively, in cyclic order. It does for frames what C-x o +does for windows. + +** The command M-ESC (eval-expression) has its own command history. + +** The commands M-! and M-| for running shell commands have their own +command history. + +** If the directory containing the Emacs executable has a sibling named +`lisp', that `lisp' directory is added to the end of `load-path' +(provided you don't override the normal value with the EMACSLOADPATH +environment variable). This feature may make it easier to move +an installed Emacs from place to place. + +** M-x validate-tex-buffer now records the locations of mismatches +found in the `*Occur*' buffer. You can go to that buffer and type C-c +C-c to visit a particular mismatch. + +** There are new commands in Shell mode. + +C-c C-n and C-c C-p move point to the next or previous shell input line. + +C-c C-d is now another way to send an end-of-file to the subshell. + +** Changes to calendar/diary. + +Time zone data is now determined automatically, including the +start/stop days and times of daylight savings time. The code now +works correctly almost anywhere in the world. + +The format of the holiday specifications has changed and IS NO LONGER +COMPATIBLE with the old (version 18) format. See the documentation of +the variable calendar-holidays for details of the new, improved +format. + +The hook `diary-display-hook' has been split into two: +diary-display-hook which should be used ONLY for the display and +`diary-hook' which should be used for appointment notification. If +diary-display-hook is nil (the default), simple-diary-display is +used. This allows the diary hooks to be correctly set with add-hook. + +The forms used for dates in diary entries and general display are no +longer autoloaded, but set at load time; this means they will be set +correctly based on values you assign to various variables. + +** The functions x-rebind-key and x-rebind-keys have been deleted, +because you can accomplish the same job by binding keys to keyboard +macros. + +** Emacs now distinguishes double and triple drag events and double and +triple button-down events. These work analogously to double and +triple click events. + +Double drag events, if not defined, convert to ordinary click events. +Double down events, if not defined, convert first to ordinary down +events, which are then discarded if not defined. Triple events that +are not defined convert to the corresponding double event; if that is +also not defined, it may convert further. + +** The new function event-click-count returns the number of clicks, +from an event which is a list. It is 1 for an ordinary click, drag, +or button-down event, 2 for a double event, and 3 or more for a triple +event. + +** The new function previous-frame is like next-frame, but moves +around through the set of existing frames in the opposite order. + +** The post-command-hook now runs even after commands that get an error +and return to top level. As a consequence of the same change, this +hook also runs before Emacs reads the first command. That might sound +paradoxical, as if this hook were the same as the pre-command-hook. +Actually, they are not similar; the latter runs before *execution* of +a command, but after it has been read. + +** You can turn off the text property hooks that run when point moves +to certain places in the buffer, by binding inhibit-point-motion-hooks +to a non-nil value. + +** Inserting a string with no text properties into the buffer normally +inherits the properties of the preceding character. You can now +control this inheritance by setting the front-sticky and +rear-nonsticky properties of a character. + +If you make a character's front-sticky property t, then insertion +before the character inherits its properties. If you make the +rear-nonsticky property t, then insertion after the character does not +inherit its properties. You can regard characters as normally being +rear-sticky and not front-sticky, and this is why insertion normally +inherits from the previous character. + +If neither side of an insertion is suitably sticky, then the inserted +text gets no properties. If both sides are sticky, then the inserted +text gets the properties of both sides, with the previous character's +properties taking precedence when both sides have a property in +common. + +You can also specify stickiness for individual properties. To do so, +use a list of property names as the value of the front-sticky property +or the rear-nonsticky property. For example, if a character has a +rear-nonsticky property whose value is (face read-only), then +insertion after the character will not inherit its face property or +read-only property (if any), but will inherit any other properties. + +The merging of properties when both sides of the insertion are sticky +takes place one property at a time. If the preceding character is +rear-sticky for the property, and the property is non-nil, it +dominates. Otherwise, the following character's property value is +used if it is front-sticky for that property. + +** If you give a character a non-nil `invisible' text property, the +character does not appear on the screen. This works much like +selective display. + +The details of this feature are likely to change in future Emacs +versions. + +** In Info, when you go to a node, it runs the normal hook +Info-selection-hook. + +** You can use the new function `invocation-directory' to get the name +of the directory containing the Emacs executable that was run. + +** Entry to the minibuffer runs the normal hook minibuffer-setup-hook. + +** The new function minibuffer-window-active-p takes one argument, a +minibuffer window, and returns t if the window is currently active. + + + +* Changes in version 19.17. + +** When Emacs displays a list of completions in a buffer, +you can select a completion by clicking mouse button 2 +on that completion. + +** Use the command `list-faces-display' to display a list of +all the currently defined faces, showing what they look like. + +** Menu bar items from local maps now come after the usual items. + +** The Help menu bar item always comes last in the menu bar. + +** If you enable Font-Lock mode on a buffer containing a program +(certain languages such as C and Lisp are supported), everything you +type is automatically given a face property appropriate to its +syntactic role. For example, there are faces for comments, string +constants, names of functions being defined, and so on. + +** Dunnet, an adventure game, is now available. + +** Several major modes now have their own menu bar items, +including Dired, Rmail, and Sendmail. We would like to add +suitable menu bar items to other major modes. + +** The key binding C-x a C-h has been eliminated. +This is because it got in the way of the general feature of typing +C-h after a prefix character. If you want to run +inverse-add-global-abbrev, you can use C-x a - or C-x a i g instead. + +** If you set the variable `rmail-mail-new-frame' to a non-nil value, +all the Rmail commands to send mail make a new frame to do it in. +When you send the message, or use the menu bar command not to send it, +that frame is deleted. + +** In Rmail, the o and C-o commands are now almost interchangeable. +Both commands check the format of the file you specify, and append +the message to it in Rmail format if it is an Rmail file, and in +inbox file format otherwise. C-o and o are different only when you +specify a new file. + +** The function `copy-face' now takes an optional fourth argument +NEW-FRAME. If you specify this, it copies the definition of face +OLD-FACE on frame FRAME to face NEW-NAME on frame NEW-FRAME. + +** A local map can now cancel out one of the global map's menu items. +Just define that subcommand of the menu item with `undefined' +as the definition. For example, this cancels out the `Buffers' item +for the current major mode: + + (local-set-key [menu-bar buffer] 'undefined) + +** To put global items at the end of the menu bar, use the new variable +`menu-bar-final-items'. It should be a list of symbols--event types +bound in the menu bar. The menu bar items for these symbols are +moved to the end. + +** The list returned by `buffer-local-variables' now contains cons-cell +elements of the form (SYMBOL . VALUE) only for buffer-local variables +that have values. For unbound buffer-local variables, the variable +name (symbol) appears directly as an element of the list. + +** The `modification-hooks' property of a character no longer affects +insertion; it runs only for deletion and modification of the character. + +To detect insertion, use `insert-in-front-hooks' and +`insert-behind-hooks' properties. The former runs when text is +inserted immediately preceding the character that has the property; +the latter runs when text is inserted immediately following the +character. + +** Buffer modification now runs hooks belonging to overlays as well as +hooks belonging to characters. If an overlay has a +`modification-hooks' property, it applies to any change to text in the +overlay, and any insertion within the overlay. If the overlay has a +`insert-in-front-hooks' property, it runs for insertion at the +beginning boundary of the overlay. If the overlay has an +`insert-behind-hooks' property, it runs for insertion at the end +boundary of the overlay. + +The values of these properties should be lists of functions. Each +function is called, receiving as arguments the overlay in question, +followed by the bounds of the range being modified. + +** The new `-name NAME' option directs Emacs to search for its X +resources using the name `NAME', and sets the title of the initial +frame. This argument was added for consistency with other X clients. + +** The new `-xrm DATABASE' option tells Emacs to treat the string +DATABASE as the text of an X resource database. Emacs searches +DATABASE for resource values, in addition to the usual places. This +argument was added for consistency with other X clients. + +** Emacs now searches for X resources in the files specified by the +XFILESEARCHPATH, XUSERFILESEARCHPATH, and XAPPLRESDIR environment +variables, emulating the functionality provided by programs written +using Xt. Because of this change, Emacs will now notice system-wide +application defaults files, as other X clients do. + +XFILESEARCHPATH and XUSERFILESEARCHPATH should be a list of file names +separated by colons; XAPPLRESDIR should be a list of directory names +separated by colons. + +Emacs searches for X resources + + specified on the command line, with the `-xrm RESOURCESTRING' + option, + + then in the value of the XENVIRONMENT environment variable, + - or if that is unset, in the file named ~/.Xdefaults-HOSTNAME if it exists + (where HOSTNAME is the hostname of the machine Emacs is running on), + + then in the screen-specific and server-wide resource properties + provided by the server, + - or if those properties are unset, in the file named ~/.Xdefaults + if it exists, + + then in the files listed in XUSERFILESEARCHPATH, + - or in files named LANG/Emacs in directories listed in XAPPLRESDIR + (where LANG is the value of the LANG environment variable), if + the LANG environment variable is set, + - or in files named Emacs in the directories listed in XAPPLRESDIR + - or in ~/LANG/Emacs (if the LANG environment variable is set), + - or in ~/Emacs, + + then in the files listed in XFILESEARCHPATH. + +The paths in the variables XFILESEARCHPATH, XUSERFILESEARCHPATH, and +XAPPLRESDIR may contain %-escapes (like the control strings passed to +the Emacs lisp `format' function or C printf function), which Emacs expands. + +%N is replaced by the string "Emacs" wherever it occurs. +%T is replaced by "app-defaults" wherever it occurs. +%S is replaced by the empty string wherever it occurs. +%L and %l are replaced by the value of the LANG environment variable; if LANG + is not set, Emacs does not use that directory or file name at all. +%C is replaced by the value of the resource named "customization" + (class "Customization"), as retrieved from the server's resource + properties or the user's ~/.Xdefaults file, or the empty string if + that resource doesn't exist. + +So, for example, + if XFILESEARCHPATH is set to the value + "/usr/lib/X11/%L/%T/%N%C:/usr/lib/X11/%T/%N%C:/usr/lib/X11/%T/%N", + and the LANG environment variable is set to + "english", + and the customization resource is the string + "-color", +then, in the last step of the process described above, Emacs checks +for resources in the first of the following files that is present and +readable: + /usr/lib/X11/english/app-defaults/Emacs-color + /usr/lib/X11/app-defaults/Emacs-color + /usr/lib/X11/app-defaults/Emacs +If the LANG environment variable is not set, then Emacs never uses the +first element of the path, "/usr/lib/X11/%L/%T/%N%C", because it +contains the %L escape. + +If XFILESEARCHPATH is unset, Emacs uses the default value +"/usr/lib/X11/%L/app-defaults/Emacs%C:\ +/usr/lib/X11/app-defaults/Emacs%C:\ +/usr/lib/X11/%L/app-defaults/Emacs:\ +/usr/lib/X11/app-defaults/Emacs" + +This feature was added for consistency with other X applications. + +** The new function `text-property-any' scans the region of text from +START to END to see if any character's property PROP is `eq' to +VALUE. If so, it returns the position of the first such character. +Otherwise, it returns nil. + +The optional fifth argument, OBJECT, specifies the string or buffer to +be examined. + +** The new function `text-property-not-all' scans the region of text from +START to END to see if any character's property PROP is not `eq' to +VALUE. If so, it returns the position of the first such character. +Otherwise, it returns nil. + +The optional fifth argument, OBJECT, specifies the string or buffer to +be examined. + +** The function `delete-windows-on' now takes an optional second +argument FRAME, which specifies which frames it should affect. + + If FRAME is nil or omitted, then `delete-windows-on' deletes windows + showing BUFFER (its first argument) on all frames. + + If FRAME is t, then `delete-windows-on' only deletes windows on the + selected frame; other frames are unaffected. + + If FRAME is a frame, then `delete-windows-on' only deletes windows on + the given frame; other frames are unaffected. + + + +* Changes in version 19.16. + +** When dragging the mouse to select a region, Emacs now highlights the +region as you drag (if Transient Mark mode is enabled). If you +continue the drag beyond the boundaries of the window, Emacs scrolls +the window at a steady rate until you either move the mouse back into +the window or release the button. + +** RET now exits `query-replace' and `query-replace-regexp'; this makes it +more consistent with the incremental search facility, which uses RET +to end the search. + +** In C mode, C-c C-u now runs c-up-conditional. +C-c C-n and C-c C-p now run new commands that move forward +and back over balanced sets of C conditionals (c-forward-conditional +and c-backward-conditional). + +** The Edit entry in the menu bar has a new alternative: +"Choose Next Paste". It gives you a menu showing the various +strings in the kill ring; click on one to select it as the text +to be yanked ("pasted") the next time you yank. + +** If you enable Transient Mark mode and set `mark-even-if-inactive' to +non-nil, then the region is highlighted in a transient fashion just as +normally in Transient Mark mode, but the mark really remains active +all the time; commands that use the region can be used even if the +region highlighting turns off. + +** If you type C-h after a prefix key, it displays the bindings +that start with that prefix. + +** The VC package now searches for version control commands in the +directories named by the variable `vc-path'; its value should be a +list of strings. + +** If you are visiting a file that has locks registered under RCS, +VC now displays each lock's owner and version number in the mode line +after the string `RCS'. If there are no locks, VC displays the head +version number. + +** When using X, if you load the `paren' library, Emacs automatically +underlines or highlights the matching paren whenever point is +next to the outside of a paren. When point is before an open-paren, +this shows the matching close; when point is after a close-paren, +this shows the matching open. + +** The new function `define-key-after' is like `define-key', +but takes an extra argument AFTER. It places the newly defined +binding after the binding for the event AFTER. + +** `accessible-keymaps' now takes an optional second argument, PREFIX. +If PREFIX is non-nil, it means the value should include only maps for +keys that start with PREFIX. + +`describe-bindings' also accepts an optional argument PREFIX which +means to describe only the keys that start with PREFIX. + +** The variable `prefix-help-command' hold a command to run to display help +whenever the character `help-char' follows a prefix key and does not have +a key binding in that context. + +** Emacs now detects double- and triple-mouse clicks. A single mouse +click produces a pair events of the form: + (down-mouse-N POSITION) + (mouse-N POSITION) +Clicking the same mouse button again, soon thereafter and at the same +location, produces another pair of events of the form: + (down-mouse-N POSITION) + (double-mouse-N POSITION 2) +Another click will produce an event pair of the form: + (down-mouse-N POSITION) + (triple-mouse-N POSITION 3) +All the POSITIONs in such a sequence would be identical, except for +their timestamps. + +To count as double- and triple-clicks, mouse clicks must be at the +same location as the first click, and the number of milliseconds +between the first release and the second must be less than the value +of the lisp variable `double-click-time'. Setting `double-click-time' +to nil disables multi-click detection. Setting it to t removes the +time limit; Emacs then detects multi-clicks by position only. + +If `read-key-sequence' finds no binding for a double-click event, but +the corresponding single-click event would be bound, +`read-key-sequence' demotes it to a single-click. Similarly, it +demotes unbound triple-clicks to double- or single-clicks. This means +you don't have to distinguish between single- and multi-clicks if you +don't want to. + +Emacs reports all clicks after the third as `triple-mouse-N' clicks, +but increments the click count after POSITION. For example, a fourth +click, soon after the third and at the same location, produces a pair +of events of the form: + (down-mouse-N POSITION) + (triple-mouse-N POSITION 4) + +** The way Emacs reports positions of mouse events has changed +slightly. If a mouse event includes a position list of the form: + (WINDOW (PLACE-SYMBOL) (COLUMN . ROW) TIMESTAMP) +this denotes exactly the same position as the list: + (WINDOW PLACE-SYMBOL (COLUMN . ROW) TIMESTAMP) +That is, the event occurred over a non-textual area of the frame, +specified by PLACE-SYMBOL, a symbol like `mode-line' or +`vertical-scroll-bar'. + +Enclosing PLACE-SYMBOL in a singleton list does not change the +position denoted, but the `read-key-sequence' function uses the +presence or absence of the singleton list to tell whether or not it +should prefix the event with its place symbol. + +Normally, `read-key-sequence' prefixes mouse events occurring over +non-textual areas with their PLACE-SYMBOLs, to select the sub-keymap +appropriate for the event; for example, clicking on the mode line +produces a sequence like + [mode-line (mouse-1 POSN)] +However, if lisp code elects to unread the resulting key sequence by +placing it in the `unread-command-events' variable, it is important +that `read-key-sequence' not insert the prefix symbol again; that +would produce a malformed key sequence like + [mode-line mode-line (mouse-1 POSN)] +For this reason, `read-key-sequence' encloses the event's PLACE-SYMBOL +in a singleton list when it first inserts the prefix, but doesn't +insert the prefix when processing events whose PLACE-SYMBOLs are +already thus enclosed. + + + +* Changes in version 19.15. + +** `make-frame-visible', which uniconified frames, is now a command, +and thus may be bound to a key. This makes sense because frames +respond to user input while iconified. + +** You can now use Meta mouse clicks to set and use the "secondary +selection". You can drag M-Mouse-1 across the region you want to +select. Or you can press M-Mouse-1 at one end and M-Mouse-3 at the +other (this also copies the text to the kill ring). Repeating M-Mouse-3 +again at the same place kills that text. + +M-Mouse-2 kills the secondary selection. + +Setting the secondary selection does not move point or the mark. It +is possible to make a secondary selection that does not all fit on the +screen, by using M-Mouse-1 at one end, scrolling, then using M-Mouse-3 +at the other end. + +Emacs has only one secondary selection at any time. Starting to set +a new one cancels any previous one. The secondary selection displays +using a face named `secondary-selection'. + +** There's a new way to request use of Supercite (sc.el). Do this: + + (add-hook 'mail-citation-hook 'sc-cite-original) + +Currently this works with Rmail. In the future, other Emacs based +mail-readers should be modified to understand this hook also. +In the mean time, you should keep doing what you have done in the past +for those other mail readers. + +** When a regular expression contains `\(...\)' inside a repetition +operator such as `*' or `+', and you ask about the range that was matched +using `match-beginning' and `match-end', the range you get corresponds +to the *last* repetition *only*. In Emacs 18, you would get a range +corresponding to all the repetitions. + +If you want to get a range corresponding to all the repetitions, +put a `\(...\)' grouping *outside* the repetition operator. This +is the syntax that corresponds logically to the desired result, and +it works the same in Emacs 18 and Emacs 19. + +(This change actually took place earlier, but we didn't know about it +and thus didn't document it.) + + + +* Changes in version 19.14. + +** To modify read-only text, bind the variable `inhibit-read-only' +to a non-nil value. If the value is t, then all reasons that might +make text read-only are inhibited (including `read-only' text properties). +If the value is a list, then a `read-only' property is inhibited +if it is `memq' in the list. + +** If you call `get-buffer-window' passing t as its second argument, it +will only search for windows on visible frames. Previously, passing t +as the secord argument caused `get-buffer-window' to search all +frames, visible or not. + +** If you call `other-buffer' with a nil or omitted second argument, it +will ignore buffers displayed windows on any visible frame, not just +the selected frame. + +** You can specify a window or a frame for C-x # to use when +selects a server buffer. Set the variable server-window +to the window or frame that you want. + +** The command M-( now inserts spaces outside the open-parentheses in +some cases--depending on the syntax classes of the surrounding +characters. If the variable `parens-dont-require-spaces' is non-nil, +it inhibits insertion of these spaces. + +** The GUD package now supports the debugger known as xdb on HP/UX +systems. Use M-x xdb. The variable `gud-xdb-directories' lets you +specify a list of directories to search for source code. + +** If you are using the mailabbrev package, you should note that its +function for defining an alias is now called `define-mail-abbrev'. +This package no longer contains a definition for `define-mail-alias'; +that name is used only in mailaliases. + +** Inserted characters now inherit the properties of the text before +them, by default, rather than those of the following text. + +** The function `insert-file-contents' now takes optional arguments BEG +and END that specify which part of the file to insert. BEG defaults to +0 (the beginning of the file), and END defaults to the end of the file. + +If you specify BEG or END, then the argument VISIT must be nil. + + + +* Changes in version 19.13. + +** Magic file names can now handle the `load' operation. + +** Bibtex mode now sets up special entries in the menu bar. + +** The incremental search commands C-w and C-y, which copy text from +the buffer into the search string, now convert it to lower case +if you are in a case-insensitive search. This is to avoid making +the search a case-sensitive one. + +** GNUS now knows your time zone automatically if Emacs does. + +** Hide-ifdef mode no longer defines keys of the form +C-c LETTER, since those keys are reserved for users. +Those commands have been moved to C-c M-LETTER. +We may move them again for greater consistency with other modes. + + + +* Changes in version 19.12. + +** You can now make many of the sort commands ignore case by setting +`sort-fold-case' to a non-nil value. + + + +* Changes in version 19.11. + +** Supercite is installed. + +** `write-file-hooks' functions that return non-nil are responsible +for making a backup file if you want that to be done. +To do so, execute the following code: + + (or buffer-backed-up (backup-buffer)) + +You might wish to save the file modes value returned by +`backup-buffer' and use that to set the mode bits of the file +that you write. This is what `basic-save-buffer' does when +it writes a file in the usual way. + +(This is not actually new, but wasn't documented before.) + + + +* Changes in version 19.10. + +** The command `repeat-complex-command' is now on C-x ESC ESC. +It used to be bound to C-x ESC. + +The reason for this change is to make function keys work after C-x. + +** The variable `highlight-nonselected-windows' now controls whether +the region is highlighted in windows other than the selected window +(in Transient Mark mode only, of course, and currently only when +using X). + + + +* Changes in version 19.8. + +** It is now simpler to tell Emacs to display accented characters under +X windows. M-x standard-display-european toggles the display of +buffer text according to the ISO Latin-1 standard. With a prefix +argument, this command enables European character display iff the +argument is positive. + +** The `-i' command-line argument tells Emacs to use a picture of the +GNU gnu as its icon, instead of letting the window manager choose an +icon for it. This option used to insert a file into the current +buffer; use `-insert' to do that now. + +** The `configure' script now supports `--prefix' and `--exec-prefix' +options. + +The `--prefix=PREFIXDIR' option specifies where the installation process +should put emacs and its data files. This defaults to `/usr/local'. +- Emacs (and the other utilities users run) go in PREFIXDIR/bin + (unless the `--exec-prefix' option says otherwise). +- The architecture-independent files go in PREFIXDIR/lib/emacs/VERSION + (where VERSION is the version number of Emacs, like `19.7'). +- The architecture-dependent files go in + PREFIXDIR/lib/emacs/VERSION/CONFIGURATION + (where CONFIGURATION is the configuration name, like mips-dec-ultrix4.2), + unless the `--exec-prefix' option says otherwise. + +The `--exec-prefix=EXECDIR' option allows you to specify a separate +portion of the directory tree for installing architecture-specific +files, like executables and utility programs. If specified, +- Emacs (and the other utilities users run) go in EXECDIR/bin, and +- The architecture-dependent files go in + EXECDIR/lib/emacs/VERSION/CONFIGURATION. +EXECDIR/bin should be a directory that is normally in users' PATHs. + +** When running under X, the new lisp function `x-list-fonts' +allows code to find out which fonts are available from the X server. +The first argument PATTERN is a string, perhaps with wildcard characters; + the * character matches any substring, and + the ? character matches any single character. + PATTERN is case-insensitive. +If the optional arguments FACE and FRAME are specified, then +`x-list-fonts' returns only fonts the same size as FACE on FRAME. + + + +* Changes in version 19. + +** When you kill buffers, Emacs now returns memory to the operating system, +thus reducing the size of the Emacs process. All the space that you free +up by killing buffers can now be reused for other buffers no matter what +their sizes, or reused by other processes if Emacs doesn't need it. + +** Emacs now does garbage collection and auto saving while it is waiting +for input, which often avoids the need to do these things while you +are typing. + +The variable `auto-save-timeout' says how many seconds Emacs should +wait, after you stop typing, before it does an auto save and a garbage +collection. + +** If auto saving detects that a buffer has shrunk greatly, it refrains +from auto saving that buffer and displays a warning. Now it also turns +off Auto Save mode in that buffer, so that you won't get the same +warning again. + +If you reenable Auto Save mode in that buffer, Emacs will start saving +it again with no further warnings. + +** A new minor mode called Line Number mode displays the current line +number in the mode line, updating it as necessary when you move +point. + +However, if the buffer is very large (larger than the value of +`line-number-display-limit'), then the line number doesn't appear. +This is because computing the line number can be painfully slow if the +buffer is very large. + +** You can quit while Emacs is waiting to read or write files. + +** The arrow keys now have default bindings to move in the appropriate +directions. + +** You can suppress next-line's habit of inserting a newline when +called at the end of a buffer by setting next-line-add-newlines to nil +(it defaults to t). + +** You can now get back recent minibuffer inputs conveniently. While +in the minibuffer, type M-p to fetch the next earlier minibuffer +input, and use M-n to fetch the next later input. + +There are also commands to search forward or backward through the +history for history elements that match a regular expression. M-r +searches older elements in the history, while M-s searches newer +elements. By special dispensation, these commands can always use the +minibuffer to read their arguments even though you are already in the +minibuffer when you issue them. + +The history feature is available for all uses of the minibuffer, but +there are separate history lists for different kinds of input. For +example, there is a list for file names, used by all the commands that +read file names. There is a list for arguments of commands like +`query-replace'. There are also very specific history lists, such +as the one that `compile' uses for compilation commands. + +** You can now display text in a mixture of fonts and colors, using the +"face" feature, together with the overlay and text property features. +See the Emacs Lisp manual for details. The Emacs Users Manual describes +how to change the colors and font of standard predefined faces. + +** You can refer to files on other machines using special file name syntax: + +/HOST:FILENAME +/USER@HOST:FILENAME + +When you do this, Emacs uses the FTP program to read and write files on +the specified host. It logs in through FTP using your user name or the +name USER. It may ask you for a password from time to time; this +is used for logging in on HOST. + +** Some C-x key bindings have been moved onto new prefix keys. + +C-x r is a prefix for registers and rectangles. +C-x n is a prefix for narrowing. +C-x a is a prefix for abbrev commands. + +C-x r C-SPC +C-x r SPC point-to-register (Was C-x /) +C-x r j jump-to-register (Was C-x j) +C-x r s copy-to-register (Was C-x x) +C-x r i insert-register (Was C-x g) +C-x r r copy-rectangle-to-register (Was C-x r) +C-x r k kill-rectangle +C-x r y yank-rectangle +C-x r o open-rectangle +C-x r f frame-configuration-to-register + (This saves the state of all windows in all frames.) +C-x r w window-configuration-to-register + (This saves the state of all windows in the selected frame.) + +(Use C-x r j to restore a configuration saved with C-x r f or C-x r w.) + +C-x n n narrow-to-region (Was C-x n) +C-x n p narrow-to-page (Was C-x p) +C-x n w widen (Was C-x w) + +C-x a l add-mode-abbrev (Was C-x C-a) +C-x a g add-global-abbrev (Was C-x +) +C-x a i l inverse-add-mode-abbrev (Was C-x C-h) +C-x a i g inverse-add-global-abbrev (Was C-x -) +C-x a e expand-abbrev (Was C-x ') + +(The old key bindings C-x /, C-x j, C-x x and C-x g +have not yet been removed.) + +** You can put a file name in a register to be able to visit the file +quickly. Do this: + + (set-register ?CHAR '(file . NAME)) + +where NAME is the file name as a string. Then C-x r j CHAR finds that +file. + +This is useful for files that you need to visit frequently, +but that you don't want to keep in buffers all the time. + +** The keys M-g (fill-region) and C-x a (append-to-buffer) +have been eliminated. + +** The new command `string-rectangle' inserts a specified string on +each line of the region-rectangle. + +** C-x 4 r is now `find-file-read-only-other-window'. + +** C-x 4 C-o is now `display-buffer', which displays a specified buffer +in another window without selecting it. + +** Picture mode has been substantially improved. The picture editing commands +now arrange for automatic horizontal scrolling to keep point visible +when editing a wide buffer with truncate-lines on. Picture-mode +initialization now does a better job of rebinding standard commands; +it finds not just their normal keybindings, but any function keys +attached to them. + +** If you enable Transient Mark mode, then the mark becomes "inactive" +after every command that modifies the buffer. While the mark is +active, the region is highlighted (under X, at least). Most commands +that use the mark give an error if the mark is inactive, but you can +use C-x C-x to make it active again. This feature is also sometimes +known as "Zmacs mode". + +** Outline mode is now available as a minor mode. This minor mode can +combine with any major mode; it substitutes the C-c commands of +Outline mode for those of the major mode. Use M-x outline-minor-mode +to enable and disable the new mode. + +M-x outline-mode is unchanged; it still switches to Outline mode as a +major mode. + +** The default setting of `version-control' comes from the environment +variable VERSION_CONTROL. + +** The user option for controlling whether files can set local +variables is now called `enable-local-variables'. A value of t means +local-variables lists are obeyed; nil means they are ignored; anything +else means query the user. + +The user option for controlling use of the `eval' local variable is +now called is `enable-local-eval'; its values are interpreted like +those of `enable-local-variables'. + +** X Window System changes: + +C-x 5 C-f and C-x 5 b switch to a specified file or buffer in a new +frame. Likewise, C-x 5 m starts outgoing mail in another frame, and +C-x 5 . finds a tag in another frame. + +When you are using X, C-z now iconifies the selected frame. + +Emacs can now exchange text with other X applications. Killing or +copying text in Emacs now makes that text available for pasting into +other X applications. The Emacs yanking commands now insert the +latest selection set by other applications, and add the text to the +kill ring. The Emacs commands for selecting and inserting text with +the mouse now use the kill ring in the same way the keyboard killing +and yanking commands do. + +The option to specify the title for the initial frame is now `-name NAME'. +There is currently no way to specify an icon title; perhaps we will add +one in the future. + +** Undoing a deletion now puts point back where it was before the +deletion. + +** The variables that control how much undo information to save have +been renamed to `undo-limit' and `undo-strong-limit'. They used to be +called `undo-threshold' and `undo-high-threshold'. + +** You can now use kill commands in read-only buffers. They don't +actually change the buffer, and Emacs will beep and warn you that the +buffer is read-only, but they do copy the text you tried to kill into +the kill ring, so you can yank it into other buffers. + +** C-o inserts the fill-prefix on the newly created line. The command +M-^ deletes the prefix (if it occurs) after the newline that it +deletes. + +** C-M-l now runs the command `reposition-window'. It scrolls the +window heuristically in a way designed to get useful information onto +the screen. + +** C-M-r is now reverse incremental regexp search. + +** M-z now kills through the target character. In version 18, it +killed up to but not including the target character. + +** M-! now runs the specified shell command asynchronously if it +ends in `&' (just as the shell does). + +** C-h C-f and C-h C-k are new help commands that display the Info +node for a given Emacs function name or key sequence, respectively. + +** The C-h p command system lets you find Emacs Lisp packages by +topic keywords. Here is a partial list of package categories: + +abbrev abbreviation handling, typing shortcuts, macros +bib code related to the bib bibliography processor +c C and C++ language support +calendar calendar and time management support +comm communications, networking, remote access to files +docs support for Emacs documentation +emulations emulations of other editors +extensions Emacs Lisp language extensions +games games, jokes and amusements +hardware support for interfacing with exotic hardware +help support for on-line help systems +i14n internationalization and alternate character-set support +internal code for Emacs internals, build process, defaults +languages specialized modes for editing programming languages +lisp Lisp support, including Emacs Lisp +local code local to your site +maint maintenance aids for the Emacs development group +mail modes for electronic-mail handling +news support for netnews reading and posting +processes process, subshell, compilation, and job control support +terminals support for terminal types +tex code related to the TeX formatter +tools programming tools +unix front-ends/assistants for, or emulators of, UNIX features +vms support code for vms +wp word processing + +More will be added soon. + +** The command to split a window into two side-by-side windows is now +C-x 3. It was C-x 5. + +** M-. (find-tag) no longer has any effect on what M-, will do +subsequently. You can no longer use M-, to find the next similar tag; +you must use M-. with a prefix argument, instead. + +The motive for this change is so that you can more reliably use +M-, to resume a suspended `tags-search' or `tags-query-replace'. + +** C-x s (`save-some-buffers') now gives you more options when it asks +whether to save a particular buffer. In addition to `y' or `n', you +can answer `!' to save all the remaining buffers, `.' to save this +buffer but not save any others, ESC to stop saving and exit the +command, and C-h to get help. These options are analogous to those +of `query-replace'. + +** M-x make-symbolic-link does not expand its first argument. +This lets you make a link with a target that is a relative file name. + +** M-x add-change-log-entry and C-x 4 a now automatically insert the +name of the file and often the name of the function that you changed. +They also handle grouping of entries. + +There is now a special major mode for editing ChangeLog files. It +makes filling work conveniently. Each bunch of grouped entries is one +paragraph, and each collection of entries from one person on one day +is considered a page. + +** The `comment-region' command adds comment delimiters to the lines that +start in the region, thus commenting them out. With a negative argument, +it deletes comment delimiters from the lines in the region--this cancels +the effect of `comment-region' without an argument. + +With a positive argument, `comment-region' adds comment delimiters +but duplicates the last character of the comment start sequence as many +times as the argument specifies. This is a way of calling attention to +the comment. In Lisp, you should use an argument at least two, because +the indentation convention for single semicolon comments does not leave +them at the beginning of a line. + +** If `split-window-keep-point' is non-nil, C-x 2 tries to avoid +shifting any text on the screen by putting point in whichever window +happens to contain the screen line the cursor is already on. +The default is that `split-window-keep-point' is non-nil on slow +terminals. + +** M-x super-apropos is like M-x apropos except that it searches both +Lisp symbol names and documentation strings for matches. It describes +every symbol that has a match in either the symbol's name or its +documentation. + +Both M-x apropos and M-x super-apropos take an optional second +argument DO-ALL which controls the more expensive part of the job. +This includes looking up and printing the key bindings of all +commands. It also includes checking documentation strings in +super-apropos. DO-ALL is nil by default; use a prefix arg to make it +non-nil. + +** M-x revert-buffer no longer offers to revert from a recent auto-save +file unless you give it a prefix argument. Otherwise it always +reverts from the real file regardless of whether there has been an +auto-save since thenm. (Reverting from the auto-save file is no longer +very useful now that the undo capacity is larger.) + +** M-x recover-file no longer turns off Auto Save mode when it reads +the last Auto Save file. + +** M-x rename-buffer, if you give it a prefix argument, +avoids errors by modifying the new name to make it unique. + +** M-x rename-uniquely renames the current buffer to a similar name +with a numeric suffix added to make it both different and unique. + +One use of this command is for creating multiple shell buffers. +If you rename your shell buffer, and then do M-x shell again, it +makes a new shell buffer. This method is also good for mail buffers, +compilation buffers, and any Emacs feature which creates a special +buffer with a particular name. + +** M-x compare-windows with a prefix argument ignores changes in whitespace. +If `compare-ignore-case' is non-nil, then differences in case are also +ignored. + +** `backward-paragraph' is now bound to M-{ by default, and `forward-paragraph' +to M-}. Originally, these commands were bound to M-[ and M-], but they were +running into conflicts with the use of function keys. On many terminals, +function keys send a sequence beginning ESC-[, so many users have defined this +as a prefix key. + +** C-x C-u (upcase-region) and C-x C-l (downcase-region) are now disabled by +default; these commands seem to be often hit by accident, and can be +quite destructive if their effects are not noticed immediately. + +** The function `erase-buffer' is now interactive, but disabled by default. + +** When visiting a new file, Emacs attempts to abbreviate the file's +path using the symlinks listed in `directory-abbrev-alist'. + +** When you visit the same file in under two names that translate into +the same name once symbolic links are handled, Emacs warns you that +you have two buffers for the same file. + +** If you wish to avoid visiting the same file in two buffers under +different names, set the variable `find-file-existing-other-name' +non-nil. Then `find-file' uses the existing buffer visiting the file, +no matter which of the file's names you specify. + +** If you set `find-file-visit-truename' non-nil, then the file name +recorded for a buffer is the file's truename (in which all symbolic +links have been removed), rather than the name you specify. Setting +`find-file-visit-truename' also implies the effect of +`find-file-existing-other-name'. + +** C-x C-v now inserts the entire current file name in the minibuffer. +This is convenient if you made a small mistake in typing it. Point +goes after the last slash, before the last file name component, so if +you want to replace it entirely, you can use C-k right away to delete +it. + +** Commands such as C-M-f in Lisp mode now ignore parentheses within comments. + +** C-x q now uses ESC to terminate all iterations of the keyboard +macro, rather than C-d as before. + +** Use the command `setenv' to set an individual environment variable +for Emacs subprocesses. Specify a variable name and a value, both as +strings. This command applies only to subprocesses yet to be +started. + +** Use `rot13-other-window' to examine a buffer with rot13. + +This command does not change the text in the buffer. Instead, it +creates a window with a funny display table that applies the code when +displaying the text. + +** The command `M-x version' now prints the current Emacs version; The +`version' command is an alias for the `emacs-version' command. + +** More complex changes in existing packages. + +*** `fill-nonuniform-paragraphs' is a new command, much like +`fill-individual-paragraphs' except that only separator lines separate +paragraphs. Since this means that the lines of one paragraph may have +different amounts of indentation, the fill prefix used is the smallest +amount of indentation of any of the lines of the paragraph. + +*** Filling is now partially controlled by a new minor mode, Adaptive +Fill mode. When this mode is enabled (and it is enabled by default), +if you use M-x fill-region-as-paragraph on an indented paragraph and +you don't have a fill prefix, it uses the indentation of the second +line of the paragraph as the fill prefix. + +Adaptive Fill mode doesn't have much effect on M-q in most major +modes, because an indented line will probably count as a paragraph +starter and thus each line of an indented paragraph will be considered +a paragraph of its own. + +*** M-q in C mode now runs `c-fill-paragraph', which is designed +for filling C comments. (We assume you don't want to fill +the code in a C program.) + +*** M-$ now runs the Ispell program instead of the Unix spell program. + +M-$ starts an Ispell process the first time you use it. But the process +stays alive, so that subsequent uses of M-$ run very fast. +If you want to get rid of the process, use M-x kill-ispell. + +To check the entire current buffer, use M-x ispell-buffer. +Use M-x ispell-region to check just the current region. + +Ispell commands often involve interactive replacement of words. +You can interrupt the interactive replacement with C-g. +You can restart it again afterward with C-u M-$. + +During interactive replacement, you can type the following characters: + +a Accept this word this time. +DIGIT Replace the word (this time) with one of the displayed near-misses. + The digit you use says which near-miss to use. +i Insert this word in your private dictionary + so that Ispell will consider it correct it from now on. +r Replace the word this time with a string typed by you. + +When the Ispell process starts, it reads your private dictionary which +is the file `~/ispell.words'. If you "insert" words with the `i' command, +these words are added to that file, but not right away--only at the end +of the interactive replacement process. + +Use M-x reload-ispell to reload your private dictionary from +`~/ispell.words' if you edit it outside of Ispell. + +** Changes in existing modes. + +*** gdb-mode has been replaced by gud-mode. + +The package gud.el (Grand Unified Debugger) replaces gdb.el in Emacs +19. It provides a gdb.el-like interface to any of three debuggers; +gdb itself, the sdb debugger supported on some Unix systems, or the +dbx debugger on Berkeley systems. + + You start it up with one of the commands M-x gdb, M-x sdb, or +M-x dbx. Each entry point finishes by executing a hook; gdb-mode-hook, +sdb-mode-hook or dbx-mode-hook respectively. + +These bindings have changed: +C-x C-a > gud-down (was M-d) +C-x C-a < gud-up (was M-u) +C-x C-a C-r gud-cont (was M-c) +C-x C-a C-n gud-next (was M-n) +C-x C-a C-s gud-step (was M-s) +C-x C-a C-i gud-stepi (was M-i) +C-x C-a C-l gud-recenter (was C-l) +C-d comint-delchar-or-maybe-eof (was C-c C-d) + +These bindings have been removed: +C-c C-r (was comint-show-output; now gud-cont) + +Since GUD mode uses comint, it uses comint's input history commands, +superseding C-c C-y (copy-last-shell-input): + M-p comint-next-input + M-n comint-previous-input + M-r comint-previous-similar-input + M-s comint-next-similar-input + M-C-r comint-previous-input-matching + +The C-x C-a bindings are also active in source files. + +*** The old TeX mode bindings of M-{ and M-} have been moved to C-c { +and C-c }. (These commands are `up-list' and `tex-insert-braces'; +they are the TeX equivalents of M-( and M-).) This is because M-{ +and M-} are now globally defined commands. + +*** Changes in Mail mode. + +`%' is now a word-separator character in Mail mode. + +`mail-signature', if non-nil, tells M-x mail to insert your +`.signature' file automatically. If you don't want your signature in +a particular message, just delete it before you send the message. + +You can specify the text to insert at the beginning of each line when +you use C-c C-y to yank the message you are replying to. Set +`mail-yank-prefix' to the desired string. A value of `nil' (the +default) means to use indentation, as in Emacs 18. If you use just +C-u as the prefix argument to C-c C-y, then it does not insert +anything at the beginning of the lines, regardless of the value of +`mail-yank-prefix'. + +If you like, you can expand mail aliases as abbrevs, as soon as you +type them in. To enable this feature, execute the following: + + (add-hook 'mail-setup-hook 'mail-abbrevs-setup) + +This can go in your .emacs file. + +Word abbrevs don't expand unless you insert a word-separator character +afterward. Any mail aliases that you didn't expand at insertion time +are expanded subsequently when you send the message. + +*** Changes in Rmail. + +Rmail by default gets new mail only from the system inbox file, +not from `~/mbox'. + +In Rmail, you can retry sending a message that failed +by typing `M-m' on the failure message. + +By contrast, another new command M-x rmail-resend is used for +forwarding a message and marking it as "resent from" you +with header fields "Resent-From:" and "Resent-To:". + +`e' is now the command to edit a message. +To expunge, type `x'. We know this will surprise people +some of the time, but the surprise will not be disastrous--if +you type `e' meaning to expunge, just turn off editing with C-c C-c +and then type `x'. + +Another new Rmail command is `<', which moves to the first message. +This is for symmetry with `>'. + +Use the `b' command to bury the Rmail buffer and its summary buffer, +if any, removing both of them from display on the screen. + +The variable `rmail-output-file-alist' now controls the default +for the file to output a message to. + +In the Rmail summary buffer, all cursor motion commands select +the message you move to. It's really neat when you use +incremental search. + +You can now issue most Rmail commands from an Rmail summary buffer. +The commands do the same thing in that buffer that they do in the +Rmail buffer. They apply to the message that is selected in the Rmail +buffer, which is always the one described by the current summary +line. + +Conversely, motion and deletion commands in the Rmail buffer also +update the summary buffer. If you set the variable +`rmail-redisplay-summary' to a non-nil value, then they bring the +summary buffer (if one exists) back onto the screen. + +C-M-t is a new command to make a summary by topic. It uses regexp +matching against just the subjects of the messages to decide which +messages to show in the summary. + +You can easily convert an Rmail file to system mailbox format with the +command `unrmail'. This command reads two arguments, the name of +the Rmail file to convert, and the name of the new mailbox file. +(This command does not change the Rmail file itself.) + +Rmail now handles Content Length fields in messages. + +*** `mail-extract-address-components' unpacks mail addresses. +It takes an address as a string (the contents of the From field, for +example) and returns a list of the form (FULL-NAME +CANONICAL-ADDRESS). + +*** Changes in C mode and C-related commands. + +**** M-x c-up-conditional + +In C mode, `c-up-conditional' moves back to the containing +preprocessor conditional, setting the mark where point was +previously. + +A prefix argument acts as a repeat count. With a negative argument, +this command moves forward to the end of the containing preprocessor +conditional. When going backwards, `#elif' acts like `#else' followed +by `#if'. When going forwards, `#elif' is ignored. + +**** In C mode, M-a and M-e are now defined as +`c-beginning-of-statement' and `c-end-of-statement'. + +**** In C mode, M-x c-backslash-region is a new command to insert or +align `\' characters at the ends of the lines of the region, except +for the last such line. This is useful after writing or editing a C +macro definition. + +If a line already ends in `\', this command adjusts the amount of +whitespace before it. Otherwise, it inserts a new `\'. + +*** New features in info. + +When Info looks for an Info file, it searches the directories +in `Info-directory-list'. This makes it easy to install the Info files +that come with various packages. You can specify the path with +the environment variable INFOPATH. + +There are new commands in Info mode. + +`]' now moves forward a node, going up and down levels as needed. +`[' is similar but moves backward. These two commands try to traverse +the entire Info tree, node by node. They are the equivalent of reading +a printed manual sequentially. + +`<' moves to the top node of the current Info file. +`>' moves to the last node of the file. + +SPC scrolls through the current node; at the end, it advances to the +next node in depth-first order (like `]'). + +DEL scrolls backwards in the current node; at the end, it moves to the +previous node in depth-first order (like `['). + +After a menu select, the info `up' command now restores point in the +menu. The combination of this and the previous two changes means that +repeated SPC keystrokes do the right (depth-first traverse forward) thing. + +`i STRING RET' moves to the node associated with STRING in the index +or indices of this manual. If there is more than one match for +STRING, the `i' command finds the first match. + +`,' finds the next match for the string in the previous `i' command + +If you click the middle mouse button near a cross-reference, +menu item or node pointer while in Info, you will go to the node +which is referenced. + +*** Changes in M-x compile. + +You can repeat any previous compilation command conveniently using the +minibuffer history commands, while in the minibuffer entering the +compilation command. + +While a compilation is going on, the string `Compiling' appears in +the mode line. When this string disappears, that tells you the +compilation is finished. + +The buffer of compiler messages is in Compilation mode. This mode +provides the keys SPC and DEL to scroll by screenfuls, and M-n and M-p +to move to the next or previous error message. You can also use C-c +C-c on any error message to find the corresponding source code. + +Emacs 19 has a more general parser for compiler messages. For example, it +can understand messages from lint, and from certain C compilers whose error +message format is unusual. Also, it only parses until it sees the error +message you want; you never have to wait a long time to see the first +error, no matter how big the buffer is. + +*** M-x diff and M-x diff-backup. + +This new command compares two files, displaying the differences in an +Emacs buffer. The options for the `diff' program come from the +variable `diff-switches', whose value should be a string. + +The buffer of differences has Compilation mode as its major mode, so you +can use C-x ` to visit successive changed locations in the two +source files, or you can move to a particular hunk of changes and type +C-c C-c to move to the corresponding source. You can also use the +other special commands of Compilation mode: SPC and DEL for +scrolling, and M-n and M-p for cursor motion. + +M-x diff-backup compares a file with its most recent backup. +If you specify the name of a backup file, `diff-backup' compares it +with the source file that it is a backup of. + +*** The View commands (such as M-x view-buffer and M-x view-file) no +longer use recursive edits; instead, they switch temporarily to a +different major mode (View mode) specifically designed for moving +around through a buffer without editing it. + +*** Changes in incremental search. + +**** The character to terminate an incremental search is now RET. +This is for compatibility with the way most other arguments are read. + +To search for a newline in an incremental search, type LFD (also known +as C-j). + +**** Incremental search now maintains a ring of previous search +strings. Use M-p and M-n to move through the ring to pick a search +string to reuse. These commands leave the selected search ring +element in the minibuffer, where you can edit it. Type C-s or C-r to +finish editing and search for the chosen string. + +**** If you type an upper case letter in incremental search, that turns +off case-folding, so that you get a case-sensitive search. + +**** If you type a space during regexp incremental search, it matches +any sequence of whitespace characters. If you want to match just a space, +type C-q SPC. + +**** Incremental search is now implemented as a major mode. When you +type C-s, it switches temporarily to a different keymap which defines +each key to do what it ought to do for incremental search. This has +next to no effect on the user-visible behavior of searching, but makes +it easier to customize that behavior. + +Emacs 19 eliminates the old variables `search-...-char' that used to +be the way to specify the characters to use for various special +purposes in incremental search. Instead, you can define the meaning +of a character in incremental search by modifying `isearch-mode-map'. + +*** New commands in Buffer Menu mode. + +The command C-o now displays the current line's buffer in another +window but does not select it. This is like the existing command `o' +which selects the current line's buffer in another window. + +The command % toggles the read-only flag of the current line's buffer. + +The way to switch to a set of several buffers, including those marked +with m, is now v. The q command simply quits, replacing the buffer +menu buffer with the buffer that was displayed previously. + +** New major modes and packages. + +*** The news reader GNUS is now installed. + +*** There is a new interface for version control systems, called VC. +It works with both RCS and SCCS; in fact, you don't really have to +know which one of them is being used, because it automatically deals +with either one. + +Most of the time, the only command you have to know about is C-x C-q. +This command normally toggles the read-only flag of the current +buffer. If the buffer is visiting a file that is maintained with a +version control system, the command still toggles read-only, but does +so by checking the file in or checking it out. + +When you check a file in, VC asks you for a log entry by popping up a +buffer. Edit the entry there, then type C-c C-c when it is ready. +That's when the actual checkin happens. If you change your mind about +the checkin, simply switch buffers and don't ever go back to the log +buffer. + +To start using version control for a file, use the command C-x v v. +This works like C-x C-q (performing the next logical version-control +operation needed to change the file's writability) but it will also +perform initial checkin on an unregistered file. + +By default, VC uses RCS if RCS is installed on your machine; +otherwise, SCCS. If you want to make the choice explicitly, you can do +it by setting `vc-default-back-end' to the symbol `RCS' or the symbol +`SCCS'. + +You can tell when a file you visit is maintained with version control +because either `RCS' or `SCCS' appears in the mode line. + +*** A new Calendar mode has been added, the work of Edward M. Reingold. +The mode can display the Gregorian calendar and a variety of other +calendars at any date, and interacts with a diary facility similar to +the UNIX `calendar' utility. + +*** There is a new major mode for editing binary files: Hexl mode. +To use it, use M-x hexl-find-file instead of C-x C-f to visit the file. +This command converts the file's contents to hexadecimal and lets you +edit the translation. When you save the file, it is converted +automatically back to binary. + +You can also use M-x hexl-mode to translate an existing buffer into hex. +Do this if you have already visited a binary file. + +Hexl mode has a few other commands: + +C-M-d insert a byte with a code typed in decimal. +C-M-o insert a byte with a code typed in octal. +C-M-x insert a byte with a code typed in hex. + +C-x [ move to the beginning of a 1k-byte "page". +C-x ] move to the end of a 1k-byte "page". + +M-g go to an address specified in hex. +M-j go to an address specified in decimal. + +C-c C-c leave hexl mode and go back to the previous major mode. + +*** Miscellaneous new major modes include Awk mode, Icon mode, Makefile +mode, Perl mode and SGML mode. + +*** Edebug, a new source-level debugger for Emacs Lisp functions. + +To use Edebug, use the command M-x edebug-defun to "evaluate" a +function definition in an Emacs Lisp file. We put "evaluate" in +quotation marks because it doesn't just evaluate the function, it also +inserts additional information to support source-level debugging. + +You must also do + + (setq debugger 'edebug-debug) + +to cause errors and single-stepping to use Edebug instead of the usual +Emacs Lisp debugger. + +For more information, see the Edebug manual, which should be included +in the Emacs distribution. + +*** C++ mode is like C mode, except that it understands C++ comment syntax +and certain other differences between C and C++. It also has a command +`fill-c++-comment' which fills a paragraph made of comment lines. + +The command `comment-region' is useful in C++ mode for commenting out +several consecutive lines, or removing the commenting out of such lines. + +*** A new package for merging two variants of the same text. + +It's not unusual for programmers to get their signals crossed and +modify the same program in two different directions. Then somebody +has to merge the two versions. The command `emerge-files' makes this +easier. + +`emerge-files' reads two file names and compares them. Then it +displays three buffers: one for each file, and one for the +differences. + +If the original version of the file is available, you can make things +even easier using `emerge-files-with-ancestor'. It reads three file +names--variant 1, variant 2, and the common ancestor--and uses diff3 +to compare them. + +You control the merging interactively. The main loop of Emerge +consists of showing you one set of differences, asking you what to do +about them, and doing it. You have a choice of two modes for giving +directions to Emerge: "fast" mode and "edit" mode. + +In Fast mode, Emerge commands are single characters, and ordinary +Emacs commands are disabled. This makes Emerge operations fast, but +prevents you from doing more than selecting the A or the B version of +differences. In Edit mode, all emerge commands use the C-c prefix, +and the usual Emacs commands are available. This allows editing the +merge buffer, but slows down Emerge operations. Edit and fast modes +are indicated by `F' and `E' in the minor modes in the mode line. + +The Emerge commands are: + + p go to the previous difference + n go to the next difference + a select the A version of this difference + b select the B version of this difference + j go to a particular difference (prefix argument + specifies which difference) (0j suppresses display of + the flags) + q quit - finish the merge* + f go into fast mode + e go into edit mode + l recenter (C-l) all three windows* + - and 0 through 9 + prefix numeric arguments + d a select the A version as the default from here down in + the merge buffer* + d b select the B version as the default from here down in + the merge buffer* + c a copy the A version of the difference into the kill + ring + c b copy the B version of the difference into the kill + ring + i a insert the A version of the difference at the point + i b insert the B version of the difference at the point + m put the point and mark around the difference region + ^ scroll-down (like M-v) the three windows* + v scroll-up (like C-v) the three windows* + < scroll-left (like C-x <) the three windows* + > scroll-right (like C-x >) the three windows* + | reset horizontal scroll on the three windows* + x 1 shrink the merge window to one line (use C-u l to restore it + to full size) + x a find the difference containing a location in the A buffer* + x b find the difference containing a location in the B buffer* + x c combine the two versions of this difference* + x C combine the two versions of this difference, using a + register's value as the template* + x d find the difference containing a location in the merge buffer* + x f show the files/buffers Emerge is operating on in Help window + (use C-u l to restore windows) + x j join this difference with the following one + (C-u x j joins this difference with the previous one) + x l show line numbers of points in A, B, and merge buffers + x m change major mode of merge buffer* + x s split this difference into two differences + (first position the point in all three buffers to the places + to split the difference) + x t trim identical lines off top and bottom of difference + (such lines occur when the A and B versions are + identical but differ from the ancestor version) + x x set the template for the x c command* + +Normally, the merged output goes back in the first file specified. +If you use a prefix argument, Emerge reads another file name to use +for the output file. + +Once Emerge has prepared the buffer of differences, it runs the hooks +in `emerge-startup-hooks'. + +*** Asm mode is a new major mode for editing files of assembler code. +It defines these commands: + +TAB tab-to-tab-stop. +LFD Insert a newline and then indent using tab-to-tab-stop. +: Insert a colon and then remove the indentation + from before the label preceding colon. Then tab-to-tab-stop. +; Insert or align a comment. + +*** Two-column mode lets you conveniently edit two side-by-side columns +of text. It works using two side-by-side windows, each showing its +own buffer. + +Here are three ways to enter two-column mode: + +C-x 6 2 makes the current buffer into the left-hand buffer. In the +right-hand window it puts a buffer whose name is based on the current +buffer's name. + +C-x 6 b BUFFER RET makes the current buffer into the left-hand buffer, +and uses buffer BUFFER as the right-hand buffer. + +C-x 6 s splits the current buffer, which contains two-column text, +into two side-by-side buffers. The old current buffer becomes the +left-hand buffer, but the text in the right column is moved into the +right-hand buffer. The current column specifies the split point. +Splitting starts with the current line and continues to the end of the +buffer. + +C-x 6 s takes a prefix argument which specifies how many characters +before point constitute the column separator. (The default argument +is 1, as usual, so by default the column separator is the character +before point.) Lines that don't have the column separator at the +proper place remain unsplit; they stay in the left-hand buffer, and +the right-hand buffer gets an empty line to correspond. + +You can scroll both buffers together using C-x 6 SPC (scroll up), C-x +6 DEL (scroll down), and C-x 6 RET (scroll up one line). C-x 6 C-l +recenters both buffers together. + +If you want to make a line which will span both columns, put it in +the left-hand buffer, with an empty line in the corresponding place in +the right-hand buffer. + +When you have edited both buffers as you wish, merge them with C-x 6 +1. This copies the text from the right-hand buffer as a second column +in the other buffer. To go back to two-column editing, use C-x 6 s. + +Use C-x 6 d to disassociate the two buffers, leaving each as it +stands. (If the other buffer, the one that was not current when you +type C-x 6 d, is empty, C-x 6 d kills it.) + +*** You can supply command arguments such as files to visit to an Emacs +that is already running. To do this, you must do this in your .emacs +file: + (add-hook 'suspend-hook 'resume-suspend-hook) +Also you must use the shellscript emacs.csh or emacs.sh, found in the +etc subdirectory. + +*** Shell mode has been completely replaced. +The basic idea is the same, but there are new commands available in +this mode. + +TAB now completes the file name before point in the shell buffer. +To get a list of all possible completions, type M-?. + +There is a new convenient history mechanism for repeating previous +commands. Use the command M-p to recall the last command; it copies +the text of that command to the place where you are editing. If you +repeat M-p, it replaces the copied command with the previous command. +M-n is similar but goes in the opposite direction towards the present. +When you find the command you wanted, you can edit it, or just +resubmit it by typing RET. + +You can also use M-r and M-s to search for (respectively) earlier or +later inputs starting with a given string. First type the string, +then type M-r to yank a previous input from the history which starts +with that string. You can repeat M-r to find successively earlier +inputs starting with the same string. You can start moving in the +opposite direction (toward more recent inputs) by typing M-s instead +of M-r. As long as you don't use any commands except M-r and M-s, +they keep using the same string that you had entered initially. + +C-c C-o kills the last batch of output from a shell command. This is +useful if a shell command spews out lots of output that just gets in +the way. + +C-c C-r scrolls to display the beginning of the last batch of output +at the top of the window; it also moves the cursor there. + +C-a on a line that starts with a shell prompt moves to the end of the +prompt, not to the very beginning of the line. + +C-d typed at the end of the shell buffer sends EOF to the subshell. +At any other position in the buffer, it deletes a character as usual. + +If Emacs gets confused while trying to track changes in the shell's +current directory, type M-x dirs to re-synchronize. + +M-x send-invisible reads a line of text without echoing it, and +sends it to the shell. + +If you accidentally suspend your process, use M-x comint-continue-subjob +to continue it. + +*** There is now a convenient way to enable flow control on terminals +where you can't win without it. Suppose you want to do this on +VT-100 and H19 terminals; put the following in your `.emacs' file: + + (enable-flow-control-on "vt100" "h19") + +When flow control is enabled, you must type C-\ to get the effect of a +C-s, and type C-^ to get the effect of a C-q. + +The function `enable-flow-control' enables flow control unconditionally. + +** Changes in Dired + +Dired has many new features which allow you to do these things: + +- Rename, copy, or make links to many files at once. + +- Make distinguishable types of marks for different operations. + +- Display contents of subdirectories in the same Dired buffer as the +parent directory. + +*** Setting and Clearing Marks + +There are now two kinds of marker that you can put on a file in Dired: +`D' for deletion, and `*' for any other kind of operation. +The `x' command deletes only files marked with `D', and most +other Dired commands operate only on the files marked with `*'. + +To mark files with `D' (also called "flagging" the files), you +can use `d' as usual. Here are some commands for marking with +`*' (and also for unmarking): + +**** `m' marks the current file with `*', for an operation other than +deletion. + +**** `*' marks all executable files. With a prefix argument, it +unmarks all those files. + +**** `@' marks all symbolic links. With a prefix argument, it unmarks +all those files. + +**** `/' marks all directory files except `.' and `..'. With a prefix +argument, it unmarks all those files. + +**** M-DEL removes a specific or all marks from every file. With an +argument, queries for each marked file. Type your help character, +usually C-h, at that time for help. + +**** `c' replaces all marks that use the character OLD with marks that +use the character NEW. You can use almost any character as a mark +character by means of this command, to distinguish various classes of +files. If OLD is ` ', then the command operates on all unmarked +files; if NEW is ` ', then the command unmarks the files it acts on. + +*** Operating on Multiple Files + +The Dired commands to operate directly on files (rename them, copy +them, and so on) have been generalized to work on multiple files. +There are also some additional commands in this series. + +All of these commands use the same convention to decide which files to +manipulate: + +- If you give the command a numeric prefix argument @var{n}, it operates +on the next @var{n} files, starting with the current file. + +- Otherwise, if there are marked files, the commands operate on all the +marked files. + +- Otherwise, the command operates on the current file only. + +These are the commands: + +**** `C' copies the specified files. You must specify a directory to +copy into, or (if copying a single file) a new name. + +If `dired-copy-preserve-time' is non-`nil', then copying sets +the modification time of the new file to be the same as that of the old +file. + +**** `R' renames the specified files. You must specify a directory to +rename into, or (if renaming a single file) a new name. + +Dired automatically changes the visited file name of buffers associated +with renamed files so that they refer to the new names. + +**** `H' makes hard links to the specified files. You must specify a +directory to make the links in, or (if making just one link) the name +to give the link. + +**** `S' makes symbolic links to the specified files. You must specify +a directory to make the links in, or (if making just one link) the +name to give the link. + +**** `M' changes the mode of the specified files. This calls the +`chmod' program, so you can describe the desired mode change with any +argument that `chmod' would handle. + +**** `G' changes the group of the specified files. + +**** `O' changes the owner of the specified files. (On normal systems, +only the superuser can do this.) + +The variable `dired-chown-program' specifies the name of the +program to use to do the work (different systems put `chown' in +different places. + +**** `Z' compresses or uncompresses the specified files. + +**** `L' loads the specified Emacs Lisp files. + +**** `B' byte compiles the specified Emacs Lisp files. + +**** `P' prints the specified files. It uses the variables +`lpr-command' and `lpr-switches' just as `lpr-file' does. + +*** Shell Commands in Dired + +`!' reads a shell command string in the minibuffer and runs the shell +command on all the specified files. There are two ways of applying a +shell command to multiple files: + +- If you use `*' in the command, then the shell command runs just +once, with the list of file names substituted for the `*'. + +Thus, `! tar cf foo.tar * RET' runs `tar' on the entire list of file +names, putting them into one tar file `foo.tar'. The file names are +inserted in the order that they appear in the Dired buffer. + +- If the command string doesn't contain `*', then it runs once for +each file, with the file name attached at the end. For example, `! +uudecode RET' runs `uudecode' on each file. + +To run the shell command once for each file but without being limited +to putting the file name inserted in the middle, use a shell loop. +For example, this shell command would run `uuencode' on each of the +specified files, writing the output into a corresponding `.uu' file: + + for file in *; uuencode $file $file >$file.uu; done + +The working directory for the shell command is the top level directory +of the Dired buffer. + +*** Regular Expression File Name Substitution + +**** `% m REGEXP RET' marks all files whose names match the regular +expression REGEXP. + +Only the non-directory part of the file name is used in matching. Use +`^' and `$' to anchor matches. Exclude subdirs by hiding them. + +**** `% d REGEXP RET' flags for deletion all files whose names match +the regular expression REGEXP. + +**** `% R', `% C', `% H', `% S' + +These four commands rename, copy, make hard links and make soft links, +in each case computing the new name by regular expression substitution +from the name of the old file. They effectively perform +`query-replace-regexp' on the selected file names in the Dired buffer. + +The commands read two arguments: a regular expression, and a +substitution pattern. Each selected file name is matched against the +regular expression, and then the part which matched is replaced with +the substitution pattern. You can use `\&' and `\DIGIT' in the +substitution pattern to refer to all or part of the old file name. + +If the regular expression matches more than once in a file name, +only the first match is replaced. + +Normally, the replacement process does not consider the directory names; +it operates on the file name within the directory. If you specify a +prefix argument of zero, then replacement affects entire file name. + +To apply the command to all files matching the same regexp that you +use in the command, mark those files with `% m REGEXP RET', then use +the same regular expression in `% R'. To make this easier, `% R' uses +as a default the last regular expression specified in a `%' command. + +*** Dired Case Conversion + +**** `% u' renames each of the selected files to an upper case name. + +**** `% l' renames each of the selected files to a lower case name. + +*** File Comparison with Dired + +**** `=' compares the current file with another file (the file at the +mark), by running the `diff' program. The file at the mark is given +to `diff' first. + +**** `M-=' compares the current file with its backup file. If there +are several numerical backups, it uses the most recent one. If this +file is a backup, it is compared with its original. + +The backup file is the first file given to `diff'. + +*** Subdirectories in Dired + +You can display more than one directory in one Dired buffer. +The simplest way to do this is to specify the options `-lR' for +running `ls'. That produces a recursive directory listing showing +all subdirectories, all within the same Dired buffer. + +You can also insert the contents of a particular subdirectory with the +`i' command. Use this command on the line that describes a file which +is a directory. Inserted subdirectory contents follow the top-level +directory of the Dired buffer, just as they do in `ls -lR' output. + +If the subdirectory's contents are already present in the buffer, the +`i' command just moves to it (type `l' to refresh it). It sets the +Emacs mark before moving, so C-x C-x takes you back to the old +position in the buffer. + +When you have subdirectories in the Dired buffer, you can use the page +motion commands C-x [ and C-x ] to move by entire directories. + +The following commands move up and down in the tree of directories +in one Dired buffer: + +**** C-M-u Go up to the parent directory's headerline. + +**** C-M-d Go down in the tree, to the first subdirectory's +headerline. + +**** C-M-n Go to next subdirectory headerline, regardless of level. + +**** C-M-p Go to previous subdirectory headerline, regardless of +level. + +*** Hiding Subdirectories + +"Hiding" a subdirectory means to make it invisible, except for its +headerline. Files inside a hidden subdirectory are never considered +by Dired. For example, the commands to operate on marked files ignore +files in hidden directories even if they are marked. + +**** `$' hides or unhides the current subdirectory and move to next +subdirectory. A prefix argument serves as a repeat count. + +**** `M-$' hides all subdirectories, leaving only their header lines. +Or, if at least one subdirectory is currently hidden, it makes +everything visible again. You can use this command to get an overview +in very deep directory trees or to move quickly to subdirectories far +away. + +*** Editing the Dired Buffer + +**** `l' updates the specified files in a Dired buffer. This means +reading their current status from the file system and changing the +buffer to reflect it properly. + +If you use this command on a subdirectory header line, it updates the +contents of the subdirectory. + +**** `g' updates the entire contents of the Dired buffer. It preserves +all marks except for those on files that have vanished. Hidden +subdirectories are updated but remain hidden. + +**** `k' kills all marked lines (not the files). With a prefix +argument, it kills that many lines starting with the current line. + +This command does not delete files; it just deletes text from the Dired +buffer. + +If you kill the line for a file that is a directory, then its contents +are also deleted from the buffer. Typing `C-u k' on the header line +for a subdirectory is another way to delete a subdirectory from the +Dired buffer. + +*** `find' and Dired. + +To search for files with names matching a wildcard pattern use +`find-name-dired'. Its arguments are DIRECTORY and +PATTERN. It selects all the files in DIRECTORY or its +subdirectories whose own names match PATTERN. + +The files thus selected are displayed in a Dired buffer in which the +ordinary Dired commands are available. + +If you want to test the contents of files, rather than their names, use +`find-grep-dired'. This command takes two minibuffer arguments, +DIRECTORY and REGEXP; it selects all the files in +DIRECTORY or its subdirectories that contain a match for +REGEXP. It works by running `find' and `grep'. + +The most general command in this series is `find-dired', which lets +you specify any condition that `find' can test. It takes two +minibuffer arguments, DIRECTORY and FIND-ARGS; it runs `find' in +DIRECTORY with using FIND-ARGS as the arguments to `find' specifying +which files to accept. To use this command, you need to know how to +use `find'. + +** New amusements and novelties. + +*** `M-x mpuz' displays a multiplication puzzle, in which each letter +stands for a digit, and you must determine which digit. The puzzles +are determined randomly, so they are always different. + +*** `M-x gomoku' plays the game Gomoku with you. It needs more work. + +*** `M-x spook' adds a line of randomly chosen keywords to an outgoing +mail message. The keywords are chosen from a list of words that +suggest you are discussing something subversive. + +The idea is that the NSA reads all messages that contain keywords +suggesting they might be interested, and that adding these lines could +help to overload them. I would guess that they have modified their +program by now to ignore these lines of keywords; perhaps the program +can be updated if some clever hacker can determine what criterion they +actually use now. + +** Installation changes + +*** The configure script has been provided to help with the +installation process. It takes the place of editing the Makefiles and +src/config.h, and can often guess the appropriate operating system to +use for a particular machine type. See INSTALL for a more detailed +description of the steps required for installation. + +*** If you create a Lisp file named `site-start.el', Emacs loads the file +whenever it starts up. + +*** A new Lisp variable, `data-directory', indicates the directory +containing the DOC file, tutorial, copying agreement, and other +familiar `etc' files. The value of `data-directory' is a simple string. +The default should be set at build time, and the person installing +Emacs should place all the data files in this directory. The `help.el' +functions that look for docstrings and information files check this +variable. All Emacs Lisp packages should also be coded so that they +refer to `data-directory' to find data files. + +*** The PURESIZE definition has been moved from config.h to its own +file, puresize.h. Since almost every file of C source in the +distribution depends on config.h, but only alloc.c and data.c depend +on puresize.h, this means that changing the value of PURESIZE causes +only those two files to be recompiled. + +*** The makefile at the top of the Emacs source tree now supports a +`dist' target, which creates a compressed tar file suitable for +distribution, using the contents of the source tree. Object files, +old file versions, executables, DOC files, and other +architecture-specific or easy-to-recreate files are not included in +the tar file. + + + +---------------------------------------------------------------------- +Copyright information: + +Copyright (C) 1993, 1994, 1995, 2001, 2006 Free Software Foundation, Inc. + + Permission is granted to anyone to make or distribute verbatim copies + of this document as received, in any medium, provided that the + copyright notice and this permission notice are preserved, + thus giving the recipient permission to redistribute in turn. + + Permission is granted to distribute modified versions + of this document, or of portions of it, + under the above conditions, provided also that they + carry prominent notices stating who last changed them. + +Local variables: +mode: outline +paragraph-separate: "[ ]*$" +end: + +arch-tag: 944be39b-afe8-4217-9977-c745b68a7ca2 diff -r 86cedfd9ade6 -r 25fa0038a52d etc/NEWS.20 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/NEWS.20 Sun Jun 04 01:01:51 2006 +0000 @@ -0,0 +1,4513 @@ +GNU Emacs NEWS -- history of user-visible changes. 2006-05-31 +Copyright (C) 1999, 2000, 2001, 2006 + Free Software Foundation, Inc. +See the end for copying conditions. + +Please send Emacs bug reports to bug-gnu-emacs@gnu.org. +If possible, use M-x report-emacs-bug. + +This file is about changes in emacs version 20. + + + +* Emacs 20.7 is a bug-fix release with few user-visible changes + +** It is now possible to use CCL-based coding systems for keyboard +input. + +** ange-ftp now handles FTP security extensions, like Kerberos. + +** Rmail has been extended to recognize more forms of digest messages. + +** Now, most coding systems set in keyboard coding system work not +only for character input, but also in incremental search. The +exceptions are such coding systems that handle 2-byte character sets +(e.g euc-kr, euc-jp) and that use ISO's escape sequence +(e.g. iso-2022-jp). They are ignored in incremental search. + +** Support for Macintosh PowerPC-based machines running GNU/Linux has +been added. + + + +* Emacs 20.6 is a bug-fix release with one user-visible change + +** Support for ARM-based non-RISCiX machines has been added. + + + +* Emacs 20.5 is a bug-fix release with no user-visible changes. + +** Not new, but not mentioned before: +M-w when Transient Mark mode is enabled disables the mark. + + + +* Changes in Emacs 20.4 + +** Init file may be called .emacs.el. + +You can now call the Emacs init file `.emacs.el'. +Formerly the name had to be `.emacs'. If you use the name +`.emacs.el', you can byte-compile the file in the usual way. + +If both `.emacs' and `.emacs.el' exist, the latter file +is the one that is used. + +** shell-command, and shell-command-on-region, now return +the exit code of the command (unless it is asynchronous). +Also, you can specify a place to put the error output, +separate from the command's regular output. +Interactively, the variable shell-command-default-error-buffer +says where to put error output; set it to a buffer name. +In calls from Lisp, an optional argument ERROR-BUFFER specifies +the buffer name. + +When you specify a non-nil error buffer (or buffer name), any error +output is inserted before point in that buffer, with \f\n to separate +it from the previous batch of error output. The error buffer is not +cleared, so error output from successive commands accumulates there. + +** Setting the default value of enable-multibyte-characters to nil in +the .emacs file, either explicitly using setq-default, or via Custom, +is now essentially equivalent to using --unibyte: all buffers +created during startup will be made unibyte after loading .emacs. + +** C-x C-f now handles the wildcards * and ? in file names. For +example, typing C-x C-f c*.c RET visits all the files whose names +match c*.c. To visit a file whose name contains * or ?, add the +quoting sequence /: to the beginning of the file name. + +** The M-x commands keep-lines, flush-lines and count-matches +now have the same feature as occur and query-replace: +if the pattern contains any upper case letters, then +they never ignore case. + +** The end-of-line format conversion feature previously mentioned +under `* Emacs 20.1 changes for MS-DOS and MS-Windows' actually +applies to all operating systems. Emacs recognizes from the contents +of a file what convention it uses to separate lines--newline, CRLF, or +just CR--and automatically converts the contents to the normal Emacs +convention (using newline to separate lines) for editing. This is a +part of the general feature of coding system conversion. + +If you subsequently save the buffer, Emacs converts the text back to +the same format that was used in the file before. + +You can turn off end-of-line conversion by setting the variable +`inhibit-eol-conversion' to non-nil, e.g. with Custom in the MULE group. + +** The character set property `prefered-coding-system' has been +renamed to `preferred-coding-system', for the sake of correct spelling. +This is a fairly internal feature, so few programs should be affected. + +** Mode-line display of end-of-line format is changed. +The indication of the end-of-line format of the file visited by a +buffer is now more explicit when that format is not the usual one for +your operating system. For example, the DOS-style end-of-line format +is displayed as "(DOS)" on Unix and GNU/Linux systems. The usual +end-of-line format is still displayed as a single character (colon for +Unix, backslash for DOS and Windows, and forward slash for the Mac). + +The values of the variables eol-mnemonic-unix, eol-mnemonic-dos, +eol-mnemonic-mac, and eol-mnemonic-undecided, which are strings, +control what is displayed in the mode line for each end-of-line +format. You can now customize these variables. + +** In the previous version of Emacs, tar-mode didn't work well if a +filename contained non-ASCII characters. Now this is fixed. Such a +filename is decoded by file-name-coding-system if the default value of +enable-multibyte-characters is non-nil. + +** The command temp-buffer-resize-mode toggles a minor mode +in which temporary buffers (such as help buffers) are given +windows just big enough to hold the whole contents. + +** If you use completion.el, you must now run the function +dynamic-completion-mode to enable it. Just loading the file +doesn't have any effect. + +** In Flyspell mode, the default is now to make just one Ispell process, +not one per buffer. + +** If you use iswitchb but do not call (iswitchb-default-keybindings) to +use the default keybindings, you will need to add the following line: + (add-hook 'minibuffer-setup-hook 'iswitchb-minibuffer-setup) + +** Auto-show mode is no longer enabled just by loading auto-show.el. +To control it, set `auto-show-mode' via Custom or use the +`auto-show-mode' command. + +** Handling of X fonts' ascent/descent parameters has been changed to +avoid redisplay problems. As a consequence, compared with previous +versions the line spacing and frame size now differ with some font +choices, typically increasing by a pixel per line. This change +occurred in version 20.3 but was not documented then. + +** If you select the bar cursor style, it uses the frame's +cursor-color, rather than the cursor foreground pixel. + +** In multibyte mode, Rmail decodes incoming MIME messages using the +character set specified in the message. If you want to disable this +feature, set the variable rmail-decode-mime-charset to nil. + +** Not new, but not mentioned previously in NEWS: when you use #! at +the beginning of a file to make it executable and specify an +interpreter program, Emacs looks on the second line for the -*- mode +and variable specification, as well as on the first line. + +** Support for IBM codepage encoding of non-ASCII characters. + +The new command M-x codepage-setup creates a special coding system +that can be used to convert text between a specific IBM codepage and +one of the character sets built into Emacs which matches that +codepage. For example, codepage 850 corresponds to Latin-1 character +set, codepage 855 corresponds to Cyrillic-ISO character set, etc. + +Windows codepages 1250, 1251 and some others, where Windows deviates +from the corresponding ISO character set, are also supported. + +IBM box-drawing characters and other glyphs which don't have +equivalents in the corresponding ISO character set, are converted to +a character defined by dos-unsupported-char-glyph on MS-DOS, and to +`?' on other systems. + +IBM codepages are widely used on MS-DOS and MS-Windows, so this +feature is most useful on those platforms, but it can also be used on +Unix. + +Emacs compiled for MS-DOS automatically loads the support for the +current codepage when it starts. + +** Mail changes + +*** When mail is sent using compose-mail (C-x m), and if +`mail-send-nonascii' is set to the new default value `mime', +appropriate MIME headers are added. The headers are added only if +non-ASCII characters are present in the body of the mail, and no other +MIME headers are already present. For example, the following three +headers are added if the coding system used in the *mail* buffer is +latin-1: + + MIME-version: 1.0 + Content-type: text/plain; charset=iso-8859-1 + Content-Transfer-Encoding: 8bit + +*** The new variable default-sendmail-coding-system specifies the +default way to encode outgoing mail. This has higher priority than +default-buffer-file-coding-system but has lower priority than +sendmail-coding-system and the local value of +buffer-file-coding-system. + +You should not set this variable manually. Instead, set +sendmail-coding-system to specify a fixed encoding for all outgoing +mail. + +*** When you try to send a message that contains non-ASCII characters, +if the coding system specified by those variables doesn't handle them, +Emacs will ask you to select a suitable coding system while showing a +list of possible coding systems. + +** CC Mode changes + +*** c-default-style can now take an association list that maps major +modes to style names. When this variable is an alist, Java mode no +longer hardcodes a setting to "java" style. See the variable's +docstring for details. + +*** It's now possible to put a list as the offset on a syntactic +symbol. The list is evaluated recursively until a non-nil offset is +found. This is useful to combine several lineup functions to act in a +prioritized order on a single line. However, none of the supplied +lineup functions use this feature currently. + +*** New syntactic symbol catch-clause, which is used on the "catch" and +"finally" lines in try-catch constructs in C++ and Java. + +*** New cleanup brace-catch-brace on c-cleanup-list, which does for +"catch" lines what brace-elseif-brace does for "else if" lines. + +*** The braces of Java anonymous inner classes are treated separately +from the braces of other classes in auto-newline mode. Two new +symbols inexpr-class-open and inexpr-class-close may be used on +c-hanging-braces-alist to control the automatic newlines used for +anonymous classes. + +*** Support for the Pike language added, along with new Pike specific +syntactic symbols: inlambda, lambda-intro-cont + +*** Support for Java anonymous classes via new syntactic symbol +inexpr-class. New syntactic symbol inexpr-statement for Pike +support and gcc-style statements inside expressions. New lineup +function c-lineup-inexpr-block. + +*** New syntactic symbol brace-entry-open which is used in brace lists +(i.e. static initializers) when a list entry starts with an open +brace. These used to be recognized as brace-list-entry's. +c-electric-brace also recognizes brace-entry-open braces +(brace-list-entry's can no longer be electrified). + +*** New command c-indent-line-or-region, not bound by default. + +*** `#' is only electric when typed in the indentation of a line. + +*** Parentheses are now electric (via the new command c-electric-paren) +for auto-reindenting lines when parens are typed. + +*** In "gnu" style, inline-open offset is now set to zero. + +*** Uniform handling of the inclass syntactic symbol. The indentation +associated with it is now always relative to the class opening brace. +This means that the indentation behavior has changed in some +circumstances, but only if you've put anything besides 0 on the +class-open syntactic symbol (none of the default styles do that). + +** Gnus changes. + +*** New functionality for using Gnus as an offline newsreader has been +added. A plethora of new commands and modes have been added. See the +Gnus manual for the full story. + +*** The nndraft backend has returned, but works differently than +before. All Message buffers are now also articles in the nndraft +group, which is created automatically. + +*** `gnus-alter-header-function' can now be used to alter header +values. + +*** `gnus-summary-goto-article' now accept Message-ID's. + +*** A new Message command for deleting text in the body of a message +outside the region: `C-c C-v'. + +*** You can now post to component group in nnvirtual groups with +`C-u C-c C-c'. + +*** `nntp-rlogin-program' -- new variable to ease customization. + +*** `C-u C-c C-c' in `gnus-article-edit-mode' will now inhibit +re-highlighting of the article buffer. + +*** New element in `gnus-boring-article-headers' -- `long-to'. + +*** `M-i' symbolic prefix command. See the section "Symbolic +Prefixes" in the Gnus manual for details. + +*** `L' and `I' in the summary buffer now take the symbolic prefix +`a' to add the score rule to the "all.SCORE" file. + +*** `gnus-simplify-subject-functions' variable to allow greater +control over simplification. + +*** `A T' -- new command for fetching the current thread. + +*** `/ T' -- new command for including the current thread in the +limit. + +*** `M-RET' is a new Message command for breaking cited text. + +*** \\1-expressions are now valid in `nnmail-split-methods'. + +*** The `custom-face-lookup' function has been removed. +If you used this function in your initialization files, you must +rewrite them to use `face-spec-set' instead. + +*** Canceling now uses the current select method. Symbolic prefix +`a' forces normal posting method. + +*** New command to translate M******** sm*rtq**t*s into proper text +-- `W d'. + +*** For easier debugging of nntp, you can set `nntp-record-commands' +to a non-nil value. + +*** nntp now uses ~/.authinfo, a .netrc-like file, for controlling +where and how to send AUTHINFO to NNTP servers. + +*** A command for editing group parameters from the summary buffer +has been added. + +*** A history of where mails have been split is available. + +*** A new article date command has been added -- `article-date-iso8601'. + +*** Subjects can be simplified when threading by setting +`gnus-score-thread-simplify'. + +*** A new function for citing in Message has been added -- +`message-cite-original-without-signature'. + +*** `article-strip-all-blank-lines' -- new article command. + +*** A new Message command to kill to the end of the article has +been added. + +*** A minimum adaptive score can be specified by using the +`gnus-adaptive-word-minimum' variable. + +*** The "lapsed date" article header can be kept continually +updated by the `gnus-start-date-timer' command. + +*** Web listserv archives can be read with the nnlistserv backend. + +*** Old dejanews archives can now be read by nnweb. + +*** `gnus-posting-styles' has been re-activated. + +** Changes to TeX and LaTeX mode + +*** The new variable `tex-start-options-string' can be used to give +options for the TeX run. The default value causes TeX to run in +nonstopmode. For an interactive TeX run set it to nil or "". + +*** The command `tex-feed-input' sends input to the Tex Shell. In a +TeX buffer it is bound to the keys C-RET, C-c RET, and C-c C-m (some +of these keys may not work on all systems). For instance, if you run +TeX interactively and if the TeX run stops because of an error, you +can continue it without leaving the TeX buffer by typing C-RET. + +*** The Tex Shell Buffer is now in `compilation-shell-minor-mode'. +All error-parsing commands of the Compilation major mode are available +but bound to keys that don't collide with the shell. Thus you can use +the Tex Shell for command line executions like a usual shell. + +*** The commands `tex-validate-region' and `tex-validate-buffer' check +the matching of braces and $'s. The errors are listed in a *Occur* +buffer and you can use C-c C-c or mouse-2 to go to a particular +mismatch. + +** Changes to RefTeX mode + +*** The table of contents buffer can now also display labels and +file boundaries in addition to sections. Use `l', `i', and `c' keys. + +*** Labels derived from context (the section heading) are now +lowercase by default. To make the label legal in LaTeX, latin-1 +characters will lose their accent. All Mule characters will be +removed from the label. + +*** The automatic display of cross reference information can also use +a window instead of the echo area. See variable `reftex-auto-view-crossref'. + +*** kpsewhich can be used by RefTeX to find TeX and BibTeX files. See the +customization group `reftex-finding-files'. + +*** The option `reftex-bibfile-ignore-list' has been renamed to +`reftex-bibfile-ignore-regexps' and indeed can be fed with regular +expressions. + +*** Multiple Selection buffers are now hidden buffers. + +** New/deleted modes and packages + +*** The package snmp-mode.el provides major modes for editing SNMP and +SNMPv2 MIBs. It has entries on `auto-mode-alist'. + +*** The package sql.el provides a major mode, M-x sql-mode, for +editing SQL files, and M-x sql-interactive-mode for interacting with +SQL interpreters. It has an entry on `auto-mode-alist'. + +*** ispell4.el has been deleted. It got in the way of ispell.el and +this was hard to fix reliably. It has long been obsolete -- use +Ispell 3.1 and ispell.el. + + +* MS-DOS changes in Emacs 20.4 + +** Emacs compiled for MS-DOS now supports MULE features better. +This includes support for display of all ISO 8859-N character sets, +conversion to and from IBM codepage encoding of non-ASCII characters, +and automatic setup of the MULE environment at startup. For details, +check out the section `MS-DOS and MULE' in the manual. + +The MS-DOS installation procedure automatically configures and builds +Emacs with input method support if it finds an unpacked Leim +distribution when the config.bat script is run. + +** Formerly, the value of lpr-command did not affect printing on +MS-DOS unless print-region-function was set to nil, but now it +controls whether an external program is invoked or output is written +directly to a printer port. Similarly, in the previous version of +Emacs, the value of ps-lpr-command did not affect PostScript printing +on MS-DOS unless ps-printer-name was set to something other than a +string (eg. t or `pipe'), but now it controls whether an external +program is used. (These changes were made so that configuration of +printing variables would be almost identical across all platforms.) + +** In the previous version of Emacs, PostScript and non-PostScript +output was piped to external programs, but because most print programs +available for MS-DOS and MS-Windows cannot read data from their standard +input, on those systems the data to be output is now written to a +temporary file whose name is passed as the last argument to the external +program. + +An exception is made for `print', a standard program on Windows NT, +and `nprint', a standard program on Novell Netware. For both of these +programs, the command line is constructed in the appropriate syntax +automatically, using only the value of printer-name or ps-printer-name +as appropriate--the value of the relevant `-switches' variable is +ignored, as both programs have no useful switches. + +** The value of the variable dos-printer (cf. dos-ps-printer), if it has +a value, overrides the value of printer-name (cf. ps-printer-name), on +MS-DOS and MS-Windows only. This has been true since version 20.3, but +was not documented clearly before. + +** All the Emacs games now work on MS-DOS terminals. +This includes Tetris and Snake. + + +* Lisp changes in Emacs 20.4 + +** New functions line-beginning-position and line-end-position +return the position of the beginning or end of the current line. +They both accept an optional argument, which has the same +meaning as the argument to beginning-of-line or end-of-line. + +** find-file and allied functions now have an optional argument +WILDCARD. If this is non-nil, they do wildcard processing, +and visit all files that match the wildcard pattern. + +** Changes in the file-attributes function. + +*** The file size returned by file-attributes may be an integer or a float. +It is an integer if the size fits in a Lisp integer, float otherwise. + +*** The inode number returned by file-attributes may be an integer (if +the number fits in a Lisp integer) or a cons cell containing two +integers. + +** The new function directory-files-and-attributes returns a list of +files in a directory and their attributes. It accepts the same +arguments as directory-files and has similar semantics, except that +file names and attributes are returned. + +** The new function file-attributes-lessp is a helper function for +sorting the list generated by directory-files-and-attributes. It +accepts two arguments, each a list of a file name and its attributes. +It compares the file names of each according to string-lessp and +returns the result. + +** The new function file-expand-wildcards expands a wildcard-pattern +to produce a list of existing files that match the pattern. + +** New functions for base64 conversion: + +The function base64-encode-region converts a part of the buffer +into the base64 code used in MIME. base64-decode-region +performs the opposite conversion. Line-breaking is supported +optionally. + +Functions base64-encode-string and base64-decode-string do a similar +job on the text in a string. They return the value as a new string. + +** +The new function process-running-child-p +will tell you if a subprocess has given control of its +terminal to its own child process. + +** interrupt-process and such functions have a new feature: +when the second argument is `lambda', they send a signal +to the running child of the subshell, if any, but if the shell +itself owns its terminal, no signal is sent. + +** There are new widget types `plist' and `alist' which can +be used for customizing variables whose values are plists or alists. + +** easymenu.el now understands `:key-sequence' and `:style button'. +:included is an alias for :visible. + +easy-menu-add-item now understands the values returned by +easy-menu-remove-item and easy-menu-item-present-p. This can be used +to move or copy menu entries. + +** Multibyte editing changes + +*** The definitions of sref and char-bytes are changed. Now, sref is +an alias of aref and char-bytes always returns 1. This change is to +make some Emacs Lisp code which works on 20.2 and earlier also +work on the latest Emacs. Such code uses a combination of sref and +char-bytes in a loop typically as below: + (setq char (sref str idx) + idx (+ idx (char-bytes idx))) +The byte-compiler now warns that this is obsolete. + +If you want to know how many bytes a specific multibyte character +(say, CH) occupies in a multibyte buffer, use this code: + (charset-bytes (char-charset ch)) + +*** In multibyte mode, when you narrow a buffer to some region, and the +region is preceded or followed by non-ASCII codes, inserting or +deleting at the head or the end of the region may signal this error: + + Byte combining across boundary of accessible buffer text inhibited + +This is to avoid some bytes being combined together into a character +across the boundary. + +*** The functions find-charset-region and find-charset-string include +`unknown' in the returned list in the following cases: + o The current buffer or the target string is unibyte and + contains 8-bit characters. + o The current buffer or the target string is multibyte and + contains invalid characters. + +*** The functions decode-coding-region and encode-coding-region remove +text properties of the target region. Ideally, they should correctly +preserve text properties, but for the moment, it's hard. Removing +text properties is better than preserving them in a less-than-correct +way. + +*** prefer-coding-system sets EOL conversion of default coding systems. +If the argument to prefer-coding-system specifies a certain type of +end of line conversion, the default coding systems set by +prefer-coding-system will specify that conversion type for end of line. + +*** The new function thai-compose-string can be used to properly +compose Thai characters in a string. + +** The primitive `define-prefix-command' now takes an optional third +argument NAME, which should be a string. It supplies the menu name +for the created keymap. Keymaps created in order to be displayed as +menus should always use the third argument. + +** The meanings of optional second arguments for read-char, +read-event, and read-char-exclusive are flipped. Now the second +arguments are INHERIT-INPUT-METHOD. These functions use the current +input method (if any) if and only if INHERIT-INPUT-METHOD is non-nil. + +** The new function clear-this-command-keys empties out the contents +of the vector that (this-command-keys) returns. This is useful in +programs that read passwords, to prevent the passwords from echoing +inadvertently as part of the next command in certain cases. + +** The new macro `with-temp-message' displays a temporary message in +the echo area, while executing some Lisp code. Like `progn', it +returns the value of the last form, but it also restores the previous +echo area contents. + + (with-temp-message MESSAGE &rest BODY) + +** The function `require' now takes an optional third argument +NOERROR. If it is non-nil, then there is no error if the +requested feature cannot be loaded. + +** In the function modify-face, an argument of (nil) for the +foreground color, background color or stipple pattern +means to clear out that attribute. + +** The `outer-window-id' frame property of an X frame +gives the window number of the outermost X window for the frame. + +** Temporary buffers made with with-output-to-temp-buffer are now +read-only by default, and normally use the major mode Help mode +unless you put them in some other non-Fundamental mode before the +end of with-output-to-temp-buffer. + +** The new functions gap-position and gap-size return information on +the gap of the current buffer. + +** The new functions position-bytes and byte-to-position provide a way +to convert between character positions and byte positions in the +current buffer. + +** vc.el defines two new macros, `edit-vc-file' and `with-vc-file', to +facilitate working with version-controlled files from Lisp programs. +These macros check out a given file automatically if needed, and check +it back in after any modifications have been made. + + + +* Installation Changes in Emacs 20.3 + +** The default value of load-path now includes most subdirectories of +the site-specific directories /usr/local/share/emacs/site-lisp and +/usr/local/share/emacs/VERSION/site-lisp, in addition to those +directories themselves. Both immediate subdirectories and +subdirectories multiple levels down are added to load-path. + +Not all subdirectories are included, though. Subdirectories whose +names do not start with a letter or digit are excluded. +Subdirectories named RCS or CVS are excluded. Also, a subdirectory +which contains a file named `.nosearch' is excluded. You can use +these methods to prevent certain subdirectories from being searched. + +Emacs finds these subdirectories and adds them to load-path when it +starts up. While it would be cleaner to find the subdirectories each +time Emacs loads a file, that would be much slower. + +This feature is an incompatible change. If you have stored some Emacs +Lisp files in a subdirectory of the site-lisp directory specifically +to prevent them from being used, you will need to rename the +subdirectory to start with a non-alphanumeric character, or create a +`.nosearch' file in it, in order to continue to achieve the desired +results. + +** Emacs no longer includes an old version of the C preprocessor from +GCC. This was formerly used to help compile Emacs with C compilers +that had limits on the significant length of an identifier, but in +fact we stopped supporting such compilers some time ago. + + +* Changes in Emacs 20.3 + +** The new command C-x z (repeat) repeats the previous command +including its argument. If you repeat the z afterward, +it repeats the command additional times; thus, you can +perform many repetitions with one keystroke per repetition. + +** Emacs now supports "selective undo" which undoes only within a +specified region. To do this, set point and mark around the desired +region and type C-u C-x u (or C-u C-_). You can then continue undoing +further, within the same region, by repeating the ordinary undo +command C-x u or C-_. This will keep undoing changes that were made +within the region you originally specified, until either all of them +are undone, or it encounters a change which crosses the edge of that +region. + +In Transient Mark mode, undoing when a region is active requests +selective undo. + +** If you specify --unibyte when starting Emacs, then all buffers are +unibyte, except when a Lisp program specifically creates a multibyte +buffer. Setting the environment variable EMACS_UNIBYTE has the same +effect. The --no-unibyte option overrides EMACS_UNIBYTE and directs +Emacs to run normally in multibyte mode. + +The option --unibyte does not affect the reading of Emacs Lisp files, +though. If you want a Lisp file to be read in unibyte mode, use +-*-unibyte: t;-*- on its first line. That will force Emacs to +load that file in unibyte mode, regardless of how Emacs was started. + +** toggle-enable-multibyte-characters no longer has a key binding and +no longer appears in the menu bar. We've realized that changing the +enable-multibyte-characters variable in an existing buffer is +something that most users not do. + +** You can specify a coding system to use for the next cut or paste +operations through the window system with the command C-x RET X. +The coding system can make a difference for communication with other +applications. + +C-x RET x specifies a coding system for all subsequent cutting and +pasting operations. + +** You can specify the printer to use for commands that do printing by +setting the variable `printer-name'. Just what a printer name looks +like depends on your operating system. You can specify a different +printer for the Postscript printing commands by setting +`ps-printer-name'. + +** Emacs now supports on-the-fly spell checking by the means of a +minor mode. It is called M-x flyspell-mode. You don't have to remember +any other special commands to use it, and you will hardly notice it +except when you make a spelling error. Flyspell works by highlighting +incorrect words as soon as they are completed or as soon as the cursor +hits a new word. + +Flyspell mode works with whichever dictionary you have selected for +Ispell in Emacs. In TeX mode, it understands TeX syntax so as not +to be confused by TeX commands. + +You can correct a misspelled word by editing it into something +correct. You can also correct it, or accept it as correct, by +clicking on the word with Mouse-2; that gives you a pop-up menu +of various alternative replacements and actions. + +Flyspell mode also proposes "automatic" corrections. M-TAB replaces +the current misspelled word with a possible correction. If several +corrections are made possible, M-TAB cycles through them in +alphabetical order, or in order of decreasing likelihood if +flyspell-sort-corrections is nil. + +Flyspell mode also flags an error when a word is repeated, if +flyspell-mark-duplications-flag is non-nil. + +** Changes in input method usage. + +Now you can use arrow keys (right, left, down, up) for selecting among +the alternatives just the same way as you do by C-f, C-b, C-n, and C-p +respectively. + +You can use the ENTER key to accept the current conversion. + +If you type TAB to display a list of alternatives, you can select one +of the alternatives with Mouse-2. + +The meaning of the variable `input-method-verbose-flag' is changed so +that you can set it to t, nil, `default', or `complex-only'. + + If the value is nil, extra guidance is never given. + + If the value is t, extra guidance is always given. + + If the value is `complex-only', extra guidance is always given only + when you are using complex input methods such as chinese-py. + + If the value is `default' (this is the default), extra guidance is + given in the following case: + o When you are using a complex input method. + o When you are using a simple input method but not in the minibuffer. + +If you are using Emacs through a very slow line, setting +input-method-verbose-flag to nil or to complex-only is a good choice, +and if you are using an input method you are not familiar with, +setting it to t is helpful. + +The old command select-input-method is now called set-input-method. + +In the language environment "Korean", you can use the following +keys: + Shift-SPC toggle-korean-input-method + C-F9 quail-hangul-switch-symbol-ksc + F9 quail-hangul-switch-hanja +These key bindings are canceled when you switch to another language +environment. + +** The minibuffer history of file names now records the specified file +names, not the entire minibuffer input. For example, if the +minibuffer starts out with /usr/foo/, you might type in /etc/passwd to +get + + /usr/foo//etc/passwd + +which stands for the file /etc/passwd. + +Formerly, this used to put /usr/foo//etc/passwd in the history list. +Now this puts just /etc/passwd in the history list. + +** If you are root, Emacs sets backup-by-copying-when-mismatch to t +at startup, so that saving a file will be sure to preserve +its owner and group. + +** find-func.el can now also find the place of definition of Emacs +Lisp variables in user-loaded libraries. + +** C-x r t (string-rectangle) now deletes the existing rectangle +contents before inserting the specified string on each line. + +** There is a new command delete-whitespace-rectangle +which deletes whitespace starting from a particular column +in all the lines on a rectangle. The column is specified +by the left edge of the rectangle. + +** You can now store a number into a register with C-u NUMBER C-x r n REG, +increment it by INC with C-u INC C-x r + REG (to increment by one, omit +C-u INC), and insert it in the buffer with C-x r g REG. This is useful +for writing keyboard macros. + +** The new command M-x speedbar displays a frame in which directories, +files, and tags can be displayed, manipulated, and jumped to. The +frame defaults to 20 characters in width, and is the same height as +the frame that it was started from. Some major modes define +additional commands for the speedbar, including Rmail, GUD/GDB, and +info. + +** query-replace-regexp is now bound to C-M-%. + +** In Transient Mark mode, when the region is active, M-x +query-replace and the other replace commands now operate on the region +contents only. + +** M-x write-region, when used interactively, now asks for +confirmation before overwriting an existing file. When you call +the function from a Lisp program, a new optional argument CONFIRM +says whether to ask for confirmation in this case. + +** If you use find-file-literally and the file is already visited +non-literally, the command asks you whether to revisit the file +literally. If you say no, it signals an error. + +** Major modes defined with the "derived mode" feature +now use the proper name for the mode hook: WHATEVER-mode-hook. +Formerly they used the name WHATEVER-mode-hooks, but that is +inconsistent with Emacs conventions. + +** shell-command-on-region (and shell-command) reports success or +failure if the command produces no output. + +** Set focus-follows-mouse to nil if your window system or window +manager does not transfer focus to another window when you just move +the mouse. + +** mouse-menu-buffer-maxlen has been renamed to +mouse-buffer-menu-maxlen to be consistent with the other related +function and variable names. + +** The new variable auto-coding-alist specifies coding systems for +reading specific files. This has higher priority than +file-coding-system-alist. + +** If you set the variable unibyte-display-via-language-environment to +t, then Emacs displays non-ASCII characters are displayed by +converting them to the equivalent multibyte characters according to +the current language environment. As a result, they are displayed +according to the current fontset. + +** C-q's handling of codes in the range 0200 through 0377 is changed. + +The codes in the range 0200 through 0237 are inserted as one byte of +that code regardless of the values of nonascii-translation-table and +nonascii-insert-offset. + +For the codes in the range 0240 through 0377, if +enable-multibyte-characters is non-nil and nonascii-translation-table +nor nonascii-insert-offset can't convert them to valid multibyte +characters, they are converted to Latin-1 characters. + +** If you try to find a file that is not read-accessible, you now get +an error, rather than an empty buffer and a warning. + +** In the minibuffer history commands M-r and M-s, an upper case +letter in the regular expression forces case-sensitive search. + +** In the *Help* buffer, cross-references to commands and variables +are inferred and hyperlinked. Use C-h m in Help mode for the relevant +command keys. + +** M-x apropos-command, with a prefix argument, no longer looks for +user option variables--instead it looks for noninteractive functions. + +Meanwhile, the command apropos-variable normally searches for +user option variables; with a prefix argument, it looks at +all variables that have documentation. + +** When you type a long line in the minibuffer, and the minibuffer +shows just one line, automatically scrolling works in a special way +that shows you overlap with the previous line of text. The variable +minibuffer-scroll-overlap controls how many characters of overlap +it should show; the default is 20. + +Meanwhile, Resize Minibuffer mode is still available; in that mode, +the minibuffer grows taller (up to a point) as needed to show the whole +of your input. + +** The new command M-x customize-changed-options lets you customize +all the options whose meanings or default values have changed in +recent Emacs versions. You specify a previous Emacs version number as +argument, and the command creates a customization buffer showing all +the customizable options which were changed since that version. +Newly added options are included as well. + +If you don't specify a particular version number argument, +then the customization buffer shows all the customizable options +for which Emacs versions of changes are recorded. + +This function is also bound to the Changed Options entry in the +Customize menu. + +** When you run M-x grep with a prefix argument, it figures out +the tag around point and puts that into the default grep command. + +** The new command M-* (pop-tag-mark) pops back through a history of +buffer positions from which M-. or other tag-finding commands were +invoked. + +** The new variable comment-padding specifies the number of spaces +that `comment-region' will insert before the actual text of the comment. +The default is 1. + +** In Fortran mode the characters `.', `_' and `$' now have symbol +syntax, not word syntax. Fortran mode now supports `imenu' and has +new commands fortran-join-line (M-^) and fortran-narrow-to-subprogram +(C-x n d). M-q can be used to fill a statement or comment block +sensibly. + +** GUD now supports jdb, the Java debugger, and pdb, the Python debugger. + +** If you set the variable add-log-keep-changes-together to a non-nil +value, the command `C-x 4 a' will automatically notice when you make +two entries in one day for one file, and combine them. + +** You can use the command M-x diary-mail-entries to mail yourself a +reminder about upcoming diary entries. See the documentation string +for a sample shell script for calling this function automatically +every night. + +** Desktop changes + +*** All you need to do to enable use of the Desktop package, is to set +the variable desktop-enable to t with Custom. + +*** Minor modes are now restored. Which minor modes are restored +and how modes are restored is controlled by `desktop-minor-mode-table'. + +** There is no need to do anything special, now, to enable Gnus to +read and post multi-lingual articles. + +** Outline mode has now support for showing hidden outlines when +doing an isearch. In order for this to happen search-invisible should +be set to open (the default). If an isearch match is inside a hidden +outline the outline is made visible. If you continue pressing C-s and +the match moves outside the formerly invisible outline, the outline is +made invisible again. + +** Mail reading and sending changes + +*** The Rmail e command now switches to displaying the whole header of +the message before it lets you edit the message. This is so that any +changes you make in the header will not be lost if you subsequently +toggle. + +*** The w command in Rmail, which writes the message body into a file, +now works in the summary buffer as well. (The command to delete the +summary buffer is now Q.) The default file name for the w command, if +the message has no subject, is stored in the variable +rmail-default-body-file. + +*** Most of the commands and modes that operate on mail and netnews no +longer depend on the value of mail-header-separator. Instead, they +handle whatever separator the buffer happens to use. + +*** If you set mail-signature to a value which is not t, nil, or a string, +it should be an expression. When you send a message, this expression +is evaluated to insert the signature. + +*** The new Lisp library feedmail.el (version 8) enhances processing of +outbound email messages. It works in coordination with other email +handling packages (e.g., rmail, VM, gnus) and is responsible for +putting final touches on messages and actually submitting them for +transmission. Users of the emacs program "fakemail" might be +especially interested in trying feedmail. + +feedmail is not enabled by default. See comments at the top of +feedmail.el for set-up instructions. Among the bigger features +provided by feedmail are: + +**** you can park outgoing messages into a disk-based queue and +stimulate sending some or all of them later (handy for laptop users); +there is also a queue for draft messages + +**** you can get one last look at the prepped outbound message and +be prompted for confirmation + +**** does smart filling of address headers + +**** can generate a MESSAGE-ID: line and a DATE: line; the date can be +the time the message was written or the time it is being sent; this +can make FCC copies more closely resemble copies that recipients get + +**** you can specify an arbitrary function for actually transmitting +the message; included in feedmail are interfaces for /bin/[r]mail, +/usr/lib/sendmail, and Emacs Lisp smtpmail; it's easy to write a new +function for something else (10-20 lines of Lisp code). + +** Dired changes + +*** The Dired function dired-do-toggle, which toggles marked and unmarked +files, is now bound to "t" instead of "T". + +*** dired-at-point has been added to ffap.el. It allows one to easily +run Dired on the directory name at point. + +*** Dired has a new command: %g. It searches the contents of +files in the directory and marks each file that contains a match +for a specified regexp. + +** VC Changes + +*** New option vc-ignore-vc-files lets you turn off version control +conveniently. + +*** VC Dired has been completely rewritten. It is now much +faster, especially for CVS, and works very similar to ordinary +Dired. + +VC Dired is invoked by typing C-x v d and entering the name of the +directory to display. By default, VC Dired gives you a recursive +listing of all files at or below the given directory which are +currently locked (for CVS, all files not up-to-date are shown). + +You can change the listing format by setting vc-dired-recurse to nil, +then it shows only the given directory, and you may also set +vc-dired-terse-display to nil, then it shows all files under version +control plus the names of any subdirectories, so that you can type `i' +on such lines to insert them manually, as in ordinary Dired. + +All Dired commands operate normally in VC Dired, except for `v', which +is redefined as the version control prefix. That means you may type +`v l', `v =' etc. to invoke `vc-print-log', `vc-diff' and the like on +the file named in the current Dired buffer line. `v v' invokes +`vc-next-action' on this file, or on all files currently marked. + +The new command `v t' (vc-dired-toggle-terse-mode) allows you to +toggle between terse display (only locked files) and full display (all +VC files plus subdirectories). There is also a special command, +`* l', to mark all files currently locked. + +Giving a prefix argument to C-x v d now does the same thing as in +ordinary Dired: it allows you to supply additional options for the ls +command in the minibuffer, to fine-tune VC Dired's output. + +*** Under CVS, if you merge changes from the repository into a working +file, and CVS detects conflicts, VC now offers to start an ediff +session to resolve them. + +Alternatively, you can use the new command `vc-resolve-conflicts' to +resolve conflicts in a file at any time. It works in any buffer that +contains conflict markers as generated by rcsmerge (which is what CVS +uses as well). + +*** You can now transfer changes between branches, using the new +command vc-merge (C-x v m). It is implemented for RCS and CVS. When +you invoke it in a buffer under version-control, you can specify +either an entire branch or a pair of versions, and the changes on that +branch or between the two versions are merged into the working file. +If this results in any conflicts, they may be resolved interactively, +using ediff. + +** Changes in Font Lock + +*** The face and variable previously known as font-lock-reference-face +are now called font-lock-constant-face to better reflect their typical +use for highlighting constants and labels. (Its face properties are +unchanged.) The variable font-lock-reference-face remains for now for +compatibility reasons, but its value is font-lock-constant-face. + +** Frame name display changes + +*** The command set-frame-name lets you set the name of the current +frame. You can use the new command select-frame-by-name to select and +raise a frame; this is mostly useful on character-only terminals, or +when many frames are invisible or iconified. + +*** On character-only terminal (not a window system), changing the +frame name is now reflected on the mode line and in the Buffers/Frames +menu. + +** Comint (subshell) changes + +*** In Comint modes, the commands to kill, stop or interrupt a +subjob now also kill pending input. This is for compatibility +with ordinary shells, where the signal characters do this. + +*** There are new commands in Comint mode. + +C-c C-x fetches the "next" line from the input history; +that is, the line after the last line you got. +You can use this command to fetch successive lines, one by one. + +C-c SPC accumulates lines of input. More precisely, it arranges to +send the current line together with the following line, when you send +the following line. + +C-c C-a if repeated twice consecutively now moves to the process mark, +which separates the pending input from the subprocess output and the +previously sent input. + +C-c M-r now runs comint-previous-matching-input-from-input; +it searches for a previous command, using the current pending input +as the search string. + +*** New option compilation-scroll-output can be set to scroll +automatically in compilation-mode windows. + +** C mode changes + +*** Multiline macros are now handled, both as they affect indentation, +and as recognized syntax. New syntactic symbol cpp-macro-cont is +assigned to second and subsequent lines of a multiline macro +definition. + +*** A new style "user" which captures all non-hook-ified +(i.e. top-level) .emacs file variable settings and customizations. +Style "cc-mode" is an alias for "user" and is deprecated. "gnu" +style is still the default however. + +*** "java" style now conforms to Sun's JDK coding style. + +*** There are new commands c-beginning-of-defun, c-end-of-defun which +are alternatives which you could bind to C-M-a and C-M-e if you prefer +them. They do not have key bindings by default. + +*** New and improved implementations of M-a (c-beginning-of-statement) +and M-e (c-end-of-statement). + +*** C++ namespace blocks are supported, with new syntactic symbols +namespace-open, namespace-close, and innamespace. + +*** File local variable settings of c-file-style and c-file-offsets +makes the style variables local to that buffer only. + +*** New indentation functions c-lineup-close-paren, +c-indent-one-line-block, c-lineup-dont-change. + +*** Improvements (hopefully!) to the way CC Mode is loaded. You +should now be able to do a (require 'cc-mode) to get the entire +package loaded properly for customization in your .emacs file. A new +variable c-initialize-on-load controls this and is t by default. + +** Changes to hippie-expand. + +*** New customization variable `hippie-expand-dabbrev-skip-space'. If +non-nil, trailing spaces may be included in the abbreviation to search for, +which then gives the same behavior as the original `dabbrev-expand'. + +*** New customization variable `hippie-expand-dabbrev-as-symbol'. If +non-nil, characters of syntax '_' is considered part of the word when +expanding dynamically. + +*** New customization variable `hippie-expand-no-restriction'. If +non-nil, narrowed buffers are widened before they are searched. + +*** New customization variable `hippie-expand-only-buffers'. If +non-empty, buffers searched are restricted to the types specified in +this list. Useful for example when constructing new special-purpose +expansion functions with `make-hippie-expand-function'. + +*** Text properties of the expansion are no longer copied. + +** Changes in BibTeX mode. + +*** Any titleword matching a regexp in the new variable +bibtex-autokey-titleword-ignore (case sensitive) is ignored during +automatic key generation. This replaces variable +bibtex-autokey-titleword-first-ignore, which only checked for matches +against the first word in the title. + +*** Autokey generation now uses all words from the title, not just +capitalized words. To avoid conflicts with existing customizations, +bibtex-autokey-titleword-ignore is set up such that words starting with +lowerkey characters will still be ignored. Thus, if you want to use +lowercase words from the title, you will have to overwrite the +bibtex-autokey-titleword-ignore standard setting. + +*** Case conversion of names and title words for automatic key +generation is more flexible. Variable bibtex-autokey-preserve-case is +replaced by bibtex-autokey-titleword-case-convert and +bibtex-autokey-name-case-convert. + +** Changes in vcursor.el. + +*** Support for character terminals is available: there is a new keymap +and the vcursor will appear as an arrow between buffer text. A +variable `vcursor-interpret-input' allows input from the vcursor to be +entered exactly as if typed. Numerous functions, including +`vcursor-compare-windows', have been rewritten to improve consistency +in the selection of windows and corresponding keymaps. + +*** vcursor options can now be altered with M-x customize under the +Editing group once the package is loaded. + +*** Loading vcursor now does not define keys by default, as this is +generally a bad side effect. Use M-x customize to set +vcursor-key-bindings to t to restore the old behavior. + +*** vcursor-auto-disable can be `copy', which turns off copying from the +vcursor, but doesn't disable it, after any non-vcursor command. + +** Ispell changes. + +*** You can now spell check comments and strings in the current +buffer with M-x ispell-comments-and-strings. Comments and strings +are identified by syntax tables in effect. + +*** Generic region skipping implemented. +A single buffer can be broken into a number of regions where text will +and will not be checked. The definitions of the regions can be user +defined. New applications and improvements made available by this +include: + + o URLs are automatically skipped + o EMail message checking is vastly improved. + +*** Ispell can highlight the erroneous word even on non-window terminals. + +** Changes to RefTeX mode + +RefTeX has been updated in order to make it more usable with very +large projects (like a several volume math book). The parser has been +re-written from scratch. To get maximum speed from RefTeX, check the +section `Optimizations' in the manual. + +*** New recursive parser. + +The old version of RefTeX created a single large buffer containing the +entire multifile document in order to parse the document. The new +recursive parser scans the individual files. + +*** Parsing only part of a document. + +Reparsing of changed document parts can now be made faster by enabling +partial scans. To use this feature, read the documentation string of +the variable `reftex-enable-partial-scans' and set the variable to t. + + (setq reftex-enable-partial-scans t) + +*** Storing parsing information in a file. + +This can improve startup times considerably. To turn it on, use + + (setq reftex-save-parse-info t) + +*** Using multiple selection buffers + +If the creation of label selection buffers is too slow (this happens +for large documents), you can reuse these buffers by setting + + (setq reftex-use-multiple-selection-buffers t) + +*** References to external documents. + +The LaTeX package `xr' allows to cross-reference labels in external +documents. RefTeX can provide information about the external +documents as well. To use this feature, set up the \externaldocument +macros required by the `xr' package and rescan the document with +RefTeX. The external labels can then be accessed with the `x' key in +the selection buffer provided by `reftex-reference' (bound to `C-c )'). +The `x' key also works in the table of contents buffer. + +*** Many more labeled LaTeX environments are recognized by default. + +The built-in command list now covers all the standard LaTeX commands, +and all of the major packages included in the LaTeX distribution. + +Also, RefTeX now understands the \appendix macro and changes +the enumeration of sections in the *toc* buffer accordingly. + +*** Mouse support for selection and *toc* buffers + +The mouse can now be used to select items in the selection and *toc* +buffers. See also the new option `reftex-highlight-selection'. + +*** New keymaps for selection and table of contents modes. + +The selection processes for labels and citation keys, and the table of +contents buffer now have their own keymaps: `reftex-select-label-map', +`reftex-select-bib-map', `reftex-toc-map'. The selection processes +have a number of new keys predefined. In particular, TAB lets you +enter a label with completion. Check the on-the-fly help (press `?' +at the selection prompt) or read the Info documentation to find out +more. + +*** Support for the varioref package + +The `v' key in the label selection buffer toggles \ref versus \vref. + +*** New hooks + +Three new hooks can be used to redefine the way labels, references, +and citations are created. These hooks are +`reftex-format-label-function', `reftex-format-ref-function', +`reftex-format-cite-function'. + +*** Citations outside LaTeX + +The command `reftex-citation' may also be used outside LaTeX (e.g. in +a mail buffer). See the Info documentation for details. + +*** Short context is no longer fontified. + +The short context in the label menu no longer copies the +fontification from the text in the buffer. If you prefer it to be +fontified, use + + (setq reftex-refontify-context t) + +** file-cache-minibuffer-complete now accepts a prefix argument. +With a prefix argument, it does not try to do completion of +the file name within its directory; it only checks for other +directories that contain the same file name. + +Thus, given the file name Makefile, and assuming that a file +Makefile.in exists in the same directory, ordinary +file-cache-minibuffer-complete will try to complete Makefile to +Makefile.in and will therefore never look for other directories that +have Makefile. A prefix argument tells it not to look for longer +names such as Makefile.in, so that instead it will look for other +directories--just as if the name were already complete in its present +directory. + +** New modes and packages + +*** There is a new alternative major mode for Perl, Cperl mode. +It has many more features than Perl mode, and some people prefer +it, but some do not. + +*** There is a new major mode, M-x vhdl-mode, for editing files of VHDL +code. + +*** M-x which-function-mode enables a minor mode that displays the +current function name continuously in the mode line, as you move +around in a buffer. + +Which Function mode is effective in major modes which support Imenu. + +*** Gametree is a major mode for editing game analysis trees. The author +uses it for keeping notes about his postal Chess games, but it should +be helpful for other two-player games as well, as long as they have an +established system of notation similar to Chess. + +*** The new minor mode checkdoc-minor-mode provides Emacs Lisp +documentation string checking for style and spelling. The style +guidelines are found in the Emacs Lisp programming manual. + +*** The net-utils package makes some common networking features +available in Emacs. Some of these functions are wrappers around +system utilities (ping, nslookup, etc.); others are implementations of +simple protocols (finger, whois) in Emacs Lisp. There are also +functions to make simple connections to TCP/IP ports for debugging and +the like. + +*** highlight-changes-mode is a minor mode that uses colors to +identify recently changed parts of the buffer text. + +*** The new package `midnight' lets you specify things to be done +within Emacs at midnight--by default, kill buffers that you have not +used in a considerable time. To use this feature, customize +the user option `midnight-mode' to t. + +*** The file generic-x.el defines a number of simple major modes. + + apache-generic-mode: For Apache and NCSA httpd configuration files + samba-generic-mode: Samba configuration files + fvwm-generic-mode: For fvwm initialization files + x-resource-generic-mode: For X resource files + hosts-generic-mode: For hosts files (.rhosts, /etc/hosts, etc.) + mailagent-rules-generic-mode: For mailagent .rules files + javascript-generic-mode: For JavaScript files + vrml-generic-mode: For VRML files + java-manifest-generic-mode: For Java MANIFEST files + java-properties-generic-mode: For Java property files + mailrc-generic-mode: For .mailrc files + + Platform-specific modes: + + prototype-generic-mode: For Solaris/Sys V prototype files + pkginfo-generic-mode: For Solaris/Sys V pkginfo files + alias-generic-mode: For C shell alias files + inf-generic-mode: For MS-Windows INF files + ini-generic-mode: For MS-Windows INI files + reg-generic-mode: For MS-Windows Registry files + bat-generic-mode: For MS-Windows BAT scripts + rc-generic-mode: For MS-Windows Resource files + rul-generic-mode: For InstallShield scripts + + +* Lisp changes in Emacs 20.3 since the Emacs Lisp Manual was published + +** If you want a Lisp file to be read in unibyte mode, +use -*-unibyte: t;-*- on its first line. +That will force Emacs to read that file in unibyte mode. +Otherwise, the file will be loaded and byte-compiled in multibyte mode. + +Thus, each lisp file is read in a consistent way regardless of whether +you started Emacs with --unibyte, so that a Lisp program gives +consistent results regardless of how Emacs was started. + +** The new function assoc-default is useful for searching an alist, +and using a default value if the key is not found there. You can +specify a comparison predicate, so this function is useful for +searching comparing a string against an alist of regular expressions. + +** The functions unibyte-char-to-multibyte and +multibyte-char-to-unibyte convert between unibyte and multibyte +character codes, in a way that is appropriate for the current language +environment. + +** The functions read-event, read-char and read-char-exclusive now +take two optional arguments. PROMPT, if non-nil, specifies a prompt +string. SUPPRESS-INPUT-METHOD, if non-nil, says to disable the +current input method for reading this one event. + +** Two new variables print-escape-nonascii and print-escape-multibyte +now control whether to output certain characters as +backslash-sequences. print-escape-nonascii applies to single-byte +non-ASCII characters; print-escape-multibyte applies to multibyte +characters. Both of these variables are used only when printing +in readable fashion (prin1 uses them, princ does not). + + +* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published + +** Compiled Emacs Lisp files made with the modified "MBSK" version +of Emacs 20.2 do not work in Emacs 20.3. + +** Buffer positions are now measured in characters, as they were +in Emacs 19 and before. This means that (forward-char 1) +always increases point by 1. + +The function chars-in-region now just subtracts its arguments. It is +considered obsolete. The function char-boundary-p has been deleted. + +See below for additional changes relating to multibyte characters. + +** defcustom, defface and defgroup now accept the keyword `:version'. +Use this to specify in which version of Emacs a certain variable's +default value changed. For example, + + (defcustom foo-max 34 "*Maximum number of foo's allowed." + :type 'integer + :group 'foo + :version "20.3") + + (defgroup foo-group nil "The foo group." + :version "20.3") + +If an entire new group is added or the variables in it have the +default values changed, then just add a `:version' to that group. It +is recommended that new packages added to the distribution contain a +`:version' in the top level group. + +This information is used to control the customize-changed-options command. + +** It is now an error to change the value of a symbol whose name +starts with a colon--if it is interned in the standard obarray. + +However, setting such a symbol to its proper value, which is that +symbol itself, is not an error. This is for the sake of programs that +support previous Emacs versions by explicitly setting these variables +to themselves. + +If you set the variable keyword-symbols-constant-flag to nil, +this error is suppressed, and you can set these symbols to any +values whatever. + +** There is a new debugger command, R. +It evaluates an expression like e, but saves the result +in the buffer *Debugger-record*. + +** Frame-local variables. + +You can now make a variable local to various frames. To do this, call +the function make-variable-frame-local; this enables frames to have +local bindings for that variable. + +These frame-local bindings are actually frame parameters: you create a +frame-local binding in a specific frame by calling +modify-frame-parameters and specifying the variable name as the +parameter name. + +Buffer-local bindings take precedence over frame-local bindings. +Thus, if the current buffer has a buffer-local binding, that binding is +active; otherwise, if the selected frame has a frame-local binding, +that binding is active; otherwise, the default binding is active. + +It would not be hard to implement window-local bindings, but it is not +clear that this would be very useful; windows tend to come and go in a +very transitory fashion, so that trying to produce any specific effect +through a window-local binding would not be very robust. + +** `sregexq' and `sregex' are two new functions for constructing +"symbolic regular expressions." These are Lisp expressions that, when +evaluated, yield conventional string-based regexps. The symbolic form +makes it easier to construct, read, and maintain complex patterns. +See the documentation in sregex.el. + +** parse-partial-sexp's return value has an additional element which +is used to pass information along if you pass it to another call to +parse-partial-sexp, starting its scan where the first call ended. +The contents of this field are not yet finalized. + +** eval-region now accepts a fourth optional argument READ-FUNCTION. +If it is non-nil, that function is used instead of `read'. + +** unload-feature by default removes the feature's functions from +known hooks to avoid trouble, but a package providing FEATURE can +define a hook FEATURE-unload-hook to be run by unload-feature instead. + +** read-from-minibuffer no longer returns the argument DEFAULT-VALUE +when the user enters empty input. It now returns the null string, as +it did in Emacs 19. The default value is made available in the +history via M-n, but it is not applied here as a default. + +The other, more specialized minibuffer-reading functions continue to +return the default value (not the null string) when the user enters +empty input. + +** The new variable read-buffer-function controls which routine to use +for selecting buffers. For example, if you set this variable to +`iswitchb-read-buffer', iswitchb will be used to read buffer names. +Other functions can also be used if they accept the same arguments as +`read-buffer' and return the selected buffer name as a string. + +** The new function read-passwd reads a password from the terminal, +echoing a period for each character typed. It takes three arguments: +a prompt string, a flag which says "read it twice to make sure", and a +default password to use if the user enters nothing. + +** The variable fill-nobreak-predicate gives major modes a way to +specify not to break a line at certain places. Its value is a +function which is called with no arguments, with point located at the +place where a break is being considered. If the function returns +non-nil, then the line won't be broken there. + +** window-end now takes an optional second argument, UPDATE. +If this is non-nil, then the function always returns an accurate +up-to-date value for the buffer position corresponding to the +end of the window, even if this requires computation. + +** other-buffer now takes an optional argument FRAME +which specifies which frame's buffer list to use. +If it is nil, that means use the selected frame's buffer list. + +** The new variable buffer-display-time, always local in every buffer, +holds the value of (current-time) as of the last time that a window +was directed to display this buffer. + +** It is now meaningful to compare two window-configuration objects +with `equal'. Two window-configuration objects are equal if they +describe equivalent arrangements of windows, in the same frame--in +other words, if they would give the same results if passed to +set-window-configuration. + +** compare-window-configurations is a new function that compares two +window configurations loosely. It ignores differences in saved buffer +positions and scrolling, and considers only the structure and sizes of +windows and the choice of buffers to display. + +** The variable minor-mode-overriding-map-alist allows major modes to +override the key bindings of a minor mode. The elements of this alist +look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP). + +If the VARIABLE in an element of minor-mode-overriding-map-alist has a +non-nil value, the paired KEYMAP is active, and totally overrides the +map (if any) specified for the same variable in minor-mode-map-alist. + +minor-mode-overriding-map-alist is automatically local in all buffers, +and it is meant to be set by major modes. + +** The function match-string-no-properties is like match-string +except that it discards all text properties from the result. + +** The function load-average now accepts an optional argument +USE-FLOATS. If it is non-nil, the load average values are returned as +floating point numbers, rather than as integers to be divided by 100. + +** The new variable temporary-file-directory specifies the directory +to use for creating temporary files. The default value is determined +in a reasonable way for your operating system; on GNU and Unix systems +it is based on the TMP and TMPDIR environment variables. + +** Menu changes + +*** easymenu.el now uses the new menu item format and supports the +keywords :visible and :filter. The existing keyword :keys is now +better supported. + +The variable `easy-menu-precalculate-equivalent-keybindings' controls +a new feature which calculates keyboard equivalents for the menu when +you define the menu. The default is t. If you rarely use menus, you +can set the variable to nil to disable this precalculation feature; +then the calculation is done only if you use the menu bar. + +*** A new format for menu items is supported. + +In a keymap, a key binding that has the format + (STRING . REAL-BINDING) or (STRING HELP-STRING . REAL-BINDING) +defines a menu item. Now a menu item definition may also be a list that +starts with the symbol `menu-item'. + +The format is: + (menu-item ITEM-NAME) or + (menu-item ITEM-NAME REAL-BINDING . ITEM-PROPERTY-LIST) +where ITEM-NAME is an expression which evaluates to the menu item +string, and ITEM-PROPERTY-LIST has the form of a property list. +The supported properties include + +:enable FORM Evaluate FORM to determine whether the + item is enabled. +:visible FORM Evaluate FORM to determine whether the + item should appear in the menu. +:filter FILTER-FN + FILTER-FN is a function of one argument, + which will be REAL-BINDING. + It should return a binding to use instead. +:keys DESCRIPTION + DESCRIPTION is a string that describes an equivalent keyboard + binding for REAL-BINDING. DESCRIPTION is expanded with + `substitute-command-keys' before it is used. +:key-sequence KEY-SEQUENCE + KEY-SEQUENCE is a key-sequence for an equivalent + keyboard binding. +:key-sequence nil + This means that the command normally has no + keyboard equivalent. +:help HELP HELP is the extra help string (not currently used). +:button (TYPE . SELECTED) + TYPE is :toggle or :radio. + SELECTED is a form, to be evaluated, and its + value says whether this button is currently selected. + +Buttons are at the moment only simulated by prefixes in the menu. +Eventually ordinary X-buttons may be supported. + +(menu-item ITEM-NAME) defines unselectable item. + +** New event types + +*** The new event type `mouse-wheel' is generated by a wheel on a +mouse (such as the MS Intellimouse). The event contains a delta that +corresponds to the amount and direction that the wheel is rotated, +which is typically used to implement a scroll or zoom. The format is: + + (mouse-wheel POSITION DELTA) + +where POSITION is a list describing the position of the event in the +same format as a mouse-click event, and DELTA is a signed number +indicating the number of increments by which the wheel was rotated. A +negative DELTA indicates that the wheel was rotated backwards, towards +the user, and a positive DELTA indicates that the wheel was rotated +forward, away from the user. + +As of now, this event type is generated only on MS Windows. + +*** The new event type `drag-n-drop' is generated when a group of +files is selected in an application outside of Emacs, and then dragged +and dropped onto an Emacs frame. The event contains a list of +filenames that were dragged and dropped, which are then typically +loaded into Emacs. The format is: + + (drag-n-drop POSITION FILES) + +where POSITION is a list describing the position of the event in the +same format as a mouse-click event, and FILES is the list of filenames +that were dragged and dropped. + +As of now, this event type is generated only on MS Windows. + +** Changes relating to multibyte characters. + +*** The variable enable-multibyte-characters is now read-only; +any attempt to set it directly signals an error. The only way +to change this value in an existing buffer is with set-buffer-multibyte. + +*** In a string constant, `\ ' now stands for "nothing at all". You +can use it to terminate a hex escape which is followed by a character +that could otherwise be read as part of the hex escape. + +*** String indices are now measured in characters, as they were +in Emacs 19 and before. + +The function chars-in-string has been deleted. +The function concat-chars has been renamed to `string'. + +*** The function set-buffer-multibyte sets the flag in the current +buffer that says whether the buffer uses multibyte representation or +unibyte representation. If the argument is nil, it selects unibyte +representation. Otherwise it selects multibyte representation. + +This function does not change the contents of the buffer, viewed +as a sequence of bytes. However, it does change the contents +viewed as characters; a sequence of two bytes which is treated as +one character when the buffer uses multibyte representation +will count as two characters using unibyte representation. + +This function sets enable-multibyte-characters to record which +representation is in use. It also adjusts various data in the buffer +(including its markers, overlays and text properties) so that they are +consistent with the new representation. + +*** string-make-multibyte takes a string and converts it to multibyte +representation. Most of the time, you don't need to care +about the representation, because Emacs converts when necessary; +however, it makes a difference when you compare strings. + +The conversion of non-ASCII characters works by adding the value of +nonascii-insert-offset to each character, or by translating them +using the table nonascii-translation-table. + +*** string-make-unibyte takes a string and converts it to unibyte +representation. Most of the time, you don't need to care about the +representation, but it makes a difference when you compare strings. + +The conversion from multibyte to unibyte representation +loses information; the only time Emacs performs it automatically +is when inserting a multibyte string into a unibyte buffer. + +*** string-as-multibyte takes a string, and returns another string +which contains the same bytes, but treats them as multibyte. + +*** string-as-unibyte takes a string, and returns another string +which contains the same bytes, but treats them as unibyte. + +*** The new function compare-strings lets you compare +portions of two strings. Unibyte strings are converted to multibyte, +so that a unibyte string can match a multibyte string. +You can specify whether to ignore case or not. + +*** assoc-ignore-case now uses compare-strings so that +it can treat unibyte and multibyte strings as equal. + +*** Regular expression operations and buffer string searches now +convert the search pattern to multibyte or unibyte to accord with the +buffer or string being searched. + +One consequence is that you cannot always use \200-\377 inside of +[...] to match all non-ASCII characters. This does still work when +searching or matching a unibyte buffer or string, but not when +searching or matching a multibyte string. Unfortunately, there is no +obvious choice of syntax to use within [...] for that job. But, what +you want is just to match all non-ASCII characters, the regular +expression [^\0-\177] works for it. + +*** Structure of coding system changed. + +All coding systems (including aliases and subsidiaries) are named +by symbols; the symbol's `coding-system' property is a vector +which defines the coding system. Aliases share the same vector +as the principal name, so that altering the contents of this +vector affects the principal name and its aliases. You can define +your own alias name of a coding system by the function +define-coding-system-alias. + +The coding system definition includes a property list of its own. Use +the new functions `coding-system-get' and `coding-system-put' to +access such coding system properties as post-read-conversion, +pre-write-conversion, character-translation-table-for-decode, +character-translation-table-for-encode, mime-charset, and +safe-charsets. For instance, (coding-system-get 'iso-latin-1 +'mime-charset) gives the corresponding MIME-charset parameter +`iso-8859-1'. + +Among the coding system properties listed above, safe-charsets is new. +The value of this property is a list of character sets which this +coding system can correctly encode and decode. For instance: +(coding-system-get 'iso-latin-1 'safe-charsets) => (ascii latin-iso8859-1) + +Here, "correctly encode" means that the encoded character sets can +also be handled safely by systems other than Emacs as far as they +are capable of that coding system. Though, Emacs itself can encode +the other character sets and read it back correctly. + +*** The new function select-safe-coding-system can be used to find a +proper coding system for encoding the specified region or string. +This function requires a user interaction. + +*** The new functions find-coding-systems-region and +find-coding-systems-string are helper functions used by +select-safe-coding-system. They return a list of all proper coding +systems to encode a text in some region or string. If you don't want +a user interaction, use one of these functions instead of +select-safe-coding-system. + +*** The explicit encoding and decoding functions, such as +decode-coding-region and encode-coding-string, now set +last-coding-system-used to reflect the actual way encoding or decoding +was done. + +*** The new function detect-coding-with-language-environment can be +used to detect a coding system of text according to priorities of +coding systems used by some specific language environment. + +*** The functions detect-coding-region and detect-coding-string always +return a list if the arg HIGHEST is nil. Thus, if only ASCII +characters are found, they now return a list of single element +`undecided' or its subsidiaries. + +*** The new functions coding-system-change-eol-conversion and +coding-system-change-text-conversion can be used to get a different +coding system than what specified only in how end-of-line or text is +converted. + +*** The new function set-selection-coding-system can be used to set a +coding system for communicating with other X clients. + +*** The function `map-char-table' now passes as argument only valid +character codes, plus generic characters that stand for entire +character sets or entire subrows of a character set. In other words, +each time `map-char-table' calls its FUNCTION argument, the key value +either will be a valid individual character code, or will stand for a +range of characters. + +*** The new function `char-valid-p' can be used for checking whether a +Lisp object is a valid character code or not. + +*** The new function `charset-after' returns a charset of a character +in the current buffer at position POS. + +*** Input methods are now implemented using the variable +input-method-function. If this is non-nil, its value should be a +function; then, whenever Emacs reads an input event that is a printing +character with no modifier bits, it calls that function, passing the +event as an argument. Often this function will read more input, first +binding input-method-function to nil. + +The return value should be a list of the events resulting from input +method processing. These events will be processed sequentially as +input, before resorting to unread-command-events. Events returned by +the input method function are not passed to the input method function, +not even if they are printing characters with no modifier bits. + +The input method function is not called when reading the second and +subsequent events of a key sequence. + +*** You can customize any language environment by using +set-language-environment-hook and exit-language-environment-hook. + +The hook `exit-language-environment-hook' should be used to undo +customizations that you made with set-language-environment-hook. For +instance, if you set up a special key binding for a specific language +environment by set-language-environment-hook, you should set up +exit-language-environment-hook to restore the normal key binding. + + + +* Changes in Emacs 20.1 + +** Emacs has a new facility for customization of its many user +options. It is called M-x customize. With this facility you can look +at the many user options in an organized way; they are grouped into a +tree structure. + +M-x customize also knows what sorts of values are legitimate for each +user option and ensures that you don't use invalid values. + +With M-x customize, you can set options either for the present Emacs +session or permanently. (Permanent settings are stored automatically +in your .emacs file.) + +** Scroll bars are now on the left side of the window. +You can change this with M-x customize-option scroll-bar-mode. + +** The mode line no longer includes the string `Emacs'. +This makes more space in the mode line for other information. + +** When you select a region with the mouse, it is highlighted +immediately afterward. At that time, if you type the DELETE key, it +kills the region. + +The BACKSPACE key, and the ASCII character DEL, do not do this; they +delete the character before point, as usual. + +** In an incremental search the whole current match is highlighted +on terminals which support this. (You can disable this feature +by setting search-highlight to nil.) + +** In the minibuffer, in some cases, you can now use M-n to +insert the default value into the minibuffer as text. In effect, +the default value (if the minibuffer routines know it) is tacked +onto the history "in the future". (The more normal use of the +history list is to use M-p to insert minibuffer input used in the +past.) + +** In Text mode, now only blank lines separate paragraphs. +This makes it possible to get the full benefit of Adaptive Fill mode +in Text mode, and other modes derived from it (such as Mail mode). +TAB in Text mode now runs the command indent-relative; this +makes a practical difference only when you use indented paragraphs. + +As a result, the old Indented Text mode is now identical to Text mode, +and is an alias for it. + +If you want spaces at the beginning of a line to start a paragraph, +use the new mode, Paragraph Indent Text mode. + +** Scrolling changes + +*** Scroll commands to scroll a whole screen now preserve the screen +position of the cursor, if scroll-preserve-screen-position is non-nil. + +In this mode, if you scroll several screens back and forth, finishing +on the same screen where you started, the cursor goes back to the line +where it started. + +*** If you set scroll-conservatively to a small number, then when you +move point a short distance off the screen, Emacs will scroll the +screen just far enough to bring point back on screen, provided that +does not exceed `scroll-conservatively' lines. + +*** The new variable scroll-margin says how close point can come to the +top or bottom of a window. It is a number of screen lines; if point +comes within that many lines of the top or bottom of the window, Emacs +recenters the window. + +** International character set support (MULE) + +Emacs now supports a wide variety of international character sets, +including European variants of the Latin alphabet, as well as Chinese, +Devanagari (Hindi and Marathi), Ethiopian, Greek, IPA, Japanese, +Korean, Lao, Russian, Thai, Tibetan, and Vietnamese scripts. These +features have been merged from the modified version of Emacs known as +MULE (for "MULti-lingual Enhancement to GNU Emacs") + +Users of these scripts have established many more-or-less standard +coding systems for storing files. Emacs uses a single multibyte +character encoding within Emacs buffers; it can translate from a wide +variety of coding systems when reading a file and can translate back +into any of these coding systems when saving a file. + +Keyboards, even in the countries where these character sets are used, +generally don't have keys for all the characters in them. So Emacs +supports various "input methods", typically one for each script or +language, to make it possible to type them. + +The Emacs internal multibyte encoding represents a non-ASCII +character as a sequence of bytes in the range 0200 through 0377. + +The new prefix key C-x RET is used for commands that pertain +to multibyte characters, coding systems, and input methods. + +You can disable multibyte character support as follows: + + (setq-default enable-multibyte-characters nil) + +Calling the function standard-display-european turns off multibyte +characters, unless you specify a non-nil value for the second +argument, AUTO. This provides compatibility for people who are +already using standard-display-european to continue using unibyte +characters for their work until they want to change. + +*** Input methods + +An input method is a kind of character conversion which is designed +specifically for interactive input. In Emacs, typically each language +has its own input method (though sometimes several languages which use +the same characters can share one input method). Some languages +support several input methods. + +The simplest kind of input method works by mapping ASCII letters into +another alphabet. This is how the Greek and Russian input methods +work. + +A more powerful technique is composition: converting sequences of +characters into one letter. Many European input methods use +composition to produce a single non-ASCII letter from a sequence which +consists of a letter followed by diacritics. For example, a' is one +sequence of two characters that might be converted into a single +letter. + +The input methods for syllabic scripts typically use mapping followed +by conversion. The input methods for Thai and Korean work this way. +First, letters are mapped into symbols for particular sounds or tone +marks; then, sequences of these which make up a whole syllable are +mapped into one syllable sign--most often a "composite character". + +None of these methods works very well for Chinese and Japanese, so +they are handled specially. First you input a whole word using +phonetic spelling; then, after the word is in the buffer, Emacs +converts it into one or more characters using a large dictionary. + +Since there is more than one way to represent a phonetically spelled +word using Chinese characters, Emacs can only guess which one to use; +typically these input methods give you a way to say "guess again" if +the first guess is wrong. + +*** The command C-x RET m (toggle-enable-multibyte-characters) +turns multibyte character support on or off for the current buffer. + +If multibyte character support is turned off in a buffer, then each +byte is a single character, even codes 0200 through 0377--exactly as +they did in Emacs 19.34. This includes the features for support for +the European characters, ISO Latin-1 and ISO Latin-2. + +However, there is no need to turn off multibyte character support to +use ISO Latin-1 or ISO Latin-2; the Emacs multibyte character set +includes all the characters in these character sets, and Emacs can +translate automatically to and from either one. + +*** Visiting a file in unibyte mode. + +Turning off multibyte character support in the buffer after visiting a +file with multibyte code conversion will display the multibyte +sequences already in the buffer, byte by byte. This is probably not +what you want. + +If you want to edit a file of unibyte characters (Latin-1, for +example), you can do it by specifying `no-conversion' as the coding +system when reading the file. This coding system also turns off +multibyte characters in that buffer. + +If you turn off multibyte character support entirely, this turns off +character conversion as well. + +*** Displaying international characters on X Windows. + +A font for X typically displays just one alphabet or script. +Therefore, displaying the entire range of characters Emacs supports +requires using many fonts. + +Therefore, Emacs now supports "fontsets". Each fontset is a +collection of fonts, each assigned to a range of character codes. + +A fontset has a name, like a font. Individual fonts are defined by +the X server; fontsets are defined within Emacs itself. But once you +have defined a fontset, you can use it in a face or a frame just as +you would use a font. + +If a fontset specifies no font for a certain character, or if it +specifies a font that does not exist on your system, then it cannot +display that character. It will display an empty box instead. + +The fontset height and width are determined by the ASCII characters +(that is, by the font in the fontset which is used for ASCII +characters). + +*** Defining fontsets. + +Emacs does not use any fontset by default. Its default font is still +chosen as in previous versions. You can tell Emacs to use a fontset +with the `-fn' option or the `Font' X resource. + +Emacs creates a standard fontset automatically according to the value +of standard-fontset-spec. This fontset's short name is +`fontset-standard'. Bold, italic, and bold-italic variants of the +standard fontset are created automatically. + +If you specify a default ASCII font with the `Font' resource or `-fn' +argument, a fontset is generated from it. This works by replacing the +FOUNDARY, FAMILY, ADD_STYLE, and AVERAGE_WIDTH fields of the font name +with `*' then using this to specify a fontset. This fontset's short +name is `fontset-startup'. + +Emacs checks resources of the form Fontset-N where N is 0, 1, 2... +The resource value should have this form: + FONTSET-NAME, [CHARSET-NAME:FONT-NAME]... +FONTSET-NAME should have the form of a standard X font name, except: + * most fields should be just the wild card "*". + * the CHARSET_REGISTRY field should be "fontset" + * the CHARSET_ENCODING field can be any nickname of the fontset. +The construct CHARSET-NAME:FONT-NAME can be repeated any number +of times; each time specifies the font for one character set. +CHARSET-NAME should be the name of a character set, and FONT-NAME +should specify an actual font to use for that character set. + +Each of these fontsets has an alias which is made from the +last two font name fields, CHARSET_REGISTRY and CHARSET_ENCODING. +You can refer to the fontset by that alias or by its full name. + +For any character sets that you don't mention, Emacs tries to choose a +font by substituting into FONTSET-NAME. For instance, with the +following resource, + Emacs*Fontset-0: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24 +the font for ASCII is generated as below: + -*-fixed-medium-r-normal-*-24-*-ISO8859-1 +Here is the substitution rule: + Change CHARSET_REGISTRY and CHARSET_ENCODING to that of the charset + defined in the variable x-charset-registries. For instance, ASCII has + the entry (ascii . "ISO8859-1") in this variable. Then, reduce + sequences of wild cards -*-...-*- with a single wildcard -*-. + (This is to prevent use of auto-scaled fonts.) + +The function which processes the fontset resource value to create the +fontset is called create-fontset-from-fontset-spec. You can also call +that function explicitly to create a fontset. + +With the X resource Emacs.Font, you can specify a fontset name just +like an actual font name. But be careful not to specify a fontset +name in a wildcard resource like Emacs*Font--that tries to specify the +fontset for other purposes including menus, and they cannot handle +fontsets. + +*** The command M-x set-language-environment sets certain global Emacs +defaults for a particular choice of language. + +Selecting a language environment typically specifies a default input +method and which coding systems to recognize automatically when +visiting files. However, it does not try to reread files you have +already visited; the text in those buffers is not affected. The +language environment may also specify a default choice of coding +system for new files that you create. + +It makes no difference which buffer is current when you use +set-language-environment, because these defaults apply globally to the +whole Emacs session. + +For example, M-x set-language-environment RET Latin-1 RET +chooses the Latin-1 character set. In the .emacs file, you can do this +with (set-language-environment "Latin-1"). + +*** The command C-x RET f (set-buffer-file-coding-system) +specifies the file coding system for the current buffer. This +specifies what sort of character code translation to do when saving +the file. As an argument, you must specify the name of one of the +coding systems that Emacs supports. + +*** The command C-x RET c (universal-coding-system-argument) +lets you specify a coding system when you read or write a file. +This command uses the minibuffer to read a coding system name. +After you exit the minibuffer, the specified coding system +is used for *the immediately following command*. + +So if the immediately following command is a command to read or +write a file, it uses the specified coding system for that file. + +If the immediately following command does not use the coding system, +then C-x RET c ultimately has no effect. + +For example, C-x RET c iso-8859-1 RET C-x C-f temp RET +visits the file `temp' treating it as ISO Latin-1. + +*** You can specify the coding system for a file using the -*- +construct. Include `coding: CODINGSYSTEM;' inside the -*-...-*- +to specify use of coding system CODINGSYSTEM. You can also +specify the coding system in a local variable list at the end +of the file. + +*** The command C-x RET t (set-terminal-coding-system) specifies +the coding system for terminal output. If you specify a character +code for terminal output, all characters output to the terminal are +translated into that character code. + +This feature is useful for certain character-only terminals built in +various countries to support the languages of those countries. + +By default, output to the terminal is not translated at all. + +*** The command C-x RET k (set-keyboard-coding-system) specifies +the coding system for keyboard input. + +Character code translation of keyboard input is useful for terminals +with keys that send non-ASCII graphic characters--for example, +some terminals designed for ISO Latin-1 or subsets of it. + +By default, keyboard input is not translated at all. + +Character code translation of keyboard input is similar to using an +input method, in that both define sequences of keyboard input that +translate into single characters. However, input methods are designed +to be convenient for interactive use, while the code translations are +designed to work with terminals. + +*** The command C-x RET p (set-buffer-process-coding-system) +specifies the coding system for input and output to a subprocess. +This command applies to the current buffer; normally, each subprocess +has its own buffer, and thus you can use this command to specify +translation to and from a particular subprocess by giving the command +in the corresponding buffer. + +By default, process input and output are not translated at all. + +*** The variable file-name-coding-system specifies the coding system +to use for encoding file names before operating on them. +It is also used for decoding file names obtained from the system. + +*** The command C-\ (toggle-input-method) activates or deactivates +an input method. If no input method has been selected before, the +command prompts for you to specify the language and input method you +want to use. + +C-u C-\ (select-input-method) lets you switch to a different input +method. C-h C-\ (or C-h I) describes the current input method. + +*** Some input methods remap the keyboard to emulate various keyboard +layouts commonly used for particular scripts. How to do this +remapping properly depends on your actual keyboard layout. To specify +which layout your keyboard has, use M-x quail-set-keyboard-layout. + +*** The command C-h C (describe-coding-system) displays +the coding systems currently selected for various purposes, plus +related information. + +*** The command C-h h (view-hello-file) displays a file called +HELLO, which has examples of text in many languages, using various +scripts. + +*** The command C-h L (describe-language-support) displays +information about the support for a particular language. +You specify the language as an argument. + +*** The mode line now contains a letter or character that identifies +the coding system used in the visited file. It normally follows the +first dash. + +A dash indicates the default state of affairs: no code conversion +(except CRLF => newline if appropriate). `=' means no conversion +whatsoever. The ISO 8859 coding systems are represented by digits +1 through 9. Other coding systems are represented by letters: + + A alternativnyj (Russian) + B big5 (Chinese) + C cn-gb-2312 (Chinese) + C iso-2022-cn (Chinese) + D in-is13194-devanagari (Indian languages) + E euc-japan (Japanese) + I iso-2022-cjk or iso-2022-ss2 (Chinese, Japanese, Korean) + J junet (iso-2022-7) or old-jis (iso-2022-jp-1978-irv) (Japanese) + K euc-korea (Korean) + R koi8 (Russian) + Q tibetan + S shift_jis (Japanese) + T lao + T tis620 (Thai) + V viscii or vscii (Vietnamese) + i iso-2022-lock (Chinese, Japanese, Korean) + k iso-2022-kr (Korean) + v viqr (Vietnamese) + z hz (Chinese) + +When you are using a character-only terminal (not a window system), +two additional characters appear in between the dash and the file +coding system. These two characters describe the coding system for +keyboard input, and the coding system for terminal output. + +*** The new variable rmail-file-coding-system specifies the code +conversion to use for RMAIL files. The default value is nil. + +When you read mail with Rmail, each message is decoded automatically +into Emacs' internal format. This has nothing to do with +rmail-file-coding-system. That variable controls reading and writing +Rmail files themselves. + +*** The new variable sendmail-coding-system specifies the code +conversion for outgoing mail. The default value is nil. + +Actually, there are three different ways of specifying the coding system +for sending mail: + +- If you use C-x RET f in the mail buffer, that takes priority. +- Otherwise, if you set sendmail-coding-system non-nil, that specifies it. +- Otherwise, the default coding system for new files is used, + if that is non-nil. That comes from your language environment. +- Otherwise, Latin-1 is used. + +*** The command C-h t (help-with-tutorial) accepts a prefix argument +to specify the language for the tutorial file. Currently, English, +Japanese, Korean and Thai are supported. We welcome additional +translations. + +** An easy new way to visit a file with no code or format conversion +of any kind: Use M-x find-file-literally. There is also a command +insert-file-literally which inserts a file into the current buffer +without any conversion. + +** C-q's handling of octal character codes is changed. +You can now specify any number of octal digits. +RET terminates the digits and is discarded; +any other non-digit terminates the digits and is then used as input. + +** There are new commands for looking up Info documentation for +functions, variables and file names used in your programs. + +Type M-x info-lookup-symbol to look up a symbol in the buffer at point. +Type M-x info-lookup-file to look up a file in the buffer at point. + +Precisely which Info files are used to look it up depends on the major +mode. For example, in C mode, the GNU libc manual is used. + +** M-TAB in most programming language modes now runs the command +complete-symbol. This command performs completion on the symbol name +in the buffer before point. + +With a numeric argument, it performs completion based on the set of +symbols documented in the Info files for the programming language that +you are using. + +With no argument, it does completion based on the current tags tables, +just like the old binding of M-TAB (complete-tag). + +** File locking works with NFS now. + +The lock file for FILENAME is now a symbolic link named .#FILENAME, +in the same directory as FILENAME. + +This means that collision detection between two different machines now +works reasonably well; it also means that no file server or directory +can become a bottleneck. + +The new method does have drawbacks. It means that collision detection +does not operate when you edit a file in a directory where you cannot +create new files. Collision detection also doesn't operate when the +file server does not support symbolic links. But these conditions are +rare, and the ability to have collision detection while using NFS is +so useful that the change is worth while. + +When Emacs or a system crashes, this may leave behind lock files which +are stale. So you may occasionally get warnings about spurious +collisions. When you determine that the collision is spurious, just +tell Emacs to go ahead anyway. + +** If you wish to use Show Paren mode to display matching parentheses, +it is no longer sufficient to load paren.el. Instead you must call +show-paren-mode. + +** If you wish to use Delete Selection mode to replace a highlighted +selection when you insert new text, it is no longer sufficient to load +delsel.el. Instead you must call the function delete-selection-mode. + +** If you wish to use Partial Completion mode to complete partial words +within symbols or filenames, it is no longer sufficient to load +complete.el. Instead you must call the function partial-completion-mode. + +** If you wish to use uniquify to rename buffers for you, +it is no longer sufficient to load uniquify.el. You must also +set uniquify-buffer-name-style to one of the non-nil legitimate values. + +** Changes in View mode. + +*** Several new commands are available in View mode. +Do H in view mode for a list of commands. + +*** There are two new commands for entering View mode: +view-file-other-frame and view-buffer-other-frame. + +*** Exiting View mode does a better job of restoring windows to their +previous state. + +*** New customization variable view-scroll-auto-exit. If non-nil, +scrolling past end of buffer makes view mode exit. + +*** New customization variable view-exits-all-viewing-windows. If +non-nil, view-mode will at exit restore all windows viewing buffer, +not just the selected window. + +*** New customization variable view-read-only. If non-nil, visiting a +read-only file automatically enters View mode, and toggle-read-only +turns View mode on or off. + +*** New customization variable view-remove-frame-by-deleting controls +how to remove a not needed frame at view mode exit. If non-nil, +delete the frame, if nil make an icon of it. + +** C-x v l, the command to print a file's version control log, +now positions point at the entry for the file's current branch version. + +** C-x v =, the command to compare a file with the last checked-in version, +has a new feature. If the file is currently not locked, so that it is +presumably identical to the last checked-in version, the command now asks +which version to compare with. + +** When using hideshow.el, incremental search can temporarily show hidden +blocks if a match is inside the block. + +The block is hidden again if the search is continued and the next match +is outside the block. By customizing the variable +isearch-hide-immediately you can choose to hide all the temporarily +shown blocks only when exiting from incremental search. + +By customizing the variable hs-isearch-open you can choose what kind +of blocks to temporarily show during isearch: comment blocks, code +blocks, all of them or none. + +** The new command C-x 4 0 (kill-buffer-and-window) kills the +current buffer and deletes the selected window. It asks for +confirmation first. + +** C-x C-w, which saves the buffer into a specified file name, +now changes the major mode according to that file name. +However, the mode will not be changed if +(1) a local variables list or the `-*-' line specifies a major mode, or +(2) the current major mode is a "special" mode, + not suitable for ordinary files, or +(3) the new file name does not particularly specify any mode. + +This applies to M-x set-visited-file-name as well. + +However, if you set change-major-mode-with-file-name to nil, then +these commands do not change the major mode. + +** M-x occur changes. + +*** If the argument to M-x occur contains upper case letters, +it performs a case-sensitive search. + +*** In the *Occur* buffer made by M-x occur, +if you type g or M-x revert-buffer, this repeats the search +using the same regular expression and the same buffer as before. + +** In Transient Mark mode, the region in any one buffer is highlighted +in just one window at a time. At first, it is highlighted in the +window where you set the mark. The buffer's highlighting remains in +that window unless you select to another window which shows the same +buffer--then the highlighting moves to that window. + +** The feature to suggest key bindings when you use M-x now operates +after the command finishes. The message suggesting key bindings +appears temporarily in the echo area. The previous echo area contents +come back after a few seconds, in case they contain useful information. + +** Each frame now independently records the order for recently +selected buffers, so that the default for C-x b is now based on the +buffers recently selected in the selected frame. + +** Outline mode changes. + +*** Outline mode now uses overlays (this is the former noutline.el). + +*** Incremental searches skip over invisible text in Outline mode. + +** When a minibuffer window is active but not the selected window, if +you try to use the minibuffer, you used to get a nested minibuffer. +Now, this not only gives an error, it also cancels the minibuffer that +was already active. + +The motive for this change is so that beginning users do not +unknowingly move away from minibuffers, leaving them active, and then +get confused by it. + +If you want to be able to have recursive minibuffers, you must +set enable-recursive-minibuffers to non-nil. + +** Changes in dynamic abbrevs. + +*** Expanding dynamic abbrevs with M-/ is now smarter about case +conversion. If the expansion has mixed case not counting the first +character, and the abbreviation matches the beginning of the expansion +including case, then the expansion is copied verbatim. + +The expansion is also copied verbatim if the abbreviation itself has +mixed case. And using SPC M-/ to copy an additional word always +copies it verbatim except when the previous copied word is all caps. + +*** The values of `dabbrev-case-replace' and `dabbrev-case-fold-search' +are no longer Lisp expressions. They have simply three possible +values. + +`dabbrev-case-replace' has these three values: nil (don't preserve +case), t (do), or `case-replace' (do like M-x query-replace). +`dabbrev-case-fold-search' has these three values: nil (don't ignore +case), t (do), or `case-fold-search' (do like search). + +** Minibuffer history lists are truncated automatically now to a +certain length. The variable history-length specifies how long they +can be. The default value is 30. + +** Changes in Mail mode. + +*** The key C-x m no longer runs the `mail' command directly. +Instead, it runs the command `compose-mail', which invokes the mail +composition mechanism you have selected with the variable +`mail-user-agent'. The default choice of user agent is +`sendmail-user-agent', which gives behavior compatible with the old +behavior. + +C-x 4 m now runs compose-mail-other-window, and C-x 5 m runs +compose-mail-other-frame. + +*** While composing a reply to a mail message, from Rmail, you can use +the command C-c C-r to cite just the region from the message you are +replying to. This copies the text which is the selected region in the +buffer that shows the original message. + +*** The command C-c C-i inserts a file at the end of the message, +with separator lines around the contents. + +*** The command M-x expand-mail-aliases expands all mail aliases +in suitable mail headers. Emacs automatically extracts mail alias +definitions from your mail alias file (e.g., ~/.mailrc). You do not +need to expand mail aliases yourself before sending mail. + +*** New features in the mail-complete command. + +**** The mail-complete command now inserts the user's full name, +for local users or if that is known. The variable mail-complete-style +controls the style to use, and whether to do this at all. +Its values are like those of mail-from-style. + +**** The variable mail-passwd-command lets you specify a shell command +to run to fetch a set of password-entries that add to the ones in +/etc/passwd. + +**** The variable mail-passwd-file now specifies a list of files to read +to get the list of user ids. By default, one file is used: +/etc/passwd. + +** You can "quote" a file name to inhibit special significance of +special syntax, by adding `/:' to the beginning. Thus, if you have a +directory named `/foo:', you can prevent it from being treated as a +reference to a remote host named `foo' by writing it as `/:/foo:'. + +Emacs uses this new construct automatically when necessary, such as +when you start it with a working directory whose name might otherwise +be taken to be magic. + +** There is a new command M-x grep-find which uses find to select +files to search through, and grep to scan them. The output is +available in a Compile mode buffer, as with M-x grep. + +M-x grep now uses the -e option if the grep program supports that. +(-e prevents problems if the search pattern starts with a dash.) + +** In Dired, the & command now flags for deletion the files whose names +suggest they are probably not needed in the long run. + +In Dired, * is now a prefix key for mark-related commands. + +new key dired.el binding old key +------- ---------------- ------- + * c dired-change-marks c + * m dired-mark m + * * dired-mark-executables * (binding deleted) + * / dired-mark-directories / (binding deleted) + * @ dired-mark-symlinks @ (binding deleted) + * u dired-unmark u + * DEL dired-unmark-backward DEL + * ? dired-unmark-all-files C-M-? + * ! dired-unmark-all-marks + * % dired-mark-files-regexp % m + * C-n dired-next-marked-file M-} + * C-p dired-prev-marked-file M-{ + +** Rmail changes. + +*** When Rmail cannot convert your incoming mail into Babyl format, it +saves the new mail in the file RMAILOSE.n, where n is an integer +chosen to make a unique name. This way, Rmail will not keep crashing +each time you run it. + +*** In Rmail, the variable rmail-summary-line-count-flag now controls +whether to include the line count in the summary. Non-nil means yes. + +*** In Rmail summary buffers, d and C-d (the commands to delete +messages) now take repeat counts as arguments. A negative argument +means to move in the opposite direction. + +*** In Rmail, the t command now takes an optional argument which lets +you specify whether to show the message headers in full or pruned. + +*** In Rmail, the new command w (rmail-output-body-to-file) writes +just the body of the current message into a file, without the headers. +It takes the file name from the message subject, by default, but you +can edit that file name in the minibuffer before it is actually used +for output. + +** 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 +`C-M-_'. + +*** 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 -- `C-M-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. + +*** To enable Gnus to read/post multi-lingual articles, you must execute +the following code, for instance, in your .emacs. + + (add-hook 'gnus-startup-hook 'gnus-mule-initialize) + +Then, when you start Gnus, it will decode non-ASCII text automatically +and show appropriate characters. (Note: if you are using gnus-mime +from the SEMI package, formerly known as TM, you should NOT add this +hook to gnus-startup-hook; gnus-mime has its own method of handling +this issue.) + +Since it is impossible to distinguish all coding systems +automatically, you may need to specify a choice of coding system for a +particular news group. This can be done by: + + (gnus-mule-add-group NEWSGROUP 'CODING-SYSTEM) + +Here NEWSGROUP should be a string which names a newsgroup or a tree +of newsgroups. If NEWSGROUP is "XXX.YYY", all news groups under +"XXX.YYY" (including "XXX.YYY.ZZZ") will use the specified coding +system. CODING-SYSTEM specifies which coding system to use (for both +for reading and posting). + +CODING-SYSTEM can also be a cons cell of the form + (READ-CODING-SYSTEM . POST-CODING-SYSTEM) +Then READ-CODING-SYSTEM is used when you read messages from the +newsgroups, while POST-CODING-SYSTEM is used when you post messages +there. + +Emacs knows the right coding systems for certain newsgroups by +default. Here are some of these default settings: + + (gnus-mule-add-group "fj" 'iso-2022-7) + (gnus-mule-add-group "alt.chinese.text" 'hz-gb-2312) + (gnus-mule-add-group "alt.hk" 'hz-gb-2312) + (gnus-mule-add-group "alt.chinese.text.big5" 'cn-big5) + (gnus-mule-add-group "soc.culture.vietnamese" '(nil . viqr)) + +When you reply by mail to an article, these settings are ignored; +the mail is encoded according to sendmail-coding-system, as usual. + +** CC mode changes. + +*** If you edit primarily one style of C (or C++, Objective-C, Java) +code, you may want to make the CC Mode style variables have global +values so that you can set them directly in your .emacs file. To do +this, set c-style-variables-are-local-p to nil in your .emacs file. +Note that this only takes effect if you do it *before* cc-mode.el is +loaded. + +If you typically edit more than one style of C (or C++, Objective-C, +Java) code in a single Emacs session, you may want to make the CC Mode +style variables have buffer local values. By default, all buffers +share the same style variable settings; to make them buffer local, set +c-style-variables-are-local-p to t in your .emacs file. Note that you +must do this *before* CC Mode is loaded. + +*** The new variable c-indentation-style holds the C style name +of the current buffer. + +*** The variable c-block-comments-indent-p has been deleted, because +it is no longer necessary. C mode now handles all the supported styles +of block comments, with no need to say which one you will use. + +*** There is a new indentation style "python", which specifies the C +style that the Python developers like. + +*** There is a new c-cleanup-list option: brace-elseif-brace. +This says to put ...} else if (...) {... on one line, +just as brace-else-brace says to put ...} else {... on one line. + +** VC Changes [new] + +*** In vc-retrieve-snapshot (C-x v r), if you don't specify a snapshot +name, it retrieves the *latest* versions of all files in the current +directory and its subdirectories (aside from files already locked). + +This feature is useful if your RCS directory is a link to a common +master directory, and you want to pick up changes made by other +developers. + +You can do the same thing for an individual file by typing C-u C-x C-q +RET in a buffer visiting that file. + +*** VC can now handle files under CVS that are being "watched" by +other developers. Such files are made read-only by CVS. To get a +writable copy, type C-x C-q in a buffer visiting such a file. VC then +calls "cvs edit", which notifies the other developers of it. + +*** vc-version-diff (C-u C-x v =) now suggests reasonable defaults for +version numbers, based on the current state of the file. + +** Calendar changes. + +*** A new function, list-holidays, allows you list holidays or +subclasses of holidays for ranges of years. Related menu items allow +you do this for the year of the selected date, or the +following/previous years. + +*** There is now support for the Baha'i calendar system. Use `pb' in +the *Calendar* buffer to display the current Baha'i date. The Baha'i +calendar, or "Badi calendar" is a system of 19 months with 19 days +each, and 4 intercalary days (5 during a Gregorian leap year). The +calendar begins May 23, 1844, with each of the months named after a +supposed attribute of God. + +** ps-print changes + +There are some new user variables and subgroups for customizing the page +layout. + +*** Headers & Footers (subgroup) + +Some printer systems print a header page and force the first page to +be printed on the back of the header page when using duplex. If your +printer system has this behavior, set variable +`ps-banner-page-when-duplexing' to t. + +If variable `ps-banner-page-when-duplexing' is non-nil, it prints a +blank page as the very first printed page. So, it behaves as if the +very first character of buffer (or region) were a form feed ^L (\014). + +The variable `ps-spool-config' specifies who is responsible for +setting duplex mode and page size. Valid values are: + + lpr-switches duplex and page size are configured by `ps-lpr-switches'. + Don't forget to set `ps-lpr-switches' to select duplex + printing for your printer. + + setpagedevice duplex and page size are configured by ps-print using the + setpagedevice PostScript operator. + + nil duplex and page size are configured by ps-print *not* using + the setpagedevice PostScript operator. + +The variable `ps-spool-tumble' specifies how the page images on +opposite sides of a sheet are oriented with respect to each other. If +`ps-spool-tumble' is nil, ps-print produces output suitable for +bindings on the left or right. If `ps-spool-tumble' is non-nil, +ps-print produces output suitable for bindings at the top or bottom. +This variable takes effect only if `ps-spool-duplex' is non-nil. +The default value is nil. + +The variable `ps-header-frame-alist' specifies a header frame +properties alist. Valid frame properties are: + + fore-color Specify the foreground frame color. + Value should be a float number between 0.0 (black + color) and 1.0 (white color), or a string which is a + color name, or a list of 3 float numbers which + correspond to the Red Green Blue color scale, each + float number between 0.0 (dark color) and 1.0 (bright + color). The default is 0 ("black"). + + back-color Specify the background frame color (similar to fore-color). + The default is 0.9 ("gray90"). + + shadow-color Specify the shadow color (similar to fore-color). + The default is 0 ("black"). + + border-color Specify the border color (similar to fore-color). + The default is 0 ("black"). + + border-width Specify the border width. + The default is 0.4. + +Any other property is ignored. + +Don't change this alist directly; instead use Custom, or the +`ps-value', `ps-get', `ps-put' and `ps-del' functions (see there for +documentation). + +Ps-print can also print footers. The footer variables are: +`ps-print-footer', `ps-footer-offset', `ps-print-footer-frame', +`ps-footer-font-family', `ps-footer-font-size', `ps-footer-line-pad', +`ps-footer-lines', `ps-left-footer', `ps-right-footer' and +`ps-footer-frame-alist'. These variables are similar to those +controlling headers. + +*** Color management (subgroup) + +If `ps-print-color-p' is non-nil, the buffer's text will be printed in +color. + +*** Face Management (subgroup) + +If you need to print without worrying about face background colors, +set the variable `ps-use-face-background' which specifies if face +background should be used. Valid values are: + + t always use face background color. + nil never use face background color. + (face...) list of faces whose background color will be used. + +*** N-up printing (subgroup) + +The variable `ps-n-up-printing' specifies the number of pages per +sheet of paper. + +The variable `ps-n-up-margin' specifies the margin in points (pt) +between the sheet border and the n-up printing. + +If variable `ps-n-up-border-p' is non-nil, a border is drawn around +each page. + +The variable `ps-n-up-filling' specifies how the page matrix is filled +on each sheet of paper. Following are the valid values for +`ps-n-up-filling' with a filling example using a 3x4 page matrix: + + `left-top' 1 2 3 4 `left-bottom' 9 10 11 12 + 5 6 7 8 5 6 7 8 + 9 10 11 12 1 2 3 4 + + `right-top' 4 3 2 1 `right-bottom' 12 11 10 9 + 8 7 6 5 8 7 6 5 + 12 11 10 9 4 3 2 1 + + `top-left' 1 4 7 10 `bottom-left' 3 6 9 12 + 2 5 8 11 2 5 8 11 + 3 6 9 12 1 4 7 10 + + `top-right' 10 7 4 1 `bottom-right' 12 9 6 3 + 11 8 5 2 11 8 5 2 + 12 9 6 3 10 7 4 1 + +Any other value is treated as `left-top'. + +*** Zebra stripes (subgroup) + +The variable `ps-zebra-color' controls the zebra stripes grayscale or +RGB color. + +The variable `ps-zebra-stripe-follow' specifies how zebra stripes +continue on next page. Visually, valid values are (the character `+' +to the right of each column indicates that a line is printed): + + `nil' `follow' `full' `full-follow' + Current Page -------- ----------- --------- ---------------- + 1 XXXXX + 1 XXXXXXXX + 1 XXXXXX + 1 XXXXXXXXXXXXX + + 2 XXXXX + 2 XXXXXXXX + 2 XXXXXX + 2 XXXXXXXXXXXXX + + 3 XXXXX + 3 XXXXXXXX + 3 XXXXXX + 3 XXXXXXXXXXXXX + + 4 + 4 + 4 + 4 + + 5 + 5 + 5 + 5 + + 6 + 6 + 6 + 6 + + 7 XXXXX + 7 XXXXXXXX + 7 XXXXXX + 7 XXXXXXXXXXXXX + + 8 XXXXX + 8 XXXXXXXX + 8 XXXXXX + 8 XXXXXXXXXXXXX + + 9 XXXXX + 9 XXXXXXXX + 9 XXXXXX + 9 XXXXXXXXXXXXX + + 10 + 10 + + 11 + 11 + + -------- ----------- --------- ---------------- + Next Page -------- ----------- --------- ---------------- + 12 XXXXX + 12 + 10 XXXXXX + 10 + + 13 XXXXX + 13 XXXXXXXX + 11 XXXXXX + 11 + + 14 XXXXX + 14 XXXXXXXX + 12 XXXXXX + 12 + + 15 + 15 XXXXXXXX + 13 + 13 XXXXXXXXXXXXX + + 16 + 16 + 14 + 14 XXXXXXXXXXXXX + + 17 + 17 + 15 + 15 XXXXXXXXXXXXX + + 18 XXXXX + 18 + 16 XXXXXX + 16 + + 19 XXXXX + 19 XXXXXXXX + 17 XXXXXX + 17 + + 20 XXXXX + 20 XXXXXXXX + 18 XXXXXX + 18 + + 21 + 21 XXXXXXXX + + 22 + 22 + + -------- ----------- --------- ---------------- + +Any other value is treated as `nil'. + + +*** Printer management (subgroup) + +The variable `ps-printer-name-option' determines the option used by +some utilities to indicate the printer name; it's used only when +`ps-printer-name' is a non-empty string. If you're using the lpr +utility to print, for example, `ps-printer-name-option' should be set +to "-P". + +The variable `ps-manual-feed' indicates if the printer requires manual +paper feeding. If it's nil, automatic feeding takes place. If it's +non-nil, manual feeding takes place. + +The variable `ps-end-with-control-d' specifies whether C-d (\x04) +should be inserted at end of the generated PostScript. Non-nil means +do so. + +*** Page settings (subgroup) + +If variable `ps-warn-paper-type' is nil, it's *not* treated as an +error if the PostScript printer doesn't have a paper with the size +indicated by `ps-paper-type'; the default paper size will be used +instead. If `ps-warn-paper-type' is non-nil, an error is signaled if +the PostScript printer doesn't support a paper with the size indicated +by `ps-paper-type'. This is used when `ps-spool-config' is set to +`setpagedevice'. + +The variable `ps-print-upside-down' determines the orientation for +printing pages: nil means `normal' printing, non-nil means +`upside-down' printing (that is, the page is rotated by 180 degrees). + +The variable `ps-selected-pages' specifies which pages to print. If +it's nil, all pages are printed. If it's a list, list elements may be +integers specifying a single page to print, or cons cells (FROM . TO) +specifying to print from page FROM to TO. Invalid list elements, that +is integers smaller than one, or elements whose FROM is greater than +its TO, are ignored. + +The variable `ps-even-or-odd-pages' specifies how to print even/odd +pages. Valid values are: + + nil print all pages. + + `even-page' print only even pages. + + `odd-page' print only odd pages. + + `even-sheet' print only even sheets. + That is, if `ps-n-up-printing' is 1, it behaves like + `even-page', but for values greater than 1, it'll + print only the even sheet of paper. + + `odd-sheet' print only odd sheets. + That is, if `ps-n-up-printing' is 1, it behaves like + `odd-page'; but for values greater than 1, it'll print + only the odd sheet of paper. + +Any other value is treated as nil. + +If you set `ps-selected-pages' (see there for documentation), pages +are filtered by `ps-selected-pages', and then by +`ps-even-or-odd-pages'. For example, if we have: + + (setq ps-selected-pages '(1 4 (6 . 10) (12 . 16) 20)) + +and we combine this with `ps-even-or-odd-pages' and +`ps-n-up-printing', we get: + +`ps-n-up-printing' = 1: + `ps-even-or-odd-pages' PAGES PRINTED + nil 1, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 20 + even-page 4, 6, 8, 10, 12, 14, 16, 20 + odd-page 1, 7, 9, 13, 15 + even-sheet 4, 6, 8, 10, 12, 14, 16, 20 + odd-sheet 1, 7, 9, 13, 15 + +`ps-n-up-printing' = 2: + `ps-even-or-odd-pages' PAGES PRINTED + nil 1/4, 6/7, 8/9, 10/12, 13/14, 15/16, 20 + even-page 4/6, 8/10, 12/14, 16/20 + odd-page 1/7, 9/13, 15 + even-sheet 6/7, 10/12, 15/16 + odd-sheet 1/4, 8/9, 13/14, 20 + +*** Miscellany (subgroup) + +The variable `ps-error-handler-message' specifies where error handler +messages should be sent. + +It is also possible to add a user-defined PostScript prologue code in +front of all generated prologue code by setting the variable +`ps-user-defined-prologue'. + +The variable `ps-line-number-font' specifies the font for line numbers. + +The variable `ps-line-number-font-size' specifies the font size in +points for line numbers. + +The variable `ps-line-number-color' specifies the color for line +numbers. See `ps-zebra-color' for documentation. + +The variable `ps-line-number-step' specifies the interval in which +line numbers are printed. For example, if `ps-line-number-step' is set +to 2, the printing will look like: + + 1 one line + one line + 3 one line + one line + 5 one line + one line + ... + +Valid values are: + +integer an integer specifying the interval in which line numbers are + printed. If it's smaller than or equal to zero, 1 + is used. + +`zebra' specifies that only the line number of the first line in a + zebra stripe is to be printed. + +Any other value is treated as `zebra'. + +The variable `ps-line-number-start' specifies the starting point in +the interval given by `ps-line-number-step'. For example, if +`ps-line-number-step' is set to 3, and `ps-line-number-start' is set to +3, the output will look like: + + one line + one line + 3 one line + one line + one line + 6 one line + one line + one line + 9 one line + one line + ... + +The variable `ps-postscript-code-directory' specifies the directory +where the PostScript prologue file used by ps-print is found. + +The variable `ps-line-spacing' determines the line spacing in points, +for ordinary text, when generating PostScript (similar to +`ps-font-size'). + +The variable `ps-paragraph-spacing' determines the paragraph spacing, +in points, for ordinary text, when generating PostScript (similar to +`ps-font-size'). + +The variable `ps-paragraph-regexp' specifies the paragraph delimiter. + +The variable `ps-begin-cut-regexp' and `ps-end-cut-regexp' specify the +start and end of a region to cut out when printing. + +** hideshow changes. + +*** now supports hiding of blocks of single line comments (like // for +C++, ; for lisp). + +*** Support for java-mode added. + +*** When doing `hs-hide-all' it is now possible to also hide the comments +in the file if `hs-hide-comments-when-hiding-all' is set. + +*** The new function `hs-hide-initial-comment' hides the comments at +the beginning of the files. Finally those huge RCS logs don't stay in your +way! This is run by default when entering the `hs-minor-mode'. + +*** Now uses overlays instead of `selective-display', so is more +robust and a lot faster. + +*** A block beginning can span multiple lines. + +*** The new variable `hs-show-hidden-short-form' if t, directs hideshow +to show only the beginning of a block when it is hidden. See the +documentation for more details. + +** Changes in Enriched mode. + +*** When you visit a file in enriched-mode, Emacs will make sure it is +filled to the current fill-column. This behavior is now independent +of the size of the window. When you save the file, the fill-column in +use is stored as well, so that the whole buffer need not be refilled +the next time unless the fill-column is different. + +*** use-hard-newlines is now a minor mode. When it is enabled, Emacs +distinguishes between hard and soft newlines, and treats hard newlines +as paragraph boundaries. Otherwise all newlines inserted are marked +as soft, and paragraph boundaries are determined solely from the text. + +** Font Lock mode + +*** Custom support + +The variables font-lock-face-attributes, font-lock-display-type and +font-lock-background-mode are now obsolete; the recommended way to specify +the faces to use for Font Lock mode is with M-x customize-group on the new +custom group font-lock-faces. If you set font-lock-face-attributes in your +~/.emacs file, Font Lock mode will respect its value. However, you should +consider converting from setting that variable to using M-x customize. + +You can still use X resources to specify Font Lock face appearances. + +*** Maximum decoration + +Fontification now uses the maximum level of decoration supported by +default. Previously, fontification used a mode-specific default level +of decoration, which is typically the minimum level of decoration +supported. You can set font-lock-maximum-decoration to nil +to get the old behavior. + +*** New support + +Support is now provided for Java, Objective-C, AWK and SIMULA modes. + +Note that Font Lock mode can be turned on without knowing exactly what modes +support Font Lock mode, via the command global-font-lock-mode. + +*** Configurable support + +Support for C, C++, Objective-C and Java can be more easily configured for +additional types and classes via the new variables c-font-lock-extra-types, +c++-font-lock-extra-types, objc-font-lock-extra-types and, you guessed it, +java-font-lock-extra-types. These value of each of these variables should be a +list of regexps matching the extra type names. For example, the default value +of c-font-lock-extra-types is ("\\sw+_t") which means fontification follows the +convention that C type names end in _t. This results in slower fontification. + +Of course, you can change the variables that specify fontification in whatever +way you wish, typically by adding regexps. However, these new variables make +it easier to make specific and common changes for the fontification of types. + +*** Adding highlighting patterns to existing support + +You can use the new function font-lock-add-keywords to add your own +highlighting patterns, such as for project-local or user-specific constructs, +for any mode. + +For example, to highlight `FIXME:' words in C comments, put: + + (font-lock-add-keywords 'c-mode '(("\\ tex --> reftex.el + +** Changes in BibTeX mode. + +*** Info documentation is now available. + +*** Don't allow parentheses in string constants anymore. This confused +both the BibTeX program and Emacs BibTeX mode. + +*** Renamed variable bibtex-mode-user-optional-fields to +bibtex-user-optional-fields. + +*** Removed variable bibtex-include-OPTannote +(use bibtex-user-optional-fields instead). + +*** New interactive functions to copy and kill fields and complete +entries to the BibTeX kill ring, from where they can be yanked back by +appropriate functions. + +*** New interactive functions for repositioning and marking of +entries. They are bound by default to C-M-l and C-M-h. + +*** New hook bibtex-clean-entry-hook. It is called after entry has +been cleaned. + +*** New variable bibtex-field-delimiters, which replaces variables +bibtex-field-{left|right}-delimiter. + +*** New variable bibtex-entry-delimiters to determine how entries +shall be delimited. + +*** Allow preinitialization of fields. See documentation of +bibtex-user-optional-fields, bibtex-entry-field-alist, and +bibtex-include-OPTkey for details. + +*** Book and InBook entries require either an author or an editor +field. This is now supported by bibtex.el. Alternative fields are +prefixed with `ALT'. + +*** New variable bibtex-entry-format, which replaces variable +bibtex-clean-entry-zap-empty-opts and allows specification of many +formatting options performed on cleaning an entry (see variable +documentation). + +*** Even more control on how automatic keys are generated. See +documentation of bibtex-generate-autokey for details. Transcriptions +for foreign languages other than German are now handled, too. + +*** New boolean user option bibtex-comma-after-last-field to decide if +comma should be inserted at end of last field. + +*** New boolean user option bibtex-align-at-equal-sign to determine if +alignment should be made at left side of field contents or at equal +signs. New user options to control entry layout (e.g. indentation). + +*** New function bibtex-fill-entry to realign entries. + +*** New function bibtex-reformat to reformat region or buffer. + +*** New function bibtex-convert-alien to convert a BibTeX database +from alien sources. + +*** New function bibtex-complete-key (similar to bibtex-complete-string) +to complete prefix to a key defined in buffer. Mainly useful in +crossref entries. + +*** New function bibtex-count-entries to count entries in buffer or +region. + +*** Added support for imenu. + +*** The function `bibtex-validate' now checks current region instead +of buffer if mark is active. Now it shows all errors of buffer in a +`compilation mode' buffer. You can use the normal commands (e.g. +`next-error') for compilation modes to jump to errors. + +*** New variable `bibtex-string-file-path' to determine where the files +from `bibtex-string-files' are searched. + +** Iso Accents mode now supports Latin-3 as an alternative. + +** The command next-error now opens blocks hidden by hideshow. + +** The function using-unix-filesystems has been replaced by the +functions add-untranslated-filesystem and remove-untranslated-filesystem. +Each of these functions takes the name of a drive letter or directory +as an argument. + +When a filesystem is added as untranslated, all files on it are read +and written in binary mode (no cr/lf translation is performed). + +** browse-url changes + +*** New methods for: Grail (browse-url-generic), MMM (browse-url-mmm), +Lynx in a separate xterm (browse-url-lynx-xterm) or in an Emacs window +(browse-url-lynx-emacs), remote W3 (browse-url-w3-gnudoit), generic +non-remote-controlled browsers (browse-url-generic) and associated +customization variables. + +*** New commands `browse-url-of-region' and `browse-url'. + +*** URLs marked up with (RFC1738) work if broken across +lines. Browsing methods can be associated with URL regexps +(e.g. mailto: URLs) via `browse-url-browser-function'. + +** Changes in Ediff + +*** Clicking Mouse-2 on a brief command description in Ediff control panel +pops up the Info file for this command. + +*** There is now a variable, ediff-autostore-merges, which controls whether +the result of a merge is saved in a file. By default, this is done only when +merge is done from a session group (eg, when merging files in two different +directories). + +*** Since Emacs 19.31 (this hasn't been announced before), Ediff can compare +and merge groups of files residing in different directories, or revisions of +files in the same directory. + +*** Since Emacs 19.31, Ediff can apply multi-file patches interactively. +The patches must be in the context format or GNU unified format. (The bug +related to the GNU format has now been fixed.) + +** Changes in Viper + +*** The startup file is now .viper instead of .vip +*** All variable/function names have been changed to start with viper- + instead of vip-. +*** C-\ now simulates the meta-key in all Viper states. +*** C-z in Insert state now escapes to Vi for the duration of the next +Viper command. In Vi and Insert states, C-z behaves as before. +*** C-c \ escapes to Vi for one command if Viper is in Insert or Emacs states. +*** _ is no longer the meta-key in Vi state. +*** The variable viper-insert-state-cursor-color can be used to change cursor +color when Viper is in insert state. +*** If search lands the cursor near the top or the bottom of the window, +Viper pulls the window up or down to expose more context. The variable +viper-adjust-window-after-search controls this behavior. + +** Etags changes. + +*** In C, C++, Objective C and Java, Etags tags global variables by +default. The resulting tags files are inflated by 30% on average. +Use --no-globals to turn this feature off. Etags can also tag +variables which are members of structure-like constructs, but it does +not by default. Use --members to turn this feature on. + +*** C++ member functions are now recognized as tags. + +*** Java is tagged like C++. In addition, "extends" and "implements" +constructs are tagged. Files are recognized by the extension .java. + +*** Etags can now handle programs written in Postscript. Files are +recognized by the extensions .ps and .pdb (Postscript with C syntax). +In Postscript, tags are lines that start with a slash. + +*** Etags now handles Objective C and Objective C++ code. The usual C and +C++ tags are recognized in these languages; in addition, etags +recognizes special Objective C syntax for classes, class categories, +methods and protocols. + +*** Etags also handles Cobol. Files are recognized by the extension +.cobol. The tagged lines are those containing a word that begins in +column 8 and ends in a full stop, i.e. anything that could be a +paragraph name. + +*** Regexps in Etags now support intervals, as in ed or grep. The syntax of +an interval is \{M,N\}, and it means to match the preceding expression +at least M times and as many as N times. + +** The format for specifying a custom format for time-stamp to insert +in files has changed slightly. + +With the new enhancements to the functionality of format-time-string, +time-stamp-format will change to be eventually compatible with it. +This conversion is being done in two steps to maintain compatibility +with old time-stamp-format values. + +In the new scheme, alternate case is signified by the number-sign +(`#') modifier, rather than changing the case of the format character. +This feature is as yet incompletely implemented for compatibility +reasons. + +In the old time-stamp-format, all numeric fields defaulted to their +natural width. (With format-time-string, each format has a +fixed-width default.) In this version, you can specify the colon +(`:') modifier to a numeric conversion to mean "give me the historical +time-stamp-format width default." Do not use colon if you are +specifying an explicit width, as in "%02d". + +Numbers are no longer truncated to the requested width, except in the +case of "%02y", which continues to give a two-digit year. Digit +truncation probably wasn't being used for anything else anyway. + +The new formats will work with old versions of Emacs. New formats are +being recommended now to allow time-stamp-format to change in the +future to be compatible with format-time-string. The new forms being +recommended now will continue to work then. + +See the documentation string for the variable time-stamp-format for +details. + +** There are some additional major modes: + +dcl-mode, for editing VMS DCL files. +m4-mode, for editing files of m4 input. +meta-mode, for editing MetaFont and MetaPost source files. + +** In Shell mode, the command shell-copy-environment-variable lets you +copy the value of a specified environment variable from the subshell +into Emacs. + +** New Lisp packages include: + +*** battery.el displays battery status for laptops. + +*** M-x bruce (named after Lenny Bruce) is a program that might +be used for adding some indecent words to your email. + +*** M-x crisp-mode enables an emulation for the CRiSP editor. + +*** M-x dirtrack arranges for better tracking of directory changes +in shell buffers. + +*** The new library elint.el provides for linting of Emacs Lisp code. +See the documentation for `elint-initialize', `elint-current-buffer' +and `elint-defun'. + +*** M-x expand-add-abbrevs defines a special kind of abbrev which is +meant for programming constructs. These abbrevs expand like ordinary +ones, when you type SPC, but only at the end of a line and not within +strings or comments. + +These abbrevs can act as templates: you can define places within an +abbrev for insertion of additional text. Once you expand the abbrev, +you can then use C-x a p and C-x a n to move back and forth to these +insertion points. Thus you can conveniently insert additional text +at these points. + +*** filecache.el remembers the location of files so that you +can visit them by short forms of their names. + +*** find-func.el lets you find the definition of the user-loaded +Emacs Lisp function at point. + +*** M-x handwrite converts text to a "handwritten" picture. + +*** M-x iswitchb-buffer is a command for switching to a buffer, much like +switch-buffer, but it reads the argument in a more helpful way. + +*** M-x landmark implements a neural network for landmark learning. + +*** M-x locate provides a convenient interface to the `locate' program. + +*** M4 mode is a new mode for editing files of m4 input. + +*** mantemp.el creates C++ manual template instantiations +from the GCC error messages which indicate which instantiations are needed. + +*** mouse-copy.el provides a one-click copy and move feature. +You can drag a region with M-mouse-1, and it is automatically +inserted at point. M-Shift-mouse-1 deletes the text from its +original place after inserting the copy. + +*** mouse-drag.el lets you do scrolling by dragging Mouse-2 +on the buffer. + +You click the mouse and move; that distance either translates into the +velocity to scroll (with mouse-drag-throw) or the distance to scroll +(with mouse-drag-drag). Horizontal scrolling is enabled when needed. + +Enable mouse-drag with: + (global-set-key [down-mouse-2] 'mouse-drag-throw) +-or- + (global-set-key [down-mouse-2] 'mouse-drag-drag) + +*** mspools.el is useful for determining which mail folders have +mail waiting to be read in them. It works with procmail. + +*** Octave mode is a major mode for editing files of input for Octave. +It comes with a facility for communicating with an Octave subprocess. + +*** ogonek + +The ogonek package provides functions for changing the coding of +Polish diacritic characters in buffers. Codings known from various +platforms are supported such as ISO8859-2, Mazovia, IBM Latin2, and +TeX. For example, you can change the coding from Mazovia to +ISO8859-2. Another example is a change of coding from ISO8859-2 to +prefix notation (in which `/a' stands for the aogonek character, for +instance) and vice versa. + +To use this package load it using + M-x load-library [enter] ogonek +Then, you may get an explanation by calling one of + M-x ogonek-jak -- in Polish + M-x ogonek-how -- in English +The info specifies the commands and variables provided as well as the +ways of customization in `.emacs'. + +*** Interface to ph. + +Emacs provides a client interface to CCSO Nameservers (ph/qi) + +The CCSO nameserver is used in many universities to provide directory +services about people. ph.el provides a convenient Emacs interface to +these servers. + +*** uce.el is useful for replying to unsolicited commercial email. + +*** vcursor.el implements a "virtual cursor" feature. +You can move the virtual cursor with special commands +while the real cursor does not move. + +*** webjump.el is a "hot list" package which you can set up +for visiting your favorite web sites. + +*** M-x winner-mode is a minor mode which saves window configurations, +so you can move back to other configurations that you have recently used. + +** movemail change + +Movemail no longer needs to be installed setuid root in order for POP +mail retrieval to function properly. This is because it no longer +supports the RPOP (reserved-port POP) protocol; instead, it uses the +user's POP password to authenticate to the mail server. + +This change was made earlier, but not reported in NEWS before. + + +* Emacs 20.1 changes for MS-DOS and MS-Windows. + +** Changes in handling MS-DOS/MS-Windows text files. + +Emacs handles three different conventions for representing +end-of-line: CRLF for MSDOS, LF for Unix and GNU, and CR (used on the +Macintosh). Emacs determines which convention is used in a specific +file based on the contents of that file (except for certain special +file names), and when it saves the file, it uses the same convention. + +To save the file and change the end-of-line convention, you can use +C-x RET f (set-buffer-file-coding-system) to specify a different +coding system for the buffer. Then, when you save the file, the newly +specified coding system will take effect. For example, to save with +LF, specify undecided-unix (or some other ...-unix coding system); to +save with CRLF, specify undecided-dos. + + +* Lisp Changes in Emacs 20.1 + +** Byte-compiled files made with Emacs 20 will, in general, work in +Emacs 19 as well, as long as the source code runs in Emacs 19. And +vice versa: byte-compiled files made with Emacs 19 should also run in +Emacs 20, as long as the program itself works in Emacs 20. + +** Windows-specific functions and variables have been renamed +to start with w32- instead of win32-. + +In hacker language, calling something a "win" is a form of praise. We +don't want to praise a non-free Microsoft system, so we don't call it +"win". + +** Basic Lisp changes + +*** A symbol whose name starts with a colon now automatically +evaluates to itself. Therefore such a symbol can be used as a constant. + +*** The defined purpose of `defconst' has been changed. It should now +be used only for values that should not be changed whether by a program +or by the user. + +The actual behavior of defconst has not been changed. + +*** There are new macros `when' and `unless' + +(when CONDITION BODY...) is short for (if CONDITION (progn BODY...)) +(unless CONDITION BODY...) is short for (if CONDITION nil BODY...) + +*** Emacs now defines functions caar, cadr, cdar and cddr with their +usual Lisp meanings. For example, caar returns the car of the car of +its argument. + +*** equal, when comparing strings, now ignores their text properties. + +*** The new function `functionp' tests whether an object is a function. + +*** arrayp now returns t for char-tables and bool-vectors. + +*** Certain primitives which use characters (as integers) now get an +error if the integer is not a valid character code. These primitives +include insert-char, char-to-string, and the %c construct in the +`format' function. + +*** The `require' function now insists on adding a suffix, either .el +or .elc, to the file name. Thus, (require 'foo) will not use a file +whose name is just foo. It insists on foo.el or foo.elc. + +*** The `autoload' function, when the file name does not contain +either a directory name or the suffix .el or .elc, insists on +adding one of these suffixes. + +*** string-to-number now takes an optional second argument BASE +which specifies the base to use when converting an integer. +If BASE is omitted, base 10 is used. + +We have not implemented other radices for floating point numbers, +because that would be much more work and does not seem useful. + +*** substring now handles vectors as well as strings. + +*** The Common Lisp function eql is no longer defined normally. +You must load the `cl' library to define it. + +*** The new macro `with-current-buffer' lets you evaluate an expression +conveniently with a different current buffer. It looks like this: + + (with-current-buffer BUFFER BODY-FORMS...) + +BUFFER is the expression that says which buffer to use. +BODY-FORMS say what to do in that buffer. + +*** The new primitive `save-current-buffer' saves and restores the +choice of current buffer, like `save-excursion', but without saving or +restoring the value of point or the mark. `with-current-buffer' +works using `save-current-buffer'. + +*** The new macro `with-temp-file' lets you do some work in a new buffer and +write the output to a specified file. Like `progn', it returns the value +of the last form. + +*** The new macro `with-temp-buffer' lets you do some work in a new buffer, +which is discarded after use. Like `progn', it returns the value of the +last form. If you wish to return the buffer contents, use (buffer-string) +as the last form. + +*** The new function split-string takes a string, splits it at certain +characters, and returns a list of the substrings in between the +matches. + +For example, (split-string "foo bar lose" " +") returns ("foo" "bar" "lose"). + +*** The new macro with-output-to-string executes some Lisp expressions +with standard-output set up so that all output feeds into a string. +Then it returns that string. + +For example, if the current buffer name is `foo', + +(with-output-to-string + (princ "The buffer is ") + (princ (buffer-name))) + +returns "The buffer is foo". + +** Non-ASCII characters are now supported, if enable-multibyte-characters +is non-nil. + +These characters have character codes above 256. When inserted in the +buffer or stored in a string, they are represented as multibyte +characters that occupy several buffer positions each. + +*** When enable-multibyte-characters is non-nil, a single character in +a buffer or string can be two or more bytes (as many as four). + +Buffers and strings are still made up of unibyte elements; +character positions and string indices are always measured in bytes. +Therefore, moving forward one character can increase the buffer +position by 2, 3 or 4. The function forward-char moves by whole +characters, and therefore is no longer equivalent to + (lambda (n) (goto-char (+ (point) n))). + +ASCII characters (codes 0 through 127) are still single bytes, always. +Sequences of byte values 128 through 255 are used to represent +non-ASCII characters. These sequences are called "multibyte +characters". + +The first byte of a multibyte character is always in the range 128 +through 159 (octal 0200 through 0237). These values are called +"leading codes". The second and subsequent bytes are always in the +range 160 through 255 (octal 0240 through 0377). The first byte, the +leading code, determines how many bytes long the sequence is. + +*** The function forward-char moves over characters, and therefore +(forward-char 1) may increase point by more than 1 if it moves over a +multibyte character. Likewise, delete-char always deletes a +character, which may be more than one buffer position. + +This means that some Lisp programs, which assume that a character is +always one buffer position, need to be changed. + +However, all ASCII characters are always one buffer position. + +*** The regexp [\200-\377] no longer matches all non-ASCII characters, +because when enable-multibyte-characters is non-nil, these characters +have codes that are not in the range octal 200 to octal 377. However, +the regexp [^\000-\177] does match all non-ASCII characters, +guaranteed. + +*** The function char-boundary-p returns non-nil if position POS is +between two characters in the buffer (not in the middle of a +character). + +When the value is non-nil, it says what kind of character follows POS: + + 0 if POS is at an ASCII character or at the end of range, + 1 if POS is before a 2-byte length multi-byte form, + 2 if POS is at a head of 3-byte length multi-byte form, + 3 if POS is at a head of 4-byte length multi-byte form, + 4 if POS is at a head of multi-byte form of a composite character. + +*** The function char-bytes returns how many bytes the character CHAR uses. + +*** Strings can contain multibyte characters. The function +`length' returns the string length counting bytes, which may be +more than the number of characters. + +You can include a multibyte character in a string constant by writing +it literally. You can also represent it with a hex escape, +\xNNNNNNN..., using as many digits as necessary. Any character which +is not a valid hex digit terminates this construct. If you want to +follow it with a character that is a hex digit, write backslash and +newline in between; that will terminate the hex escape. + +*** The function concat-chars takes arguments which are characters +and returns a string containing those characters. + +*** The function sref access a multibyte character in a string. +(sref STRING INDX) returns the character in STRING at INDEX. INDEX +counts from zero. If INDEX is at a position in the middle of a +character, sref signals an error. + +*** The function chars-in-string returns the number of characters +in a string. This is less than the length of the string, if the +string contains multibyte characters (the length counts bytes). + +*** The function chars-in-region returns the number of characters +in a region from BEG to END. This is less than (- END BEG) if the +region contains multibyte characters (the length counts bytes). + +*** The function string-to-list converts a string to a list of +the characters in it. string-to-vector converts a string +to a vector of the characters in it. + +*** The function store-substring alters part of the contents +of a string. You call it as follows: + + (store-substring STRING IDX OBJ) + +This says to alter STRING, by storing OBJ starting at index IDX in +STRING. OBJ may be either a character or a (smaller) string. +This function really does alter the contents of STRING. +Since it is impossible to change the length of an existing string, +it is an error if OBJ doesn't fit within STRING's actual length. + +*** char-width returns the width (in columns) of the character CHAR, +if it were displayed in the current buffer and the selected window. + +*** string-width returns the width (in columns) of the text in STRING, +if it were displayed in the current buffer and the selected window. + +*** truncate-string-to-width shortens a string, if necessary, +to fit within a certain number of columns. (Of course, it does +not alter the string that you give it; it returns a new string +which contains all or just part of the existing string.) + +(truncate-string-to-width STR END-COLUMN &optional START-COLUMN PADDING) + +This returns the part of STR up to column END-COLUMN. + +The optional argument START-COLUMN specifies the starting column. +If this is non-nil, then the first START-COLUMN columns of the string +are not included in the resulting value. + +The optional argument PADDING, if non-nil, is a padding character to be added +at the beginning and end the resulting string, to extend it to exactly +WIDTH columns. If PADDING is nil, that means do not pad; then, if STRING +is narrower than WIDTH, the value is equal to STRING. + +If PADDING and START-COLUMN are both non-nil, and if there is no clean +place in STRING that corresponds to START-COLUMN (because one +character extends across that column), then the padding character +PADDING is added one or more times at the beginning of the result +string, so that its columns line up as if it really did start at +column START-COLUMN. + +*** When the functions in the list after-change-functions are called, +the third argument is the number of bytes in the pre-change text, not +necessarily the number of characters. It is, in effect, the +difference in buffer position between the beginning and the end of the +changed text, before the change. + +*** The characters Emacs uses are classified in various character +sets, each of which has a name which is a symbol. In general there is +one character set for each script, not for each language. + +**** The function charsetp tests whether an object is a character set name. + +**** The variable charset-list holds a list of character set names. + +**** char-charset, given a character code, returns the name of the character +set that the character belongs to. (The value is a symbol.) + +**** split-char, given a character code, returns a list containing the +name of the character set, followed by one or two byte-values +which identify the character within that character set. + +**** make-char, given a character set name and one or two subsequent +byte-values, constructs a character code. This is roughly the +opposite of split-char. + +**** find-charset-region returns a list of the character sets +of all the characters between BEG and END. + +**** find-charset-string returns a list of the character sets +of all the characters in a string. + +*** Here are the Lisp facilities for working with coding systems +and specifying coding systems. + +**** The function coding-system-list returns a list of all coding +system names (symbols). With optional argument t, it returns a list +of all distinct base coding systems, not including variants. +(Variant coding systems are those like latin-1-dos, latin-1-unix +and latin-1-mac which specify the end-of-line conversion as well +as what to do about code conversion.) + +**** coding-system-p tests a symbol to see if it is a coding system +name. It returns t if so, nil if not. + +**** file-coding-system-alist specifies which coding systems to use +for certain file names. It works like network-coding-system-alist, +except that the PATTERN is matched against the file name. + +Each element has the format (PATTERN . VAL), where PATTERN determines +which file names the element applies to. PATTERN should be a regexp +to match against a file name. + +VAL is a coding system, a cons cell containing two coding systems, or +a function symbol. If VAL is a coding system, it is used for both +decoding what received from the network stream and encoding what sent +to the network stream. If VAL is a cons cell containing two coding +systems, the car specifies the coding system for decoding, and the cdr +specifies the coding system for encoding. + +If VAL is a function symbol, the function must return a coding system +or a cons cell containing two coding systems, which is used as above. + +**** The variable network-coding-system-alist specifies +the coding system to use for network sockets. + +Each element has the format (PATTERN . VAL), where PATTERN determines +which network sockets the element applies to. PATTERN should be +either a port number or a regular expression matching some network +service names. + +VAL is a coding system, a cons cell containing two coding systems, or +a function symbol. If VAL is a coding system, it is used for both +decoding what received from the network stream and encoding what sent +to the network stream. If VAL is a cons cell containing two coding +systems, the car specifies the coding system for decoding, and the cdr +specifies the coding system for encoding. + +If VAL is a function symbol, the function must return a coding system +or a cons cell containing two coding systems, which is used as above. + +**** process-coding-system-alist specifies which coding systems to use +for certain subprocess. It works like network-coding-system-alist, +except that the PATTERN is matched against the program name used to +start the subprocess. + +**** The variable default-process-coding-system specifies the coding +systems to use for subprocess (and net connection) input and output, +when nothing else specifies what to do. The value is a cons cell +(OUTPUT-CODING . INPUT-CODING). OUTPUT-CODING applies to output +to the subprocess, and INPUT-CODING applies to input from it. + +**** The variable coding-system-for-write, if non-nil, specifies the +coding system to use for writing a file, or for output to a synchronous +subprocess. + +It also applies to any asynchronous subprocess or network connection, +but in a different way: the value of coding-system-for-write when you +start the subprocess or connection affects that subprocess or +connection permanently or until overridden. + +The variable coding-system-for-write takes precedence over +file-coding-system-alist, process-coding-system-alist and +network-coding-system-alist, and all other methods of specifying a +coding system for output. But most of the time this variable is nil. +It exists so that Lisp programs can bind it to a specific coding +system for one operation at a time. + +**** coding-system-for-read applies similarly to input from +files, subprocesses or network connections. + +**** The function process-coding-system tells you what +coding systems(s) an existing subprocess is using. +The value is a cons cell, + (DECODING-CODING-SYSTEM . ENCODING-CODING-SYSTEM) +where DECODING-CODING-SYSTEM is used for decoding output from +the subprocess, and ENCODING-CODING-SYSTEM is used for encoding +input to the subprocess. + +**** The function set-process-coding-system can be used to +change the coding systems in use for an existing subprocess. + +** Emacs has a new facility to help users manage the many +customization options. To make a Lisp program work with this facility, +you need to use the new macros defgroup and defcustom. + +You use defcustom instead of defvar, for defining a user option +variable. The difference is that you specify two additional pieces of +information (usually): the "type" which says what values are +legitimate, and the "group" which specifies the hierarchy for +customization. + +Thus, instead of writing + + (defvar foo-blurgoze nil + "*Non-nil means that foo will act very blurgozely.") + +you would now write this: + + (defcustom foo-blurgoze nil + "*Non-nil means that foo will act very blurgozely." + :type 'boolean + :group foo) + +The type `boolean' means that this variable has only +two meaningful states: nil and non-nil. Other type values +describe other possibilities; see the manual for Custom +for a description of them. + +The "group" argument is used to specify a group which the option +should belong to. You define a new group like this: + + (defgroup ispell nil + "Spell checking using Ispell." + :group 'processes) + +The "group" argument in defgroup specifies the parent group. The root +group is called `emacs'; it should not contain any variables itself, +but only other groups. The immediate subgroups of `emacs' correspond +to the keywords used by C-h p. Under these subgroups come +second-level subgroups that belong to individual packages. + +Each Emacs package should have its own set of groups. A simple +package should have just one group; a more complex package should +have a hierarchy of its own groups. The sole or root group of a +package should be a subgroup of one or more of the "keyword" +first-level subgroups. + +** New `widget' library for inserting UI components in buffers. + +This library, used by the new custom library, is documented in a +separate manual that accompanies Emacs. + +** easy-mmode + +The easy-mmode package provides macros and functions that make +developing minor modes easier. Roughly, the programmer has to code +only the functionality of the minor mode. All the rest--toggles, +predicate, and documentation--can be done in one call to the macro +`easy-mmode-define-minor-mode' (see the documentation). See also +`easy-mmode-define-keymap'. + +** Text property changes + +*** The `intangible' property now works on overlays as well as on a +text property. + +*** The new functions next-char-property-change and +previous-char-property-change scan through the buffer looking for a +place where either a text property or an overlay might change. The +functions take two arguments, POSITION and LIMIT. POSITION is the +starting position for the scan. LIMIT says where to stop the scan. + +If no property change is found before LIMIT, the value is LIMIT. If +LIMIT is nil, scan goes to the beginning or end of the accessible part +of the buffer. If no property change is found, the value is the +position of the beginning or end of the buffer. + +*** In the `local-map' text property or overlay property, the property +value can now be a symbol whose function definition is a keymap. This +is an alternative to using the keymap itself. + +** Changes in invisibility features + +*** Isearch can now temporarily show parts of the buffer which are +hidden by an overlay with a invisible property, when the search match +is inside that portion of the buffer. To enable this the overlay +should have a isearch-open-invisible property which is a function that +would be called having the overlay as an argument, the function should +make the overlay visible. + +During incremental search the overlays are shown by modifying the +invisible and intangible properties, if beside this more actions are +needed the overlay should have a isearch-open-invisible-temporary +which is a function. The function is called with 2 arguments: one is +the overlay and the second is nil when it should show the overlay and +t when it should hide it. + +*** add-to-invisibility-spec, remove-from-invisibility-spec + +Modes that use overlays to hide portions of a buffer should set the +invisible property of the overlay to the mode's name (or another symbol) +and modify the `buffer-invisibility-spec' to include that symbol. +Use `add-to-invisibility-spec' and `remove-from-invisibility-spec' to +manipulate the `buffer-invisibility-spec'. +Here is an example of how to do this: + + ;; If we want to display an ellipsis: + (add-to-invisibility-spec '(my-symbol . t)) + ;; If you don't want ellipsis: + (add-to-invisibility-spec 'my-symbol) + + ... + (overlay-put (make-overlay beginning end) 'invisible 'my-symbol) + + ... + ;; When done with the overlays: + (remove-from-invisibility-spec '(my-symbol . t)) + ;; Or respectively: + (remove-from-invisibility-spec 'my-symbol) + +** Changes in syntax parsing. + +*** The syntax-directed buffer-scan functions (such as +`parse-partial-sexp', `forward-word' and similar functions) can now +obey syntax information specified by text properties, if the variable +`parse-sexp-lookup-properties' is non-nil. + +If the value of `parse-sexp-lookup-properties' is nil, the behavior +is as before: the syntax-table of the current buffer is always +used to determine the syntax of the character at the position. + +When `parse-sexp-lookup-properties' is non-nil, the syntax of a +character in the buffer is calculated thus: + + a) if the `syntax-table' text-property of that character + is a cons, this cons becomes the syntax-type; + + Valid values of `syntax-table' text-property are: nil, a valid + syntax-table, and a valid syntax-table element, i.e., + a cons cell of the form (SYNTAX-CODE . MATCHING-CHAR). + + b) if the character's `syntax-table' text-property + is a syntax table, this syntax table is used + (instead of the syntax-table of the current buffer) to + determine the syntax type of the character. + + c) otherwise the syntax-type is determined by the syntax-table + of the current buffer. + +*** The meaning of \s in regular expressions is also affected by the +value of `parse-sexp-lookup-properties'. The details are the same as +for the syntax-directed buffer-scan functions. + +*** There are two new syntax-codes, `!' and `|' (numeric values 14 +and 15). A character with a code `!' starts a comment which is ended +only by another character with the same code (unless quoted). A +character with a code `|' starts a string which is ended only by +another character with the same code (unless quoted). + +These codes are mainly meant for use as values of the `syntax-table' +text property. + +*** The function `parse-partial-sexp' has new semantics for the sixth +arg COMMENTSTOP. If it is `syntax-table', parse stops after the start +of a comment or a string, or after end of a comment or a string. + +*** The state-list which the return value from `parse-partial-sexp' +(and can also be used as an argument) now has an optional ninth +element: the character address of the start of last comment or string; +nil if none. The fourth and eighth elements have special values if the +string/comment is started by a "!" or "|" syntax-code. + +*** Since new features of `parse-partial-sexp' allow a complete +syntactic parsing, `font-lock' no longer supports +`font-lock-comment-start-regexp'. + +** Changes in face features + +*** The face functions are now unconditionally defined in Emacs, even +if it does not support displaying on a device that supports faces. + +*** The function face-documentation returns the documentation string +of a face (or nil if it doesn't have one). + +*** The function face-bold-p returns t if a face should be bold. +set-face-bold-p sets that flag. + +*** The function face-italic-p returns t if a face should be italic. +set-face-italic-p sets that flag. + +*** You can now specify foreground and background colors for text +by adding elements of the form (foreground-color . COLOR-NAME) +and (background-color . COLOR-NAME) to the list of faces in +the `face' property (either the character's text property or an +overlay property). + +This means that you no longer need to create named faces to use +arbitrary colors in a Lisp package. + +** Changes in file-handling functions + +*** File-access primitive functions no longer discard an extra redundant +directory name from the beginning of the file name. In other words, +they no longer do anything special with // or /~. That conversion +is now done only in substitute-in-file-name. + +This makes it possible for a Lisp program to open a file whose name +begins with ~. + +*** If copy-file is unable to set the date of the output file, +it now signals an error with the condition file-date-error. + +*** The inode number returned by file-attributes may be an integer (if +the number fits in a Lisp integer) or a list of integers. + +*** insert-file-contents can now read from a special file, +as long as the arguments VISIT and REPLACE are nil. + +*** The RAWFILE arg to find-file-noselect, if non-nil, now suppresses +character code conversion as well as other things. + +Meanwhile, this feature does work with remote file names +(formerly it did not). + +*** Lisp packages which create temporary files should use the TMPDIR +environment variable to decide which directory to put them in. + +*** interpreter-mode-alist elements now specify regexps +instead of constant strings. + +*** expand-file-name no longer treats `//' or `/~' specially. It used +to delete all the text of a file name up through the first slash of +any `//' or `/~' sequence. Now it passes them straight through. + +substitute-in-file-name continues to treat those sequences specially, +in the same way as before. + +*** The variable `format-alist' is more general now. +The FROM-FN and TO-FN in a format definition can now be strings +which specify shell commands to use as filters to perform conversion. + +*** The new function access-file tries to open a file, and signals an +error if that fails. If the open succeeds, access-file does nothing +else, and returns nil. + +*** The function insert-directory now signals an error if the specified +directory cannot be listed. + +** Changes in minibuffer input + +*** The functions read-buffer, read-variable, read-command, read-string +read-file-name, read-from-minibuffer and completing-read now take an +additional argument which specifies the default value. If this +argument is non-nil, it should be a string; that string is used in two +ways: + + It is returned if the user enters empty input. + It is available through the history command M-n. + +*** The functions read-string, read-from-minibuffer, +read-no-blanks-input and completing-read now take an additional +argument INHERIT-INPUT-METHOD. If this is non-nil, then the +minibuffer inherits the current input method and the setting of +enable-multibyte-characters from the previously current buffer. + +In an interactive spec, you can use M instead of s to read an +argument in this way. + +*** All minibuffer input functions discard text properties +from the text you enter in the minibuffer, unless the variable +minibuffer-allow-text-properties is non-nil. + +** Echo area features + +*** Clearing the echo area now runs the normal hook +echo-area-clear-hook. Note that the echo area can be used while the +minibuffer is active; in that case, the minibuffer is still active +after the echo area is cleared. + +*** The function current-message returns the message currently displayed +in the echo area, or nil if there is none. + +** Keyboard input features + +*** tty-erase-char is a new variable that reports which character was +set up as the terminal's erase character when time Emacs was started. + +*** num-nonmacro-input-events is the total number of input events +received so far from the terminal. It does not count those generated +by keyboard macros. + +** Frame-related changes + +*** make-frame runs the normal hook before-make-frame-hook just before +creating a frame, and just after creating a frame it runs the abnormal +hook after-make-frame-functions with the new frame as arg. + +*** The new hook window-configuration-change-hook is now run every time +the window configuration has changed. The frame whose configuration +has changed is the selected frame when the hook is run. + +*** Each frame now independently records the order for recently +selected buffers, in its buffer-list frame parameter, so that the +value of other-buffer is now based on the buffers recently displayed +in the selected frame. + +*** The value of the frame parameter vertical-scroll-bars +is now `left', `right' or nil. A non-nil value specifies +which side of the window to put the scroll bars on. + +** X Windows features + +*** You can examine X resources for other applications by binding +x-resource-class around a call to x-get-resource. The usual value of +x-resource-class is "Emacs", which is the correct value for Emacs. + +*** In menus, checkboxes and radio buttons now actually work. +The menu displays the current status of the box or button. + +*** The function x-list-fonts now takes an optional fourth argument +MAXIMUM which sets a limit on how many matching fonts to return. +A smaller value of MAXIMUM makes the function faster. + +If the only question is whether *any* font matches the pattern, +it is good to supply 1 for this argument. + +** Subprocess features + +*** A reminder: it is no longer necessary for subprocess filter +functions and sentinels to do save-match-data, because Emacs does this +automatically. + +*** The new function shell-command-to-string executes a shell command +and returns the output from the command as a string. + +*** The new function process-contact returns t for a child process, +and (HOSTNAME SERVICE) for a net connection. + +** An error in running pre-command-hook or post-command-hook +does clear the variable to nil. The documentation was wrong before. + +** In define-key-after, if AFTER is t, the new binding now always goes +at the end of the keymap. If the keymap is a menu, this means it +goes after the other menu items. + +** If you have a program that makes several changes in the same area +of the buffer, you can use the macro combine-after-change-calls +around that Lisp code to make it faster when after-change hooks +are in use. + +The macro arranges to call the after-change functions just once for a +series of several changes--if that seems safe. + +Don't alter the variables after-change-functions and +after-change-function within the body of a combine-after-change-calls +form. + +** If you define an abbrev (with define-abbrev) whose EXPANSION +is not a string, then the abbrev does not expand in the usual sense, +but its hook is still run. + +** Normally, the Lisp debugger is not used (even if you have enabled it) +for errors that are handled by condition-case. + +If you set debug-on-signal to a non-nil value, then the debugger is called +regardless of whether there is a handler for the condition. This is +useful for debugging problems that happen inside of a condition-case. + +This mode of operation seems to be unreliable in other ways. Errors that +are normal and ought to be handled, perhaps in timers or process +filters, will instead invoke the debugger. So don't say you weren't +warned. + +** The new variable ring-bell-function lets you specify your own +way for Emacs to "ring the bell". + +** If run-at-time's TIME argument is t, the action is repeated at +integral multiples of REPEAT from the epoch; this is useful for +functions like display-time. + +** You can use the function locate-library to find the precise file +name of a Lisp library. This isn't new, but wasn't documented before. + +** Commands for entering view mode have new optional arguments that +can be used from Lisp. Low-level entrance to and exit from view mode +is done by functions view-mode-enter and view-mode-exit. + +** batch-byte-compile-file now makes Emacs return a nonzero status code +if there is an error in compilation. + +** pop-to-buffer, switch-to-buffer-other-window and +switch-to-buffer-other-frame now accept an additional optional +argument NORECORD, much like switch-to-buffer. If it is non-nil, +they don't put the buffer at the front of the buffer list. + +** If your .emacs file leaves the *scratch* buffer non-empty, +Emacs does not display the startup message, so as to avoid changing +the *scratch* buffer. + +** The new function regexp-opt returns an efficient regexp to match a string. +The arguments are STRINGS and (optionally) PAREN. This function can be used +where regexp matching or searching is intensively used and speed is important, +e.g., in Font Lock mode. + +** The variable buffer-display-count is local to each buffer, +and is incremented each time the buffer is displayed in a window. +It starts at 0 when the buffer is created. + +** The new function compose-mail starts composing a mail message +using the user's chosen mail composition agent (specified with the +variable mail-user-agent). It has variants compose-mail-other-window +and compose-mail-other-frame. + +** The `user-full-name' function now takes an optional parameter which +can either be a number (the UID) or a string (the login name). The +full name of the specified user will be returned. + +** Lisp packages that load files of customizations, or any other sort +of user profile, should obey the variable init-file-user in deciding +where to find it. They should load the profile of the user name found +in that variable. If init-file-user is nil, meaning that the -q +option was used, then Lisp packages should not load the customization +files at all. + +** format-time-string now allows you to specify the field width +and type of padding. This works as in printf: you write the field +width as digits in the middle of a %-construct. If you start +the field width with 0, it means to pad with zeros. + +For example, %S normally specifies the number of seconds since the +minute; %03S means to pad this with zeros to 3 positions, %_3S to pad +with spaces to 3 positions. Plain %3S pads with zeros, because that +is how %S normally pads to two positions. + +** thing-at-point now supports a new kind of "thing": url. + +** imenu.el changes. + +You can now specify a function to be run when selecting an +item from menu created by imenu. + +An example of using this feature: if we define imenu items for the +#include directives in a C file, we can open the included file when we +select one of those items. + + +---------------------------------------------------------------------- +Copyright information: + +Copyright (C) 1999, 2000, 2006 + Free Software Foundation, Inc. + + Permission is granted to anyone to make or distribute verbatim copies + of this document as received, in any medium, provided that the + copyright notice and this permission notice are preserved, + thus giving the recipient permission to redistribute in turn. + + Permission is granted to distribute modified versions + of this document, or of portions of it, + under the above conditions, provided also that they + carry prominent notices stating who last changed them. + +Local variables: +mode: outline +paragraph-separate: "[ ]*$" +end: diff -r 86cedfd9ade6 -r 25fa0038a52d etc/NEWS.21 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/NEWS.21 Sun Jun 04 01:01:51 2006 +0000 @@ -0,0 +1,4900 @@ +GNU Emacs NEWS -- history of user-visible changes. 2006-05-31 +Copyright (C) 2000, 2001, 2002, 2003, 2006 + Free Software Foundation, Inc. +See the end for copying conditions. + +This file is about changes in emacs version 21. + + + +* Emacs 21.4 is a bug-fix release with no user-visible changes. + + + +* Installation changes in Emacs 21.3 + +** Support for GNU/Linux on little-endian MIPS and on IBM S390 has +been added. + + +* Changes in Emacs 21.3 + +** The obsolete C mode (c-mode.el) has been removed to avoid problems +with Custom. + +** UTF-16 coding systems are available, encoding the same characters +as mule-utf-8. + +** There is a new language environment for UTF-8 (set up automatically +in UTF-8 locales). + +** Translation tables are available between equivalent characters in +different Emacs charsets -- for instance `e with acute' coming from the +Latin-1 and Latin-2 charsets. User options `unify-8859-on-encoding-mode' +and `unify-8859-on-decoding-mode' respectively turn on translation +between ISO 8859 character sets (`unification') on encoding +(e.g. writing a file) and decoding (e.g. reading a file). Note that +`unify-8859-on-encoding-mode' is useful and safe, but +`unify-8859-on-decoding-mode' can cause text to change when you read +it and write it out again without edits, so it is not generally advisable. +By default `unify-8859-on-encoding-mode' is turned on. + +** In Emacs running on the X window system, the default value of +`selection-coding-system' is now `compound-text-with-extensions'. + +If you want the old behavior, set selection-coding-system to +compound-text, which may be significantly more efficient. Using +compound-text-with-extensions seems to be necessary only for decoding +text from applications under XFree86 4.2, whose behavior is actually +contrary to the compound text specification. + + + +* Installation changes in Emacs 21.2 + +** Support for BSD/OS 5.0 has been added. + +** Support for AIX 5.1 was added. + + +* Changes in Emacs 21.2 + +** Emacs now supports compound-text extended segments in X selections. + +X applications can use `extended segments' to encode characters in +compound text that belong to character sets which are not part of the +list of approved standard encodings for X, e.g. Big5. To paste +selections with such characters into Emacs, use the new coding system +compound-text-with-extensions as the value of selection-coding-system. + +** The default values of `tooltip-delay' and `tooltip-hide-delay' +were changed. + +** On terminals whose erase-char is ^H (Backspace), Emacs +now uses normal-erase-is-backspace-mode. + +** When the *scratch* buffer is recreated, its mode is set from +initial-major-mode, which normally is lisp-interaction-mode, +instead of using default-major-mode. + +** The new option `Info-scroll-prefer-subnodes' causes Info to behave +like the stand-alone Info reader (from the GNU Texinfo package) as far +as motion between nodes and their subnodes is concerned. If it is t +(the default), Emacs behaves as before when you type SPC in a menu: it +visits the subnode pointed to by the first menu entry. If this option +is nil, SPC scrolls to the end of the current node, and only then goes +to the first menu item, like the stand-alone reader does. + +This change was already in Emacs 21.1, but wasn't advertised in the +NEWS. + + +* Lisp Changes in Emacs 21.2 + +** The meanings of scroll-up-aggressively and scroll-down-aggressively +have been interchanged, so that the former now controls scrolling up, +and the latter now controls scrolling down. + +** The variable `compilation-parse-errors-filename-function' can +be used to transform filenames found in compilation output. + + + +* Installation Changes in Emacs 21.1 + +See the INSTALL file for information on installing extra libraries and +fonts to take advantage of the new graphical features and extra +charsets in this release. + +** Support for GNU/Linux on IA64 machines has been added. + +** Support for LynxOS has been added. + +** There are new configure options associated with the support for +images and toolkit scrollbars. Use the --help option in `configure' +to list them. + +** You can build a 64-bit Emacs for SPARC/Solaris systems which +support 64-bit executables and also on Irix 6.5. This increases the +maximum buffer size. See etc/MACHINES for instructions. Changes to +build on other 64-bit systems should be straightforward modulo any +necessary changes to unexec. + +** There is a new configure option `--disable-largefile' to omit +Unix-98-style support for large files if that is available. + +** There is a new configure option `--without-xim' that instructs +Emacs to not use X Input Methods (XIM), if these are available. + +** `movemail' defaults to supporting POP. You can turn this off using +the --without-pop configure option, should that be necessary. + +** This version can be built for the Macintosh, but does not implement +all of the new display features described below. The port currently +lacks unexec, asynchronous processes, and networking support. See the +"Emacs and the Mac OS" appendix in the Emacs manual, for the +description of aspects specific to the Mac. + +** Note that the MS-Windows port does not yet implement various of the +new display features described below. + + +* Changes in Emacs 21.1 + +** Emacs has a new redisplay engine. + +The new redisplay handles characters of variable width and height. +Italic text can be used without redisplay problems. Fonts containing +oversized characters, i.e. characters larger than the logical height +of a font can be used. Images of various formats can be displayed in +the text. + +** Emacs has a new face implementation. + +The new faces no longer fundamentally use X font names to specify the +font. Instead, each face has several independent attributes--family, +height, width, weight and slant--that it may or may not specify. +These attributes can be merged from various faces, and then together +specify a font. + +Faces are supported on terminals that can display color or fonts. +These terminal capabilities are auto-detected. Details can be found +under Lisp changes, below. + +** Emacs can display faces on TTY frames. + +Emacs automatically detects terminals that are able to display colors. +Faces with a weight greater than normal are displayed extra-bright, if +the terminal supports it. Faces with a weight less than normal and +italic faces are displayed dimmed, if the terminal supports it. +Underlined faces are displayed underlined if possible. Other face +attributes such as `overline', `strike-through', and `box' are ignored +on terminals. + +The command-line options `-fg COLOR', `-bg COLOR', and `-rv' are now +supported on character terminals. + +Emacs automatically remaps all X-style color specifications to one of +the colors supported by the terminal. This means you could have the +same color customizations that work both on a windowed display and on +a TTY or when Emacs is invoked with the -nw option. + +** New default font is Courier 12pt under X. + +** Sound support + +Emacs supports playing sound files on GNU/Linux and FreeBSD (Voxware +driver and native BSD driver, a.k.a. Luigi's driver). Currently +supported file formats are RIFF-WAVE (*.wav) and Sun Audio (*.au). +You must configure Emacs with the option `--with-sound=yes' to enable +sound support. + +** Emacs now resizes mini-windows if appropriate. + +If a message is longer than one line, or minibuffer contents are +longer than one line, Emacs can resize the minibuffer window unless it +is on a frame of its own. You can control resizing and the maximum +minibuffer window size by setting the following variables: + +- User option: max-mini-window-height + +Maximum height for resizing mini-windows. If a float, it specifies a +fraction of the mini-window frame's height. If an integer, it +specifies a number of lines. + +Default is 0.25. + +- User option: resize-mini-windows + +How to resize mini-windows. If nil, don't resize. If t, always +resize to fit the size of the text. If `grow-only', let mini-windows +grow only, until they become empty, at which point they are shrunk +again. + +Default is `grow-only'. + +** LessTif support. + +Emacs now runs with the LessTif toolkit (see +). You will need version 0.92.26, or later. + +** LessTif/Motif file selection dialog. + +When Emacs is configured to use LessTif or Motif, reading a file name +from a menu will pop up a file selection dialog if `use-dialog-box' is +non-nil. + +** File selection dialog on MS-Windows is supported. + +When a file is visited by clicking File->Open, the MS-Windows version +now pops up a standard file selection dialog where you can select a +file to visit. File->Save As also pops up that dialog. + +** Toolkit scroll bars. + +Emacs now uses toolkit scroll bars if available. When configured for +LessTif/Motif, it will use that toolkit's scroll bar. Otherwise, when +configured for Lucid and Athena widgets, it will use the Xaw3d scroll +bar if Xaw3d is available. You can turn off the use of toolkit scroll +bars by specifying `--with-toolkit-scroll-bars=no' when configuring +Emacs. + +When you encounter problems with the Xaw3d scroll bar, watch out how +Xaw3d is compiled on your system. If the Makefile generated from +Xaw3d's Imakefile contains a `-DNARROWPROTO' compiler option, and your +Emacs system configuration file `s/your-system.h' does not contain a +define for NARROWPROTO, you might consider adding it. Take +`s/freebsd.h' as an example. + +Alternatively, if you don't have access to the Xaw3d source code, take +a look at your system's imake configuration file, for example in the +directory `/usr/X11R6/lib/X11/config' (paths are different on +different systems). You will find files `*.cf' there. If your +system's cf-file contains a line like `#define NeedWidePrototypes NO', +add a `#define NARROWPROTO' to your Emacs system configuration file. + +The reason for this is that one Xaw3d function uses `double' or +`float' function parameters depending on the setting of NARROWPROTO. +This is not a problem when Imakefiles are used because each system's +imake configuration file contains the necessary information. Since +Emacs doesn't use imake, this has do be done manually. + +** Tool bar support. + +Emacs supports a tool bar at the top of a frame under X. For details +of how to define a tool bar, see the page describing Lisp-level +changes. Tool-bar global minor mode controls whether or not it is +displayed and is on by default. The appearance of the bar is improved +if Emacs has been built with XPM image support. Otherwise monochrome +icons will be used. + +To make the tool bar more useful, we need contributions of extra icons +for specific modes (with copyright assignments). + +** Tooltips. + +Tooltips are small X windows displaying a help string at the current +mouse position. The Lisp package `tooltip' implements them. You can +turn them off via the user option `tooltip-mode'. + +Tooltips also provides support for GUD debugging. If activated, +variable values can be displayed in tooltips by pointing at them with +the mouse in source buffers. You can customize various aspects of the +tooltip display in the group `tooltip'. + +** Automatic Hscrolling + +Horizontal scrolling now happens automatically if +`automatic-hscrolling' is set (the default). This setting can be +customized. + +If a window is scrolled horizontally with set-window-hscroll, or +scroll-left/scroll-right (C-x <, C-x >), this serves as a lower bound +for automatic horizontal scrolling. Automatic scrolling will scroll +the text more to the left if necessary, but won't scroll the text more +to the right than the column set with set-window-hscroll etc. + +** When using a windowing terminal, each Emacs window now has a cursor +of its own. By default, when a window is selected, the cursor is +solid; otherwise, it is hollow. The user-option +`cursor-in-non-selected-windows' controls how to display the +cursor in non-selected windows. If nil, no cursor is shown, if +non-nil a hollow box cursor is shown. + +** Fringes to the left and right of windows are used to display +truncation marks, continuation marks, overlay arrows and alike. The +foreground, background, and stipple of these areas can be changed by +customizing face `fringe'. + +** The mode line under X is now drawn with shadows by default. +You can change its appearance by modifying the face `mode-line'. +In particular, setting the `:box' attribute to nil turns off the 3D +appearance of the mode line. (The 3D appearance makes the mode line +occupy more space, and thus might cause the first or the last line of +the window to be partially obscured.) + +The variable `mode-line-inverse-video', which was used in older +versions of emacs to make the mode-line stand out, is now deprecated. +However, setting it to nil will cause the `mode-line' face to be +ignored, and mode-lines to be drawn using the default text face. + +** Mouse-sensitive mode line. + +Different parts of the mode line have been made mouse-sensitive on all +systems which support the mouse. Moving the mouse to a +mouse-sensitive part in the mode line changes the appearance of the +mouse pointer to an arrow, and help about available mouse actions is +displayed either in the echo area, or in the tooltip window if you +have enabled one. + +Currently, the following actions have been defined: + +- Mouse-1 on the buffer name in the mode line goes to the next buffer. + +- Mouse-3 on the buffer-name goes to the previous buffer. + +- Mouse-2 on the read-only or modified status in the mode line (`%' or +`*') toggles the status. + +- Mouse-3 on the major mode name displays a major mode menu. + +- Mouse-3 on the mode name displays a minor-mode menu. + +** Hourglass pointer + +Emacs can optionally display an hourglass pointer under X. You can +turn the display on or off by customizing group `cursor'. + +** Blinking cursor + +M-x blink-cursor-mode toggles a blinking cursor under X and on +terminals having terminal capabilities `vi', `vs', and `ve'. Blinking +and related parameters like frequency and delay can be customized in +the group `cursor'. + +** New font-lock support mode `jit-lock-mode'. + +This support mode is roughly equivalent to `lazy-lock' but is +generally faster. It supports stealth and deferred fontification. +See the documentation of the function `jit-lock-mode' for more +details. + +Font-lock uses jit-lock-mode as default support mode, so you don't +have to do anything to activate it. + +** The default binding of the Delete key has changed. + +The new user-option `normal-erase-is-backspace' can be set to +determine the effect of the Delete and Backspace function keys. + +On window systems, the default value of this option is chosen +according to the keyboard used. If the keyboard has both a Backspace +key and a Delete key, and both are mapped to their usual meanings, the +option's default value is set to t, so that Backspace can be used to +delete backward, and Delete can be used to delete forward. On +keyboards which either have only one key (usually labeled DEL), or two +keys DEL and BS which produce the same effect, the option's value is +set to nil, and these keys delete backward. + +If not running under a window system, setting this option accomplishes +a similar effect by mapping C-h, which is usually generated by the +Backspace key, to DEL, and by mapping DEL to C-d via +`keyboard-translate'. The former functionality of C-h is available on +the F1 key. You should probably not use this setting on a text-only +terminal if you don't have both Backspace, Delete and F1 keys. + +Programmatically, you can call function normal-erase-is-backspace-mode +to toggle the behavior of the Delete and Backspace keys. + +** The default for user-option `next-line-add-newlines' has been +changed to nil, i.e. C-n will no longer add newlines at the end of a +buffer by default. + +** The and keys now move to the beginning or end of the +current line, respectively. C- and C- move to the +beginning and end of the buffer. + +** Emacs now checks for recursive loads of Lisp files. If the +recursion depth exceeds `recursive-load-depth-limit', an error is +signaled. + +** When an error is signaled during the loading of the user's init +file, Emacs now pops up the *Messages* buffer. + +** Emacs now refuses to load compiled Lisp files which weren't +compiled with Emacs. Set `load-dangerous-libraries' to t to change +this behavior. + +The reason for this change is an incompatible change in XEmacs's byte +compiler. Files compiled with XEmacs can contain byte codes that let +Emacs dump core. + +** Toggle buttons and radio buttons in menus. + +When compiled with LessTif (or Motif) support, Emacs uses toolkit +widgets for radio and toggle buttons in menus. When configured for +Lucid, Emacs draws radio buttons and toggle buttons similar to Motif. + +** The menu bar configuration has changed. The new configuration is +more CUA-compliant. The most significant change is that Options is +now a separate menu-bar item, with Mule and Customize as its submenus. + +** Item Save Options on the Options menu allows saving options set +using that menu. + +** Highlighting of trailing whitespace. + +When `show-trailing-whitespace' is non-nil, Emacs displays trailing +whitespace in the face `trailing-whitespace'. Trailing whitespace is +defined as spaces or tabs at the end of a line. To avoid busy +highlighting when entering new text, trailing whitespace is not +displayed if point is at the end of the line containing the +whitespace. + +** C-x 5 1 runs the new command delete-other-frames which deletes +all frames except the selected one. + +** The new user-option `confirm-kill-emacs' can be customized to +let Emacs ask for confirmation before exiting. + +** The header line in an Info buffer is now displayed as an emacs +header-line (which is like a mode-line, but at the top of the window), +so that it remains visible even when the buffer has been scrolled. +This behavior may be disabled by customizing the option +`Info-use-header-line'. + +** Polish, Czech, German, and French translations of Emacs' reference card +have been added. They are named `pl-refcard.tex', `cs-refcard.tex', +`de-refcard.tex' and `fr-refcard.tex'. Postscript files are included. + +** An `Emacs Survival Guide', etc/survival.tex, is available. + +** A reference card for Dired has been added. Its name is +`dired-ref.tex'. A French translation is available in +`fr-drdref.tex'. + +** C-down-mouse-3 is bound differently. Now if the menu bar is not +displayed it pops up a menu containing the items which would be on the +menu bar. If the menu bar is displayed, it pops up the major mode +menu or the Edit menu if there is no major mode menu. + +** Variable `load-path' is no longer customizable through Customize. + +You can no longer use `M-x customize-variable' to customize `load-path' +because it now contains a version-dependent component. You can still +use `add-to-list' and `setq' to customize this variable in your +`~/.emacs' init file or to modify it from any Lisp program in general. + +** C-u C-x = provides detailed information about the character at +point in a pop-up window. + +** Emacs can now support 'wheeled' mice (such as the MS IntelliMouse) +under XFree86. To enable this, use the `mouse-wheel-mode' command, or +customize the variable `mouse-wheel-mode'. + +The variables `mouse-wheel-follow-mouse' and `mouse-wheel-scroll-amount' +determine where and by how much buffers are scrolled. + +** Emacs' auto-save list files are now by default stored in a +sub-directory `.emacs.d/auto-save-list/' of the user's home directory. +(On MS-DOS, this subdirectory's name is `_emacs.d/auto-save.list/'.) +You can customize `auto-save-list-file-prefix' to change this location. + +** The function `getenv' is now callable interactively. + +** The new user-option `even-window-heights' can be set to nil +to prevent `display-buffer' from evening out window heights. + +** The new command M-x delete-trailing-whitespace RET will delete the +trailing whitespace within the current restriction. You can also add +this function to `write-file-hooks' or `local-write-file-hooks'. + +** When visiting a file with M-x find-file-literally, no newlines will +be added to the end of the buffer even if `require-final-newline' is +non-nil. + +** The new user-option `find-file-suppress-same-file-warnings' can be +set to suppress warnings ``X and Y are the same file'' when visiting a +file that is already visited under a different name. + +** The new user-option `electric-help-shrink-window' can be set to +nil to prevent adjusting the help window size to the buffer size. + +** New command M-x describe-character-set reads a character set name +and displays information about that. + +** The new variable `auto-mode-interpreter-regexp' contains a regular +expression matching interpreters, for file mode determination. + +This regular expression is matched against the first line of a file to +determine the file's mode in `set-auto-mode' when Emacs can't deduce a +mode from the file's name. If it matches, the file is assumed to be +interpreted by the interpreter matched by the second group of the +regular expression. The mode is then determined as the mode +associated with that interpreter in `interpreter-mode-alist'. + +** New function executable-make-buffer-file-executable-if-script-p is +suitable as an after-save-hook as an alternative to `executable-chmod'. + +** The most preferred coding-system is now used to save a buffer if +buffer-file-coding-system is `undecided' and it is safe for the buffer +contents. (The most preferred is set by set-language-environment or +by M-x prefer-coding-system.) Thus if you visit an ASCII file and +insert a non-ASCII character from your current language environment, +the file will be saved silently with the appropriate coding. +Previously you would be prompted for a safe coding system. + +** The many obsolete language `setup-...-environment' commands have +been removed -- use `set-language-environment'. + +** The new Custom option `keyboard-coding-system' specifies a coding +system for keyboard input. + +** New variable `inhibit-iso-escape-detection' determines if Emacs' +coding system detection algorithm should pay attention to ISO2022's +escape sequences. If this variable is non-nil, the algorithm ignores +such escape sequences. The default value is nil, and it is +recommended not to change it except for the special case that you +always want to read any escape code verbatim. If you just want to +read a specific file without decoding escape codes, use C-x RET c +(`universal-coding-system-argument'). For instance, C-x RET c latin-1 +RET C-x C-f filename RET. + +** Variable `default-korean-keyboard' is initialized properly from the +environment variable `HANGUL_KEYBOARD_TYPE'. + +** New command M-x list-charset-chars reads a character set name and +displays all characters in that character set. + +** M-x set-terminal-coding-system (C-x RET t) now allows CCL-based +coding systems such as cpXXX and cyrillic-koi8. + +** Emacs now attempts to determine the initial language environment +and preferred and locale coding systems systematically from the +LC_ALL, LC_CTYPE, and LANG environment variables during startup. + +** New language environments `Polish', `Latin-8' and `Latin-9'. +Latin-8 and Latin-9 correspond respectively to the ISO character sets +8859-14 (Celtic) and 8859-15 (updated Latin-1, with the Euro sign). +GNU Intlfonts doesn't support these yet but recent X releases have +8859-15. See etc/INSTALL for information on obtaining extra fonts. +There are new Leim input methods for Latin-8 and Latin-9 prefix (only) +and Polish `slash'. + +** New language environments `Dutch' and `Spanish'. +These new environments mainly select appropriate translations +of the tutorial. + +** In Ethiopic language environment, special key bindings for +function keys are changed as follows. This is to conform to "Emacs +Lisp Coding Convention". + + new command old-binding + --- ------- ----------- + f3 ethio-fidel-to-sera-buffer f5 + S-f3 ethio-fidel-to-sera-region f5 + C-f3 ethio-fidel-to-sera-mail-or-marker f5 + + f4 ethio-sera-to-fidel-buffer unchanged + S-f4 ethio-sera-to-fidel-region unchanged + C-f4 ethio-sera-to-fidel-mail-or-marker unchanged + + S-f5 ethio-toggle-punctuation f3 + S-f6 ethio-modify-vowel f6 + S-f7 ethio-replace-space f7 + S-f8 ethio-input-special-character f8 + S-f9 ethio-replace-space unchanged + C-f9 ethio-toggle-space f2 + +** There are new Leim input methods. +New input methods "turkish-postfix", "turkish-alt-postfix", +"greek-mizuochi", "TeX", and "greek-babel" are now part of the Leim +package. + +** The rule of input method "slovak" is slightly changed. Now the +rules for translating "q" and "Q" to "`" (backquote) are deleted, thus +typing them inserts "q" and "Q" respectively. Rules for translating +"=q", "+q", "=Q", and "+Q" to "`" are also deleted. Now, to input +"`", you must type "=q". + +** When your terminal can't display characters from some of the ISO +8859 character sets but can display Latin-1, you can display +more-or-less mnemonic sequences of ASCII/Latin-1 characters instead of +empty boxes (under a window system) or question marks (not under a +window system). Customize the option `latin1-display' to turn this +on. + +** M-; now calls comment-dwim which tries to do something clever based +on the context. M-x kill-comment is now an alias to comment-kill, +defined in newcomment.el. You can choose different styles of region +commenting with the variable `comment-style'. + +** New user options `display-time-mail-face' and +`display-time-use-mail-icon' control the appearance of mode-line mail +indicator used by the display-time package. On a suitable display the +indicator can be an icon and is mouse-sensitive. + +** On window-systems, additional space can be put between text lines +on the display using several methods + +- By setting frame parameter `line-spacing' to PIXELS. PIXELS must be +a positive integer, and specifies that PIXELS number of pixels should +be put below text lines on the affected frame or frames. + +- By setting X resource `lineSpacing', class `LineSpacing'. This is +equivalent to specifying the frame parameter. + +- By specifying `--line-spacing=N' or `-lsp N' on the command line. + +- By setting buffer-local variable `line-spacing'. The meaning is +the same, but applies to the a particular buffer only. + +** The new command `clone-indirect-buffer' can be used to create +an indirect buffer that is a twin copy of the current buffer. The +command `clone-indirect-buffer-other-window', bound to C-x 4 c, +does the same but displays the indirect buffer in another window. + +** New user options `backup-directory-alist' and +`make-backup-file-name-function' control the placement of backups, +typically in a single directory or in an invisible sub-directory. + +** New commands iso-iso2sgml and iso-sgml2iso convert between Latin-1 +characters and the corresponding SGML (HTML) entities. + +** New X resources recognized + +*** The X resource `synchronous', class `Synchronous', specifies +whether Emacs should run in synchronous mode. Synchronous mode +is useful for debugging X problems. + +Example: + + emacs.synchronous: true + +*** The X resource `visualClass, class `VisualClass', specifies the +visual Emacs should use. The resource's value should be a string of +the form `CLASS-DEPTH', where CLASS is the name of the visual class, +and DEPTH is the requested color depth as a decimal number. Valid +visual class names are + + TrueColor + PseudoColor + DirectColor + StaticColor + GrayScale + StaticGray + +Visual class names specified as X resource are case-insensitive, i.e. +`pseudocolor', `Pseudocolor' and `PseudoColor' all have the same +meaning. + +The program `xdpyinfo' can be used to list the visual classes +supported on your display, and which depths they have. If +`visualClass' is not specified, Emacs uses the display's default +visual. + +Example: + + emacs.visualClass: TrueColor-8 + +*** The X resource `privateColormap', class `PrivateColormap', +specifies that Emacs should use a private colormap if it is using the +default visual, and that visual is of class PseudoColor. Recognized +resource values are `true' or `on'. + +Example: + + emacs.privateColormap: true + +** Faces and frame parameters. + +There are four new faces `scroll-bar', `border', `cursor' and `mouse'. +Setting the frame parameters `scroll-bar-foreground' and +`scroll-bar-background' sets foreground and background color of face +`scroll-bar' and vice versa. Setting frame parameter `border-color' +sets the background color of face `border' and vice versa. Likewise +for frame parameters `cursor-color' and face `cursor', and frame +parameter `mouse-color' and face `mouse'. + +Changing frame parameter `font' sets font-related attributes of the +`default' face and vice versa. Setting frame parameters +`foreground-color' or `background-color' sets the colors of the +`default' face and vice versa. + +** New face `menu'. + +The face `menu' can be used to change colors and font of Emacs' menus. + +** New frame parameter `screen-gamma' for gamma correction. + +The new frame parameter `screen-gamma' specifies gamma-correction for +colors. Its value may be nil, the default, in which case no gamma +correction occurs, or a number > 0, usually a float, that specifies +the screen gamma of a frame's display. + +PC monitors usually have a screen gamma of 2.2. smaller values result +in darker colors. You might want to try a screen gamma of 1.5 for LCD +color displays. The viewing gamma Emacs uses is 0.4545. (1/2.2). + +The X resource name of this parameter is `screenGamma', class +`ScreenGamma'. + +** Tabs and variable-width text. + +Tabs are now displayed with stretch properties; the width of a tab is +defined as a multiple of the normal character width of a frame, and is +independent of the fonts used in the text where the tab appears. +Thus, tabs can be used to line up text in different fonts. + +** Enhancements of the Lucid menu bar + +*** The Lucid menu bar now supports the resource "margin". + + emacs.pane.menubar.margin: 5 + +The default margin is 4 which makes the menu bar appear like the +LessTif/Motif one. + +*** Arrows that indicate sub-menus are now drawn with shadows, as in +LessTif and Motif. + +** A block cursor can be drawn as wide as the glyph under it under X. + +As an example: if a block cursor is over a tab character, it will be +drawn as wide as that tab on the display. To do this, set +`x-stretch-cursor' to a non-nil value. + +** Empty display lines at the end of a buffer may be marked with a +bitmap (this is similar to the tilde displayed by vi and Less). + +This behavior is activated by setting the buffer-local variable +`indicate-empty-lines' to a non-nil value. The default value of this +variable is found in `default-indicate-empty-lines'. + +** There is a new "aggressive" scrolling method. + +When scrolling up because point is above the window start, if the +value of the buffer-local variable `scroll-up-aggressively' is a +number, Emacs chooses a new window start so that point ends up that +fraction of the window's height from the top of the window. + +When scrolling down because point is below the window end, if the +value of the buffer-local variable `scroll-down-aggressively' is a +number, Emacs chooses a new window start so that point ends up that +fraction of the window's height from the bottom of the window. + +** You can now easily create new *Info* buffers using either +M-x clone-buffer, C-u m RET or C-u g RET. +M-x clone-buffer can also be used on *Help* and several other special +buffers. + +** The command `Info-search' now uses a search history. + +** Listing buffers with M-x list-buffers (C-x C-b) now shows +abbreviated file names. Abbreviations can be customized by changing +`directory-abbrev-alist'. + +** A new variable, backup-by-copying-when-privileged-mismatch, gives +the highest file uid for which backup-by-copying-when-mismatch will be +forced on. The assumption is that uids less than or equal to this +value are special uids (root, bin, daemon, etc.--not real system +users) and that files owned by these users should not change ownership, +even if your system policy allows users other than root to edit them. + +The default is 200; set the variable to nil to disable the feature. + +** The rectangle commands now avoid inserting undesirable spaces, +notably at the end of lines. + +All these functions have been rewritten to avoid inserting unwanted +spaces, and an optional prefix now allows them to behave the old way. + +** The function `replace-rectangle' is an alias for `string-rectangle'. + +** The new command M-x string-insert-rectangle is like `string-rectangle', +but inserts text instead of replacing it. + +** The new command M-x query-replace-regexp-eval acts like +query-replace-regexp, but takes a Lisp expression which is evaluated +after each match to get the replacement text. + +** M-x query-replace recognizes a new command `e' (or `E') that lets +you edit the replacement string. + +** The new command mail-abbrev-complete-alias, bound to `M-TAB' +(if you load the library `mailabbrev'), lets you complete mail aliases +in the text, analogous to lisp-complete-symbol. + +** The variable `echo-keystrokes' may now have a floating point value. + +** If your init file is compiled (.emacs.elc), `user-init-file' is set +to the source name (.emacs.el), if that exists, after loading it. + +** The help string specified for a menu-item whose definition contains +the property `:help HELP' is now displayed under X, on MS-Windows, and +MS-DOS, either in the echo area or with tooltips. Many standard menus +displayed by Emacs now have help strings. + +-- +** New user option `read-mail-command' specifies a command to use to +read mail from the menu etc. + +** The environment variable `EMACSLOCKDIR' is no longer used on MS-Windows. +This environment variable was used when creating lock files. Emacs on +MS-Windows does not use this variable anymore. This change was made +before Emacs 21.1, but wasn't documented until now. + +** Highlighting of mouse-sensitive regions is now supported in the +MS-DOS version of Emacs. + +** The new command `msdos-set-mouse-buttons' forces the MS-DOS version +of Emacs to behave as if the mouse had a specified number of buttons. +This comes handy with mice that don't report their number of buttons +correctly. One example is the wheeled mice, which report 3 buttons, +but clicks on the middle button are not passed to the MS-DOS version +of Emacs. + +** Customize changes + +*** Customize now supports comments about customized items. Use the +`State' menu to add comments, or give a prefix argument to +M-x customize-set-variable or M-x customize-set-value. Note that +customization comments will cause the customizations to fail in +earlier versions of Emacs. + +*** The new option `custom-buffer-done-function' says whether to kill +Custom buffers when you've done with them or just bury them (the +default). + +*** If Emacs was invoked with the `-q' or `--no-init-file' options, it +does not allow you to save customizations in your `~/.emacs' init +file. This is because saving customizations from such a session would +wipe out all the other customizationss you might have on your init +file. + +** If Emacs was invoked with the `-q' or `--no-init-file' options, it +does not save disabled and enabled commands for future sessions, to +avoid overwriting existing customizations of this kind that are +already in your init file. + +** New features in evaluation commands + +*** The commands to evaluate Lisp expressions, such as C-M-x in Lisp +modes, C-j in Lisp Interaction mode, and M-:, now bind the variables +print-level, print-length, and debug-on-error based on the new +customizable variables eval-expression-print-level, +eval-expression-print-length, and eval-expression-debug-on-error. + +The default values for the first two of these variables are 12 and 4 +respectively, which means that `eval-expression' now prints at most +the first 12 members of a list and at most 4 nesting levels deep (if +the list is longer or deeper than that, an ellipsis `...' is +printed). + + or on the printed text toggles between an abbreviated +printed representation and an unabbreviated one. + +The default value of eval-expression-debug-on-error is t, so any error +during evaluation produces a backtrace. + +*** The function `eval-defun' (C-M-x) now loads Edebug and instruments +code when called with a prefix argument. + +** CC mode changes. + +Note: This release contains changes that might not be compatible with +current user setups (although it's believed that these +incompatibilities will only show in very uncommon circumstances). +However, since the impact is uncertain, these changes may be rolled +back depending on user feedback. Therefore there's no forward +compatibility guarantee wrt the new features introduced in this +release. + +*** The hardcoded switch to "java" style in Java mode is gone. +CC Mode used to automatically set the style to "java" when Java mode +is entered. This has now been removed since it caused too much +confusion. + +However, to keep backward compatibility to a certain extent, the +default value for c-default-style now specifies the "java" style for +java-mode, but "gnu" for all other modes (as before). So you won't +notice the change if you haven't touched that variable. + +*** New cleanups, space-before-funcall and compact-empty-funcall. +Two new cleanups have been added to c-cleanup-list: + +space-before-funcall causes a space to be inserted before the opening +parenthesis of a function call, which gives the style "foo (bar)". + +compact-empty-funcall causes any space before a function call opening +parenthesis to be removed if there are no arguments to the function. +It's typically useful together with space-before-funcall to get the +style "foo (bar)" and "foo()". + +*** Some keywords now automatically trigger reindentation. +Keywords like "else", "while", "catch" and "finally" have been made +"electric" to make them reindent automatically when they continue an +earlier statement. An example: + +for (i = 0; i < 17; i++) + if (a[i]) + res += a[i]->offset; +else + +Here, the "else" should be indented like the preceding "if", since it +continues that statement. CC Mode will automatically reindent it after +the "else" has been typed in full, since it's not until then it's +possible to decide whether it's a new statement or a continuation of +the preceding "if". + +CC Mode uses Abbrev mode to achieve this, which is therefore turned on +by default. + +*** M-a and M-e now moves by sentence in multiline strings. +Previously these two keys only moved by sentence in comments, which +meant that sentence movement didn't work in strings containing +documentation or other natural language text. + +The reason it's only activated in multiline strings (i.e. strings that +contain a newline, even when escaped by a '\') is to avoid stopping in +the short strings that often reside inside statements. Multiline +strings almost always contain text in a natural language, as opposed +to other strings that typically contain format specifications, +commands, etc. Also, it's not that bothersome that M-a and M-e misses +sentences in single line strings, since they're short anyway. + +*** Support for autodoc comments in Pike mode. +Autodoc comments for Pike are used to extract documentation from the +source, like Javadoc in Java. Pike mode now recognize this markup in +comment prefixes and paragraph starts. + +*** The comment prefix regexps on c-comment-prefix may be mode specific. +When c-comment-prefix is an association list, it specifies the comment +line prefix on a per-mode basis, like c-default-style does. This +change came about to support the special autodoc comment prefix in +Pike mode only. + +*** Better handling of syntactic errors. +The recovery after unbalanced parens earlier in the buffer has been +improved; CC Mode now reports them by dinging and giving a message +stating the offending line, but still recovers and indent the +following lines in a sane way (most of the time). An "else" with no +matching "if" is handled similarly. If an error is discovered while +indenting a region, the whole region is still indented and the error +is reported afterwards. + +*** Lineup functions may now return absolute columns. +A lineup function can give an absolute column to indent the line to by +returning a vector with the desired column as the first element. + +*** More robust and warning-free byte compilation. +Although this is strictly not a user visible change (well, depending +on the view of a user), it's still worth mentioning that CC Mode now +can be compiled in the standard ways without causing trouble. Some +code have also been moved between the subpackages to enhance the +modularity somewhat. Thanks to Martin Buchholz for doing the +groundwork. + +*** c-style-variables-are-local-p now defaults to t. +This is an incompatible change that has been made to make the behavior +of the style system wrt global variable settings less confusing for +non-advanced users. If you know what this variable does you might +want to set it to nil in your .emacs, otherwise you probably don't +have to bother. + +Defaulting c-style-variables-are-local-p to t avoids the confusing +situation that occurs when a user sets some style variables globally +and edits both a Java and a non-Java file in the same Emacs session. +If the style variables aren't buffer local in this case, loading of +the second file will cause the default style (either "gnu" or "java" +by default) to override the global settings made by the user. + +*** New initialization procedure for the style system. +When the initial style for a buffer is determined by CC Mode (from the +variable c-default-style), the global values of style variables now +take precedence over the values specified by the chosen style. This +is different than the old behavior: previously, the style-specific +settings would override the global settings. This change makes it +possible to do simple configuration in the intuitive way with +Customize or with setq lines in one's .emacs file. + +By default, the global value of every style variable is the new +special symbol set-from-style, which causes the value to be taken from +the style system. This means that in effect, only an explicit setting +of a style variable will cause the "overriding" behavior described +above. + +Also note that global settings override style-specific settings *only* +when the initial style of a buffer is chosen by a CC Mode major mode +function. When a style is chosen in other ways --- for example, by a +call like (c-set-style "gnu") in a hook, or via M-x c-set-style --- +then the style-specific values take precedence over any global style +values. In Lisp terms, global values override style-specific values +only when the new second argument to c-set-style is non-nil; see the +function documentation for more info. + +The purpose of these changes is to make it easier for users, +especially novice users, to do simple customizations with Customize or +with setq in their .emacs files. On the other hand, the new system is +intended to be compatible with advanced users' customizations as well, +such as those that choose styles in hooks or whatnot. This new system +is believed to be almost entirely compatible with current +configurations, in spite of the changed precedence between style and +global variable settings when a buffer's default style is set. + +(Thanks to Eric Eide for clarifying this explanation a bit.) + +**** c-offsets-alist is now a customizable variable. +This became possible as a result of the new initialization behavior. + +This variable is treated slightly differently from the other style +variables; instead of using the symbol set-from-style, it will be +completed with the syntactic symbols it doesn't already contain when +the style is first initialized. This means it now defaults to the +empty list to make all syntactic elements get their values from the +style system. + +**** Compatibility variable to restore the old behavior. +In case your configuration doesn't work with this change, you can set +c-old-style-variable-behavior to non-nil to get the old behavior back +as far as possible. + +*** Improvements to line breaking and text filling. +CC Mode now handles this more intelligently and seamlessly wrt the +surrounding code, especially inside comments. For details see the new +chapter about this in the manual. + +**** New variable to recognize comment line prefix decorations. +The variable c-comment-prefix-regexp has been added to properly +recognize the line prefix in both block and line comments. It's +primarily used to initialize the various paragraph recognition and +adaptive filling variables that the text handling functions uses. + +**** New variable c-block-comment-prefix. +This is a generalization of the now obsolete variable +c-comment-continuation-stars to handle arbitrary strings. + +**** CC Mode now uses adaptive fill mode. +This to make it adapt better to the paragraph style inside comments. + +It's also possible to use other adaptive filling packages inside CC +Mode, notably Kyle E. Jones' Filladapt mode (http://wonderworks.com/). +A new convenience function c-setup-filladapt sets up Filladapt for use +inside CC Mode. + +Note though that the 2.12 version of Filladapt lacks a feature that +causes it to work suboptimally when c-comment-prefix-regexp can match +the empty string (which it commonly does). A patch for that is +available from the CC Mode web site (http://www.python.org/emacs/ +cc-mode/). + +**** The variables `c-hanging-comment-starter-p' and +`c-hanging-comment-ender-p', which controlled how comment starters and +enders were filled, are not used anymore. The new version of the +function `c-fill-paragraph' keeps the comment starters and enders as +they were before the filling. + +**** It's now possible to selectively turn off auto filling. +The variable c-ignore-auto-fill is used to ignore auto fill mode in +specific contexts, e.g. in preprocessor directives and in string +literals. + +**** New context sensitive line break function c-context-line-break. +It works like newline-and-indent in normal code, and adapts the line +prefix according to the comment style when used inside comments. If +you're normally using newline-and-indent, you might want to switch to +this function. + +*** Fixes to IDL mode. +It now does a better job in recognizing only the constructs relevant +to IDL. E.g. it no longer matches "class" as the beginning of a +struct block, but it does match the CORBA 2.3 "valuetype" keyword. +Thanks to Eric Eide. + +*** Improvements to the Whitesmith style. +It now keeps the style consistently on all levels and both when +opening braces hangs and when they don't. + +**** New lineup function c-lineup-whitesmith-in-block. + +*** New lineup functions c-lineup-template-args and c-indent-multi-line-block. +See their docstrings for details. c-lineup-template-args does a +better job of tracking the brackets used as parens in C++ templates, +and is used by default to line up continued template arguments. + +*** c-lineup-comment now preserves alignment with a comment on the +previous line. It used to instead preserve comments that started in +the column specified by comment-column. + +*** c-lineup-C-comments handles "free form" text comments. +In comments with a long delimiter line at the start, the indentation +is kept unchanged for lines that start with an empty comment line +prefix. This is intended for the type of large block comments that +contain documentation with its own formatting. In these you normally +don't want CC Mode to change the indentation. + +*** The `c' syntactic symbol is now relative to the comment start +instead of the previous line, to make integers usable as lineup +arguments. + +*** All lineup functions have gotten docstrings. + +*** More preprocessor directive movement functions. +c-down-conditional does the reverse of c-up-conditional. +c-up-conditional-with-else and c-down-conditional-with-else are +variants of these that also stops at "#else" lines (suggested by Don +Provan). + +*** Minor improvements to many movement functions in tricky situations. + +** Dired changes + +*** New variable `dired-recursive-deletes' determines if the delete +command will delete non-empty directories recursively. The default +is, delete only empty directories. + +*** New variable `dired-recursive-copies' determines if the copy +command will copy directories recursively. The default is, do not +copy directories recursively. + +*** In command `dired-do-shell-command' (usually bound to `!') a `?' +in the shell command has a special meaning similar to `*', but with +the difference that the command will be run on each file individually. + +*** The new command `dired-find-alternate-file' (usually bound to `a') +replaces the Dired buffer with the buffer for an alternate file or +directory. + +*** The new command `dired-show-file-type' (usually bound to `y') shows +a message in the echo area describing what type of file the point is on. +This command invokes the external program `file' do its work, and so +will only work on systems with that program, and will be only as +accurate or inaccurate as it is. + +*** Dired now properly handles undo changes of adding/removing `-R' +from ls switches. + +*** Dired commands that prompt for a destination file now allow the use +of the `M-n' command in the minibuffer to insert the source filename, +which the user can then edit. This only works if there is a single +source file, not when operating on multiple marked files. + +** Gnus changes. + +The Gnus NEWS entries are short, but they reflect sweeping changes in +four areas: Article display treatment, MIME treatment, +internationalization and mail-fetching. + +*** The mail-fetching functions have changed. See the manual for the +many details. In particular, all procmail fetching variables are gone. + +If you used procmail like in + +(setq nnmail-use-procmail t) +(setq nnmail-spool-file 'procmail) +(setq nnmail-procmail-directory "~/mail/incoming/") +(setq nnmail-procmail-suffix "\\.in") + +this now has changed to + +(setq mail-sources + '((directory :path "~/mail/incoming/" + :suffix ".in"))) + +More information is available in the info doc at Select Methods -> +Getting Mail -> Mail Sources + +*** Gnus is now a MIME-capable reader. This affects many parts of +Gnus, and adds a slew of new commands. See the manual for details. +Separate MIME packages like RMIME, mime-compose etc., will probably no +longer work; remove them and use the native facilities. + +The FLIM/SEMI package still works with Emacs 21, but if you want to +use the native facilities, you must remove any mailcap.el[c] that was +installed by FLIM/SEMI version 1.13 or earlier. + +*** Gnus has also been multilingualized. This also affects too many +parts of Gnus to summarize here, and adds many new variables. There +are built-in facilities equivalent to those of gnus-mule.el, which is +now just a compatibility layer. + +*** gnus-mule.el is now just a compatibility layer over the built-in +Gnus facilities. + +*** gnus-auto-select-first can now be a function to be +called to position point. + +*** The user can now decide which extra headers should be included in +summary buffers and NOV files. + +*** `gnus-article-display-hook' has been removed. Instead, a number +of variables starting with `gnus-treat-' have been added. + +*** The Gnus posting styles have been redone again and now work in a +subtly different manner. + +*** New web-based backends have been added: nnslashdot, nnwarchive +and nnultimate. nnweb has been revamped, again, to keep up with +ever-changing layouts. + +*** Gnus can now read IMAP mail via nnimap. + +*** There is image support of various kinds and some sound support. + +** Changes in Texinfo mode. + +*** A couple of new key bindings have been added for inserting Texinfo +macros + + Key binding Macro + ------------------------- + C-c C-c C-s @strong + C-c C-c C-e @emph + C-c C-c u @uref + C-c C-c q @quotation + C-c C-c m @email + C-c C-o @ ... @end + M-RET @item + +*** The " key now inserts either " or `` or '' depending on context. + +** Changes in Outline mode. + +There is now support for Imenu to index headings. A new command +`outline-headers-as-kill' copies the visible headings in the region to +the kill ring, e.g. to produce a table of contents. + +** Changes to Emacs Server + +*** The new option `server-kill-new-buffers' specifies what to do +with buffers when done with them. If non-nil, the default, buffers +are killed, unless they were already present before visiting them with +Emacs Server. If nil, `server-temp-file-regexp' specifies which +buffers to kill, as before. + +Please note that only buffers are killed that still have a client, +i.e. buffers visited with `emacsclient --no-wait' are never killed in +this way. + +** Both emacsclient and Emacs itself now accept command line options +of the form +LINE:COLUMN in addition to +LINE. + +** Changes to Show Paren mode. + +*** Overlays used by Show Paren mode now use a priority property. +The new user option show-paren-priority specifies the priority to +use. Default is 1000. + +** New command M-x check-parens can be used to find unbalanced paren +groups and strings in buffers in Lisp mode (or other modes). + +** Changes to hideshow.el + +*** Generalized block selection and traversal + +A block is now recognized by its start and end regexps (both strings), +and an integer specifying which sub-expression in the start regexp +serves as the place where a `forward-sexp'-like function can operate. +See the documentation of variable `hs-special-modes-alist'. + +*** During incremental search, if Hideshow minor mode is active, +hidden blocks are temporarily shown. The variable `hs-headline' can +be used in the mode line format to show the line at the beginning of +the open block. + +*** User option `hs-hide-all-non-comment-function' specifies a +function to be called at each top-level block beginning, instead of +the normal block-hiding function. + +*** The command `hs-show-region' has been removed. + +*** The key bindings have changed to fit the Emacs conventions, +roughly imitating those of Outline minor mode. Notably, the prefix +for all bindings is now `C-c @'. For details, see the documentation +for `hs-minor-mode'. + +*** The variable `hs-show-hidden-short-form' has been removed, and +hideshow.el now always behaves as if this variable were set to t. + +** Changes to Change Log mode and Add-Log functions + +*** If you invoke `add-change-log-entry' from a backup file, it makes +an entry appropriate for the file's parent. This is useful for making +log entries by comparing a version with deleted functions. + +**** New command M-x change-log-merge merges another log into the +current buffer. + +*** New command M-x change-log-redate fixes any old-style date entries +in a log file. + +*** Change Log mode now adds a file's version number to change log +entries if user-option `change-log-version-info-enabled' is non-nil. +Unless the file is under version control the search for a file's +version number is performed based on regular expressions from +`change-log-version-number-regexp-list' which can be customized. +Version numbers are only found in the first 10 percent of a file. + +*** Change Log mode now defines its own faces for font-lock highlighting. + +** Changes to cmuscheme + +*** The user-option `scheme-program-name' has been renamed +`cmuscheme-program-name' due to conflicts with xscheme.el. + +** Changes in Font Lock + +*** The new function `font-lock-remove-keywords' can be used to remove +font-lock keywords from the current buffer or from a specific major mode. + +*** Multi-line patterns are now supported. Modes using this, should +set font-lock-multiline to t in their font-lock-defaults. + +*** `font-lock-syntactic-face-function' allows major-modes to choose +the face used for each string/comment. + +*** A new standard face `font-lock-doc-face'. +Meant for Lisp docstrings, Javadoc comments and other "documentation in code". + +** Changes to Shell mode + +*** The `shell' command now accepts an optional argument to specify the buffer +to use, which defaults to "*shell*". When used interactively, a +non-default buffer may be specified by giving the `shell' command a +prefix argument (causing it to prompt for the buffer name). + +** Comint (subshell) changes + +These changes generally affect all modes derived from comint mode, which +include shell-mode, gdb-mode, scheme-interaction-mode, etc. + +*** Comint now by default interprets some carriage-control characters. +Comint now removes CRs from CR LF sequences, and treats single CRs and +BSs in the output in a way similar to a terminal (by deleting to the +beginning of the line, or deleting the previous character, +respectively). This is achieved by adding `comint-carriage-motion' to +the `comint-output-filter-functions' hook by default. + +*** By default, comint no longer uses the variable `comint-prompt-regexp' +to distinguish prompts from user-input. Instead, it notices which +parts of the text were output by the process, and which entered by the +user, and attaches `field' properties to allow emacs commands to use +this information. Common movement commands, notably beginning-of-line, +respect field boundaries in a fairly natural manner. To disable this +feature, and use the old behavior, customize the user option +`comint-use-prompt-regexp-instead-of-fields'. + +*** Comint now includes new features to send commands to running processes +and redirect the output to a designated buffer or buffers. + +*** The command M-x comint-redirect-send-command reads a command and +buffer name from the mini-buffer. The command is sent to the current +buffer's process, and its output is inserted into the specified buffer. + +The command M-x comint-redirect-send-command-to-process acts like +M-x comint-redirect-send-command but additionally reads the name of +the buffer whose process should be used from the mini-buffer. + +*** Packages based on comint now highlight user input and program prompts, +and support choosing previous input with mouse-2. To control these features, +see the user-options `comint-highlight-input' and `comint-highlight-prompt'. + +*** The new command `comint-write-output' (usually bound to `C-c C-s') +saves the output from the most recent command to a file. With a prefix +argument, it appends to the file. + +*** The command `comint-kill-output' has been renamed `comint-delete-output' +(usually bound to `C-c C-o'); the old name is aliased to it for +compatibility. + +*** The new function `comint-add-to-input-history' adds commands to the input +ring (history). + +*** The new variable `comint-input-history-ignore' is a regexp for +identifying history lines that should be ignored, like tcsh time-stamp +strings, starting with a `#'. The default value of this variable is "^#". + +** Changes to Rmail mode + +*** The new user-option rmail-user-mail-address-regexp can be +set to fine tune the identification of the correspondent when +receiving new mail. If it matches the address of the sender, the +recipient is taken as correspondent of a mail. If nil, the default, +`user-login-name' and `user-mail-address' are used to exclude yourself +as correspondent. + +Usually you don't have to set this variable, except if you collect +mails sent by you under different user names. Then it should be a +regexp matching your mail addresses. + +*** The new user-option rmail-confirm-expunge controls whether and how +to ask for confirmation before expunging deleted messages from an +Rmail file. You can choose between no confirmation, confirmation +with y-or-n-p, or confirmation with yes-or-no-p. Default is to ask +for confirmation with yes-or-no-p. + +*** RET is now bound in the Rmail summary to rmail-summary-goto-msg, +like `j'. + +*** There is a new user option `rmail-digest-end-regexps' that +specifies the regular expressions to detect the line that ends a +digest message. + +*** The new user option `rmail-automatic-folder-directives' specifies +in which folder to put messages automatically. + +*** The new function `rmail-redecode-body' allows to fix a message +with non-ASCII characters if Emacs happens to decode it incorrectly +due to missing or malformed "charset=" header. + +** The new user-option `mail-envelope-from' can be used to specify +an envelope-from address different from user-mail-address. + +** The variable mail-specify-envelope-from controls whether to +use the -f option when sending mail. + +** The Rmail command `o' (`rmail-output-to-rmail-file') now writes the +current message in the internal `emacs-mule' encoding, rather than in +the encoding taken from the variable `buffer-file-coding-system'. +This allows to save messages whose characters cannot be safely encoded +by the buffer's coding system, and makes sure the message will be +displayed correctly when you later visit the target Rmail file. + +If you want your Rmail files be encoded in a specific coding system +other than `emacs-mule', you can customize the variable +`rmail-file-coding-system' to set its value to that coding system. + +** Changes to TeX mode + +*** The default mode has been changed from `plain-tex-mode' to +`latex-mode'. + +*** latex-mode now has a simple indentation algorithm. + +*** M-f and M-p jump around \begin...\end pairs. + +*** Added support for outline-minor-mode. + +** Changes to RefTeX mode + +*** RefTeX has new support for index generation. Index entries can be + created with `C-c <', with completion available on index keys. + Pressing `C-c /' indexes the word at the cursor with a default + macro. `C-c >' compiles all index entries into an alphabetically + sorted *Index* buffer which looks like the final index. Entries + can be edited from that buffer. + +*** Label and citation key selection now allow to select several + items and reference them together (use `m' to mark items, `a' or + `A' to use all marked entries). + +*** reftex.el has been split into a number of smaller files to reduce + memory use when only a part of RefTeX is being used. + +*** a new command `reftex-view-crossref-from-bibtex' (bound to `C-c &' + in BibTeX-mode) can be called in a BibTeX database buffer in order + to show locations in LaTeX documents where a particular entry has + been cited. + +** Emacs Lisp mode now allows multiple levels of outline headings. +The level of a heading is determined from the number of leading +semicolons in a heading line. Toplevel forms starting with a `(' +in column 1 are always made leaves. + +** The M-x time-stamp command (most commonly used on write-file-hooks) +has the following new features: + +*** The patterns for finding the time stamp and for updating a pattern +may match text spanning multiple lines. For example, some people like +to have the filename and date on separate lines. The new variable +time-stamp-inserts-lines controls the matching for multi-line patterns. + +*** More than one time stamp can be updated in the same file. This +feature is useful if you need separate time stamps in a program source +file to both include in formatted documentation and insert in the +compiled binary. The same time-stamp will be written at each matching +pattern. The variable time-stamp-count enables this new feature; it +defaults to 1. + +** Partial Completion mode now completes environment variables in +file names. + +** Ispell changes + +*** The command `ispell' now spell-checks a region if +transient-mark-mode is on, and the mark is active. Otherwise it +spell-checks the current buffer. + +*** Support for synchronous subprocesses - DOS/Windoze - has been +added. + +*** An "alignment error" bug was fixed when a manual spelling +correction is made and re-checked. + +*** Italian, Portuguese, and Slovak dictionary definitions have been added. + +*** Region skipping performance has been vastly improved in some +cases. + +*** Spell checking HTML buffers has been improved and isn't so strict +on syntax errors. + +*** The buffer-local words are now always placed on a new line at the +end of the buffer. + +*** Spell checking now works in the MS-DOS version of Emacs. + +*** The variable `ispell-format-word' has been renamed to +`ispell-format-word-function'. The old name is still available as +alias. + +** Makefile mode changes + +*** The mode now uses the abbrev table `makefile-mode-abbrev-table'. + +*** Conditionals and include statements are now highlighted when +Fontlock mode is active. + +** Isearch changes + +*** Isearch now puts a call to `isearch-resume' in the command history, +so that searches can be resumed. + +*** In Isearch mode, C-M-s and C-M-r are now bound like C-s and C-r, +respectively, i.e. you can repeat a regexp isearch with the same keys +that started the search. + +*** In Isearch mode, mouse-2 in the echo area now yanks the current +selection into the search string rather than giving an error. + +*** There is a new lazy highlighting feature in incremental search. + +Lazy highlighting is switched on/off by customizing variable +`isearch-lazy-highlight'. When active, all matches for the current +search string are highlighted. The current match is highlighted as +before using face `isearch' or `region'. All other matches are +highlighted using face `isearch-lazy-highlight-face' which defaults to +`secondary-selection'. + +The extra highlighting makes it easier to anticipate where the cursor +will end up each time you press C-s or C-r to repeat a pending search. +Highlighting of these additional matches happens in a deferred fashion +using "idle timers," so the cycles needed do not rob isearch of its +usual snappy response. + +If `isearch-lazy-highlight-cleanup' is set to t, highlights for +matches are automatically cleared when you end the search. If it is +set to nil, you can remove the highlights manually with `M-x +isearch-lazy-highlight-cleanup'. + +** VC Changes + +VC has been overhauled internally. It is now modular, making it +easier to plug-in arbitrary version control backends. (See Lisp +Changes for details on the new structure.) As a result, the mechanism +to enable and disable support for particular version systems has +changed: everything is now controlled by the new variable +`vc-handled-backends'. Its value is a list of symbols that identify +version systems; the default is '(RCS CVS SCCS). When finding a file, +each of the backends in that list is tried in order to see whether the +file is registered in that backend. + +When registering a new file, VC first tries each of the listed +backends to see if any of them considers itself "responsible" for the +directory of the file (e.g. because a corresponding subdirectory for +master files exists). If none of the backends is responsible, then +the first backend in the list that could register the file is chosen. +As a consequence, the variable `vc-default-back-end' is now obsolete. + +The old variable `vc-master-templates' is also obsolete, although VC +still supports it for backward compatibility. To define templates for +RCS or SCCS, you should rather use the new variables +vc-{rcs,sccs}-master-templates. (There is no such feature under CVS +where it doesn't make sense.) + +The variables `vc-ignore-vc-files' and `vc-handle-cvs' are also +obsolete now, you must set `vc-handled-backends' to nil or exclude +`CVS' from the list, respectively, to achieve their effect now. + +*** General Changes + +The variable `vc-checkout-carefully' is obsolete: the corresponding +checks are always done now. + +VC Dired buffers are now kept up-to-date during all version control +operations. + +`vc-diff' output is now displayed in `diff-mode'. +`vc-print-log' uses `log-view-mode'. +`vc-log-mode' (used for *VC-Log*) has been replaced by `log-edit-mode'. + +The command C-x v m (vc-merge) now accepts an empty argument as the +first revision number. This means that any recent changes on the +current branch should be picked up from the repository and merged into +the working file (``merge news''). + +The commands C-x v s (vc-create-snapshot) and C-x v r +(vc-retrieve-snapshot) now ask for a directory name from which to work +downwards. + +*** Multiple Backends + +VC now lets you register files in more than one backend. This is +useful, for example, if you are working with a slow remote CVS +repository. You can then use RCS for local editing, and occasionally +commit your changes back to CVS, or pick up changes from CVS into your +local RCS archives. + +To make this work, the ``more local'' backend (RCS in our example) +should come first in `vc-handled-backends', and the ``more remote'' +backend (CVS) should come later. (The default value of +`vc-handled-backends' already has it that way.) + +You can then commit changes to another backend (say, RCS), by typing +C-u C-x v v RCS RET (i.e. vc-next-action now accepts a backend name as +a revision number). VC registers the file in the more local backend +if that hasn't already happened, and commits to a branch based on the +current revision number from the more remote backend. + +If a file is registered in multiple backends, you can switch to +another one using C-x v b (vc-switch-backend). This does not change +any files, it only changes VC's perspective on the file. Use this to +pick up changes from CVS while working under RCS locally. + +After you are done with your local RCS editing, you can commit your +changes back to CVS using C-u C-x v v CVS RET. In this case, the +local RCS archive is removed after the commit, and the log entry +buffer is initialized to contain the entire RCS change log of the file. + +*** Changes for CVS + +There is a new user option, `vc-cvs-stay-local'. If it is `t' (the +default), then VC avoids network queries for files registered in +remote repositories. The state of such files is then only determined +by heuristics and past information. `vc-cvs-stay-local' can also be a +regexp to match against repository hostnames; only files from hosts +that match it are treated locally. If the variable is nil, then VC +queries the repository just as often as it does for local files. + +If `vc-cvs-stay-local' is on, then VC also makes local backups of +repository versions. This means that ordinary diffs (C-x v =) and +revert operations (C-x v u) can be done completely locally, without +any repository interactions at all. The name of a local version +backup of FILE is FILE.~REV.~, where REV is the repository version +number. This format is similar to that used by C-x v ~ +(vc-version-other-window), except for the trailing dot. As a matter +of fact, the two features can each use the files created by the other, +the only difference being that files with a trailing `.' are deleted +automatically after commit. (This feature doesn't work on MS-DOS, +since DOS disallows more than a single dot in the trunk of a file +name.) + +If `vc-cvs-stay-local' is on, and there have been changes in the +repository, VC notifies you about it when you actually try to commit. +If you want to check for updates from the repository without trying to +commit, you can either use C-x v m RET to perform an update on the +current file, or you can use C-x v r RET to get an update for an +entire directory tree. + +The new user option `vc-cvs-use-edit' indicates whether VC should call +"cvs edit" to make files writeable; it defaults to `t'. (This option +is only meaningful if the CVSREAD variable is set, or if files are +"watched" by other developers.) + +The commands C-x v s (vc-create-snapshot) and C-x v r +(vc-retrieve-snapshot) are now also implemented for CVS. If you give +an empty snapshot name to the latter, that performs a `cvs update', +starting at the given directory. + +*** Lisp Changes in VC + +VC has been restructured internally to make it modular. You can now +add support for arbitrary version control backends by writing a +library that provides a certain set of backend-specific functions, and +then telling VC to use that library. For example, to add support for +a version system named SYS, you write a library named vc-sys.el, which +provides a number of functions vc-sys-... (see commentary at the top +of vc.el for a detailed list of them). To make VC use that library, +you need to put it somewhere into Emacs' load path and add the symbol +`SYS' to the list `vc-handled-backends'. + +** The customizable EDT emulation package now supports the EDT +SUBS command and EDT scroll margins. It also works with more +terminal/keyboard configurations and it now works under XEmacs. +See etc/edt-user.doc for more information. + +** New modes and packages + +*** The new global minor mode `minibuffer-electric-default-mode' +automatically hides the `(default ...)' part of minibuffer prompts when +the default is not applicable. + +*** Artist is an Emacs lisp package that allows you to draw lines, +rectangles and ellipses by using your mouse and/or keyboard. The +shapes are made up with the ascii characters |, -, / and \. + +Features are: + +- Intersecting: When a `|' intersects with a `-', a `+' is + drawn, like this: | \ / + --+-- X + | / \ + +- Rubber-banding: When drawing lines you can interactively see the + result while holding the mouse button down and moving the mouse. If + your machine is not fast enough (a 386 is a bit too slow, but a + pentium is well enough), you can turn this feature off. You will + then see 1's and 2's which mark the 1st and 2nd endpoint of the line + you are drawing. + +- Arrows: After having drawn a (straight) line or a (straight) + poly-line, you can set arrows on the line-ends by typing < or >. + +- Flood-filling: You can fill any area with a certain character by + flood-filling. + +- Cut copy and paste: You can cut, copy and paste rectangular + regions. Artist also interfaces with the rect package (this can be + turned off if it causes you any trouble) so anything you cut in + artist can be yanked with C-x r y and vice versa. + +- Drawing with keys: Everything you can do with the mouse, you can + also do without the mouse. + +- Aspect-ratio: You can set the variable artist-aspect-ratio to + reflect the height-width ratio for the font you are using. Squares + and circles are then drawn square/round. Note, that once your + ascii-file is shown with font with a different height-width ratio, + the squares won't be square and the circles won't be round. + +- Drawing operations: The following drawing operations are implemented: + + lines straight-lines + rectangles squares + poly-lines straight poly-lines + ellipses circles + text (see-thru) text (overwrite) + spray-can setting size for spraying + vaporize line vaporize lines + erase characters erase rectangles + + Straight lines are lines that go horizontally, vertically or + diagonally. Plain lines go in any direction. The operations in + the right column are accessed by holding down the shift key while + drawing. + + It is possible to vaporize (erase) entire lines and connected lines + (rectangles for example) as long as the lines being vaporized are + straight and connected at their endpoints. Vaporizing is inspired + by the drawrect package by Jari Aalto . + +- Picture mode compatibility: Artist is picture mode compatible (this + can be turned off). + +*** The new package Eshell is an operating system command shell +implemented entirely in Emacs Lisp. Use `M-x eshell' to invoke it. +It functions similarly to bash and zsh, and allows running of Lisp +functions and external commands using the same syntax. It supports +history lists, aliases, extended globbing, smart scrolling, etc. It +will work on any platform Emacs has been ported to. And since most of +the basic commands -- ls, rm, mv, cp, ln, du, cat, etc. -- have been +rewritten in Lisp, it offers an operating-system independent shell, +all within the scope of your Emacs process. + +*** The new package timeclock.el is a mode is for keeping track of time +intervals. You can use it for whatever purpose you like, but the +typical scenario is to keep track of how much time you spend working +on certain projects. + +*** The new package hi-lock.el provides commands to highlight matches +of interactively entered regexps. For example, + + M-x highlight-regexp RET clearly RET RET + +will highlight all occurrences of `clearly' using a yellow background +face. New occurrences of `clearly' will be highlighted as they are +typed. `M-x unhighlight-regexp RET' will remove the highlighting. +Any existing face can be used for highlighting and a set of +appropriate faces is provided. The regexps can be written into the +current buffer in a form that will be recognized the next time the +corresponding file is read. There are commands to highlight matches +to phrases and to highlight entire lines containing a match. + +*** The new package zone.el plays games with Emacs' display when +Emacs is idle. + +*** The new package tildify.el allows to add hard spaces or other text +fragments in accordance with the current major mode. + +*** The new package xml.el provides a simple but generic XML +parser. It doesn't parse the DTDs however. + +*** The comment operations are now provided by the newcomment.el +package which allows different styles of comment-region and should +be more robust while offering the same functionality. +`comment-region' now doesn't always comment a-line-at-a-time, but only +comments the region, breaking the line at point if necessary. + +*** The Ebrowse package implements a C++ class browser and tags +facilities tailored for use with C++. It is documented in a +separate Texinfo file. + +*** The PCL-CVS package available by either running M-x cvs-examine or +by visiting a CVS administrative directory (with a prefix argument) +provides an alternative interface to VC-dired for CVS. It comes with +`log-view-mode' to view RCS and SCCS logs and `log-edit-mode' used to +enter check-in log messages. + +*** The new package called `woman' allows to browse Unix man pages +without invoking external programs. + +The command `M-x woman' formats manual pages entirely in Emacs Lisp +and then displays them, like `M-x manual-entry' does. Unlike +`manual-entry', `woman' does not invoke any external programs, so it +is useful on systems such as MS-DOS/MS-Windows where the `man' and +Groff or `troff' commands are not readily available. + +The command `M-x woman-find-file' asks for the file name of a man +page, then formats and displays it like `M-x woman' does. + +*** The new command M-x re-builder offers a convenient interface for +authoring regular expressions with immediate visual feedback. + +The buffer from which the command was called becomes the target for +the regexp editor popping up in a separate window. Matching text in +the target buffer is immediately color marked during the editing. +Each sub-expression of the regexp will show up in a different face so +even complex regexps can be edited and verified on target data in a +single step. + +On displays not supporting faces the matches instead blink like +matching parens to make them stand out. On such a setup you will +probably also want to use the sub-expression mode when the regexp +contains such to get feedback about their respective limits. + +*** glasses-mode is a minor mode that makes +unreadableIdentifiersLikeThis readable. It works as glasses, without +actually modifying content of a buffer. + +*** The package ebnf2ps translates an EBNF to a syntactic chart in +PostScript. + +Currently accepts ad-hoc EBNF, ISO EBNF and Bison/Yacc. + +The ad-hoc default EBNF syntax has the following elements: + + ; comment (until end of line) + A non-terminal + "C" terminal + ?C? special + $A default non-terminal + $"C" default terminal + $?C? default special + A = B. production (A is the header and B the body) + C D sequence (C occurs before D) + C | D alternative (C or D occurs) + A - B exception (A excluding B, B without any non-terminal) + n * A repetition (A repeats n (integer) times) + (C) group (expression C is grouped together) + [C] optional (C may or not occurs) + C+ one or more occurrences of C + {C}+ one or more occurrences of C + {C}* zero or more occurrences of C + {C} zero or more occurrences of C + C / D equivalent to: C {D C}* + {C || D}+ equivalent to: C {D C}* + {C || D}* equivalent to: [C {D C}*] + {C || D} equivalent to: [C {D C}*] + +Please, see ebnf2ps documentation for EBNF syntax and how to use it. + +*** The package align.el will align columns within a region, using M-x +align. Its mode-specific rules, based on regular expressions, +determine where the columns should be split. In C and C++, for +example, it will align variable names in declaration lists, or the +equal signs of assignments. + +*** `paragraph-indent-minor-mode' is a new minor mode supporting +paragraphs in the same style as `paragraph-indent-text-mode'. + +*** bs.el is a new package for buffer selection similar to +list-buffers or electric-buffer-list. Use M-x bs-show to display a +buffer menu with this package. See the Custom group `bs'. + +*** find-lisp.el is a package emulating the Unix find command in Lisp. + +*** calculator.el is a small calculator package that is intended to +replace desktop calculators such as xcalc and calc.exe. Actually, it +is not too small - it has more features than most desktop calculators, +and can be customized easily to get many more functions. It should +not be confused with "calc" which is a much bigger mathematical tool +which answers different needs. + +*** The minor modes cwarn-mode and global-cwarn-mode highlights +suspicious C and C++ constructions. Currently, assignments inside +expressions, semicolon following `if', `for' and `while' (except, of +course, after a `do .. while' statement), and C++ functions with +reference parameters are recognized. The modes require font-lock mode +to be enabled. + +*** smerge-mode.el provides `smerge-mode', a simple minor-mode for files +containing diff3-style conflict markers, such as generated by RCS. + +*** 5x5.el is a simple puzzle game. + +*** hl-line.el provides `hl-line-mode', a minor mode to highlight the +current line in the current buffer. It also provides +`global-hl-line-mode' to provide the same behavior in all buffers. + +*** ansi-color.el translates ANSI terminal escapes into text-properties. + +Please note: if `ansi-color-for-comint-mode' and +`global-font-lock-mode' are non-nil, loading ansi-color.el will +disable font-lock and add `ansi-color-apply' to +`comint-preoutput-filter-functions' for all shell-mode buffers. This +displays the output of "ls --color=yes" using the correct foreground +and background colors. + +*** delphi.el provides a major mode for editing the Delphi (Object +Pascal) language. + +*** quickurl.el provides a simple method of inserting a URL based on +the text at point. + +*** sql.el provides an interface to SQL data bases. + +*** fortune.el uses the fortune program to create mail/news signatures. + +*** whitespace.el is a package for warning about and cleaning bogus +whitespace in a file. + +*** PostScript mode (ps-mode) is a new major mode for editing PostScript +files. It offers: interaction with a PostScript interpreter, including +(very basic) error handling; fontification, easily customizable for +interpreter messages; auto-indentation; insertion of EPSF templates and +often used code snippets; viewing of BoundingBox; commenting out / +uncommenting regions; conversion of 8bit characters to PostScript octal +codes. All functionality is accessible through a menu. + +*** delim-col helps to prettify columns in a text region or rectangle. + +Here is an example of columns: + +horse apple bus +dog pineapple car EXTRA +porcupine strawberry airplane + +Doing the following settings: + + (setq delimit-columns-str-before "[ ") + (setq delimit-columns-str-after " ]") + (setq delimit-columns-str-separator ", ") + (setq delimit-columns-separator "\t") + + +Selecting the lines above and typing: + + M-x delimit-columns-region + +It results: + +[ horse , apple , bus , ] +[ dog , pineapple , car , EXTRA ] +[ porcupine, strawberry, airplane, ] + +delim-col has the following options: + + delimit-columns-str-before Specify a string to be inserted + before all columns. + + delimit-columns-str-separator Specify a string to be inserted + between each column. + + delimit-columns-str-after Specify a string to be inserted + after all columns. + + delimit-columns-separator Specify a regexp which separates + each column. + +delim-col has the following commands: + + delimit-columns-region Prettify all columns in a text region. + delimit-columns-rectangle Prettify all columns in a text rectangle. + +*** Recentf mode maintains a menu for visiting files that were +operated on recently. User option recentf-menu-filter specifies a +menu filter function to change the menu appearance. For example, the +recent file list can be displayed: + +- organized by major modes, directories or user defined rules. +- sorted by file paths, file names, ascending or descending. +- showing paths relative to the current default-directory + +The `recentf-filter-changer' menu filter function allows to +dynamically change the menu appearance. + +*** elide-head.el provides a mechanism for eliding boilerplate header +text. + +*** footnote.el provides `footnote-mode', a minor mode supporting use +of footnotes. It is intended for use with Message mode, but isn't +specific to Message mode. + +*** diff-mode.el provides `diff-mode', a major mode for +viewing/editing context diffs (patches). It is selected for files +with extension `.diff', `.diffs', `.patch' and `.rej'. + +*** EUDC, the Emacs Unified Directory Client, provides a common user +interface to access directory servers using different directory +protocols. It has a separate manual. + +*** autoconf.el provides a major mode for editing configure.in files +for Autoconf, selected automatically. + +*** windmove.el provides moving between windows. + +*** crm.el provides a facility to read multiple strings from the +minibuffer with completion. + +*** todo-mode.el provides management of TODO lists and integration +with the diary features. + +*** autoarg.el provides a feature reported from Twenex Emacs whereby +numeric keys supply prefix args rather than self inserting. + +*** The function `turn-off-auto-fill' unconditionally turns off Auto +Fill mode. + +*** pcomplete.el is a library that provides programmable completion +facilities for Emacs, similar to what zsh and tcsh offer. The main +difference is that completion functions are written in Lisp, meaning +they can be profiled, debugged, etc. + +*** antlr-mode is a new major mode for editing ANTLR grammar files. +It is automatically turned on for files whose names have the extension +`.g'. + +** Changes in sort.el + +The function sort-numeric-fields interprets numbers starting with `0' +as octal and numbers starting with `0x' or `0X' as hexadecimal. The +new user-option sort-numeric-base can be used to specify a default +numeric base. + +** Changes to Ange-ftp + +*** Ange-ftp allows you to specify of a port number in remote file +names cleanly. It is appended to the host name, separated by a hash +sign, e.g. `/foo@bar.org#666:mumble'. (This syntax comes from EFS.) + +*** If the new user-option `ange-ftp-try-passive-mode' is set, passive +ftp mode will be used if the ftp client supports that. + +*** Ange-ftp handles the output of the w32-style clients which +output ^M at the end of lines. + +** The recommended way of using Iswitchb is via the new global minor +mode `iswitchb-mode'. + +** Just loading the msb package doesn't switch on Msb mode anymore. +If you have `(require 'msb)' in your .emacs, please replace it with +`(msb-mode 1)'. + +** Changes in Flyspell mode + +*** Flyspell mode has various new options. See the `flyspell' Custom +group. + +*** The variable `flyspell-generic-check-word-p' has been renamed +to `flyspell-generic-check-word-predicate'. The old name is still +available as alias. + +** The user option `backward-delete-char-untabify-method' controls the +behavior of `backward-delete-char-untabify'. The following values +are recognized: + +`untabify' -- turn a tab to many spaces, then delete one space; +`hungry' -- delete all whitespace, both tabs and spaces; +`all' -- delete all whitespace, including tabs, spaces and newlines; +nil -- just delete one character. + +Default value is `untabify'. + +[This change was made in Emacs 20.3 but not mentioned then.] + +** In Cperl mode `cperl-invalid-face' should now be a normal face +symbol, not double-quoted. + +** Some packages are declared obsolete, to be removed in a future +version. They are: auto-show, c-mode, hilit19, hscroll, ooutline, +profile, rnews, rnewspost, and sc. Their implementations have been +moved to lisp/obsolete. + +** auto-compression mode is no longer enabled just by loading jka-compr.el. +To control it, set `auto-compression-mode' via Custom or use the +`auto-compression-mode' command. + +** `browse-url-gnome-moz' is a new option for +`browse-url-browser-function', invoking Mozilla in GNOME, and +`browse-url-kde' can be chosen for invoking the KDE browser. + +** The user-option `browse-url-new-window-p' has been renamed to +`browse-url-new-window-flag'. + +** The functions `keep-lines', `flush-lines' and `how-many' now +operate on the active region in Transient Mark mode. + +** `gnus-user-agent' is a new possibility for `mail-user-agent'. It +is like `message-user-agent', but with all the Gnus paraphernalia. + +** The Strokes package has been updated. If your Emacs has XPM +support, you can use it for pictographic editing. In Strokes mode, +use C-mouse-2 to compose a complex stoke and insert it into the +buffer. You can encode or decode a strokes buffer with new commands +M-x strokes-encode-buffer and M-x strokes-decode-buffer. There is a +new command M-x strokes-list-strokes. + +** Hexl contains a new command `hexl-insert-hex-string' which inserts +a string of hexadecimal numbers read from the mini-buffer. + +** Hexl mode allows to insert non-ASCII characters. + +The non-ASCII characters are encoded using the same encoding as the +file you are visiting in Hexl mode. + +** Shell script mode changes. + +Shell script mode (sh-script) can now indent scripts for shells +derived from sh and rc. The indentation style is customizable, and +sh-script can attempt to "learn" the current buffer's style. + +** Etags changes. + +*** In DOS, etags looks for file.cgz if it cannot find file.c. + +*** New option --ignore-case-regex is an alternative to --regex. It is now +possible to bind a regexp to a language, by prepending the regexp with +{lang}, where lang is one of the languages that `etags --help' prints out. +This feature is useful especially for regex files, where each line contains +a regular expression. The manual contains details. + +*** In C and derived languages, etags creates tags for function +declarations when given the --declarations option. + +*** In C++, tags are created for "operator". The tags have the form +"operator+", without spaces between the keyword and the operator. + +*** You shouldn't generally need any more the -C or -c++ option: etags +automatically switches to C++ parsing when it meets the `class' or +`template' keywords. + +*** Etags now is able to delve at arbitrary deeps into nested structures in +C-like languages. Previously, it was limited to one or two brace levels. + +*** New language Ada: tags are functions, procedures, packages, tasks, and +types. + +*** In Fortran, `procedure' is not tagged. + +*** In Java, tags are created for "interface". + +*** In Lisp, "(defstruct (foo", "(defun (operator" and similar constructs +are now tagged. + +*** In makefiles, tags the targets. + +*** In Perl, the --globals option tags global variables. my and local +variables are tagged. + +*** New language Python: def and class at the beginning of a line are tags. + +*** .ss files are Scheme files, .pdb is Postscript with C syntax, .psw is +for PSWrap. + +** Changes in etags.el + +*** The new user-option tags-case-fold-search can be used to make +tags operations case-sensitive or case-insensitive. The default +is to use the same setting as case-fold-search. + +*** You can display additional output with M-x tags-apropos by setting +the new variable tags-apropos-additional-actions. + +If non-nil, the variable's value should be a list of triples (TITLE +FUNCTION TO-SEARCH). For each triple, M-x tags-apropos processes +TO-SEARCH and lists tags from it. TO-SEARCH should be an alist, +obarray, or symbol. If it is a symbol, the symbol's value is used. + +TITLE is a string to use to label the list of tags from TO-SEARCH. + +FUNCTION is a function to call when an entry is selected in the Tags +List buffer. It is called with one argument, the selected symbol. + +A useful example value for this variable might be something like: + + '(("Emacs Lisp" Info-goto-emacs-command-node obarray) + ("Common Lisp" common-lisp-hyperspec common-lisp-hyperspec-obarray) + ("SCWM" scwm-documentation scwm-obarray)) + +*** The face tags-tag-face can be used to customize the appearance +of tags in the output of M-x tags-apropos. + +*** Setting tags-apropos-verbose to a non-nil value displays the +names of tags files in the *Tags List* buffer. + +*** You can now search for tags that are part of the filename itself. +If you have tagged the files topfile.c subdir/subfile.c +/tmp/tempfile.c, you can now search for tags "topfile.c", "subfile.c", +"dir/sub", "tempfile", "tempfile.c". If the tag matches the file name, +point will go to the beginning of the file. + +*** Compressed files are now transparently supported if +auto-compression-mode is active. You can tag (with Etags) and search +(with find-tag) both compressed and uncompressed files. + +*** Tags commands like M-x tags-search no longer change point +in buffers where no match is found. In buffers where a match is +found, the original value of point is pushed on the marker ring. + +** Fortran mode has a new command `fortran-strip-sequence-nos' to +remove text past column 72. The syntax class of `\' in Fortran is now +appropriate for C-style escape sequences in strings. + +** SGML mode's default `sgml-validate-command' is now `nsgmls'. + +** A new command `view-emacs-problems' (C-h P) displays the PROBLEMS file. + +** The Dabbrev package has a new user-option `dabbrev-ignored-regexps' +containing a list of regular expressions. Buffers matching a regular +expression from that list, are not checked. + +** Emacs can now figure out modification times of remote files. +When you do C-x C-f /user@host:/path/file RET and edit the file, +and someone else modifies the file, you will be prompted to revert +the buffer, just like for the local files. + +** The buffer menu (C-x C-b) no longer lists the *Buffer List* buffer. + +** When invoked with a prefix argument, the command `list-abbrevs' now +displays local abbrevs, only. + +** Refill minor mode provides preliminary support for keeping +paragraphs filled as you modify them. + +** The variable `double-click-fuzz' specifies how much the mouse +may be moved between clicks that are recognized as a pair. Its value +is measured in pixels. + +** The new global minor mode `auto-image-file-mode' allows image files +to be visited as images. + +** Two new user-options `grep-command' and `grep-find-command' +were added to compile.el. + +** Withdrawn packages + +*** mldrag.el has been removed. mouse.el provides the same +functionality with aliases for the mldrag functions. + +*** eval-reg.el has been obsoleted by changes to edebug.el and removed. + +*** ph.el has been obsoleted by EUDC and removed. + + +* Incompatible Lisp changes in 21.1 + +There are a few Lisp changes which are not backwards-compatible and +may require changes to existing code. Here is a list for reference. +See the sections below for details. + +** Since `format' preserves text properties, the idiom +`(format "%s" foo)' no longer works to copy and remove properties. +Use `copy-sequence' to copy the string, then use `set-text-properties' +to remove the properties of the copy. + +** Since the `keymap' text property now has significance, some code +which uses both `local-map' and `keymap' properties (for portability) +may, for instance, give rise to duplicate menus when the keymaps from +these properties are active. + +** The change in the treatment of non-ASCII characters in search +ranges may affect some code. + +** A non-nil value for the LOCAL arg of add-hook makes the hook +buffer-local even if `make-local-hook' hasn't been called, which might +make a difference to some code. + +** The new treatment of the minibuffer prompt might affect code which +operates on the minibuffer. + +** The new character sets `eight-bit-control' and `eight-bit-graphic' +cause `no-conversion' and `emacs-mule-unix' coding systems to produce +different results when reading files with non-ASCII characters +(previously, both coding systems would produce the same results). +Specifically, `no-conversion' interprets each 8-bit byte as a separate +character. This makes `no-conversion' inappropriate for reading +multibyte text, e.g. buffers written to disk in their internal MULE +encoding (auto-saving does that, for example). If a Lisp program +reads such files with `no-conversion', each byte of the multibyte +sequence, including the MULE leading codes such as \201, is treated as +a separate character, which prevents them from being interpreted in +the buffer as multibyte characters. + +Therefore, Lisp programs that read files which contain the internal +MULE encoding should use `emacs-mule-unix'. `no-conversion' is only +appropriate for reading truly binary files. + +** Code that relies on the obsolete `before-change-function' and +`after-change-function' to detect buffer changes will now fail. Use +`before-change-functions' and `after-change-functions' instead. + +** Code that uses `concat' with integer args now gets an error, as +long promised. So does any code that uses derivatives of `concat', +such as `mapconcat'. + +** The function base64-decode-string now always returns a unibyte +string. + +** Not a Lisp incompatibility as such but, with the introduction of +extra private charsets, there is now only one slot free for a new +dimension-2 private charset. User code which tries to add more than +one extra will fail unless you rebuild Emacs with some standard +charset(s) removed; that is probably inadvisable because it changes +the emacs-mule encoding. Also, files stored in the emacs-mule +encoding using Emacs 20 with additional private charsets defined will +probably not be read correctly by Emacs 21. + +** The variable `directory-sep-char' is slated for removal. +Not really a change (yet), but a projected one that you should be +aware of: The variable `directory-sep-char' is deprecated, and should +not be used. It was always ignored on GNU/Linux and Unix systems and +on MS-DOS, but the MS-Windows port tried to support it by adapting the +behavior of certain primitives to the value of this variable. It +turned out that such support cannot be reliable, so it was decided to +remove this variable in the near future. Lisp programs are well +advised not to set it to anything but '/', because any different value +will not have any effect when support for this variable is removed. + + +* Lisp changes made after edition 2.6 of the Emacs Lisp Manual, +(Display-related features are described in a page of their own below.) + +** Function assq-delete-all replaces function assoc-delete-all. + +** The new function animate-string, from lisp/play/animate.el +allows the animated display of strings. + +** The new function `interactive-form' can be used to obtain the +interactive form of a function. + +** The keyword :set-after in defcustom allows to specify dependencies +between custom options. Example: + + (defcustom default-input-method nil + "*Default input method for multilingual text (a string). + This is the input method activated automatically by the command + `toggle-input-method' (\\[toggle-input-method])." + :group 'mule + :type '(choice (const nil) string) + :set-after '(current-language-environment)) + +This specifies that default-input-method should be set after +current-language-environment even if default-input-method appears +first in a custom-set-variables statement. + +** The new hook `kbd-macro-termination-hook' is run at the end of +function execute-kbd-macro. Functions on this hook are called with no +args. The hook is run independent of how the macro was terminated +(signal or normal termination). + +** Functions `butlast' and `nbutlast' for removing trailing elements +from a list are now available without requiring the CL package. + +** The new user-option `even-window-heights' can be set to nil +to prevent `display-buffer' from evening out window heights. + +** The user-option `face-font-registry-alternatives' specifies +alternative font registry names to try when looking for a font. + +** Function `md5' calculates the MD5 "message digest"/"checksum". + +** Function `delete-frame' runs `delete-frame-hook' before actually +deleting the frame. The hook is called with one arg, the frame +being deleted. + +** `add-hook' now makes the hook local if called with a non-nil LOCAL arg. + +** The treatment of non-ASCII characters in search ranges has changed. +If a range in a regular expression or the arg of +skip-chars-forward/backward starts with a unibyte character C and ends +with a multibyte character C2, the range is divided into two: one is +C..?\377, the other is C1..C2, where C1 is the first character of C2's +charset. + +** The new function `display-message-or-buffer' displays a message in +the echo area or pops up a buffer, depending on the length of the +message. + +** The new macro `with-auto-compression-mode' allows evaluating an +expression with auto-compression-mode enabled. + +** In image specifications, `:heuristic-mask' has been replaced +with the more general `:mask' property. + +** Image specifications accept more `:conversion's. + +** A `?' can be used in a symbol name without escaping it with a +backslash. + +** Reading from the mini-buffer now reads from standard input if Emacs +is running in batch mode. For example, + + (message "%s" (read t)) + +will read a Lisp expression from standard input and print the result +to standard output. + +** The argument of `down-list', `backward-up-list', `up-list', +`kill-sexp', `backward-kill-sexp' and `mark-sexp' is now optional. + +** If `display-buffer-reuse-frames' is set, function `display-buffer' +will raise frames displaying a buffer, instead of creating a new +frame or window. + +** Two new functions for removing elements from lists/sequences +were added + +- Function: remove ELT SEQ + +Return a copy of SEQ with all occurrences of ELT removed. SEQ must be +a list, vector, or string. The comparison is done with `equal'. + +- Function: remq ELT LIST + +Return a copy of LIST with all occurrences of ELT removed. The +comparison is done with `eq'. + +** The function `delete' now also works with vectors and strings. + +** The meaning of the `:weakness WEAK' argument of make-hash-table +has been changed: WEAK can now have new values `key-or-value' and +`key-and-value', in addition to `nil', `key', `value', and `t'. + +** Function `aset' stores any multibyte character in any string +without signaling "Attempt to change char length of a string". It may +convert a unibyte string to multibyte if necessary. + +** The value of the `help-echo' text property is called as a function +or evaluated, if it is not a string already, to obtain a help string. + +** Function `make-obsolete' now has an optional arg to say when the +function was declared obsolete. + +** Function `plist-member' is renamed from `widget-plist-member' (which is +retained as an alias). + +** Easy-menu's :filter now takes the unconverted form of the menu and +the result is automatically converted to Emacs' form. + +** The new function `window-list' has been defined + +- Function: window-list &optional FRAME WINDOW MINIBUF + +Return a list of windows on FRAME, starting with WINDOW. FRAME nil or +omitted means use the selected frame. WINDOW nil or omitted means use +the selected window. MINIBUF t means include the minibuffer window, +even if it isn't active. MINIBUF nil or omitted means include the +minibuffer window only if it's active. MINIBUF neither nil nor t +means never include the minibuffer window. + +** There's a new function `get-window-with-predicate' defined as follows + +- Function: get-window-with-predicate PREDICATE &optional MINIBUF ALL-FRAMES DEFAULT + +Return a window satisfying PREDICATE. + +This function cycles through all visible windows using `walk-windows', +calling PREDICATE on each one. PREDICATE is called with a window as +argument. The first window for which PREDICATE returns a non-nil +value is returned. If no window satisfies PREDICATE, DEFAULT is +returned. + +Optional second arg MINIBUF t means count the minibuffer window even +if not active. MINIBUF nil or omitted means count the minibuffer iff +it is active. MINIBUF neither t nor nil means not to count the +minibuffer even if it is active. + +Several frames may share a single minibuffer; if the minibuffer +counts, all windows on all frames that share that minibuffer count +too. Therefore, if you are using a separate minibuffer frame +and the minibuffer is active and MINIBUF says it counts, +`walk-windows' includes the windows in the frame from which you +entered the minibuffer, as well as the minibuffer window. + +ALL-FRAMES is the optional third argument. +ALL-FRAMES nil or omitted means cycle within the frames as specified above. +ALL-FRAMES = `visible' means include windows on all visible frames. +ALL-FRAMES = 0 means include windows on all visible and iconified frames. +ALL-FRAMES = t means include windows on all frames including invisible frames. +If ALL-FRAMES is a frame, it means include windows on that frame. +Anything else means restrict to the selected frame. + +** The function `single-key-description' now encloses function key and +event names in angle brackets. When called with a second optional +argument non-nil, angle brackets won't be printed. + +** If the variable `message-truncate-lines' is bound to t around a +call to `message', the echo area will not be resized to display that +message; it will be truncated instead, as it was done in 20.x. +Default value is nil. + +** The user option `line-number-display-limit' can now be set to nil, +meaning no limit. + +** The new user option `line-number-display-limit-width' controls +the maximum width of lines in a buffer for which Emacs displays line +numbers in the mode line. The default is 200. + +** `select-safe-coding-system' now also checks the most preferred +coding-system if buffer-file-coding-system is `undecided' and +DEFAULT-CODING-SYSTEM is not specified, + +** The function `subr-arity' provides information about the argument +list of a primitive. + +** `where-is-internal' now also accepts a list of keymaps. + +** The text property `keymap' specifies a key map which overrides the +buffer's local map and the map specified by the `local-map' property. +This is probably what most current uses of `local-map' want, rather +than replacing the local map. + +** The obsolete variables `before-change-function' and +`after-change-function' are no longer acted upon and have been +removed. Use `before-change-functions' and `after-change-functions' +instead. + +** The function `apropos-mode' runs the hook `apropos-mode-hook'. + +** `concat' no longer accepts individual integer arguments, +as promised long ago. + +** The new function `float-time' returns the current time as a float. + +** The new variable auto-coding-regexp-alist specifies coding systems +for reading specific files, analogous to auto-coding-alist, but +patterns are checked against file contents instead of file names. + + +* Lisp changes in Emacs 21.1 (see following page for display-related features) + +** The new package rx.el provides an alternative sexp notation for +regular expressions. + +- Function: rx-to-string SEXP + +Translate SEXP into a regular expression in string notation. + +- Macro: rx SEXP + +Translate SEXP into a regular expression in string notation. + +The following are valid subforms of regular expressions in sexp +notation. + +STRING + matches string STRING literally. + +CHAR + matches character CHAR literally. + +`not-newline' + matches any character except a newline. + . +`anything' + matches any character + +`(any SET)' + matches any character in SET. SET may be a character or string. + Ranges of characters can be specified as `A-Z' in strings. + +'(in SET)' + like `any'. + +`(not (any SET))' + matches any character not in SET + +`line-start' + matches the empty string, but only at the beginning of a line + in the text being matched + +`line-end' + is similar to `line-start' but matches only at the end of a line + +`string-start' + matches the empty string, but only at the beginning of the + string being matched against. + +`string-end' + matches the empty string, but only at the end of the + string being matched against. + +`buffer-start' + matches the empty string, but only at the beginning of the + buffer being matched against. + +`buffer-end' + matches the empty string, but only at the end of the + buffer being matched against. + +`point' + matches the empty string, but only at point. + +`word-start' + matches the empty string, but only at the beginning or end of a + word. + +`word-end' + matches the empty string, but only at the end of a word. + +`word-boundary' + matches the empty string, but only at the beginning or end of a + word. + +`(not word-boundary)' + matches the empty string, but not at the beginning or end of a + word. + +`digit' + matches 0 through 9. + +`control' + matches ASCII control characters. + +`hex-digit' + matches 0 through 9, a through f and A through F. + +`blank' + matches space and tab only. + +`graphic' + matches graphic characters--everything except ASCII control chars, + space, and DEL. + +`printing' + matches printing characters--everything except ASCII control chars + and DEL. + +`alphanumeric' + matches letters and digits. (But at present, for multibyte characters, + it matches anything that has word syntax.) + +`letter' + matches letters. (But at present, for multibyte characters, + it matches anything that has word syntax.) + +`ascii' + matches ASCII (unibyte) characters. + +`nonascii' + matches non-ASCII (multibyte) characters. + +`lower' + matches anything lower-case. + +`upper' + matches anything upper-case. + +`punctuation' + matches punctuation. (But at present, for multibyte characters, + it matches anything that has non-word syntax.) + +`space' + matches anything that has whitespace syntax. + +`word' + matches anything that has word syntax. + +`(syntax SYNTAX)' + matches a character with syntax SYNTAX. SYNTAX must be one + of the following symbols. + + `whitespace' (\\s- in string notation) + `punctuation' (\\s.) + `word' (\\sw) + `symbol' (\\s_) + `open-parenthesis' (\\s() + `close-parenthesis' (\\s)) + `expression-prefix' (\\s') + `string-quote' (\\s\") + `paired-delimiter' (\\s$) + `escape' (\\s\\) + `character-quote' (\\s/) + `comment-start' (\\s<) + `comment-end' (\\s>) + +`(not (syntax SYNTAX))' + matches a character that has not syntax SYNTAX. + +`(category CATEGORY)' + matches a character with category CATEGORY. CATEGORY must be + either a character to use for C, or one of the following symbols. + + `consonant' (\\c0 in string notation) + `base-vowel' (\\c1) + `upper-diacritical-mark' (\\c2) + `lower-diacritical-mark' (\\c3) + `tone-mark' (\\c4) + `symbol' (\\c5) + `digit' (\\c6) + `vowel-modifying-diacritical-mark' (\\c7) + `vowel-sign' (\\c8) + `semivowel-lower' (\\c9) + `not-at-end-of-line' (\\c<) + `not-at-beginning-of-line' (\\c>) + `alpha-numeric-two-byte' (\\cA) + `chinse-two-byte' (\\cC) + `greek-two-byte' (\\cG) + `japanese-hiragana-two-byte' (\\cH) + `indian-two-byte' (\\cI) + `japanese-katakana-two-byte' (\\cK) + `korean-hangul-two-byte' (\\cN) + `cyrillic-two-byte' (\\cY) + `ascii' (\\ca) + `arabic' (\\cb) + `chinese' (\\cc) + `ethiopic' (\\ce) + `greek' (\\cg) + `korean' (\\ch) + `indian' (\\ci) + `japanese' (\\cj) + `japanese-katakana' (\\ck) + `latin' (\\cl) + `lao' (\\co) + `tibetan' (\\cq) + `japanese-roman' (\\cr) + `thai' (\\ct) + `vietnamese' (\\cv) + `hebrew' (\\cw) + `cyrillic' (\\cy) + `can-break' (\\c|) + +`(not (category CATEGORY))' + matches a character that has not category CATEGORY. + +`(and SEXP1 SEXP2 ...)' + matches what SEXP1 matches, followed by what SEXP2 matches, etc. + +`(submatch SEXP1 SEXP2 ...)' + like `and', but makes the match accessible with `match-end', + `match-beginning', and `match-string'. + +`(group SEXP1 SEXP2 ...)' + another name for `submatch'. + +`(or SEXP1 SEXP2 ...)' + matches anything that matches SEXP1 or SEXP2, etc. If all + args are strings, use `regexp-opt' to optimize the resulting + regular expression. + +`(minimal-match SEXP)' + produce a non-greedy regexp for SEXP. Normally, regexps matching + zero or more occurrences of something are \"greedy\" in that they + match as much as they can, as long as the overall regexp can + still match. A non-greedy regexp matches as little as possible. + +`(maximal-match SEXP)' + produce a greedy regexp for SEXP. This is the default. + +`(zero-or-more SEXP)' + matches zero or more occurrences of what SEXP matches. + +`(0+ SEXP)' + like `zero-or-more'. + +`(* SEXP)' + like `zero-or-more', but always produces a greedy regexp. + +`(*? SEXP)' + like `zero-or-more', but always produces a non-greedy regexp. + +`(one-or-more SEXP)' + matches one or more occurrences of A. + +`(1+ SEXP)' + like `one-or-more'. + +`(+ SEXP)' + like `one-or-more', but always produces a greedy regexp. + +`(+? SEXP)' + like `one-or-more', but always produces a non-greedy regexp. + +`(zero-or-one SEXP)' + matches zero or one occurrences of A. + +`(optional SEXP)' + like `zero-or-one'. + +`(? SEXP)' + like `zero-or-one', but always produces a greedy regexp. + +`(?? SEXP)' + like `zero-or-one', but always produces a non-greedy regexp. + +`(repeat N SEXP)' + matches N occurrences of what SEXP matches. + +`(repeat N M SEXP)' + matches N to M occurrences of what SEXP matches. + +`(eval FORM)' + evaluate FORM and insert result. If result is a string, + `regexp-quote' it. + +`(regexp REGEXP)' + include REGEXP in string notation in the result. + +*** The features `md5' and `overlay' are now provided by default. + +*** The special form `save-restriction' now works correctly even if the +buffer is widened inside the save-restriction and changes made outside +the original restriction. Previously, doing this would cause the saved +restriction to be restored incorrectly. + +*** The functions `find-charset-region' and `find-charset-string' include +`eight-bit-control' and/or `eight-bit-graphic' in the returned list +when they find 8-bit characters. Previously, they included `ascii' in a +multibyte buffer and `unknown' in a unibyte buffer. + +*** The functions `set-buffer-multibyte', `string-as-multibyte' and +`string-as-unibyte' change the byte sequence of a buffer or a string +if it contains a character from the `eight-bit-control' character set. + +*** The handling of multibyte sequences in a multibyte buffer is +changed. Previously, a byte sequence matching the pattern +[\200-\237][\240-\377]+ was interpreted as a single character +regardless of the length of the trailing bytes [\240-\377]+. Thus, if +the sequence was longer than what the leading byte indicated, the +extra trailing bytes were ignored by Lisp functions. Now such extra +bytes are independent 8-bit characters belonging to the charset +eight-bit-graphic. + +** Fontsets are now implemented using char-tables. + +A fontset can now be specified for each independent character, for +a group of characters or for a character set rather than just for a +character set as previously. + +*** The arguments of the function `set-fontset-font' are changed. +They are NAME, CHARACTER, FONTNAME, and optional FRAME. The function +modifies fontset NAME to use FONTNAME for CHARACTER. + +CHARACTER may be a cons (FROM . TO), where FROM and TO are non-generic +characters. In that case FONTNAME is used for all characters in the +range FROM and TO (inclusive). CHARACTER may be a charset. In that +case FONTNAME is used for all character in the charset. + +FONTNAME may be a cons (FAMILY . REGISTRY), where FAMILY is the family +name of a font and REGISTRY is a registry name of a font. + +*** Variable x-charset-registry has been deleted. The default charset +registries of character sets are set in the default fontset +"fontset-default". + +*** The function `create-fontset-from-fontset-spec' ignores the second +argument STYLE-VARIANT. It never creates style-variant fontsets. + +** The method of composing characters is changed. Now character +composition is done by a special text property `composition' in +buffers and strings. + +*** Charset composition is deleted. Emacs never creates a `composite +character' which is an independent character with a unique character +code. Thus the following functions handling `composite characters' +have been deleted: composite-char-component, +composite-char-component-count, composite-char-composition-rule, +composite-char-composition-rule and decompose-composite-char delete. +The variables leading-code-composition and min-composite-char have +also been deleted. + +*** Three more glyph reference points are added. They can be used to +specify a composition rule. See the documentation of the variable +`reference-point-alist' for more detail. + +*** The function `compose-region' takes new arguments COMPONENTS and +MODIFICATION-FUNC. With COMPONENTS, you can specify not only a +composition rule but also characters to be composed. Such characters +may differ between buffer and string text. + +*** The function `compose-string' takes new arguments START, END, +COMPONENTS, and MODIFICATION-FUNC. + +*** The function `compose-string' puts text property `composition' +directly on the argument STRING instead of returning a new string. +Likewise, the function `decompose-string' just removes text property +`composition' from STRING. + +*** The new function `find-composition' returns information about +a composition at a specified position in a buffer or a string. + +*** The function `decompose-composite-char' is now labeled as +obsolete. + +** The new coding system `mac-roman' is primarily intended for use on +the Macintosh but may be used generally for Macintosh-encoded text. + +** The new character sets `mule-unicode-0100-24ff', +`mule-unicode-2500-33ff', and `mule-unicode-e000-ffff' have been +introduced for Unicode characters in the range U+0100..U+24FF, +U+2500..U+33FF, U+E000..U+FFFF respectively. + +Note that the character sets are not yet unified in Emacs, so +characters which belong to charsets such as Latin-2, Greek, Hebrew, +etc. and the same characters in the `mule-unicode-*' charsets are +different characters, as far as Emacs is concerned. For example, text +which includes Unicode characters from the Latin-2 locale cannot be +encoded by Emacs with ISO 8859-2 coding system. + +** The new coding system `mule-utf-8' has been added. +It provides limited support for decoding/encoding UTF-8 text. For +details, please see the documentation string of this coding system. + +** The new character sets `japanese-jisx0213-1' and +`japanese-jisx0213-2' have been introduced for the new Japanese +standard JIS X 0213 Plane 1 and Plane 2. + +** The new character sets `latin-iso8859-14' and `latin-iso8859-15' +have been introduced. + +** The new character sets `eight-bit-control' and `eight-bit-graphic' +have been introduced for 8-bit characters in the ranges 0x80..0x9F and +0xA0..0xFF respectively. Note that the multibyte representation of +eight-bit-control is never exposed; this leads to an exception in the +emacs-mule coding system, which encodes everything else to the +buffer/string internal representation. Note that to search for +eight-bit-graphic characters in a multibyte buffer, the search string +must be multibyte, otherwise such characters will be converted to +their multibyte equivalent. + +** If the APPEND argument of `write-region' is an integer, it seeks to +that offset in the file before writing. + +** The function `add-minor-mode' has been added for convenience and +compatibility with XEmacs (and is used internally by define-minor-mode). + +** The function `shell-command' now sets the default directory of the +`*Shell Command Output*' buffer to the default directory of the buffer +from which the command was issued. + +** The functions `query-replace', `query-replace-regexp', +`query-replace-regexp-eval' `map-query-replace-regexp', +`replace-string', `replace-regexp', and `perform-replace' take two +additional optional arguments START and END that specify the region to +operate on. + +** The new function `count-screen-lines' is a more flexible alternative +to `window-buffer-height'. + +- Function: count-screen-lines &optional BEG END COUNT-FINAL-NEWLINE WINDOW + +Return the number of screen lines in the region between BEG and END. +The number of screen lines may be different from the number of actual +lines, due to line breaking, display table, etc. + +Optional arguments BEG and END default to `point-min' and `point-max' +respectively. + +If region ends with a newline, ignore it unless optional third argument +COUNT-FINAL-NEWLINE is non-nil. + +The optional fourth argument WINDOW specifies the window used for +obtaining parameters such as width, horizontal scrolling, and so +on. The default is to use the selected window's parameters. + +Like `vertical-motion', `count-screen-lines' always uses the current +buffer, regardless of which buffer is displayed in WINDOW. This makes +possible to use `count-screen-lines' in any buffer, whether or not it +is currently displayed in some window. + +** The new function `mapc' is like `mapcar' but doesn't collect the +argument function's results. + +** The functions base64-decode-region and base64-decode-string now +signal an error instead of returning nil if decoding fails. Also, +`base64-decode-string' now always returns a unibyte string (in Emacs +20, it returned a multibyte string when the result was a valid multibyte +sequence). + +** The function sendmail-user-agent-compose now recognizes a `body' +header in the list of headers passed to it. + +** The new function member-ignore-case works like `member', but +ignores differences in case and text representation. + +** The buffer-local variable cursor-type can be used to specify the +cursor to use in windows displaying a buffer. Values are interpreted +as follows: + + t use the cursor specified for the frame (default) + nil don't display a cursor + `bar' display a bar cursor with default width + (bar . WIDTH) display a bar cursor with width WIDTH + others display a box cursor. + +** The variable open-paren-in-column-0-is-defun-start controls whether +an open parenthesis in column 0 is considered to be the start of a +defun. If set, the default, it is considered a defun start. If not +set, an open parenthesis in column 0 has no special meaning. + +** The new function `string-to-syntax' can be used to translate syntax +specifications in string form as accepted by `modify-syntax-entry' to +the cons-cell form that is used for the values of the `syntax-table' +text property, and in `font-lock-syntactic-keywords'. + +Example: + + (string-to-syntax "()") + => (4 . 41) + +** Emacs' reader supports CL read syntax for integers in bases +other than 10. + +*** `#BINTEGER' or `#bINTEGER' reads INTEGER in binary (radix 2). +INTEGER optionally contains a sign. + + #b1111 + => 15 + #b-1111 + => -15 + +*** `#OINTEGER' or `#oINTEGER' reads INTEGER in octal (radix 8). + + #o666 + => 438 + +*** `#XINTEGER' or `#xINTEGER' reads INTEGER in hexadecimal (radix 16). + + #xbeef + => 48815 + +*** `#RADIXrINTEGER' reads INTEGER in radix RADIX, 2 <= RADIX <= 36. + + #2R-111 + => -7 + #25rah + => 267 + +** The function `documentation-property' now evaluates the value of +the given property to obtain a string if it doesn't refer to etc/DOC +and isn't a string. + +** If called for a symbol, the function `documentation' now looks for +a `function-documentation' property of that symbol. If it has a non-nil +value, the documentation is taken from that value. If the value is +not a string, it is evaluated to obtain a string. + +** The last argument of `define-key-after' defaults to t for convenience. + +** The new function `replace-regexp-in-string' replaces all matches +for a regexp in a string. + +** `mouse-position' now runs the abnormal hook +`mouse-position-function'. + +** The function string-to-number now returns a float for numbers +that don't fit into a Lisp integer. + +** The variable keyword-symbols-constants-flag has been removed. +Keywords are now always considered constants. + +** The new function `delete-and-extract-region' deletes text and +returns it. + +** The function `clear-this-command-keys' now also clears the vector +returned by function `recent-keys'. + +** Variables `beginning-of-defun-function' and `end-of-defun-function' +can be used to define handlers for the functions that find defuns. +Major modes can define these locally instead of rebinding C-M-a +etc. if the normal conventions for defuns are not appropriate for the +mode. + +** easy-mmode-define-minor-mode now takes an additional BODY argument +and is renamed `define-minor-mode'. + +** If an abbrev has a hook function which is a symbol, and that symbol +has a non-nil `no-self-insert' property, the return value of the hook +function specifies whether an expansion has been done or not. If it +returns nil, abbrev-expand also returns nil, meaning "no expansion has +been performed." + +When abbrev expansion is done by typing a self-inserting character, +and the abbrev has a hook with the `no-self-insert' property, and the +hook function returns non-nil meaning expansion has been done, +then the self-inserting character is not inserted. + +** The function `intern-soft' now accepts a symbol as first argument. +In this case, that exact symbol is looked up in the specified obarray, +and the function's value is nil if it is not found. + +** The new macro `with-syntax-table' can be used to evaluate forms +with the syntax table of the current buffer temporarily set to a +specified table. + + (with-syntax-table TABLE &rest BODY) + +Evaluate BODY with syntax table of current buffer set to a copy of +TABLE. The current syntax table is saved, BODY is evaluated, and the +saved table is restored, even in case of an abnormal exit. Value is +what BODY returns. + +** Regular expressions now support intervals \{n,m\} as well as +Perl's shy-groups \(?:...\) and non-greedy *? +? and ?? operators. +Also back-references like \2 are now considered as an error if the +corresponding subgroup does not exist (or is not closed yet). +Previously it would have been silently turned into `2' (ignoring the `\'). + +** The optional argument BUFFER of function file-local-copy has been +removed since it wasn't used by anything. + +** The file name argument of function `file-locked-p' is now required +instead of being optional. + +** The new built-in error `text-read-only' is signaled when trying to +modify read-only text. + +** New functions and variables for locales. + +The new variable `locale-coding-system' specifies how to encode and +decode strings passed to low-level message functions like strerror and +time functions like strftime. The new variables +`system-messages-locale' and `system-time-locale' give the system +locales to be used when invoking these two types of functions. + +The new function `set-locale-environment' sets the language +environment, preferred coding system, and locale coding system from +the system locale as specified by the LC_ALL, LC_CTYPE, and LANG +environment variables. Normally, it is invoked during startup and need +not be invoked thereafter. It uses the new variables +`locale-language-names', `locale-charset-language-names', and +`locale-preferred-coding-systems' to make its decisions. + +** syntax tables now understand nested comments. +To declare a comment syntax as allowing nesting, just add an `n' +modifier to either of the characters of the comment end and the comment +start sequences. + +** The function `pixmap-spec-p' has been renamed `bitmap-spec-p' +because `bitmap' is more in line with the usual X terminology. + +** New function `propertize' + +The new function `propertize' can be used to conveniently construct +strings with text properties. + +- Function: propertize STRING &rest PROPERTIES + +Value is a copy of STRING with text properties assigned as specified +by PROPERTIES. PROPERTIES is a sequence of pairs PROPERTY VALUE, with +PROPERTY being the name of a text property and VALUE being the +specified value of that property. Example: + + (propertize "foo" 'face 'bold 'read-only t) + +** push and pop macros. + +Simple versions of the push and pop macros of Common Lisp +are now defined in Emacs Lisp. These macros allow only symbols +as the place that holds the list to be changed. + +(push NEWELT LISTNAME) add NEWELT to the front of LISTNAME's value. +(pop LISTNAME) return first elt of LISTNAME, and remove it + (thus altering the value of LISTNAME). + +** New dolist and dotimes macros. + +Simple versions of the dolist and dotimes macros of Common Lisp +are now defined in Emacs Lisp. + +(dolist (VAR LIST [RESULT]) BODY...) + Execute body once for each element of LIST, + using the variable VAR to hold the current element. + Then return the value of RESULT, or nil if RESULT is omitted. + +(dotimes (VAR COUNT [RESULT]) BODY...) + Execute BODY with VAR bound to successive integers running from 0, + inclusive, to COUNT, exclusive. + Then return the value of RESULT, or nil if RESULT is omitted. + +** Regular expressions now support Posix character classes such as +[:alpha:], [:space:] and so on. These must be used within a character +class--for instance, [-[:digit:].+] matches digits or a period +or a sign. + +[:digit:] matches 0 through 9 +[:cntrl:] matches ASCII control characters +[:xdigit:] matches 0 through 9, a through f and A through F. +[:blank:] matches space and tab only +[:graph:] matches graphic characters--everything except ASCII control chars, + space, and DEL. +[:print:] matches printing characters--everything except ASCII control chars + and DEL. +[:alnum:] matches letters and digits. + (But at present, for multibyte characters, + it matches anything that has word syntax.) +[:alpha:] matches letters. + (But at present, for multibyte characters, + it matches anything that has word syntax.) +[:ascii:] matches ASCII (unibyte) characters. +[:nonascii:] matches non-ASCII (multibyte) characters. +[:lower:] matches anything lower-case. +[:punct:] matches punctuation. + (But at present, for multibyte characters, + it matches anything that has non-word syntax.) +[:space:] matches anything that has whitespace syntax. +[:upper:] matches anything upper-case. +[:word:] matches anything that has word syntax. + +** Emacs now has built-in hash tables. + +The following functions are defined for hash tables: + +- Function: make-hash-table ARGS + +The argument list ARGS consists of keyword/argument pairs. All arguments +are optional. The following arguments are defined: + +:test TEST + +TEST must be a symbol specifying how to compare keys. Default is `eql'. +Predefined are `eq', `eql' and `equal'. If TEST is not predefined, +it must have been defined with `define-hash-table-test'. + +:size SIZE + +SIZE must be an integer > 0 giving a hint to the implementation how +many elements will be put in the hash table. Default size is 65. + +:rehash-size REHASH-SIZE + +REHASH-SIZE specifies by how much to grow a hash table once it becomes +full. If REHASH-SIZE is an integer, add that to the hash table's old +size to get the new size. Otherwise, REHASH-SIZE must be a float > +1.0, and the new size is computed by multiplying REHASH-SIZE with the +old size. Default rehash size is 1.5. + +:rehash-threshold THRESHOLD + +THRESHOLD must be a float > 0 and <= 1.0 specifying when to resize the +hash table. It is resized when the ratio of (number of entries) / +(size of hash table) is >= THRESHOLD. Default threshold is 0.8. + +:weakness WEAK + +WEAK must be either nil, one of the symbols `key, `value', +`key-or-value', `key-and-value', or t, meaning the same as +`key-and-value'. Entries are removed from weak tables during garbage +collection if their key and/or value are not referenced elsewhere +outside of the hash table. Default are non-weak hash tables. + +- Function: makehash &optional TEST + +Similar to make-hash-table, but only TEST can be specified. + +- Function: hash-table-p TABLE + +Returns non-nil if TABLE is a hash table object. + +- Function: copy-hash-table TABLE + +Returns a copy of TABLE. Only the table itself is copied, keys and +values are shared. + +- Function: hash-table-count TABLE + +Returns the number of entries in TABLE. + +- Function: hash-table-rehash-size TABLE + +Returns the rehash size of TABLE. + +- Function: hash-table-rehash-threshold TABLE + +Returns the rehash threshold of TABLE. + +- Function: hash-table-rehash-size TABLE + +Returns the size of TABLE. + +- Function: hash-table-test TABLE + +Returns the test TABLE uses to compare keys. + +- Function: hash-table-weakness TABLE + +Returns the weakness specified for TABLE. + +- Function: clrhash TABLE + +Clear TABLE. + +- Function: gethash KEY TABLE &optional DEFAULT + +Look up KEY in TABLE and return its associated VALUE or DEFAULT if +not found. + +- Function: puthash KEY VALUE TABLE + +Associate KEY with VALUE in TABLE. If KEY is already associated with +another value, replace the old value with VALUE. + +- Function: remhash KEY TABLE + +Remove KEY from TABLE if it is there. + +- Function: maphash FUNCTION TABLE + +Call FUNCTION for all elements in TABLE. FUNCTION must take two +arguments KEY and VALUE. + +- Function: sxhash OBJ + +Return a hash code for Lisp object OBJ. + +- Function: define-hash-table-test NAME TEST-FN HASH-FN + +Define a new hash table test named NAME. If NAME is specified as +a test in `make-hash-table', the table created will use TEST-FN for +comparing keys, and HASH-FN to compute hash codes for keys. Test +and hash function are stored as symbol property `hash-table-test' +of NAME with a value of (TEST-FN HASH-FN). + +TEST-FN must take two arguments and return non-nil if they are the same. + +HASH-FN must take one argument and return an integer that is the hash +code of the argument. The function should use the whole range of +integer values for hash code computation, including negative integers. + +Example: The following creates a hash table whose keys are supposed to +be strings that are compared case-insensitively. + + (defun case-fold-string= (a b) + (compare-strings a nil nil b nil nil t)) + + (defun case-fold-string-hash (a) + (sxhash (upcase a))) + + (define-hash-table-test 'case-fold 'case-fold-string= + 'case-fold-string-hash)) + + (make-hash-table :test 'case-fold) + +** The Lisp reader handles circular structure. + +It now works to use the #N= and #N# constructs to represent +circular structures. For example, #1=(a . #1#) represents +a cons cell which is its own cdr. + +** The Lisp printer handles circular structure. + +If you bind print-circle to a non-nil value, the Lisp printer outputs +#N= and #N# constructs to represent circular and shared structure. + +** If the second argument to `move-to-column' is anything but nil or +t, that means replace a tab with spaces if necessary to reach the +specified column, but do not add spaces at the end of the line if it +is too short to reach that column. + +** perform-replace has a new feature: the REPLACEMENTS argument may +now be a cons cell (FUNCTION . DATA). This means to call FUNCTION +after each match to get the replacement text. FUNCTION is called with +two arguments: DATA, and the number of replacements already made. + +If the FROM-STRING contains any upper-case letters, +perform-replace also turns off `case-fold-search' temporarily +and inserts the replacement text without altering case in it. + +** The function buffer-size now accepts an optional argument +to specify which buffer to return the size of. + +** The calendar motion commands now run the normal hook +calendar-move-hook after moving point. + +** The new variable small-temporary-file-directory specifies a +directory to use for creating temporary files that are likely to be +small. (Certain Emacs features use this directory.) If +small-temporary-file-directory is nil, they use +temporary-file-directory instead. + +** The variable `inhibit-modification-hooks', if non-nil, inhibits all +the hooks that track changes in the buffer. This affects +`before-change-functions' and `after-change-functions', as well as +hooks attached to text properties and overlay properties. + +** assq-delete-all is a new function that deletes all the +elements of an alist which have a car `eq' to a particular value. + +** make-temp-file provides a more reliable way to create a temporary file. + +make-temp-file is used like make-temp-name, except that it actually +creates the file before it returns. This prevents a timing error, +ensuring that no other job can use the same name for a temporary file. + +** New exclusive-open feature in `write-region' + +The optional seventh arg is now called MUSTBENEW. If non-nil, it insists +on a check for an existing file with the same name. If MUSTBENEW +is `excl', that means to get an error if the file already exists; +never overwrite. If MUSTBENEW is neither nil nor `excl', that means +ask for confirmation before overwriting, but do go ahead and +overwrite the file if the user gives confirmation. + +If the MUSTBENEW argument in `write-region' is `excl', +that means to use a special feature in the `open' system call +to get an error if the file exists at that time. +The error reported is `file-already-exists'. + +** Function `format' now handles text properties. + +Text properties of the format string are applied to the result string. +If the result string is longer than the format string, text properties +ending at the end of the format string are extended to the end of the +result string. + +Text properties from string arguments are applied to the result +string where arguments appear in the result string. + +Example: + + (let ((s1 "hello, %s") + (s2 "world")) + (put-text-property 0 (length s1) 'face 'bold s1) + (put-text-property 0 (length s2) 'face 'italic s2) + (format s1 s2)) + +results in a bold-face string with an italic `world' at the end. + +** Messages can now be displayed with text properties. + +Text properties are handled as described above for function `format'. +The following example displays a bold-face message with an italic +argument in it. + + (let ((msg "hello, %s!") + (arg "world")) + (put-text-property 0 (length msg) 'face 'bold msg) + (put-text-property 0 (length arg) 'face 'italic arg) + (message msg arg)) + +** Sound support + +Emacs supports playing sound files on GNU/Linux and the free BSDs +(Voxware driver and native BSD driver, aka as Luigi's driver). + +Currently supported file formats are RIFF-WAVE (*.wav) and Sun Audio +(*.au). You must configure Emacs with the option `--with-sound=yes' +to enable sound support. + +Sound files can be played by calling (play-sound SOUND). SOUND is a +list of the form `(sound PROPERTY...)'. The function is only defined +when sound support is present for the system on which Emacs runs. The +functions runs `play-sound-functions' with one argument which is the +sound to play, before playing the sound. + +The following sound properties are supported: + +- `:file FILE' + +FILE is a file name. If FILE isn't an absolute name, it will be +searched relative to `data-directory'. + +- `:data DATA' + +DATA is a string containing sound data. Either :file or :data +may be present, but not both. + +- `:volume VOLUME' + +VOLUME must be an integer in the range 0..100 or a float in the range +0..1. This property is optional. + +- `:device DEVICE' + +DEVICE is a string specifying the system device on which to play the +sound. The default device is system-dependent. + +Other properties are ignored. + +An alternative interface is called as +(play-sound-file FILE &optional VOLUME DEVICE). + +** `multimedia' is a new Finder keyword and Custom group. + +** keywordp is a new predicate to test efficiently for an object being +a keyword symbol. + +** Changes to garbage collection + +*** The function garbage-collect now additionally returns the number +of live and free strings. + +*** There is a new variable `strings-consed' holding the number of +strings that have been consed so far. + + +* Lisp-level Display features added after release 2.6 of the Emacs +Lisp Manual + +** The user-option `resize-mini-windows' controls how Emacs resizes +mini-windows. + +** The function `pos-visible-in-window-p' now has a third optional +argument, PARTIALLY. If a character is only partially visible, nil is +returned, unless PARTIALLY is non-nil. + +** On window systems, `glyph-table' is no longer used. + +** Help strings in menu items are now used to provide `help-echo' text. + +** The function `image-size' can be used to determine the size of an +image. + +- Function: image-size SPEC &optional PIXELS FRAME + +Return the size of an image as a pair (WIDTH . HEIGHT). + +SPEC is an image specification. PIXELS non-nil means return sizes +measured in pixels, otherwise return sizes measured in canonical +character units (fractions of the width/height of the frame's default +font). FRAME is the frame on which the image will be displayed. +FRAME nil or omitted means use the selected frame. + +** The function `image-mask-p' can be used to determine if an image +has a mask bitmap. + +- Function: image-mask-p SPEC &optional FRAME + +Return t if image SPEC has a mask bitmap. +FRAME is the frame on which the image will be displayed. FRAME nil +or omitted means use the selected frame. + +** The function `find-image' can be used to find a usable image +satisfying one of a list of specifications. + +** The STRING argument of `put-image' and `insert-image' is now +optional. + +** Image specifications may contain the property `:ascent center' (see +below). + + +* New Lisp-level Display features in Emacs 21.1 + +** The function tty-suppress-bold-inverse-default-colors can be used +to make Emacs avoid displaying text with bold black foreground on TTYs. + +Some terminals, notably PC consoles, emulate bold text by displaying +text in brighter colors. On such a console, a bold black foreground +is displayed in a gray color. If this turns out to be hard to read on +your monitor---the problem occurred with the mode line on +laptops---you can instruct Emacs to ignore the text's boldness, and to +just display it black instead. + +This situation can't be detected automatically. You will have to put +a line like + + (tty-suppress-bold-inverse-default-colors t) + +in your `.emacs'. + +** New face implementation. + +Emacs faces have been reimplemented from scratch. They don't use XLFD +font names anymore and face merging now works as expected. + +*** New faces. + +Each face can specify the following display attributes: + + 1. Font family or fontset alias name. + + 2. Relative proportionate width, aka character set width or set + width (swidth), e.g. `semi-compressed'. + + 3. Font height in 1/10pt + + 4. Font weight, e.g. `bold'. + + 5. Font slant, e.g. `italic'. + + 6. Foreground color. + + 7. Background color. + + 8. Whether or not characters should be underlined, and in what color. + + 9. Whether or not characters should be displayed in inverse video. + + 10. A background stipple, a bitmap. + + 11. Whether or not characters should be overlined, and in what color. + + 12. Whether or not characters should be strike-through, and in what + color. + + 13. Whether or not a box should be drawn around characters, its + color, the width of the box lines, and 3D appearance. + +Faces are frame-local by nature because Emacs allows to define the +same named face (face names are symbols) differently for different +frames. Each frame has an alist of face definitions for all named +faces. The value of a named face in such an alist is a Lisp vector +with the symbol `face' in slot 0, and a slot for each of the face +attributes mentioned above. + +There is also a global face alist `face-new-frame-defaults'. Face +definitions from this list are used to initialize faces of newly +created frames. + +A face doesn't have to specify all attributes. Those not specified +have a nil value. Faces specifying all attributes are called +`fully-specified'. + +*** Face merging. + +The display style of a given character in the text is determined by +combining several faces. This process is called `face merging'. Any +aspect of the display style that isn't specified by overlays or text +properties is taken from the `default' face. Since it is made sure +that the default face is always fully-specified, face merging always +results in a fully-specified face. + +*** Face realization. + +After all face attributes for a character have been determined by +merging faces of that character, that face is `realized'. The +realization process maps face attributes to what is physically +available on the system where Emacs runs. The result is a `realized +face' in form of an internal structure which is stored in the face +cache of the frame on which it was realized. + +Face realization is done in the context of the charset of the +character to display because different fonts and encodings are used +for different charsets. In other words, for characters of different +charsets, different realized faces are needed to display them. + +Except for composite characters, faces are always realized for a +specific character set and contain a specific font, even if the face +being realized specifies a fontset. The reason is that the result of +the new font selection stage is better than what can be done with +statically defined font name patterns in fontsets. + +In unibyte text, Emacs' charsets aren't applicable; function +`char-charset' reports ASCII for all characters, including those > +0x7f. The X registry and encoding of fonts to use is determined from +the variable `face-default-registry' in this case. The variable is +initialized at Emacs startup time from the font the user specified for +Emacs. + +Currently all unibyte text, i.e. all buffers with +`enable-multibyte-characters' nil are displayed with fonts of the same +registry and encoding `face-default-registry'. This is consistent +with the fact that languages can also be set globally, only. + +**** Clearing face caches. + +The Lisp function `clear-face-cache' can be called to clear face caches +on all frames. If called with a non-nil argument, it will also unload +unused fonts. + +*** Font selection. + +Font selection tries to find the best available matching font for a +given (charset, face) combination. This is done slightly differently +for faces specifying a fontset, or a font family name. + +If the face specifies a fontset name, that fontset determines a +pattern for fonts of the given charset. If the face specifies a font +family, a font pattern is constructed. Charset symbols have a +property `x-charset-registry' for that purpose that maps a charset to +an XLFD registry and encoding in the font pattern constructed. + +Available fonts on the system on which Emacs runs are then matched +against the font pattern. The result of font selection is the best +match for the given face attributes in this font list. + +Font selection can be influenced by the user. + +The user can specify the relative importance he gives the face +attributes width, height, weight, and slant by setting +face-font-selection-order (faces.el) to a list of face attribute +names. The default is (:width :height :weight :slant), and means +that font selection first tries to find a good match for the font +width specified by a face, then---within fonts with that width---tries +to find a best match for the specified font height, etc. + +Setting `face-font-family-alternatives' allows the user to specify +alternative font families to try if a family specified by a face +doesn't exist. + +Setting `face-font-registry-alternatives' allows the user to specify +all alternative font registry names to try for a face specifying a +registry. + +Please note that the interpretations of the above two variables are +slightly different. + +Setting face-ignored-fonts allows the user to ignore specific fonts. + + +**** Scalable fonts + +Emacs can make use of scalable fonts but doesn't do so by default, +since the use of too many or too big scalable fonts may crash XFree86 +servers. + +To enable scalable font use, set the variable +`scalable-fonts-allowed'. A value of nil, the default, means never use +scalable fonts. A value of t means any scalable font may be used. +Otherwise, the value must be a list of regular expressions. A +scalable font may then be used if it matches a regular expression from +that list. Example: + + (setq scalable-fonts-allowed '("muleindian-2$")) + +allows the use of scalable fonts with registry `muleindian-2'. + +*** Functions and variables related to font selection. + +- Function: x-family-fonts &optional FAMILY FRAME + +Return a list of available fonts of family FAMILY on FRAME. If FAMILY +is omitted or nil, list all families. Otherwise, FAMILY must be a +string, possibly containing wildcards `?' and `*'. + +If FRAME is omitted or nil, use the selected frame. Each element of +the result is a vector [FAMILY WIDTH POINT-SIZE WEIGHT SLANT FIXED-P +FULL REGISTRY-AND-ENCODING]. FAMILY is the font family name. +POINT-SIZE is the size of the font in 1/10 pt. WIDTH, WEIGHT, and +SLANT are symbols describing the width, weight and slant of the font. +These symbols are the same as for face attributes. FIXED-P is non-nil +if the font is fixed-pitch. FULL is the full name of the font, and +REGISTRY-AND-ENCODING is a string giving the registry and encoding of +the font. The result list is sorted according to the current setting +of the face font sort order. + +- Function: x-font-family-list + +Return a list of available font families on FRAME. If FRAME is +omitted or nil, use the selected frame. Value is a list of conses +(FAMILY . FIXED-P) where FAMILY is a font family, and FIXED-P is +non-nil if fonts of that family are fixed-pitch. + +- Variable: font-list-limit + +Limit for font matching. If an integer > 0, font matching functions +won't load more than that number of fonts when searching for a +matching font. The default is currently 100. + +*** Setting face attributes. + +For the most part, the new face implementation is interface-compatible +with the old one. Old face attribute related functions are now +implemented in terms of the new functions `set-face-attribute' and +`face-attribute'. + +Face attributes are identified by their names which are keyword +symbols. All attributes can be set to `unspecified'. + +The following attributes are recognized: + +`:family' + +VALUE must be a string specifying the font family, e.g. ``courier'', +or a fontset alias name. If a font family is specified, wild-cards `*' +and `?' are allowed. + +`:width' + +VALUE specifies the relative proportionate width of the font to use. +It must be one of the symbols `ultra-condensed', `extra-condensed', +`condensed', `semi-condensed', `normal', `semi-expanded', `expanded', +`extra-expanded', or `ultra-expanded'. + +`:height' + +VALUE must be either an integer specifying the height of the font to use +in 1/10 pt, a floating point number specifying the amount by which to +scale any underlying face, or a function, which is called with the old +height (from the underlying face), and should return the new height. + +`:weight' + +VALUE specifies the weight of the font to use. It must be one of the +symbols `ultra-bold', `extra-bold', `bold', `semi-bold', `normal', +`semi-light', `light', `extra-light', `ultra-light'. + +`:slant' + +VALUE specifies the slant of the font to use. It must be one of the +symbols `italic', `oblique', `normal', `reverse-italic', or +`reverse-oblique'. + +`:foreground', `:background' + +VALUE must be a color name, a string. + +`:underline' + +VALUE specifies whether characters in FACE should be underlined. If +VALUE is t, underline with foreground color of the face. If VALUE is +a string, underline with that color. If VALUE is nil, explicitly +don't underline. + +`:overline' + +VALUE specifies whether characters in FACE should be overlined. If +VALUE is t, overline with foreground color of the face. If VALUE is a +string, overline with that color. If VALUE is nil, explicitly don't +overline. + +`:strike-through' + +VALUE specifies whether characters in FACE should be drawn with a line +striking through them. If VALUE is t, use the foreground color of the +face. If VALUE is a string, strike-through with that color. If VALUE +is nil, explicitly don't strike through. + +`:box' + +VALUE specifies whether characters in FACE should have a box drawn +around them. If VALUE is nil, explicitly don't draw boxes. If +VALUE is t, draw a box with lines of width 1 in the foreground color +of the face. If VALUE is a string, the string must be a color name, +and the box is drawn in that color with a line width of 1. Otherwise, +VALUE must be a property list of the form `(:line-width WIDTH +:color COLOR :style STYLE)'. If a keyword/value pair is missing from +the property list, a default value will be used for the value, as +specified below. WIDTH specifies the width of the lines to draw; it +defaults to 1. COLOR is the name of the color to draw in, default is +the foreground color of the face for simple boxes, and the background +color of the face for 3D boxes. STYLE specifies whether a 3D box +should be draw. If STYLE is `released-button', draw a box looking +like a released 3D button. If STYLE is `pressed-button' draw a box +that appears like a pressed button. If STYLE is nil, the default if +the property list doesn't contain a style specification, draw a 2D +box. + +`:inverse-video' + +VALUE specifies whether characters in FACE should be displayed in +inverse video. VALUE must be one of t or nil. + +`:stipple' + +If VALUE is a string, it must be the name of a file of pixmap data. +The directories listed in the `x-bitmap-file-path' variable are +searched. Alternatively, VALUE may be a list of the form (WIDTH +HEIGHT DATA) where WIDTH and HEIGHT are the size in pixels, and DATA +is a string containing the raw bits of the bitmap. VALUE nil means +explicitly don't use a stipple pattern. + +For convenience, attributes `:family', `:width', `:height', `:weight', +and `:slant' may also be set in one step from an X font name: + +`:font' + +Set font-related face attributes from VALUE. VALUE must be a valid +XLFD font name. If it is a font name pattern, the first matching font +is used--this is for compatibility with the behavior of previous +versions of Emacs. + +For compatibility with Emacs 20, keywords `:bold' and `:italic' can +be used to specify that a bold or italic font should be used. VALUE +must be t or nil in that case. A value of `unspecified' is not allowed." + +Please see also the documentation of `set-face-attribute' and +`defface'. + +`:inherit' + +VALUE is the name of a face from which to inherit attributes, or a list +of face names. Attributes from inherited faces are merged into the face +like an underlying face would be, with higher priority than underlying faces. + +*** Face attributes and X resources + +The following X resource names can be used to set face attributes +from X resources: + + Face attribute X resource class +----------------------------------------------------------------------- + :family attributeFamily . Face.AttributeFamily + :width attributeWidth Face.AttributeWidth + :height attributeHeight Face.AttributeHeight + :weight attributeWeight Face.AttributeWeight + :slant attributeSlant Face.AttributeSlant + foreground attributeForeground Face.AttributeForeground + :background attributeBackground . Face.AttributeBackground + :overline attributeOverline Face.AttributeOverline + :strike-through attributeStrikeThrough Face.AttributeStrikeThrough + :box attributeBox Face.AttributeBox + :underline attributeUnderline Face.AttributeUnderline + :inverse-video attributeInverse Face.AttributeInverse + :stipple attributeStipple Face.AttributeStipple + or attributeBackgroundPixmap + Face.AttributeBackgroundPixmap + :font attributeFont Face.AttributeFont + :bold attributeBold Face.AttributeBold + :italic attributeItalic . Face.AttributeItalic + :font attributeFont Face.AttributeFont + +*** Text property `face'. + +The value of the `face' text property can now be a single face +specification or a list of such specifications. Each face +specification can be + +1. A symbol or string naming a Lisp face. + +2. A property list of the form (KEYWORD VALUE ...) where each + KEYWORD is a face attribute name, and VALUE is an appropriate value + for that attribute. Please see the doc string of `set-face-attribute' + for face attribute names. + +3. Conses of the form (FOREGROUND-COLOR . COLOR) or + (BACKGROUND-COLOR . COLOR) where COLOR is a color name. This is + for compatibility with previous Emacs versions. + +** Support functions for colors on text-only terminals. + +The function `tty-color-define' can be used to define colors for use +on TTY and MSDOS frames. It maps a color name to a color number on +the terminal. Emacs defines a couple of common color mappings by +default. You can get defined colors with a call to +`defined-colors'. The function `tty-color-clear' can be +used to clear the mapping table. + +** Unified support for colors independent of frame type. + +The new functions `defined-colors', `color-defined-p', `color-values', +and `display-color-p' work for any type of frame. On frames whose +type is neither x nor w32, these functions transparently map X-style +color specifications to the closest colors supported by the frame +display. Lisp programs should use these new functions instead of the +old `x-defined-colors', `x-color-defined-p', `x-color-values', and +`x-display-color-p'. (The old function names are still available for +compatibility; they are now aliases of the new names.) Lisp programs +should no more look at the value of the variable window-system to +modify their color-related behavior. + +The primitives `color-gray-p' and `color-supported-p' also work for +any frame type. + +** Platform-independent functions to describe display capabilities. + +The new functions `display-mouse-p', `display-popup-menus-p', +`display-graphic-p', `display-selections-p', `display-screens', +`display-pixel-width', `display-pixel-height', `display-mm-width', +`display-mm-height', `display-backing-store', `display-save-under', +`display-planes', `display-color-cells', `display-visual-class', and +`display-grayscale-p' describe the basic capabilities of a particular +display. Lisp programs should call these functions instead of testing +the value of the variables `window-system' or `system-type', or calling +platform-specific functions such as `x-display-pixel-width'. + +The new function `display-images-p' returns non-nil if a particular +display can display image files. + +** The minibuffer prompt is now actually inserted in the minibuffer. + +This makes it possible to scroll through the prompt, if you want to. +To disallow this completely (like previous versions of emacs), customize +the variable `minibuffer-prompt-properties', and turn on the +`Inviolable' option. + +The function `minibuffer-prompt-end' returns the current position of the +end of the minibuffer prompt, if the minibuffer is current. +Otherwise, it returns `(point-min)'. + +** New `field' abstraction in buffers. + +There is now code to support an abstraction called `fields' in emacs +buffers. A field is a contiguous region of text with the same `field' +property (which can be a text property or an overlay). + +Many emacs functions, such as forward-word, forward-sentence, +forward-paragraph, beginning-of-line, etc., stop moving when they come +to the boundary between fields; beginning-of-line and end-of-line will +not let the point move past the field boundary, but other movement +commands continue into the next field if repeated. Stopping at field +boundaries can be suppressed programmatically by binding +`inhibit-field-text-motion' to a non-nil value around calls to these +functions. + +Now that the minibuffer prompt is inserted into the minibuffer, it is in +a separate field from the user-input part of the buffer, so that common +editing commands treat the user's text separately from the prompt. + +The following functions are defined for operating on fields: + +- Function: constrain-to-field NEW-POS OLD-POS &optional ESCAPE-FROM-EDGE ONLY-IN-LINE INHIBIT-CAPTURE-PROPERTY + +Return the position closest to NEW-POS that is in the same field as OLD-POS. + +A field is a region of text with the same `field' property. +If NEW-POS is nil, then the current point is used instead, and set to the +constrained position if that is different. + +If OLD-POS is at the boundary of two fields, then the allowable +positions for NEW-POS depends on the value of the optional argument +ESCAPE-FROM-EDGE: If ESCAPE-FROM-EDGE is nil, then NEW-POS is +constrained to the field that has the same `field' char-property +as any new characters inserted at OLD-POS, whereas if ESCAPE-FROM-EDGE +is non-nil, NEW-POS is constrained to the union of the two adjacent +fields. Additionally, if two fields are separated by another field with +the special value `boundary', then any point within this special field is +also considered to be `on the boundary'. + +If the optional argument ONLY-IN-LINE is non-nil and constraining +NEW-POS would move it to a different line, NEW-POS is returned +unconstrained. This useful for commands that move by line, like +C-n or C-a, which should generally respect field boundaries +only in the case where they can still move to the right line. + +If the optional argument INHIBIT-CAPTURE-PROPERTY is non-nil, and OLD-POS has +a non-nil property of that name, then any field boundaries are ignored. + +Field boundaries are not noticed if `inhibit-field-text-motion' is non-nil. + +- Function: delete-field &optional POS + +Delete the field surrounding POS. +A field is a region of text with the same `field' property. +If POS is nil, the value of point is used for POS. + +- Function: field-beginning &optional POS ESCAPE-FROM-EDGE + +Return the beginning of the field surrounding POS. +A field is a region of text with the same `field' property. +If POS is nil, the value of point is used for POS. +If ESCAPE-FROM-EDGE is non-nil and POS is at the beginning of its +field, then the beginning of the *previous* field is returned. + +- Function: field-end &optional POS ESCAPE-FROM-EDGE + +Return the end of the field surrounding POS. +A field is a region of text with the same `field' property. +If POS is nil, the value of point is used for POS. +If ESCAPE-FROM-EDGE is non-nil and POS is at the end of its field, +then the end of the *following* field is returned. + +- Function: field-string &optional POS + +Return the contents of the field surrounding POS as a string. +A field is a region of text with the same `field' property. +If POS is nil, the value of point is used for POS. + +- Function: field-string-no-properties &optional POS + +Return the contents of the field around POS, without text-properties. +A field is a region of text with the same `field' property. +If POS is nil, the value of point is used for POS. + +** Image support. + +Emacs can now display images. Images are inserted into text by giving +strings or buffer text a `display' text property containing one of +(AREA IMAGE) or IMAGE. The display of the `display' property value +replaces the display of the characters having that property. + +If the property value has the form (AREA IMAGE), AREA must be one of +`(margin left-margin)', `(margin right-margin)' or `(margin nil)'. If +AREA is `(margin nil)', IMAGE will be displayed in the text area of a +window, otherwise it will be displayed in the left or right marginal +area. + +IMAGE is an image specification. + +*** Image specifications + +Image specifications are lists of the form `(image PROPS)' where PROPS +is a property list whose keys are keyword symbols. Each +specifications must contain a property `:type TYPE' with TYPE being a +symbol specifying the image type, e.g. `xbm'. Properties not +described below are ignored. + +The following is a list of properties all image types share. + +`:ascent ASCENT' + +ASCENT must be a number in the range 0..100, or the symbol `center'. +If it is a number, it specifies the percentage of the image's height +to use for its ascent. + +If not specified, ASCENT defaults to the value 50 which means that the +image will be centered with the base line of the row it appears in. + +If ASCENT is `center' the image is vertically centered around a +centerline which is the vertical center of text drawn at the position +of the image, in the manner specified by the text properties and +overlays that apply to the image. + +`:margin MARGIN' + +MARGIN must be either a number >= 0 specifying how many pixels to put +as margin around the image, or a pair (X . Y) with X specifying the +horizontal margin and Y specifying the vertical margin. Default is 0. + +`:relief RELIEF' + +RELIEF is analogous to the `:relief' attribute of faces. Puts a relief +around an image. + +`:conversion ALGO' + +Apply an image algorithm to the image before displaying it. + +ALGO `laplace' or `emboss' means apply a Laplace or ``emboss'' +edge-detection algorithm to the image. + +ALGO `(edge-detection :matrix MATRIX :color-adjust ADJUST)' means +apply a general edge-detection algorithm. MATRIX must be either a +nine-element list or a nine-element vector of numbers. A pixel at +position x/y in the transformed image is computed from original pixels +around that position. MATRIX specifies, for each pixel in the +neighborhood of x/y, a factor with which that pixel will influence the +transformed pixel; element 0 specifies the factor for the pixel at +x-1/y-1, element 1 the factor for the pixel at x/y-1 etc. as shown +below. + + (x-1/y-1 x/y-1 x+1/y-1 + x-1/y x/y x+1/y + x-1/y+1 x/y+1 x+1/y+1) + +The resulting pixel is computed from the color intensity of the color +resulting from summing up the RGB values of surrounding pixels, +multiplied by the specified factors, and dividing that sum by the sum +of the factors' absolute values. + +Laplace edge-detection currently uses a matrix of + + (1 0 0 + 0 0 0 + 9 9 -1) + +Emboss edge-detection uses a matrix of + + ( 2 -1 0 + -1 0 1 + 0 1 -2) + +ALGO `disabled' means transform the image so that it looks +``disabled''. + +`:mask MASK' + +If MASK is `heuristic' or `(heuristic BG)', build a clipping mask for +the image, so that the background of a frame is visible behind the +image. If BG is not specified, or if BG is t, determine the +background color of the image by looking at the 4 corners of the +image, assuming the most frequently occurring color from the corners is +the background color of the image. Otherwise, BG must be a list `(RED +GREEN BLUE)' specifying the color to assume for the background of the +image. + +If MASK is nil, remove a mask from the image, if it has one. Images +in some formats include a mask which can be removed by specifying +`:mask nil'. + +`:file FILE' + +Load image from FILE. If FILE is not absolute after expanding it, +search for the image in `data-directory'. Some image types support +building images from data. When this is done, no `:file' property +may be present in the image specification. + +`:data DATA' + +Get image data from DATA. (As of this writing, this is not yet +supported for image type `postscript'). Either :file or :data may be +present in an image specification, but not both. All image types +support strings as DATA, some types allow additional types of DATA. + +*** Supported image types + +**** XBM, image type `xbm'. + +XBM images don't require an external library. Additional image +properties supported are: + +`:foreground FG' + +FG must be a string specifying the image foreground color, or nil +meaning to use the default. Default is the frame's foreground color. + +`:background BG' + +BG must be a string specifying the image background color, or nil +meaning to use the default. Default is the frame's background color. + +XBM images can be constructed from data instead of file. In this +case, the image specification must contain the following properties +instead of a `:file' property. + +`:width WIDTH' + +WIDTH specifies the width of the image in pixels. + +`:height HEIGHT' + +HEIGHT specifies the height of the image in pixels. + +`:data DATA' + +DATA must be either + + 1. a string large enough to hold the bitmap data, i.e. it must + have a size >= (WIDTH + 7) / 8 * HEIGHT + + 2. a bool-vector of size >= WIDTH * HEIGHT + + 3. a vector of strings or bool-vectors, one for each line of the + bitmap. + + 4. a string that's an in-memory XBM file. Neither width nor + height may be specified in this case because these are defined + in the file. + +**** XPM, image type `xpm' + +XPM images require the external library `libXpm', package +`xpm-3.4k.tar.gz', version 3.4k or later. Make sure the library is +found when Emacs is configured by supplying appropriate paths via +`--x-includes' and `--x-libraries'. + +Additional image properties supported are: + +`:color-symbols SYMBOLS' + +SYMBOLS must be a list of pairs (NAME . COLOR), with NAME being the +name of color as it appears in an XPM file, and COLOR being an X color +name. + +XPM images can be built from memory instead of files. In that case, +add a `:data' property instead of a `:file' property. + +The XPM library uses libz in its implementation so that it is able +to display compressed images. + +**** PBM, image type `pbm' + +PBM images don't require an external library. Color, gray-scale and +mono images are supported. Additional image properties supported for +mono images are: + +`:foreground FG' + +FG must be a string specifying the image foreground color, or nil +meaning to use the default. Default is the frame's foreground color. + +`:background FG' + +BG must be a string specifying the image background color, or nil +meaning to use the default. Default is the frame's background color. + +**** JPEG, image type `jpeg' + +Support for JPEG images requires the external library `libjpeg', +package `jpegsrc.v6a.tar.gz', or later. There are no additional image +properties defined. + +**** TIFF, image type `tiff' + +Support for TIFF images requires the external library `libtiff', +package `tiff-v3.4-tar.gz', or later. There are no additional image +properties defined. + +**** GIF, image type `gif' + +Support for GIF images requires the external library `libungif', package +`libungif-4.1.0', or later. + +Additional image properties supported are: + +`:index INDEX' + +INDEX must be an integer >= 0. Load image number INDEX from a +multi-image GIF file. If INDEX is too large, the image displays +as a hollow box. + +This could be used to implement limited support for animated GIFs. +For example, the following function displays a multi-image GIF file +at point-min in the current buffer, switching between sub-images +every 0.1 seconds. + +(defun show-anim (file max) + "Display multi-image GIF file FILE which contains MAX subimages." + (display-anim (current-buffer) file 0 max t)) + +(defun display-anim (buffer file idx max first-time) + (when (= idx max) + (setq idx 0)) + (let ((img (create-image file nil nil :index idx))) + (save-excursion + (set-buffer buffer) + (goto-char (point-min)) + (unless first-time (delete-char 1)) + (insert-image img "x")) + (run-with-timer 0.1 nil 'display-anim buffer file (1+ idx) max nil))) + +**** PNG, image type `png' + +Support for PNG images requires the external library `libpng', +package `libpng-1.0.2.tar.gz', or later. There are no additional image +properties defined. + +**** Ghostscript, image type `postscript'. + +Additional image properties supported are: + +`:pt-width WIDTH' + +WIDTH is width of the image in pt (1/72 inch). WIDTH must be an +integer. This is a required property. + +`:pt-height HEIGHT' + +HEIGHT specifies the height of the image in pt (1/72 inch). HEIGHT +must be a integer. This is an required property. + +`:bounding-box BOX' + +BOX must be a list or vector of 4 integers giving the bounding box of +the PS image, analogous to the `BoundingBox' comment found in PS +files. This is an required property. + +Part of the Ghostscript interface is implemented in Lisp. See +lisp/gs.el. + +*** Lisp interface. + +The variable `image-types' contains a list of those image types +which are supported in the current configuration. + +Images are stored in an image cache and removed from the cache when +they haven't been displayed for `image-cache-eviction-delay seconds. +The function `clear-image-cache' can be used to clear the image cache +manually. Images in the cache are compared with `equal', i.e. all +images with `equal' specifications share the same image. + +*** Simplified image API, image.el + +The new Lisp package image.el contains functions that simplify image +creation and putting images into text. The function `create-image' +can be used to create images. The macro `defimage' can be used to +define an image based on available image types. The functions +`put-image' and `insert-image' can be used to insert an image into a +buffer. + +** Display margins. + +Windows can now have margins which are used for special text +and images. + +To give a window margins, either set the buffer-local variables +`left-margin-width' and `right-margin-width', or call +`set-window-margins'. The function `window-margins' can be used to +obtain the current settings. To make `left-margin-width' and +`right-margin-width' take effect, you must set them before displaying +the buffer in a window, or use `set-window-buffer' to force an update +of the display margins. + +You can put text in margins by giving it a `display' text property +containing a pair of the form `(LOCATION . VALUE)', where LOCATION is +one of `left-margin' or `right-margin' or nil. VALUE can be either a +string, an image specification or a stretch specification (see later +in this file). + +** Help display + +Emacs displays short help messages in the echo area, when the mouse +moves over a tool-bar item or a piece of text that has a text property +`help-echo'. This feature also applies to strings in the mode line +that have a `help-echo' property. + +If the value of the `help-echo' property is a function, that function +is called with three arguments WINDOW, OBJECT and POSITION. WINDOW is +the window in which the help was found. + +If OBJECT is a buffer, POS is the position in the buffer where the +`help-echo' text property was found. + +If OBJECT is an overlay, that overlay has a `help-echo' property, and +POS is the position in the overlay's buffer under the mouse. + +If OBJECT is a string (an overlay string or a string displayed with +the `display' property), POS is the position in that string under the +mouse. + +If the value of the `help-echo' property is neither a function nor a +string, it is evaluated to obtain a help string. + +For tool-bar and menu-bar items, their key definition is used to +determine the help to display. If their definition contains a +property `:help FORM', FORM is evaluated to determine the help string. +For tool-bar items without a help form, the caption of the item is +used as help string. + +The hook `show-help-function' can be set to a function that displays +the help string differently. For example, enabling a tooltip window +causes the help display to appear there instead of in the echo area. + +** Vertical fractional scrolling. + +The display of text in windows can be scrolled smoothly in pixels. +This is useful, for example, for making parts of large images visible. + +The function `window-vscroll' returns the current value of vertical +scrolling, a non-negative fraction of the canonical character height. +The function `set-window-vscroll' can be used to set the vertical +scrolling value. Here is an example of how these function might be +used. + + (global-set-key [A-down] + #'(lambda () + (interactive) + (set-window-vscroll (selected-window) + (+ 0.5 (window-vscroll))))) + (global-set-key [A-up] + #'(lambda () + (interactive) + (set-window-vscroll (selected-window) + (- (window-vscroll) 0.5))))) + +** New hook `fontification-functions'. + +Functions from `fontification-functions' are called from redisplay +when it encounters a region of text that is not yet fontified. This +variable automatically becomes buffer-local when set. Each function +is called with one argument, POS. + +At least one of the hook functions should fontify one or more +characters starting at POS in the current buffer. It should mark them +as fontified by giving them a non-nil value of the `fontified' text +property. It may be reasonable for these functions to check for the +`fontified' property and not put it back on, but they do not have to. + +** Tool bar support. + +Emacs supports a tool bar at the top of a frame under X. The frame +parameter `tool-bar-lines' (X resource "toolBar", class "ToolBar") +controls how may lines to reserve for the tool bar. A zero value +suppresses the tool bar. If the value is non-zero and +`auto-resize-tool-bars' is non-nil the tool bar's size will be changed +automatically so that all tool bar items are visible. + +*** Tool bar item definitions + +Tool bar items are defined using `define-key' with a prefix-key +`tool-bar'. For example `(define-key global-map [tool-bar item1] ITEM)' +where ITEM is a list `(menu-item CAPTION BINDING PROPS...)'. + +CAPTION is the caption of the item, If it's not a string, it is +evaluated to get a string. The caption is currently not displayed in +the tool bar, but it is displayed if the item doesn't have a `:help' +property (see below). + +BINDING is the tool bar item's binding. Tool bar items with keymaps as +binding are currently ignored. + +The following properties are recognized: + +`:enable FORM'. + +FORM is evaluated and specifies whether the tool bar item is enabled +or disabled. + +`:visible FORM' + +FORM is evaluated and specifies whether the tool bar item is displayed. + +`:filter FUNCTION' + +FUNCTION is called with one parameter, the same list BINDING in which +FUNCTION is specified as the filter. The value FUNCTION returns is +used instead of BINDING to display this item. + +`:button (TYPE SELECTED)' + +TYPE must be one of `:radio' or `:toggle'. SELECTED is evaluated +and specifies whether the button is selected (pressed) or not. + +`:image IMAGES' + +IMAGES is either a single image specification or a vector of four +image specifications. If it is a vector, this table lists the +meaning of each of the four elements: + + Index Use when item is + ---------------------------------------- + 0 enabled and selected + 1 enabled and deselected + 2 disabled and selected + 3 disabled and deselected + +If IMAGE is a single image specification, a Laplace edge-detection +algorithm is used on that image to draw the image in disabled state. + +`:help HELP-STRING'. + +Gives a help string to display for the tool bar item. This help +is displayed when the mouse is moved over the item. + +The function `toolbar-add-item' is a convenience function for adding +toolbar items generally, and `tool-bar-add-item-from-menu' can be used +to define a toolbar item with a binding copied from an item on the +menu bar. + +The default bindings use a menu-item :filter to derive the tool-bar +dynamically from variable `tool-bar-map' which may be set +buffer-locally to override the global map. + +*** Tool-bar-related variables. + +If `auto-resize-tool-bar' is non-nil, the tool bar will automatically +resize to show all defined tool bar items. It will never grow larger +than 1/4 of the frame's size. + +If `auto-raise-tool-bar-buttons' is non-nil, tool bar buttons will be +raised when the mouse moves over them. + +You can add extra space between tool bar items by setting +`tool-bar-button-margin' to a positive integer specifying a number of +pixels, or a pair of integers (X . Y) specifying horizontal and +vertical margins . Default is 1. + +You can change the shadow thickness of tool bar buttons by setting +`tool-bar-button-relief' to an integer. Default is 3. + +*** Tool-bar clicks with modifiers. + +You can bind commands to clicks with control, shift, meta etc. on +a tool bar item. If + + (define-key global-map [tool-bar shell] + '(menu-item "Shell" shell + :image (image :type xpm :file "shell.xpm"))) + +is the original tool bar item definition, then + + (define-key global-map [tool-bar S-shell] 'some-command) + +makes a binding to run `some-command' for a shifted click on the same +item. + +** Mode line changes. + +*** Mouse-sensitive mode line. + +The mode line can be made mouse-sensitive by displaying strings there +that have a `local-map' text property. There are three ways to display +a string with a `local-map' property in the mode line. + +1. The mode line spec contains a variable whose string value has +a `local-map' text property. + +2. The mode line spec contains a format specifier (e.g. `%12b'), and +that format specifier has a `local-map' property. + +3. The mode line spec contains a list containing `:eval FORM'. FORM +is evaluated. If the result is a string, and that string has a +`local-map' property. + +The same mechanism is used to determine the `face' and `help-echo' +properties of strings in the mode line. See `bindings.el' for an +example. + +*** If a mode line element has the form `(:eval FORM)', FORM is +evaluated and the result is used as mode line element. + +*** You can suppress mode-line display by setting the buffer-local +variable mode-line-format to nil. + +*** A headerline can now be displayed at the top of a window. + +This mode line's contents are controlled by the new variable +`header-line-format' and `default-header-line-format' which are +completely analogous to `mode-line-format' and +`default-mode-line-format'. A value of nil means don't display a top +line. + +The appearance of top mode lines is controlled by the face +`header-line'. + +The function `coordinates-in-window-p' returns `header-line' for a +position in the header-line. + +** Text property `display' + +The `display' text property is used to insert images into text, +replace text with other text, display text in marginal area, and it is +also used to control other aspects of how text displays. The value of +the `display' property should be a display specification, as described +below, or a list or vector containing display specifications. + +*** Replacing text, displaying text in marginal areas + +To replace the text having the `display' property with some other +text, use a display specification of the form `(LOCATION STRING)'. + +If LOCATION is `(margin left-margin)', STRING is displayed in the left +marginal area, if it is `(margin right-margin)', it is displayed in +the right marginal area, and if LOCATION is `(margin nil)' STRING +is displayed in the text. In the latter case you can also use the +simpler form STRING as property value. + +*** Variable width and height spaces + +To display a space of fractional width or height, use a display +specification of the form `(LOCATION STRECH)'. If LOCATION is +`(margin left-margin)', the space is displayed in the left marginal +area, if it is `(margin right-margin)', it is displayed in the right +marginal area, and if LOCATION is `(margin nil)' the space is +displayed in the text. In the latter case you can also use the +simpler form STRETCH as property value. + +The stretch specification STRETCH itself is a list of the form `(space +PROPS)', where PROPS is a property list which can contain the +properties described below. + +The display of the fractional space replaces the display of the +characters having the `display' property. + +- :width WIDTH + +Specifies that the space width should be WIDTH times the normal +character width. WIDTH can be an integer or floating point number. + +- :relative-width FACTOR + +Specifies that the width of the stretch should be computed from the +first character in a group of consecutive characters that have the +same `display' property. The computation is done by multiplying the +width of that character by FACTOR. + +- :align-to HPOS + +Specifies that the space should be wide enough to reach HPOS. The +value HPOS is measured in units of the normal character width. + +Exactly one of the above properties should be used. + +- :height HEIGHT + +Specifies the height of the space, as HEIGHT, measured in terms of the +normal line height. + +- :relative-height FACTOR + +The height of the space is computed as the product of the height +of the text having the `display' property and FACTOR. + +- :ascent ASCENT + +Specifies that ASCENT percent of the height of the stretch should be +used for the ascent of the stretch, i.e. for the part above the +baseline. The value of ASCENT must be a non-negative number less or +equal to 100. + +You should not use both `:height' and `:relative-height' together. + +*** Images + +A display specification for an image has the form `(LOCATION +. IMAGE)', where IMAGE is an image specification. The image replaces, +in the display, the characters having this display specification in +their `display' text property. If LOCATION is `(margin left-margin)', +the image will be displayed in the left marginal area, if it is +`(margin right-margin)' it will be displayed in the right marginal +area, and if LOCATION is `(margin nil)' the image will be displayed in +the text. In the latter case you can also use the simpler form IMAGE +as display specification. + +*** Other display properties + +- (space-width FACTOR) + +Specifies that space characters in the text having that property +should be displayed FACTOR times as wide as normal; FACTOR must be an +integer or float. + +- (height HEIGHT) + +Display text having this property in a font that is smaller or larger. + +If HEIGHT is a list of the form `(+ N)', where N is an integer, that +means to use a font that is N steps larger. If HEIGHT is a list of +the form `(- N)', that means to use a font that is N steps smaller. A +``step'' is defined by the set of available fonts; each size for which +a font is available counts as a step. + +If HEIGHT is a number, that means to use a font that is HEIGHT times +as tall as the frame's default font. + +If HEIGHT is a symbol, it is called as a function with the current +height as argument. The function should return the new height to use. + +Otherwise, HEIGHT is evaluated to get the new height, with the symbol +`height' bound to the current specified font height. + +- (raise FACTOR) + +FACTOR must be a number, specifying a multiple of the current +font's height. If it is positive, that means to display the characters +raised. If it is negative, that means to display them lower down. The +amount of raising or lowering is computed without taking account of the +`height' subproperty. + +*** Conditional display properties + +All display specifications can be conditionalized. If a specification +has the form `(when CONDITION . SPEC)', the specification SPEC applies +only when CONDITION yields a non-nil value when evaluated. During the +evaluation, `object' is bound to the string or buffer having the +conditional display property; `position' and `buffer-position' are +bound to the position within `object' and the buffer position where +the display property was found, respectively. Both positions can be +different when object is a string. + +The normal specification consisting of SPEC only is equivalent to +`(when t . SPEC)'. + +** New menu separator types. + +Emacs now supports more than one menu separator type. Menu items with +item names consisting of dashes only (including zero dashes) are +treated like before. In addition, the following item names are used +to specify other menu separator types. + +- `--no-line' or `--space', or `--:space', or `--:noLine' + +No separator lines are drawn, but a small space is inserted where the +separator occurs. + +- `--single-line' or `--:singleLine' + +A single line in the menu's foreground color. + +- `--double-line' or `--:doubleLine' + +A double line in the menu's foreground color. + +- `--single-dashed-line' or `--:singleDashedLine' + +A single dashed line in the menu's foreground color. + +- `--double-dashed-line' or `--:doubleDashedLine' + +A double dashed line in the menu's foreground color. + +- `--shadow-etched-in' or `--:shadowEtchedIn' + +A single line with 3D sunken appearance. This is the form +displayed for item names consisting of dashes only. + +- `--shadow-etched-out' or `--:shadowEtchedOut' + +A single line with 3D raised appearance. + +- `--shadow-etched-in-dash' or `--:shadowEtchedInDash' + +A single dashed line with 3D sunken appearance. + +- `--shadow-etched-out-dash' or `--:shadowEtchedOutDash' + +A single dashed line with 3D raise appearance. + +- `--shadow-double-etched-in' or `--:shadowDoubleEtchedIn' + +Two lines with 3D sunken appearance. + +- `--shadow-double-etched-out' or `--:shadowDoubleEtchedOut' + +Two lines with 3D raised appearance. + +- `--shadow-double-etched-in-dash' or `--:shadowDoubleEtchedInDash' + +Two dashed lines with 3D sunken appearance. + +- `--shadow-double-etched-out-dash' or `--:shadowDoubleEtchedOutDash' + +Two dashed lines with 3D raised appearance. + +Under LessTif/Motif, the last four separator types are displayed like +the corresponding single-line separators. + +** New frame parameters for scroll bar colors. + +The new frame parameters `scroll-bar-foreground' and +`scroll-bar-background' can be used to change scroll bar colors. +Their value must be either a color name, a string, or nil to specify +that scroll bars should use a default color. For toolkit scroll bars, +default colors are toolkit specific. For non-toolkit scroll bars, the +default background is the background color of the frame, and the +default foreground is black. + +The X resource name of these parameters are `scrollBarForeground' +(class ScrollBarForeground) and `scrollBarBackground' (class +`ScrollBarBackground'). + +Setting these parameters overrides toolkit specific X resource +settings for scroll bar colors. + +** You can set `redisplay-dont-pause' to a non-nil value to prevent +display updates from being interrupted when input is pending. + +** Changing a window's width may now change its window start if it +starts on a continuation line. The new window start is computed based +on the window's new width, starting from the start of the continued +line as the start of the screen line with the minimum distance from +the original window start. + +** The variable `hscroll-step' and the functions +`hscroll-point-visible' and `hscroll-window-column' have been removed +now that proper horizontal scrolling is implemented. + +** Windows can now be made fixed-width and/or fixed-height. + +A window is fixed-size if its buffer has a buffer-local variable +`window-size-fixed' whose value is not nil. A value of `height' makes +windows fixed-height, a value of `width' makes them fixed-width, any +other non-nil value makes them both fixed-width and fixed-height. + +The following code makes all windows displaying the current buffer +fixed-width and fixed-height. + + (set (make-local-variable 'window-size-fixed) t) + +A call to enlarge-window on a window gives an error if that window is +fixed-width and it is tried to change the window's width, or if the +window is fixed-height, and it is tried to change its height. To +change the size of a fixed-size window, bind `window-size-fixed' +temporarily to nil, for example + + (let ((window-size-fixed nil)) + (enlarge-window 10)) + +Likewise, an attempt to split a fixed-height window vertically, +or a fixed-width window horizontally results in a error. + +** The cursor-type frame parameter is now supported on MS-DOS +terminals. When Emacs starts, it by default changes the cursor shape +to a solid box, as it does on Unix. The `cursor-type' frame parameter +overrides this as it does on Unix, except that the bar cursor is +horizontal rather than vertical (since the MS-DOS display doesn't +support a vertical-bar cursor). + + + +---------------------------------------------------------------------- +Copyright information: + +Copyright (C) 2000, 2001, 2002, 2003, 2006 + Free Software Foundation, Inc. + + Permission is granted to anyone to make or distribute verbatim copies + of this document as received, in any medium, provided that the + copyright notice and this permission notice are preserved, + thus giving the recipient permission to redistribute in turn. + + Permission is granted to distribute modified versions + of this document, or of portions of it, + under the above conditions, provided also that they + carry prominent notices stating who last changed them. + +Local variables: +mode: outline +paragraph-separate: "[ ]*$" +end: diff -r 86cedfd9ade6 -r 25fa0038a52d etc/ONEWS --- a/etc/ONEWS Sat Jun 03 22:51:32 2006 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6485 +0,0 @@ -GNU Emacs NEWS -- history of user-visible changes. 1992. -Copyright (C) 1995, 2001 Free Software Foundation, Inc. -See the end for copying conditions. - -For older news, see the file ONEWS.4. - -* Emacs 19.34 is a bug-fix release with no user-visible changes. - -* Changes in Emacs 19.33. - -** Bibtex mode no longer turns on Auto Fill automatically. (No major -mode should do that--it is the user's choice.) - -** The variable normal-auto-fill-function specifies the function to -use for auto-fill-function, if and when Auto Fill is turned on. -Major modes can set this locally to alter how Auto Fill works. - -* Editing Changes in Emacs 19.32 - -** C-x f with no argument now signals an error. -To set the fill column at the current column, use C-u C-x f. - -** Expanding dynamic abbrevs with M-/ is now smarter about case -conversion. If you type the abbreviation with mixed case, and it -matches the beginning of the expansion including case, then the -expansion is copied verbatim. Using SPC M-/ to copy an additional -word always copies it verbatim except when the previous copied word is -all caps. - -** On a non-windowing terminal, which can display only one Emacs frame -at a time, creating a new frame with C-x 5 2 also selects that frame. - -When using a display that can show multiple frames at once, C-x 5 2 -does make the frame visible, but does not select it. This is the same -as in previous Emacs versions. - -** You can use C-x 5 2 to create multiple frames on MSDOS, just as on a -non-X terminal on Unix. Of course, only one frame is visible at any -time, since your terminal doesn't have the ability to display multiple -frames. - -** On Windows, set win32-pass-alt-to-system to a non-nil value -if you would like tapping the Alt key to invoke the Windows menu. -This feature is not enabled by default; since the Alt key is also the -Meta key, it is too easy and painful to activate this feature by -accident. - -** The command apply-macro-to-region-lines repeats the last defined -keyboard macro once for each complete line within the current region. -It does this line by line, by moving point to the beginning of that -line and then executing the macro. - -This command is not new, but was never documented before. - -** You can now use Mouse-1 to place the region around a string constant -(something surrounded by doublequote characters or other delimiter -characters of like syntax) by double-clicking on one of the delimiting -characters. - -** Font Lock mode - -*** Font Lock support modes - -Font Lock can be configured to use Fast Lock mode and Lazy Lock mode (see -below) in a flexible way. Rather than adding the appropriate function to the -hook font-lock-mode-hook, you can use the new variable font-lock-support-mode -to control which modes have Fast Lock mode or Lazy Lock mode turned on when -Font Lock mode is enabled. - -For example, to use Fast Lock mode when Font Lock mode is turned on, put: - - (setq font-lock-support-mode 'fast-lock-mode) - -in your ~/.emacs. - -*** lazy-lock - -The lazy-lock package speeds up Font Lock mode by making fontification occur -only when necessary, such as when a previously unfontified part of the buffer -becomes visible in a window. When you create a buffer with Font Lock mode and -Lazy Lock mode turned on, the buffer is not fontified. When certain events -occur (such as scrolling), Lazy Lock makes sure that the visible parts of the -buffer are fontified. Lazy Lock also defers on-the-fly fontification until -Emacs has been idle for a given amount of time. - -To use this package, put in your ~/.emacs: - - (setq font-lock-support-mode 'lazy-lock-mode) - -To control the package behavior, see the documentation for `lazy-lock-mode'. - -** Changes in BibTeX mode. - -*** For all entries allow spaces and tabs between opening brace or -paren and key. - -*** Non-escaped double-quoted characters (as in `Sch"of') are now -supported. - -** Gnus changes. - -Gnus, the Emacs news reader, has undergone further rewriting. Many new -commands and variables have been added. There should be no -significant incompatibilities between this Gnus version and the -previously released version, except in the message composition area. - -Below is a list of the more user-visible changes. Coding changes -between Gnus 5.1 and 5.2 are more extensive. - -*** A new message composition mode is used. All old customization -variables for mail-mode, rnews-reply-mode and gnus-msg are now -obsolete. - -*** Gnus is now able to generate "sparse" threads -- threads where -missing articles are represented by empty nodes. - - (setq gnus-build-sparse-threads 'some) - -*** Outgoing articles are stored on a special archive server. - - To disable this: (setq gnus-message-archive-group nil) - -*** Partial thread regeneration now happens when articles are -referred. - -*** Gnus can make use of GroupLens predictions: - - (setq gnus-use-grouplens t) - -*** A trn-line tree buffer can be displayed. - - (setq gnus-use-trees t) - -*** An nn-like pick-and-read minor mode is available for the summary -buffers. - - (add-hook 'gnus-summary-mode-hook 'gnus-pick-mode) - -*** In binary groups you can use a special binary minor mode: - - `M-x gnus-binary-mode' - -*** Groups can be grouped in a folding topic hierarchy. - - (add-hook 'gnus-group-mode-hook 'gnus-topic-mode) - -*** Gnus can re-send and bounce mail. - - Use the `S D r' and `S D b'. - -*** Groups can now have a score, and bubbling based on entry frequency -is possible. - - (add-hook 'gnus-summary-exit-hook 'gnus-summary-bubble-group) - -*** Groups can be process-marked, and commands can be performed on -groups of groups. - -*** Caching is possible in virtual groups. - -*** nndoc now understands all kinds of digests, mail boxes, rnews news -batches, ClariNet briefs collections, and just about everything else. - -*** Gnus has a new backend (nnsoup) to create/read SOUP packets. - -*** The Gnus cache is much faster. - -*** Groups can be sorted according to many criteria. - - For instance: (setq gnus-group-sort-function 'gnus-group-sort-by-rank) - -*** New group parameters have been introduced to set list-address and -expiration times. - -*** All formatting specs allow specifying faces to be used. - -*** There are several more commands for setting/removing/acting on -process marked articles on the `M P' submap. - -*** The summary buffer can be limited to show parts of the available -articles based on a wide range of criteria. These commands have been -bound to keys on the `/' submap. - -*** Articles can be made persistent -- as an alternative to saving -articles with the `*' command. - -*** All functions for hiding article elements are now toggles. - -*** Article headers can be buttonized. - - (add-hook 'gnus-article-display-hook 'gnus-article-add-buttons-to-head) - -*** All mail backends support fetching articles by Message-ID. - -*** Duplicate mail can now be treated properly. See the -`nnmail-treat-duplicates' variable. - -*** All summary mode commands are available directly from the article -buffer. - -*** Frames can be part of `gnus-buffer-configuration'. - -*** Mail can be re-scanned by a daemonic process. - -*** Gnus can make use of NoCeM files to filter spam. - - (setq gnus-use-nocem t) - -*** Groups can be made permanently visible. - - (setq gnus-permanently-visible-groups "^nnml:") - -*** Many new hooks have been introduced to make customizing easier. - -*** Gnus respects the Mail-Copies-To header. - -*** Threads can be gathered by looking at the References header. - - (setq gnus-summary-thread-gathering-function - 'gnus-gather-threads-by-references) - -*** Read articles can be stored in a special backlog buffer to avoid -refetching. - - (setq gnus-keep-backlog 50) - -*** A clean copy of the current article is always stored in a separate -buffer to allow easier treatment. - -*** Gnus can suggest where to save articles. See `gnus-split-methods'. - -*** Gnus doesn't have to do as much prompting when saving. - - (setq gnus-prompt-before-saving t) - -*** gnus-uu can view decoded files asynchronously while fetching -articles. - - (setq gnus-uu-grabbed-file-functions 'gnus-uu-grab-view) - -*** Filling in the article buffer now works properly on cited text. - -*** Hiding cited text adds buttons to toggle hiding, and how much -cited text to hide is now customizable. - - (setq gnus-cited-lines-visible 2) - -*** Boring headers can be hidden. - - (add-hook 'gnus-article-display-hook 'gnus-article-hide-boring-headers) - -*** Default scoring values can now be set from the menu bar. - -*** Further syntax checking of outgoing articles have been added. - -The Gnus manual has been expanded. It explains all these new features -in greater detail. - -* Lisp Changes in Emacs 19.32 - -** The function set-visited-file-name now accepts an optional -second argument NO-QUERY. If it is non-nil, then the user is not -asked for confirmation in the case where the specified file already -exists. - -** The variable print-length applies to printing vectors and bitvectors, -as well as lists. - -** The new function keymap-parent returns the parent keymap -of a given keymap. - -** The new function set-keymap-parent specifies a new parent for a -given keymap. The arguments are KEYMAP and PARENT. PARENT must be a -keymap or nil. - -** Sometimes menu keymaps use a command name, a symbol, which is really -an automatically generated alias for some other command, the "real" -name. In such a case, you should give that alias symbol a non-nil -menu-alias property. That property tells the menu system to look for -equivalent keys for the real name instead of equivalent keys for the -alias. - -* Editing Changes in Emacs 19.31 - -** Freedom of the press restricted in the United States. - -Emacs has been censored in accord with the Communications Decency Act. -This includes removing some features of the doctor program. That law -was described by its supporters as a ban on pornography, but it bans -far more than that. The Emacs distribution has never contained any -pornography, but parts of it were nonetheless prohibited. - -For information on US government censorship of the Internet, and what -you can do to bring back freedom of the press, see the web site -`http://www.vtw.org/'. - -** A note about C mode indentation customization. - -The old (Emacs 19.29) ways of specifying a C indentation style -do not normally work in the new implementation of C mode. -It has its own methods of customizing indentation, which are -much more powerful than the old C mode. See the Editing Programs -chapter of the manual for details. - -However, you can load the library cc-compat to make the old -customization variables take effect. - -** Marking with the mouse. - -When you mark a region with the mouse, the region now remains -highlighted until the next input event, regardless of whether you are -using M-x transient-mark-mode. - -** Improved Windows NT/95 support. - -*** Emacs now supports scroll bars on Windows NT and Windows 95. - -*** Emacs now supports subprocesses on Windows 95. (Subprocesses used -to work on NT only and not on 95.) - -*** There are difficulties with subprocesses, though, due to problems -in Windows, beyond the control of Emacs. They work fine as long as -you run Windows applications. The problems arise when you run a DOS -application in a subprocesses. Since current shells run as DOS -applications, these problems are significant. - -If you run a DOS application in a subprocess, then the application is -likely to busy-wait, which means that your machine will be 100% busy. -However, if you don't mind the temporary heavy load, the subprocess -will work OK as long as you tell it to terminate before you start any -other DOS application as a subprocess. - -Emacs is unable to terminate or interrupt a DOS subprocess. -You have to do this by providing input directly to the subprocess. - -If you run two DOS applications at the same time in two separate -subprocesses, even if one of them is asynchronous, you will probably -have to reboot your machine--until then, it will remain 100% busy. -Windows simply does not cope when one Windows process tries to run two -separate DOS subprocesses. Typing CTL-ALT-DEL and then choosing -Shutdown seems to work although it may take a few minutes. - -** M-x resize-minibuffer-mode. - -This command, not previously mentioned in NEWS, toggles a mode in -which the minibuffer window expands to show as many lines as the -minibuffer contains. - -** `title' frame parameter and resource. - -The `title' X resource now specifies just the frame title, nothing else. -It does not affect the name used for looking up other X resources. -It works by setting the new `title' frame parameter, which likewise -affects just the displayed title of the frame. - -The `name' parameter continues to do what it used to do: -it specifies the frame name for looking up X resources, -and also serves as the default for the displayed title -when the `title' parameter is unspecified or nil. - -** Emacs now uses the X toolkit by default, if you have a new -enough version of X installed (X11R5 or newer). - -** When you compile Emacs with the Motif widget set, Motif handles the -F10 key by activating the menu bar. To avoid confusion, the usual -Emacs binding of F10 is replaced with a no-op when using Motif. - -If you want to be able to use F10 in Emacs, you can rebind the Motif -menubar to some other key which you don't use. To do so, add -something like this to your X resources file. This example rebinds -the Motif menu bar activation key to S-F12: - - Emacs*defaultVirtualBindings: osfMenuBar : ShiftF12 - -** In overwrite mode, DEL now inserts spaces in most cases -to replace the characters it "deletes". - -** The Rmail summary now shows the number of lines in each message. - -** Rmail has a new command M-x unforward-rmail-message, which extracts -a forwarded message from the message that forwarded it. To use it, -select a message which contains a forwarded message and then type the command. -It inserts the forwarded message as a separate Rmail message -immediately after the selected one. - -This command also undoes the textual modifications that are standardly -made, as part of forwarding, by Rmail and other mail reader programs. - -** Turning off saving of .saves-... files in your home directory. - -Each Emacs session writes a file named .saves-... in your home -directory to record which files M-x recover-session should recover. -If you exit Emacs normally with C-x C-c, it deletes that file. If -Emacs or the operating system crashes, the file remains for M-x -recover-session. - -You can turn off the writing of these files by setting -auto-save-list-file-name to nil. If you do this, M-x recover-session -will not work. - -Some previous Emacs versions failed to delete these files even on -normal exit. This is fixed now. If you are thinking of turning off -this feature because of past experiences with versions that had this -bug, it would make sense to check whether you still want to do so -now that the bug is fixed. - -** Changes to Version Control (VC) - -There is a new variable, vc-follow-symlinks. It indicates what to do -when you visit a link to a file that is under version control. -Editing the file through the link bypasses the version control system, -which is dangerous and probably not what you want. - -If this variable is t, VC follows the link and visits the real file, -telling you about it in the echo area. If it is `ask' (the default), -VC asks for confirmation whether it should follow the link. If nil, -the link is visited and a warning displayed. - -** iso-acc.el now lets you specify a choice of language. -Languages include "latin-1" (the default) and "latin-2" (which -is designed for entering ISO Latin-2 characters). - -There are also choices for specific human languages such as French and -Portuguese. These are subsets of Latin-1, which differ in that they -enable only the accent characters needed for particular language. -The other accent characters, not needed for the chosen language, -remain normal. - -** Posting articles and sending mail now has M-TAB completion on various -header fields (Newsgroups, To, CC, ...). - -Completion in the Newsgroups header depends on the list of groups -known to your news reader. Completion in the Followup-To header -offers those groups which are in the Newsgroups header, since -Followup-To usually just holds one of those. - -Completion in fields that hold mail addresses works based on the list -of local users plus your aliases. Additionally, if your site provides -a mail directory or a specific host to use for any unrecognized user -name, you can arrange to query that host for completion also. (See the -documentation of variables `mail-directory-process' and -`mail-directory-stream'.) - -** A greatly extended sgml-mode offers new features such as (to be configured) -skeletons with completing read for tags and attributes, typing named -characters including optionally all 8bit characters, making tags invisible -with optional alternate display text, skipping and deleting tag(pair)s. - -Note: since Emacs' syntax feature cannot limit the special meaning of ', " and -- to inside <>, for some texts the result, especially of font locking, may be -wrong (see `sgml-specials' if you get wrong results). - -The derived html-mode configures this with tags and attributes more or -less HTML3ish. It also offers optional quick keys like C-c 1 for -headline or C-c u for unordered list (see `html-quick-keys'). Edit / -Text Properties / Face or M-g combinations create tags as applicable. -Outline minor mode is supported and level 1 font-locking tries to -fontify tag contents (which only works when they fit on one line, due -to a limitation in font-lock). - -External viewing via browse-url can occur automatically upon saving. - -** M-x imenu-add-to-menubar now adds to the menu bar for the current -buffer only. If you want to put an Imenu item in the menu bar for all -buffers that use a particular major mode, use the mode hook, as in -this example: - - (add-hook 'emacs-lisp-mode-hook - '(lambda () (imenu-add-to-menubar "Index"))) - -** Changes in BibTeX mode. - -*** Field names may now contain digits, hyphens, and underscores. - -*** Font Lock mode is now supported. - -*** bibtex-make-optional-field is no longer interactive. - -*** If bibtex-maintain-sorted-entries is non-nil, inserting new -entries is now done with a faster algorithm. However, inserting -will fail in this case if the buffer contains invalid entries or -isn't in sorted order, so you should finish each entry with C-c C-c -(bibtex-close-entry) after you have inserted or modified it. -The default value of bibtex-maintain-sorted-entries is nil. - -*** Function `show-all' is no longer bound to a key, since C-u C-c C-q -does the same job. - -*** Entries with quotes inside quote-delimited fields (as `author = -"Stefan Sch{\"o}f"') are now supported. - -*** Case in field names doesn't matter anymore when searching for help -text. - -** Font Lock mode - -*** Global Font Lock mode - -Font Lock mode can be turned on globally, in buffers that support it, by the -new command global-font-lock-mode. You can use the new variable -font-lock-global-modes to control which modes have Font Lock mode automagically -turned on. By default, this variable is set so that Font Lock mode is turned -on globally where the buffer mode supports it. - -For example, to automagically turn on Font Lock mode where supported, put: - - (global-font-lock-mode t) - -in your ~/.emacs. - -*** Local Refontification - -In Font Lock mode, editing a line automatically refontifies that line only. -However, if your change alters the syntactic context for following lines, -those lines remain incorrectly fontified. To refontify them, use the new -command M-g M-g (font-lock-fontify-block). - -In certain major modes, M-g M-g refontifies the entire current function. -(The variable font-lock-mark-block-function controls how to find the -current function.) In other major modes, M-g M-g refontifies 16 lines -above and below point. - -With a prefix argument N, M-g M-g refontifies N lines above and below point. - -** Follow mode - -Follow mode is a new minor mode combining windows showing the same -buffer into one tall "virtual window". The windows are typically two -side-by-side windows. Follow mode makes them scroll together as if -they were a unit. To use it, go to a frame with just one window, -split it into two side-by-side windows using C-x 3, and then type M-x -follow-mode. - -M-x follow-mode turns off Follow mode if it is already enabled. - -To display two side-by-side windows and activate Follow mode, use the -command M-x follow-delete-other-windows-and-split. - -** hide-show changes. - -The hooks hs-hide-hooks and hs-show-hooks have been renamed -to hs-hide-hook and hs-show-hook, to follow the convention for -normal hooks. - -** Simula mode now has a menu containing the most important commands. -The new command simula-indent-exp is bound to C-M-q. - -** etags can now handle programs written in Erlang. Files are -recognised by the extensions .erl and .hrl. The tagged lines are -those that begin a function, record, or macro. - -** MSDOS Changes - -*** It is now possible to compile Emacs with the version 2 of DJGPP. -Compilation with DJGPP version 1 also still works. - -*** The documentation of DOS-specific aspects of Emacs was rewritten -and expanded; see the ``MS-DOS'' node in the on-line docs. - -*** Emacs now uses ~ for backup file names, not .bak. - -*** You can simulate mouse-3 on two-button mice by simultaneously -pressing both mouse buttons. - -*** A number of packages and commands which previously failed or had -restricted functionality on MS-DOS, now work. The most important ones -are: - -**** Printing (both with `M-x lpr-buffer' and with `ps-print' package) -now works. - -**** `Ediff' works (in a single-frame mode). - -**** `M-x display-time' can be used on MS-DOS (due to the new -implementation of Emacs timers, see below). - -**** `Dired' supports Unix-style shell wildcards. - -**** The `c-macro-expand' command now works as on other platforms. - -**** `M-x recover-session' works. - -**** `M-x list-colors-display' displays all the available colors. - -**** The `TPU-EDT' package works. - -* Lisp changes in Emacs 19.31. - -** The function using-unix-filesystems on Windows NT and Windows 95 -tells Emacs to read and write files assuming that they reside on a -remote Unix filesystem. No CR/LF translation is done on any files in -this case. Invoking using-unix-filesystems with t activates this -behavior, and invoking it with any other value deactivates it. - -** Change in system-type and system-configuration values. - -The value of system-type on a Linux-based GNU system is now `lignux', -not `linux'. This means that some programs which use `system-type' -need to be changed. The value of `system-configuration' will also -be different. - -It is generally recommended to use `system-configuration' rather -than `system-type'. - -See the file LINUX-GNU in this directory for more about this. - -** The functions shell-command and dired-call-process -now run file name handlers for default-directory, if it has them. - -** Undoing the deletion of text now restores the positions of markers -that pointed into or next to the deleted text. - -** Timers created with run-at-time now work internally to Emacs, and -no longer use a separate process. Therefore, they now work more -reliably and can be used for shorter time delays. - -The new function run-with-timer is a convenient way to set up a timer -to run a specified amount of time after the present. A call looks -like this: - - (run-with-timer SECS REPEAT FUNCTION ARGS...) - -SECS says how many seconds should elapse before the timer happens. -It may be an integer or a floating point number. When the timer -becomes ripe, the action is to call FUNCTION with arguments ARGS. - -REPEAT gives the interval for repeating the timer (measured in -seconds). It may be an integer or a floating point number. nil or 0 -means don't repeat at all--call FUNCTION just once. - -*** with-timeout provides an easy way to do something but give -up if too much time passes. - - (with-timeout (SECONDS TIMEOUT-FORMS...) BODY...) - -This executes BODY, but gives up after SECONDS seconds. -If it gives up, it runs the TIMEOUT-FORMS and returns the value -of the last one of them. Normally it returns the value of the last -form in BODY. - -*** You can now arrange to call a function whenever Emacs is idle for -a certain length of time. To do this, call run-with-idle-timer. A -call looks like this: - - (run-with-idle-timer SECS REPEAT FUNCTION ARGS...) - -SECS says how many seconds of idleness should elapse before the timer -runs. It may be an integer or a floating point number. When the -timer becomes ripe, the action is to call FUNCTION with arguments -ARGS. - -Emacs becomes idle whenever it finishes executing a keyboard or mouse -command. It remains idle until it receives another keyboard or mouse -command. - -REPEAT, if non-nil, means this timer should be activated again each -time Emacs becomes idle and remains idle for SECS seconds The timer -does not repeat if Emacs *remains* idle; it runs at most once after -each time Emacs becomes idle. - -If REPEAT is nil, the timer runs just once, the first time Emacs is -idle for SECS seconds. - -*** post-command-idle-hook is now obsolete; you shouldn't use it at -all, because it interferes with the idle timer mechanism. If your -programs use post-command-idle-hook, convert them to use idle timers -instead. - -*** y-or-n-p-with-timeout lets you ask a question but give up if -there is no answer within a certain time. - - (y-or-n-p-with-timeout PROMPT SECONDS DEFAULT-VALUE) - -asks the question PROMPT (just like y-or-n-p). If the user answers -within SECONDS seconds, it returns the answer that the user gave. -Otherwise it gives up after SECONDS seconds, and returns DEFAULT-VALUE. - -** Minor change to `encode-time': you can now pass more than seven -arguments. If you do that, the first six arguments have the usual -meaning, the last argument is interpreted as the time zone, and the -arguments in between are ignored. - -This means that it works to use the list returned by `decode-time' as -the list of arguments for `encode-time'. - -** The default value of load-path now includes the directory -/usr/local/share/emacs/VERSION/site-lisp In addition to -/usr/local/share/emacs/site-lisp. You can use this new directory for -site-specific Lisp packages that belong with a particular Emacs -version. - -It is not unusual for a Lisp package that works well in one Emacs -version to cause trouble in another. Sometimes packages need updating -for incompatible changes; sometimes they look at internal data that -has changed; sometimes the package has been installed in Emacs itself -and the installed version should be used. Whatever the reason for the -problem, this new feature makes it easier to solve. - -** When your program contains a fixed file name (like .completions or -.abbrev.defs), the file name usually needs to be different on operating -systems with limited file name syntax. - -Now you can avoid ad-hoc conditionals by using the function -convert-standard-filename to convert the file name to a proper form -for each operating system. Here is an example of use, from the file -completions.el: - -(defvar save-completions-file-name - (convert-standard-filename "~/.completions") - "*The filename to save completions to.") - -This sets the variable save-completions-file-name to a value that -depends on the operating system, because the definition of -convert-standard-filename depends on the operating system. On -Unix-like systems, it returns the specified file name unchanged. On -MS-DOS, it adapts the name to fit the limitations of that system. - -** The interactive spec N now returns the numeric prefix argument -rather than the raw prefix argument. (It still reads a number using the -minibuffer if there is no prefix argument at all.) - -** When a process is deleted, this no longer disconnects the process -marker from its buffer position. - -** The variable garbage-collection-messages now controls whether -Emacs displays a message at the beginning and end of garbage collection. -The default is nil, meaning there are no messages. - -** The variable debug-ignored-errors specifies certain kinds of errors -that should not enter the debugger. Its value is a list of error -condition symbols and/or regular expressions. If the error has any -of the condition symbols listed, or if any of the regular expressions -matches the error message, then that error does not enter the debugger, -regardless of the value of debug-on-error. - -This variable is initialized to match certain common but uninteresting -errors that happen often during editing. - -** The new function error-message-string converts an error datum -into its error message. The error datum is what condition-case -puts into the variable, to describe the error that happened. - -** Anything that changes which buffer appears in a given window -now runs the window-scroll-functions for that window. - -** The new function get-buffer-window-list returns a list of windows displaying -a buffer. The function is called with the buffer (a buffer object or a buffer -name) and two optional arguments specifying the minibuffer windows and frames -to search. Therefore this function takes optional args like next-window etc., -and not get-buffer-window. - -** buffer-substring now runs the hook buffer-access-fontify-functions, -calling each function with two arguments--the range of the buffer -being accessed. buffer-substring-no-properties does not call them. - -If you use this feature, you should set the variable -buffer-access-fontified-property to a non-nil symbol, which is a -property name. Then, if all the characters in the buffer range have a -non-nil value for that property, the buffer-access-fontify-functions -are not called. When called, these functions should put a non-nil -property on the text that they fontify, so that they won't get called -over and over for the same text. - -** Changes in lisp-mnt.el - -*** The lisp-mnt package can now recognize file headers that are written -in the formats used by the `what' command and the RCS `ident' command: - -;; @(#) HEADER: text -;; $HEADER: text $ - -in addition to the normal - -;; HEADER: text - -*** The commands lm-verify and lm-synopsis are now interactive. lm-verify -checks that the library file has proper sections and headers, and -lm-synopsis extracts first line "synopsis'"information. - - - -* Editing Changes in Emacs 19.30. - -** Be sure to recompile your byte-compiled Emacs Lisp files -if you last compiled them with Emacs 19.28 or earlier. -You can use M-x byte-force-recompile to recompile all the .elc files -in a specified directory. - -** Emacs now provides multiple-frame support on Windows NT -and Windows 95. - -** M-x column-number-mode toggles a minor mode which displays -the current column number in the mode line. - -** Line Number mode is now enabled by default. - -** M-x what-line now displays the line number in the accessible -portion of the buffer as well as the line number in the full buffer, -when narrowing is in effect. - -** If you type a M-x command that has an equivalent key binding, -the equivalent is shown in the minibuffer before the command executes. -This feature is enabled by default for the sake of beginning users. -You can turn the feature off by setting suggest-key-bindings to nil. - -** The menu bar is now visible on text-only terminals. To choose a -command from the menu bar when you have no mouse, type M-` -(Meta-Backquote) or F10. To turn off menu bar display, -do (menu-bar-mode -1). - -** Whenever you invoke a minibuffer, it appears in the minibuffer -window that the current frame uses. - -Emacs can only use one minibuffer window at a time. If you activate -the minibuffer while a minibuffer window is active in some other -frame, the outer minibuffer window disappears while the inner one is -active. - -** Echo area messages always appear in the minibuffer window that the -current frame uses. If a minibuffer is active in some other frame, -the echo area message does not hide it even temporarily. - -** The minibuffer now has a menu-bar menu. You can use it to exit or -abort the minibuffer, or to ask for completion. - -** Dead-key and composite character processing is done in the standard -X11R6 manner (through the default "input method" using the -/usr/lib/X11/locale/*/Compose databases of key combinations). I.e. if -it works in xterm, it should also work in emacs now. - -** Mouse changes - -*** You can now use the mouse when running Emacs in an xterm. -Use M-x xterm-mouse-mode to let emacs take control over the mouse. - -*** C-mouse-1 now once again provides a menu of buffers to select. -S-mouse-1 is now the way to select a default font for the frame. - -*** There is a new mouse-scroll-min-lines variable to control the -minimum number of lines scrolled by dragging the mouse outside a -window's edge. - -*** Dragging mouse-1 on a vertical line that separates windows -now moves the line, thus changing the widths of the two windows. -(This feature is available only if you don't have vertical scroll bars. -If you do use them, a scroll bar separates two side-by-side windows.) - -*** Double-click mouse-1 on a character with "symbol" syntax (such as -underscore, in C mode) selects the entire symbol surrounding that -character. (Double-click mouse-1 on a letter selects a whole word.) - -** When incremental search wraps around to the beginning (or end) of -the buffer, if you keep on searching until you go past the original -starting point of the search, the echo area changes from "Wrapped" to -"Overwrapped". That tells you that you are revisiting matches that -you have already seen. - -** Filling changes. - -*** If the variable colon-double-space is non-nil, the explicit fill -commands put two spaces after a colon. - -*** Auto-Fill mode now supports Adaptive Fill mode just as the -explicit fill commands do. The variable adaptive-fill-regexp -specifies a regular expression to match text at the beginning of -a line that should be the fill prefix. - -*** Adaptive Fill mode can take a fill prefix from the first line of a -paragraph, *provided* that line is not a paragraph-starter line. - -Paragraph-starter lines are indented lines that start a new -paragraph because they are indented. This indentation shouldn't -be copied to additional lines. - -Whether indented lines are paragraph lines depends on the value of the -variable paragraph-start. Some major modes set this; you can set it -by hand or in mode hooks as well. For editing text in which paragraph -first lines are not indented, and which contains paragraphs in which -all lines are indented, you should use Indented Text mode or arrange -for paragraph-start not to match these lines. - -*** You can specify more complex ways of choosing a fill prefix -automatically by setting `adaptive-fill-function'. This function -is called with point after the left margin of a line, and it should -return the appropriate fill prefix based on that line. -If it returns nil, that means it sees no fill prefix in that line. - -** Gnus changes. - -Gnus, the Emacs news reader, has been rewritten and expanded. Most -things that worked with the old version should still work with the new -version. Code that relies heavily on Gnus internals is likely to -fail, though. - -*** Incompatibilities with the old GNUS. - -**** All interactive commands have kept their names, but many internal -functions have changed names. - -**** The summary mode gnus-uu commands have been moved from the `C-c -C-v' keymap to the `X' keymap. - -**** There can now be several summary buffers active at once. -Variables that are relevant to each summary buffer are buffer-local to -that buffer. - -**** Old hilit code doesn't work at all. Gnus performs its own -highlighting based not only on what's visible in the buffer, but on -other data structures. - -**** Old packages like `expire-kill' will no longer work. - -**** `C-c C-l' in the group buffer no longer switches to a different -buffer, but instead lists killed groups in the group buffer. - -*** New features. - -**** The look of all buffers can be changed by setting format-like -variables. - -**** Local spool and several NNTP servers can be used at once. - -**** Groups can be combined into virtual groups. - -**** Different mail formats can be read much the same way as one would -read newsgroups. All the mail backends implement mail expiry schemes. - -**** Gnus can use various strategies for gathering threads that have -lost their roots (thereby gathering loose sub-threads into one thread) -or it can go back and retrieve enough headers to build a complete -thread. - -**** Killed groups can be read. - -**** Gnus can do partial group updates - you do not have to retrieve -the entire active file just to check for new articles in a few groups. - -**** Gnus implements a sliding scale of subscribedness to groups. - -**** You can score articles according to any number of criteria. You -can get Gnus to score articles for you using adaptive scoring. - -**** Gnus maintains a dribble buffer that is auto-saved the normal -Emacs manner, so it should be difficult to lose much data on what you -have read if your machine should go down. - -**** Gnus now has its own startup file (`.gnus.el') to avoid -cluttering up the `.emacs' file. - -**** You can set the process mark on both groups and articles and -perform operations on all the marked items. - -**** You can grep through a subset of groups and create a group from -the results. - -**** You can list subsets of groups using matches on group names or -group descriptions. - -**** You can browse foreign servers and subscribe to groups from those -servers. - -**** Gnus can pre-fetch articles asynchronously on a second connection -to the servers. - -**** You can cache articles locally. - -**** Gnus can fetch FAQs to and descriptions of groups. - -**** Digests (and other files) can be used as the basis for groups. - -**** Articles can be highlighted and customized. - -** Changes to Version Control (VC) - -*** General changes (all backends). - -VC directory listings (C-x v d) are now kept up to date when you do a -vc-next-action (C-x v v) on the marked files. The `g' command updates -the buffer properly. `=' in a VC dired buffer produces a version -control diff, not an ordinary diff. - -*** CVS changes. - -Under CVS, you no longer need to type C-x C-q before you can edit a -file. VC doesn't write-protect unmodified buffers anymore; you can -freely change them at any time. The mode line keeps track of the -file status. - -If you do want unmodified files to be write-protected, set your -CVSREAD environment variable. VC sees this and behaves accordingly; -that will give you the behavior of Emacs 19.29, similar to that under -RCS and SCCS. In this mode, if the variable vc-mistrust-permissions -is nil, VC learns the modification state from the file permissions. -When setting CVSREAD for the first time, you should check out the -whole module anew, so that the file permissions are set correctly. - -VC also works with remote repositories now. When you visit a file, it -doesn't run "cvs status" anymore, so there shouldn't be any long delays. - -Directory listings under VC/CVS have been enhanced. Type C-x v d, and -you get a list of all files in or below the current directory that are -not up-to-date. The actual status (modified, merge, conflict, ...) is -displayed for each file. If you give a prefix argument (C-u C-x v d), -up-to-date files are also listed. You can mark any number of files, -and execute the next logical version control command on them (C-x v v). - -*** Starting a new branch. - -If you try to lock a version that is not the latest on its branch, -VC asks for confirmation in the minibuffer. If you say no, it offers -to lock the latest version instead. - -*** RCS non-strict locking. - -VC can now handle RCS non-strict locking, too. In this mode, working -files are always writable and you needn't lock the file before making -changes, similar to the default mode under CVS. To enable non-strict -locking for a file, use the "rcs -U" command. - -*** Sharing RCS master files. - -If you share RCS subdirs with other users (through symbolic links), -and you always want to work on the latest version, set -vc-consult-headers to nil and vc-mistrust-permissions to `t'. -Then you see the state of the *latest* version on the mode line, not -that of your working file. When you do a check out, VC overwrites -your working file with the latest version from the master. - -*** RCS customization. - -There is a new variable vc-consult-headers. If it is t (the default), -VC searches for RCS headers in working files (like `$Id: ONEWS,v 1.8 2003/02/04 14:30:40 lektu Exp $') and -determines the state of the file from them, not from the master file. -This is fast and more reliable when you use branches. (The variable -was already present in Emacs 19.29, but didn't get mentioned in the -NEWS.) - -** Calendar changes. - -*** New calendars supported: Chinese, Coptic, Ethiopic - -Here are the commands for converting to and from these calendars: - - gC: calendar-goto-chinese-date - gk: calendar-goto-coptic-date - ge: calendar-goto-ethiopic-date - - pC: calendar-print-chinese-date - pk: calendar-print-coptic-date - pe: calendar-print-ethiopic-date - -*** Printed calendars - -Calendar mode now has commands to produce fancy printed calendars via -LaTeX. You can ask for a calendar for one or more days, weeks, months -or years. The commands all start with `t'; see the manual for a list -of them. - -*** New sexp diary entry type - -Reminders that apply in the days leading up to an event. - -** The CC-mode package now provides the default C and C++ modes. -See the manual for documentation of its features. - -** The uniquify package chooses buffer names differently when you -visit multiple files with the same name (in different directories). - -** RMAIL now always uses the movemail program when it renames an -inbox file, so that it can interlock properly with the mailer -no matter where it is delivering mail. - -** tex-start-of-header and tex-end-of-header are now regular expressions, -not strings. - -** To enable automatic uncompression of compressed files, -type M-x auto-compression-mode. (This command used to be called -toggle-auto-compression, but was not documented before.) In Lisp, -you can do - - (auto-compression-mode 1) - -to turn the mode on. - -** The new pc-select package emulates the key bindings for cutting and -pasting, and selection of regions, found in Windows, Motif, and the -Macintosh. - -** Help buffers now use a special major mode, Help mode. This mode -normally turns on View mode; it also provides a hook, help-mode-hook, -which you can use for other customization. - -** Apropos now uses faces for enhanced legibility. It now describes -symbol properties as well as their function definitions and variable -values. You can use Mouse-2 or RET to get more information about a -function definition, variable, or property. - -** Font Lock mode - -*** Supports Scheme, TCL and Help modes - -For example, to automatically turn on Font Lock mode in the *Help* -buffer, put: - - (add-hook 'help-mode-hook 'turn-on-font-lock) - -in your ~/.emacs. - -*** Enhanced fontification - -The structure of font-lock-keywords is extended to allow "anchored" keywords. -Typically, a keyword item of font-lock-keywords comprises a regexp to search -for and information to specify how the regexp should be highlighted. However, -the highlighting information is extended so that it can be another keyword -item. This keyword item, its regexp and highlighting information, is processed -before resuming with the keyword item of which it is part. - -For example, a typical keyword item might be: - - ("\\" (0 anchor-face)) - -which fontifies each occurrence of the discrete word "anchor" in the value of -the variable anchor-face. However, the highlighting information can be used to -fontify text that is anchored to the word "anchor". For example: - - ("\\" (0 anchor-face) ("\\=[ ,]*\\(item\\)" nil nil (1 item-face))) - -which fontifies each occurrence of "anchor" as above, but for each occurrence -of "anchor", each occurrence of "item", in any following comma separated list, -is fontified in the value of the variable item-face. Thus the "item" text is -anchored to the "anchor" text. See the variable documentation for further -information. - -This feature is used to extend the level and quality of fontification in a -number of modes. For example, C/C++ modes now have level 3 decoration that -includes the fontification of variable and function names in declaration lists. -In this instance, the "anchor" described in the above example is a type or -class name, and an "item" is a variable or function name. - -*** Fontification levels - -The variables font-lock-maximum-decoration and font-lock-maximum-size are -extended to specify levels and sizes for specific modes. The variable -font-lock-maximum-decoration specifies the preferred level of fontification for -modes that provide multiple levels (typically from "subdued" to "gaudy"). The -variable font-lock-maximum-size specifies the buffer size for which buffer -fontification is suppressed when Font Lock mode is turned on (typically because -it would take too long). - -These variables can now specify values for individual modes, by supplying -lists of mode names and values. For example, to use the above mentioned level -3 decoration for buffers in C/C++ modes, and default decoration otherwise, put: - - (setq font-lock-maximum-decoration '((c-mode . 3) (c++-mode . 3))) - -in your ~/.emacs. Maximum buffer size values for individual modes are -specified in the same way with the variable font-lock-maximum-size. - -*** Font Lock configuration - -The mechanism to provide default settings for Font Lock mode are the variables -font-lock-defaults and font-lock-maximum-decoration. Typically, you should -only need to change the value of font-lock-maximum-decoration. However, to -support Font Lock mode for buffers in modes that currently do not support Font -Lock mode, you should set a buffer local value of font-lock-defaults for that -mode, typically via its mode hook. - -These variables are used by Font Lock mode to set the values of the variables -font-lock-keywords, font-lock-keywords-only, font-lock-syntax-table, -font-lock-beginning-of-syntax-function and font-lock-keywords-case-fold-search. - -You need not set these variables directly, and should not set them yourself -since the underlining mechanism may change in future. - -** Archive mode is now the default mode for various sorts of -archive files (files whose names end with .arc, .lzh, .zip, and .zoo). - -** You can automatically update the years in copyright notice by -means of (add-hook 'write-file-hooks 'copyright-update). -Optionally it can update the GPL version as well. - -** Scripts of various languages (Shell, AWK, Perl, makefiles ...) can -be automatically provided with a magic number and be made executable -by their respective modes under control of various user variables. -The mode must call (executable-set-magic "perl") or -(executable-set-magic "make" "-f"). The latter for example has no -effect on [Mm]akefile. - -** Shell script mode now supports over 15 different shells. The new -command C-c ! executes the region, and optionally beginning of script -as well, by passing them to the shell. - -Cases such as `sh' being a `bash' are now accounted for. -Fontification now also does variables, the magic number and all -builtin commands. Shell script mode no longer mingles `tab-width' and -indentation style. The variable `sh-tab-width' has been renamed to -`sh-indentation'. Empty lines are now indented like previous -non-empty line, rather than just previous line. - -The annoying $ variable prompting has been eliminated. Instead, shell -script mode uses `comint-dynamic-completion' for commands, variables -and filenames. - -** Two-column mode now automatically scrolls both buffers together, -which makes it possible to eliminate the special scrolling commands -that used to do so. - -The commands that operate in two-column mode are no longer bound to -keys outside that mode. f2 o will now position at the same point in -associated buffer. - -the new command f2 RET inserts a newline in both buffers, at point and -at the corresponding position in the associated buffer. - -** Skeleton commands now work smoothly as abbrev definitions. The -element < no longer exists, ' is a new element. - -** The autoinsert insert facility for prefilling empty files as soon -as they are found has been extended to accommodate skeletons or calling -functions. See the function auto-insert. - -** TPU-edt Changes - -Loading tpu-edt no longer turns on tpu-edt mode. In fact, it is no -longer necessary to explicitly load tpu-edt. All you need to do to -turn on tpu-edt is run the tpu-edt function. Here's how to run -tpu-edt instead of loading the file: - - Running Emacs: Type emacs -f tpu-edt - not emacs -l tpu-edt - - Within Emacs: Type M-x tpu-edt - not M-x load-library tpu-edt - - In .emacs: Use (tpu-edt) - not (load "tpu-edt") - -The default name of the tpu-edt X key definition file has changed from -~/.tpu-gnu-keys to ~/.tpu-keys. If you don't rename the file yourself, -tpu-edt will offer to rename it the first time you invoke it under -x-windows. - -** MS-DOS Enhancements: - -*** Better mouse control by adding the following functions [in dosfns.c] -msdos-mouse-enable, msdos-mouse-disable, msdos-mouse-init. - -*** If another foreground/background color than the default is setup in -your ~/_emacs, then the screen briefly flickers with the default -colors before changing to the colors you have specified. To avoid -this, the EMACSCOLORS environment variable exists. It shall be -defined as a string with the following elements: - - set EMACSCOLORS=fb;fb - -The first set of "fb" defines the initial foreground and background -colors using standard dos color numbers (0=black,.., 7=white). -If specified, the second set of "fb" defines the colors which are -restored when you leave emacs. - -*** The new SUSPEND environment variable can now be set as the shell to -use when suspending emacs. This can be used to override the stupid -limitation on the environment of sub-shells in MS-DOS (they are just -large enough to hold the currently defined variables, not leaving -room for more); to overcome this limitation, add this to autoexec.bat: - - set SUSPEND=%COMSPEC% /E:2000 - -** The escape character can now be displayed on X frames. Try -this: - (aset standard-display-table 27 (vector 27)) -after first creating a display table (you can do that by loading -the disp-table library). - -** The new command-line option --eval specifies an expression to evaluate -from the command line. - -** etags has now the ability to tag Perl files. They are recognised -either by the .pm and .pl suffixes or by a first line which starts -with `#!' and specifies a Perl interpreter. The tagged lines are -those beginning with the `sub' keyword. - -New suffixes recognised are .hpp for C++; .f90 for Fortran; .bib, -.ltx, .TeX for TeX (.bbl, .dtx removed); .ml for Lisp; .prolog for -prolog (.pl is now Perl). - -** The files etc/termcap.dat and etc/termcap.ucb have been replaced -with a new, merged, and much more comprehensive termcap file. The -new file should include all the special entries from the old one. -This new file is under active development as part of the ncurses -project. If you have any questions about this file, or problems with -an entry in it, email terminfo@ccil.org. - -* Lisp changes in Emacs 19.30. - -** New Data Types - -*** There is a new data type called a char-table which is an array -indexed by a character. Currently this is mostly equivalent to a -vector of length 256, but in the future, when a wider character set is -in use, it will be different. To create one, call - (make-char-table SUBTYPE INITIAL-VALUE) - -SUBTYPE is a symbol that identifies the specific use of this -character table. It can be any of these values: - - syntax-table - display-table - keyboard-translate-table - case-table - -The function `char-table-subtype' returns the subtype of a char-table. -You cannot alter the subtype of an existing char-table. - -A char-table has an element for each character code. It also has some -"extra slots". The number of extra slots depends on the subtype and -their use depends on the subtype. (Each subtype symbol has a -`char-table-extra-slots' property that says how many extra slots to -make.) Use (char-table-extra-slot TABLE N) to access extra slot N and -(set-char-table-extra-slot TABLE N VALUE) to store VALUE in slot N. - -A char-table T can have a parent, which should be another char-table -P. If you look for the value in T for character C, and the table T -actually holds nil, P's element for character C is used instead. -The functions `char-table-parent' and `set-char-table-parent' -let you read or set the parent of a char-table. - -To scan all the values in a char-table, do not try to loop through all -possible character codes. That would work for now, but will not work -in the future. Instead, call map-char-table. (map-char-table -FUNCTION TABLE) calls FUNCTION once for each character or character -set that has a distinct value in TABLE. FUNCTION gets two arguments, -RANGE and VALUE. RANGE specifies a range of TABLE that has one -uniform value, and VALUE is the value in TABLE for that range. - -Currently, RANGE is always a vector containing a single character -and it refers to that character alone. In the future, other kinds -of ranges will occur. You can set the value for a given range -with (set-char-table-range TABLE RANGE VALUE) and examine the value -for a range with (char-table-range TABLE RANGE). - -*** Syntax tables are now represented as char-tables. -All syntax tables other than the standard syntax table -normally have the standard syntax table as their parent. -Their subtype is `syntax-table'. - -*** Display tables are now represented as char-tables. -Their subtype is `display-table'. - -*** Case tables are now represented as char-tables. -Their subtype is `case-table'. - -*** The value of keyboard-translate-table may now be a char-table -instead of a string. Normally the char-tables used for this purpose -have the subtype `keyboard-translate-table', but that is not required. - -*** A new data type called a bool-vector is a vector of values -that are either t or nil. To create one, do - (make-bool-vector LENGTH INITIAL-VALUE) - -** You can now specify, for each marker, how it should relocate when -text is inserted at the place where the marker points. This is called -the "insertion type" of the marker. - -To set the insertion type, do (set-marker-insertion-type MARKER TYPE). -If TYPE is t, it means the marker advances when text is inserted. If -TYPE is nil, it means the marker does not advance. (In Emacs 19.29, -markers did not advance.) - -The function marker-insertion-type reports the insertion type of a -given marker. The function copy-marker takes a second argument TYPE -which specifies the insertion type of the new copied marker. - -** When you create an overlay, you can specify the insertion type of -the beginning and of the end. To do this, you can use two new -arguments to make-overlay: front-advance and rear-advance. - -** The new function overlays-in returns a list of the overlays that -overlap a specified range of the buffer. The returned list includes -empty overlays at the beginning of this range, as well as within the -range. - -** The new hook window-scroll-functions is run when a window has been -scrolled. The functions in this list are called just before -redisplay, after the new window-start has been computed. Each function -is called with two arguments--the window that has been scrolled, and its -new window-start position. - -This hook is useful for on-the-fly fontification and other features -that affect how the redisplayed text will look when it is displayed. - -The window-end value of the window is not valid when these functions -are called. The computation of window-end is byproduct of actual -redisplay of the window contents, which means it has not yet happened -when the hook is run. Computing window-end specially in advance for -the sake of these functions would cause a slowdown. - -The hook functions can determine where the text on the window will end -by calling vertical-motion starting with the window-start position. - -** The new hook redisplay-end-trigger-functions is run whenever -redisplay in window uses text that extends past a specified end -trigger position. You set the end trigger position with the function -set-window-redisplay-end-trigger. The functions are called with two -arguments: the window, and the end trigger position. Storing nil for -the end trigger position turns off the feature, and the trigger value -is automatically reset to nil just after the hook is run. - -You can use the function window-redisplay-end-trigger to read a -window's current end trigger value. - -** The new function insert-file-contents-literally inserts the -contents of a file without any character set translation or decoding. - -** The new function safe-length computes the length of a list. -It never gets an error--it treats any non-list like nil. -If given a circular list, it returns an upper bound for the number -of elements before the circularity. - -** replace-match now takes a fifth argument, SUBEXP. If SUBEXP is -non-nil, that says to replace just subexpression number SUBEXP of the -regexp that was matched, not the entire match. For example, after -matching `foo \(ba*r\)' calling replace-match with 1 as SUBEXP means -to replace just the text that matched `\(ba*r\)'. - -** The new keymap special-event-map defines bindings for certain -events that should be handled at a very low level--as soon as they -are read. The read-event function processes these events itself, -and never returns them. - -Events that are handled in this way do not echo, they are never -grouped into key sequences, and they never appear in the value of -last-command-event or (this-command-keys). They do not discard a -numeric argument, they cannot be unread with unread-command-events, -they may not appear in a keyboard macro, and they are not recorded -in a keyboard macro while you are defining one. - -These events do, however, appear in last-input-event immediately after -they are read, and this is the way for the event's definition to find -the actual event. - -The events types iconify-frame, make-frame-visible and delete-frame -are normally handled in this way. - -** encode-time now supports simple date arithmetic by means of -out-of-range values for its SEC, MINUTE, HOUR, DAY, and MONTH -arguments; for example, day 0 means the day preceding the given month. -Also, the ZONE argument can now be a TZ-style string. - -** command-execute and call-interactively now accept an optional third -argument KEYS. If specified and non-nil, this specifies the key -sequence containing the events that were used to invoke the command. - -** The environment variable NAME, if set, now specifies the value of -(user-full-name), when Emacs starts up. - -* User Editing Changes in Emacs 19.29 - -** If you run out of memory. - -If you get the error message "Virtual memory exhausted", type C-x s. -That way of saving files has the least additional memory needs. Emacs -19.29 keeps a reserve of memory which it makes available when this -error happens; that is to ensure that C-x s can complete its work. - -Once you have saved your data, you can exit and restart Emacs, or use -M-x kill-some-buffers to free up space. If you kill buffers -containing a substantial amount of text, you can go on editing. - -Do not use M-x buffer-menu to save or kill buffers when you are out of -memory, because that needs a fair amount memory itself and you may not -have enough to get it started. - -** The format of compiled files has changed incompatibly. - -Byte-compiled files made with Emacs 19.29 normally use a new format -that will not work in older Emacs versions. You can compile files -in the old format if you wish; see "Changes in compilation," below. - -** Emacs 19.29 supports the DEC Alpha. - -** Emacs runs on Windows NT. - -This port does not yet support windowing features. It works like a -text-only terminal, but it does support a mouse. - -In general, support for non-GNU-like operating systems is not a high -priority for the GNU project. We merged in the support for Windows NT -because that system is expected to be very widely used. - -** Emacs supports Motif widgets. - -You can build Emacs with Motif widgets by specifying --with-x-toolkit=motif -when you run configure. - -Motif defines collections of windows called "tab groups", and uses the -tab key and the cursor keys to move between windows in a tab group. -Emacs naturally does not support this--it has other uses for the tab -key and cursor keys. Emacs does not support Motif accelerators either, -because it uses its normal keymap event binding features. - -We give higher priority to operation with a free widget set than to -operation with a proprietary one. - -** If Emacs or the computer crashes, you can recover all the files you -were editing from their auto save files by typing M-x recover-session. -This first shows you a list of recorded interrupted sessions. Move -point to the one you choose, and type C-c C-c. - -Then recover-session asks about each of the files that were being -edited during that session, asking whether to recover that file. If -you answer y, it calls recover-file, which works in its normal -fashion. It shows the dates of the original file and its auto-save -file and asks once again whether to recover that file. - -When recover-session is done, the files you've chosen to recover -are present in Emacs buffers. You should then save them. -Only this--saving them--updates the files themselves. - -** Menu bar menus now stay up if you click on the menu bar item and -release the mouse button within a certain amount of time. This is in -the X Toolkit version. - -** The menu bar menus have been rearranged and split up to make for a -better organization. Two new menu bar menus, Tools and Search, -contain items that were formerly in the Files and Edit menus, as well -as some that did not exist in the menu bar menus before. - -** Emacs can now display on more than one X display at the same time. -Use the command make-frame-on-display to create a frame, specifying -which display to use. - -** M-x talk-connect sets up a multi-user talk connection -via Emacs. Specify the X display of the person you want to talk to. -You can talk to any number of people (within reason) by using -this command repeatedly to specify different people. - -Emacs does not make a fuss about security; the people who you talk to -can use all Emacs features, including visiting and editing files. If -this frightens you, don't use M-x talk-connect. - -** The range of integer values is now at least 2**28 on all machines. -This means the maximum size of a buffer is at least 2**27-1, -or 134,217,727. - -** When you start Emacs, you can now specify option names in -long GNU form (starting with `--') and you can abbreviate the names. - -You can now specify the options in any order. -The previous requirements about the order of options -have been eliminated. - -The -L or --directory option lets you specify an additional -directory to search for Lisp libraries (including libraries -that you specify with the -l or --load options). - -** Incremental search in Transient Mark mode, if the mark is already -active, now leaves the mark active and does not change its position. -You can make incremental search deactivate the mark once again with -this expression. - - (add-hook 'isearch-mode-hook 'deactivate-mark) - -** C-delete now deletes a word backwards. This is for compatibility -with some editors in the PC world. (This key is not available on -ordinary ASCII terminals, because C-delete is not a distinct character -on those terminals.) - -** ESC ESC ESC is now a command to escape from various temporary modes -and states. - -** M-x pc-bindings-mode sets up bindings compatible with many PC editors. -In particular, Delete and its variants delete forward instead of backward. -Use Backspace to delete backward. - -C-Backspace kills backward a word (as C-Delete normally would). -M-Backspace does undo. -Home and End move to beginning and end of line -C-Home and C-End move to beginning and end of buffer. - -** The key sequence for evaluating a Lisp expression using the minibuffer -is now ESC :. It used to be ESC ESC, but we moved it to make way for -the ESC ESC ESC feature, on the grounds that people who evaluate Lisp -expressions are experienced users and can cope with a change. -If you prefer the old ESC ESC binding, put in your `~/.emacs': - - (global-set-key "\e\e" 'eval-expression) - -** The f1 function key is now equivalent to the help key. This is -done with key-translation-map; delete the binding for f1 in that map -if you want to use f1 for something else. - -** Mouse-3, in the simplest case, still sets the region. But now, it -places the mark where point was, and sets point where you click. -(It used to set the mark where you click and leave point alone.) - -If you position point with Mouse-1, then scroll with the scroll bar -and use Mouse-3, Mouse-3 uses the position you specified with Mouse-1 -even if it has scrolled off the screen (and point is no longer there). -This makes it easier to select a region with the mouse which is bigger -than a screenful. - -Any editing of the buffer, and any cursor motion or scrolling for any -reason other than the scroll bar, cancels the special state set up by -Mouse-1--so that a subsequent Mouse-3 click will use the actual value -of point. - -** C-mouse-3 now pops up a mode-specific menu of commands--normally -the same ones available in the mode's own menu bar menus. - -** C-mouse-2 now pops up a menu of faces, indentation, justification, -and certain other text properties. This menu is also available -through the menu-bar Edit menu. It is meant for use with Enriched -mode. - -*** You can use this menu to change the face of the region. -You can also set the face of the region with the new M-g command. - -*** The menu also includes commands for indenting the region, -which locally changes the values of left-margin and fill-column that -are used. - -*** All fill functions now indent every line to the left-margin. If -there is also a fill-prefix, that goes after the margin indentation. - -*** Open-line and newline also make sure that the lines they create -are indented to the left margin. - -*** It also allows you to set the "justification" of the region: -whether it should be centered, flush right, and so forth. The fill -functions (including auto-fill-mode) will maintain the justification -and indentation that you request. - -*** The new function `list-colors-display' shows you what colors are -available. This is also accessible from the C-mouse-2 menu. - -** You can now save and load files including their faces and other -text-properties by using Enriched-mode. Files are saved in an -extended version of the MIME text/enriched format. You can use the -menus described above, or M-g and other keyboard commands, to -alter the formatting information. - -** C-mouse-1 now pops up the menu for changing the frame's default font. - -** You can input Hyper, Super, Meta, and Alt characters, as well as -non-ASCII control characters, on an ASCII-only terminal. -To do this, use - - C-x @ h -- hyper - C-x @ s -- super - C-x @ m -- meta - C-x @ a -- alt - C-x @ S -- shift - C-x @ c -- control - -These are not ordinary key sequences; they operate through -function-key-map, which means they can be used even in the -middle of an ordinary key sequence. - -** Outline minor mode and Hideif mode now use C-c @ as their prefix -character. - -** Echo area messages are now logged in the "*Messages*" buffer. The -size of this buffer is limited to message-log-max lines. - -** RET in various special modes for read-only buffers that contain -lists of items now selects the item point is on. These modes include -Dired, Compilation buffers, Buffer-menu, Tar mode, and Occur mode. -(In Info, RET follows the reference near point; in completion list -buffers, RET chooses the completion around point.) - -** set-background-color now updates the modeline face in a special -way. If that face was previously set up to be reverse video, the -reverse of the default face, then set-background-color updates it so -that it remains the reverse of the default face. - -** The functions raise-frame and lower-frame are now commands. -When used interactively, they apply to the selected frame. - -** M-x buffer-menu now displays the buffer list in the selected window. -Use M-x buffer-menu-other-window to display it in another window. - -** M-w followed by a kill command now *does not* append the text in -the kill ring. In consequence, M-w followed by C-w works as you would -expect: it leaves the top of the kill ring matching the region that -you killed. - -** In Lisp mode, the C-M-x command now executes defvar forms in a -special way: it unconditionally sets the variable to the specified -default value, if there is one. Normal execution of defvar does not -alter the variable if it already has a non-void value. - -** In completion list buffers, the left and right arrow keys run the -new commands previous-completion and next-completion. They move one -completion at a time. - -** While doing completion in the minibuffer, the `prior' or `pageup' -key switches to the completion list window. - -** When you exit the minibuffer with empty contents, the empty string -is not put in the minibuffer history. - -** The default buffer for insert-buffer is now the "first" buffer -other than the current one. If you have more than one window, this -is a buffer visible in another window. (Usually it is the buffer -that C-M-v would scroll.) - -** The etags program is now capable of recording tags based on regular -expressions provided on the command line. - -This new feature allows easy support for constructs not normally -handled by etags, such as the macros frequently used in big C/C++ -projects to define project-specific structures. It also enables the -use of etags and TAGS files for languages not supported by etags. - -The Emacs manual section on Tags contains explanations and examples -for Emacs's DEFVAR, VHDL, Cobol, Postscript and TCL. - -** Various mode-specific commands that used to be bound to C-c LETTER -have been moved. - -*** In gnus-uu mode, gnus-uu-interactive-scan-directory is now on C-c C-d, -and gnus-uu-interactive-save-current-file is on C-c C-z. - -*** In Scribe mode, scribe-insert-environment is now on C-c C-v, -scribe-chapter is on C-c C-c, scribe-subsection is on C-c C-s, -scribe-section is on C-c C-t, scribe-bracket-region-be is on C-c C-e, -scribe-italicize-word is on C-c C-i, scribe-bold-word is on C-c C-b, -and scribe-underline-word is on C-c C-u. - -*** In Gomoku mode, gomoku-human-takes-back is now on C-c C-b, -gomoku-human-plays is on C-c C-p, gomoku-human-resigns is on C-c C-r, -and gomoku-emacs-plays is on C-c C-e. - -*** In the Outline mode defined in allout.el, -outline-rebullet-current-heading is now on C-c *. - -** M-s in Info now searches through the nodes of the Info file, -just like s. The alias M-s was added so that you can use the same -command for searches in both Info and Rmail. - -** iso-acc.el now lets you enter inverted-! and inverted-? -with the sequences ~! and ~?. - -** M-x compare-windows now pushes mark in both windows before -it starts moving point. - -** There are two new commands in Dired, A (dired-do-search) -and Q (dired-do-query-replace). These are similar to tags-search and -tags-query-replace, but instead of searching the list of files that -appears in a tags table, they search all the files marked in Dired. - -** Changes to dabbrev. - -A new function, `dabbrev-completion' (bound to M-C-/), expands the -unique part of an abbreviation. - -Dabbrev now looks for expansions in other buffers, looks for symbols -instead of words and it works in the minibuffer. - -Dabbrev can be customized to work for shell scripts, with variables -that sometimes have and sometimes haven't a leading "$". See the -variable 'dabbrev-abbrev-skip-leading-regexp'. - -** In Rmail, the command rmail-input-menu has been eliminated. The -feature of selecting an Rmail file from a menu is now implemented in -another way. - -** Bookmarks changes. - -*** It now works to set bookmarks in Info nodes. - -*** Bookmarks can have annotations; type "C-h m" after doing -"M-x list-bookmarks", for more information on annotations. - -*** The bookmark-jump popup menu function is now `bookmark-menu-jump', for -those who bind it to a mouse click. - -*** The default bookmarks file name is now "~/.emacs.bmk". If you -already have a bookmarks file, it will be renamed automagically when -you next load it. - -** New package, ps-print. - -The ps-print package generates PostScript printouts of buffers or -regions, and includes face attributes such as color, underlining, -boldface and italics in the printed output. - -** New package, msb. - -The msb package provides a buffer-menu in the menubar with separate -menus for different types of buffers. - -** `cpp.el' is a new library that can highlight or hide parts of a C -file according to C preprocessor conditionals. To try it, run the -command M-x cpp-highlight-buffer. - -** Changes in CC mode. - -*** c-set-offset and related functions and variables can now accept -variable symbols. Also ++ and -- which mean 2* positive and negative -c-basic-offset respectively. - -*** New variable, c-recognize-knr-p, which controls whether K&R C -constructs will be recognized. Trying to recognize K&R constructs is a -time hog so if you're programming strictly in ANSI C, set this -variable to nil (it should already be nil in c++-mode). - -*** New variable, c-hanging-comment-ender-p for controlling -c-fill-paragraph's behavior. - -*** New syntactic symbol: statement-case-open. This is assigned to lines -containing an open brace just after a case/default label. - -*** New variable, c-progress-interval, which controls minibuffer update -message displays during long re-indention. This is a new feature -which prints percentage complete messages at specified intervals. - -** Makefile mode changes. - -*** The electric keys are not enabled by default. - -*** There is now a mode-specific menu bar menu. - -*** The mode supports font-lock, add-log, and imenu. - -*** The command M-TAB does completion of target names and variable names. - -** icomplete.el now works more like a minor mode. Use M-x icomplete-mode -to turn it on and off. - -Icomplete now supports an `icomplete-minibuffer-setup-hook', which is -run on minibuffer setup whenever icompletion will be occurring. This -hook can be used to customize interoperation of icomplete with other -minibuffer-specific packages, eg rsz-mini. See the doc string for -more info. - -** Ediff change. - -Use ediff-revision instead of vc-ediff. It also replaces rcs-ediff, -for those who use that; if you want to use a version control package -other than vc.el, you must set the variable -ediff-version-control-package to specify which package. - -** VC now supports branches with RCS. - -You can use C-u C-x C-q to select any branch or version by number. -It reads the version number or branch number with the minibuffer, -then checks out the file unlocked. - -Type C-x C-q again to lock the selected branch or version. -When you check in changes to that branch or version, there are two -possibilities: - --- If you've selected a branch, or a version at the tip of a branch, -then the new version adds to that branch. If you wish to create a -new branch, use C-u C-x C-q to specify a version number when you check -in the new version. - --- If you've selected an inner version which is not the latest in its -branch, then the new version automatically creates a new branch. - -** VC now supports CVS as well as RCS and SCCS. - -Since there are no locks in CVS, some things behave slightly -different when the backend is CVS. When vc-next-action is invoked -in a directory handled by CVS, it does the following: - - If the file is not already registered, this registers it for version -control. This does a "cvs add", but no "cvs commit". - If the file is added but not committed, it is committed. - If the file has not been changed, neither in your working area or -in the repository, a message is printed and nothing is done. - If your working file is changed, but the repository file is -unchanged, this pops up a buffer for entry of a log message; when you -finish the log message with C-c C-c, that checks in the resulting -changes along with the log message as change commentary. A writable -file remains in existence. - - If vc-next-action changes the repository file, it asks you -whether to merge in the changes into your working copy. - -vc-directory, when started in a CVS file hierarchy, reports -all files that are modified (and thus need to be committed). -(When the backend is RCS or SCCS vc-directory reports all -locked files). - -VC has no support for running the initial "cvs checkout" to get a -working copy of a module. You can only use VC in a working copy of -a module. - -You can disable the CVS support as follows: - - (setq vc-master-templates (delq 'vc-find-cvs-master vc-master-templates)) - -or by setting vc-handle-cvs to nil. - -This may be desirable if you run a non-standard version of CVS, or -if CVS was compiled with FORCE_USE_EDITOR or (possibly) -RELATIVE_REPOS. - -** Comint and shell mode changes: - -*** Completion works with file names containing quoted characters. - -File names containing special characters (such as " ", "!", etc.) that are -quoted with a "\" character are recognised during completion. Special -characters are quoted when they are inserted during completion. - -*** You can use M-x comint-truncate-buffer to truncate the buffer. - -When this command is run, the buffer is truncated to a maximum number -of lines, specified by the variable comint-buffer-maximum-size. Just -like the command comint-strip-ctrl-m, this can be run automatically -during process output by doing this: - -(add-hook 'comint-output-filter-functions - 'comint-truncate-buffer) - -** Telnet mode buffer name changed. - -The buffer name for a Telnet buffer is now *telnet-HOST*, not - *HOST-telnet*. This is for consistency with other Emacs packages. - -** M-x man (man) is now faster and more robust. On systems where the -entire man page is indented, the indentation is removed. - -The user option names that used to end in -p now end in -flag. The -new names are: Man-reuse-okay-flag, Man-downcase-section-letters-flag, -Man-circular-pages-flag. The Man-notify user option has been renamed to -Man-notify-method and accepts one more value, `pushy', that just -switches the current buffer to the manpage buffer, without switching -frames nor changing your windows configuration. - -A new user option Man-fontify-manpage-flag disables fontification -(thus speeding up man) when set to nil. Default is to fontify if a -window system is used. Two new user options Man-overstrike-face -(default 'bold) and Man-underline-face (default 'underline) can be set -to the preferred faces to be used for the words that man overstrikes -and underlines. Useful for those who like coloured man pages. - -Two new interactive functions are provided: Man-cleanup-manpage and -Man-fontify-manpage. Both can be used on a buffer that contains the -output of a `rsh host man manpage' command, or the output of an -`nroff -man -Tman manpage' command to make them readable. -Man-cleanup-manpage is faster, but does not fontify. - -** The new function modify-face makes it easy to specify -all the attributes of a face, all at once. - -** Faces now support background stippling. - -Use the command set-face-stipple to specify the stipple-pattern for a -face. Use face-stipple to access the specified stipple pattern. The -existing face functions now handle the stipple pattern when -appropriate. - -If you specify one of the standard gray colors as a face background -color, and your display doesn't handle gray, Emacs automatically uses -stipple instead to get the same effect. - -** Changes in Font Lock mode. - -*** Fontification - -Two new default faces are provided; `font-lock-variable-name-face' and -`font-lock-reference-face'. The face `font-lock-doc-string-face' has -been removed since it is the same as the existing -`font-lock-string-face'. Where appropriate, fontification -automatically uses these new faces. - -Fontification via commands `font-lock-mode' and -`font-lock-fontify-buffer' is now cleanly interruptible (i.e., with -C-g). If you interrupt during the fontification process, the buffer -remains in its previous modified state and all highlighting is removed -from the buffer. - -For C/C++ modes, Font Lock mode is much faster but highlights much -more. Other modes are faster/more extensive/more discriminatory, or a -combination of these. - -To enable Font Lock mode, add the new function `turn-on-font-lock' in -one of the following ways: - - (add-hook 'c-mode-hook 'turn-on-font-lock) - -Or for any visited file with: - - (add-hook 'find-file-hooks 'turn-on-font-lock) - -*** Supports color and grayscale displays - -Font Lock mode supports different ways of highlighting, depending on -the type of display and background shade. Attributes (face color, -bold, italic and underline, and display type and background mode) can -be controlled either from Emacs Lisp or X resources. - -See the new variables `font-lock-display-type' and -`font-lock-face-attributes'. - -*** Supports more modes - -The following modes are directly supported: - -ada-mode, asm-mode, bibtex-mode, c++-c-mode, c++-mode, c-mode, -change-log-mode, compilation-mode, dired-mode, emacs-lisp-mode, -fortran-mode, latex-mode, lisp-mode, mail-mode, makefile-mode, -outline-mode, pascal-mode, perl-mode, plain-tex-mode, rmail-mode, -rmail-summary-mode, scheme-mode, shell-mode, slitex-mode, tex-mode, -texinfo-mode. - -See the new variables `font-lock-defaults-alist' and -`font-lock-defaults'. - -Some modes support different levels of fontification. You can choose -to use the minimum or maximum available decoration by changing the -value of the new variable `font-lock-maximum-decoration'. - -Programmers are urged to make available to the community their own -keywords for modes not yet supported. See font-lock.el for -information about efficiency. - -*** fast-lock - -The fast-lock package speeds up Font Lock mode by saving font choices -in associated cache files. When you visit a file with Font Lock mode -and Fast Lock mode turned on for the first time, the file's buffer is -fontified as normal. When certain events occur (such as exiting -Emacs), Fast Lock saves the highlighting in a cache file. When you -subsequently visit this file, its cache is used to restore the -highlighting. - -To use this package, put in your `~/.emacs': - - (add-hook 'font-lock-mode-hook 'turn-on-fast-lock) - -To control the use of caches, see the documentation for `fast-lock-mode'. - -** You can tell pop-to-buffer to display certain buffers in the selected -window rather than finding some other window to display them in. -There are two variables you can use to specify these buffers. - -same-window-buffer-names holds a list of buffer names; if a buffer's -name appears in this list, pop-to-buffer puts it in the selected window. - -same-window-regexps holds a list of regexps--if any one of them -matches a buffer's name, then pop-to-buffer puts that buffer in the -selected window. - -The default values of these variables are not nil: they list various -buffers that normally appear, when you as for them, in the selected -window. These include shell buffers, mail buffers, telnet buffers, -and others. By removing elements from these variables, you can ask -Emacs to display those buffers in separate windows. - -** The special-display-buffer-names and special-display-regexps lists -have been generalized. An element may now be a list. The car of the list -is the buffer name or regular expression for matching buffer names. - -The cdr of the list can be an alist specifying additional frame -parameters for use in constructing the special display frame. - -Alternatively, the cdr can have this form: - - (FUNCTION ARGS...) - -where FUNCTION is a symbol. Then the frame is constructed by calling -FUNCTION; its first argument is the buffer, and its remaining -arguments are ARGS. - -** If the environment variable REPLYTO is set, its value is the default -for mail-default-reply-to. - -** When you send a message in Emacs, if you specify an Rmail file with -the FCC: header field, Emacs converts the message to Rmail format -before writing it. Thus, the file never contains anything but Rmail -format messages. - -** The new variable mail-from-style controls whether the From: header -should include the sender's full name, and if so, which format to use. - -** The new variable mail-personal-alias-file specifies the name of the -user's personal aliases. This defaults to the file ~/.mailrc. -mailabbrev.el used to have its own variable for this purpose -(mail-abbrev-mailrc-file). That variable is no longer used. - -** In Buffer-Menu mode, the d and C-d commands (which mark buffers for -deletion) now accept a prefix argument which serves as a repeat count. - -** Changes in BibTeX mode. - -*** Reference keys can now be entered with TAB completion. All -reference keys defined in that buffer and all labels that appear in -crossreference entries are object to completion. - -*** Braces are supported as field delimiters in addition to quotes. -BibTeX entries may have brace-delimited and quote-delimited fields -intermixed. The delimiters generated for new entries are specified by -the variables bibtex-field-left-delimiter and -bibtex-field-right-delimiter on a buffer-local basis. Those variables -default to braces, since it is easier to put quote accented characters -(as the german umlauts) into a brace-delimited entry. - -*** The function bibtex-clean-entry can now be invoked with a prefix -argument. In this case, a label is automatically generated from -various fields in the record. If bibtex-clean-entry is invoked on a -record without label, a label is also generated automatically. -Various variables (all beginning with `bibtex-autokey-') control the -creation of that key. The variable bibtex-autokey-edit-before-use -determines, if the user is allowed to edit auto-generated reference -keys before they are used. - -*** A New function bibtex-complete-string completes strings with -respect to the strings defined in this buffer and a set of predefined -strings (initialized to the string macros defined in the standard -BibTeX style files) in the same way in which ispell-complete-word -works with respect to words in a dictionary. Candidates for -bibtex-complete-string are initialized from variable -bibtex-predefined-strings and by parsing the files found in -bibtex-string-files for @String definitions. - -*** Every reference/field pair has now attached a comment which -appears in the echo area when this field is edited. These comments -should provide useful hints for BibTeX usage, especially for BibTeX -beginners. New variable bibtex-help-message determines if these help -messages are to appear in the minibuffer when moving to a text entry. - -*** Inscriptions of menu bar changed from "Entry Types" to -"Entry-Types" and "Bibtex Edit" to "BibTeX-Edit". - -*** The variable bibtex-include-OPTcrossref is now not longer a binary -switch but a list of reference names which should contain a crossref -field. E.g., you can tell bibtex-mode you want a crossref field for -@InProceedings and @InBook entries but for no other. - -*** The function validate-bibtex-buffer was completely rewritten to -validate if a buffer is syntactically correct. find-bibtex-duplicates -is no longer a function itself but was moved into -validate-bibtex-buffer. - -*** Cleaning a BibTeX entry tests, if necessary fields are there. -E.g., if you tell bibtex-mode to include a crossref entry, some fields -are optional which would be required without the crossref entry. If -you now leave the crossref entry empty and do a bibtex-clean-entry -with some now required fields left empty, version 2.0 of bibtex.el -complains about the absence of these fields, whereas version 1.3 -didn't. - -*** Default value for variables bibtex-maintain-sorted-entries and -bibtex-sort-ignore-string-entries is now t. - -*** All interactive functions are renamed to begin with `bibtex-'. - -*** Keybindings with \C-c\C-e entry changed for unification. Often -used reference types are now on control-modified keys, mediocre used -types are on unmodified keys, seldom used types are on shift-modified -keys and almost never used types on meta-modified keys. - -* Configuration Changes in Emacs 19.29 - -** Emacs now uses directory /usr/local/share for most of its installed -files. This follows a GNU convention for directory usage. - -** The option --with-x11 is no longer supported. -X11 is the only version of X that Emacs 19.29 supports; -use --with-x if you need to request X support explicitly. -(Normally this should not be necessary, since configure should -automatically enable X support if X is installed on your machine.) - -** If you use the site-init.el file to set the variable -mail-host-address to a string in the dumped Emacs, that string becomes -the default host address for initializing user-mail-address. -It is used instead of the value of (system-name). - -* Lisp-Level Changes in Emacs 19.29 - -** Basic Lisp - -*** The range of integer values is now at least 2**28 on all machines. -This means the maximum size of a buffer is at least 2**27-1, -or 134,217,727. - -*** You can now use Common Lisp syntax for the backquote and comma -macros. Thus, you can now write `(x ,y z) instead of (` (x (, y) z)). - -The old syntax is still accepted. - -*** The new function rassoc is like assoc, except that it compares the -key against the cdr of each alist element, where assoc would compare -it against the car of each alist element. - -*** The new function unintern deletes a symbol from an obarray. The -first argument can be the symbol to delete, or a string giving its -name. The second argument specifies the obarray (nil means the -current default obarray). - -If the specified symbol is not in the obarray, or if there's no symbol -in the obarray matching the specified string, unintern does nothing -and returns nil. If it does delete a symbol, it returns t. - -*** You can specify an alternative read function for use by load and -eval-region by binding the variable load-read-function to some other -function. This function should accept one argument just like read. -If load-read-function is nil, load and eval-region use ordinary read. - -*** The new function `type-of' takes any object as argument, and -returns a symbol identifying the type of that object--one of `symbol', -`integer', `float', `string', `cons', `vector', `marker', `overlay', -`window', `buffer', `subr', `compiled-function', -`window-configuration', `process'. - -*** When you use eval-after-load for a file that is already loaded, it -executes the FORM right away. As before, if the file is not yet -loaded, it arranges to execute FORM if and when the file is loaded -later. The result is: if you have called eval-after-load for a file, -and if that file has been loaded, then regardless of the order of -these two events, the specified form has been evaluated. - -*** The Lisp construct #@NUMBER now skips the next NUMBER characters, -treating them as a comment. - -You would not want to use this in a file you edit by hand, but it is -useful for commenting out parts of machine-generated files. - -*** Two new functions, `plist-get' and `plist-put', -allow you to modify and retrieve values from lists formatted as property-lists. -They work like `get' and `put', but operate on any list. -`plist-put' returns the modified property-list; you must store it -back where you got it. - -*** The new function add-to-list is called with two elements, -a variable that holds a list and a new element. -It adds the element to the list unless it is already present. -It compares elements using `equal'. Here is an example: - -(setq foo '(a b)) => (a b) - -(add-to-list 'foo 'c) => (c a b) - -(add-to-list 'foo 'b) => (c a b) - -foo => (c a b) - -** Changes in compilation. - -Functions and variables loaded from a byte-compiled file -now refer to the file for their doc strings. - -This has a few consequences: - --- Loading the file is faster and uses less memory. --- Reference to doc strings is a little slower (the same speed - as reference to the doc strings of primitive and preloaded functions). --- The compiled files will not work in old versions of Emacs. --- If you move the compiled file after loading it, Emacs can no longer - find these doc strings. --- If you alter the compiled file (such as by compiling a new - version), then further access to documentation strings will get - nonsense results. - -The byte compiler now optionally supports lazy loading of compiled -functions' definitions. If you enable this feature when you compile, -loading the compiled file does not actually bring the function -definitions into core. Instead it creates references to the compiled -file, and brings each function's definition into core the first time -you call that function, or when you force it with the new function -`fetch-bytecode'. - -Using the lazy loading feature has a few consequences: - --- Loading the file is faster and uses less memory. --- Calling any function in the file for the first time is slower. --- If you move the compiled file after loading it, Emacs can no longer - find the function definitions. --- If you alter the compiled file (such as by compiling a new - version), then further access to functions not already loaded - will get nonsense results. - -To enable the lazy loading feature, set up a non-nil file local -variable binding for the variable `byte-compile-dynamic' in the Lisp -source file. For example, put this on the first line: - - -*-byte-compile-dynamic: t;-*- - -It's a good idea to use the lazy loading feature for a file that -contains many functions, most of which are not actually used by a -given user in a given session. - -To turn off the basic feature of referring to the file for doc -strings, set byte-compile-dynamic-docstrings to nil. You can do this -globally, or for one source file by adding this to the first line: - - -*-byte-compile-dynamic-docstrings: nil;-*- - -** Strings - -*** Do not pass integer arguments to `concat' (or `vconcat' or -`append'). We are phasing out the old unrecommended support for -integers as arguments to these functions, in preparation for treating -numbers as single characters in a future release. To concatenate -numbers in string form, use `number-to-string' first, or rewrite the -call to use `format' instead of `concat'. - -*** The new function match-string returns the string of text matched at -the given parenthesized expression by the last regexp search, or nil -if there was no match. If the last match was by `string-match' on a -string, the string must be given. Therefore, this function can be -used in place of `buffer-substring' and `substring', when using -`match-beginning' and `match-end' to find match positions. - - (match-string N) or (match-string N STRING) - -*** The function replace-match now accepts an optional fourth argument, -STRING. Use this after performing string-match on STRING, to replace -the portion of STRING that was matched. When used in this way, -replace-match returns a newly created string which is the same as -STRING except for the matched portion. - -*** The new function buffer-substring-no-properties -is like buffer-substring except that the string it returns -has no text properties. - -*** The function `equal' now considers two strings to be different -if they don't have the same text properties. - -** Completion - -*** all-completions now takes an optional fourth argument. -If that argument is non-nil, completions that start with a space -are ignored unless the initial string also starts with a space. -(This used to happen unconditionally.) - -** Local Variables - -*** Local hook variables. - -There is now a clean way to give a hook variable a buffer-local value. -Call the function `make-local-hook' to do this. - -Once a hook variable is buffer-local, you can add hooks to it either -globally or locally. run-hooks runs the local hook functions -of the current buffer, then all the global hook functions. - -The functions add-hook and remove-hook take an additional optional -argument LOCAL which says whether to add (or remove) a local hook -function or a global one. - -Local hooks use t as an element of the (local) value of the hook -variable as a flag meaning to use the global value also. - -*** The new function local-variable-p tells you whether a particular -variable is buffer-local in the current buffer or a specified buffer. - -** Editing Facilities - -*** The function copy-region-as-kill no longer sets this-command; -as a result, a following kill command will not normally append -to the text saved by copy-region-as-kill. - -*** Regular expression searching and matching no longer performs full -Posix backtracking by default. They now stop with the first match found -instead of looking for the longest match--just as they did in Emacs 18. -The reason for this change is to get higher speed. - -There are new functions you can use if you really want to search or -match with Posix behavior: posix-search-forward, -posix-search-backward, posix-looking-at, and posix-string-match. Call -these just like re-search-forward, re-search-backward, looking-at, and -string-match. - -** Files - -*** The new variable `format-alist' defines file formats, -which are ways of translating between the data in a file and things -(text, text-properties, and possibly other information) in a buffer. - -`format-alist' has one element for each format. Each element is a -list like this: - (NAME DOC-STRING REGEXP FROM-FN TO-FN MODIFY MODE-FN) -containing the name of the format, a documentation string, a regular -expression which is used to recognize files in that format, a decoding -function, an encoding function, a flag that indicates whether the -encoding function modifies the buffer, and a mode function. - -FROM-FN is called to decode files in that format; it gets two args, BEGIN - and END, and can make any modifications it likes, returning the new - end position. It must make sure that the beginning of the file no - longer matches REGEXP, or else it will get called again. -TO-FN is called to encode a region into that format; it is also passed BEGIN - and END, and either returns a list of annotations as in - `write-region-annotate-functions', or modifies the region and returns - the new end position. -MODIFY, if non-nil, means the TO-FN modifies the region. If nil, TO-FN may - not make any changes and should return a list of annotations. - -`insert-file-contents' checks the beginning of the file that it is -inserting to see if it matches one of the regexps. If so, then it -calls the decoding function, and then looks for another match. When -visiting a file, it also calls the mode function, and sets the -variable `buffer-file-format' to the list of formats that the file -used. - -`write-region' calls the encoding functions for each format in -`buffer-file-format' before it writes the file. To save a file in a -different format, either set `buffer-file-format' to a different -value, or call the new function `format-write-file'. - -Since some encoding functions may be slow, you can request that -auto-save use a format different from the buffer's default by setting -the variable `auto-save-file-format' to the desired format. This will -determine the format of all auto-save files. - -*** The new function file-ownership-preserved-p tells you whether -deleting a file and recreating it would keep the file's owner -unchanged. - -*** The new function file-regular-p returns t if a file -is a "regular" file (not a directory, symlink, named pipe, -terminal, or other I/O device). - -*** The new function file-name-sans-extension discards the extension -of a file name. You call it with a file name, and returns a string -lacking the extension. - -*** The variable path-separator is a string which says which -character separates directories in a search path. It is ":" -for Unix and GNU systems, ";" for MSDOG and Windows NT. - -** Commands and Key Sequences - -*** Key sequences consisting of C-c followed by {, }, <, >, : or ; are -now reserved for major modes. Sequences consisting of C-c followed by -any other punctuation character are now meant for minor modes. We don't -plan to convert all existing major modes to stop using those sequences, -but we hope to keep them to a minimum. - -*** When the post-command-hook or the pre-command-hook gets an error, the error -is silently ignored. Emacs no longer sets the hook variable to nil when this -happens. Meanwhile, the hook functions can now alter the hook variable in -a normal fashion; there is no need to do anything special. - -*** define-key, lookup-key, and various other functions for changing or -looking up key bindings now let you write an event type with a list -like (ctrl meta newline) or (meta ?d), as in XEmacs. (ctrl meta newline) -is equivalent to the event type symbol C-M-newline, and (meta ?d) -is equivalent to the character ?\M-d. - -*** The function event-convert-list converts a list such as -(meta ?d) into the corresponding event type (a symbol or integer). - -*** In an interactive spec, `k' means to read a key sequence. In this -key sequence, upper case characters and shifted function keys which -have no bindings are converted to lower case if that makes them -defined. - -The new interactive code `K' reads a key sequence similarly, but does -not convert the last event. `K' is useful for reading a key sequence -to be given a binding. - -*** The variable overriding-local-map now has no effect on the menu bar -display unless overriding-local-map-menu-flag is non-nil. This is why -incremental search no longer temporarily changes the menu bars. - -Note that overriding-local-map does still affect the execution of key -sequences entered using the menu bar. So if you use -overriding-local-map, and a menu bar key sequence comes in, you should -make sure to clear overriding-local-map before that key sequence gets -looked up and executed. But this is what you'd normally do anyway: -programs that use overriding-local-map normally exit and "put back" -any event such as menu-bar that they do not handle specially. - -*** The new variable `overriding-terminal-local-map' is like -overriding-local-map, but is specific to a single terminal. - -*** delete-frame events. - -When you use the X window manager's "delete window" command, this now -generates a delete-frame event. The standard definition of this event -is a command that deletes the frame that received the event, and kills -Emacs when the last visible or iconified frame is deleted. You can -rebind the event to some other command if you wish. - -*** Two new types of events, iconify-frame and make-frame-visible, -indicate that the user iconified or deiconified a frame with the -window manager. Since the window manager has already done the work, -the default definition for both event types in Emacs is to do nothing. - -** Frames and X - -*** Certain Lisp variables are now local to an X terminal (in other -words, all the screens of a single X server). The value in effect, at -any given time, is the one that belongs to the terminal of the -selected frame. The terminal-local variables are -default-minibuffer-frame, system-key-alist, defining-kbd-macro, and -last-kbd-macro. There is no way for Lisp programs to create others. - -The terminal-local variables cannot be buffer-local. - -*** When you create an X frame, for the `top' and `left' frame -parameters, you can now use values of the form (+ N) or (- N), where N -is an integer. (+ N) means N pixels to the right of the left edge of -the screen and (- N) means N pixels to the left of the right edge. In -both cases, N may be zero (exactly at the edge) or negative (putting -the window partly off the screen). - -The function x-parse-geometry can return values of these forms -for certain inputs. - -*** The variable menu-bar-file-menu has been renamed to -menu-bar-files-menu to match the actual item that appears in the menu. -(All the other such variable names do match.) - -*** The new function active-minibuffer-window returns the minibuffer window -currently active, or nil if none is now active. - -*** In the functions next-window, previous-window, next-frame, -previous-frame, get-buffer-window, get-lru-window, get-largest-window -and delete-windows-on, if you specify 0 for the last argument, -it means to consider all visible and iconified frames. - -*** When you set a frame's cursor type with modify-frame-parameters, -you can now specify (bar . INTEGER) as the cursor type. This stands -for a bar cursor of width INTEGER. - -*** The new function facep returns t if its argument is a face name -(or if it is a vector such as is used internally by the Lisp code -to represent a face). - -*** Each frame can now have a buffer-predicate function, -which is the `buffer-predicate' frame parameter. -When `other-buffer' looks for an alternative buffer, it considers -only the buffers that fit the selected frame's buffer predicate (if it -has one). This is useful for applications that make their own frames. - -*** When you create an X frame, you can now specify the frame parameter -`display'. This says which display to put the frame on. The value -should be a display name--a string of the form -"HOST:DPYNUMBER.SCREENNUMBER". - -The functions x-server-... and x-display-... now take an optional -argument which specifies the display to ask about. You can use either -a display name string or a frame. A value of nil stands for the -selected frame. - -To close the connection to an X display, use the function -x-close-connection. Specify which display with a display name. You -cannot close the connection if Emacs still has frames open on that -display. - -x-display-list returns a list indicating which displays Emacs has -connections to. Its elements are display names (strings). - -*** The icon-type frame parameter may now be a file name. -Then the contents of that file specify the icon bitmap to use -for that frame. - -*** The title of an Emacs frame, displayed by most window managers, is -set from frame-title-format or icon-title-format. These have the same -structure as mode-line-format. - -*** x-display-grayscale-p is a new function that returns non-nil if -your X server can display shades of gray. Currently it returns -non-nil for color displays (because they can display shades of gray); -we may change it in the next version to return nil for color displays. - -*** The frame parameter scroll-bar-width specifies the width of the -scrollbar in pixels. - -** Buffers - -*** Creating a buffer with get-buffer-create does not obey -default-major-mode. That variable is now handled in a separate -function, set-buffer-major-mode. get-buffer-create and generate-new-buffer -always leave the newly created buffer in Fundamental mode. - -Creating a new buffer by visiting a file or with switch-to-buffer, -pop-to-buffer, and similar functions does call set-buffer-major-mode -to select the default major mode specified with default-major-mode. - -*** You can now create an "indirect buffer". An indirect buffer shares -its text, including text properties, with another buffer (the "base -buffer"), but has its own major mode, local variables, overlays, and -narrowing. An indirect buffer has a name of its own, distinct from -those of the base buffer and all other buffers. An indirect buffer -cannot itself be visiting a file (though its base buffer can be). -The base buffer cannot itself be indirect. - -Use (make-indirect-buffer BASE-BUFFER NAME) to make an indirect buffer -named NAME whose base is BASE-BUFFER. If BASE-BUFFER is an indirect -buffer, its base buffer is used as the base for the new buffer. - -You can make an indirect buffer current, or switch to it in a window, -just as you would a non-indirect buffer. - -The function buffer-base-buffer, given an indirect buffer, returns its -base buffer. It returns nil when given an ordinary buffer (not -indirect). - -The library `noutline' has versions of Outline mode and Outline minor -mode which let you display different parts of the outline in different -indirect buffers. - -** Subprocesses - -*** The functions call-process and call-process-region now allow -you to direct error message output from the subprocess into a -separate destination, instead of mixing it with ordinary output. -To do this, specify for the third argument, BUFFER, a list of the form - (BUFFER-OR-NAME ERROR-DESTINATION) -BUFFER-OR-NAME specifies where to put ordinary output; it should -be a buffer or buffer name, or t, nil or 0. This is what would -have been the BUFFER argument, ordinarily. - -ERROR-DESTINATION specifies where to put the error output. -nil means discard it, t means mix it with the ordinary output, -and a string specifies a file name to write this output into. - -You can't specify a buffer to put the error output in; that is not -easy to implement directly. You can put the error output into a -buffer by sending it to a temporary file and then inserting the file -into a buffer. - -*** Comint mode changes: - -**** The variable comint-completion-addsuffix can also be a cons pair -of the form (DIRSUFFIX . FILESUFFIX), where DIRSUFFIX and FILESUFFIX are -strings added on unambiguous or exact completion of directories and file -names, respectively. - -** Text properties - -*** You can now specify which values of the `invisible' property -make text invisible in a given buffer. The variable -`buffer-invisibility-spec', which is always local in all buffers, -controls this. - -If its value is t, then any non-nil `invisible' property makes -a character invisible. - -If its value is a list, then a character is invisible if its -`invisible' property value appears as a member of the list, or if it -appears as the car of a member of the list. - -When the `invisible' property value appears as the car of a member of -the `buffer-invisibility-spec' list, then the cdr of that member has -an effect. If it is non-nil, then an ellipsis appears in place of the -character. (This happens only for the *last* invisible character in a -series of consecutive invisible characters, and only at the end of a -line.) - -If a character's `invisible' property is a list, then Emacs checks each -element of the list against `buffer-invisibility-spec'. If any element -matches, the character is invisible. - -*** The command `list-text-properties-at' shows what text properties -are in effect at point. - -*** Frame objects now exist in Emacs even on systems that don't support -X Windows. You can create multiple frames, and switch between them -using select-frame. The selected frame is actually displayed on your -terminal; other frames are not displayed at all. The selected frame -number appears in the mode line after `Emacs', except for frame 1. - -Switching frames on ASCII terminals is therefore more or less -equivalent to switching between different window configurations. - -*** The new variable window-size-change-functions holds a list of -functions to be called if window sizes change (or if windows are -created or deleted). The functions are called once for each frame on -which changes have occurred, with the frame as the sole argument. -This takes place shortly before redisplay. - -*** The modification hook functions of overlays now work differently. -They are called both before and after each change. This makes it -possible for the functions to determine exactly what the change was. - -This change affects three overlay properties: the modification-hooks -property, a list of functions called for deletions overlapping the -overlay's range and for insertions inside it; the -insert-in-front-hooks, a list of functions called for insertions at -the beginning of the overlay; and the insert-behind-hooks, a list of -functions called for insertions at the end of the overlay. - -Each function is called both before and after each change that it -applies to. Before the change, it is called with four arguments: - (funcall FUNCTION OVERLAY nil START END) -START and END are the same arguments that the before-change-functions -receive. - -After the change, each function is called with five arguments: - (funcall FUNCTION OVERLAY t START END OLDSIZE) -The last arguments, START and END and OLDSIZE, -are the same arguments that the after-change-functions receive. - -This means the function must accept either four or five arguments. - -*** You can set defaults for text-properties with the new variable -`default-text-properties'. Its value is a property list; the values -specified there are used whenever a character (or its category) does -not specify a value. - -*** The `face' property of a character or an overlay can now be a list -of face names. Formerly it had to be just one face name. - -*** Changes in handling the `intangible' text property. - -**** If inhibit-point-motion-hooks is non-nil, then `intangible' properties -are ignored. - -**** Moving to just before a stretch of intangible text -is no longer special in any way. Point stays at that place. - -**** When you move point backwards into the midst of intangible text, -point moves back to the beginning of that text. (It used to move -forward to the end of that text, which was not very useful.) - -**** When moving across intangible text, Emacs stops wherever the -property value changes. So if you have two stretches of intangible -text, with different non-nil intangible properties, it is possible to -place point between them. - -** Overlays - -*** Overlay changes. - -**** The new function previous-overlay-change returns the position of -the previous overlay start or end, before a specified position. This -is the backwards-moving counterpart of next-overlay-change. - -**** overlay-get now supports category properties on an overlay -the same way get-text-property supports them as text properties. - -Specifically, if an overlay does not have the property PROP that you -ask for, but it does have a `category' property which is a symbol, -then that symbol's PROP property is used. - -**** If an overlay has a non-nil `evaporate' property, it will be -deleted if it ever becomes empty (i.e., when it spans no characters). - -**** If an overlay has a `before-string' and/or `after-string' property, -these strings are displayed at the overlay's endpoints. - -** Filling - -*** The new variable fill-paragraph-function provides a way for major -modes to override the filling of paragraphs. If this is non-nil, -fill-paragraph calls it as a function, passing along its sole -argument. If the function returns non-nil, fill-paragraph assumes it -has done the job and simply passes on whatever value it returned. - -The usual use of this feature is to fill comments in programming -language modes. - -*** Text filling and justification changes: - -**** The new variable use-hard-newlines can be used to make a -distinction between "hard" and "soft" newlines; the fill functions -will then never remove a newline that was manually inserted. Hard -newlines are marked with a non-nil `hard' text-property. - -**** The fill-column and left-margin can now be modified by text-properties. -Most lisp programs should use the new functions (current-fill-column) and -(current-left-margin), which return the proper values to use for the -current line. - -**** There are new functions for dealing with margins: - -***** Set-left-margin and set-right-margin (set the value for a region -and re-fill). These functions take three arguments: two to specify -a region, and the desired margin value. - -***** Increase-left-margin, decrease-left-margin, increase-right-margin, and -decrease-right-margin (change settings relative to current values, and -re-fill). - -***** move-to-left-margin moves point there, optionally adding -indentation or changing tabs to spaces in order to make that possible. -beginning-of-line-text also moves past the fill-prefix and any -indentation added to center or right-justify a line, to the beginning -of the text that the user actually typed. - -***** delete-to-left-margin removes any left-margin indentation, but -does not change the property. - -**** The paragraph-movement functions look for the paragraph-start and -paragraph-separate regexps at the current left margin, not at the -beginning of the line. This means that those regexps should NOT use ^ -to anchor the search. However, for backwards compatibility, a ^ at -the beginning of the regexp will be ignored, so most packages won't break. - -**** justify-current-line is now capable of doing left, center, or -right justification as well as full justification. - -**** The fill functions can do any kind of justification based on the new -`justification' text-property and `default-justification' variable, -or arguments to the functions. They also have a new option which -defeats the normal removal of extra whitespace. - -**** The new function `current-justification' returns the kind of -justification used for the current line. The new function -`set-justification' can be used to change it, including re-justifying -the text of the region according to the new value. - -**** Filling and auto-fill are disabled if justification is `none'. - -**** The auto-fill-function is now called regardless of whether -the fill-column has been exceeded; the function can determine on its -own whether filling (or justification) is necessary. - -** Processes - -*** process-tty-name is a new function that returns the name of the -terminal that the process itself reads and writes on (not the name of -the pty that Emacs uses to talk with that terminal). - -*** Errors in process filters and sentinels are now normally caught -automatically, so that they don't abort other Lisp programs. - -Setting debug-on-error non-nil turns off this feature; then errors in -filters and sentinels are not caught. As a result, they can invoke -the debugger, under the control of debug-on-error. - -*** Emacs now preserves the match data around the execution of process -filters and sentinels. You can use search and match functions freely -in filters and sentinels without explicitly bothering to save the -match data. - -** Display - -*** The variable message-log-max controls how messages are logged in the -"*Messages*" buffer. An integer value means to keep that many lines; -t means to log with no limit; nil means disable message logging. Lisp -code that calls `message' excessively (e.g. isearch.el) should probably -bind this variable to nil. - -*** Display tables now have a new element, at index 261, specifying the -glyph to use for the separator between two side-by-side windows. By -default, this is the vertical bar character `|'. Probably the only -other useful character to store for this element is a space, to make -less visual separation between two side-by-side windows displaying -related information. - -*** The new mode-line-format spec %c displays the current column number. - -*** The new variable blink-matching-delay specifies how long to keep -the cursor at the matching open-paren, after you insert a close-paren. -This is useful mainly on systems which can wait for a fraction of a -second--you can then specify fractional values such as 0.5. - -*** Faster processing of buffers with long lines - -The new variable cache-long-line-scans determines whether Emacs -should use caches to handle long lines more quickly. This variable is -buffer-local, in all buffers. - -Normally, the line-motion functions work by scanning the buffer for -newlines. Columnar operations (like `move-to-column' and -`compute-motion') also work by scanning the buffer, summing character -widths as they go. This works well for ordinary text, but if the -buffer's lines are very long (say, more than 500 characters), these -motion functions will take longer to execute. Emacs may also take -longer to update the display. - -If cache-long-line-scans is non-nil, these motion functions cache -the results of their scans, and consult the cache to avoid rescanning -regions of the buffer until the text is modified. The caches are most -beneficial when they prevent the most searching---that is, when the -buffer contains long lines and large regions of characters with the -same, fixed screen width. - -When cache-long-line-scans is non-nil, processing short lines will -become slightly slower (because of the overhead of consulting the -cache), and the caches will use memory roughly proportional to the -number of newlines and characters whose screen width varies. - -The caches require no explicit maintenance; their accuracy is -maintained internally by the Emacs primitives. Enabling or disabling -the cache should not affect the behavior of any of the motion functions; -it should only affect their performance. - -** System Interface - -*** The function user-login-name now accepts an optional -argument uid. If the argument is non-nil, user-login-name -returns the login name for that user id. - -*** system-name, user-name, user-full-name and user-real-name are now -variables as well as functions. The variables hold the same values -that the functions would return. The new variable multiple-frames -is non-nil if at least two non-minibuffer frames are visible. These -variables may be useful in constructing the value of frame-title-format -or icon-title-format. - -*** Changes in time-conversion functions. - -**** The new function format-time-string takes a format string and a -time value. It converts the time to a string, according to the format -specified. You can specify what kind of conversion to use with -%-specifications. - -**** The new function decode-time converts a time value into a list of -specific items of information: the year, month, day of week, day of -month, hour, minute and second. (A time value is a list of two or -three integers.) - -**** The new function encode-time converts specific items of time -information--the second, minute, hour, day, month, year, and time -zone--into a time value. - -* Changes in Emacs 19.27 - -There are no changes; however, here is one bug fix made in 19.26 that users -think should be documented here. - -** SPC and DEL in Info now handle menus consistently. - -SPC and DEL scroll through an entire subtree an Info manual. Once you -scroll through a node far enough to reach a menu, SPC begins moving -into the subnodes of the menu, starting with the first one. When you -reach the end of a subnode, SPC moves into the next subnode, and so -on. - -DEL more or less scrolls through the same text in reverse order. - -* User Editing Changes in Emacs 19.26 - -** In the X toolkit version, if you click on a menu bar item and -release the button quickly outside the menu, the menu remains visible -until you click or type something else. If you click on the menu, you -select from the menu. Any other mouse click makes the menu disappear. -Keyboard input gets rid of the menu and then is processed normally. - -"Quickly" means within double-click-time milliseconds. - -** The C-x 5 commands to select a buffer in "another frame" now use an -existing iconified frame, if any, deiconifying it. They also raise -the frame. - -** Region highlighting on a black-and-white-only display now uses -underlining. Inverse-video had the problem that you couldn't see -the cursor. - -** You can now change the height of a window by pressing mouse-1 on -the mode line and dragging it up and down. - -** If you set the environment variable LC_CTYPE to iso_8859_1 or -iso-8859-1, Emacs automatically sets up for display and syntactic -handling of the ISO Latin-1 character set. - -This does not automatically load any of the packages for input of -these characters, because it's not yet clear what is right to do. -You must still explicitly load either iso-transl or iso-acc. - -** For a read-only buffer that is also modified, the mode line now displays -%* instead of %%. - -** M-prior (scroll-other-window-down) is a new command that works like -M-next (and C-M-v) but scrolls in the opposite direction. - -M-home moves to the beginning of the buffer, in the other window. -M-end moves to the end of the buffer, in the other window. These two -commands, along with M-next and M-prior, form a series of commands for -moving around in the other window. - -** In change logs, the mail address is now delimited with <...> instead -of (...). - -This makes it a little more convenient to extract the mail address for -use in mailing a message. - -** In Shell mode and other comint modes, C-a has now returned to -its ordinary meaning: move to the beginning of the line. -Use C-c C-a to move to the end of the prompt. - -** If you set mail-signature to t to cause automatic insertion of -your .signature file, you now get a -- before the signature. - -** Setting rmail-highlighted-headers to nil entirely turns off -highlighting in Rmail. However, if your motivation for doing this is -that the highlighted text doesn't look good on your display, it might -be better to change the appearance of the `highlight' face. Once -you've done that, you may find Rmail highlighting is useful. - -** In the calendar, mouse-2 is now used only for commands that apply to a date. -If you click it when not on a date, it gives an immediate error. - -Mouse-3 in the calendar now gives a menu of commands that do not apply -to a particular date. - -The D command displays diary entries from a specified diary file (not -your standard diary file). - -** In the gnus-uu package, the binding for gnus-uu-threaded-decode-and-view -is now C-c C-v C-d, not C-c C-v C-h. Thus, C-c C-v C-h is now available -for asking for a list of the subcommands of C-c C-v. - -** You can now specify "who you are" for various Emacs packages by -setting just one variable, user-mail-address. This currently applies -to posting news with GNUS and to making change log entries. It may -apply to additional Emacs features in the future. - -* Lisp-Level Changes in Emacs 19.26: - -** The function insert-char now takes an optional third argument -which, if non-nil, says the inserted characters should inherit sticky -text properties from the surrounding text. - -** The `diary' library has been renamed to `diary-lib'. If you refer -to this library in your Lisp code, you must update the references. - -** Sending text to a subprocess can read input from subprocesses if it -has to wait because the destination subprocess's terminal input buffer -is full. - -It was already possible in unusual occasions for this operation to -read subprocess input, but it did not happen very often. It is now -more likely to happen. - -** last-nonmenu-event is now bound to t around filter functions and sentinels. -This is to ensure that y-or-n-p and yes-or-no-p use the keyboard by default. - -** In mode lines, %+ now displays as % for unmodified read-only -buffers. It is now the same as %* except in the case of a modified -read-only buffer; in that case, %+ displays as *. - -The old meaning of %+ is now available on %&. -It displays * for a modified buffer and - for an unmodified buffer, -regardless of read-only status. - -** You can now use `underline' in the color list of a face. -It serves as a last resort, and says to underline the face -(if previous color list elements can't be used). - -** The new function x-color-values returns the list of color values -for a given color name (a string). The list contains three integers -which give the amounts of red, green and blue in the color: (R G B). - -** In run-at-time, 0 as the repeat interval means "don't repeat". - -** The variable trim-versions-without-asking has been renamed to -delete-old-versions. - -** The new function other-window-for-scrolling returns the choice of -other window for C-M-v to scroll. - -** Note that the function fceiling was mistakenly documented as fceil before. - -* Changes in cc-mode.el in Emacs 19.26: - -** A new syntactic symbol has been added: substatement-open. It - defines the open brace of a substatement block. These used to get: - ((block-open ...) (substatement . ...)). - - Non-block substatement lines still get just ((substatement . ...)) - - Note that the custom indent function c-adaptive-block-open has been - removed as obsolete. - -** You can now specify the `hanginess' of closing braces. See - c-hanging-braces-alist. - -** Recognizes try and catch blocks in C++. They are given the - substatement syntactic symbol. - -** should be generally more forgiving about non-GNU standard top-level - construct definition styles (i.e. where the function/class/struct - opening brace does not start in column zero). - - If you hang the braces that open a top-level construct on the right - edge, and you find you still need to define defun-open-prompt (Emacs - 19) please let me know. Note that there may still be performance - issues related to non-column zero opening braces. - -** c-macro-expand is put on C-c C-e - -** New style: "Default". Resets indentation to those shipped with - cc-mode.el. - -** internal defun c-indent-via-language-element has been renamed - c-indent-line for compatibility with c-mode.el and awk-mode. - -** new buffer-local variable c-comment-start-regexp for (potential) - flexibility in adding new modes based on cc-mode.el - -* Changes in Emacs 19.25 - -The variable x-cross-pointer-shape (which didn't really exist) has -been renamed to x-sensitive-text-pointer-shape, and now does exist. - -* Changes in Emacs 19.24 - -Here is a list of new Lisp packages introduced since 19.22. - -derived.el Define new major modes based on old ones. -dired-x.el Extra Dired features. -double.el New mode for conveniently inputting non-beyond chars. -easymenu.el Create menus easily. -ediff.el Snazzy diff interface. -foldout.el A kind of outline mode designed for editing programs. -gnus-uu.el UUdecode in GNUS buffers. -ielm.el Interactively evaluate Lisp. - This is a replacement for Lisp Interaction Mode. -iso-cvt.el Conversion of beyond-ASCII characters between - various different representations. -jka-compr.el Automatic compression/decompression. -mldrag.el Drag modeline to change heights of windows. -mail-hist.el Provides history for headers of outgoing mail. -rsz-mini.el Automatically resizing minibuffers. -s-region.el Set region by holding shift. -skeleton.el Templates for statement insertion. -soundex.el Classifying words by how they sound. -tempo.el Template insertion with hotspots. - -* User Editing Changes in 19.23. - -** Emacs 19.23 uses Ispell version 3. - -Previous Emacs 19 versions used Ispell version 4. That version had -improvements in storing the dictionary compactly, but these are not -very important nowadays. Meanwhile, in parallel to the work on Ispell -4, many useful features were added to Ispell 3. Until a few months -ago, the terms on Ispell 3 did not let us use it; but they have now -been changed, so now we are using it. We are dropping Ispell 4. - -** Emacs 19.23 can run on MS-DOG. See the file MSDOS in the same -directory as this file. - -** Emacs 19.23 can work with an X toolkit. You must specify toolkit -operation when you configure Emacs: use the option ---with-x-toolkit=yes. (This option uses code developed by Lucid; -thanks to Frederic Pierresteguy for helping to adapt it.) - -** Emacs now has dialog boxes; yes/no and y/n questions automatically -use them in commands invoked with the mouse. For more information, -see below under "Lisp programming changes". - -** Menus now display the keyboard equivalents (if any) of the menu -commands in parentheses after the menu item. - -** Kill commands, used in a read-only buffer, now move point across -the text they would otherwise have killed. This way, you can use -repeated kill commands to transfer text into the kill ring. - -** There is now a global mark ring in addition to the mark ring that is local -to each buffer. The global mark ring stores positions in any buffer. Any -time the mark is set and the current buffer is different from the last time -the mark was set, the new mark is pushed on the global mark ring as well. -The new command C-x C-SPC (pop-global-mark) pops the global mark ring and -jumps to the last mark pushed, first switching to that buffer. - -** Query Replace is now available in the Edit menu. - -** ESC no longer simply exits a Query Replace. It now exits the Query -Replace and remains pending. Thus, ESC A and M-A are now equivalent -in Query Replace. - -To simply exit a Query Replace, type RET or Period. - -** M-mouse-2 now puts point at the end of the yanked secondary selection. - -** Mouse-1 in the mode line now simply selects the window above that -mode line. Mouse-2 in the mode line selects that window and expands -it to fill the frame it is in. - -** You can now use mouse-2 in a Dired buffer or Tar mode buffer to find -a file you click on, in a compilation buffer to go to a particular -error message, and in a *Occur* buffer to go to a particular -occurrence. - -(It was already possible to do likewise in Info and in completion list -buffers.) - -What's more, the sensitive areas of the buffer now highlight when you -move the mouse over them. - -** In a completion list buffer, the command RET now chooses the completion -that is around or next to point. - -** If you specify the foreground color for the `mode-line' face, and -mode-line-inverse-video is non-nil, then the default background color -is the usual foreground color. - -** revert-buffer now preserves markers pointing within the unchanged -text (if any) at the beginning and end of the file. - -** Version control checkin and checkout preserve all markers if the -file does not contain any of the magic version header sequences that -are updated automatically by RCS and SCCS. If such version headers -are present, checkin and checkout preserve a marker unless it comes -between two such sequences. (So it's a good idea to put all the -header sequences close together.) - -** When a large deletion shuts off auto save temporarily in a buffer, -you can now turn it on again by saving the buffer with C-x C-s (as was -possible in Emacs 18). You can also turn it on again with M-1 M-x -auto-save (as has been possible in Emacs 19). - -** C-x r d now runs the command delete-rectangle. - -** The new command imenu shows you a menu of interesting places in the -current buffer and lets you select one; then it moves point there. -The definition of interesting places depends on the major mode, but -typically this includes function definitions and such. Normally, -imenu displays the menu in a buffer; but if you bind it to a mouse -event, it shows a mouse popup menu. - -** You can make certain chosen buffers, that normally appear in a -separate window, appear in special frames of their own. To do this, -set special-display-buffer-names to a list of buffer names; any buffer -whose name is in that list automatically gets a special frame when it -is to be displayed in another window. - -A good value to try is ("*compilation*" "*grep*" "*TeX Shell*"). - -More generally, you can set special-display-regexps to a list of regular -expressions; then each buffer whose name matches any of those regular -expressions gets its own frame. - -The variable special-display-frame-alist specifies the frame -parameters for these frames. It has a default value, so you don't -need to set it. - -** If you set sentence-end-double-space to nil, the fill commands -expect just one space at the end of a sentence. (If you want the -sentence commands to accept single spaces, you must modify the regexp -sentence-end also.) - -** You can suppress the startup echo area message by adding text like -this to your .emacs file: - -(setq inhibit-startup-echo-area-message "YOUR-LOGIN-NAME") - -Simply setting inhibit-startup-echo-area-message to your login name is -not sufficient to inhibit the message; Emacs explicitly checks whether -.emacs contains an expression as shown above. Your login name must -appear in the expression as a Lisp string constant. - -This way, you can easily inhibit the message for yourself if you wish, -but thoughtless copying of your .emacs file will not inhibit the -message for someone else. - -** Outline minor mode now uses C-c C-o as a prefix instead of just C-c. - -** In Outline mode, hide-subtree is now C-c C-d. (It was C-c C-h; but -that is now a conventional way to ask for help about C-c commands.) - -** There are two additional commands in Outline mode. -M-x hide-sublevels - hides all headers except the topmost N levels. -M-x hide-other - hides everything about the body that point is in - plus the headers leading up from there to the top of the tree. - -** In iso-transl and iso-insert, the sequences for entering A-ring and -the AE ligature are now just A and E (plus the initial C-x 8 or Alt). -You used to have to enter AA or AE, after the C-x 8 prefix of course. -Likewise for lower case a-ring and ae. - -** iso-transl now defines convenient Alt keys as well as the C-x 8 prefix. -Instead of prefixing a sequence with C-x 8, you can add Alt to the -first character of the sequence. For example, Alt-" a is now a way -to enter an a-umlaut. - -** CC mode is a greatly improved mode for C and C++. -See the following page. - -** tcl mode is a new major mode. It provides features for -editing, indenting and running tcl programs. - -** Compilation minor mode lets you parse error messages in any buffer, -not just a normal compilation output buffer. Type M-x -compilation-minor-mode to enable the minor mode; then C-c C-c jumps to -the source location for the error at point, as in the `*compilation*' -buffer. If you use compilation-minor-mode in an Rlogin buffer, it -automatically accesses remote source files by ftp. - -** Comint and shell mode changes: - -*** Comint modes (including Shell mode, GUD modes, etc.) now bind -C-M-l to the command comint-show-output. This command scrolls the -buffer to show the last batch of output from the subprogram. - -*** Completion in Comint modes now truly operates on the string before -point, rather than the word that point is within. - -*** Comint mode file name completion ignores those files that end with a -string in the new variable comint-completion-fignore. This variable's -default value is nil. - -*** Shell mode uses the variable shell-completion-fignore to set -comint-completion-fignore. The default value is nil, but some -people prefer ("~" "#" "%"). - -*** The function `comint-watch-for-password-prompt' can be used to -suppress echoing when a subprocess asks for a password. To use it, -do this: - -(add-hook 'comint-output-filter-functions - 'comint-watch-for-password-prompt) - -*** You can use M-x shell-strip-ctrl-m to strip ^M characters from -process output. - -*** In Shell mode, TAB now completes environment variables, if possible, -and expands directory references. - -*** You can use M-x comint-run to execute any program of your choice in -a comint mode. Some programs such as shells, rlogin, and debuggers -have their own specialized modes; this command is one way to use -comint to run programs for which no such specialized mode exits. (You -can also run a shell with M-x shell and run the program of your choice -under the shell--but that gives you the specializations of Shell -mode.) - -** When you run GUD (M-x gdb, M-x dbx, and so on), you can use TAB -to do file name completion in the minibuffer. - -The "Complete" menu includes an item for directory expansion. - -** GUD working with future versions of GDB will permit TAB for -GDB-style symbol completion. This will work with GDB 4.13. - -** Rmail no longer gets new mail automatically when you visit an Rmail -file specified by name--not even if it is your primary Rmail file. To -get new mail, type `g'. This feature is an advantage because you now -have a choice of whether to get new mail. (This change actually -occurred in an earlier version, but wasn't listed here then, since it -made the code do what the documentation already said.) - -** Rmail now highlights certain fields automatically, when you use X -windows. The variable rmail-highlighted-headers controls which -fields. - -** If you set rmail-summary-window-size to an integer, Rmail uses -a window that many lines high for the summary buffer. - -** rmail-input-menu is a new command that visits an Rmail file letting -you choose which file with a mouse menu. rmail-output-menu is -similar; it outputs the current message, using a mouse menu to choose -which Rmail file. These commands use the variables -rmail-secondary-file-directory and rmail-secondary-file-regexp. - -** The mh-e package has been changed substantially. -See the file ./MH-E-NEWS for details. - -** The calendar and diary have new features. - -The menu bar for the calendar contains most of the calendar commands, -arranged into logical categories. - -Mouse-2 now performs specific-date-related commands when clicked on a -date in the calendar window and common three-month-related commands -when clicked elsewhere in the calendar window. - -You can set up colored/shaded highlighting of holidays, diary entry -dates, and today's date, by setting calendar-holiday-marker, -diary-entry-marker, and calendar-today-marker to a face instead of a -character. Using a special face is now the default if you are using a -window system. - -** The appt package for displaying appointment reminders has new -features. - -*** The appt alarm window stays for the full duration of -appt-display-duration. It no longer disappears when you start typing -text. - -*** You can change the way the appointment window is created/deleted by -setting the variables appt-disp-window-function and -appt-delete-window-function. - -For instance, these variables can be set to functions that display -appointments in pop-up frames, which are lowered or iconified after -appt-display-duration seconds. - -** desktop.el can now save a list of buffer-local variables, -and saves more global ones. - -** Pascal mode has been completely rewritten. It now features -completing of function names, variables and type definitions around -current point (like M-TAB does with lisp-symbols). There's also an -outline mode (M-x pascal-outline) that hides the bodies of all -functions you're not working with. - -** Edebug has a number of changes: - -*** Edebug syntax error reporting is improved. - -*** Top-level forms and defining forms other than defun and defmacro may -now be debugged with Edebug. - -*** Edebug specifications may now contain body, &define, name, arg or -arglist, def-body, and def-form, to support definitions. - -*** edebug-all-defuns is renamed to edebug-all-defs. -def-edebug-form-spec is replaced by def-edebug-form whose arguments -are unevaluated. The old names are still available for now. - -*** Frequency counts and coverage data may be displayed for functions being -debugged. - -*** A global break condition is now checked at every stop point. - -*** The previous condition at a breakpoint may now be edited. - -*** A new "next" mode stops only after expression evaluation. - -*** A new command, top-level-nonstop, does not even stop for unwind-protect, -as top-level would. - -* Changes in CC mode in Emacs 19.23. - -`cc-mode' provides ANSI C, K&R C, and ARM C++ language editing. It -represents the merge of c++-mode.el and c-mode.el. cc-mode provides a -new, more flexible indentation engine so that indentation -customization is more intuitive. There are two steps to calculating -indentation: first, CC mode analyzes the line for syntactic content, -then based on this content it applies user defined offsets and adds -this offset to the indentation of some previous line. - -The syntactic analysis determines if the line describes a `statement', -`substatement', `class-open', `member-init-intro', etc. These are -described in detail with C-h v c-offsets-alist. You can change the -offsets interactively with C-c C-o (c-set-offsets), or -programmatically in your c-mode-common-hook, which is run both by -c-mode and c++-mode. You can also set up "styles" in the same way -that you could with c-mode.el. The variable c-basic-offset controls -the basic offset given to a level of indentation. - -If, for example, you wanted to change this style: - -int foo (int i) -{ - switch (i) { - case 1: - printf ("its a foo\n"); - break; - default: - printf ("don't know what it is\n"); - break; - } -} - -into this: - -int foo (int i) -{ - switch (i) { - case 1: - printf ("its a foo\n"); - break; - default: - printf ("don't know what it is\n"); - break; - } -} - -you could add the following to your .emacs file: - -(defun my-c-mode-common-hook () - (c-set-offset 'case-label 2) - (c-set-offset 'statement-case-intro 2)) -(add-hook 'c-mode-common-hook 'my-c-mode-common-hook) - -** New variables: - -c-offsets-alist contains an association list of syntactic symbols and -their relative offsets. Do a "C-h v c-offsets-alist" to get a list of -all syntactic symbols currently defined, and their meanings. You -should not change this variable directly; use the supplied interface -commands c-set-offset and c-set-style. - -c-mode-common-hook is run by both c-mode and c++-mode during their -common initializations. You should put any customizations that are -the same for both C and C++ into this hook. - -The variable c-strict-semantics-p is used mainly for debugging. When -non-nil, CC mode signals an error if it returns a syntactic symbol -that can't be found in c-offsets-alist. - -If you want CC mode to echo the syntactic analysis for a particular -line when you hit the TAB key, set c-echo-semantic-information-p to -non-nil. - -c-basic-offset controls the standard amount of offset for a level of -indentation. You can set a syntactic symbol's offset to + or - as a -short-hand for positive or negative c-basic-offset. - -c-comment-only-line-offset lets you control indentation given to lines -which contain only a comment, in the case of C++ line style comments, -or the introduction to a C block comment. Comment-only lines at -column zero can be anchored there independent of the indentation given -to other comment-only lines. - -c-block-comments-indent-p controls the style of C block comment -re-indentation. If you put leading stars in front of comment -continuation lines, you should set this variable to nil. - -c-cleanup-list is a list describing certain C and C++ constructs to be -"cleaned up" as they are typed, but only when the auto-newline feature -is turned on. In C++, make sure this variable contains at least -'scope-operator so that double colons will not be separated by a -newline. - -Colons (`:') and braces (`{` and `}') are special in C and C++. For -certain constructs, you may like them to hang on the right edge of the -code, or you may like them to start a new line of code. You can use -the two variables c-hanging-braces-alist and c-hanging-colons-alist -to control whether newlines are placed before and/or after colons and -braces when certain C and C++ constructs are entered. For example, -you can control whether the colon that introduces a C++ member -initialization list hangs on the right edge, starts a new line, or has -no newlines either before or after it. - -c-special-indent-hook is run after a line is indented by CC mode. You -can perform any custom indentations here. - -c-delete-function is the function that is called when a single -character is deleted with the c-electric-delete command (DEL). - -c-electric-pound-behavior describes what happens when you enter the -`#' that introduces a cpp macro. - -If c-tab-always-indent is neither t nor nil, then TAB inserts a tab -when within strings, comments, and cpp directives, but it reindents -the line unconditionally. - -c-inhibit-startup-warnings-p inhibits warnings about any old -version of Emacs you might be running, which could be incompatible -with cc-mode. - -** There are two new minor-mode features in CC mode: auto-newline and -hungry-delete. Auto-newline inserts newlines automatically as you -type certain constructs. Hungry-delete consumes all preceding -whitespace (spaces, tabs, and newlines) when the delete key is hit. -You can toggle auto-newline on and off on a per-buffer basis by -hitting C-c C-a. You can toggle hungry-delete on and off by hitting -C-c C-d. You can toggle them both on and off together with C-c C-t. - -** Slash (`/') and star (`*') are now both electric characters. - -** New commands: - -The new C-c C-o (c-set-offset) command can be used to interactively change -the offset for a particular syntactic symbol. - -The new command C-c : (c-scope-operator) inserts the C++ scope operator in -c++-mode only. - -The new command C-c C-q (c-indent-defun) indents the entire enclosing -top-level function or class. - -The new command C-c C-s (c-show-semantic-information) echos the current -syntactic analysis without re-indenting the current line. - -The new commands M-x c-forward-into-nomenclature and M-x -c-backward-into-nomenclature (currently otherwise unbound to a key -sequence), make movement easier when using the C++ variable naming -convention of VariableNamesWithoutUnderscoresButEachWordCapitalized. - -** Command from c-mode.el that have been renamed in cc-mode.el: - - electric-c-brace => c-electric-brace - electric-c-semi => c-electric-semi&comma - electric-c-sharp-sign => c-electric-pound - mark-c-function => c-mark-function - electric-c-terminator => c-electric-colon - indent-c-exp => c-indent-exp - set-c-style => c-set-style - -** Variables from c-mode.el that are obsolete with cc-mode.el: - - c-indent-level - c-brace-imaginary-offset - c-brace-offset - c-argdecl-indent - c-label-offset - c-continued-statement-offset - c-continued-brace-offset - -* Lisp programming changes in Emacs 19.23. - -** To pop up a dialog box, call x-popup-dialog. -It takes two arguments, POSITION and CONTENTS. - -POSITION specifies which frame to place the dialog box over; -the dialog box always goes on the center of the frame. -POSITION may be a mouse event, a window, a frame, -or t meaning use the frame that the mouse is in. - -CONTENTS specifies the contents of the dialog box. -It looks like a single pane of a popup menu: -(TITLE ITEM1 ITEM2 ...), where each ITEM has the form (STRING . VALUE). -The return value is VALUE from the chosen item. - -An ITEM may also be just a string--that makes a nonselectable item. -An ITEM may also be nil--that means to put all preceding items -on the left of the dialog box and all following items on the right. -(By default, approximately half appear on each side.) - -If your Emacs is not using an X toolkit, then it cannot display a -real dialog box; so instead it displays a pop-up menu in the center -of the frame. - -** y-or-n-p, yes-or-no-p and map-y-or-n-p now use menus or dialog boxes -to ask their question(s) if the command that is running was reached by -a mouse event. - -If you want to control which way these functions work, bind the -variable last-nonmenu-event around the call. These functions use the -keyboard if that variable holds a keyboard event (actually, any -non-list); they use the mouse if that variable holds a mouse event -(actually, any list). - -** The mouse-face property is now implemented, both in overlays and as -a text property. It specifies a face to use when the mouse is in the -range of text for which the property is specified. - -** When text has a non-nil `intangible' property, you cannot move point -within it or right before it. If you try, point actually moves to the -end of the intangible text. Note that this means that backward-char -is a no-op when there is an intangible character to the left of point. - -** minibuffer-exit-hook is a new normal hook that is run when you -exit the minibuffer. - -** The variable x-cross-pointer-shape specifies the cursor shape to use -when the mouse is over text that has a mouse-face property. - -** The new variable interpreter-mode-alist specifies major modes to use -for shell scripts that specify a command interpreter. Its elements -look like (INTERPRETER . MODE); for example, ("perl" . perl-mode) is -one element present by default. This feature applies only when the -file name doesn't indicate which mode to use. - -** If you use a minibuffer-only frame, set the variable -minibuffer-auto-raise to t, and entering the minibuffer will then -raise the minibuffer frame. - -** If pop-up-frames is t, display-buffer now looks for an existing -window in any visible frame, showing the specified buffer, and uses -such a window in preference to making a new frame. - -** In the functions next-window, previous-window, next-frame, -previous-frame, get-buffer-window, get-lru-window, get-largest-window -and delete-windows-on, if you specify `visible' for the last argument, -it means to consider all visible frames. - -** Mouse events now give the X and Y coordinates in pixels, rather than -in characters. You can convert these values to characters by dividing by -the values of (frame-char-width) and (frame-char-height). - -** The new functions mouse-pixel-position and set-mouse-pixel-position -read and set the mouse position in units of pixels. The existing -functions mouse-position and set-mouse-position continue to work with -units of characters. - -** The new function compute-motion is useful for computing the width -of certain text when it is displayed. - -** The function vertical-motion now takes an option second argument WINDOW -which says which window to use for the display calculations. - -vertical-motion always operates on the current buffer. -It is ok to specify a window displaying some other buffer. -Then vertical-motion uses the width, hscroll and display-table of -the specified window, but still scans the current buffer. - -** An error no longer sets last-command to t; the value of last-command -does reflect the previous command (the one that got an error). - -If you do not want a particular command to be recognized as the -previous command in the case where it got an error, you must code that -command to prevent this. Set this-command to t at the beginning of -the command, and set this-command back to its proper value at the end, -like this: - - (defun foo (args...) - (interactive ...) - (setq this-command t) - ...do the work... - (setq this-command 'foo)) - -or like this: - - (defun foo (args...) - (interactive ...) - (let ((old-this-command this-command)) - (setq this-command t) - ...do the work... - (setq this-command old-this-command))) - -The undo and yank commands do this. - -** If you specify an explicit title for a new frame when you create it, -the title is used as the resource name when looking up X resources to -control the shape of that frame. If you don't specify the frame title, -the value of x-resource-name is used, as before. - -** The frame parameter user-position, if non-nil, says that the user -has specified the frame position. Emacs reports this to the window -manager, to tell it not to override the position that the user -specified. - -** Major modes can now set change-major-mode-hook to arrange for state -to be cleaned up when the user switches to a new major mode. The function -kill-all-local-variables runs this hook. For best results, make the hook a -buffer-local variable so that it will disappear after doing its job and will -not interfere with the subsequent major mode. - -** The new variable overriding-local-map, if non-nil, specifies a keymap -that overrides the current local map, all minor mode keymaps, and all -text property keymaps. Incremental search uses this feature to override -all other keymaps temporarily. - -** A key definition in a menu keymap can now have additional structure: -in addition to (ITEMNAME [HELPSTRING] . COMMAND) which was allowed -before, the form (ITEMNAME [HELPSTRING] (...) . COMMAND) is -allowed. (HELPSTRING is optional, and is not currently used.) - -Here (...) represents a sublist containing information about keyboard -key sequences that run the same command COMMAND. Displaying the menu -automatically creates and updates the sublist when appropriate; you -need never set these up yourself. - -lookup-key, key-binding, and similar functions return just COMMAND, -not the whole binding. - -To precompute this information for a given keymap, you can do - (x-popup-menu nil KEYMAP). - -** When you specify coordinates for x-popup-menu as a list ((XOFFSET -YOFFSET) WINDOW), the coordinates are now measured in pixels. - -** where-is-internal now takes just four arguments: -DEFINITION KEYMAP FIRSTONLY NOINDIRECT. -The single argument KEYMAP replaces two arguments KEYMAP and KEYMAP1. - -If KEYMAP is non-nil, where-is-internal searches only KEYMAP and the -global keymap. - -If KEYMAP is nil, where-is-internal searches all the currently active -keymaps, but finds the active keymaps as if overriding-local-map were -nil. - -If you pass a list of the form (keymap) as KEYMAP, where-is-internal -searches only the global map. (This is not a special case--it follows -from the specifications above.) - -If you pass the value of overriding-local-map as KEYMAP, where-is-internal -searches in exactly the same was as command execution does. - -** Use the macro define-derived-mode to define a new major mode that -inherits the definition of another major mode. Here's how to define a -command named hypertext-mode that inherits from the command text-mode: - - (define-derived-mode hypertext-mode text-mode "Hypertext" - "Major mode for hypertext.\n\n\\{hypertext-mode-map}" - (setq case-fold-search nil)) - - (define-key hypertext-mode-map [down-mouse-3] 'do-hyper-link) - -The new mode has its own keymap, which inherits from that of the -original mode. It also has its own syntax and abbrev tables, which -are initialized by copying those of the original mode. It also has -its own mode hook. All are given names made by appending a suffix -to the name of the new mode. - -** A syntax table can now inherit the data for some characters from -standard-syntax-table, while specifying other characters itself. -Syntax code 13 means "inherit this character from the standard syntax -table." In modify-syntax-entry, the character `@' represents this code. - -The function `make-syntax-table' now creates a syntax table which -inherits all letters and control characters (0 to 31 and 128 to 255) -from the standard syntax table, while copying the other characters -from the standard syntax table. Most syntax tables in Emacs are set -up this way. - -This sort of inheritance is useful for people who set up character -sets with additional alphabetic characters in the range 128 to 255. -Just changing the standard syntax for these characters affects all -major modes. - -** The new function transpose-regions swaps two regions of the buffer. -It preserves the markers in those two regions, so that they stay with -the surrounding text as it is swapped. - -** revert-buffer now runs before-revert-hook at the beginning and -after-revert-hook at the end. These can be used by minor modes -that need to clean up state variables. - -** The new function get-char-property is like get-text-property, but -checks for overlays with properties as well as for text properties. -It checks for overlays first, in order of descending priority, and -text properties last. - -get-char-property allows windows as the OBJECT argument, as well -as buffers and strings. If you specify a window, then only overlays -active on that window are considered. - -** Overlays can have the `invisible' property. - -** The function insert-file-contents now takes an optional fifth -argument called REPLACE. If this is t, it means to replace the -contents of the buffer (actually, just the accessible portion) -with the contents of the file. - -This is better than simply deleting and inserting the whole thing -because (1) it preserves some marker positions and (2) it puts less -data in the undo list. - -** The variable inhibit-first-line-modes-regexps specifies classes of -file names for which -*- on the first line should not be looked for. - -** The variables before-change-functions and after-change-functions -hold lists of functions to call before and after a change in the -buffer's text. They work much like before-change-function and -after-change-function, except that they hold a list of functions -instead of just one. - -These variables will eventually make before-change-function and -after-change-function obsolete. - -** The variable kill-buffer-query-functions holds a list of functions -to be called with no arguments when a buffer is about to be killed. -(That buffer is the current buffer when the function is called.) -If any of the functions returns nil, the buffer is not killed -(and the remaining functions in the list are not called). - -** The variable kill-emacs-query-functions holds a list of functions -to be called with no arguments when you ask to exit Emacs. -If any of the functions returns nil, the exit is canceled -(and the remaining functions in the list are not called). - -** The argument for buffer-disable-undo is now optional, -like the argument for buffer-enable-undo. - -** The new variable system-configuration holds the canonical three-part -GNU configuration name for which Emacs was built. - -** The function system-name now tries harder to return a fully qualified -domain name. - -** The variable emacs-major-version holds the major version number -of Emacs. (Currently 19.) - -** The variable emacs-minor-version holds the minor version number -of Emacs. (Currently 23.) - -** The default value of comint-input-autoexpand is now nil. -However, Shell mode sets it from the value of shell-input-autoexpand, -whose default value is `history'. - -** The new function set-process-window-size specifies the terminal window -size for a subprocess. On some systems it sends the subprocess a signal -to let it know that the size has changed. - -** %P is a new way to display a percentage in the mode line. It -displays the percentage of the buffer text that is above the *bottom* -of the window (which includes the text visible, in the window as well -as the text above the top). It displays `Top' as well as the -percentage if the top of the buffer is visible on screen. - -** %+ in the mode line specs displays `*' if the buffer is modified, -and otherwise `-'. It never displays `%', as `%*' would do; whether the -buffer is read-only has no effect on %+. - -** The new functions ffloor, fceiling, fround and ftruncate take a -floating point argument and return a floating point result whose value -is a nearby integer. ffloor returns the nearest integer below; fceiling, -the nearest integer above; ftruncate, the nearest integer in the -direction towards zero; fround, the nearest integer. - -** Setting `print-escape-newlines' to a non-nil value now also makes -formfeeds print as ``\f''. - -** auto-mode-alist now has a new feature. If an element has the form -(REGEXP FUNCTION t), and REGEXP matches the file name, then after calling -FUNCTION, Emacs deletes the part of the file name that matched REGEXP -and then searches auto-mode-alist again for a new match. - -This is useful for uncompression packages. An entry of this sort for -.gz can uncompress the file and then put the uncompressed file in the -proper mode according to the name sans .gz. - -** The new function emacs-pid returns the process ID number of Emacs. - -** user-login-name now consistently checks the LOGNAME environment -variable before USER. user-original-login-name is obsolete, since it -provides the same functionality. To ignore the environment variables, -use user-real-login-name. - -** There is a more general way of handling the system-specific X -keysyms. Set the variable system-key-alist to an alist containing -elements of the form (CODE . SYMBOL), where CODE is the numeric keysym -code minus the "vendor specific" bit, and symbol is the name for the -function key. - -** You can use the variable command-line-functions to set up functions -to process unrecognized command line arguments. The variable's value -should be a list of functions of no arguments. The functions are -called successively until one of them returns non-nil. - -Each function should access the free variables argi (the current -argument) and command-line-args-left (the remaining arguments). The -function should return non-nil only if it recognizes and processes the -argument in argi. If it does so, it may consume following arguments -as well by removing them from command-line-args-left. - -** There's a new way for a magic file name handler to run a primitive -and inhibit handling of the file name. Here is how to do it: - -(let ((inhibit-file-name-handlers - (cons 'ange-ftp-file-handler - (and (eq inhibit-file-name-operation operation) - inhibit-file-name-handlers))) - (inhibit-file-name-operation operation)) - (apply this-operation args)) - -The function find-file-name-handler now takes two arguments. The -second argument is OPERATION, the operation for which the handler is -being sought. - -People have suggested that the second argument should be optional, for -backward compatibility. It would be nice if that were possible, but -it is not. There is simply no way for find-file-name-handler to do -the right thing without receiving the proper value for its second -argument. - -** The variable completion-regexp-list affects the completion -primitives try-completion and all-completions. They consider -only the possible completions that match each regexp in the list. - -** Case conversion in the function replace-match has been changed. - -The old behavior was this: if any word in the old text was -capitalized, replace-match capitalized each word of the replacement -text. - -The new behavior is this: if the first word in the old text is capitalized, -replace-match capitalizes the first word of the replacement text. - -** You can now specify a case table with CANON non-nil and EQV nil. -Then the EQV part of the case table is deduced from CANON. - -** The new function minibuffer-prompt takes no arguments and returns -the current minibuffer prompt string. - -The new function minibuffer-prompt-width takes no arguments and -returns the display width of the minibuffer prompt string. - -** The new function frame-first-window returns the window at the -upper left corner of a given frame. - -** wholenump is a new alias for natnump. - -** The variable installation-directory, if non-@code{nil}, names a -directory within which to look for the `lib-src' and `etc' -subdirectories. This is non-nil when Emacs can't find those -directories in their standard installed locations, but can find them -near where the Emacs executable was found. - -** invocation-name and invocation-directory are now variables as well -as functions. The variable values are the same values that the -functions return: the Emacs program name sans directories, and the -directory it was found in. (invocation-directory may be nil, if Emacs -can't determine which directory it should be.) - -** Installation change regarding version number counting. - -The version number of an Emacs executable contains three numbers. -The first two describe the Emacs release and the third increments -each time you build Emacs. - -Now the file version.el contains only the first two version numbers. -The third component is now determined on the basis of the names of the -existing executable files. This means that version.el is not altered -by building Emacs. - -* Changes in 19.22. - -** The mouse click M-mouse-2 now inserts the current secondary -selection (from Emacs or any other X client) where you click. -It does not move point. -This command is called mouse-yank-secondary. - -mouse-kill-secondary no longer has a key binding by default. -Clicking M-mouse-3 (mouse-secondary-save-then-kill) twice -may be a convenient enough way of killing the secondary selection. -Or perhaps there should be a keyboard binding for killing the -secondary selection. Any suggestions? - -** New packages: - -*** `icomplete' provides character-by-character information -about what you could complete if you type TAB. - -*** `avoid' moves the mouse away from point so that it doesn't hide -your typing. - -*** `shadowfile' helps you update files that are supposed to be stored -identically in different places (perhaps on different machines). - -** C-h p now knows about four additional keywords: data, faces, mouse, -and matching. - -** The key for starting an inferior Lisp process, in Lisp mode, -is now C-c C-z instead of C-c C-l. - -** When the VC commands ask whether to save the buffer, if you say no, -they signal an error. This is so that you won't operate on the wrong -data. - -** ISO Accents mode now supports `"s' as a way of typing German sharp s. - -** By default, comint buffers (including Shell mode and debuggers) -no longer try to scroll to keep the cursor on the bottom line. -This feature was added in 19.21 but did not work smoothly enough. - -** Emacs now handles the window manager "delete window" operation. - -** Display of buffers with text properties is much faster now. - -** The feature previously announced whereby `insert' does not inherit -text properties from surrounding text was not fully implemented -before; but now it is. use `insert-and-inherit' if you wish to -inherit sticky properties from the surrounding text. - -** The functions next-property-change, previous-property-change, -next-single-property-change, and previous-single-property-change -now take one additional optional argument LIMIT that is a position at -which to stop scanning. If scan ends without finding the property -change sought, these functions return the specified limit. - -The value returned by previous-single-property-change and -previous-property-change, when they do find a change, is now one -greater than what it used to be. It is the position between the two -characters whose properties differ, which is one greater than the -position of the first character found (while scanning back) with -different properties. - -* User editing changes in version 19.21. - -** ISO Accents mode supports four additional characters: -A-with-ring (entered as /A), AE ligature (entered as /E), -and their lower-case equivalents. - -* User editing changes in version 19.20. -(See following page for Lisp programming changes.) - -Note that some of these changes were made subsequent to the Emacs 19.20 -editions of the Emacs manual and Emacs Lisp manual; therefore, if you -have those editions, do read this page. - -** Dragging with mouse button 1 now puts the selected region -in the kill ring so you can paste it into other X applications. - -** Double and triple clicks with button 1 now behave as in xterm, -selecting the word or line surrounding where you click. If you drag -after the last click, you can select a range of words or lines. - -** You can use button 3 to extend a mouse-selected region, as in xterm. -This works for regions selected either by dragging Mouse-1 or by -multiple-clicking Mouse-1. Clicking Mouse-3 moves the end of the -region that is (initially) nearer to where you click. - -If the selection was first made by multiple-clicking Mouse-1, and thus -consists of entire words or lines, Mouse-3 preserves that state. - -As before, clicking Mouse-3 again in the same place kills the region -thus selected. - -** The secondary selection commands, M-Mouse-1 and M-Mouse-3, have been -likewise modified. - -** You can now search for strings and regexps using the Edit menu bar menu. - -** You can now access bookmarks using the Bookmark submenu in the File -menu in the menu bar. - -** ISO Accents mode, a buffer-local minor mode, provides a convenient -way to type certain non-ASCII characters. It makes the characters `, -', ", ^, ~ and / serve as modifiers for the following letter. ` and ' -add accents, " adds an umlaut or dieresis, ^ adds a circumflex, ~ -adds a tilde, and / adds a slash to the following letter. - -If the following character is not a letter, or cannot be modified as -requested, then both characters stand for themselves. If you -duplicate the modifier accent character, that enters the corresponding -ISO non-spacing accent character (thus, '' enters the ISO acute-accent -character). To enter a modifier character itself, type it followed by -a space. - -This feature can be used whenever a key sequence is expected: for -ordinary insertion, for searching, and for certain command arguments. - -A few special combinations: - -~c => c with cedilla -~d => d with stroke -~< => left guillemot -~> => right guillemot - -** iso-transl.el is a new library that replaces iso-insert.el. -It defines C-x 8 as an insertion prefix for the ISO characters -between 128 and 255, much like iso-insert, except that iso-transl -works even in searches and help commands--wherever a key sequence -is expected. - -To define case-conversion for these characters for ISO 8859/1, -load the library iso-syntax. (This is not new.) - -** M-TAB in Text mode now runs the command ispell-complete-word -which performs completion using the spelling dictionary. - -The spelling correction submenu now includes this command -and another command which completes a word fragment (that is, -it doesn't assume that the text to be completed starts at the -beginning of a word. - -** In incremental search, you can use M-y to yank the most recent kill -into the search string. - -** The new function ispell-message checks the spelling of a message -you are about to send or post. It ignores text cited from other -messages. - -To automatically check all your outgoing messages, include the -following line in your .emacs file: - (setq news-inews-hook (setq mail-send-hook 'ispell-message)) - -** There is now a separate minibuffer history list for the names of -extended commands. This history list is used by M-x when reading -the command name. The motivation for this is to prevent command -names from appearing in the history used for other minibuffer -arguments. - -Note that the history list for entire commands that use the minibuffer -is a separate feature. That history list records a command with all -its arguments, and you must use C-x ESC ESC to access it. - -** You can use the new command C-x v ~ VERSION RET to examine a -specified version of a file that is maintained with version control. - -** In Indented Text mode, only blank lines now separate paragraphs. -Indented lines continue the paragraph that is in progress. This makes -the user option variable adaptive-fill-mode have its intended effect. - -** Local variable specifications in files for variables whose names end -in `-hook' and `-function' are now controlled by the variable -`enable-local-eval', just like the `eval' variable. - -** C-x r j (jump-to-register) when restoring a frame configuration now -makes all unwanted frames (existing frames not mentioned in the -configuration) invisible. - -If you want to delete these unwanted frames, use a prefix argument for -C-x r j. - -** You can customize the calendar to display weeks beginning on -Monday: set the variable `calendar-week-start-day' to 1. - -** Rmail changes. - -If you save messages to a file in Unix format while viewing a message -with its whole header, this now copies to the file the entire header -of each message copied. - -** Comint mode changes. - -C-c C-e shows as much output as possible in the window. -C-c RET copies an old input (the one at point) -and places the copy after the latest prompt. -C-c C-p and C-c C-n move through the buffer, stopping at places -where the subshell prompted for input. -C-c C-h lists the input history in a `*Help*' buffer. - -There are new menu bar items for completion/input/output/signal commands. - -Input behavior is configurable. Variables control whether some windows -showing the buffer scroll to the bottom before insertion. These are -`comint-scroll-to-bottom-on-input' and `before-change-function'. By default, -insertion causes the selected window to scroll to the bottom before insertion -occurs. - -Subprocess output now keeps point at the end of the buffer in each -window individually if point was already at the end of the buffer in -that window. - -If `comint-scroll-show-maximum-output' is non-nil (which is the -default), then scrolling due to arrival of output tries to place the -last line of text at the bottom line of the window, so as to show as -much useful text as possible. (This mimics the scrolling behavior of -many terminals.) - -By setting `comint-scroll-to-bottom-on-output', you can opt for having -point jump to the end of the buffer whenever output arrives--no matter -where in the buffer point was before. If the value is `this', point -jumps in the selected window. If the value is `all', point jumps in -each window that shows the comint buffer. If the value is `other', -point jumps in all nonselected windows that show the current buffer. -The default value is nil, which means point does not jump to the end. - -Input history insertion is configurable. A variable controls whether only the -first instance of successive identical inputs is stored in the input history. -This is `comint-input-ignoredups'. - -Completion (bound to TAB) is now more general. Depending on context, -completion now operates on the input history, on command names, or (as -before) on filenames. - -Filename completion is configurable. Variables control whether -file/directory suffix characters are added (`comint-completion-addsuffix'), -whether shortest completion is acceptable when no further unambiguous -completion is possible (`comint-completion-recexact'), and the timing of -completion candidate listing (`comint-completion-autolist'). - -Comint mode now provides history expansion. Insert input using `!' -and `^', in the same syntax that typical shells use; then type TAB. -This searches the comint input history for a matching element, -performs substitution if necessary, and places the result in the -comint buffer in place of the original input. - -History references in the input may be expanded before insertion into -the input ring, or on input to the interpreter (and therefore -visibly). The variable `comint-input-autoexpand' specifies which. - -You can make the SPC key perform history expansion by binding -SPC to the command `comint-magic-space'. - -The command `comint-dynamic-complete-variable' does variable name -completion using the environment variables as set within Emacs. The -variables controlling filename completion apply to variable name -completion too. This command is normally available through the menu -bar. - -** Shell mode - -Paragraph motion and marking commands (default bindings M-{, M-}, M-h) operate -on output groups (i.e., shell prompt plus associated shell output). - -TAB now completes commands, as well as file names and expand history. -Commands are searched for along the path that Emacs has on startup. - -C-c C-f now moves forward a command (`shell-forward-command') and -C-c C-b now moves backward a command (`shell-backward-command'). - -Command completion is configurable. The variables controlling -filename completion in comint mode apply, together with a variable -controlling whether to restrict possible completions to only files -that are executable (`shell-command-execonly'). - -The input history is initialised from the file name given in the -variable `shell-input-ring-file-name'--normally `.history' in your -home directory. - -Directory tracking is more robust. It can cope with command sequences -and forked commands, and can detect the failure of directory changing -commands in most circumstances. It's still not infallible, of course. - -You can now configure the behavior of `pushd'. Variables control -whether `pushd' behaves like `cd' if no argument is given -(`shell-pushd-tohome'), pop rather than rotate with a numeric argument -(`shell-pushd-dextract'), and only add directories to the directory -stack if they are not already on it (`shell-pushd-dunique'). The -configuration you choose should match the underlying shell, of course. - -* Emacs Lisp programming changes in Emacs 19.20. - -** A new function `remove-hook' is now used to remove a hook that you might -have added with `add-hook'. - -** There is now a Lisp pretty-printer in the library `pp'. - -** The partial Common Lisp support has been entirely reimplemented. - -** When you insert text using `insert', `insert-before-markers' or -`insert-buffer-substring', text properties are no longer inherited -from the surrounding text. - -When you want to inherit text properties, use the new functions -`insert-and-inherit' or `insert-before-markers-and-inherit'. - -The self-inserting character command does do inheritance. - -** Frame creation hooks. - -The function make-frame now runs the normal hooks -before-make-frame-hook and after-make-frame-hook. - -** You can now use function-key-map to make a key an alias for other -key sequences that can vary depending on circumstances. To do this, -give the key a definition in function-key-map which is a function -rather than a specific expansion key sequence. - -If the function reads input itself, it can have the effect of altering -the event that follows. For example, here's how to define C-c h to -turn the character that follows into a hyper character: - -(define-key function-key-map "\C-ch" 'hyperify) - -(defun hyperify (prompt) - (let ((e (read-event))) - (vector (if (numberp e) - (logior (lsh 1 20) e) - (if (memq 'hyper (event-modifiers e)) - e - (add-event-modifier "H-" e)))))) - -(defun add-event-modifier (string e) - (let ((symbol (if (symbolp e) e (car e)))) - (setq symbol (intern (concat string (symbol-name symbol)))) - (if (symbolp e) - symbol - (cons symbol (cdr e))))) - -The character translation function gets one argument, which is the -prompt that was specified in read-key-sequence--or nil if the key -sequence is being read by the editor command loop. In most cases -you can just ignore the prompt value. - -** Changes for reading and writing text properties. - -New low-level Lisp features make it possible to write Lisp programs to -save text properties in files, and read text properties from files. -You can program any file format you like. - -The variable `write-region-annotation-functions' should contain a list -of functions to be run by `write-region' to encode text properties in -some fashion as annotations to the text that is written. - -Each function in the list is called with two arguments: the start and -end of the region to be written. These functions should not alter the -contents of the buffer. Instead, they should return lists indicating -annotations to write in the file in addition to the text in the -buffer. - -Each function should return a list of elements of the form (POSITION -. STRING), where POSITION is an integer specifying the relative -position in the text to be written, and STRING is the annotation to -add there. - -Each list returned by one of these functions must be already sorted in -increasing order by POSITION. If there is more than one function, -`write-region' merges the lists destructively into one sorted list. - -When `write-region' actually writes the text from the buffer to the -file, it intermixes the specified annotations at the corresponding -positions. All this takes place without modifying the buffer. - -The variable `after-insert-file-functions' should contain a list of -functions to be run each time a file's contents have been inserted into -a buffer. Each function receives one argument, the length of the -inserted text; point indicates the start of that text. The function -should make whatever changes it wants to make, then return the updated -length of the inserted text, as it stands after those changes. The -value returned by one function is used as the argument to the next. -These functions should always return with point at the beginning of -the inserted text. - -The intended use of `after-insert-file-functions' is for converting -some sort of textual annotations into actual text properties. But many -other uses may be possible. - -We now invite users to begin implementing Lisp programs to store and -retrieve text properties in files, using these new primitive features, -and thus to experiment with various data formats and find good ones. - -We suggest not trying to handle arbitrary Lisp objects as property -names or property values--because a program that general is probably -difficult to write, and slow. Instead, choose a set of possible data -types that are reasonably flexible, and not too hard to encode. - -** Comint completion. - -Currently comint-dynamic-complete-command (and associated variable -comint-after-partial-pathname-command) are set by default to complete a -filename. Other comint-mode users should have their own functions to achieve -this. For example, gud-mode could complete debugger commands. A completion -function is provided solely for this reason (comint-dynamic-simple-complete). - -Other comint-mode users should bind comint-dynamic-complete (shell-mode does -already). - -** Comint history reference expansion - -Currently comint-input-autoexpand is 'history, which means only expand -history on insertion to comint-input-ring. For non-shell modes, this is -a strange default, since non-shells will not understand history references. -Perhaps it would be better for the variable to be 'input, which means expand -on RET. - -The value 'history might possibly be wrong even for shells, since the -expansion will be done both by comint and the underlying shell (except sh, of -course). It would be better for expansion to be done by one or the other, -not both since they may (ahem) disagree. Since it is silly to put a literal -history reference into comint-input-ring, perhaps it would be better for the -variable to be 'input too. - -The reason the variable is not 'input by default is that I was attempting to -adhere to The Principle of Least Astonishment. I didn't want to shock users -by having their input change in front of their eyes. - -** Argument delimiters and Comint mode. - -Currently comint-delimiter-argument-list is '(), which means no strings are -to be treated as delimiters and arguments. In shell-mode, this variable is -set to shell-delimiter-argument-list, '("|" "&" "<" ">" "(" ")" ";"). Other -comint-mode users should set this variable too. For example, a lisp-type -mode might want to set this to '("." "(" ")") or some such. - -** Comint output hook. - -There is now a hook, comint-output-filter-hook, that is run-hooks'ed by the -output filter, comint-output-filter. This is useful for scrolling (see -below), but also things like processing output for specific text, output -highlighting, etc. - -So that such output processing may be done efficiently, there is a new -variable, comint-last-output-start, that records the position of the start of -the lastest output inserted into the buffer (effectively the previous value -of process-mark). Output processing functions should process the text -between comint-last-output-start (or perhaps the beginning of the line that -the position lies on) and process-mark. - -** Comint scrolling. - -There is now automatic scrolling of process windows. - -Currently comint-scroll-show-maximum-output is t, which means when scrolling -output put process-mark at the bottom of the window. There is a good case -for it to be t, since the user is likely to want to see as much output as -possible. But, then again, there is a comint-show-maximum-output command. - -** Comint history retrieval. - -The input following point is not deleted when moving around the input history -(with M-p etc.). Emacs maintainers may not like this. However, I feel this -is a useful feature. The simple remedy is to put end-of-line in before -delete-region in comint-previous-matching-input. - -The input history retrieval commands still wrap-around the input ring, unlike -Emacs command history. - -* Changes in version 19.19. - -** The new package bookmark.el records named bookmarks: positions that -you can jump to. Bookmarks are saved automatically between Emacs -sessions. - -** Another simpler package saveplace.el records your position in each -file when you kill its buffer (or kill Emacs), and jumps to the same -position when you visit the file again (even in another Emacs -session). Use `toggle-save-place' to turn on place-saving in a given file; -use (setq-default save-place t) to turn it on for all files. - -** In Outline mode, you can now customize how to compute the level of a -heading line. Set `outline-level' to a function of no arguments which -returns the level, assuming point is at the beginning of a heading -line. - -** You can now specify the prefix key to use for Outline minor mode. -(The default is C-c.) Set the variable outline-minor-mode-prefix to -the key sequence you want to use (as a string or vector). - -** In Bibtex mode, C-c e has been changed to C-c C-b. This is because -C-c followed by a letter is reserved for users. - -** The `mod' function is no longer an alias for `%', but is a separate function -that yields a result with the same sign as the divisor. `floor' now takes an -optional second argument, which divides the first argument before the floor is -taken. - -** `%' no longer allows floating point arguments, since the results were often -inconsistent with integer `%'. - -* Changes in version 19.18. - -** Typing C-z in an iconified Emacs frame now deiconifies it. - -** hilit19 is a new library for automatic highlighting of parts of the -text in the buffer, based on its meaning and context. - -** Killing no longer sends the killed text to the X clipboard. -And large strings are not put in the cut buffer either. -The variable x-cut-buffer-max specifies the maximum number of characters -to put in the cut buffer. - -** The new command C-x 5 o (other-frame) selects different frames, -successively, in cyclic order. It does for frames what C-x o -does for windows. - -** The command M-ESC (eval-expression) has its own command history. - -** The commands M-! and M-| for running shell commands have their own -command history. - -** If the directory containing the Emacs executable has a sibling named -`lisp', that `lisp' directory is added to the end of `load-path' -(provided you don't override the normal value with the EMACSLOADPATH -environment variable). This feature may make it easier to move -an installed Emacs from place to place. - -** M-x validate-tex-buffer now records the locations of mismatches -found in the `*Occur*' buffer. You can go to that buffer and type C-c -C-c to visit a particular mismatch. - -** There are new commands in Shell mode. - -C-c C-n and C-c C-p move point to the next or previous shell input line. - -C-c C-d is now another way to send an end-of-file to the subshell. - -** Changes to calendar/diary. - -Time zone data is now determined automatically, including the -start/stop days and times of daylight savings time. The code now -works correctly almost anywhere in the world. - -The format of the holiday specifications has changed and IS NO LONGER -COMPATIBLE with the old (version 18) format. See the documentation of -the variable calendar-holidays for details of the new, improved -format. - -The hook `diary-display-hook' has been split into two: -diary-display-hook which should be used ONLY for the display and -`diary-hook' which should be used for appointment notification. If -diary-display-hook is nil (the default), simple-diary-display is -used. This allows the diary hooks to be correctly set with add-hook. - -The forms used for dates in diary entries and general display are no -longer autoloaded, but set at load time; this means they will be set -correctly based on values you assign to various variables. - -** The functions x-rebind-key and x-rebind-keys have been deleted, -because you can accomplish the same job by binding keys to keyboard -macros. - -** Emacs now distinguishes double and triple drag events and double and -triple button-down events. These work analogously to double and -triple click events. - -Double drag events, if not defined, convert to ordinary click events. -Double down events, if not defined, convert first to ordinary down -events, which are then discarded if not defined. Triple events that -are not defined convert to the corresponding double event; if that is -also not defined, it may convert further. - -** The new function event-click-count returns the number of clicks, -from an event which is a list. It is 1 for an ordinary click, drag, -or button-down event, 2 for a double event, and 3 or more for a triple -event. - -** The new function previous-frame is like next-frame, but moves -around through the set of existing frames in the opposite order. - -** The post-command-hook now runs even after commands that get an error -and return to top level. As a consequence of the same change, this -hook also runs before Emacs reads the first command. That might sound -paradoxical, as if this hook were the same as the pre-command-hook. -Actually, they are not similar; the latter runs before *execution* of -a command, but after it has been read. - -** You can turn off the text property hooks that run when point moves -to certain places in the buffer, by binding inhibit-point-motion-hooks -to a non-nil value. - -** Inserting a string with no text properties into the buffer normally -inherits the properties of the preceding character. You can now -control this inheritance by setting the front-sticky and -rear-nonsticky properties of a character. - -If you make a character's front-sticky property t, then insertion -before the character inherits its properties. If you make the -rear-nonsticky property t, then insertion after the character does not -inherit its properties. You can regard characters as normally being -rear-sticky and not front-sticky, and this is why insertion normally -inherits from the previous character. - -If neither side of an insertion is suitably sticky, then the inserted -text gets no properties. If both sides are sticky, then the inserted -text gets the properties of both sides, with the previous character's -properties taking precedence when both sides have a property in -common. - -You can also specify stickiness for individual properties. To do so, -use a list of property names as the value of the front-sticky property -or the rear-nonsticky property. For example, if a character has a -rear-nonsticky property whose value is (face read-only), then -insertion after the character will not inherit its face property or -read-only property (if any), but will inherit any other properties. - -The merging of properties when both sides of the insertion are sticky -takes place one property at a time. If the preceding character is -rear-sticky for the property, and the property is non-nil, it -dominates. Otherwise, the following character's property value is -used if it is front-sticky for that property. - -** If you give a character a non-nil `invisible' text property, the -character does not appear on the screen. This works much like -selective display. - -The details of this feature are likely to change in future Emacs -versions. - -** In Info, when you go to a node, it runs the normal hook -Info-selection-hook. - -** You can use the new function `invocation-directory' to get the name -of the directory containing the Emacs executable that was run. - -** Entry to the minibuffer runs the normal hook minibuffer-setup-hook. - -** The new function minibuffer-window-active-p takes one argument, a -minibuffer window, and returns t if the window is currently active. - -* Changes in version 19.17. - -** When Emacs displays a list of completions in a buffer, -you can select a completion by clicking mouse button 2 -on that completion. - -** Use the command `list-faces-display' to display a list of -all the currently defined faces, showing what they look like. - -** Menu bar items from local maps now come after the usual items. - -** The Help menu bar item always comes last in the menu bar. - -** If you enable Font-Lock mode on a buffer containing a program -(certain languages such as C and Lisp are supported), everything you -type is automatically given a face property appropriate to its -syntactic role. For example, there are faces for comments, string -constants, names of functions being defined, and so on. - -** Dunnet, an adventure game, is now available. - -** Several major modes now have their own menu bar items, -including Dired, Rmail, and Sendmail. We would like to add -suitable menu bar items to other major modes. - -** The key binding C-x a C-h has been eliminated. -This is because it got in the way of the general feature of typing -C-h after a prefix character. If you want to run -inverse-add-global-abbrev, you can use C-x a - or C-x a i g instead. - -** If you set the variable `rmail-mail-new-frame' to a non-nil value, -all the Rmail commands to send mail make a new frame to do it in. -When you send the message, or use the menu bar command not to send it, -that frame is deleted. - -** In Rmail, the o and C-o commands are now almost interchangeable. -Both commands check the format of the file you specify, and append -the message to it in Rmail format if it is an Rmail file, and in -inbox file format otherwise. C-o and o are different only when you -specify a new file. - -** The function `copy-face' now takes an optional fourth argument -NEW-FRAME. If you specify this, it copies the definition of face -OLD-FACE on frame FRAME to face NEW-NAME on frame NEW-FRAME. - -** A local map can now cancel out one of the global map's menu items. -Just define that subcommand of the menu item with `undefined' -as the definition. For example, this cancels out the `Buffers' item -for the current major mode: - - (local-set-key [menu-bar buffer] 'undefined) - -** To put global items at the end of the menu bar, use the new variable -`menu-bar-final-items'. It should be a list of symbols--event types -bound in the menu bar. The menu bar items for these symbols are -moved to the end. - -** The list returned by `buffer-local-variables' now contains cons-cell -elements of the form (SYMBOL . VALUE) only for buffer-local variables -that have values. For unbound buffer-local variables, the variable -name (symbol) appears directly as an element of the list. - -** The `modification-hooks' property of a character no longer affects -insertion; it runs only for deletion and modification of the character. - -To detect insertion, use `insert-in-front-hooks' and -`insert-behind-hooks' properties. The former runs when text is -inserted immediately preceding the character that has the property; -the latter runs when text is inserted immediately following the -character. - -** Buffer modification now runs hooks belonging to overlays as well as -hooks belonging to characters. If an overlay has a -`modification-hooks' property, it applies to any change to text in the -overlay, and any insertion within the overlay. If the overlay has a -`insert-in-front-hooks' property, it runs for insertion at the -beginning boundary of the overlay. If the overlay has an -`insert-behind-hooks' property, it runs for insertion at the end -boundary of the overlay. - -The values of these properties should be lists of functions. Each -function is called, receiving as arguments the overlay in question, -followed by the bounds of the range being modified. - -** The new `-name NAME' option directs Emacs to search for its X -resources using the name `NAME', and sets the title of the initial -frame. This argument was added for consistency with other X clients. - -** The new `-xrm DATABASE' option tells Emacs to treat the string -DATABASE as the text of an X resource database. Emacs searches -DATABASE for resource values, in addition to the usual places. This -argument was added for consistency with other X clients. - -** Emacs now searches for X resources in the files specified by the -XFILESEARCHPATH, XUSERFILESEARCHPATH, and XAPPLRESDIR environment -variables, emulating the functionality provided by programs written -using Xt. Because of this change, Emacs will now notice system-wide -application defaults files, as other X clients do. - -XFILESEARCHPATH and XUSERFILESEARCHPATH should be a list of file names -separated by colons; XAPPLRESDIR should be a list of directory names -separated by colons. - -Emacs searches for X resources - + specified on the command line, with the `-xrm RESOURCESTRING' - option, - + then in the value of the XENVIRONMENT environment variable, - - or if that is unset, in the file named ~/.Xdefaults-HOSTNAME if it exists - (where HOSTNAME is the hostname of the machine Emacs is running on), - + then in the screen-specific and server-wide resource properties - provided by the server, - - or if those properties are unset, in the file named ~/.Xdefaults - if it exists, - + then in the files listed in XUSERFILESEARCHPATH, - - or in files named LANG/Emacs in directories listed in XAPPLRESDIR - (where LANG is the value of the LANG environment variable), if - the LANG environment variable is set, - - or in files named Emacs in the directories listed in XAPPLRESDIR - - or in ~/LANG/Emacs (if the LANG environment variable is set), - - or in ~/Emacs, - + then in the files listed in XFILESEARCHPATH. - -The paths in the variables XFILESEARCHPATH, XUSERFILESEARCHPATH, and -XAPPLRESDIR may contain %-escapes (like the control strings passed to -the Emacs lisp `format' function or C printf function), which Emacs expands. - -%N is replaced by the string "Emacs" wherever it occurs. -%T is replaced by "app-defaults" wherever it occurs. -%S is replaced by the empty string wherever it occurs. -%L and %l are replaced by the value of the LANG environment variable; if LANG - is not set, Emacs does not use that directory or file name at all. -%C is replaced by the value of the resource named "customization" - (class "Customization"), as retrieved from the server's resource - properties or the user's ~/.Xdefaults file, or the empty string if - that resource doesn't exist. - -So, for example, - if XFILESEARCHPATH is set to the value - "/usr/lib/X11/%L/%T/%N%C:/usr/lib/X11/%T/%N%C:/usr/lib/X11/%T/%N", - and the LANG environment variable is set to - "english", - and the customization resource is the string - "-color", -then, in the last step of the process described above, Emacs checks -for resources in the first of the following files that is present and -readable: - /usr/lib/X11/english/app-defaults/Emacs-color - /usr/lib/X11/app-defaults/Emacs-color - /usr/lib/X11/app-defaults/Emacs -If the LANG environment variable is not set, then Emacs never uses the -first element of the path, "/usr/lib/X11/%L/%T/%N%C", because it -contains the %L escape. - -If XFILESEARCHPATH is unset, Emacs uses the default value -"/usr/lib/X11/%L/app-defaults/Emacs%C:\ -/usr/lib/X11/app-defaults/Emacs%C:\ -/usr/lib/X11/%L/app-defaults/Emacs:\ -/usr/lib/X11/app-defaults/Emacs" - -This feature was added for consistency with other X applications. - -** The new function `text-property-any' scans the region of text from -START to END to see if any character's property PROP is `eq' to -VALUE. If so, it returns the position of the first such character. -Otherwise, it returns nil. - -The optional fifth argument, OBJECT, specifies the string or buffer to -be examined. - -** The new function `text-property-not-all' scans the region of text from -START to END to see if any character's property PROP is not `eq' to -VALUE. If so, it returns the position of the first such character. -Otherwise, it returns nil. - -The optional fifth argument, OBJECT, specifies the string or buffer to -be examined. - -** The function `delete-windows-on' now takes an optional second -argument FRAME, which specifies which frames it should affect. - + If FRAME is nil or omitted, then `delete-windows-on' deletes windows - showing BUFFER (its first argument) on all frames. - + If FRAME is t, then `delete-windows-on' only deletes windows on the - selected frame; other frames are unaffected. - + If FRAME is a frame, then `delete-windows-on' only deletes windows on - the given frame; other frames are unaffected. - - -* Changes in version 19.16. - -** When dragging the mouse to select a region, Emacs now highlights the -region as you drag (if Transient Mark mode is enabled). If you -continue the drag beyond the boundaries of the window, Emacs scrolls -the window at a steady rate until you either move the mouse back into -the window or release the button. - -** RET now exits `query-replace' and `query-replace-regexp'; this makes it -more consistent with the incremental search facility, which uses RET -to end the search. - -** In C mode, C-c C-u now runs c-up-conditional. -C-c C-n and C-c C-p now run new commands that move forward -and back over balanced sets of C conditionals (c-forward-conditional -and c-backward-conditional). - -** The Edit entry in the menu bar has a new alternative: -"Choose Next Paste". It gives you a menu showing the various -strings in the kill ring; click on one to select it as the text -to be yanked ("pasted") the next time you yank. - -** If you enable Transient Mark mode and set `mark-even-if-inactive' to -non-nil, then the region is highlighted in a transient fashion just as -normally in Transient Mark mode, but the mark really remains active -all the time; commands that use the region can be used even if the -region highlighting turns off. - -** If you type C-h after a prefix key, it displays the bindings -that start with that prefix. - -** The VC package now searches for version control commands in the -directories named by the variable `vc-path'; its value should be a -list of strings. - -** If you are visiting a file that has locks registered under RCS, -VC now displays each lock's owner and version number in the mode line -after the string `RCS'. If there are no locks, VC displays the head -version number. - -** When using X, if you load the `paren' library, Emacs automatically -underlines or highlights the matching paren whenever point is -next to the outside of a paren. When point is before an open-paren, -this shows the matching close; when point is after a close-paren, -this shows the matching open. - -** The new function `define-key-after' is like `define-key', -but takes an extra argument AFTER. It places the newly defined -binding after the binding for the event AFTER. - -** `accessible-keymaps' now takes an optional second argument, PREFIX. -If PREFIX is non-nil, it means the value should include only maps for -keys that start with PREFIX. - -`describe-bindings' also accepts an optional argument PREFIX which -means to describe only the keys that start with PREFIX. - -** The variable `prefix-help-command' hold a command to run to display help -whenever the character `help-char' follows a prefix key and does not have -a key binding in that context. - -** Emacs now detects double- and triple-mouse clicks. A single mouse -click produces a pair events of the form: - (down-mouse-N POSITION) - (mouse-N POSITION) -Clicking the same mouse button again, soon thereafter and at the same -location, produces another pair of events of the form: - (down-mouse-N POSITION) - (double-mouse-N POSITION 2) -Another click will produce an event pair of the form: - (down-mouse-N POSITION) - (triple-mouse-N POSITION 3) -All the POSITIONs in such a sequence would be identical, except for -their timestamps. - -To count as double- and triple-clicks, mouse clicks must be at the -same location as the first click, and the number of milliseconds -between the first release and the second must be less than the value -of the lisp variable `double-click-time'. Setting `double-click-time' -to nil disables multi-click detection. Setting it to t removes the -time limit; Emacs then detects multi-clicks by position only. - -If `read-key-sequence' finds no binding for a double-click event, but -the corresponding single-click event would be bound, -`read-key-sequence' demotes it to a single-click. Similarly, it -demotes unbound triple-clicks to double- or single-clicks. This means -you don't have to distinguish between single- and multi-clicks if you -don't want to. - -Emacs reports all clicks after the third as `triple-mouse-N' clicks, -but increments the click count after POSITION. For example, a fourth -click, soon after the third and at the same location, produces a pair -of events of the form: - (down-mouse-N POSITION) - (triple-mouse-N POSITION 4) - -** The way Emacs reports positions of mouse events has changed -slightly. If a mouse event includes a position list of the form: - (WINDOW (PLACE-SYMBOL) (COLUMN . ROW) TIMESTAMP) -this denotes exactly the same position as the list: - (WINDOW PLACE-SYMBOL (COLUMN . ROW) TIMESTAMP) -That is, the event occurred over a non-textual area of the frame, -specified by PLACE-SYMBOL, a symbol like `mode-line' or -`vertical-scroll-bar'. - -Enclosing PLACE-SYMBOL in a singleton list does not change the -position denoted, but the `read-key-sequence' function uses the -presence or absence of the singleton list to tell whether or not it -should prefix the event with its place symbol. - -Normally, `read-key-sequence' prefixes mouse events occurring over -non-textual areas with their PLACE-SYMBOLs, to select the sub-keymap -appropriate for the event; for example, clicking on the mode line -produces a sequence like - [mode-line (mouse-1 POSN)] -However, if lisp code elects to unread the resulting key sequence by -placing it in the `unread-command-events' variable, it is important -that `read-key-sequence' not insert the prefix symbol again; that -would produce a malformed key sequence like - [mode-line mode-line (mouse-1 POSN)] -For this reason, `read-key-sequence' encloses the event's PLACE-SYMBOL -in a singleton list when it first inserts the prefix, but doesn't -insert the prefix when processing events whose PLACE-SYMBOLs are -already thus enclosed. - - -* Changes in version 19.15. - -** `make-frame-visible', which uniconified frames, is now a command, -and thus may be bound to a key. This makes sense because frames -respond to user input while iconified. - -** You can now use Meta mouse clicks to set and use the "secondary -selection". You can drag M-Mouse-1 across the region you want to -select. Or you can press M-Mouse-1 at one end and M-Mouse-3 at the -other (this also copies the text to the kill ring). Repeating M-Mouse-3 -again at the same place kills that text. - -M-Mouse-2 kills the secondary selection. - -Setting the secondary selection does not move point or the mark. It -is possible to make a secondary selection that does not all fit on the -screen, by using M-Mouse-1 at one end, scrolling, then using M-Mouse-3 -at the other end. - -Emacs has only one secondary selection at any time. Starting to set -a new one cancels any previous one. The secondary selection displays -using a face named `secondary-selection'. - -** There's a new way to request use of Supercite (sc.el). Do this: - - (add-hook 'mail-citation-hook 'sc-cite-original) - -Currently this works with Rmail. In the future, other Emacs based -mail-readers should be modified to understand this hook also. -In the mean time, you should keep doing what you have done in the past -for those other mail readers. - -** When a regular expression contains `\(...\)' inside a repetition -operator such as `*' or `+', and you ask about the range that was matched -using `match-beginning' and `match-end', the range you get corresponds -to the *last* repetition *only*. In Emacs 18, you would get a range -corresponding to all the repetitions. - -If you want to get a range corresponding to all the repetitions, -put a `\(...\)' grouping *outside* the repetition operator. This -is the syntax that corresponds logically to the desired result, and -it works the same in Emacs 18 and Emacs 19. - -(This change actually took place earlier, but we didn't know about it -and thus didn't document it.) - -* Changes in version 19.14. - -** To modify read-only text, bind the variable `inhibit-read-only' -to a non-nil value. If the value is t, then all reasons that might -make text read-only are inhibited (including `read-only' text properties). -If the value is a list, then a `read-only' property is inhibited -if it is `memq' in the list. - -** If you call `get-buffer-window' passing t as its second argument, it -will only search for windows on visible frames. Previously, passing t -as the secord argument caused `get-buffer-window' to search all -frames, visible or not. - -** If you call `other-buffer' with a nil or omitted second argument, it -will ignore buffers displayed windows on any visible frame, not just -the selected frame. - -** You can specify a window or a frame for C-x # to use when -selects a server buffer. Set the variable server-window -to the window or frame that you want. - -** The command M-( now inserts spaces outside the open-parentheses in -some cases--depending on the syntax classes of the surrounding -characters. If the variable `parens-dont-require-spaces' is non-nil, -it inhibits insertion of these spaces. - -** The GUD package now supports the debugger known as xdb on HP/UX -systems. Use M-x xdb. The variable `gud-xdb-directories' lets you -specify a list of directories to search for source code. - -** If you are using the mailabbrev package, you should note that its -function for defining an alias is now called `define-mail-abbrev'. -This package no longer contains a definition for `define-mail-alias'; -that name is used only in mailaliases. - -** Inserted characters now inherit the properties of the text before -them, by default, rather than those of the following text. - -** The function `insert-file-contents' now takes optional arguments BEG -and END that specify which part of the file to insert. BEG defaults to -0 (the beginning of the file), and END defaults to the end of the file. - -If you specify BEG or END, then the argument VISIT must be nil. - -* Changes in version 19.13. - -** Magic file names can now handle the `load' operation. - -** Bibtex mode now sets up special entries in the menu bar. - -** The incremental search commands C-w and C-y, which copy text from -the buffer into the search string, now convert it to lower case -if you are in a case-insensitive search. This is to avoid making -the search a case-sensitive one. - -** GNUS now knows your time zone automatically if Emacs does. - -** Hide-ifdef mode no longer defines keys of the form -C-c LETTER, since those keys are reserved for users. -Those commands have been moved to C-c M-LETTER. -We may move them again for greater consistency with other modes. - -* Changes in version 19.12. - -** You can now make many of the sort commands ignore case by setting -`sort-fold-case' to a non-nil value. - -* Changes in version 19.11. - -** Supercite is installed. - -** `write-file-hooks' functions that return non-nil are responsible -for making a backup file if you want that to be done. -To do so, execute the following code: - - (or buffer-backed-up (backup-buffer)) - -You might wish to save the file modes value returned by -`backup-buffer' and use that to set the mode bits of the file -that you write. This is what `basic-save-buffer' does when -it writes a file in the usual way. - -(This is not actually new, but wasn't documented before.) - -* Changes in version 19.10. - -** The command `repeat-complex-command' is now on C-x ESC ESC. -It used to be bound to C-x ESC. - -The reason for this change is to make function keys work after C-x. - -** The variable `highlight-nonselected-windows' now controls whether -the region is highlighted in windows other than the selected window -(in Transient Mark mode only, of course, and currently only when -using X). - -* Changes in version 19.8. - -** It is now simpler to tell Emacs to display accented characters under -X windows. M-x standard-display-european toggles the display of -buffer text according to the ISO Latin-1 standard. With a prefix -argument, this command enables European character display iff the -argument is positive. - -** The `-i' command-line argument tells Emacs to use a picture of the -GNU gnu as its icon, instead of letting the window manager choose an -icon for it. This option used to insert a file into the current -buffer; use `-insert' to do that now. - -** The `configure' script now supports `--prefix' and `--exec-prefix' -options. - -The `--prefix=PREFIXDIR' option specifies where the installation process -should put emacs and its data files. This defaults to `/usr/local'. -- Emacs (and the other utilities users run) go in PREFIXDIR/bin - (unless the `--exec-prefix' option says otherwise). -- The architecture-independent files go in PREFIXDIR/lib/emacs/VERSION - (where VERSION is the version number of Emacs, like `19.7'). -- The architecture-dependent files go in - PREFIXDIR/lib/emacs/VERSION/CONFIGURATION - (where CONFIGURATION is the configuration name, like mips-dec-ultrix4.2), - unless the `--exec-prefix' option says otherwise. - -The `--exec-prefix=EXECDIR' option allows you to specify a separate -portion of the directory tree for installing architecture-specific -files, like executables and utility programs. If specified, -- Emacs (and the other utilities users run) go in EXECDIR/bin, and -- The architecture-dependent files go in - EXECDIR/lib/emacs/VERSION/CONFIGURATION. -EXECDIR/bin should be a directory that is normally in users' PATHs. - -** When running under X, the new lisp function `x-list-fonts' -allows code to find out which fonts are available from the X server. -The first argument PATTERN is a string, perhaps with wildcard characters; - the * character matches any substring, and - the ? character matches any single character. - PATTERN is case-insensitive. -If the optional arguments FACE and FRAME are specified, then -`x-list-fonts' returns only fonts the same size as FACE on FRAME. - - - -* Changes in version 19. - -** When you kill buffers, Emacs now returns memory to the operating system, -thus reducing the size of the Emacs process. All the space that you free -up by killing buffers can now be reused for other buffers no matter what -their sizes, or reused by other processes if Emacs doesn't need it. - -** Emacs now does garbage collection and auto saving while it is waiting -for input, which often avoids the need to do these things while you -are typing. - -The variable `auto-save-timeout' says how many seconds Emacs should -wait, after you stop typing, before it does an auto save and a garbage -collection. - -** If auto saving detects that a buffer has shrunk greatly, it refrains -from auto saving that buffer and displays a warning. Now it also turns -off Auto Save mode in that buffer, so that you won't get the same -warning again. - -If you reenable Auto Save mode in that buffer, Emacs will start saving -it again with no further warnings. - -** A new minor mode called Line Number mode displays the current line -number in the mode line, updating it as necessary when you move -point. - -However, if the buffer is very large (larger than the value of -`line-number-display-limit'), then the line number doesn't appear. -This is because computing the line number can be painfully slow if the -buffer is very large. - -** You can quit while Emacs is waiting to read or write files. - -** The arrow keys now have default bindings to move in the appropriate -directions. - -** You can suppress next-line's habit of inserting a newline when -called at the end of a buffer by setting next-line-add-newlines to nil -(it defaults to t). - -** You can now get back recent minibuffer inputs conveniently. While -in the minibuffer, type M-p to fetch the next earlier minibuffer -input, and use M-n to fetch the next later input. - -There are also commands to search forward or backward through the -history for history elements that match a regular expression. M-r -searches older elements in the history, while M-s searches newer -elements. By special dispensation, these commands can always use the -minibuffer to read their arguments even though you are already in the -minibuffer when you issue them. - -The history feature is available for all uses of the minibuffer, but -there are separate history lists for different kinds of input. For -example, there is a list for file names, used by all the commands that -read file names. There is a list for arguments of commands like -`query-replace'. There are also very specific history lists, such -as the one that `compile' uses for compilation commands. - -** You can now display text in a mixture of fonts and colors, using the -"face" feature, together with the overlay and text property features. -See the Emacs Lisp manual for details. The Emacs Users Manual describes -how to change the colors and font of standard predefined faces. - -** You can refer to files on other machines using special file name syntax: - -/HOST:FILENAME -/USER@HOST:FILENAME - -When you do this, Emacs uses the FTP program to read and write files on -the specified host. It logs in through FTP using your user name or the -name USER. It may ask you for a password from time to time; this -is used for logging in on HOST. - -** Some C-x key bindings have been moved onto new prefix keys. - -C-x r is a prefix for registers and rectangles. -C-x n is a prefix for narrowing. -C-x a is a prefix for abbrev commands. - -C-x r C-SPC -C-x r SPC point-to-register (Was C-x /) -C-x r j jump-to-register (Was C-x j) -C-x r s copy-to-register (Was C-x x) -C-x r i insert-register (Was C-x g) -C-x r r copy-rectangle-to-register (Was C-x r) -C-x r k kill-rectangle -C-x r y yank-rectangle -C-x r o open-rectangle -C-x r f frame-configuration-to-register - (This saves the state of all windows in all frames.) -C-x r w window-configuration-to-register - (This saves the state of all windows in the selected frame.) - -(Use C-x r j to restore a configuration saved with C-x r f or C-x r w.) - -C-x n n narrow-to-region (Was C-x n) -C-x n p narrow-to-page (Was C-x p) -C-x n w widen (Was C-x w) - -C-x a l add-mode-abbrev (Was C-x C-a) -C-x a g add-global-abbrev (Was C-x +) -C-x a i l inverse-add-mode-abbrev (Was C-x C-h) -C-x a i g inverse-add-global-abbrev (Was C-x -) -C-x a e expand-abbrev (Was C-x ') - -(The old key bindings C-x /, C-x j, C-x x and C-x g -have not yet been removed.) - -** You can put a file name in a register to be able to visit the file -quickly. Do this: - - (set-register ?CHAR '(file . NAME)) - -where NAME is the file name as a string. Then C-x r j CHAR finds that -file. - -This is useful for files that you need to visit frequently, -but that you don't want to keep in buffers all the time. - -** The keys M-g (fill-region) and C-x a (append-to-buffer) -have been eliminated. - -** The new command `string-rectangle' inserts a specified string on -each line of the region-rectangle. - -** C-x 4 r is now `find-file-read-only-other-window'. - -** C-x 4 C-o is now `display-buffer', which displays a specified buffer -in another window without selecting it. - -** Picture mode has been substantially improved. The picture editing commands -now arrange for automatic horizontal scrolling to keep point visible -when editing a wide buffer with truncate-lines on. Picture-mode -initialization now does a better job of rebinding standard commands; -it finds not just their normal keybindings, but any function keys -attached to them. - -** If you enable Transient Mark mode, then the mark becomes "inactive" -after every command that modifies the buffer. While the mark is -active, the region is highlighted (under X, at least). Most commands -that use the mark give an error if the mark is inactive, but you can -use C-x C-x to make it active again. This feature is also sometimes -known as "Zmacs mode". - -** Outline mode is now available as a minor mode. This minor mode can -combine with any major mode; it substitutes the C-c commands of -Outline mode for those of the major mode. Use M-x outline-minor-mode -to enable and disable the new mode. - -M-x outline-mode is unchanged; it still switches to Outline mode as a -major mode. - -** The default setting of `version-control' comes from the environment -variable VERSION_CONTROL. - -** The user option for controlling whether files can set local -variables is now called `enable-local-variables'. A value of t means -local-variables lists are obeyed; nil means they are ignored; anything -else means query the user. - -The user option for controlling use of the `eval' local variable is -now called is `enable-local-eval'; its values are interpreted like -those of `enable-local-variables'. - -** X Window System changes: - -C-x 5 C-f and C-x 5 b switch to a specified file or buffer in a new -frame. Likewise, C-x 5 m starts outgoing mail in another frame, and -C-x 5 . finds a tag in another frame. - -When you are using X, C-z now iconifies the selected frame. - -Emacs can now exchange text with other X applications. Killing or -copying text in Emacs now makes that text available for pasting into -other X applications. The Emacs yanking commands now insert the -latest selection set by other applications, and add the text to the -kill ring. The Emacs commands for selecting and inserting text with -the mouse now use the kill ring in the same way the keyboard killing -and yanking commands do. - -The option to specify the title for the initial frame is now `-name NAME'. -There is currently no way to specify an icon title; perhaps we will add -one in the future. - -** Undoing a deletion now puts point back where it was before the -deletion. - -** The variables that control how much undo information to save have -been renamed to `undo-limit' and `undo-strong-limit'. They used to be -called `undo-threshold' and `undo-high-threshold'. - -** You can now use kill commands in read-only buffers. They don't -actually change the buffer, and Emacs will beep and warn you that the -buffer is read-only, but they do copy the text you tried to kill into -the kill ring, so you can yank it into other buffers. - -** C-o inserts the fill-prefix on the newly created line. The command -M-^ deletes the prefix (if it occurs) after the newline that it -deletes. - -** C-M-l now runs the command `reposition-window'. It scrolls the -window heuristically in a way designed to get useful information onto -the screen. - -** C-M-r is now reverse incremental regexp search. - -** M-z now kills through the target character. In version 18, it -killed up to but not including the target character. - -** M-! now runs the specified shell command asynchronously if it -ends in `&' (just as the shell does). - -** C-h C-f and C-h C-k are new help commands that display the Info -node for a given Emacs function name or key sequence, respectively. - -** The C-h p command system lets you find Emacs Lisp packages by -topic keywords. Here is a partial list of package categories: - -abbrev abbreviation handling, typing shortcuts, macros -bib code related to the bib bibliography processor -c C and C++ language support -calendar calendar and time management support -comm communications, networking, remote access to files -docs support for Emacs documentation -emulations emulations of other editors -extensions Emacs Lisp language extensions -games games, jokes and amusements -hardware support for interfacing with exotic hardware -help support for on-line help systems -i14n internationalization and alternate character-set support -internal code for Emacs internals, build process, defaults -languages specialized modes for editing programming languages -lisp Lisp support, including Emacs Lisp -local code local to your site -maint maintenance aids for the Emacs development group -mail modes for electronic-mail handling -news support for netnews reading and posting -processes process, subshell, compilation, and job control support -terminals support for terminal types -tex code related to the TeX formatter -tools programming tools -unix front-ends/assistants for, or emulators of, UNIX features -vms support code for vms -wp word processing - -More will be added soon. - -** The command to split a window into two side-by-side windows is now -C-x 3. It was C-x 5. - -** M-. (find-tag) no longer has any effect on what M-, will do -subsequently. You can no longer use M-, to find the next similar tag; -you must use M-. with a prefix argument, instead. - -The motive for this change is so that you can more reliably use -M-, to resume a suspended `tags-search' or `tags-query-replace'. - -** C-x s (`save-some-buffers') now gives you more options when it asks -whether to save a particular buffer. In addition to `y' or `n', you -can answer `!' to save all the remaining buffers, `.' to save this -buffer but not save any others, ESC to stop saving and exit the -command, and C-h to get help. These options are analogous to those -of `query-replace'. - -** M-x make-symbolic-link does not expand its first argument. -This lets you make a link with a target that is a relative file name. - -** M-x add-change-log-entry and C-x 4 a now automatically insert the -name of the file and often the name of the function that you changed. -They also handle grouping of entries. - -There is now a special major mode for editing ChangeLog files. It -makes filling work conveniently. Each bunch of grouped entries is one -paragraph, and each collection of entries from one person on one day -is considered a page. - -** The `comment-region' command adds comment delimiters to the lines that -start in the region, thus commenting them out. With a negative argument, -it deletes comment delimiters from the lines in the region--this cancels -the effect of `comment-region' without an argument. - -With a positive argument, `comment-region' adds comment delimiters -but duplicates the last character of the comment start sequence as many -times as the argument specifies. This is a way of calling attention to -the comment. In Lisp, you should use an argument at least two, because -the indentation convention for single semicolon comments does not leave -them at the beginning of a line. - -** If `split-window-keep-point' is non-nil, C-x 2 tries to avoid -shifting any text on the screen by putting point in whichever window -happens to contain the screen line the cursor is already on. -The default is that `split-window-keep-point' is non-nil on slow -terminals. - -** M-x super-apropos is like M-x apropos except that it searches both -Lisp symbol names and documentation strings for matches. It describes -every symbol that has a match in either the symbol's name or its -documentation. - -Both M-x apropos and M-x super-apropos take an optional second -argument DO-ALL which controls the more expensive part of the job. -This includes looking up and printing the key bindings of all -commands. It also includes checking documentation strings in -super-apropos. DO-ALL is nil by default; use a prefix arg to make it -non-nil. - -** M-x revert-buffer no longer offers to revert from a recent auto-save -file unless you give it a prefix argument. Otherwise it always -reverts from the real file regardless of whether there has been an -auto-save since thenm. (Reverting from the auto-save file is no longer -very useful now that the undo capacity is larger.) - -** M-x recover-file no longer turns off Auto Save mode when it reads -the last Auto Save file. - -** M-x rename-buffer, if you give it a prefix argument, -avoids errors by modifying the new name to make it unique. - -** M-x rename-uniquely renames the current buffer to a similar name -with a numeric suffix added to make it both different and unique. - -One use of this command is for creating multiple shell buffers. -If you rename your shell buffer, and then do M-x shell again, it -makes a new shell buffer. This method is also good for mail buffers, -compilation buffers, and any Emacs feature which creates a special -buffer with a particular name. - -** M-x compare-windows with a prefix argument ignores changes in whitespace. -If `compare-ignore-case' is non-nil, then differences in case are also -ignored. - -** `backward-paragraph' is now bound to M-{ by default, and `forward-paragraph' -to M-}. Originally, these commands were bound to M-[ and M-], but they were -running into conflicts with the use of function keys. On many terminals, -function keys send a sequence beginning ESC-[, so many users have defined this -as a prefix key. - -** C-x C-u (upcase-region) and C-x C-l (downcase-region) are now disabled by -default; these commands seem to be often hit by accident, and can be -quite destructive if their effects are not noticed immediately. - -** The function `erase-buffer' is now interactive, but disabled by default. - -** When visiting a new file, Emacs attempts to abbreviate the file's -path using the symlinks listed in `directory-abbrev-alist'. - -** When you visit the same file in under two names that translate into -the same name once symbolic links are handled, Emacs warns you that -you have two buffers for the same file. - -** If you wish to avoid visiting the same file in two buffers under -different names, set the variable `find-file-existing-other-name' -non-nil. Then `find-file' uses the existing buffer visiting the file, -no matter which of the file's names you specify. - -** If you set `find-file-visit-truename' non-nil, then the file name -recorded for a buffer is the file's truename (in which all symbolic -links have been removed), rather than the name you specify. Setting -`find-file-visit-truename' also implies the effect of -`find-file-existing-other-name'. - -** C-x C-v now inserts the entire current file name in the minibuffer. -This is convenient if you made a small mistake in typing it. Point -goes after the last slash, before the last file name component, so if -you want to replace it entirely, you can use C-k right away to delete -it. - -** Commands such as C-M-f in Lisp mode now ignore parentheses within comments. - -** C-x q now uses ESC to terminate all iterations of the keyboard -macro, rather than C-d as before. - -** Use the command `setenv' to set an individual environment variable -for Emacs subprocesses. Specify a variable name and a value, both as -strings. This command applies only to subprocesses yet to be -started. - -** Use `rot13-other-window' to examine a buffer with rot13. - -This command does not change the text in the buffer. Instead, it -creates a window with a funny display table that applies the code when -displaying the text. - -** The command `M-x version' now prints the current Emacs version; The -`version' command is an alias for the `emacs-version' command. - -** More complex changes in existing packages. - -*** `fill-nonuniform-paragraphs' is a new command, much like -`fill-individual-paragraphs' except that only separator lines separate -paragraphs. Since this means that the lines of one paragraph may have -different amounts of indentation, the fill prefix used is the smallest -amount of indentation of any of the lines of the paragraph. - -*** Filling is now partially controlled by a new minor mode, Adaptive -Fill mode. When this mode is enabled (and it is enabled by default), -if you use M-x fill-region-as-paragraph on an indented paragraph and -you don't have a fill prefix, it uses the indentation of the second -line of the paragraph as the fill prefix. - -Adaptive Fill mode doesn't have much effect on M-q in most major -modes, because an indented line will probably count as a paragraph -starter and thus each line of an indented paragraph will be considered -a paragraph of its own. - -*** M-q in C mode now runs `c-fill-paragraph', which is designed -for filling C comments. (We assume you don't want to fill -the code in a C program.) - -*** M-$ now runs the Ispell program instead of the Unix spell program. - -M-$ starts an Ispell process the first time you use it. But the process -stays alive, so that subsequent uses of M-$ run very fast. -If you want to get rid of the process, use M-x kill-ispell. - -To check the entire current buffer, use M-x ispell-buffer. -Use M-x ispell-region to check just the current region. - -Ispell commands often involve interactive replacement of words. -You can interrupt the interactive replacement with C-g. -You can restart it again afterward with C-u M-$. - -During interactive replacement, you can type the following characters: - -a Accept this word this time. -DIGIT Replace the word (this time) with one of the displayed near-misses. - The digit you use says which near-miss to use. -i Insert this word in your private dictionary - so that Ispell will consider it correct it from now on. -r Replace the word this time with a string typed by you. - -When the Ispell process starts, it reads your private dictionary which -is the file `~/ispell.words'. If you "insert" words with the `i' command, -these words are added to that file, but not right away--only at the end -of the interactive replacement process. - -Use M-x reload-ispell to reload your private dictionary from -`~/ispell.words' if you edit it outside of Ispell. - -** Changes in existing modes. - -*** gdb-mode has been replaced by gud-mode. - -The package gud.el (Grand Unified Debugger) replaces gdb.el in Emacs -19. It provides a gdb.el-like interface to any of three debuggers; -gdb itself, the sdb debugger supported on some Unix systems, or the -dbx debugger on Berkeley systems. - - You start it up with one of the commands M-x gdb, M-x sdb, or -M-x dbx. Each entry point finishes by executing a hook; gdb-mode-hook, -sdb-mode-hook or dbx-mode-hook respectively. - -These bindings have changed: -C-x C-a > gud-down (was M-d) -C-x C-a < gud-up (was M-u) -C-x C-a C-r gud-cont (was M-c) -C-x C-a C-n gud-next (was M-n) -C-x C-a C-s gud-step (was M-s) -C-x C-a C-i gud-stepi (was M-i) -C-x C-a C-l gud-recenter (was C-l) -C-d comint-delchar-or-maybe-eof (was C-c C-d) - -These bindings have been removed: -C-c C-r (was comint-show-output; now gud-cont) - -Since GUD mode uses comint, it uses comint's input history commands, -superseding C-c C-y (copy-last-shell-input): - M-p comint-next-input - M-n comint-previous-input - M-r comint-previous-similar-input - M-s comint-next-similar-input - M-C-r comint-previous-input-matching - -The C-x C-a bindings are also active in source files. - -*** The old TeX mode bindings of M-{ and M-} have been moved to C-c { -and C-c }. (These commands are `up-list' and `tex-insert-braces'; -they are the TeX equivalents of M-( and M-).) This is because M-{ -and M-} are now globally defined commands. - -*** Changes in Mail mode. - -`%' is now a word-separator character in Mail mode. - -`mail-signature', if non-nil, tells M-x mail to insert your -`.signature' file automatically. If you don't want your signature in -a particular message, just delete it before you send the message. - -You can specify the text to insert at the beginning of each line when -you use C-c C-y to yank the message you are replying to. Set -`mail-yank-prefix' to the desired string. A value of `nil' (the -default) means to use indentation, as in Emacs 18. If you use just -C-u as the prefix argument to C-c C-y, then it does not insert -anything at the beginning of the lines, regardless of the value of -`mail-yank-prefix'. - -If you like, you can expand mail aliases as abbrevs, as soon as you -type them in. To enable this feature, execute the following: - - (add-hook 'mail-setup-hook 'mail-abbrevs-setup) - -This can go in your .emacs file. - -Word abbrevs don't expand unless you insert a word-separator character -afterward. Any mail aliases that you didn't expand at insertion time -are expanded subsequently when you send the message. - -*** Changes in Rmail. - -Rmail by default gets new mail only from the system inbox file, -not from `~/mbox'. - -In Rmail, you can retry sending a message that failed -by typing `M-m' on the failure message. - -By contrast, another new command M-x rmail-resend is used for -forwarding a message and marking it as "resent from" you -with header fields "Resent-From:" and "Resent-To:". - -`e' is now the command to edit a message. -To expunge, type `x'. We know this will surprise people -some of the time, but the surprise will not be disastrous--if -you type `e' meaning to expunge, just turn off editing with C-c C-c -and then type `x'. - -Another new Rmail command is `<', which moves to the first message. -This is for symmetry with `>'. - -Use the `b' command to bury the Rmail buffer and its summary buffer, -if any, removing both of them from display on the screen. - -The variable `rmail-output-file-alist' now controls the default -for the file to output a message to. - -In the Rmail summary buffer, all cursor motion commands select -the message you move to. It's really neat when you use -incremental search. - -You can now issue most Rmail commands from an Rmail summary buffer. -The commands do the same thing in that buffer that they do in the -Rmail buffer. They apply to the message that is selected in the Rmail -buffer, which is always the one described by the current summary -line. - -Conversely, motion and deletion commands in the Rmail buffer also -update the summary buffer. If you set the variable -`rmail-redisplay-summary' to a non-nil value, then they bring the -summary buffer (if one exists) back onto the screen. - -C-M-t is a new command to make a summary by topic. It uses regexp -matching against just the subjects of the messages to decide which -messages to show in the summary. - -You can easily convert an Rmail file to system mailbox format with the -command `unrmail'. This command reads two arguments, the name of -the Rmail file to convert, and the name of the new mailbox file. -(This command does not change the Rmail file itself.) - -Rmail now handles Content Length fields in messages. - -*** `mail-extract-address-components' unpacks mail addresses. -It takes an address as a string (the contents of the From field, for -example) and returns a list of the form (FULL-NAME -CANONICAL-ADDRESS). - -*** Changes in C mode and C-related commands. - -**** M-x c-up-conditional - -In C mode, `c-up-conditional' moves back to the containing -preprocessor conditional, setting the mark where point was -previously. - -A prefix argument acts as a repeat count. With a negative argument, -this command moves forward to the end of the containing preprocessor -conditional. When going backwards, `#elif' acts like `#else' followed -by `#if'. When going forwards, `#elif' is ignored. - -**** In C mode, M-a and M-e are now defined as -`c-beginning-of-statement' and `c-end-of-statement'. - -**** In C mode, M-x c-backslash-region is a new command to insert or -align `\' characters at the ends of the lines of the region, except -for the last such line. This is useful after writing or editing a C -macro definition. - -If a line already ends in `\', this command adjusts the amount of -whitespace before it. Otherwise, it inserts a new `\'. - -*** New features in info. - -When Info looks for an Info file, it searches the directories -in `Info-directory-list'. This makes it easy to install the Info files -that come with various packages. You can specify the path with -the environment variable INFOPATH. - -There are new commands in Info mode. - -`]' now moves forward a node, going up and down levels as needed. -`[' is similar but moves backward. These two commands try to traverse -the entire Info tree, node by node. They are the equivalent of reading -a printed manual sequentially. - -`<' moves to the top node of the current Info file. -`>' moves to the last node of the file. - -SPC scrolls through the current node; at the end, it advances to the -next node in depth-first order (like `]'). - -DEL scrolls backwards in the current node; at the end, it moves to the -previous node in depth-first order (like `['). - -After a menu select, the info `up' command now restores point in the -menu. The combination of this and the previous two changes means that -repeated SPC keystrokes do the right (depth-first traverse forward) thing. - -`i STRING RET' moves to the node associated with STRING in the index -or indices of this manual. If there is more than one match for -STRING, the `i' command finds the first match. - -`,' finds the next match for the string in the previous `i' command - -If you click the middle mouse button near a cross-reference, -menu item or node pointer while in Info, you will go to the node -which is referenced. - -*** Changes in M-x compile. - -You can repeat any previous compilation command conveniently using the -minibuffer history commands, while in the minibuffer entering the -compilation command. - -While a compilation is going on, the string `Compiling' appears in -the mode line. When this string disappears, that tells you the -compilation is finished. - -The buffer of compiler messages is in Compilation mode. This mode -provides the keys SPC and DEL to scroll by screenfuls, and M-n and M-p -to move to the next or previous error message. You can also use C-c -C-c on any error message to find the corresponding source code. - -Emacs 19 has a more general parser for compiler messages. For example, it -can understand messages from lint, and from certain C compilers whose error -message format is unusual. Also, it only parses until it sees the error -message you want; you never have to wait a long time to see the first -error, no matter how big the buffer is. - -*** M-x diff and M-x diff-backup. - -This new command compares two files, displaying the differences in an -Emacs buffer. The options for the `diff' program come from the -variable `diff-switches', whose value should be a string. - -The buffer of differences has Compilation mode as its major mode, so you -can use C-x ` to visit successive changed locations in the two -source files, or you can move to a particular hunk of changes and type -C-c C-c to move to the corresponding source. You can also use the -other special commands of Compilation mode: SPC and DEL for -scrolling, and M-n and M-p for cursor motion. - -M-x diff-backup compares a file with its most recent backup. -If you specify the name of a backup file, `diff-backup' compares it -with the source file that it is a backup of. - -*** The View commands (such as M-x view-buffer and M-x view-file) no -longer use recursive edits; instead, they switch temporarily to a -different major mode (View mode) specifically designed for moving -around through a buffer without editing it. - -*** Changes in incremental search. - -**** The character to terminate an incremental search is now RET. -This is for compatibility with the way most other arguments are read. - -To search for a newline in an incremental search, type LFD (also known -as C-j). - -**** Incremental search now maintains a ring of previous search -strings. Use M-p and M-n to move through the ring to pick a search -string to reuse. These commands leave the selected search ring -element in the minibuffer, where you can edit it. Type C-s or C-r to -finish editing and search for the chosen string. - -**** If you type an upper case letter in incremental search, that turns -off case-folding, so that you get a case-sensitive search. - -**** If you type a space during regexp incremental search, it matches -any sequence of whitespace characters. If you want to match just a space, -type C-q SPC. - -**** Incremental search is now implemented as a major mode. When you -type C-s, it switches temporarily to a different keymap which defines -each key to do what it ought to do for incremental search. This has -next to no effect on the user-visible behavior of searching, but makes -it easier to customize that behavior. - -Emacs 19 eliminates the old variables `search-...-char' that used to -be the way to specify the characters to use for various special -purposes in incremental search. Instead, you can define the meaning -of a character in incremental search by modifying `isearch-mode-map'. - -*** New commands in Buffer Menu mode. - -The command C-o now displays the current line's buffer in another -window but does not select it. This is like the existing command `o' -which selects the current line's buffer in another window. - -The command % toggles the read-only flag of the current line's buffer. - -The way to switch to a set of several buffers, including those marked -with m, is now v. The q command simply quits, replacing the buffer -menu buffer with the buffer that was displayed previously. - -** New major modes and packages. - -*** The news reader GNUS is now installed. - -*** There is a new interface for version control systems, called VC. -It works with both RCS and SCCS; in fact, you don't really have to -know which one of them is being used, because it automatically deals -with either one. - -Most of the time, the only command you have to know about is C-x C-q. -This command normally toggles the read-only flag of the current -buffer. If the buffer is visiting a file that is maintained with a -version control system, the command still toggles read-only, but does -so by checking the file in or checking it out. - -When you check a file in, VC asks you for a log entry by popping up a -buffer. Edit the entry there, then type C-c C-c when it is ready. -That's when the actual checkin happens. If you change your mind about -the checkin, simply switch buffers and don't ever go back to the log -buffer. - -To start using version control for a file, use the command C-x v v. -This works like C-x C-q (performing the next logical version-control -operation needed to change the file's writability) but it will also -perform initial checkin on an unregistered file. - -By default, VC uses RCS if RCS is installed on your machine; -otherwise, SCCS. If you want to make the choice explicitly, you can do -it by setting `vc-default-back-end' to the symbol `RCS' or the symbol -`SCCS'. - -You can tell when a file you visit is maintained with version control -because either `RCS' or `SCCS' appears in the mode line. - -*** A new Calendar mode has been added, the work of Edward M. Reingold. -The mode can display the Gregorian calendar and a variety of other -calendars at any date, and interacts with a diary facility similar to -the UNIX `calendar' utility. - -*** There is a new major mode for editing binary files: Hexl mode. -To use it, use M-x hexl-find-file instead of C-x C-f to visit the file. -This command converts the file's contents to hexadecimal and lets you -edit the translation. When you save the file, it is converted -automatically back to binary. - -You can also use M-x hexl-mode to translate an existing buffer into hex. -Do this if you have already visited a binary file. - -Hexl mode has a few other commands: - -C-M-d insert a byte with a code typed in decimal. -C-M-o insert a byte with a code typed in octal. -C-M-x insert a byte with a code typed in hex. - -C-x [ move to the beginning of a 1k-byte "page". -C-x ] move to the end of a 1k-byte "page". - -M-g go to an address specified in hex. -M-j go to an address specified in decimal. - -C-c C-c leave hexl mode and go back to the previous major mode. - -*** Miscellaneous new major modes include Awk mode, Icon mode, Makefile -mode, Perl mode and SGML mode. - -*** Edebug, a new source-level debugger for Emacs Lisp functions. - -To use Edebug, use the command M-x edebug-defun to "evaluate" a -function definition in an Emacs Lisp file. We put "evaluate" in -quotation marks because it doesn't just evaluate the function, it also -inserts additional information to support source-level debugging. - -You must also do - - (setq debugger 'edebug-debug) - -to cause errors and single-stepping to use Edebug instead of the usual -Emacs Lisp debugger. - -For more information, see the Edebug manual, which should be included -in the Emacs distribution. - -*** C++ mode is like C mode, except that it understands C++ comment syntax -and certain other differences between C and C++. It also has a command -`fill-c++-comment' which fills a paragraph made of comment lines. - -The command `comment-region' is useful in C++ mode for commenting out -several consecutive lines, or removing the commenting out of such lines. - -*** A new package for merging two variants of the same text. - -It's not unusual for programmers to get their signals crossed and -modify the same program in two different directions. Then somebody -has to merge the two versions. The command `emerge-files' makes this -easier. - -`emerge-files' reads two file names and compares them. Then it -displays three buffers: one for each file, and one for the -differences. - -If the original version of the file is available, you can make things -even easier using `emerge-files-with-ancestor'. It reads three file -names--variant 1, variant 2, and the common ancestor--and uses diff3 -to compare them. - -You control the merging interactively. The main loop of Emerge -consists of showing you one set of differences, asking you what to do -about them, and doing it. You have a choice of two modes for giving -directions to Emerge: "fast" mode and "edit" mode. - -In Fast mode, Emerge commands are single characters, and ordinary -Emacs commands are disabled. This makes Emerge operations fast, but -prevents you from doing more than selecting the A or the B version of -differences. In Edit mode, all emerge commands use the C-c prefix, -and the usual Emacs commands are available. This allows editing the -merge buffer, but slows down Emerge operations. Edit and fast modes -are indicated by `F' and `E' in the minor modes in the mode line. - -The Emerge commands are: - - p go to the previous difference - n go to the next difference - a select the A version of this difference - b select the B version of this difference - j go to a particular difference (prefix argument - specifies which difference) (0j suppresses display of - the flags) - q quit - finish the merge* - f go into fast mode - e go into edit mode - l recenter (C-l) all three windows* - - and 0 through 9 - prefix numeric arguments - d a select the A version as the default from here down in - the merge buffer* - d b select the B version as the default from here down in - the merge buffer* - c a copy the A version of the difference into the kill - ring - c b copy the B version of the difference into the kill - ring - i a insert the A version of the difference at the point - i b insert the B version of the difference at the point - m put the point and mark around the difference region - ^ scroll-down (like M-v) the three windows* - v scroll-up (like C-v) the three windows* - < scroll-left (like C-x <) the three windows* - > scroll-right (like C-x >) the three windows* - | reset horizontal scroll on the three windows* - x 1 shrink the merge window to one line (use C-u l to restore it - to full size) - x a find the difference containing a location in the A buffer* - x b find the difference containing a location in the B buffer* - x c combine the two versions of this difference* - x C combine the two versions of this difference, using a - register's value as the template* - x d find the difference containing a location in the merge buffer* - x f show the files/buffers Emerge is operating on in Help window - (use C-u l to restore windows) - x j join this difference with the following one - (C-u x j joins this difference with the previous one) - x l show line numbers of points in A, B, and merge buffers - x m change major mode of merge buffer* - x s split this difference into two differences - (first position the point in all three buffers to the places - to split the difference) - x t trim identical lines off top and bottom of difference - (such lines occur when the A and B versions are - identical but differ from the ancestor version) - x x set the template for the x c command* - -Normally, the merged output goes back in the first file specified. -If you use a prefix argument, Emerge reads another file name to use -for the output file. - -Once Emerge has prepared the buffer of differences, it runs the hooks -in `emerge-startup-hooks'. - -*** Asm mode is a new major mode for editing files of assembler code. -It defines these commands: - -TAB tab-to-tab-stop. -LFD Insert a newline and then indent using tab-to-tab-stop. -: Insert a colon and then remove the indentation - from before the label preceding colon. Then tab-to-tab-stop. -; Insert or align a comment. - -*** Two-column mode lets you conveniently edit two side-by-side columns -of text. It works using two side-by-side windows, each showing its -own buffer. - -Here are three ways to enter two-column mode: - -C-x 6 2 makes the current buffer into the left-hand buffer. In the -right-hand window it puts a buffer whose name is based on the current -buffer's name. - -C-x 6 b BUFFER RET makes the current buffer into the left-hand buffer, -and uses buffer BUFFER as the right-hand buffer. - -C-x 6 s splits the current buffer, which contains two-column text, -into two side-by-side buffers. The old current buffer becomes the -left-hand buffer, but the text in the right column is moved into the -right-hand buffer. The current column specifies the split point. -Splitting starts with the current line and continues to the end of the -buffer. - -C-x 6 s takes a prefix argument which specifies how many characters -before point constitute the column separator. (The default argument -is 1, as usual, so by default the column separator is the character -before point.) Lines that don't have the column separator at the -proper place remain unsplit; they stay in the left-hand buffer, and -the right-hand buffer gets an empty line to correspond. - -You can scroll both buffers together using C-x 6 SPC (scroll up), C-x -6 DEL (scroll down), and C-x 6 RET (scroll up one line). C-x 6 C-l -recenters both buffers together. - -If you want to make a line which will span both columns, put it in -the left-hand buffer, with an empty line in the corresponding place in -the right-hand buffer. - -When you have edited both buffers as you wish, merge them with C-x 6 -1. This copies the text from the right-hand buffer as a second column -in the other buffer. To go back to two-column editing, use C-x 6 s. - -Use C-x 6 d to disassociate the two buffers, leaving each as it -stands. (If the other buffer, the one that was not current when you -type C-x 6 d, is empty, C-x 6 d kills it.) - -*** You can supply command arguments such as files to visit to an Emacs -that is already running. To do this, you must do this in your .emacs -file: - (add-hook 'suspend-hook 'resume-suspend-hook) -Also you must use the shellscript emacs.csh or emacs.sh, found in the -etc subdirectory. - -*** Shell mode has been completely replaced. -The basic idea is the same, but there are new commands available in -this mode. - -TAB now completes the file name before point in the shell buffer. -To get a list of all possible completions, type M-?. - -There is a new convenient history mechanism for repeating previous -commands. Use the command M-p to recall the last command; it copies -the text of that command to the place where you are editing. If you -repeat M-p, it replaces the copied command with the previous command. -M-n is similar but goes in the opposite direction towards the present. -When you find the command you wanted, you can edit it, or just -resubmit it by typing RET. - -You can also use M-r and M-s to search for (respectively) earlier or -later inputs starting with a given string. First type the string, -then type M-r to yank a previous input from the history which starts -with that string. You can repeat M-r to find successively earlier -inputs starting with the same string. You can start moving in the -opposite direction (toward more recent inputs) by typing M-s instead -of M-r. As long as you don't use any commands except M-r and M-s, -they keep using the same string that you had entered initially. - -C-c C-o kills the last batch of output from a shell command. This is -useful if a shell command spews out lots of output that just gets in -the way. - -C-c C-r scrolls to display the beginning of the last batch of output -at the top of the window; it also moves the cursor there. - -C-a on a line that starts with a shell prompt moves to the end of the -prompt, not to the very beginning of the line. - -C-d typed at the end of the shell buffer sends EOF to the subshell. -At any other position in the buffer, it deletes a character as usual. - -If Emacs gets confused while trying to track changes in the shell's -current directory, type M-x dirs to re-synchronize. - -M-x send-invisible reads a line of text without echoing it, and -sends it to the shell. - -If you accidentally suspend your process, use M-x comint-continue-subjob -to continue it. - -*** There is now a convenient way to enable flow control on terminals -where you can't win without it. Suppose you want to do this on -VT-100 and H19 terminals; put the following in your `.emacs' file: - - (enable-flow-control-on "vt100" "h19") - -When flow control is enabled, you must type C-\ to get the effect of a -C-s, and type C-^ to get the effect of a C-q. - -The function `enable-flow-control' enables flow control unconditionally. - -** Changes in Dired - -Dired has many new features which allow you to do these things: - -- Rename, copy, or make links to many files at once. - -- Make distinguishable types of marks for different operations. - -- Display contents of subdirectories in the same Dired buffer as the -parent directory. - -*** Setting and Clearing Marks - -There are now two kinds of marker that you can put on a file in Dired: -`D' for deletion, and `*' for any other kind of operation. -The `x' command deletes only files marked with `D', and most -other Dired commands operate only on the files marked with `*'. - -To mark files with `D' (also called "flagging" the files), you -can use `d' as usual. Here are some commands for marking with -`*' (and also for unmarking): - -**** `m' marks the current file with `*', for an operation other than -deletion. - -**** `*' marks all executable files. With a prefix argument, it -unmarks all those files. - -**** `@' marks all symbolic links. With a prefix argument, it unmarks -all those files. - -**** `/' marks all directory files except `.' and `..'. With a prefix -argument, it unmarks all those files. - -**** M-DEL removes a specific or all marks from every file. With an -argument, queries for each marked file. Type your help character, -usually C-h, at that time for help. - -**** `c' replaces all marks that use the character OLD with marks that -use the character NEW. You can use almost any character as a mark -character by means of this command, to distinguish various classes of -files. If OLD is ` ', then the command operates on all unmarked -files; if NEW is ` ', then the command unmarks the files it acts on. - -*** Operating on Multiple Files - -The Dired commands to operate directly on files (rename them, copy -them, and so on) have been generalized to work on multiple files. -There are also some additional commands in this series. - -All of these commands use the same convention to decide which files to -manipulate: - -- If you give the command a numeric prefix argument @var{n}, it operates -on the next @var{n} files, starting with the current file. - -- Otherwise, if there are marked files, the commands operate on all the -marked files. - -- Otherwise, the command operates on the current file only. - -These are the commands: - -**** `C' copies the specified files. You must specify a directory to -copy into, or (if copying a single file) a new name. - -If `dired-copy-preserve-time' is non-`nil', then copying sets -the modification time of the new file to be the same as that of the old -file. - -**** `R' renames the specified files. You must specify a directory to -rename into, or (if renaming a single file) a new name. - -Dired automatically changes the visited file name of buffers associated -with renamed files so that they refer to the new names. - -**** `H' makes hard links to the specified files. You must specify a -directory to make the links in, or (if making just one link) the name -to give the link. - -**** `S' makes symbolic links to the specified files. You must specify -a directory to make the links in, or (if making just one link) the -name to give the link. - -**** `M' changes the mode of the specified files. This calls the -`chmod' program, so you can describe the desired mode change with any -argument that `chmod' would handle. - -**** `G' changes the group of the specified files. - -**** `O' changes the owner of the specified files. (On normal systems, -only the superuser can do this.) - -The variable `dired-chown-program' specifies the name of the -program to use to do the work (different systems put `chown' in -different places. - -**** `Z' compresses or uncompresses the specified files. - -**** `L' loads the specified Emacs Lisp files. - -**** `B' byte compiles the specified Emacs Lisp files. - -**** `P' prints the specified files. It uses the variables -`lpr-command' and `lpr-switches' just as `lpr-file' does. - -*** Shell Commands in Dired - -`!' reads a shell command string in the minibuffer and runs the shell -command on all the specified files. There are two ways of applying a -shell command to multiple files: - -- If you use `*' in the command, then the shell command runs just -once, with the list of file names substituted for the `*'. - -Thus, `! tar cf foo.tar * RET' runs `tar' on the entire list of file -names, putting them into one tar file `foo.tar'. The file names are -inserted in the order that they appear in the Dired buffer. - -- If the command string doesn't contain `*', then it runs once for -each file, with the file name attached at the end. For example, `! -uudecode RET' runs `uudecode' on each file. - -To run the shell command once for each file but without being limited -to putting the file name inserted in the middle, use a shell loop. -For example, this shell command would run `uuencode' on each of the -specified files, writing the output into a corresponding `.uu' file: - - for file in *; uuencode $file $file >$file.uu; done - -The working directory for the shell command is the top level directory -of the Dired buffer. - -*** Regular Expression File Name Substitution - -**** `% m REGEXP RET' marks all files whose names match the regular -expression REGEXP. - -Only the non-directory part of the file name is used in matching. Use -`^' and `$' to anchor matches. Exclude subdirs by hiding them. - -**** `% d REGEXP RET' flags for deletion all files whose names match -the regular expression REGEXP. - -**** `% R', `% C', `% H', `% S' - -These four commands rename, copy, make hard links and make soft links, -in each case computing the new name by regular expression substitution -from the name of the old file. They effectively perform -`query-replace-regexp' on the selected file names in the Dired buffer. - -The commands read two arguments: a regular expression, and a -substitution pattern. Each selected file name is matched against the -regular expression, and then the part which matched is replaced with -the substitution pattern. You can use `\&' and `\DIGIT' in the -substitution pattern to refer to all or part of the old file name. - -If the regular expression matches more than once in a file name, -only the first match is replaced. - -Normally, the replacement process does not consider the directory names; -it operates on the file name within the directory. If you specify a -prefix argument of zero, then replacement affects entire file name. - -To apply the command to all files matching the same regexp that you -use in the command, mark those files with `% m REGEXP RET', then use -the same regular expression in `% R'. To make this easier, `% R' uses -as a default the last regular expression specified in a `%' command. - -*** Dired Case Conversion - -**** `% u' renames each of the selected files to an upper case name. - -**** `% l' renames each of the selected files to a lower case name. - -*** File Comparison with Dired - -**** `=' compares the current file with another file (the file at the -mark), by running the `diff' program. The file at the mark is given -to `diff' first. - -**** `M-=' compares the current file with its backup file. If there -are several numerical backups, it uses the most recent one. If this -file is a backup, it is compared with its original. - -The backup file is the first file given to `diff'. - -*** Subdirectories in Dired - -You can display more than one directory in one Dired buffer. -The simplest way to do this is to specify the options `-lR' for -running `ls'. That produces a recursive directory listing showing -all subdirectories, all within the same Dired buffer. - -You can also insert the contents of a particular subdirectory with the -`i' command. Use this command on the line that describes a file which -is a directory. Inserted subdirectory contents follow the top-level -directory of the Dired buffer, just as they do in `ls -lR' output. - -If the subdirectory's contents are already present in the buffer, the -`i' command just moves to it (type `l' to refresh it). It sets the -Emacs mark before moving, so C-x C-x takes you back to the old -position in the buffer. - -When you have subdirectories in the Dired buffer, you can use the page -motion commands C-x [ and C-x ] to move by entire directories. - -The following commands move up and down in the tree of directories -in one Dired buffer: - -**** C-M-u Go up to the parent directory's headerline. - -**** C-M-d Go down in the tree, to the first subdirectory's -headerline. - -**** C-M-n Go to next subdirectory headerline, regardless of level. - -**** C-M-p Go to previous subdirectory headerline, regardless of -level. - -*** Hiding Subdirectories - -"Hiding" a subdirectory means to make it invisible, except for its -headerline. Files inside a hidden subdirectory are never considered -by Dired. For example, the commands to operate on marked files ignore -files in hidden directories even if they are marked. - -**** `$' hides or unhides the current subdirectory and move to next -subdirectory. A prefix argument serves as a repeat count. - -**** `M-$' hides all subdirectories, leaving only their header lines. -Or, if at least one subdirectory is currently hidden, it makes -everything visible again. You can use this command to get an overview -in very deep directory trees or to move quickly to subdirectories far -away. - -*** Editing the Dired Buffer - -**** `l' updates the specified files in a Dired buffer. This means -reading their current status from the file system and changing the -buffer to reflect it properly. - -If you use this command on a subdirectory header line, it updates the -contents of the subdirectory. - -**** `g' updates the entire contents of the Dired buffer. It preserves -all marks except for those on files that have vanished. Hidden -subdirectories are updated but remain hidden. - -**** `k' kills all marked lines (not the files). With a prefix -argument, it kills that many lines starting with the current line. - -This command does not delete files; it just deletes text from the Dired -buffer. - -If you kill the line for a file that is a directory, then its contents -are also deleted from the buffer. Typing `C-u k' on the header line -for a subdirectory is another way to delete a subdirectory from the -Dired buffer. - -*** `find' and Dired. - -To search for files with names matching a wildcard pattern use -`find-name-dired'. Its arguments are DIRECTORY and -PATTERN. It selects all the files in DIRECTORY or its -subdirectories whose own names match PATTERN. - -The files thus selected are displayed in a Dired buffer in which the -ordinary Dired commands are available. - -If you want to test the contents of files, rather than their names, use -`find-grep-dired'. This command takes two minibuffer arguments, -DIRECTORY and REGEXP; it selects all the files in -DIRECTORY or its subdirectories that contain a match for -REGEXP. It works by running `find' and `grep'. - -The most general command in this series is `find-dired', which lets -you specify any condition that `find' can test. It takes two -minibuffer arguments, DIRECTORY and FIND-ARGS; it runs `find' in -DIRECTORY with using FIND-ARGS as the arguments to `find' specifying -which files to accept. To use this command, you need to know how to -use `find'. - -** New amusements and novelties. - -*** `M-x mpuz' displays a multiplication puzzle, in which each letter -stands for a digit, and you must determine which digit. The puzzles -are determined randomly, so they are always different. - -*** `M-x gomoku' plays the game Gomoku with you. It needs more work. - -*** `M-x spook' adds a line of randomly chosen keywords to an outgoing -mail message. The keywords are chosen from a list of words that -suggest you are discussing something subversive. - -The idea is that the NSA reads all messages that contain keywords -suggesting they might be interested, and that adding these lines could -help to overload them. I would guess that they have modified their -program by now to ignore these lines of keywords; perhaps the program -can be updated if some clever hacker can determine what criterion they -actually use now. - -** Installation changes - -*** The configure script has been provided to help with the -installation process. It takes the place of editing the Makefiles and -src/config.h, and can often guess the appropriate operating system to -use for a particular machine type. See INSTALL for a more detailed -description of the steps required for installation. - -*** If you create a Lisp file named `site-start.el', Emacs loads the file -whenever it starts up. - -*** A new Lisp variable, `data-directory', indicates the directory -containing the DOC file, tutorial, copying agreement, and other -familiar `etc' files. The value of `data-directory' is a simple string. -The default should be set at build time, and the person installing -Emacs should place all the data files in this directory. The `help.el' -functions that look for docstrings and information files check this -variable. All Emacs Lisp packages should also be coded so that they -refer to `data-directory' to find data files. - -*** The PURESIZE definition has been moved from config.h to its own -file, puresize.h. Since almost every file of C source in the -distribution depends on config.h, but only alloc.c and data.c depend -on puresize.h, this means that changing the value of PURESIZE causes -only those two files to be recompiled. - -*** The makefile at the top of the Emacs source tree now supports a -`dist' target, which creates a compressed tar file suitable for -distribution, using the contents of the source tree. Object files, -old file versions, executables, DOC files, and other -architecture-specific or easy-to-recreate files are not included in -the tar file. - -* For older news, see the file ONEWS.4. For Lisp changes in (the first -* release of) Emacs 19, see the file LNEWS. - ----------------------------------------------------------------------- -Copyright information: - -Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc. - - Permission is granted to anyone to make or distribute verbatim copies - of this document as received, in any medium, provided that the - copyright notice and this permission notice are preserved, - thus giving the recipient permission to redistribute in turn. - - Permission is granted to distribute modified versions - of this document, or of portions of it, - under the above conditions, provided also that they - carry prominent notices stating who last changed them. - -Local variables: -mode: outline -paragraph-separate: "[ ]*$" -end: - -arch-tag: 944be39b-afe8-4217-9977-c745b68a7ca2 diff -r 86cedfd9ade6 -r 25fa0038a52d etc/ONEWS.1 --- a/etc/ONEWS.1 Sat Jun 03 22:51:32 2006 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1167 +0,0 @@ -Old GNU Emacs NEWS -- history of user-visible changes thru version 15. -Copyright (C) 1985 Richard M. Stallman. -See the end for copying conditions. - -Changes in Emacs 15 - -* Emacs now runs on Sun and Megatest 68000 systems; - also on at least one 16000 system running 4.2. - -* Emacs now alters the output-start and output-stop characters - to prevent C-s and C-q from being considered as flow control - by cretinous rlogin software in 4.2. - -* It is now possible convert Mocklisp code (for Gosling Emacs) to Lisp code - that can run in GNU Emacs. M-x convert-mocklisp-buffer - converts the contents of the current buffer from Mocklisp to - GNU Emacs Lisp. You should then save the converted buffer with C-x C-w - under a name ending in ".el" - - There are probably some Mocklisp constructs that are not handled. - If you encounter one, feel free to report the failure as a bug. - The construct will be handled in a future Emacs release, if that is not - not too hard to do. - - Note that lisp code converted from Mocklisp code will not necessarily - run as fast as code specifically written for GNU Emacs, nor will it use - the many features of GNU Emacs which are not present in Gosling's emacs. - (In particular, the byte-compiler (m-x byte-compile-file) knows little - about compilation of code directly converted from mocklisp.) - It is envisaged that old mocklisp code will be incrementally converted - to GNU lisp code, with M-x convert-mocklisp-buffer being the first - step in this process. - -* Control-x n (narrow-to-region) is now by default a disabled command. - - This means that, if you issue this command, it will ask whether - you really mean it. You have the opportunity to enable the - command permanently at that time, so you will not be asked again. - This will place the form "(put 'narrow-to-region 'disabled nil)" in your - .emacs file. - -* Tags now prompts for the tag table file name to use. - - All the tags commands ask for the tag table file name - if you have not yet specified one. - - Also, the command M-x visit-tag-table can now be used to - specify the tag table file name initially, or to switch - to a new tag table. - -* If truncate-partial-width-windows is non-nil (as it intially is), - all windows less than the full screen width (that is, - made by side-by-side splitting) truncate lines rather than continuing - them. - -* Emacs now checks for Lisp stack overflow to avoid fatal errors. - The depth in eval, apply and funcall may not exceed max-lisp-eval-depth. - The depth in variable bindings and unwind-protects may not exceed - max-specpdl-size. If either limit is exceeded, an error occurs. - You can set the limits to larger values if you wish, but if you make them - too large, you are vulnerable to a fatal error if you invoke - Lisp code that does infinite recursion. - -* New hooks find-file-hook and write-file-hook. - Both of these variables if non-nil should be functions of no arguments. - At the time they are called (current-buffer) will be the buffer being - read or written respectively. - - find-file-hook is called whenever a file is read into its own buffer, - such as by calling find-file, revert-buffer, etc. It is not called by - functions such as insert-file which do not read the file into a buffer of - its own. - find-file-hook is called after the file has been read in and its - local variables (if any) have been processed. - - write-file-hook is called just before writing out a file from a buffer. - -* The initial value of shell-prompt-pattern is now "^[^#$%>]*[#$%>] *" - -* If the .emacs file sets inhibit-startup-message to non-nil, - the messages normally printed by Emacs at startup time - are inhibited. - -* Facility for run-time conditionalization on the basis of emacs features. - - The new variable features is a list of symbols which represent "features" - of the executing emacs, for use in run-time conditionalization. - - The function featurep of one argument may be used to test for the - presence of a feature. It is just the same as - (not (null (memq FEATURE features))) where FEATURE is its argument. - For example, (if (featurep 'magic-window-hack) - (transmogrify-window 'vertical) - (split-window-vertically)) - - The function provide of one argument "announces" that FEATURE is present. - It is much the same as (if (not (featurep FEATURE)) - (setq features (cons FEATURE features))) - - The function require with arguments FEATURE and FILE-NAME loads FILE-NAME - (which should contain the form (provide FEATURE)) unless FEATURE is present. - It is much the same as (if (not (featurep FEATURE)) - (progn (load FILE-NAME) - (if (not featurep FEATURE) (error ...)))) - FILE-NAME is optional and defaults to FEATURE. - -* New function load-average. - - This returns a list of three integers, which are - the current 1 minute, 5 minute and 15 minute load averages, - each multiplied by a hundred (since normally they are floating - point numbers). - -* Per-terminal libraries loaded automatically. - - Emacs when starting up on terminal type T automatically loads - a library named term-T. T is the value of the TERM environment variable. - Thus, on terminal type vt100, Emacs would do (load "term-vt100" t t). - Such libraries are good places to set the character translation table. - - It is a bad idea to redefine lots of commands in a per-terminal library, - since this affects all users. Instead, define a command to do the - redefinitions and let the user's init file, which is loaded later, - call that command or not, as the user prefers. - -* Programmer's note: detecting killed buffers. - - Buffers are eliminated by explicitly killing them, using - the function kill-buffer. This does not eliminate or affect - the pointers to the buffer which may exist in list structure. - If you have a pointer to a buffer and wish to tell whether - the buffer has been killed, use the function buffer-name. - It returns nil on a killed buffer, and a string on a live buffer. - -* New ways to access the last command input character. - - The function last-key-struck, which used to return the last - input character that was read by command input, is eliminated. - Instead, you can find this information as the value of the - variable last-command-char. (This variable used to be called - last-key). - - Another new variable, last-input-char, holds the last character - read from the command input stream regardless of what it was - read for. last-input-char and last-command-char are different - only inside a command that has called read-char to read input. - -* The new switch -kill causes Emacs to exit after processing the - preceding command line arguments. Thus, - emacs -l lib data -e do-it -kill - means to load lib, find file data, call do-it on no arguments, - and then exit. - -* The config.h file has been modularized. - - Options that depend on the machine you are running on are defined - in a file whose name starts with "m-", such as m-vax.h. - Options that depend on the operating system software version you are - running on are defined in a file whose name starts with "s-", - such as s-bsd4.2.h. - - config.h includes one m- file and one s- file. It also defines a - few other options whose values do not follow from the machine type - and system type being used. Installers normally will have to - select the correct m- and s- files but will never have to change their - contents. - -* Termcap AL and DL strings are understood. - - If the termcap entry defines AL and DL strings, for insertion - and deletion of multiple lines in one blow, Emacs now uses them. - This matters most on certain bit map display terminals for which - scrolling is comparatively slow. - -* Bias against scrolling screen far on fast terminals. - - Emacs now prefers to redraw a few lines rather than - shift them a long distance on the screen, when the terminal is fast. - -* New major mode, mim-mode. - - This major mode is for editing MDL code. Perhaps a MDL - user can explain why it is not called mdl-mode. - You must load the library mim-mode explicitly to use this. - -* GNU documentation formatter `texinfo'. - - The `texinfo' library defines a format for documentation - files which can be passed through Tex to make a printed manual - or passed through texinfo to make an Info file. Texinfo is - documented fully by its own Info file; compare this file - with its source, texinfo.texinfo, for additional guidance. - - All documentation files for GNU utilities should be written - in texinfo input format. - - Tex processing of texinfo files requires the Botex macro package. - This is not ready for distribution yet, but will appear at - a later time. - -* New function read-from-string (emacs 15.29) - - read-from-string takes three arguments: a string to read from, - and optionally start and end indices which delimit a substring - from which to read. (They default to 0 and the length of the string, - respectively.) - - This function returns a cons cell whose car is the object produced - by reading from the string and whose cdr is a number giving the - index in the string of the first character not read. That index may - be passed as the second argument to a later call to read-from-string - to read the next form represented by the string. - - In addition, the function read now accepts a string as its argument. - In this case, it calls read-from-string on the whole string, and - returns the car of the result. (ie the actual object read.) - -Changes in Emacs 14 - -* Completion now prints various messages such as [Sole Completion] - or [Next Character Not Unique] to describe the results obtained. - These messages appear after the text in the minibuffer, and remain - on the screen until a few seconds go by or you type a key. - -* The buffer-read-only flag is implemented. - Setting or binding this per-buffer variable to a non-nil value - makes illegal any operation which would modify the textual content of - the buffer. (Such operations signal a buffer-read-only error) - The read-only state of a buffer may be altered using toggle-read-only - (C-x C-q) - The buffers used by Rmail, Dired, Rnews, and Info are now read-only - by default to prevent accidental damage to the information in those - buffers. - -* Functions car-safe and cdr-safe. - These functions are like car and cdr when the argument is a cons. - Given an argument not a cons, car-safe always returns nil, with - no error; the same for cdr-safe. - -* The new function user-real-login-name returns the name corresponding - to the real uid of the Emacs process. This is usually the same - as what user-login-name returns; however, when Emacs is invoked - from su, user-real-login-name returns "root" but user-login-name - returns the name of the user who invoked su. - -Changes in Emacs 13 - -* There is a new version numbering scheme. - - What used to be the first version number, which was 1, - has been discarded since it does not seem that I need three - levels of version number. - - However, a new third version number has been added to represent - changes by user sites. This number will always be zero in - Emacs when I distribute it; it will be incremented each time - Emacs is built at another site. - -* There is now a reader syntax for Meta characters: - \M-CHAR means CHAR or'ed with the Meta bit. For example: - - ?\M-x is (+ ?x 128) - ?\M-\n is (+ ?\n 128) - ?\M-\^f is (+ ?\^f 128) - - This syntax can be used in strings too. Note, however, that - Meta characters are not meaningful in key sequences being passed - to define-key or lookup-key; you must use ESC characters (\e) - in them instead. - - ?\C- can be used likewise for control characters. (13.9) - -* Installation change - The string "../lisp" now adds to the front of the load-path - used for searching for Lisp files during Emacs initialization. - It used to replace the path specified in paths.h entirely. - Now the directory ../lisp is searched first and the directoris - specified in paths.h are searched afterward. - -Changes in Emacs 1.12 - -* There is a new installation procedure. - See the file INSTALL that comes in the top level - directory in the tar file or tape. - -* The Meta key is now supported on terminals that have it. - This is a shift key which causes the high bit to be turned on - in all input characters typed while it is held down. - - read-char now returns a value in the range 128-255 if - a Meta character is typed. When interpreted as command - input, a Meta character is equivalent to a two character - sequence, the meta prefix character followed by the un-metized - character (Meta-G unmetized is G). - - The meta prefix character - is specified by the value of the variable meta-prefix-char. - If this character (normally Escape) has been redefined locally - with a non-prefix definition (such as happens in completing - minibuffers) then the local redefinition is suppressed when - the character is not the last one in a key sequence. - So the local redefinition is effective if you type the character - explicitly, but not effective if the character comes from - the use of the Meta key. - -* `-' is no longer a completion command in the minibuffer. - It is an ordinary self-inserting character. - -* The list load-path of directories load to search for Lisp files - is now controlled by the EMACSLOADPATH environment variable -[[ Note this was originally EMACS-LOAD-PATH and has been changed - again; sh does not deal properly with hyphens in env variable names]] - rather than the EPATH environment variable. This is to avoid - conflicts with other Emacses. - - While Emacs is being built initially, the load-path - is now just ("../lisp"), ignoring paths.h. It does not - ignore EMACSLOADPATH, however; you should avoid having - this variable set while building Emacs. - -* You can now specify a translation table for keyboard - input characters, as a way of exchanging or substituting - keys on the keyboard. - - If the value of keyboard-translate-table is a string, - every character received from the keyboard is used as an - index in that string, and the character at that index in - the string is used as input instead of what was actually - typed. If the actual input character is >= the length of - the string, it is used unchanged. - - One way this feature can be used is to fix bad keyboard - designes. For example, on some terminals, Delete is - Shift-Underscore. Since Delete is a more useful character - than Underscore, it is an improvement to make the unshifted - character Delete and the shifted one Underscore. This can - be done with - - ;; First make a translate table that does the identity translation. - (setq keyboard-translate-table (make-string 128 0)) - (let ((i 0)) - (while (< i 128) - (aset keyboard-translate-table i i) - (setq i (1+ i)))) - - ;; Now alter translations of some characters. - (aset keyboard-translate-table ?\_ ?\^?) - (aset keyboard-translate-table ?\^? ?\_) - - If your terminal has a Meta key and can therefore send - codes up to 255, Meta characters are translated through - elements 128 through 255 of the translate table, and therefore - are translated independently of the corresponding non-Meta - characters. You must therefore establish translations - independently for the Meta characters if you want them too: - - ;; First make a translate table that does the identity translation. - (setq keyboard-translate-table (make-string 256 0)) - (let ((i 0)) - (while (< i 256) - (aset keyboard-translate-table i i) - (setq i (1+ i)))) - - ;; Now alter translations of some characters. - (aset keyboard-translate-table ?\_ ?\^?) - (aset keyboard-translate-table ?\^? ?\_) - - ;; Now alter translations of some Meta characters. - (aset keyboard-translate-table (+ 128 ?\_) (+ 128 ?\^?)) - (aset keyboard-translate-table (+ 128 ?\^?) (+ 128 ?\_)) - -* (process-kill-without-query PROCESS) - -This marks the process so that, when you kill Emacs, -you will not on its account be queried about active subprocesses. - -Changes in Emacs 1.11 - -* The commands C-c and C-z have been interchanged, - for greater compatibility with normal Unix usage. - C-z now runs suspend-emacs and C-c runs exit-recursive-edit. - -* The value returned by file-name-directory now ends - with a slash. (file-name-directory "foo/bar") => "foo/". - This avoids confusing results when dealing with files - in the root directory. - - The value of the per-buffer variable default-directory - is also supposed to have a final slash now. - -* There are now variables to control the switches passed to - `ls' by the C-x C-d command (list-directory). - list-directory-brief-switches is a string, initially "-CF", - used for brief listings, and list-directory-verbose-switches - is a string, initially "-l", used for verbose ones. - -* For Ann Arbor Ambassador terminals, the termcap "ti" string - is now used to initialize the screen geometry on entry to Emacs, - and the "te" string is used to set it back on exit. - If the termcap entry does not define the "ti" or "te" string, - Emacs does what it used to do. - -Changes in Emacs 1.10 - -* GNU Emacs has been made almost 1/3 smaller. - It now dumps out as only 530kbytes on Vax 4.2bsd. - -* The term "checkpoint" has been replaced by "auto save" - throughout the function names, variable names and documentation - of GNU Emacs. - -* The function load now tries appending ".elc" and ".el" - to the specified filename BEFORE it tries the filename - without change. - -* rmail now makes the mode line display the total number - of messages and the current message number. - The "f" command now means forward a message to another user. - The command to search through all messages for a string is now "F". - The "u" command now means to move back to the previous - message and undelete it. To undelete the selected message, use Meta-u. - -* The hyphen character is now equivalent to a Space while - in completing minibuffers. Both mean to complete an additional word. - -* The Lisp function error now takes args like format - which are used to construct the error message. - -* Redisplay will refuse to start its display at the end of the buffer. - It will pick a new place to display from, rather than use that. - -* The value returned by garbage-collect has been changed. - Its first element is no longer a number but a cons, - whose car is the number of cons cells now in use, - and whose cdr is the number of cons cells that have been - made but are now free. - The second element is similar but describes symbols rather than cons cells. - The third element is similar but describes markers. - -* The variable buffer-name has been eliminated. - The function buffer-name still exists. This is to prevent - user programs from changing buffer names without going - through the rename-buffer function. - -Changes in Emacs 1.9 - -* When a fill prefix is in effect, paragraphs are started - or separated by lines that do not start with the fill prefix. - Also, a line which consists of the fill prefix followed by - white space separates paragraphs. - -* C-x C-v runs the new function find-alternate-file. - It finds the specified file, switches to that buffer, - and kills the previous current buffer. (It requires - confirmation if that buffer had changes.) This is - most useful after you find the wrong file due to a typo. - -* Exiting the minibuffer moves the cursor to column 0, - to show you that it has really been exited. - -* Meta-g (fill-region) now fills each paragraph in the - region individually. To fill the region as if it were - a single paragraph (for when the paragraph-delimiting mechanism - does the wrong thing), use fill-region-as-paragraph. - -* Tab in text mode now runs the function tab-to-tab-stop. - A new mode called indented-text-mode is like text-mode - except that in it Tab runs the function indent-relative, - which indents the line under the previous line. - If auto fill is enabled while in indented-text-mode, - the new lines that it makes are indented. - -* Functions kill-rectangle and yank-rectangle. - kill-rectangle deletes the rectangle specified by dot and mark - (or by two arguments) and saves it in the variable killed-rectangle. - yank-rectangle inserts the rectangle in that variable. - - Tab characters in a rectangle being saved are replaced - by spaces in such a way that their appearance will - not be changed if the rectangle is later reinserted - at a different column position. - -* `+' in a regular expression now means - to repeat the previous expression one or more times. - `?' means to repeat it zero or one time. - They are in all regards like `*' except for the - number of repetitions they match. - - \< in a regular expression now matches the null string - when it is at the beginning of a word; \> matches - the null string at the end of a word. - -* C-x p narrows the buffer so that only the current page - is visible. - -* C-x ) with argument repeats the kbd macro just - defined that many times, counting the definition - as one repetition. - -* C-x ( with argument begins defining a kbd macro - starting with the last one defined. It executes that - previous kbd macro initially, just as if you began - by typing it over again. - -* C-x q command queries the user during kbd macro execution. - With prefix argument, enters recursive edit, - reading keyboard commands even within a kbd macro. - You can give different commands each time the macro executes. - Without prefix argument, reads a character. Your options are: - Space -- execute the rest of the macro. - Delete -- skip the rest of the macro; start next repetition. - C-d -- skip rest of the macro and don't repeat it any more. - C-r -- enter a recursive edit, then on exit ask again for a character - C-l -- redisplay screen and ask again." - -* write-kbd-macro and append-kbd-macro are used to save - a kbd macro definition in a file (as Lisp code to - redefine the macro when the file is loaded). - These commands differ in that write-kbd-macro - discards the previous contents of the file. - If given a prefix argument, both commands - record the keys which invoke the macro as well as the - macro's definition. - -* The variable global-minor-modes is used to display - strings in the mode line of all buffers. It should be - a list of elements thaht are conses whose cdrs are strings - to be displayed. This complements the variable - minor-modes, which has the same effect but has a separate - value in each buffer. - -* C-x = describes horizontal scrolling in effect, if any. - -* Return now auto-fills the line it is ending, in auto fill mode. - Space with zero as argument auto-fills the line before it - just like Space without an argument. - -Changes in Emacs 1.8 - -This release mostly fixes bugs. There are a few new features: - -* apropos now sorts the symbols before displaying them. - Also, it returns a list of the symbols found. - - apropos now accepts a second arg PRED which should be a function - of one argument; if PRED is non-nil, each symbol is tested - with PRED and only symbols for which PRED returns non-nil - appear in the output or the returned list. - - If the third argument to apropos is non-nil, apropos does not - display anything; it merely returns the list of symbols found. - - C-h a now runs the new function command-apropos rather than - apropos, and shows only symbols with definitions as commands. - -* M-x shell sends the command - if (-f ~/.emacs_NAME)source ~/.emacs_NAME - invisibly to the shell when it starts. Here NAME - is replaced by the name of shell used, - as it came from your ESHELL or SHELL environment variable - but with directory name, if any, removed. - -* M-, now runs the command tags-loop-continue, which is used - to resume a terminated tags-search or tags-query-replace. - -Changes in Emacs 1.7 - -It's Beat CCA Week. - -* The initial buffer is now called "*scratch*" instead of "scratch", - so that all buffer names used automatically by Emacs now have *'s. - -* Undo information is now stored separately for each buffer. - The Undo command (C-x u) always applies to the current - buffer only. - - C-_ is now a synonym for C-x u. - - (buffer-flush-undo BUFFER) causes undo information not to - be kept for BUFFER, and frees the space that would have - been used to hold it. In any case, no undo information is - kept for buffers whose names start with spaces. (These - buffers also do not appear in the C-x C-b display.) - -* Rectangle operations are now implemented. - C-x r stores the rectangle described by dot and mark - into a register; it reads the register name from the keyboard. - C-x g, the command to insert the contents of a register, - can be used to reinsert the rectangle elsewhere. - - Other rectangle commands include - open-rectangle: - insert a blank rectangle in the position and size - described by dot and mark, at its corners; - the existing text is pushed to the right. - clear-rectangle: - replace the rectangle described by dot ane mark - with blanks. The previous text is deleted. - delete-rectangle: - delete the text of the specified rectangle, - moving the text beyond it on each line leftward. - -* Side-by-side windows are allowed. Use C-x 5 to split the - current window into two windows side by side. - C-x } makes the selected window ARG columns wider at the - expense of the windows at its sides. C-x { makes the selected - window ARG columns narrower. An argument to C-x 5 specifies - how many columns to give to the leftmost of the two windows made. - - C-x 2 now accepts a numeric argument to specify the number of - lines to give to the uppermost of the two windows it makes. - -* Horizontal scrolling of the lines in a window is now implemented. - C-x < (scroll-left) scrolls all displayed lines left, - with the numeric argument (default 1) saying how far to scroll. - When the window is scrolled left, some amount of the beginning - of each nonempty line is replaced by an "$". - C-x > scrolls right. If a window has no text hidden at the left - margin, it cannot be scrolled any farther right than that. - When nonzero leftwards scrolling is in effect in a window. - lines are automatically truncated at the window's right margin - regardless of the value of the variable truncate-lines in the - buffer being displayed. - -* C-x C-d now uses the default output format of `ls', - which gives just file names in multiple columns. - C-u C-x C-d passes the -l switch to `ls'. - -* C-t at the end of a line now exchanges the two preceding characters. - - All the transpose commands now interpret zero as an argument - to mean to transpose the textual unit after or around dot - with the one after or around the mark. - -* M-! executes a shell command in an inferior shell - and displays the output from it. With a prefix argument, - it inserts the output in the current buffer after dot - and sets the mark after the output. The shell command - gets /dev/null as its standard input. - - M-| is like M-! but passes the contents of the region - as input to the shell command. A prefix argument makes - the output from the command replace the contents of the region. - -* The mode line will now say "Def" after the major mode - while a keyboard macro is being defined. - -* The variable fill-prefix is now used by Meta-q. - Meta-q removes the fill prefix from lines that start with it - before filling, and inserts the fill prefix on each line - after filling. - - The command C-x . sets the fill prefix equal to the text - on the current line before dot. - -* The new command Meta-j (indent-new-comment-line), - is like Linefeed (indent-new-line) except when dot is inside a comment; - in that case, Meta-j inserts a comment starter on the new line, - indented under the comment starter above. It also inserts - a comment terminator at the end of the line above, - if the language being edited calls for one. - -* Rmail should work correctly now, and has some C-h m documentation. - -Changes in Emacs 1.6 - -* save-buffers-kill-emacs is now on C-x C-c - while C-x C-z does suspend-emacs. This is to make - C-x C-c like the normal Unix meaning of C-c - and C-x C-z linke the normal Unix meaning of C-z. - -* M-ESC (eval-expression) is now a disabled command by default. - This prevents users who type ESC ESC accidentally from - getting confusing results. Put - (put 'eval-expression 'disabled nil) - in your ~/.emacs file to enable the command. - -* Self-inserting text is grouped into bunches for undoing. - Each C-x u command undoes up to 20 consecutive self-inserting - characters. - -* Help f now uses as a default the function being called - in the innermost Lisp expression that dot is in. - This makes it more convenient to use while writing - Lisp code to run in Emacs. - (If the text around dot does not appear to be a call - to a Lisp function, there is no default.) - - Likewise, Help v uses the symbol around or before dot - as a default, if that is a variable name. - -* Commands that read filenames now insert the default - directory in the minibuffer, to become part of your input. - This allows you to see what the default is. - You may type a filename which goes at the end of the - default directory, or you may edit the default directory - as you like to create the input you want to give. - You may also type an absolute pathname (starting with /) - or refer to a home directory (input starting with ~) - after the default; the presence of // or /~ causes - everything up through the slash that precedes your - type-in to be ignored. - - Returning the default directory without change, - including the terminating slash, requests the use - of the default file name (usually the visited file's name). - - Set the variable insert-default-directory to nil - to turn off this feature. - -* M-x shell now uses the environment variable ESHELL, - if it exists, as the file name of the shell to run. - If there is no ESHELL variable, the SHELL variable is used. - This is because some shells do not work properly as inferiors - of Emacs (or anything like Emacs). - -* A new variable minor-modes now exists, with a separate value - in each buffer. Its value should be an alist of elements - (MODE-FUNCTION-SYMBOL . PRETTY-NAME-STRING), one for each - minor mode that is turned on in the buffer. The pretty - name strings are displayed in the mode line after the name of the - major mode (with spaces between them). The mode function - symbols should be symbols whose function definitions will - turn on the minor mode if given 1 as an argument; they are present - so that Help m can find their documentation strings. - -* The format of tag table files has been changed. - The new format enables Emacs to find tags much faster. - - A new program, etags, exists to make the kind of - tag table that Emacs wants. etags is invoked just - like ctags; in fact, if you give it any switches, - it does exactly what ctags would do. Give it the - empty switch ("-") to make it act like ctags with no switches. - - etags names the tag table file "TAGS" rather than "tags", - so that these tag tables and the standard Unix ones - can coexist. - - The tags library can no longer use standard ctags-style - tag tables files. - -* The file of Lisp code Emacs reads on startup is now - called ~/.emacs rather than ~/.emacs_pro. - -* copy-file now gives the copied file the same mode bits - as the original file. - -* Output from a process inserted into the process's buffer - no longer sets the buffer's mark. Instead it sets a - marker associated with the process to point to the end - of the inserted text. You can access this marker with - (process-mark PROCESS) - and then either examine its position with marker-position - or set its position with set-marker. - -* completing-read takes a new optional fifth argument which, - if non-nil, should be a string of text to insert into - the minibuffer before reading user commands. - -* The Lisp function elt now exists: - (elt ARRAY N) is like (aref ARRAY N), - (elt LIST N) is like (nth N LIST). - -* rplaca is now a synonym for setcar, and rplacd for setcdr. - eql is now a synonym for eq; it turns out that the Common Lisp - distinction between eq and eql is insignificant in Emacs. - numberp is a new synonym for integerp. - -* auto-save has been renamed to auto-save-mode. - -* Auto save file names for buffers are now created by the - function make-auto-save-file-name. This is so you can - redefine that function to change the way auto save file names - are chosen. - -* expand-file-name no longer discards a final slash. - (expand-file-name "foo" "/lose") => "/lose/foo" - (expand-file-name "foo/" "/lose") => "/lose/foo/" - - Also, expand-file-name no longer substitutes $ constructs. - A new function substitute-in-file-name does this. Reading - a file name with read-file-name or the `f' or`F' option - of interactive calling uses substitute-in-file-name - on the file name that was read and returns the result. - - All I/O primitives including insert-file-contents and - delete-file call expand-file-name on the file name supplied. - This change makes them considerably faster in the usual case. - -* Interactive calling spec strings allow the new code letter 'D' - which means to read a directory name. It is like 'f' except - that the default if the user makes no change in the minibuffer - is to return the current default directory rather than the - current visited file name. - -Changes in Emacs 1.5 - -* suspend-emacs now accepts an optional argument - which is a string to be stuffed as terminal input - to be read by Emacs's superior shell after Emacs exits. - - A library called ledit exists which uses this feature - to transmit text to a Lisp job running as a sibling of - Emacs. - -* If find-file is given the name of a directory, - it automatically invokes dired on that directory - rather than reading in the binary data that make up - the actual contents of the directory according to Unix. - -* Saving an Emacs buffer now preserves the file modes - of any previously existing file with the same name. - This works using new Lisp functions file-modes and - set-file-modes, which can be used to read or set the mode - bits of any file. - -* The Lisp function cond now exists, with its traditional meaning. - -* defvar and defconst now permit the documentation string - to be omitted. defvar also permits the initial value - to be omitted; then it acts only as a comment. - -Changes in Emacs 1.4 - -* Auto-filling now normally indents the new line it creates - by calling indent-according-to-mode. This function, meanwhile, - has in Fundamental and Text modes the effect of making the line - have an indentation of the value of left-margin, a per-buffer variable. - - Tab no longer precisely does indent-according-to-mode; - it does that in all modes that supply their own indentation routine, - but in Fundamental, Text and allied modes it inserts a tab character. - -* The command M-x grep now invokes grep (on arguments - supplied by the user) and reads the output from grep - asynchronously into a buffer. The command C-x ` can - be used to move to the lines that grep has found. - This is an adaptation of the mechanism used for - running compilations and finding the loci of error messages. - - You can now use C-x ` even while grep or compilation - is proceeding; as more matches or error messages arrive, - C-x ` will parse them and be able to find them. - -* M-x mail now provides a command to send the message - and "exit"--that is, return to the previously selected - buffer. It is C-z C-z. - -* Tab in C mode now tries harder to adapt to all indentation styles. - If the line being indented is a statement that is not the first - one in the containing compound-statement, it is aligned under - the beginning of the first statement. - -* The functions screen-width and screen-height return the - total width and height of the screen as it is now being used. - set-screen-width and set-screen-height tell Emacs how big - to assume the screen is; they each take one argument, - an integer. - -* The Lisp function 'function' now exists. function is the - same as quote, except that it serves as a signal to the - Lisp compiler that the argument should be compiled as - a function. Example: - (mapcar (function (lambda (x) (+ x 5))) list) - -* The function set-key has been renamed to global-set-key. - undefine-key and local-undefine-key has been renamed to - global-unset-key and local-unset-key. - -* Emacs now collects input from asynchronous subprocesses - while waiting in the functions sleep-for and sit-for. - -* Shell mode's Newline command attempts to distinguish subshell - prompts from user input when issued in the middle of the buffer. - It no longer reexecutes from dot to the end of the line; - it reeexecutes the entire line minus any prompt. - The prompt is recognized by searching for the value of - shell-prompt-pattern, starting from the beginning of the line. - Anything thus skipped is not reexecuted. - -Changes in Emacs 1.3 - -* An undo facility exists now. Type C-x u to undo a batch of - changes (usually one command's changes, but some commands - such as query-replace divide their changes into multiple - batches. You can repeat C-x u to undo further. As long - as no commands other than C-x u intervene, each one undoes - another batch. A numeric argument to C-x u acts as a repeat - count. - - If you keep on undoing, eventually you may be told that - you have used up all the recorded undo information. - Some actions, such as reading in files, discard all - undo information. - - The undo information is not currently stored separately - for each buffer, so it is mainly good if you do something - totally spastic. [This has since been fixed.] - -* A learn-by-doing tutorial introduction to Emacs now exists. - Type C-h t to enter it. - -* An Info documentation browser exists. Do M-x info to enter it. - It contains a tutorial introduction so that no more documentation - is needed here. As of now, the only documentation in it - is that of Info itself. - -* Help k and Help c are now different. Help c prints just the - name of the function which the specified key invokes. Help k - prints the documentation of the function as well. - -* A document of the differences between GNU Emacs and Twenex Emacs - now exists. It is called DIFF, in the same directory as this file. - -* C mode can now indent comments better, including multi-line ones. - Meta-Control-q now reindents comment lines within the expression - being aligned. - -* Insertion of a close-parenthesis now shows the matching open-parenthesis - even if it is off screen, by printing the text following it on its line - in the minibuffer. - -* A file can now contain a list of local variable values - to be in effect when the file is edited. See the file DIFF - in the same directory as this file for full details. - -* A function nth is defined. It means the same thing as in Common Lisp. - -* The function install-command has been renamed to set-key. - It now takes the key sequence as the first argument - and the definition for it as the second argument. - Likewise, local-install-command has been renamed to local-set-key. - -Changes in Emacs 1.2 - -* A Lisp single-stepping and debugging facility exists. - To cause the debugger to be entered when an error - occurs, set the variable debug-on-error non-nil. - - To cause the debugger to be entered whenever function foo - is called, do (debug-on-entry 'foo). To cancel this, - do (cancel-debug-on-entry 'foo). debug-on-entry does - not work for primitives (written in C), only functions - written in Lisp. Most standard Emacs commands are in Lisp. - - When the debugger is entered, the selected window shows - a buffer called " *Backtrace" which displays a series - of stack frames, most recently entered first. For each - frame, the function name called is shown, usually followed - by the argument values unless arguments are still being - calculated. At the beginning of the buffer is a description - of why the debugger was entered: function entry, function exit, - error, or simply that the user called the function `debug'. - - To exit the debugger and return to top level, type `q'. - - In the debugger, you can evaluate Lisp expressions by - typing `e'. This is equivalent to `M-ESC'. - - When the debugger is entered due to an error, that is - all you can do. When it is entered due to function entry - (such as, requested by debug-on-entry), you have two - options: - Continue execution and reenter debugger after the - completion of the function being entered. Type `c'. - Continue execution but enter the debugger before - the next subexpression. Type `d'. - - You will see that some stack frames are marked with *. - This means the debugger will be entered when those - frames exit. You will see the value being returned - in the first line of the backtrace buffer. Your options: - Continue execution, and return that value. Type `c'. - Continue execution, and return a specified value. Type `r'. - - You can mark a frame to enter the debugger on exit - with the `b' command, or clear such a mark with `u'. - -* Lisp macros now exist. - For example, you can write - (defmacro cadr (arg) (list 'car (list 'cdr arg))) - and then the expression - (cadr foo) - will expand into - (car (cdr foo)) - -Changes in Emacs 1.1 - -* The initial buffer is now called "scratch" and is in a - new major mode, Lisp Interaction mode. This mode is - intended for typing Lisp expressions, evaluating them, - and having the values printed into the buffer. - - Type Linefeed after a Lisp expression, to evaluate the - expression and have its value printed into the buffer, - advancing dot. - - The other commands of Lisp mode are available. - -* The C-x C-e command for evaluating the Lisp expression - before dot has been changed to print the value in the - minibuffer line rather than insert it in the buffer. - A numeric argument causes the printed value to appear - in the buffer instead. - -* In Lisp mode, the command M-C-x evaluates the defun - containing or following dot. The value is printed in - the minibuffer. - -* The value of a Lisp expression evaluated using M-ESC - is now printed in the minibuffer. - -* M-q now runs fill-paragraph, independent of major mode. - -* C-h m now prints documentation on the current buffer's - major mode. What it prints is the documentation of the - major mode name as a function. All major modes have been - equipped with documentation that describes all commands - peculiar to the major mode, for this purpose. - -* You can display a Unix manual entry with - the M-x manual-entry command. - -* You can run a shell, displaying its output in a buffer, - with the M-x shell command. The Return key sends input - to the subshell. Output is printed inserted automatically - in the buffer. Commands C-c, C-d, C-u, C-w and C-z are redefined - for controlling the subshell and its subjobs. - "cd", "pushd" and "popd" commands are recognized as you - enter them, so that the default directory of the Emacs buffer - always remains the same as that of the subshell. - -* C-x $ (that's a real dollar sign) controls line-hiding based - on indentation. With a numeric arg N > 0, it causes all lines - indented by N or more columns to become invisible. - They are, effectively, tacked onto the preceding line, where - they are represented by " ..." on the screen. - (The end of the preceding visible line corresponds to a - screen cursor position before the "...". Anywhere in the - invisible lines that follow appears on the screen as a cursor - position after the "...".) - Currently, all editing commands treat invisible lines just - like visible ones, except for C-n and C-p, which have special - code to count visible lines only. - C-x $ with no argument turns off this mode, which in any case - is remembered separately for each buffer. - -* Outline mode is another form of selective display. - It is a major mode invoked with M-x outline-mode. - It is intended for editing files that are structured as - outlines, with heading lines (lines that begin with one - or more asterisks) and text lines (all other lines). - The number of asterisks in a heading line are its level; - the subheadings of a heading line are all following heading - lines at higher levels, until but not including the next - heading line at the same or a lower level, regardless - of intervening text lines. - - In outline mode, you have commands to hide (remove from display) - or show the text or subheadings under each heading line - independently. Hidden text or subheadings are invisibly - attached to the end of the preceding heading line, so that - if you kill the hading line and yank it back elsewhere - all the invisible lines accompany it. - - All editing commands treat hidden outline-mode lines - as part of the preceding visible line. - -* C-x C-z runs save-buffers-kill-emacs - offers to save each file buffer, then exits. - -* C-c's function is now called suspend-emacs. - -* The command C-x m runs mail, which switches to a buffer *mail* - and lets you compose a message to send. C-x 4 m runs mail in - another window. Type C-z C-s in the mail buffer to send the - message according to what you have entered in the buffer. - - You must separate the headers from the message text with - an empty line. - -* You can now dired partial directories (specified with names - containing *'s, etc, all processed by the shell). Also, you - can dired more than one directory; dired names the buffer - according to the filespec or directory name. Reinvoking - dired on a directory already direded just switches back to - the same directory used last time; do M-x revert if you want - to read in the current contents of the directory. - - C-x d runs dired, and C-x 4 d runs dired in another window. - - C-x C-d (list-directory) also allows partial directories now. - -Lisp programming changes - -* t as an output stream now means "print to the minibuffer". - If there is already text in the minibuffer printed via t - as an output stream, the new text is appended to the old - (or is truncated and lost at the margin). If the minibuffer - contains text put there for some other reason, it is cleared - first. - - t is now the top-level value of standard-output. - - t as an input stream now means "read via the minibuffer". - The minibuffer is used to read a line of input, with editing, - and this line is then parsed. Any excess not used by `read' - is ignored; each `read' from t reads fresh input. - t is now the top-level value of standard-input. - -* A marker may be used as an input stream or an output stream. - The effect is to grab input from where the marker points, - advancing it over the characters read, or to insert output - at the marker and advance it. - -* Output from an asynchronous subprocess is now inserted at - the end of the associated buffer, not at the buffer's dot, - and the buffer's mark is set to the end of the inserted output - each time output is inserted. - -* (pos-visible-in-window-p POS WINDOW) - returns t if position POS in WINDOW's buffer is in the range - that is being displayed in WINDOW; nil if it is scrolled - vertically out of visibility. - - If display in WINDOW is not currently up to date, this function - calculates carefully whether POS would appear if display were - done immediately based on the current (window-start WINDOW). - - POS defaults to (dot), and WINDOW to (selected-window). - -* Variable buffer-alist replaced by function (buffer-list). - The actual alist of buffers used internally by Emacs is now - no longer accessible, to prevent the user from crashing Emacs - by modifying it. The function buffer-list returns a list - of all existing buffers. Modifying this list cannot hurt anything - as a new list is constructed by each call to buffer-list. - -* load now takes an optional third argument NOMSG which, if non-nil, - prevents load from printing a message when it starts and when - it is done. - -* byte-recompile-directory is a new function which finds all - the .elc files in a directory, and regenerates each one which - is older than the corresponding .el (Lisp source) file. - ----------------------------------------------------------------------- -Copyright information: - -Copyright (C) 1985 Richard M. Stallman - - Permission is granted to anyone to make or distribute verbatim copies - of this document as received, in any medium, provided that the - copyright notice and this permission notice are preserved, - thus giving the recipient permission to redistribute in turn. - - Permission is granted to distribute modified versions - of this document, or of portions of it, - under the above conditions, provided also that they - carry prominent notices stating who last changed them. - -Local variables: -mode: text -end: - -arch-tag: c006f958-d769-44c7-a9f4-e2faf070624d diff -r 86cedfd9ade6 -r 25fa0038a52d etc/ONEWS.2 --- a/etc/ONEWS.2 Sat Jun 03 22:51:32 2006 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1350 +0,0 @@ -GNU Emacs NEWS -- history of user-visible changes. 26-Mar-1986 -Copyright (C) 1986 Richard M. Stallman. -See the end for copying conditions. - -For older news, see the file ONEWS.1. - -Changes in Emacs 17 - -* Frustrated? - -Try M-x doctor. - -* Bored? - -Try M-x hanoi. - -* Brain-damaged? - -Try M-x yow. - -* Sun3, Tahoe, Apollo, HP9000s300, Celerity, NCR Tower 32, - Sequent, Stride, Encore, Plexus and AT&T 7300 machines supported. - -The Tahoe, Sun3, Sequent and Celerity use 4.2. In regard to the -Apollo, see the file APOLLO in this directory. NCR Tower32, -HP9000s300, Stride and Nu run forms of System V. System V rel 2 also -works on Vaxes now. See etc/MACHINES. - -* System V Unix supported, including subprocesses. - -It should be possible now to bring up Emacs on a machine running -mere unameliorated system V Unix with no major work; just possible bug -fixes. But you can expect to find a handful of those on any machine -that Emacs has not been run on before. - -* Berkeley 4.1 Unix supported. - -See etc/MACHINES. - -* Portable `alloca' provided. - -Emacs can now run on machines that do not and cannot support the library -subroutine `alloca' in the canonical fashion, using an `alloca' emulation -written in C. - -* On-line manual. - -Info now contains an Emacs manual, with essentially the same text -as in the printed manual. - -The manual can now be printed with a standard TeX. - -Nicely typeset and printed copies of the manual are available -from the Free Software Foundation. - -* Backup file version numbers. - -Emacs now supports version numbers in backup files. - -The first time you save a particular file in one editing session, -the old file is copied or renamed to serve as a backup file. -In the past, the name for the backup file was made by appending `~' -to the end of the original file name. - -Now the backup file name can instead be made by appending ".~NN~" to -the original file name, where NN stands for a numeric version. Each -time this is done, the new version number is one higher than the -highest previously used. - -Thus, the active, current file does not have a version number. -Only the backups have them. - -This feature is controlled by the variable `version-control'. If it -is `nil', as normally, then numbered backups are made only for files -that already have numbered backups. Backup names with just `~' are -used for files that have no numbered backups. - -If `version-control' is `never', then the backup file's name is -made with just `~' in any case. - -If `version-control' is not `nil' or `never', numbered backups are -made unconditionally. - -To prevent unlimited consumption of disk space, Emacs can delete -old backup versions automatically. Generally Emacs keeps the first -few backups and the latest few backups, deleting any in between. -This happens every time a new backup is made. The two variables that -control the deletion are `kept-old-versions' and `kept-new-versions'. -Their values are, respectively, the number of oldest backups to keep -and the number of newest ones to keep, each time a new backup is made. -The value of `kept-new-versions' includes the backup just created. -By default, both values are 2. - -If `trim-versions-without-asking' is non-`nil', the excess middle versions -are deleted without a murmur. If it is `nil', the default, then you -are asked whether the excess middle versions should really be deleted. - -Dired has a new command `.' which marks for deletion all but the latest -and oldest few of every numeric series of backups. `kept-old-versions' -controls the number of oldest versions to keep, and `dired-kept-versions' -controls the number of latest versions to keep. A numeric argument to -the `.' command, if positive, specifies the number of latest versions -to keep, overriding `dired-kept-versions'. A negative argument specifies -the number of oldest versions to keep, using minus the argument to override -`kept-old-versions'. - -* Immediate conflict detection. - -Emacs now locks the files it is modifying, so that if -you start to modify within Emacs a file that is being -modified in another Emacs, you get an immediate warning. - -The warning gives you three choices: -1. Give up, and do not make any changes. -2. Make changes anyway at your own risk. -3. Make changes anyway, and record yourself as - the person locking the file (instead of whoever - was previously recorded.) - -Just visiting a file does not lock it. It is locked -when you try to change the buffer that is visiting the file. -Saving the file unlocks it until you make another change. - -Locking is done by writing a lock file in a special designated -directory. If such a directory is not provided and told to -Emacs as part of configuring it for your machine, the lock feature -is turned off. - -* M-x recover-file. - -This command is used to get a file back from an auto-save -(after a system crash, for example). It takes a file name -as argument and visits that file, but gets the data from the -file's last auto save rather than from the file itself. - -* M-x normal-mode. - -This command resets the current buffer's major mode and local -variables to be as specified by the visit filename, the -*- line -and/or the Local Variables: block at the end of the buffer. -It is the same thing normally done when a file is first visited. - -* Echo area messages disappear shortly if minibuffer is in use. - -Any message in the echo area disappears after 2 seconds -if the minibuffer is active. This allows the minibuffer -to become visible again. - -* C-z on System V runs a subshell. - -On systems which do not allow programs to be suspended, the C-z command -forks a subshell that talks directly to the terminal, and then waits -for the subshell to exit. This gets almost the effect of suspending -in that you can run other programs and then return to Emacs. However, -you cannot log out from the subshell. - -* C-c is always a prefix character. - -Also, subcommands of C-c which are letters are always -reserved for the user. No standard Emacs major mode -defines any of them. - -* Picture mode C-c commands changed. - -The old C-c k command is now C-c C-w. -The old C-c y command is now C-c C-x. - -* Shell mode commands changed. - -All the special commands of Shell mode are now moved onto -the C-c prefix. Most are not changed aside from that. -Thus, the old Shell mode C-c command (kill current job) -is now C-c C-c; the old C-z (suspend current job) is now C-c C-z, -etc. - -The old C-x commands are now C-c commands. C-x C-k (kill output) -is now C-c C-o, and C-x C-v (show output) is now C-c C-r. - -The old M-= (copy previous input) command is now C-c C-y. - -* Shell mode recognizes aliases for `pushd', `popd' and `cd'. - -Shell mode now uses the variable `shell-pushd-regexp' as a -regular expression to recognize any command name that is -equivalent to a `pushd' command. By default it is set up -to recognize just `pushd' itself. If you use aliases for -`pushd', change the regexp to recognize them as well. - -There are also `shell-popd-regexp' to recognize commands -with the effect of a `popd', and `shell-cd-regexp' to recognize -commands with the effect of a `cd'. - -* "Exit" command in certain modes now C-c C-c. - -These include electric buffer menu mode, electric command history -mode, Info node edit mode, and Rmail edit mode. In all these -modes, the command to exit used to be just C-c. - -* Outline mode changes. - -Lines that are not heading lines are now called "body" lines. -The command `hide-text' is renamed to `hide-body'. -The key M-H is renamed to C-c C-h. -The key M-S is renamed to C-c C-s. -The key M-s is renamed to C-c C-i. - -Changes of line visibility are no longer undoable. As a result, -they no longer use up undo memory and no longer interfere with -undoing earlier commands. - -* Rmail changes. - -The s and q commands now both expunge deleted messages before saving; -use C-x C-s to save without expunging. - -The u command now undeletes the current message if it is deleted; -otherwise, it backs up as far as necessary to reach a deleted message, -and undeletes that one. The u command in the summary behaves likewise, -but considers only messages listed in the summary. The M-u command -has been eliminated. - -The o and C-o keys' meanings are interchanged. -o now outputs to an Rmail file, and C-o to a Unix mail file. - -The F command (rmail-find) is renamed to M-s (rmail-search). -Various new commands and features exist; see the Emacs manual. - -* Local bindings described first in describe-bindings. - -* [...], {...} now balance in Fundamental mode. - -* Nroff mode and TeX mode. - -The are two new major modes for editing nroff input and TeX input. -See the Emacs manual for full information. - -* New C indentation style variable `c-brace-imaginary-offset'. - -The value of `c-brace-imaginary-offset', normally zero, controls the -indentation of a statement inside a brace-group where the open-brace -is not the first thing on a line. The value says where the open-brace -is imagined to be, relative to the first nonblank character on the line. - -* Dired improvements. - -Dired now normally keeps the cursor at the beginning of the file name, -not at the beginning of the line. The most used motion commands are -redefined in Dired to position the cursor this way. - -`n' and `p' are now equivalent in dired to `C-n' and `C-p'. - -If any files to be deleted cannot be deleted, their names are -printed in an error message. - -If the `v' command is invoked on a file which is a directory, -dired is run on that directory. - -* `visit-tag-table' renamed `visit-tags-table'. - -This is so apropos of `tags' finds everything you need to -know about in connection with Tags. - -* `mh-e' library uses C-c as prefix. - -All the special commands of `mh-rmail' now are placed on a -C-c prefix rather than on the C-x prefix. This is for -consistency with other special modes with their own commands. - -* M-$ or `spell-word' checks word before point. - -It used to check the word after point. - -* Quitting during autoloading no longer causes trouble. - -Now, when a file is autoloaded, all function redefinitions -and `provide' calls are recorded and are undone if you quit -before the file is finished loading. - -As a result, it no longer happens that some of the entry points -which are normally autoloading have been defined already, but the -entire file is not really present to support them. - -* `else' can now be indented correctly in C mode. - -TAB in C mode now knows which `if' statement an `else' matches -up with, and can indent the `else' correctly under the `if', -even if the `if' contained such things as another `if' statement, -or a `while' or `for' statement, with no braces around it. - -* `batch-byte-compile' - -Runs byte-compile-file on the files specified on the command line. -All the rest of the command line arguments are taken as files to -compile (or, if directories, to do byte-recompile-directory on). -Must be used only with -batch, and kills emacs on completion. -Each file will be processed even if an error occurred previously. -For example, invoke `emacs -batch -f batch-byte-compile *.el'. - -* `-batch' changes. - -`-batch' now implies `-q': no init file is loaded by Emacs when -`-batch' is used. Also, no `term/TERMTYPE.el' file is loaded. Auto -saving is not done except in buffers in which it is explicitly -requested. Also, many echo-area printouts describing what is going on -are inhibited in batch mode, so that the only output you get is the -output you program specifically. - -One echo-area message that is not suppressed is the one that says -that a file is being loaded. That is because you can prevent this -message by passing `t' as the third argument to `load'. - -* Display of search string in incremental search. - -Now, when you type C-s or C-r to reuse the previous search -string, that search string is displayed immediately in the echo area. - -Three dots are displayed after the search string while search -is actually going on. - -* View commands. - -The commands C-x ], C-x [, C-x /, C-x j and C-x o are now -available inside `view-buffer' and `view-file', with their -normal meanings. - -* Full-width windows preferred. - -The ``other-window'' commands prefer other full width windows, -and will split only full width windows. - -* M-x rename-file can copy if necessary. - -When used between different file systems, since actual renaming does -not work, the old file will be copied and deleted. - -* Within C-x ESC, you can pick the command to repeat. - -While editing a previous command to be repeated, inside C-x ESC, -you can now use the commands M-p and M-n to pick an earlier or -later command to repeat. M-n picks the next earlier command -and M-p picks the next later one. The new command appears in -the minibuffer, and you can go ahead and edit it, and repeat it -when you exit the minibuffer. - -Using M-n or M-p within C-x ESC is like having used a different -numeric argument when you ran C-x ESC in the first place. - -The command you finally execute using C-x ESC is added to the -front of the command history, unless it is identical with the -first thing in the command history. - -* Use C-c C-c to exit from editing within Info. - -It used to be C-z for this. Somehow this use of C-z was -left out when all the others were moved. The intention is that -C-z should always suspend Emacs. - -* Default arg to C-x < and C-x > now window width minus 2. - -These commands, which scroll the current window horizontally -by a specified number of columns, now scroll a considerable -distance rather than a single column if used with no argument. - -* Auto Save Files Deleted. - -The default value of `delete-auto-save-files' is now `t', so that -when you save a file for real, its auto save file is deleted. - -* Rnews changes. - -The N, P and J keys in Rnews are renamed to M-n, M-p and M-j. -These keys move among newsgroups. - -The n and p keys for moving sequentially between news articles now -accept repeat count arguments, and the + and - keys, made redundant by -this change, are eliminated. - -The s command for outputting the current article to a file -is renamed as o, to be compatible with Rmail. - -* Sendmail changes. - -If you have a ~/.mailrc file, Emacs searches it for mailing address -aliases, and these aliases are expanded when you send mail in Emacs. - -Fcc fields can now be used in the headers in the *mail* buffer -to specify files in which copies of the message should be put. -The message is written into those files in Unix mail file format. -The message as sent does not contain any Fcc fields in its header. -You can use any number of Fcc fields, but only one file name in each one. -The variable `mail-archive-file-name', if non-`nil', can be a string -which is a file name; an Fcc to that file will be inserted in every -message when you begin to compose it. - -A new command C-c q now exists in Mail mode. It fills the -paragraphs of an old message that had been inserted with C-c y. - -When the *mail* buffer is put in Mail mode, text-mode-hook -is now run in addition to mail-mode-hook. text-mode-hook -is run first. - -The new variable `mail-header-separator' now specifies the string -to use on the line that goes between the headers and the message text. -By default it is still "--text follows this line--". - -* Command history truncated automatically. - -Just before each garbage collection, all but the last 30 elements -of the command history are discarded. - -Incompatible Lisp Programming Changes in Emacs 17 - -* `"e' no longer supported. - -This feature, which allowed Lisp functions to take arguments -that were not evaluated, has been eliminated, because it is -inescapably hard to make the compiler work properly with such -functions. - -You should use macros instead. A simple way to change any -code that uses `"e' is to replace - - (defun foo ("e x y z) ... - -with - - (defmacro foo (x y z) - (list 'foo-1 (list 'quote x) (list 'quote y) (list 'quote z))) - - (defun foo-1 (x y z) ... - -* Functions `region-to-string' and `region-around-match' removed. - -These functions were made for compatibility with Gosling Emacs, but it -turns out to be undesirable to use them in GNU Emacs because they use -the mark. They have been eliminated from Emacs proper, but are -present in mlsupport.el for the sake of converted mocklisp programs. - -If you were using `region-to-string', you should instead use -`buffer-substring'; then you can pass the bounds as arguments and -can avoid setting the mark. - -If you were using `region-around-match', you can use instead -the two functions `match-beginning' and `match-end'. These give -you one bound at a time, as a numeric value, without changing -point or the mark. - -* Function `function-type' removed. - -This just appeared not to be very useful. It can easily be written in -Lisp if you happen to want it. Just use `symbol-function' to get the -function definition of a symbol, and look at its data type or its car -if it is a list. - -* Variable `buffer-number' removed. - -You can still use the function `buffer-number' to find out -a buffer's unique number (assigned in order of creation). - -* Variable `executing-macro' renamed `executing-kbd-macro'. - -This variable is the currently executing keyboard macro, as -a string, or `nil' when no keyboard macro is being executed. - -* Loading term/$TERM. - -The library term/$TERM (where $TERM get replaced by your terminal -type), which is done by Emacs automatically when it starts up, now -happens after the user's .emacs file is loaded. - -In previous versions of Emacs, these files had names of the form -term-$TERM; thus, for example, term-vt100.el, but now they live -in a special subdirectory named term, and have names like -term/vt100.el. - -* `command-history' format changed. - -The elements of this list are now Lisp expressions which can -be evaluated directly to repeat a command. - -* Unused editing commands removed. - -The functions `forward-to-word', `backward-to-word', -`upcase-char', `mark-beginning-of-buffer' and `mark-end-of-buffer' -have been removed. Their definitions can be found in file -lisp/unused.el if you need them. - -Upward Compatible Lisp Programming Changes in Emacs 17 - -* You can now continue after errors and quits. - -When the debugger is entered because of a C-g, due to -a non-`nil' value of `debug-on-quit', the `c' command in the debugger -resumes execution of the code that was running when the quit happened. -Use the `q' command to go ahead and quit. - -The same applies to some kinds of errors, but not all. Errors -signaled with the Lisp function `signal' can be continued; the `c' -command causes `signal' to return. The `r' command causes `signal' to -return the value you specify. The `c' command is equivalent to `r' -with the value `nil'. - -For a `wrong-type-argument' error, the value returned with the `r' -command is used in place of the invalid argument. If this new value -is not valid, another error occurs. - -Errors signaled with the function `error' cannot be continued. -If you try to continue, the error just happens again. - -* `dot' renamed `point'. - -The word `dot' has been replaced with `point' in all -function and variable names, including: - - point, point-min, point-max, - point-marker, point-min-marker, point-max-marker, - window-point, set-window-point, - point-to-register, register-to-point, - exchange-point-and-mark. - -The old names are still supported, for now. - -* `string-match' records position of end of match. - -After a successful call to `string-match', `(match-end 0)' will -return the index in the string of the first character after the match. -Also, `match-begin' and `match-end' with nonzero arguments can be -used to find the indices of beginnings and ends of substrings matched -by subpatterns surrounded by parentheses. - -* New function `insert-before-markers'. - -This function is just like `insert' except in the handling of any -relocatable markers that are located at the point of insertion. -With `insert', such markers end up pointing before the inserted text. -With `insert-before-markers', they end up pointing after the inserted -text. - -* New function `copy-alist'. - -This function takes one argument, a list, and makes a disjoint copy -of the alist structure. The list itself is copied, and each element -that is a cons cell is copied, but the cars and cdrs of elements -remain shared with the original argument. - -This is what it takes to get two alists disjoint enough that changes -in one do not change the result of `assq' on the other. - -* New function `copy-keymap'. - -This function takes a keymap as argument and returns a new keymap -containing initially the same bindings. Rebindings in either one of -them will not alter the bindings in the other. - -* New function `copy-syntax-table'. - -This function takes a syntax table as argument and returns a new -syntax table containing initially the same syntax settings. Changes -in either one of them will not alter the other. - -* Randomizing the random numbers. - -`(random t)' causes the random number generator's seed to be set -based on the current time and Emacs's process id. - -* Third argument to `modify-syntax-entry'. - -The optional third argument to `modify-syntax-entry', if specified -should be a syntax table. The modification is made in that syntax table -rather than in the current syntax table. - -* New function `run-hooks'. - -This function takes any number of symbols as arguments. -It processes the symbols in order. For each symbol which -has a value (as a variable) that is non-nil, the value is -called as a function, with no arguments. - -This is useful in major mode commands. - -* Second arg to `switch-to-buffer'. - -If this function is given a non-`nil' second argument, then the -selection being done is not recorded on the selection history. -The buffer's position in the history remains unchanged. This -feature is used by the view commands, so that the selection history -after exiting from viewing is the same as it was before. - -* Second arg to `display-buffer' and `pop-to-buffer'. - -These two functions both accept an optional second argument which -defaults to `nil'. If the argument is not `nil', it means that -another window (not the selected one) must be found or created to -display the specified buffer in, even if it is already shown in -the selected window. - -This feature is used by `switch-to-buffer-other-window'. - -* New variable `completion-ignore-case'. - -If this variable is non-`nil', completion allows strings -in different cases to be considered matching. The global value -is `nil' - -This variable exists for the sake of commands that are completing -an argument in which case is not significant. It is possible -to change the value globally, but you might not like the consequences -in the many situations (buffer names, command names, file names) -where case makes a difference. - -* Major modes related to Text mode call text-mode-hook, then their own hooks. - -For example, turning on Outline mode first calls the value of -`text-mode-hook' as a function, if it exists and is non-`nil', -and then does likewise for the variable `outline-mode-hook'. - -* Defining new command line switches. - -You can define a new command line switch in your .emacs file -by putting elements on the value of `command-switch-alist'. -Each element of this list should look like - (SWITCHSTRING . FUNCTION) -where SWITCHSTRING is a string containing the switch to be -defined, such as "-foo", and FUNCTION is a function to be called -if such an argument is found in the command line. FUNCTION -receives the command line argument, a string, as its argument. - -To implement a switch that uses up one or more following arguments, -use the fact that the remaining command line arguments are kept -as a list in the variable `command-line-args'. FUNCTION can -examine this variable, and do - (setq command-line-args (cdr command-line-args) -to "use up" an argument. - -* New variable `load-in-progress'. - -This variable is non-`nil' when a file of Lisp code is being read -and executed by `load'. - -* New variable `print-length'. - -The value of this variable is normally `nil'. It may instead be -a number; in that case, when a list is printed by `prin1' or -`princ' only that many initial elements are printed; the rest are -replaced by `...'. - -* New variable `find-file-not-found-hook'. - -If `find-file' or any of its variants is used on a nonexistent file, -the value of `find-file-not-found-hook' is called (if it is not `nil') -with no arguments, after creating an empty buffer. The file's name -can be found as the value of `buffer-file-name'. - -* Processes without buffers. - -In the function `start-process', you can now specify `nil' as -the process's buffer. You can also set a process's buffer to `nil' -using `set-process-buffer'. - -The reason you might want to do this is to prevent the process -from being killed because any particular buffer is killed. -When a process has a buffer, killing that buffer kills the -process too. - -When a process has no buffer, its output is lost unless it has a -filter, and no indication of its being stopped or killed is given -unless it has a sentinel. - -* New function `user-variable-p'. `v' arg prompting changed. - -This function takes a symbol as argument and returns `t' if -the symbol is defined as a user option variable. This means -that it has a `variable-documentation' property whose value is -a string starting with `*'. - -Code `v' in an interactive arg reading string now accepts -user variables only, and completion is limited to the space of -user variables. - -The function `read-variable' also now accepts and completes -over user variables only. - -* CBREAK mode input is the default in Unix 4.3 bsd. - -In Berkeley 4.3 Unix, there are sufficient features for Emacs to -work fully correctly using CBREAK mode and not using SIGIO. -Therefore, this mode is the default when running under 4.3. -This mode corresponds to `nil' as the first argument to -`set-input-mode'. You can still select either mode by calling -that function. - -* Information on memory usage. - -The new variable `data-bytes-used' contains the number -of bytes of impure space allocated in Emacs. -`data-bytes-free' contains the number of additional bytes -Emacs could allocate. Note that space formerly allocated -and freed again still counts as `used', since it is still -in Emacs's address space. - -* No limit on size of output from `format'. - -The string output from `format' used to be truncated to -100 characters in length. Now it can have any length. - -* New errors `void-variable' and `void-function' replace `void-symbol'. - -This change makes it possible to have error messages that -clearly distinguish undefined variables from undefined functions. -It also allows `condition-case' to handle one case without the other. - -* `replace-match' handling of `\'. - -In `replace-match', when the replacement is not literal, -`\' in the replacement string is always treated as an -escape marker. The only two special `\' constructs -are `\&' and `\DIGIT', so `\' followed by anything other than -`&' or a digit has no effect. `\\' is necessary to include -a `\' in the replacement text. - -This level of escaping is comparable with what goes on in -a regular expression. It is over and above the level of `\' -escaping that goes on when strings are read in Lisp syntax. - -* New error `invalid-regexp'. - -A regexp search signals this type of error if the argument does -not meet the rules for regexp syntax. - -* `kill-emacs' with argument. - -If the argument is a number, it is returned as the exit status code -of the Emacs process. If the argument is a string, its contents -are stuffed as pending terminal input, to be read by another program -after Emacs is dead. - -* New fifth argument to `subst-char-in-region'. - -This argument is optional and defaults to `nil'. If it is not `nil', -then the substitutions made by this function are not recorded -in the Undo mechanism. - -This feature should be used with great care. It is now used -by Outline mode to make lines visible or invisible. - -* ` *Backtrace*' buffer renamed to `*Backtrace*'. - -As a result, you can now reselect this buffer easily if you switch to -another while in the debugger. - -Exiting from the debugger kills the `*Backtrace*' buffer, so you will -not try to give commands in it when no longer really in the debugger. - -* New function `switch-to-buffer-other-window'. - -This is the new primitive to select a specified buffer (the -argument) in another window. It is not quite the same as -`pop-to-buffer', because it is guaranteed to create another -window (assuming there is room on the screen) so that it can -leave the current window's old buffer displayed as well. - -All functions to select a buffer in another window should -do so by calling this new function. - -* New variable `minibuffer-help-form'. - -At entry to the minibuffer, the variable `help-form' is bound -to the value of `minibuffer-help-form'. - -`help-form' is expected at all times to contain either `nil' -or an expression to be executed when C-h is typed (overriding -teh definition of C-h as a command). `minibuffer-help-form' -can be used to provide a different default way of handling -C-h while in the minibuffer. - -* New \{...} documentation construct. - -It is now possible to set up the documentation string for -a major mode in such a way that it always describes the contents -of the major mode's keymap, as it has been customized. -To do this, include in the documentation string the characters `\{' -followed by the name of the variable containing the keymap, -terminated with `}'. (The `\' at the beginning probably needs to -be quoted with a second `\', to include it in the doc string.) -This construct is normally used on a line by itself, with no blank -lines before or after. - -For example, the documentation string for the function `c-mode' contains - ... - Paragraphs are separated by blank lines only. - Delete converts tabs to spaces as it moves back. - \\{c-mode-map} - Variables controlling indentation style: - ... - -* New character syntax class "punctuation". - -Punctuation characters behave like whitespace in word and -list parsing, but can be distinguished in regexps and in the -function `char-syntax'. Punctuation syntax is represented by -a period in `modify-syntax-entry'. - -* `auto-mode-alist' no longer needs entries for backup-file names, - -Backup suffixes of all kinds are now stripped from a file's name -before searching `auto-mode-alist'. - -Changes in Emacs 16 - -* No special code for Ambassadors, VT-100's and Concept-100's. - -Emacs now controls these terminals based on the termcap entry, like -all other terminals. Formerly it did not refer to the termcap entries -for those terminal types, and often the termcap entries for those -terminals are wrong or inadequate. If you experience worse behavior -on these terminals than in version 15, you can probably correct it by -fixing up the termcap entry. See ./TERMS for more info. - -See ./TERMS in any case if you find that some terminal does not work -right with Emacs now. - -* Minibuffer default completion character is TAB (and not ESC). - -So that ESC can be used in minibuffer for more useful prefix commands. - -* C-z suspends Emacs in all modes. - -Formerly, C-z was redefined for other purposes by certain modes, -such as Buffer Menu mode. Now other keys are used for those purposes, -to keep the meaning of C-z uniform. - -* C-x ESC (repeat-complex-command) allows editing the command it repeats. - -Instead of asking for confirmation to re-execute a command from the -command history, the command is placed, in its Lisp form, into the -minibuffer for editing. You can confirm by typing RETURN, change some -arguments and then confirm, or abort with C-g. - -* Incremental search does less redisplay on slow terminals. - -If the terminal baud rate is <= the value of `isearch-slow-speed', -incremental searching outside the text on the screen creates -a single-line window and uses that to display the line on which -a match has been found. Exiting or quitting the search restores -the previous window configuration and redisplays the window you -were searching in. - -The initial value of `isearch-slow-speed' is 1200. - -This feature is courtesy of crl@purdue. - -* Recursive minibuffers not allowed. - -If the minibuffer window is selected, most commands that would -use the minibuffer gets an error instead. (Specific commands -may override this feature and therefore still be allowed.) - -Strictly speaking, recursive entry to the minibuffer is still -possible, because you can switch to another window after -entering the minibuffer, and then minibuffer-using commands -are allowed. This is still allowed by a deliberate decision: -if you know enough to switch windows while in the minibuffer, -you can probably understand recursive minibuffers. - -This may be overridden by binding the variable -`enable-recursive-minibuffers' to t. - -* New major mode Emacs-Lisp mode, for editing Lisp code to run in Emacs. - -The mode in which emacs lisp files is edited is now called emacs-lisp-mode -and is distinct from lisp-mode. The latter is intended for use with -lisps external to emacs. - -The hook which is funcalled (if non-nil) on entry to elisp-mode is now -called emacs-lisp-mode-hook. A consequence of this changes is that -.emacs init files which set the value of lisp-mode-hook may need to be -changed to use the new names. - -* Correct matching of parentheses is checked on insertion. - -When you insert a close-paren, the matching open-paren -is checked for validity. The close paren must be the kind -of close-paren that the open-paren says it should match. -Otherwise, a warning message is printed. close-paren immediately -preceded by quoting backslash syntax character is not matched. - -This feature was originally written by shane@mit-ajax. - -* M-x list-command-history -* M-x command-history-mode -* M-x electric-command-history - -`list-command-history' displays forms from the command history subject -to user controlled filtering and limit on number of forms. It leaves -the buffer in `command-history-mode'. M-x command-history-mode -recomputes the command history each time it is invoked via -`list-command-history'. It is like Emacs-Lisp mode except that characters -don't insert themselves and provision is made for re-evaluating an -expression from the list. `electric-command-history' pops up a type -out window with the command history displayed. If the very next -character is Space, the window goes away and the previous window -configuration is restored. Otherwise you can move around in the -history and select an expression for evaluation *inside* the buffer -which invoked `electric-command-history'. The original window -configuration is restored on exit unless the command selected changes -it. - -* M-x edit-picture - -Enters a temporary major mode (the previous major mode is remembered -and can is restored on exit) designed for editing pictures and tables. -Printing characters replace rather than insert themselves with motion -afterwards that is user controlled (you can specify any of the 8 -compass directions). Special commands for movement are provided. -Special commands for hacking tabs and tab stops are provided. Special -commands for killing rectangles and overlaying them are provided. See -the documentation of function edit-picture for more details. - -Calls value of `edit-picture-hook' on entry if non-nil. - -* Stupid C-s/C-q `flow control' supported. - -Do (set-input-mode nil t) to tell Emacs to use CBREAK mode and interpret -C-s and C-q as flow control commands. (set-input-mode t nil) switches -back to interrupt-driven input. (set-input-mode nil nil) uses CBREAK -mode but no `flow control'; this may make it easier to run Emacs under -certain debuggers that have trouble dealing with inferiors that use SIGIO. - -CBREAK mode has certain inherent disadvantages, which are why it is -not the default: - - Meta-keys are ignored; CBREAK mode discards the 8th bit of - input characters. - - Control-G as keyboard input discards buffered output, - and therefore can cause incorrect screen updating. - -The use of `flow control' has its own additional disadvantage: the -characters C-s and C-q are not available as editing commands. You can -partially compensate for this by setting up a keyboard-translate-table -(see file ONEWS) that maps two other characters (such as C-^ and C-\) into -C-s and C-q. Of course, C-^ and C-\ are commonly used as escape -characters in remote-terminal programs. You really can't win except -by getting rid of this sort of `flow control.' - -The configuration switch CBREAK_INPUT is now eliminated. -INTERRUPT_INPUT exists only to specify the default mode of operation; -#define it to make interrupt-driven input the default. - -* Completion of directory names provides a slash. - -If file name completion yields the name of a directory, -a slash is appended to it. - -* Undo can clear modified-flag. - -If you undo changes in a buffer back to a state in which the -buffer was not considered "modified", then it is labelled as -once again "unmodified". - -* M-x run-lisp. - -This command creates an inferior Lisp process whose input and output -appear in the Emacs buffer named `*lisp*'. That buffer uses a major mode -called inferior-lisp-mode, which has many of the commands of lisp-mode -and those of shell-mode. Calls the value of shell-mode-hook and -lisp-mode-hook, in that order, if non-nil. - -Meanwhile, in lisp-mode, the command C-M-x is defined to -send the current defun as input to the `*lisp*' subprocess. - -* Mode line says `Narrow' when buffer is clipped. - -If a buffer has a clipping restriction (made by `narrow-to-region') -then its mode line contains the word `Narrow' after the major and -minor modes. - -* Mode line says `Abbrev' when abbrev mode is on. - -* add-change-log-entry takes prefix argument - -Giving a prefix argument makes it prompt for login name, full name, -and site name, with defaults. Otherwise the defaults are used -with no confirmation. - -* M-x view-buffer and M-x view-file - -view-buffer selects the named buffer, view-file finds the named file; the -resulting buffer is placed into view-mode (a recursive edit). The normal -emacs commands are not available. Instead a set of special commands is -provided which faclitate moving around in the buffer, searching and -scrolling by screenfuls. Exiting view-mode returns to the buffer in which -the view-file or view-buffer command was given. -Type ? or h when viewing for a complete list of view commands. -Each calls value of `view-hook' if non-nil on entry. - -written by shane@mit-ajax. - -* New key commands in dired. - -`v' views (like more) the file on the current line. -`#' marks auto-save files for deletion. -`~' marks backup files for deletion. -`r' renames a file and updates the directory listing if the -file is renamed to same directory. -`c' copies a file and updates the directory listing if the file is -copied to the same directory. - -* New function `electric-buffer-list'. - -This pops up a buffer describing the set of emacs buffers. -Immediately typing space makes the buffer list go away and returns -to the buffer and window which were previously selected. - -Otherwise one may use the c-p and c-n commands to move around in the -buffer-list buffer and type Space or C-z to select the buffer on the -cursor's line. There are a number of other commands which are the same -as those of buffer-menu-mode. - -This is a useful thing to bind to c-x c-b in your `.emacs' file if the -rather non-standard `electric' behaviour of the buffer list suits your taste. -Type C-h after invoking electric-buffer-list for more information. - -Calls value of `electric-buffer-menu-mode-hook' if non-nil on entry. -Calls value of `after-electric-buffer-menu' on exit (select) if non-nil. - -Changes in version 16 for mail reading and sending - -* sendmail prefix character is C-c (and not C-z). New command C-c w. - -For instance C-c C-c (or C-c C-s) sends mail now rather than C-z C-z. -C-c w inserts your `signature' (contents of ~/.signature) at the end -of mail. - -* New feature in C-c y command in sending mail. - -C-c y is the command to insert the message being replied to. -Normally it deletes most header fields and indents everything -by three spaces. - -Now, C-c y does not delete header fields or indent. -C-c y with any other numeric argument does delete most header -fields, but indents by the amount specified in the argument. - -* C-r command in Rmail edits current message. - -It does this by switching to a different major mode -which is nearly the same as Text mode. The only difference -between it and text mode are the two command C-c and C-]. -C-c is defined to switch back to Rmail mode, and C-] -is defined to restore the original contents of the message -and then switch back to Rmail mode. - -C-c and C-] are the only ways "back into Rmail", but you -can switch to other buffers and edit them as usual. -C-r in Rmail changes only the handling of the Rmail buffer. - -* Rmail command `t' toggles header display. - -Normally Rmail reformats messages to hide most header fields. -`t' switches to display of all the header fields of the -current message, as long as it remains current. -Another `t' switches back to the usual display. - -* Rmail command '>' goes to the last message. - -* Rmail commands `a' and `k' set message attributes. -`a' adds an attribute and `k' removes one. You specify -the attrbute by name. You can specify either a built-in -flag such as "deleted" or "filed", or a user-defined keyword -(anything not recognized as built-in). - -* Rmail commands `l' and `L' summarize by attributes. - -These commands create a summary with one line per message, -like `h', but they list only some of the messages. You -specify which attribute (for `l') or attributes (for `L') -the messages should have. - -* Rmail can parse mmdf mail files. - -* Interface to MH mail system. - -mh-e is a front end for GNU emacs and the MH mail system. It -provides a friendly and convient interface to the MH commands. - -To read mail, invoke mh-rmail. This will inc new mail and display the -scan listing on the screen. To see a summary of the mh-e commands, -type ?. Help is available through the usual facilities. - -To send mail, invoke mh-smail. - -mh-e requires a copy of MH.5 that has been compiled with the MHE -compiler switch. - -From larus@berkeley. - -New hooks and parameters in version 16 - -* New variable `blink-matching-paren-distance'. - -This is the maximum number of characters to search for -an open-paren to match an inserted close-paren. -The matching open-paren is shown and checked if it is found -within this distance. - -`nil' means search all the way to the beginning of the buffer. -In this case, a warning message is printed if no matching -open-paren is found. - -This feature was originally written by shane@mit-ajax. - -* New variable `find-file-run-dired' - -If nil, find-file will report an error if an attempt to visit a -directory is detected; otherwise, it runs dired on that directory. -The default is t. - -* Variable `dired-listing-switches' holds switches given to `ls' by dired. - -The value should be a string containing `-' followed by letters. -The letter `l' had better be included and letter 'F' had better be excluded! -The default is "-al". - -This feature was originally written by shane@mit-ajax. - -* New variable `display-time-day-and-date'. - -If this variable is set non-`nil', the function M-x display-time -displays the day and date, as well as the time. - -* New parameter `c-continued-statement-indent'. - -This controls the extra indentation given to a line -that continues a C statement started on the previous line. -By default it is 2, which is why you would see - - if (foo) - bar (); - - -* Changed meaning of `c-indent-level'. - -The value of `c-brace-offset' used to be -subtracted from the value of `c-indent-level' whenever -that value was used. Now it is not. - -As a result, `c-indent-level' is now the offset of -statements within a block, relative to the line containing -the open-brace that starts the block. - -* turn-on-auto-fill is useful value for text-mode-hook. - -(setq text-mode-hook 'turn-on-auto-fill) -is all you have to do to make sure Auto Fill mode is turned -on whenever you enter Text mode. - -* Parameter explicit-shell-file-name for M-x shell. - -This variable, if non-nil, specifies the file name to use -for the shell to run if you do M-x shell. - -Changes in version 16 affecting Lisp programming: - -* Documentation strings adapt to customization. - -Often the documentation string for a command wants to mention -another command. Simply stating the other command as a -character sequence has a disadvantage: if the user customizes -Emacs by moving that function to a different command, the -cross reference in the documentation becomes wrong. - -A new feature allows you to write the documentation string -using a function name, and the command to run that function -is looked up when the documentation is printed. - -If a documentation string contains `\[' (two characters) then -the following text, up to the next `]', is taken as a function name. -Instead of printing that function name, the command that runs it is printed. -(M-x is used to construct a command if no shorter one exists.) - -For example, instead of putting `C-n' in a documentation string -to refer to the C-n command, put in `\[next-line]'. (In practice -you will need to quote the backslash with another backslash, -due to the syntax for strings in Lisp and C.) - -To include the literal characters `\[' in a documentation string, -precede them with `\='. To include the characters `\=', precede -them with `\='. For example, "\\=\\= is the way to quote \\=\\[" -will come out as `\= is the way to quote \['. - -The new function `substitute-command-keys' takes a string possibly -contaning \[...] constructs and replaces those constructs with -the key sequences they currently stand for. - -* Primitives `find-line-comment' and `find-line-comment-body' flushed. - -Search for the value of `comment-start-skip' if you want to find -whether and where a line has a comment. - -* New function `auto-save-file-name-p' - -Should return non-`nil' iff given a string which is the name of an -auto-save file (sans directory name). If you redefine -`make-auto-save-file-name', you should redefine this accordingly. By -default, this function returns `t' for filenames beginning with -character `#'. - -* The value of `exec-directory' now ends in a slash. - -This is to be compatible with most directory names in GNU Emacs. - -* Dribble files and termscript files. - -(open-dribble-file FILE) opens a dribble file named FILE. When a -dribble file is open, every character Emacs reads from the terminal is -written to the dribble file. - -(open-termscript FILE) opens a termscript file named FILE. When a -termscript file is open, all characters sent to the terminal by Emacs -are also written in the termscript file. - -The two of these together are very useful for debugging Emacs problems -in redisplay. - -* Upper case command characters by default are same as lower case. - -If a character in a command is an upper case letter, and is not defined, -Emacs uses the definition of the corresponding lower case letter. -For example, if C-x U is not directly undefined, it is treated as -a synonym for C-x u (undo). - -* Undefined function errors versus undefined variable errors. - -Void-symbol errors now say "boundp" if the symbol's value was void -or "fboundp" if the function definition was void. - -* New function `bury-buffer'. - -The new function `bury-buffer' takes one argument, a buffer object, -and puts that buffer at the end of the internal list of buffers. -So it is the least preferred candidate for use as the default value -of C-x b, or for other-buffer to return. - -* Already-displayed buffers have low priority for display. - -When a buffer is chosen automatically for display, or to be the -default in C-x b, buffers already displayed in windows have lower -priority than buffers not currently visible. - -* `set-window-start' accepts a third argument NOFORCE. - -This argument, if non-nil, prevents the window's force_start flag -from being set. Setting the force_start flag causes the next -redisplay to insist on starting display at the specified starting -point, even if dot must be moved to get it onto the screen. - -* New function `send-string-to-terminal'. - -This function takes one argument, a string, and outputs its contents -to the terminal exactly as specified: control characters, escape -sequences, and all. - -* Keypad put in command mode. - -The terminal's keypad is now put into command mode, as opposed to -numeric mode, while Emacs is running. This is done by means of the -termcap `ks' and `ke' strings. - -* New function `generate-new-buffer' - -This function takes a string as an argument NAME and looks for a -creates and returns a buffer called NAME if one did not already exist. -Otherwise, it successively tries appending suffixes of the form "<1>", -"<2>" etc to NAME until it creates a string which does not name an -existing buffer. A new buffer with that name is the created and returned. - -* New function `prin1-to-string' -This function takes one argument, a lisp object, and returns a string -containing that object's printed representation, such as `prin1' -would output. - -* New function `read-from-minibuffer' -Lets you supply a prompt, initial-contents, a keymap, and specify -whether the result should be interpreted as a string or a lisp object. - -Old functions `read-minibuffer', `eval-minibuffer', `read-string' all -take second optional string argument which is initial contents of -minibuffer. - -* minibuffer variable names changed (names of keymaps) - -minibuf-local-map -> minibuffer-local-map -minibuf-local-ns-map -> minibuffer-local-ns-map -minibuf-local-completion-map -> minibuffer-local-completion-map -minibuf-local-must-match-map -> minibuffer-local-must-match-map - -Changes in version 16 affecting configuring and building Emacs - -* Configuration switch VT100_INVERSE eliminated. - -You can control the use of inverse video on any terminal by setting -the variable `inverse-video', or by changing the termcap entry. If -you like, set `inverse-video' in your `.emacs' file based on -examination of (getenv "TERM"). - -* New switch `-batch' makes Emacs run noninteractively. - -If the switch `-batch' is used, Emacs treats its standard output -and input like ordinary files (even if they are a terminal). -It does not display buffers or windows; the only output to standard output -is what would appear as messages in the echo area, and each -message is followed by a newline. - -The terminal modes are not changed, so that C-z and C-c retain -their normal Unix meanings. Emacs does still read commands from -the terminal, but the idea of `-batch' is that you use it with -other command line arguments that tell Emacs a complete task to perform, -including killing itself. `-kill' used as the last argument is a good -way to accomplish this. - -The Lisp variable `noninteractive' is now defined, to be `nil' -except when `-batch' has been specified. - -* Emacs can be built with output redirected to a file. - -This is because -batch (see above) is now used in building Emacs. - -For older news, see the file ONEWS.1. - ----------------------------------------------------------------------- -Copyright information: - -Copyright (C) 1985 Richard M. Stallman - - Permission is granted to anyone to make or distribute verbatim copies - of this document as received, in any medium, provided that the - copyright notice and this permission notice are preserved, - thus giving the recipient permission to redistribute in turn. - - Permission is granted to distribute modified versions - of this document, or of portions of it, - under the above conditions, provided also that they - carry prominent notices stating who last changed them. - -Local variables: -mode: text -end: - -arch-tag: 33dc900d-9c58-473b-87c9-b6d7222323ea diff -r 86cedfd9ade6 -r 25fa0038a52d etc/ONEWS.3 --- a/etc/ONEWS.3 Sat Jun 03 22:51:32 2006 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1611 +0,0 @@ -GNU Emacs NEWS -- history of user-visible changes. 17-Aug-1988 -Copyright (C) 1988 Free Software Foundation, Inc. -See the end for copying conditions. - -For older news, see the file ONEWS.2. - -Changes in version 18.52. - -* X windows version 10 is supported under system V. - -* Pop-up menus are now supported with the same Lisp interface in -both version 10 and 11 of X windows. - -* C-x 4 a is a new command to edit a change-log entry in another window. - -* The emacs client program now allows an option +NNN to specify the -line number to go to in the file whose name follows. Thus, - emacsclient foo.c +45 bar.c -will find the files `foo.c' and `bar.c', going to line 45 in `bar.c'. - -* Dired allows empty directories to be deleted like files. - -* When the terminal type is used to find a terminal-specific file to -run, Emacs now tries the entire terminal type first. If that doesn't -yield a file that exists, the last hyphen and what follows it is -stripped. If that doesn't yield a file that exists, the previous -hyphen is stripped, and so on until all hyphens are gone. For -example, if the terminal type is `aaa-48-foo', Emacs will try first -`term/aaa-48-foo.el', then `term/aaa-48.el' and finally `term/aaa.el'. - -Underscores now receive the same treatment as hyphens. - -* Texinfo features: @defun, etc. texinfo-show-structure. -New template commands. texinfo-format-region. - -* The special "local variable" `eval' is now ignored if you are running -as root. - -* New command `c-macro-expand' shows the result of C macro expansion -in the region. It works using the C preprocessor, so its results -are completely accurate. - -* Errors in trying to auto save now flash error messages for a few seconds. - -* Killing a buffer now sends SIGHUP to the buffer's process. - -* New hooks. - -** `spell-region' now allows you to filter the text before spelling-checking. -If the value of `spell-filter' is non-nil, it is called, with no arguments, -looking at a temporary buffer containing a copy of the text to be checked. -It can alter the text freely before the spell program sees it. - -** The variable `lpr-command' now specifies the command to be used when -you use the commands to print text (such as M-x print-buffer). - -** Posting netnews now calls the value of `news-inews-hook' (if not nil) -as a function of no arguments before the actual posting. - -** Rmail now calls the value of `rmail-show-message-hook' (if not nil) -as a function of no arguments, each time a new message is selected. - -** `kill-emacs' calls the value of `kill-emacs-hook' as a function of no args. - -* New libraries. -See the source code of each library for more information. - -** icon.el: a major mode for editing programs written in Icon. - -** life.el: a simulator for the cellular automaton "life". Load the -library and run M-x life. - -** doctex.el: a library for converting the Emacs `etc/DOC' file of -documentation strings into TeX input. - -** saveconf.el: a library which records the arrangement of windows and -buffers when you exit Emacs, and automatically recreates the same -setup the next time you start Emacs. - -** uncompress.el: a library that automatically uncompresses files -when you visit them. - -** c-fill.el: a mode for editing filled comments in C. - -** kermit.el: an extended version of shell-mode designed for running kermit. - -** spook.el: a library for adding some "distract the NSA" keywords to every -message you send. - -** hideif.el: a library for hiding parts of a C program based on preprocessor -conditionals. - -** autoinsert.el: a library to put in some initial text when you visit -a nonexistent file. The text used depends on the major mode, and -comes from a directory of files created by you. - -* New programming features. - -** The variable `window-system-version' now contains the version number -of the window system you are using (if appropriate). When using X windows, -its value is either 10 or 11. - -** (interactive "N") uses the prefix argument if any; otherwise, it reads -a number using the minibuffer. - -** VMS: there are two new functions `vms-system-info' and `shrink-to-icon'. -The former allows you to get many kinds of system status information. -See its self-documentation for full details. -The second is used with the window system: it iconifies the Emacs window. - -** VMS: the new function `define-logical-name' allows you to create -job-wide logical names. The old function `define-dcl-symbol' has been -removed. - -Changes in version 18.50. - -* X windows version 11 is supported. - -Define X11 in config.h if you want X version 11 instead of version 10. - -* The command M-x gdb runs the GDB debugger as an inferior. -It asks for the filename of the executable you want to debug. - -GDB runs as an inferior with I/O through an Emacs buffer. All the -facilities of Shell mode are available. In addition, each time your -program stops, and each time you select a new stack frame, the source -code is displayed in another window with an arrow added to the line -where the program is executing. - -Special GDB-mode commands include M-s, M-n, M-i, M-u, M-d, and C-c C-f -which send the GDB commands `step', `next', `stepi', `up', `down' -and `finish'. - -In any source file, the commands C-x SPC tells GDB to set a breakpoint -on the current line. - -* M-x calendar displays a three-month calendar. - -* C-u 0 C-x C-s never makes a backup file. - -This is a way you can explicitly request not to make a backup. - -* `term-setup-hook' is for users only. - -Emacs never uses this variable for internal purposes, so you can freely -set it in your `.emacs' file to make Emacs do something special after -loading any terminal-specific setup file from `lisp/term'. - -* `copy-keymap' now copies recursive submaps. - -* New overlay-arrow feature. - -If you set the variable `overlay-arrow-string' to a string -and `overlay-arrow-position' to a marker, that string is displayed on -the screen at the position of that marker, hiding whatever text would -have appeared there. If that position isn't on the screen, or if -the buffer the marker points into isn't displayed, there is no effect. - -* -batch mode can read from the terminal. - -It now works to use `read-char' to do terminal input in a noninteractive -Emacs run. End of file causes Emacs to exit. - -* Variables `data-bytes-used' and `data-bytes-free' removed. - -These variables cannot really work because the 24-bit range of an -integer in (most ports of) GNU Emacs is not large enough to hold their -values on many systems. - -Changes in version 18.45, since version 18.41. - -* C indentation parameter `c-continued-brace-offset'. - -This parameter's value is added to the indentation of any -line that is in a continuation context and starts with an open-brace. -For example, it applies to the open brace shown here: - - if (x) - { - -The default value is zero. - -* Dabbrev expansion (Meta-/) preserves case. - -When you use Meta-/ to search the buffer for an expansion of an -abbreviation, if the expansion found is all lower case except perhaps -for its first letter, then the case pattern of the abbreviation -is carried over to the expansion that replaces it. - -* TeX-mode syntax. - -\ is no longer given "escape character" syntax in TeX mode. It now -has the syntax of an ordinary punctuation character. As a result, -\[...\] and such like are considered to balance each other. - -* Mail-mode automatic Reply-to field. - -If the variable `mail-default-reply-to' is non-`nil', then each time -you start to compose a message, a Reply-to field is inserted with -its contents taken from the value of `mail-default-reply-to'. - -* Where is your .emacs file? - -If you run Emacs under `su', so your real and effective uids are -different, Emacs uses the home directory associated with the real uid -(the name you actually logged in under) to find the .emacs file. - -Otherwise, Emacs uses the environment variable HOME to find the .emacs -file. - -The .emacs file is not loaded at all if -batch is specified. - -* Prolog mode is the default for ".pl" files. - -* File names are not case-sensitive on VMS. - -On VMS systems, all file names that you specify are converted to upper -case. You can use either upper or lower case indiscriminately. - -* VMS-only function 'define-dcl-symbol'. - -This is a new name for the function formerly called -`define-logical-name'. - -Editing Changes in Emacs 18 - -* Additional systems and machines are supported. - -GNU Emacs now runs on Vax VMS. However, many facilities that are normally -implemented by running subprocesses do not work yet. This includes listing -a directory and sending mail. There are features for running subprocesses -but they are incompatible with those on Unix. I hope that some of -the VMS users can reimplement these features for VMS (compatibly for -the user, if possible). - -VMS wizards are also asked to work on making the subprocess facilities -more upward compatible with those on Unix, and also to rewrite their -internals to use the same Lisp objects that are used on Unix to -represent processes. - -In addition, the TI Nu machine running Unix system V, the AT&T 3b, and -the Wicat, Masscomp, Integrated Solutions, Alliant, Amdahl uts, Mips, -Altos 3068 and Gould Unix systems are now supported. The IBM PC-RT is -supported under 4.2, but not yet under system V. The GEC 93 is close -to working. The port for the Elxsi is partly merged. See the file -MACHINES for full status information and machine-specific installation -advice. - -* Searching is faster. - -Forward search for a text string, or for a regexp that is equivalent -to a text string, is now several times faster. Motion by lines and -counting lines is also faster. - -* Memory usage improvements. - -It is no longer possible to run out of memory during garbage -collection. As a result, running out of memory is never fatal. This -is due to a new garbage collection algorithm which compactifies -strings in place rather than copying them. Another consequence of the -change is a reduction in total memory usage and a slight increase in -garbage collection speed. - -* Display changes. - -** Editing above top of screen. - -When you delete or kill or alter text that reaches to the top of the -screen or above it, so that display would start in the middle of a -line, Emacs will usually attempt to scroll the text so that display -starts at the beginning of a line again. - -** Yanking in the minibuffer. - -The message "Mark Set" is no longer printed when the minibuffer is -active. This is convenient with many commands, including C-y, that -normally print such a message. - -** Cursor appears in last line during y-or-n questions. - -Questions that want a `y' or `n' answer now move the cursor -to the last line, following the question. - -* Library loading changes. - -`load' now considers all possible suffixes (`.elc', `.el' and none) -for each directory in `load-path' before going on to the next directory. -It now accepts an optional fourth argument which, if non-nil, says to -use no suffixes; then the file name must be given in full. The search -of the directories in `load-path' goes on as usual in this case, but -it too can be prevented by passing an absolute file name. - -The value of `load-path' no longer by default includes nil (meaning to -look in the current default directory). The idea is that `load' should -be used to search the path only for libraries to be found in the standard -places. If you want to override system libraries with your own, place -your own libraries in one special directory and add that directory to the -front of `load-path'. - -The function `load' is no longer a command; that is to say, `M-x load' -is no longer allowed. Instead, there are two commands for loading files. -`M-x load-library' is equivalent to the old meaning of `M-x load'. -`M-x load-file' reads a file name with completion and defaulting -and then loads exactly that file, with no searching and no suffixes. - -* Emulation of other editors. - -** `edt-emulation-on' starts emulating DEC's EDT editor. - -Do `edt-emulation-off' to return Emacs to normal. - -** `vi-mode' and `vip-mode' starts emulating vi. - -These are two different vi emulations provided by GNU Emacs users. -We are interested in feedback as to which emulation is preferable. - -See the documentation and source code for these functions -for more information. - -** `set-gosmacs-bindings' emulates Gosling Emacs. - -This command changes many global bindings to resemble those of -Gosling Emacs. The previous bindings are saved and can be restored using -`set-gnu-bindings'. - -* Emulation of a display terminal. - -Within Emacs it is now possible to run programs (such as emacs or -supdup) which expect to do output to a visual display terminal. - -See the function `terminal-emulator' for more information. - -* New support for keypads and function keys. - -There is now a first attempt at terminal-independent support for -keypad and function keys. - -Emacs now defines a standard set of key-names for function and keypad -keys, and provides standard hooks for defining them. Most of the -standard key-names have default definitions built into Emacs; you can -override these in a terminal-independent manner. The default definitions -and the conventions for redefining them are in the file `lisp/keypad.el'. - -These keys on the terminal normally work by sending sequences of -characters starting with ESC. The exact sequences used vary from -terminal to terminal. Emacs interprets them in two stages: -in the first stage, terminal-dependent sequences are mapped into -the standard key-names; then second stage maps the standard key-names -into their definitions in a terminal-independent fashion. - -The terminal-specific file `term/$TERM.el' now is responsible only for -establishing the mapping from the terminal's escape sequences into -standard key-names. It no longer knows what Emacs commands are -assigned to the standard key-names. - -One other change in terminal-specific files: if the value of the TERM -variable contains a hyphen, only the part before the first hyphen is -used in forming the name of the terminal-specific file. Thus, for -terminal type `aaa-48', the file loaded is now `term/aaa.el' rather -than `term/aaa-48.el'. - -* New startup command line options. - -`-i FILE' or `-insert FILE' in the command line to Emacs tells Emacs to -insert the contents of FILE into the current buffer at that point in -command line processing. This is like using the command M-x insert-file. - -`-funcall', `-load', `-user' and `-no-init-file' are new synonyms for -`-f', `-l', `-u' and `-q'. - -`-nw' means don't use a window system. If you are using a terminal -emulator on the X window system and you want to run Emacs to work through -the terminal emulator instead of working directly with the window system, -use this switch. - -* Buffer-sorting commands. - -Various M-x commands whose names start with `sort-' sort parts of -the region: - -sort-lines divides the region into lines and sorts them alphabetically. -sort-pages divides into pages and sorts them alphabetically. -sort-paragraphs divides into paragraphs and sorts them alphabetically. -sort-fields divides into lines and sorts them alphabetically - according to one field in the line. - The numeric argument specifies which field (counting - from field 1 at the beginning of the line). Fields in a line - are separated by whitespace. -sort-numeric-fields - is similar but converts the specified fields to numbers - and sorts them numerically. -sort-columns divides into lines and sorts them according to the contents - of a specified range of columns. - -Refer to the self-documentation of these commands for full usage information. - -* Changes in various commands. - -** `tags-query-replace' and `tags-search' change. - -These functions now display the name of the file being searched at the moment. - -** `occur' output now serves as a menu. `occur-menu' command deleted. - -`M-x occur' now allows you to move quickly to any of the occurrences -listed. Select the `*Occur*' buffer that contains the output of `occur', -move point to the occurrence you want, and type C-c C-c. -This will move point to the same occurrence in the buffer that the -occurrences were found in. - -The command `occur-menu' is thus obsolete, and has been deleted. - -One way to get a list of matching lines without line numbers is to -copy the text to another buffer and use the command `keep-lines'. - -** Incremental search changes. - -Ordinary and regexp incremental searches now have distinct default -search strings. Thus, regexp searches recall only previous regexp -searches. - -If you exit an incremental search when the search string is empty, -the old default search string is kept. The default does not become -empty. - -Reversing the direction of an incremental search with C-s or C-r -when the search string is empty now does not get the default search -string. It leaves the search string empty. A second C-s or C-r -will get the default search string. As a result, you can do a reverse -incremental regexp search with C-M-s C-r. - -If you add a `*', `?' or `\|' to an incremental search regexp, -point will back up if that is appropriate. For example, if -you have searched for `ab' and add a `*', point moves to the -first match for `ab*', which may be before the match for `ab' -that was previously found. - -If an incremental search is failing and you ask to repeat it, -it will start again from the beginning of the buffer (or the end, -if it is a backward search). - -The search-controlling parameters `isearch-slow-speed' and -`isearch-slow-window-lines' have now been renamed to start with -`search' instead of `isearch'. Now all the parameters' names start -with `search'. - -If `search-slow-window-lines' is negative, the slow search window -is put at the top of the screen, and the absolute value or the -negative number specifies the height of it. - -** Undo changes - -The undo command now will mark the buffer as unmodified only when it is -identical to the contents of the visited file. - -** C-M-v in minibuffer. - -If while in the minibuffer you request help in a way that uses a -window to display something, then until you exit the minibuffer C-M-v -in the minibuffer window scrolls the window of help. - -For example, if you request a list of possible completions, C-M-v can -be used reliably to scroll the completion list. - -** M-TAB command. - -Meta-TAB performs completion on the Emacs Lisp symbol names. The sexp -in the buffer before point is compared against all existing nontrivial -Lisp symbols and completed as far as is uniquely determined by them. -Nontrivial symbols are those with either function definitions, values -or properties. - -If there are multiple possibilities for the very next character, a -list of possible completions is displayed. - -** Dynamic abbreviation package. - -The new command Meta-/ expands an abbreviation in the buffer before point -by searching the buffer for words that start with the abbreviation. - -** Changes in saving kbd macros. - -The commands `write-kbd-macro' and `append-kbd-macro' have been -deleted. The way to save a keyboard macro is to use the new command -`insert-kbd-macro', which inserts Lisp code to define the macro as -it is currently defined into the buffer before point. Visit a Lisp -file such as your Emacs init file `~/.emacs', insert the macro -definition (perhaps deleting an old definition for the same macro) -and then save the file. - -** C-x ' command. - -The new command C-x ' (expand-abbrev) expands the word before point as -an abbrev, even if abbrev-mode is not turned on. - -** Sending to inferior Lisp. - -The command C-M-x in Lisp mode, which sends the current defun to -an inferior Lisp process, now works by writing the text into a temporary -file and actually sending only a `load'-form to load the file. -As a result, it avoids the Unix bugs that used to strike when the -text was above a certain length. - -With a prefix argument, this command now makes the inferior Lisp buffer -appear on the screen and scrolls it so that the bottom is showing. - -Two variables `inferior-lisp-load-command' and `inferior-lisp-prompt', -exist to customize these feature for different Lisp implementations. - -** C-x p now disabled. - -The command C-x p, a nonrecomended command which narrows to the current -page, is now initially disabled like C-x n. - -* Dealing with files. - -** C-x C-v generalized - -This command is now allowed even if the current buffer is not visiting -a file. As usual, it kills the current buffer and replaces it with a -newly found file. - -** M-x recover-file improved; auto save file names changed. - -M-x recover-file now checks whether the last auto-save file is more -recent than the real visited file before offering to read in the -auto-save file. If the auto-save file is newer, a directory listing -containing the two files is displayed while you are asked whether you -want the auto save file. - -Visiting a file also makes this check. If the auto-save file is more recent, -a message is printed suggesting that you consider using M-x recover file. - -Auto save file names now by default have a `#' at the end as well -as at the beginning. This is so that `*.c' in a shell command -will never match auto save files. - -On VMS, auto save file names are made by appending `_$' at the front -and `$' at the end. - -When you change the visited file name of a buffer, the auto save file -is now renamed to belong to the new visited file name. - -You can customize the way auto save file names are made by redefining -the two functions `make-auto-save-file-name' and `auto-save-file-name-p', -both of which are defined in `files.el'. - -** Modifying a buffer whose file is changed on disk is detected instantly. - -On systems where clash detection (locking of files being edited) is -implemented, Emacs also checks the first time you modify a buffer -whether the file has changed on disk since it was last visited or saved. -If it has, you are asked to confirm that you want to change the buffer. - -** Exiting Emacs offers to save `*mail*'. - -Emacs can now know about buffers that it should offer to save on exit -even though they are not visiting files. This is done for any buffer -which has a non-nil local value of `buffer-offer-save'. By default, -Mail mode provides such a local value. - -** Backup file changes. - -If a backup file cannot be written in the directory of the visited file -due to fascist file protection, a backup file is now written in your home -directory as `~/%backup%~'. Only one such file is made, ever, so only -the most recently made such backup is available. - -When backup files are made by copying, the last-modification time of the -original file is now preserved in the backup copy. - -** Visiting remote files. - -On an internet host, you can now visit and save files on any other -internet host directly from Emacs with the commands M-x ftp-find-file -and M-x ftp-write-file. Specify an argument of the form HOST:FILENAME. -Since standard internet FTP is used, the other host may be any kind -of machine and is not required to have any special facilities. - -The first time any one remote host is accessed, you will be asked to -give the user name and password for use on that host. FTP is reinvoked -each time you ask to use it, but previously specified user names and -passwords are remembered automatically. - -** Dired `g' command. - -`g' in Dired mode is equivalent to M-x revert-buffer; it causes the -current contents of the same directory to be read in. - -* Changes in major modes. - -** C mode indentation change. - -The binding of Linefeed is no longer changed by C mode. It once again -has its normal meaning, which is to insert a newline and then indent -afterward. - -The old definition did one additional thing: it reindented the line -before the new newline. This has been removed because it made the -command twice as slow. The only time it was really useful was after the -insertion of an `else', since the fact of starting with `else' may change -the way that line is indented. Now you will have to type TAB again -yourself to reindent the `else' properly. - -If the variable `c-tab-always-indent' is set to `nil', the TAB command -in C mode, with no argument, will just insert a tab character if there -is non-whitespace preceding point on the current line. Giving it a -prefix argument will force reindentation of the line (as well as -of the compound statement that begins after point, if any). - -** Fortran mode now exists. - -This mode provides commands for motion and indentation of Fortran code, -plus built-in abbrevs for Fortran keywords. For details, see the manual -or the on-line documentation of the command `fortran-mode'. - -** Scribe mode now exists. - -This mode does something useful for editing files of Scribe input. -It is used automatically for files with names ending in ".mss". - -** Modula2 and Prolog modes now exist. - -These modes are for editing programs in the languages of the same names. -They can be selected with M-x modula-2-mode and M-x prolog-mode. - -** Telnet mode changes. - -The telnet mode special commands have now been assigned to C-c keys. -Most of them are the same as in Shell mode. - -** Picture mode changes. - -The special picture-mode commands to specify the direction of cursor -motion after insertion have been moved to C-c keys. The commands to -specify diagonal motion were already C-c keys; they are unchanged. -The keys to specify horizontal or vertical motion are now -C-c < (left), C-c > (right), C-c ^ (up) and C-c . (down). - -** Nroff mode comments. - -Comments are now supported in Nroff mode. The standard comment commands -such as M-; and C-x ; know how to insert, align and delete comments -that start with backslash-doublequote. - -** LaTeX mode. - -LaTeX mode now exists. Use M-x latex-mode to select this mode, and -M-x plain-tex-mode to select the previously existing mode for Plain -TeX. M-x tex-mode attempts to examine the contents of the buffer and -choose between latex-mode and plain-tex-mode accordingly; if the -buffer is empty or it cannot tell, the variable `TeX-default-mode' -controls the choice. Its value should be the symbol for the mode to -be used. - -The facilities for running TeX on all or part of the buffer -work with LaTeX as well. - -Some new commands available in both modes: - -C-c C-l recenter the window showing the TeX output buffer - so most recent line of output can be seen. -C-c C-k kill the TeX subprocess. -C-c C-q show the printer queue. -C-c C-f close a block (appropriate for LaTeX only). - If the current line contains a \begin{...}, - this inserts an \end{...} on the following line - and puts point on a blank line between them. - -** Outline mode changes. - -Invisible lines in outline mode are now indicated by `...' at the -end of the previous visible line. - -The special outline heading motion commands are now all on C-c keys. -A few new ones have been added. Here is a full list: - -C-c C-n Move to next visible heading (formerly M-}) -C-c C-p Move to previous visible heading (formerly M-{) -C-c C-f Move to next visible heading at the same level. - Thus, if point is on a level-2 heading line, - this command moves to the next visible level-2 heading. -C-c C-b Move to previous visible heading at the same level. -C-c C-u Move up to previous visible heading at a higher level. - -The variable `outline-regexp' now controls recognition of heading lines. -Any line whose beginning matches this regexp is a heading line. -The depth in outline structure is determined by the length of -the string that matches. - -A line starting with a ^L (formfeed) is now by default considered -a header line. - -* Mail reading and sending. - -** MH-E changes. - -MH-E has been extensively modified and improved since the v17 release. -It contains many new features, including commands to: extracted failed -messages, kill a draft message, undo changes to a mail folder, monitor -delivery of a letter, print multiple messages, page digests backwards, -insert signatures, and burst digests. Also, many commands have been -made to able to deal with named sequences of messages, instead of -single messages. MH-E also has had numerous bugs fixed and commands -made to run faster. Furthermore, its keybindings have been changed to -be compatible with Rmail and the rest of GNU Emacs. - -** Mail mode changes. - -The C-c commands of mail mode have been rearranged: - -C-c s, C-c c, C-c t and C-c b (move point to various header fields) -have been reassigned as C-c C-f C-s, C-c C-f C-c, C-c C-f C-t and C-c -C-f C-b. C-c C-f is for "field". - -C-c y, C-c w and C-c q have been changed to C-c C-y, C-c C-w and C-c C-q. - -Thus, C-c LETTER is always unassigned. - -** Rmail C-r command changed to w. - -The Rmail command to edit the current message is now `w'. This change -has been made because people frequently type C-r while in Rmail hoping -to do a reverse incremental search. That now works. - -* Rnews changes. - -** Caesar rotation added. - -The function news-caesar-buffer-body performs encryption and -decryption of the body of a news message. It defaults to the USENET -standard of 13, and accepts any numeric arg between 1 to 25 and -25 to -1. -The function is bound to C-c C-r in both news-mode and news-reply-mode. - -** rmail-output command added. - -The C-o command has been bound to rmail-output in news-mode. -This allows one to append an article to a file which is in either Unix -mail or RMAIL format. - -** news-reply-mode changes. - -The C-c commands of news reply mode have been rearranged and changed, -so that C-c LETTER is always unassigned: - -C-c y, C-c w and C-c q have been changed to C-c C-y, C-c C-w and C-c C-q. - -C-c c, C-c t, and C-c b (move to various mail header fields) have been -deleted (they make no sense for posting and replying to USENET). - -C-c s (move to Subject: header field) has been reassigned as C-c C-f -C-s. C-c C-f is for "field". Several additional move to news header -field commands have been added. - -The local news-reply-mode bindings now look like this: - -C-c C-s news-inews (post the message) C-c C-c news-inews -C-c C-f move to a header field (and create it if there isn't): - C-c C-f C-n move to Newsgroups: C-c C-f C-s move to Subj: - C-c C-f C-f move to Followup-To: C-c C-f C-k move to Keywords: - C-c C-f C-d move to Distribution: C-c C-f C-a move to Summary: -C-c C-y news-reply-yank-original (insert current message, in NEWS). -C-c C-q mail-fill-yanked-message (fill what was yanked). -C-c C-r caesar rotate all letters by 13 places in the article's body (rot13). - -* Existing Emacs usable as a server. - -Programs such as mailers that invoke "the editor" as an inferior -to edit some text can now be told to use an existing Emacs process -instead of creating a new editor. - -To do this, you must have an Emacs process running and capable of -doing terminal I/O at the time you want to invoke it. This means that -either you are using a window system and give Emacs a separate window -or you run the other programs as inferiors of Emacs (such as, using -M-x shell). - -First prepare the existing Emacs process by loading the `server' -library and executing M-x server-start. (Your .emacs can do this -automatically.) - -Now tell the other programs to use, as "the editor", the Emacs client -program (etc/emacsclient, located in the same directory as this file). -This can be done by setting the environment variable EDITOR. - -When another program invokes the emacsclient as "the editor", the -client actually transfers the file names to be edited to the existing -Emacs, which automatically visits the files. - -When you are done editing a buffer for a client, do C-x # (server-edit). -This marks that buffer as done, and selects the next buffer that the client -asked for. When all the buffers requested by a client are marked in this -way, Emacs tells the client program to exit, so that the program that -invoked "the editor" will resume execution. - -You can only have one server Emacs at a time, but multiple client programs -can put in requests at the same time. - -The client/server work only on Berkeley Unix, since they use the Berkeley -sockets mechanism for their communication. - -Changes in Lisp programming in Emacs version 18. - -* Init file changes. - -** Suffixes no longer accepted on `.emacs'. - -Emacs will no longer load a file named `.emacs.el' or `emacs.elc' -in place of `.emacs'. This is so that it will take less time to -find `.emacs'. If you want to compile your init file, give it another -name and make `.emacs' a link to the `.elc' file, or make it contain -a call to `load' to load the `.elc' file. - -** `default-profile' renamed to `default', and loaded after `.emacs'. - -It used to be the case that the file `default-profile' was loaded if -and only if `.emacs' was not found. - -Now the name `default-profile' is not used at all. Instead, a library -named `default' is loaded after the `.emacs' file. `default' is loaded -whether the `.emacs' file exists or not. However, loading of `default' -can be prevented if the `.emacs' file sets `inhibit-default-init' to non-nil. - -In fact, you would call the default file `default.el' and probably would -byte-compile it to speed execution. - -Note that for most purposes you are better off using a `site-init' library -since that will be loaded before the runnable Emacs is dumped. By using -a `site-init' library, you avoid taking up time each time Emacs is started. - -** inhibit-command-line has been eliminated. - -This variable used to exist for .emacs files to set. It has been -eliminated because you can get the same effect by setting -command-line-args to nil and setting inhibit-startup-message to t. - -* `apply' is more general. - -`apply' now accepts any number of arguments. The first one is a function; -the rest are individual arguments to pass to that function, except for the -last, which is a list of arguments to pass. - -Previously, `apply' required exactly two arguments. Its old behavior -follows as a special case of the new definition. - -* New code-letter for `interactive'. - -(interactive "NFoo: ") is like (interactive "nFoo: ") in reading -a number using the minibuffer to serve as the argument; however, -if a prefix argument was specified, it uses the prefix argument -value as the argument, and does not use the minibuffer at all. - -This is used by the `goto-line' and `goto-char' commands. - -* Semantics of variables. - -** Built-in per-buffer variables improved. - -Several built-in variables which in the past had a different value in -each buffer now behave exactly as if `make-variable-buffer-local' had -been done to them. - -These variables are `tab-width', `ctl-arrow', `truncate-lines', -`fill-column', `left-margin', `mode-line-format', `abbrev-mode', -`overwrite-mode', `case-fold-search', `auto-fill-hook', -`selective-display', `selective-display-ellipses'. - -To be precise, each variable has a default value which shows through -in most buffers and can be accessed with `default-value' and set with -`set-default'. Setting the variable with `setq' makes the variable -local to the current buffer. Changing the default value has retroactive -effect on all buffers in which the variable is not local. - -The variables `default-case-fold-search', etc., are now obsolete. -They now refer to the default value of the variable, which is not -quite the same behavior as before, but it should enable old init files -to continue to work. - -** New per-buffer variables. - -The variables `fill-prefix', `comment-column' and `indent-tabs-mode' -are now per-buffer. They work just like `fill-column', etc. - -** New function `setq-default'. - -`setq-default' sets the default value of a variable, and uses the -same syntax that `setq' accepts: the variable name is not evaluated -and need not be quoted. - -`(setq-default case-fold-search nil)' would make searches case-sensitive -in all buffers that do not have local values for `case-fold-search'. - -** Functions `global-set' and `global-value' deleted. - -These functions were never used except by mistake by users expecting -the functionality of `set-default' and `default-value'. - -* Changes in defaulting of major modes. - -When `default-major-mode' is `nil', new buffers are supposed to -get their major mode from the buffer that is current. However, -certain major modes (such as Dired mode, Rmail mode, Rmail Summary mode, -and others) are not reasonable to use in this way. - -Now such modes' names have been given non-`nil' `mode-class' properties. -If the current buffer's mode has such a property, Fundamental mode is -used as the default for newly created buffers. - -* `where-is-internal' requires additional arguments. - -This function now accepts three arguments, two of them required: -DEFINITION, the definition to search for; LOCAL-KEYMAP, the keymap -to use as the local map when doing the searching, and FIRST-ONLY, -which is nonzero to return only the first key found. - -This function returns a list of keys (strings) whose definitions -(in the LOCAL-KEYMAP or the current global map) are DEFINITION. - -If FIRST-ONLY is non-nil, it returns a single key (string). - -This function has changed incompatibly in that now two arguments -are required when previously only one argument was allowed. To get -the old behavior of this function, write `(current-local-map)' as -the expression for the second argument. - -The incompatibility is sad, but `nil' is a legitimate value for the -second argument (it means there is no local keymap), so it cannot also -serve as a default meaning to use the current local keymap. - -* Abbrevs with hooks. - -When an abbrev defined with a hook is expanded, it now performs the -usual replacement of the abbrev with the expansion before running the -hook. Previously the abbrev itself was deleted but the expansion was -not inserted. - -* Function `scan-buffer' deleted. - -Use `search-forward' or `search-backward' in place of `scan-buffer'. -You will have to rearrange the arguments. - -* X window interface improvements. - -** Detect release of mouse buttons. - -Button-up events can now be detected. See the file `lisp/x-mouse.el' -for details. - -** New pop-up menu facility. - -The new function `x-popup-menu' pops up a menu (in a X window) -and returns an indication of which selection the user made. -For more information, see its self-documentation. - -* M-x disassemble. - -This command prints the disassembly of a byte-compiled Emacs Lisp function. - -Would anyone like to interface this to the debugger? - -* `insert-buffer-substring' can insert part of the current buffer. - -The old restriction that the text being inserted had to come from -a different buffer is now lifted. - -When inserting text from the current buffer, the text to be inserted -is determined from the specified bounds before any copying takes place. - -* New function `substitute-key-definition'. - -This is a new way to replace one command with another command as the -binding of whatever keys may happen to refer to it. - -(substitute-key-definition OLDDEF NEWDEF KEYMAP) looks through KEYMAP -for keys defined to run OLDDEF, and rebinds those keys to run NEWDEF -instead. - -* New function `insert-char'. - -Insert a specified character, a specified number of times. - -* `mark-marker' changed. - -When there is no mark, this now returns a marker that points -nowhere, rather than `nil'. - -* `ding' accepts argument. - -When given an argument, the function `ding' does not terminate -execution of a keyboard macro. Normally, `ding' does terminate -all macros that are currently executing. - -* New function `minibuffer-depth'. - -This function returns the current depth in minibuffer activations. -The value is zero when the minibuffer is not in use. -Values greater than one are possible if the user has entered the -minibuffer recursively. - -* New function `documentation-property'. - -(documentation-property SYMBOL PROPNAME) is like (get SYMBOL PROPNAME), -except that if the property value is a number `documentation-property' -will take that number (or its absolute value) as a character position -in the DOC file and return the string found there. - -(documentation-property VAR 'variable-documentation) is the proper -way for a Lisp program to get the documentation of variable VAR. - -* New documentation-string expansion feature. - -If a documentation string (for a variable or function) contains text -of the form `\', it means that all command names specified in -`\[COMMAND]' construct from that point on should be turned into keys -using the value of the variable FOO as the local keymap. Thus, for example, - - `\\[eval-defun] evaluates the defun containing point.' - -will expand into - - "ESC C-x evaluates the defun containing point." - -regardless of the current major mode, because ESC C-x is defined to -run `eval-defun' in the keymap `emacs-lisp-mode-map'. The effect is -to show the key for `eval-defun' in Emacs Lisp mode regardless of the -current major mode. - -The `\<...>' construct applies to all `\[...]' constructs that follow it, -up to the end of the documentation string or the next `\<...>'. - -Without `\<...>', the keys for commands specified in `\[...]' are found -in the current buffer's local map. - -The current global keymap is always searched second, whether `\<...>' -has been used or not. - -* Multiple hooks allowed in certain contexts. - -The old hook variables `find-file-hook', `find-file-not-found-hook' and -`write-file-hook' have been replaced. - -The replacements are `find-file-hooks', `find-file-not-found-hooks' -and `write-file-hooks'. Each holds a list of functions to be called; -by default, `nil', for no functions. The functions are called in -order of appearance in the list. - -In the case of `find-file-hooks', all the functions are executed. - -In the case of `find-file-not-found-hooks', if any of the functions -returns non-`nil', the rest of the functions are not called. - -In the case of `write-file-hooks', if any of the functions returns -non-`nil', the rest of the functions are not called, and the file is -considered to have been written already; so actual writing in the -usual way is not done. If `write-file-hooks' is local to a buffer, -it is set to its global value if `set-visited-file-name' is called -(and thus by C-x C-w as well). - -`find-file-not-found-hooks' and `write-file-hooks' can be used -together to implement editing of files that are not stored as Unix -files: stored in archives, or inside version control systems, or on -other machines running other operating systems and accessible via ftp. - -* New hooks for suspending Emacs. - -Suspending Emacs runs the hook `suspend-hook' before suspending -and the hook `suspend-resume-hook' if the suspended Emacs is resumed. -Running a hook is done by applying the variable's value to no arguments -if the variable has a non-`nil' value. If `suspend-hook' returns -non-`nil', then suspending is inhibited and so is running the -`suspend-resume-hook'. The non-`nil' value means that the `suspend-hook' -has done whatever suspending is required. - -* Disabling commands can print a special message. - -A command is disabled by giving it a non-`nil' `disabled' property. -Now, if this property is a string, it is included in the message -printed when the user tries to run the command. - -* Emacs can open TCP connections. - -The function `open-network-stream' opens a TCP connection to -a specified host and service. Its value is a Lisp object that represents -the connection. The object is a kind of "subprocess", and I/O are -done like I/O to subprocesses. - -* Display-related changes. - -** New mode-line control features. - -The display of the mode line used to be controlled by a format-string -that was the value of the variable `mode-line-format'. - -This variable still exists, but it now allows more general values, -not just strings. Lists, cons cells and symbols are also meaningful. - -The mode line contents are created by outputting various mode elements -one after the other. Here are the kinds of objects that can be -used as mode elements, and what they do in the display: - - string the contents of the string are output to the mode line, - and %-constructs are replaced by other text. - - t or nil ignored; no output results. - - symbol the symbol's value is used. If the value is a string, - the string is output verbatim to the mode line - (so %-constructs are not interpreted). Otherwise, - the symbol's value is processed as a mode element. - - list (whose first element is a string or list or cons cell) - the elements of the list are treated as as mode elements, - so that the output they generate is concatenated, - - list (whose car is a symbol) - if the symbol's value is non-nil, the second element of the - list is treated as a mode element. Otherwise, the third - element (if any) of the list is treated as a mode element. - - cons (whose car is a positive integer) - the cdr of the cons is used as a mode element, but - the text it produces is padded, if necessary, to have - at least the width specified by the integer. - - cons (whose car is a negative integer) - the cdr of the cons is used as a mode element, but - the text it produces is truncated, if necessary, to have - at most the width specified by the integer. - -There is always one mode element to start with, that being the value of -`mode-line-format', but if this value is a list then it leads to several -more mode elements, which can lead to more, and so on. - -There is one new %-construct for mode elements that are strings: -`%n' displays ` Narrow' for a buffer that is narrowed. - -The default value of `mode-line-format' refers to several other variables. -These variables are `mode-name', `mode-line-buffer-identification', -`mode-line-process', `mode-line-modified', `global-mode-string' and -`minor-mode-alist'. The first four are local in every buffer in which they -are changed from the default. - -mode-name Name of buffer's major mode. Local in every buffer. - -mode-line-buffer-identification - Normally the list ("Emacs: %17b"), it is responsible - for displaying text to indicate what buffer is being shown - and what kind of editing it is doing. `Emacs' means - that a file of characters is being edited. Major modes - such as Info and Dired which edit or view other kinds - of data often change this value. This variables becomes - local to the current buffer if it is setq'd. - -mode-line-process - Normally nil, this variable is responsible for displaying - information about the process running in the current buffer. - M-x shell-mode and M-x compile alter this variable. - -mode-line-modified - This variable is responsible for displaying the indication - of whether the current buffer is modified or read-only. - By default its value is `("--%*%*-")'. - -minor-mode-alist - This variable is responsible for displaying text for those - minor modes that are currently enabled. Its value - is a list of elements of the form (VARIABLE STRING), - where STRING is to be displayed if VARIABLE's value - (in the buffer whose mode line is being displayed) - is non-nil. This variable is not made local to particular - buffers, but loading some libraries may add elements to it. - -global-mode-string - This variable is used to display the time, if you ask - for that. - -The idea of these variables is to eliminate the need for major modes -to alter mode-line-format itself. - -** `window-point' valid for selected window. - -The value returned by `window-point' used to be incorrect when its -argument was the selected window. Now the value is correct. - -** Window configurations may be saved as Lisp objects. - -The function `current-window-configuration' returns a special type of -Lisp object that represents the current layout of windows: the -sizes and positions of windows, which buffers appear in them, and -which parts of the buffers appear on the screen. - -The function `set-window-configuration' takes one argument, which must -be a window configuration object, and restores that configuration. - -** New hook `temp-output-buffer-show-hook'. - -This hook allows you to control how help buffers are displayed. -Whenever `with-output-to-temp-buffer' has executed its body and wants -to display the temp buffer, if this variable is bound and non-`nil' -then its value is called with one argument, the temp buffer. -The hook function is solely responsible for displaying the buffer. -The standard manner of display--making the buffer appear in a window--is -used only if there is no hook function. - -** New function `minibuffer-window'. - -This function returns the window used (sometimes) for displaying -the minibuffer. It can be used even when the minibuffer is not active. - -** New feature to `next-window'. - -If the optional second argument is neither `nil' nor `t', the minibuffer -window is omitted from consideration even when active; if the starting -window was the last non-minibuffer window, the value will be the first -non-minibuffer window. - -** New variable `minibuffer-scroll-window'. - -When this variable is non-`nil', the command `scroll-other-window' -uses it as the window to be scrolled. Displays of completion-lists -set this variable to the window containing the display. - -** New argument to `sit-for'. - -A non-nil second argument to `sit-for' means do not redisplay; -just wait for the specified time or until input is available. - -** Deleted function `set-minor-mode'; minor modes must be changed. - -The function `set-minor-mode' has been eliminated. The display -of minor mode names in the mode line is now controlled by the -variable `minor-mode-alist'. To specify display of a new minor -mode, it is sufficient to add an element to this list. Once that -is done, you can turn the mode on and off just by setting a variable, -and the display will show its status automatically. - -** New variable `cursor-in-echo-area'. - -If this variable is non-nil, the screen cursor appears on the -last line of the screen, at the end of the text displayed there. - -Binding this variable to t is useful at times when reading single -characters of input with `read-char'. - -** New per-buffer variable `selective-display-ellipses'. - -If this variable is non-nil, an ellipsis (`...') appears on the screen -at the end of each text line that is followed by invisible text. - -If this variable is nil, no ellipses appear. Then there is no sign -on the screen that invisible text is present. - -Text is made invisible under the control of the variable -`selective-display'; this is how Outline mode and C-x $ work. - -** New variable `no-redraw-on-reenter'. - -If you set this variable non-nil, Emacs will not clear the screen when -you resume it after suspending it. This is for the sake of terminals -with multiple screens of memory, where the termcap entry has been set -up to switch between screens when Emacs is suspended and resumed. - -** New argument to `set-screen-height' or `set-screen-width'. - -These functions now take an optional second argument which says -what significance the newly specified height or width has. - -If the argument is nil, or absent, it means that Emacs should -believe that the terminal height or width really is as just specified. - -If the argument is t, it means Emacs should not believe that the -terminal really is this high or wide, but it should use the -specific height or width as the number of lines or columns to display. -Thus, you could display only 24 lines on a screen known to have 48 lines. - -What practical difference is there between using only 24 lines for display -and really believing that the terminal has 24 lines? - -1. The ``real'' height of the terminal says what the terminal command -to move the cursor to the last line will do. - -2. The ``real'' height of the terminal determines how much padding is -needed. - -* File-related changes. - -** New parameter `backup-by-copying-when-mismatch'. - -If this variable is non-`nil', then when Emacs is about to save a -file, it will create the backup file by copying if that would avoid -changing the file's uid or gid. - -The default value of this variable is `nil', because usually it is -useful to have the uid of a file change according to who edited it -last. I recommend thet this variable be left normally `nil' and -changed with a local variables list in those particular files where -the uid needs to be preserved. - -** New parameter `file-precious-flag'. - -If this variable is non-`nil', saving the buffer tries to avoid -leaving an incomplete file due to disk full or other I/O errors. -It renames the old file before saving. If saving is successful, -the renamed file is deleted; if saving gets an error, the renamed -file is renamed back to the name you visited. - -Backups are always made by copying for such files. - -** New variable `buffer-offer-save'. - -If the value of this variable is non-`nil' in a buffer then exiting -Emacs will offer to save the buffer (if it is modified and nonempty) -even if the buffer is not visiting a file. This variable is -automatically made local to the current buffer whenever it is set. - -** `rename-file', `copy-file', `add-name-to-file' and `make-symbolic-link'. - -The third argument to these functions used to be `t' or `nil'; `t' -meaning go ahead even if the specified new file name already has a file, -and `nil' meaning to get an error. - -Now if the third argument is a number it means to ask the user for -confirmation in this case. - -** New optional argument to `copy-file'. - -If `copy-file' receives a non-nil fourth argument, it attempts -to give the new copy the same time-of-last-modification that the -original file has. - -** New function `file-newer-than-file-p'. - -(file-newer-than-file-p FILE1 FILE2) returns non-nil if FILE1 has been -modified more recently than FILE2. If FILE1 does not exist, the value -is always nil; otherwise, if FILE2 does not exist, the value is t. -This is meant for use when FILE2 depends on FILE1, to see if changes -in FILE1 make it necessary to recompute FILE2 from it. - -** Changed function `file-exists-p'. - -This function is no longer the same as `file-readable-p'. -`file-exists-p' can now return t for a file that exists but which -the fascists won't allow you to read. - -** New function `file-locked-p'. - -This function receives a file name as argument and returns `nil' -if the file is not locked, `t' if locked by this Emacs, or a -string giving the name of the user who has locked it. - -** New function `file-name-sans-versions'. - -(file-name-sans-versions NAME) returns a substring of NAME, with any -version numbers or other backup suffixes deleted from the end. - -** New functions for directory names. - -Although a directory is really a kind of file, specifying a directory -uses a somewhat different syntax from specifying a file. -In Emacs, a directory name is used as part of a file name. - -On Unix, the difference is small: a directory name ends in a slash, -while a file name does not: thus, `/usr/rms/' to name a directory, -while `/usr/rms' names the file which holds that directory. - -On VMS, the difference is considerable: `du:[rms.foo]' specifies a -directory, but the name of the file that holds that directory is -`du:[rms]foo.dir'. - -There are two new functions for converting between directory names -and file names. `directory-file-name' takes a directory name and -returns the name of the file in which that directory's data is stored. -`file-name-as-directory' takes the name of a file and returns -the corresponding directory name. These always understand Unix file name -syntax; on VMS, they understand VMS syntax as well. - -For example, (file-name-as-directory "/usr/rms") returns "/usr/rms/" -and (directory-file-name "/usr/rms/") returns "/usr/rms". -On VMS, (file-name-as-directory "du:[rms]foo.dir") returns "du:[rms.foo]" -and (directory-file-name "du:[rms.foo]") returns "du:[rms]foo.dir". - -** Value of `file-attributes' changed. - -The function file-attributes returns a list containing many kinds of -information about a file. Now the list has eleven elements. - -The tenth element is `t' if deleting the file and creating another -file of the same name would result in a change in the file's group; -`nil' if there would be no change. You can also think of this as -comparing the file's group with the default group for files created in -the same directory by you. - -The eleventh element is the inode number of the file. - -** VMS-only function `file-name-all-versions'. - -This function returns a list of all the completions, including version -number, of a specified version-number-less file name. This is like -`file-name-all-completions', except that the latter returns values -that do not include version numbers. - -** VMS-only variable `vms-stmlf-recfm'. - -On a VMS system, if this variable is non-nil, Emacs will give newly -created files the record format `stmlf'. This is necessary for files -that must contain lines of arbitrary length, such as compiled Emacs -Lisp. - -When writing a new version of an existing file, Emacs always keeps -the same record format as the previous version; so this variable has -no effect. - -This variable has no effect on Unix systems. - -** `insert-file-contents' on an empty file. - -This no longer sets the buffer's "modified" flag. - -** New function (VMS only) `define-logical-name': - -(define-logical-name LOGICAL TRANSLATION) defines a VMS logical name -LOGICAL whose translation is TRANSLATION. The new name applies to -the current process only. - -** Deleted variable `ask-about-buffer-names'. - -If you want buffer names for files to be generated in a special way, -you must redefine `create-file-buffer'. - -* Subprocess-related changes. - -** New function `process-list'. - -This function takes no arguments and returns a list of all -of Emacs's asynchronous subprocesses. - -** New function `process-exit-status'. - -This function, given a process, process name or buffer as argument, -returns the exit status code or signal number of the process. -If the process has not yet exited or died, this function returns 0. - -** Process output ignores `buffer-read-only'. - -Output from a process will go into the process's buffer even if the -buffer is read only. - -** Switching buffers in filter functions and sentinels. - -Emacs no longer saves and restore the current buffer around calling -the filter and sentinel functions, so these functions can now -permanently alter the selected buffer in a straightforward manner. - -** Specifying environment variables for subprocesses. - -When a subprocess is started with `start-process' or `call-process', -the value of the variable `process-environment' is taken to -specify the environment variables to give the subprocess. The -value should be a list of strings, each of the form "VAR=VALUE". - -`process-environment' is initialized when Emacs starts up -based on Emacs's environment. - -** New variable `process-connection-type'. - -If this variable is `nil', when a subprocess is created, Emacs uses -a pipe rather than a pty to communicate with it. Normally this -variable is `t', telling Emacs to use a pty if ptys are supported -and one is available. - -** New function `waiting-for-user-input-p'. - -This function, given a subprocess as argument, returns `t' if that -subprocess appears to be waiting for input sent from Emacs, -or `nil' otherwise. - -** New hook `shell-set-directory-error-hook'. - -The value of this variable is called, with no arguments, whenever -Shell mode gets an error trying to keep track of directory-setting -commands (such as `cd' and `pushd') used in the shell buffer. - -* New functions `user-uid' and `user-real-uid'. - -These functions take no arguments and return, respectively, -the effective uid and the real uid of the Emacs process. -The value in each case is an integer. - -* New variable `print-escape-newlines' controls string printing. - -If this variable is non-`nil', then when a Lisp string is printed -by the Lisp printing function `prin1' or `print', newline characters -are printed as `\n' rather than as a literal newline. - -* New function `sysnetunam' on HPUX. - -This function takes two arguments, a network address PATH and a -login string LOGIN, and executes the system call `netunam'. -It returns `t' if the call succeeds, otherwise `nil'. - -News regarding installation: - -* Many `s-...' file names changed. - -Many `s-...' files have been renamed. All periods in such names, -except the ones just before the final `h', have been changed to -hyphens. Thus, `s-bsd4.2.h' has been renamed to `s-bsd4-2.h'. - -This is so a Unix distribution can be moved mechanically to VMS. - -* `DOCSTR...' file now called `DOC-...'. - -The file of on-line documentation strings, that used to be -`DOCSTR.mm.nn.oo' in this directory, is now called `DOC-mm.nn.oo'. -This is so that it can port to VMS using the standard conventions -for translating filenames for VMS. - -This file also now contains the doc strings for variables as -well as functions. - -* Emacs no longer uses floating point arithmetic. - -This may make it easier to port to some machines. - -* Macros `XPNTR' and `XSETPNTR'; flag `DATA_SEG_BITS'. - -These macros exclusively are used to unpack a pointer from a Lisp_Object -and to insert a pointer into a Lisp_Object. Redefining them may help -port Emacs to machines in which all pointers to data objects have -certain high bits set. - -If `DATA_SEG_BITS' is defined, it should be a number which contains -the high bits to be inclusive or'ed with pointers that are unpacked. - -* New flag `HAVE_X_MENU'. - -Define this flag in `config.h' in addition to `HAVE_X_WINDOWS' -to enable use of the Emacs interface to X Menus. On some operating -systems, the rest of the X interface works properly but X Menus -do not work; hence this separate flag. See the file `src/xmenu.c' -for more information. - -* Macros `ARRAY_MARK_FLAG' and `DONT_COPY_FLAG'. - -* `HAVE_ALLOCA' prevents assembly of `alloca.s'. - -* `SYSTEM_MALLOC' prevents use of GNU `malloc.c'. - -SYSTEM_MALLOC, if defined, means use the system's own `malloc' routines -rather than those that come with Emacs. - -Use this only if absolutely necessary, because if it is used you do -not get warnings when space is getting low. - -* New flags to control unexec. - -See the file `unexec.c' for a long comment on the compilation -switches that suffice to make it work on many machines. - -* `PNTR_COMPARISON_TYPE' - -Pointers that need to be compared for ordering are converted to this type -first. Normally this is `unsigned int'. - -* `HAVE_VFORK', `HAVE_DUP2' and `HAVE_GETTIMEOFDAY'. - -These flags just say whether certain system calls are available. - -* New macros control compiler switches, linker switches and libraries. - -The m- and s- files can now control in a modular fashion the precise -arguments passed to `cc' and `ld'. - -LIBS_STANDARD defines the standard C libraries. Default is `-lc'. -LIBS_DEBUG defines the extra libraries to use when debugging. Default `-lg'. -LIBS_SYSTEM can be defined by the s- file to specify extra libraries. -LIBS_MACHINE can be defined by the m- file to specify extra libraries. -LIBS_TERMCAP defines the libraries for Termcap or Terminfo. - It is defined by default in a complicated fashion but the m- or s- file - can override it. - -LD_SWITCH_SYSTEM can be defined by the s- file to specify extra `ld' switches. - The default is `-X' on BSD systems except those few that use COFF object files. -LD_SWITCH_MACHINE can be defined by the m- file to specify extra `ld' switches. - -C_DEBUG_SWITCH defines the switches to give `cc' when debugging. Default `-g'. -C_OPTIMIZE_SWITCH defines the switches to give `cc' to optimize. Default `-O'. -C_SWITCH_MACHINE can be defined by the m- file to specify extra `cc' switches. - -For older news, see the file ONEWS.2. - ----------------------------------------------------------------------- -Copyright information: - -Copyright (C) 1988 Free Software Foundation, Inc. - - Permission is granted to anyone to make or distribute verbatim copies - of this document as received, in any medium, provided that the - copyright notice and this permission notice are preserved, - thus giving the recipient permission to redistribute in turn. - - Permission is granted to distribute modified versions - of this document, or of portions of it, - under the above conditions, provided also that they - carry prominent notices stating who last changed them. - -Local variables: -mode: text -end: - -arch-tag: 8fed393b-c9c5-47d1-afbb-c0e7a135094a diff -r 86cedfd9ade6 -r 25fa0038a52d etc/ONEWS.4 --- a/etc/ONEWS.4 Sat Jun 03 22:51:32 2006 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1693 +0,0 @@ -GNU Emacs NEWS -- history of user-visible changes. 1992. -Copyright (C) 1992 Free Software Foundation, Inc. -See the end for copying conditions. - -For older news, see the file ONEWS.3. - -Changes in version 18.58. - -* RMAIL reply now properly parses nested comments in addesses. - -* The "visual bell" feature when used with X windows -now flashes only 1/4 of the window's total area. This is because -flashing the whole window is too slow on some systems. - -* `call-process' and `call-process-region' now return an indication -of the exit status of the subprocess: either a numeric exit code -or a string describing the signal which caused termination. - -* It is possible for regular expression matching to overflow the stack -of failure points. In the past, such overflow was treated as simple -failure to match. Now it causes an error. - -* You can use C-u to end a numeric argument. Thus, type C-u 1 0 0 C-u 1 -to insert 100 1's. - -* Emacs now knows how to get resource values from the X server. - -* Job control commands in shell mode work properly on more systems -because they now work by "typing" signal characters such as C-c. - -* copy-keymap no longer recursively copies keymaps reached through -symbols' function definitions (i.e., those that have names). It does -copy nested keymaps that appear directly in the other copied keymaps. - -Changes in version 18.56. - -* C-g should now work to interrupt a running program -on all kinds of systems even when using X windows. - -* Quitting is inhibited while a filter or sentinel is running. -Those functions can run asynchronously while Emacs is waiting -for keyboard input, and if they allow quitting, they -make the behavior of C-g unpredictable. - -* Storing text into the X windows cut buffer -now clears out any selection. - -* The undo facility is completely rewritten, and now -uses Lisp data structures. It can record much more -information. You can use the variables undo-threshold -and undo-high-threshold to control how much. - -* There is no longer a maximum screen height or width. - -Changes in version 18.52. - -* X windows version 10 is supported under system V. - -* Pop-up menus are now supported with the same Lisp interface in -both version 10 and 11 of X windows. - -* C-x 4 a is a new command to edit a change-log entry in another window. - -* The emacs client program now allows an option +NNN to specify the -line number to go to in the file whose name follows. Thus, - emacsclient foo.c +45 bar.c -will find the files `foo.c' and `bar.c', going to line 45 in `bar.c'. - -* Dired allows empty directories to be deleted like files. - -* When the terminal type is used to find a terminal-specific file to -run, Emacs now tries the entire terminal type first. If that doesn't -yield a file that exists, the last hyphen and what follows it is -stripped. If that doesn't yield a file that exists, the previous -hyphen is stripped, and so on until all hyphens are gone. For -example, if the terminal type is `aaa-48-foo', Emacs will try first -`term/aaa-48-foo.el', then `term/aaa-48.el' and finally `term/aaa.el'. - -Underscores now receive the same treatment as hyphens. - -* Texinfo features: @defun, etc. texinfo-show-structure. -New template commands. texinfo-format-region. - -* The special "local variable" `eval' is now ignored if you are running -as root. - -* New command `c-macro-expand' shows the result of C macro expansion -in the region. It works using the C preprocessor, so its results -are completely accurate. - -* Errors in trying to auto save now flash error messages for a few seconds. - -* Killing a buffer now sends SIGHUP to the buffer's process. - -* New hooks. - -** `spell-region' now allows you to filter the text before spelling-checking. -If the value of `spell-filter' is non-nil, it is called, with no arguments, -looking at a temporary buffer containing a copy of the text to be checked. -It can alter the text freely before the spell program sees it. - -** The variable `lpr-command' now specifies the command to be used when -you use the commands to print text (such as M-x print-buffer). - -** Posting netnews now calls the value of `news-inews-hook' (if not nil) -as a function of no arguments before the actual posting. - -** Rmail now calls the value of `rmail-show-message-hook' (if not nil) -as a function of no arguments, each time a new message is selected. - -** `kill-emacs' calls the value of `kill-emacs-hook' as a function of no args -unless Emacs is running in batch mode. - -* New libraries. -See the source code of each library for more information. - -** icon.el: a major mode for editing programs written in Icon. - -** life.el: a simulator for the cellular automaton "life". Load the -library and run M-x life. - -** doctex.el: a library for converting the Emacs `etc/DOC' file of -documentation strings into TeX input. - -** saveconf.el: a library which records the arrangement of windows and -buffers when you exit Emacs, and automatically recreates the same -setup the next time you start Emacs. - -** uncompress.el: a library that automatically uncompresses files -when you visit them. - -** c-fill.el: a mode for editing filled comments in C. - -** kermit.el: an extended version of shell-mode designed for running kermit. - -** spook.el: a library for adding some "distract the NSA" keywords to every -message you send. - -** hideif.el: a library for hiding parts of a C program based on preprocessor -conditionals. - -** autoinsert.el: a library to put in some initial text when you visit -a nonexistent file. The text used depends on the major mode, and -comes from a directory of files created by you. - -* New programming features. - -** The variable `window-system-version' now contains the version number -of the window system you are using (if appropriate). When using X windows, -its value is either 10 or 11. - -** (interactive "N") uses the prefix argument if any; otherwise, it reads -a number using the minibuffer. - -** VMS: there are two new functions `vms-system-info' and `shrink-to-icon'. -The former allows you to get many kinds of system status information. -See its self-documentation for full details. -The second is used with the window system: it iconifies the Emacs window. - -** VMS: the new function `define-logical-name' allows you to create -job-wide logical names. The old function `define-dcl-symbol' has been -removed. - -Changes in version 18.50. - -* X windows version 11 is supported. - -Define X11 in config.h if you want X version 11 instead of version 10. - -* The command M-x gdb runs the GDB debugger as an inferior. -It asks for the filename of the executable you want to debug. - -GDB runs as an inferior with I/O through an Emacs buffer. All the -facilities of Shell mode are available. In addition, each time your -program stops, and each time you select a new stack frame, the source -code is displayed in another window with an arrow added to the line -where the program is executing. - -Special GDB-mode commands include M-s, M-n, M-i, M-u, M-d, and C-c C-f -which send the GDB commands `step', `next', `stepi', `up', `down' -and `finish'. - -In any source file, the commands C-x SPC tells GDB to set a breakpoint -on the current line. - -* M-x calendar displays a three-month calendar. - -* C-u 0 C-x C-s never makes a backup file. - -This is a way you can explicitly request not to make a backup. - -* `term-setup-hook' is for users only. - -Emacs never uses this variable for internal purposes, so you can freely -set it in your `.emacs' file to make Emacs do something special after -loading any terminal-specific setup file from `lisp/term'. - -* `copy-keymap' now copies recursive submaps. - -* New overlay-arrow feature. - -If you set the variable `overlay-arrow-string' to a string -and `overlay-arrow-position' to a marker, that string is displayed on -the screen at the position of that marker, hiding whatever text would -have appeared there. If that position isn't on the screen, or if -the buffer the marker points into isn't displayed, there is no effect. - -* -batch mode can read from the terminal. - -It now works to use `read-char' to do terminal input in a noninteractive -Emacs run. End of file causes Emacs to exit. - -* Variables `data-bytes-used' and `data-bytes-free' removed. - -These variables cannot really work because the 24-bit range of an -integer in (most ports of) GNU Emacs is not large enough to hold their -values on many systems. - -Changes in version 18.45, since version 18.41. - -* C indentation parameter `c-continued-brace-offset'. - -This parameter's value is added to the indentation of any -line that is in a continuation context and starts with an open-brace. -For example, it applies to the open brace shown here: - - if (x) - { - -The default value is zero. - -* Dabbrev expansion (Meta-/) preserves case. - -When you use Meta-/ to search the buffer for an expansion of an -abbreviation, if the expansion found is all lower case except perhaps -for its first letter, then the case pattern of the abbreviation -is carried over to the expansion that replaces it. - -* TeX-mode syntax. - -\ is no longer given "escape character" syntax in TeX mode. It now -has the syntax of an ordinary punctuation character. As a result, -\[...\] and such like are considered to balance each other. - -* Mail-mode automatic Reply-to field. - -If the variable `mail-default-reply-to' is non-`nil', then each time -you start to compose a message, a Reply-to field is inserted with -its contents taken from the value of `mail-default-reply-to'. - -* Where is your .emacs file? - -If you run Emacs under `su', so your real and effective uids are -different, Emacs uses the home directory associated with the real uid -(the name you actually logged in under) to find the .emacs file. - -Otherwise, Emacs uses the environment variable HOME to find the .emacs -file. - -The .emacs file is not loaded at all if -batch is specified. - -* Prolog mode is the default for ".pl" files. - -* File names are not case-sensitive on VMS. - -On VMS systems, all file names that you specify are converted to upper -case. You can use either upper or lower case indiscriminately. - -* VMS-only function 'define-dcl-symbol'. - -This is a new name for the function formerly called -`define-logical-name'. - -Editing Changes in Emacs 18 - -* Additional systems and machines are supported. - -GNU Emacs now runs on Vax VMS. However, many facilities that are normally -implemented by running subprocesses do not work yet. This includes listing -a directory and sending mail. There are features for running subprocesses -but they are incompatible with those on Unix. I hope that some of -the VMS users can reimplement these features for VMS (compatibly for -the user, if possible). - -VMS wizards are also asked to work on making the subprocess facilities -more upward compatible with those on Unix, and also to rewrite their -internals to use the same Lisp objects that are used on Unix to -represent processes. - -In addition, the TI Nu machine running Unix system V, the AT&T 3b, and -the Wicat, Masscomp, Integrated Solutions, Alliant, Amdahl uts, Mips, -Altos 3068 and Gould Unix systems are now supported. The IBM PC-RT is -supported under 4.2, but not yet under system V. The GEC 93 is close -to working. The port for the Elxsi is partly merged. See the file -MACHINES for full status information and machine-specific installation -advice. - -* Searching is faster. - -Forward search for a text string, or for a regexp that is equivalent -to a text string, is now several times faster. Motion by lines and -counting lines is also faster. - -* Memory usage improvements. - -It is no longer possible to run out of memory during garbage -collection. As a result, running out of memory is never fatal. This -is due to a new garbage collection algorithm which compactifies -strings in place rather than copying them. Another consequence of the -change is a reduction in total memory usage and a slight increase in -garbage collection speed. - -* Display changes. - -** Editing above top of screen. - -When you delete or kill or alter text that reaches to the top of the -screen or above it, so that display would start in the middle of a -line, Emacs will usually attempt to scroll the text so that display -starts at the beginning of a line again. - -** Yanking in the minibuffer. - -The message "Mark Set" is no longer printed when the minibuffer is -active. This is convenient with many commands, including C-y, that -normally print such a message. - -** Cursor appears in last line during y-or-n questions. - -Questions that want a `y' or `n' answer now move the cursor -to the last line, following the question. - -* Library loading changes. - -`load' now considers all possible suffixes (`.elc', `.el' and none) -for each directory in `load-path' before going on to the next directory. -It now accepts an optional fourth argument which, if non-nil, says to -use no suffixes; then the file name must be given in full. The search -of the directories in `load-path' goes on as usual in this case, but -it too can be prevented by passing an absolute file name. - -The value of `load-path' no longer by default includes nil (meaning to -look in the current default directory). The idea is that `load' should -be used to search the path only for libraries to be found in the standard -places. If you want to override system libraries with your own, place -your own libraries in one special directory and add that directory to the -front of `load-path'. - -The function `load' is no longer a command; that is to say, `M-x load' -is no longer allowed. Instead, there are two commands for loading files. -`M-x load-library' is equivalent to the old meaning of `M-x load'. -`M-x load-file' reads a file name with completion and defaulting -and then loads exactly that file, with no searching and no suffixes. - -* Emulation of other editors. - -** `edt-emulation-on' starts emulating DEC's EDT editor. - -Do `edt-emulation-off' to return Emacs to normal. - -** `vi-mode' and `vip-mode' starts emulating vi. - -These are two different vi emulations provided by GNU Emacs users. -We are interested in feedback as to which emulation is preferable. - -See the documentation and source code for these functions -for more information. - -** `set-gosmacs-bindings' emulates Gosling Emacs. - -This command changes many global bindings to resemble those of -Gosling Emacs. The previous bindings are saved and can be restored using -`set-gnu-bindings'. - -* Emulation of a display terminal. - -Within Emacs it is now possible to run programs (such as emacs or -supdup) which expect to do output to a visual display terminal. - -See the function `terminal-emulator' for more information. - -* New support for keypads and function keys. - -There is now a first attempt at terminal-independent support for -keypad and function keys. - -Emacs now defines a standard set of key-names for function and keypad -keys, and provides standard hooks for defining them. Most of the -standard key-names have default definitions built into Emacs; you can -override these in a terminal-independent manner. The default definitions -and the conventions for redefining them are in the file `lisp/keypad.el'. - -These keys on the terminal normally work by sending sequences of -characters starting with ESC. The exact sequences used vary from -terminal to terminal. Emacs interprets them in two stages: -in the first stage, terminal-dependent sequences are mapped into -the standard key-names; then second stage maps the standard key-names -into their definitions in a terminal-independent fashion. - -The terminal-specific file `term/$TERM.el' now is responsible only for -establishing the mapping from the terminal's escape sequences into -standard key-names. It no longer knows what Emacs commands are -assigned to the standard key-names. - -One other change in terminal-specific files: if the value of the TERM -variable contains a hyphen, only the part before the first hyphen is -used in forming the name of the terminal-specific file. Thus, for -terminal type `aaa-48', the file loaded is now `term/aaa.el' rather -than `term/aaa-48.el'. - -* New startup command line options. - -`-i FILE' or `-insert FILE' in the command line to Emacs tells Emacs to -insert the contents of FILE into the current buffer at that point in -command line processing. This is like using the command M-x insert-file. - -`-funcall', `-load', `-user' and `-no-init-file' are new synonyms for -`-f', `-l', `-u' and `-q'. - -`-nw' means don't use a window system. If you are using a terminal -emulator on the X window system and you want to run Emacs to work through -the terminal emulator instead of working directly with the window system, -use this switch. - -* Buffer-sorting commands. - -Various M-x commands whose names start with `sort-' sort parts of -the region: - -sort-lines divides the region into lines and sorts them alphabetically. -sort-pages divides into pages and sorts them alphabetically. -sort-paragraphs divides into paragraphs and sorts them alphabetically. -sort-fields divides into lines and sorts them alphabetically - according to one field in the line. - The numeric argument specifies which field (counting - from field 1 at the beginning of the line). Fields in a line - are separated by whitespace. -sort-numeric-fields - is similar but converts the specified fields to numbers - and sorts them numerically. -sort-columns divides into lines and sorts them according to the contents - of a specified range of columns. - -Refer to the self-documentation of these commands for full usage information. - -* Changes in various commands. - -** `occur' output now serves as a menu. `occur-menu' command deleted. - -`M-x occur' now allows you to move quickly to any of the occurrences -listed. Select the `*Occur*' buffer that contains the output of `occur', -move point to the occurrence you want, and type C-c C-c. -This will move point to the same occurrence in the buffer that the -occurrences were found in. - -The command `occur-menu' is thus obsolete, and has been deleted. - -One way to get a list of matching lines without line numbers is to -copy the text to another buffer and use the command `keep-lines'. - -** Incremental search changes. - -Ordinary and regexp incremental searches now have distinct default -search strings. Thus, regexp searches recall only previous regexp -searches. - -If you exit an incremental search when the search string is empty, -the old default search string is kept. The default does not become -empty. - -Reversing the direction of an incremental search with C-s or C-r -when the search string is empty now does not get the default search -string. It leaves the search string empty. A second C-s or C-r -will get the default search string. As a result, you can do a reverse -incremental regexp search with C-M-s C-r. - -If you add a `*', `?' or `\|' to an incremental search regexp, -point will back up if that is appropriate. For example, if -you have searched for `ab' and add a `*', point moves to the -first match for `ab*', which may be before the match for `ab' -that was previously found. - -If an incremental search is failing and you ask to repeat it, -it will start again from the beginning of the buffer (or the end, -if it is a backward search). - -The search-controlling parameters `isearch-slow-speed' and -`isearch-slow-window-lines' have now been renamed to start with -`search' instead of `isearch'. Now all the parameters' names start -with `search'. - -If `search-slow-window-lines' is negative, the slow search window -is put at the top of the screen, and the absolute value or the -negative number specifies the height of it. - -** Undo changes - -The undo command now will mark the buffer as unmodified only when it is -identical to the contents of the visited file. - -** C-M-v in minibuffer. - -If while in the minibuffer you request help in a way that uses a -window to display something, then until you exit the minibuffer C-M-v -in the minibuffer window scrolls the window of help. - -For example, if you request a list of possible completions, C-M-v can -be used reliably to scroll the completion list. - -** M-TAB command. - -Meta-TAB performs completion on the Emacs Lisp symbol names. The sexp -in the buffer before point is compared against all existing nontrivial -Lisp symbols and completed as far as is uniquely determined by them. -Nontrivial symbols are those with either function definitions, values -or properties. - -If there are multiple possibilities for the very next character, a -list of possible completions is displayed. - -** Dynamic abbreviation package. - -The new command Meta-/ expands an abbreviation in the buffer before point -by searching the buffer for words that start with the abbreviation. - -** Changes in saving kbd macros. - -The commands `write-kbd-macro' and `append-kbd-macro' have been -deleted. The way to save a keyboard macro is to use the new command -`insert-kbd-macro', which inserts Lisp code to define the macro as -it is currently defined into the buffer before point. Visit a Lisp -file such as your Emacs init file `~/.emacs', insert the macro -definition (perhaps deleting an old definition for the same macro) -and then save the file. - -** C-x ' command. - -The new command C-x ' (expand-abbrev) expands the word before point as -an abbrev, even if abbrev-mode is not turned on. - -** Sending to inferior Lisp. - -The command C-M-x in Lisp mode, which sends the current defun to -an inferior Lisp process, now works by writing the text into a temporary -file and actually sending only a `load'-form to load the file. -As a result, it avoids the Unix bugs that used to strike when the -text was above a certain length. - -With a prefix argument, this command now makes the inferior Lisp buffer -appear on the screen and scrolls it so that the bottom is showing. - -Two variables `inferior-lisp-load-command' and `inferior-lisp-prompt', -exist to customize these feature for different Lisp implementations. - -** C-x n p now disabled. - -The command C-x n p, a nonrecomended command which narrows to the current -page, is now initially disabled like C-x n n. - -* Dealing with files. - -** C-x C-v generalized - -This command is now allowed even if the current buffer is not visiting -a file. As usual, it kills the current buffer and replaces it with a -newly found file. - -** M-x recover-file improved; auto save file names changed. - -M-x recover-file now checks whether the last auto-save file is more -recent than the real visited file before offering to read in the -auto-save file. If the auto-save file is newer, a directory listing -containing the two files is displayed while you are asked whether you -want the auto save file. - -Visiting a file also makes this check. If the auto-save file is more recent, -a message is printed suggesting that you consider using M-x recover file. - -Auto save file names now by default have a `#' at the end as well -as at the beginning. This is so that `*.c' in a shell command -will never match auto save files. - -On VMS, auto save file names are made by appending `_$' at the front -and `$' at the end. - -When you change the visited file name of a buffer, the auto save file -is now renamed to belong to the new visited file name. - -You can customize the way auto save file names are made by redefining -the two functions `make-auto-save-file-name' and `auto-save-file-name-p', -both of which are defined in `files.el'. - -** Modifying a buffer whose file is changed on disk is detected instantly. - -On systems where clash detection (locking of files being edited) is -implemented, Emacs also checks the first time you modify a buffer -whether the file has changed on disk since it was last visited or saved. -If it has, you are asked to confirm that you want to change the buffer. - -** Exiting Emacs offers to save `*mail*'. - -Emacs can now know about buffers that it should offer to save on exit -even though they are not visiting files. This is done for any buffer -which has a non-nil local value of `buffer-offer-save'. By default, -Mail mode provides such a local value. - -** Backup file changes. - -If a backup file cannot be written in the directory of the visited file -due to fascist file protection, a backup file is now written in your home -directory as `~/%backup%~'. Only one such file is made, ever, so only -the most recently made such backup is available. - -When backup files are made by copying, the last-modification time of the -original file is now preserved in the backup copy. - -** Visiting remote files. - -On an internet host, you can now visit and save files on any other -internet host directly from Emacs with the commands M-x ftp-find-file -and M-x ftp-write-file. Specify an argument of the form HOST:FILENAME. -Since standard internet FTP is used, the other host may be any kind -of machine and is not required to have any special facilities. - -The first time any one remote host is accessed, you will be asked to -give the user name and password for use on that host. FTP is reinvoked -each time you ask to use it, but previously specified user names and -passwords are remembered automatically. - -** Dired `g' command. - -`g' in Dired mode is equivalent to M-x revert-buffer; it causes the -current contents of the same directory to be read in. - -* Changes in major modes. - -** C mode indentation change. - -The binding of Linefeed is no longer changed by C mode. It once again -has its normal meaning, which is to insert a newline and then indent -afterward. - -The old definition did one additional thing: it reindented the line -before the new newline. This has been removed because it made the -command twice as slow. The only time it was really useful was after the -insertion of an `else', since the fact of starting with `else' may change -the way that line is indented. Now you will have to type TAB again -yourself to reindent the `else' properly. - -If the variable `c-tab-always-indent' is set to `nil', the TAB command -in C mode, with no argument, will just insert a tab character if there -is non-whitespace preceding point on the current line. Giving it a -prefix argument will force reindentation of the line (as well as -of the compound statement that begins after point, if any). - -** Fortran mode now exists. - -This mode provides commands for motion and indentation of Fortran code, -plus built-in abbrevs for Fortran keywords. For details, see the manual -or the on-line documentation of the command `fortran-mode'. - -** Scribe mode now exists. - -This mode does something useful for editing files of Scribe input. -It is used automatically for files with names ending in ".mss". - -** Modula2 and Prolog modes now exist. - -These modes are for editing programs in the languages of the same names. -They can be selected with M-x modula-2-mode and M-x prolog-mode. - -** Telnet mode changes. - -The telnet mode special commands have now been assigned to C-c keys. -Most of them are the same as in Shell mode. - -** Picture mode changes. - -The special picture-mode commands to specify the direction of cursor -motion after insertion have been moved to C-c keys. The commands to -specify diagonal motion were already C-c keys; they are unchanged. -The keys to specify horizontal or vertical motion are now -C-c < (left), C-c > (right), C-c ^ (up) and C-c . (down). - -** Nroff mode comments. - -Comments are now supported in Nroff mode. The standard comment commands -such as M-; and C-x ; know how to insert, align and delete comments -that start with backslash-doublequote. - -** LaTeX mode. - -LaTeX mode now exists. Use M-x latex-mode to select this mode, and -M-x plain-tex-mode to select the previously existing mode for Plain -TeX. M-x tex-mode attempts to examine the contents of the buffer and -choose between latex-mode and plain-tex-mode accordingly; if the -buffer is empty or it cannot tell, the variable `TeX-default-mode' -controls the choice. Its value should be the symbol for the mode to -be used. - -The facilities for running TeX on all or part of the buffer -work with LaTeX as well. - -Some new commands available in both modes: - -C-c C-l recenter the window showing the TeX output buffer - so most recent line of output can be seen. -C-c C-k kill the TeX subprocess. -C-c C-q show the printer queue. -C-c C-f close a block (appropriate for LaTeX only). - If the current line contains a \begin{...}, - this inserts an \end{...} on the following line - and puts point on a blank line between them. - -** Outline mode changes. - -Invisible lines in outline mode are now indicated by `...' at the -end of the previous visible line. - -The special outline heading motion commands are now all on C-c keys. -A few new ones have been added. Here is a full list: - -C-c C-n Move to next visible heading (formerly M-}) -C-c C-p Move to previous visible heading (formerly M-{) -C-c C-f Move to next visible heading at the same level. - Thus, if point is on a level-2 heading line, - this command moves to the next visible level-2 heading. -C-c C-b Move to previous visible heading at the same level. -C-c C-u Move up to previous visible heading at a higher level. - -The variable `outline-regexp' now controls recognition of heading lines. -Any line whose beginning matches this regexp is a heading line. -The depth in outline structure is determined by the length of -the string that matches. - -A line starting with a ^L (formfeed) is now by default considered -a header line. - -* Mail reading and sending. - -** MH-E changes. - -MH-E has been extensively modified and improved since the v17 release. -It contains many new features, including commands to: extracted failed -messages, kill a draft message, undo changes to a mail folder, monitor -delivery of a letter, print multiple messages, page digests backwards, -insert signatures, and burst digests. Also, many commands have been -made to able to deal with named sequences of messages, instead of -single messages. MH-E also has had numerous bugs fixed and commands -made to run faster. Furthermore, its keybindings have been changed to -be compatible with Rmail and the rest of GNU Emacs. - -** Mail mode changes. - -The C-c commands of mail mode have been rearranged: - -C-c s, C-c c, C-c t and C-c b (move point to various header fields) -have been reassigned as C-c C-f C-s, C-c C-f C-c, C-c C-f C-t and C-c -C-f C-b. C-c C-f is for "field". - -C-c y, C-c w and C-c q have been changed to C-c C-y, C-c C-w and C-c C-q. - -Thus, C-c LETTER is always unassigned. - -** Rmail C-r command changed to w. - -The Rmail command to edit the current message is now `w'. This change -has been made because people frequently type C-r while in Rmail hoping -to do a reverse incremental search. That now works. - -* Rnews changes. - -** Caesar rotation added. - -The function news-caesar-buffer-body performs the rot13 code on the -body of a news message. You can also specify the number to rotate by, -as a prefix argument. The function is bound to C-c C-r in both -News mode and News Reply mode. - -** rmail-output command added. - -The C-o command has been bound to rmail-output in news-mode. -This allows one to append an article to a file which is in either Unix -mail or RMAIL format. - -** news-reply-mode changes. - -The C-c commands of news reply mode have been rearranged and changed, -so that C-c LETTER is always unassigned: - -C-c y, C-c w and C-c q have been changed to C-c C-y, C-c C-w and C-c C-q. - -C-c c, C-c t, and C-c b (move to various mail header fields) have been -deleted (they make no sense for posting and replying to USENET). - -C-c s (move to Subject: header field) has been reassigned as C-c C-f -C-s. C-c C-f is for "field". Several additional move to news header -field commands have been added. - -The local news-reply-mode bindings now look like this: - -C-c C-s news-inews (post the message) C-c C-c news-inews -C-c C-f move to a header field (and create it if there isn't): - C-c C-f C-n move to Newsgroups: C-c C-f C-s move to Subj: - C-c C-f C-f move to Followup-To: C-c C-f C-k move to Keywords: - C-c C-f C-d move to Distribution: C-c C-f C-a move to Summary: -C-c C-y news-reply-yank-original (insert current message, in NEWS). -C-c C-q mail-fill-yanked-message (fill what was yanked). -C-c C-r caesar rotate all letters by 13 places in the article's body (rot13). - -* Changes in tags handling. - -** M-. (`find-tag') and similar commands now look first for an exact -match in the tags table, and try substring matches only afterward. - -** The new command `find-tag-regexp' visits successively the tags that -match a specified regular expression. - -** You can now use more than one tags table. Using `visit-tags-table' -to load a new tags table does not discard the other tables previously -loaded. The other tags commands use all the tags tables that are loaded; -the first tags table used is the one that mentions the current visited file. - -** Tags tables can now be told to "include" other tags tables. This means -the tags table gives the file names of other tags tables. Tags command -then search included tags tables after the including table (but before any -other tags tables you have loaded). Included tags tables can make it much -easier and more efficient to maintain a tags table for a large package with -many subdirectories--there is one tags table for each subdirectory, and a -master tags table that includes each subdirectory table. You use `-i' -options to `etags' when creating the tags table to give the file names of -the included tables. - -** You can now use the tags table for completion of names during -ordinary editing. The command M-TAB (except in Emacs Lisp mode) -completes the identifier in the buffer before point, using the set of -all tags as the list of possible completions. - -** `tags-query-replace' and `tags-search' changes. - -These functions no longer permanently create buffers for files that -are searched but that do not contain any matches for the search -pattern. - -* Existing Emacs usable as a server. - -Programs such as mailers that invoke "the editor" as an inferior -to edit some text can now be told to use an existing Emacs process -instead of creating a new editor. - -To do this, you must have an Emacs process running and capable of -doing terminal I/O at the time you want to invoke it. This means that -either you are using a window system and give Emacs a separate window -or you run the other programs as inferiors of Emacs (such as, using -M-x shell). - -First prepare the existing Emacs process by loading the `server' -library and executing M-x server-start. (Your .emacs can do this -automatically.) - -Now tell the other programs to use, as "the editor", the Emacs client -program (etc/emacsclient, located in the same directory as this file). -This can be done by setting the environment variable EDITOR. - -When another program invokes the emacsclient as "the editor", the -client actually transfers the file names to be edited to the existing -Emacs, which automatically visits the files. - -When you are done editing a buffer for a client, do C-x # (server-edit). -This marks that buffer as done, and selects the next buffer that the client -asked for. When all the buffers requested by a client are marked in this -way, Emacs tells the client program to exit, so that the program that -invoked "the editor" will resume execution. - -You can only have one server Emacs at a time, but multiple client programs -can put in requests at the same time. - -The client/server work only on Berkeley Unix, since they use the Berkeley -sockets mechanism for their communication. - -Changes in Lisp programming in Emacs version 18. - -* Init file changes. - -** Suffixes no longer accepted on `.emacs'. - -Emacs will no longer load a file named `.emacs.el' or `emacs.elc' -in place of `.emacs'. This is so that it will take less time to -find `.emacs'. If you want to compile your init file, give it another -name and make `.emacs' a link to the `.elc' file, or make it contain -a call to `load' to load the `.elc' file. - -** `default-profile' renamed to `default', and loaded after `.emacs'. - -It used to be the case that the file `default-profile' was loaded if -and only if `.emacs' was not found. - -Now the name `default-profile' is not used at all. Instead, a library -named `default' is loaded after the `.emacs' file. `default' is loaded -whether the `.emacs' file exists or not. However, loading of `default' -can be prevented if the `.emacs' file sets `inhibit-default-init' to non-nil. - -In fact, you would call the default file `default.el' and probably would -byte-compile it to speed execution. - -Note that for most purposes you are better off using a `site-init' library -since that will be loaded before the runnable Emacs is dumped. By using -a `site-init' library, you avoid taking up time each time Emacs is started. - -** inhibit-command-line has been eliminated. - -This variable used to exist for .emacs files to set. It has been -eliminated because you can get the same effect by setting -command-line-args to nil and setting inhibit-startup-message to t. - -* `apply' is more general. - -`apply' now accepts any number of arguments. The first one is a function; -the rest are individual arguments to pass to that function, except for the -last, which is a list of arguments to pass. - -Previously, `apply' required exactly two arguments. Its old behavior -follows as a special case of the new definition. - -* New code-letter for `interactive'. - -(interactive "NFoo: ") is like (interactive "nFoo: ") in reading -a number using the minibuffer to serve as the argument; however, -if a prefix argument was specified, it uses the prefix argument -value as the argument, and does not use the minibuffer at all. - -This is used by the `goto-line' and `goto-char' commands. - -* Semantics of variables. - -** Built-in per-buffer variables improved. - -Several built-in variables which in the past had a different value in -each buffer now behave exactly as if `make-variable-buffer-local' had -been done to them. - -These variables are `tab-width', `ctl-arrow', `truncate-lines', -`fill-column', `left-margin', `mode-line-format', `abbrev-mode', -`overwrite-mode', `case-fold-search', `auto-fill-hook', -`selective-display', `selective-display-ellipses'. - -To be precise, each variable has a default value which shows through -in most buffers and can be accessed with `default-value' and set with -`set-default'. Setting the variable with `setq' makes the variable -local to the current buffer. Changing the default value has retroactive -effect on all buffers in which the variable is not local. - -The variables `default-case-fold-search', etc., are now obsolete. -They now refer to the default value of the variable, which is not -quite the same behavior as before, but it should enable old init files -to continue to work. - -** New per-buffer variables. - -The variables `fill-prefix', `comment-column' and `indent-tabs-mode' -are now per-buffer. They work just like `fill-column', etc. - -** New function `setq-default'. - -`setq-default' sets the default value of a variable, and uses the -same syntax that `setq' accepts: the variable name is not evaluated -and need not be quoted. - -`(setq-default case-fold-search nil)' would make searches case-sensitive -in all buffers that do not have local values for `case-fold-search'. - -You can set multiple variables sequentially, each with its own value, -in `setq-default' just as in `setq'. - -** Functions `global-set' and `global-value' deleted. - -These functions were never used except by mistake by users expecting -the functionality of `set-default' and `default-value'. - -* Changes in defaulting of major modes. - -When `default-major-mode' is `nil', new buffers are supposed to -get their major mode from the buffer that is current. However, -certain major modes (such as Dired mode, Rmail mode, Rmail Summary mode, -and others) are not reasonable to use in this way. - -Now such modes' names have been given non-`nil' `mode-class' properties. -If the current buffer's mode has such a property, Fundamental mode is -used as the default for newly created buffers. - -* `where-is-internal' requires additional arguments. - -This function now accepts three arguments, two of them required: -DEFINITION, the definition to search for; LOCAL-KEYMAP, the keymap -to use as the local map when doing the searching, and FIRST-ONLY, -which is nonzero to return only the first key found. - -This function returns a list of keys (strings) whose definitions -(in the LOCAL-KEYMAP or the current global map) are DEFINITION. - -If FIRST-ONLY is non-nil, it returns a single key (string). - -This function has changed incompatibly in that now two arguments -are required when previously only one argument was allowed. To get -the old behavior of this function, write `(current-local-map)' as -the expression for the second argument. - -The incompatibility is sad, but `nil' is a legitimate value for the -second argument (it means there is no local keymap), so it cannot also -serve as a default meaning to use the current local keymap. - -* Abbrevs with hooks. - -When an abbrev defined with a hook is expanded, it now performs the -usual replacement of the abbrev with the expansion before running the -hook. Previously the abbrev itself was deleted but the expansion was -not inserted. - -* Function `scan-buffer' deleted. - -Use `search-forward' or `search-backward' in place of `scan-buffer'. -You will have to rearrange the arguments. - -* X window interface improvements. - -** Detect release of mouse buttons. - -Button-up events can now be detected. See the file `lisp/x-mouse.el' -for details. - -** New pop-up menu facility. - -The new function `x-popup-menu' pops up a menu (in a X window) -and returns an indication of which selection the user made. -For more information, see its self-documentation. - -* M-x disassemble. - -This command prints the disassembly of a byte-compiled Emacs Lisp function. - -Would anyone like to interface this to the debugger? - -* `insert-buffer-substring' can insert part of the current buffer. - -The old restriction that the text being inserted had to come from -a different buffer is now lifted. - -When inserting text from the current buffer, the text to be inserted -is determined from the specified bounds before any copying takes place. - -* New function `substitute-key-definition'. - -This is a new way to replace one command with another command as the -binding of whatever keys may happen to refer to it. - -(substitute-key-definition OLDDEF NEWDEF KEYMAP) looks through KEYMAP -for keys defined to run OLDDEF, and rebinds those keys to run NEWDEF -instead. - -* New function `insert-char'. - -Insert a specified character, a specified number of times. - -* `mark-marker' changed. - -When there is no mark, this now returns a marker that points -nowhere, rather than `nil'. - -* `ding' accepts argument. - -When given an argument, the function `ding' does not terminate -execution of a keyboard macro. Normally, `ding' does terminate -all macros that are currently executing. - -* New function `minibuffer-depth'. - -This function returns the current depth in minibuffer activations. -The value is zero when the minibuffer is not in use. -Values greater than one are possible if the user has entered the -minibuffer recursively. - -* New function `documentation-property'. - -(documentation-property SYMBOL PROPNAME) is like (get SYMBOL PROPNAME), -except that if the property value is a number `documentation-property' -will take that number (or its absolute value) as a character position -in the DOC file and return the string found there. - -(documentation-property VAR 'variable-documentation) is the proper -way for a Lisp program to get the documentation of variable VAR. - -* New documentation-string expansion feature. - -If a documentation string (for a variable or function) contains text -of the form `\', it means that all command names specified in -`\[COMMAND]' construct from that point on should be turned into keys -using the value of the variable FOO as the local keymap. Thus, for example, - - `\\[eval-defun] evaluates the defun containing point.' - -will expand into - - "ESC C-x evaluates the defun containing point." - -regardless of the current major mode, because ESC C-x is defined to -run `eval-defun' in the keymap `emacs-lisp-mode-map'. The effect is -to show the key for `eval-defun' in Emacs Lisp mode regardless of the -current major mode. - -The `\<...>' construct applies to all `\[...]' constructs that follow it, -up to the end of the documentation string or the next `\<...>'. - -Without `\<...>', the keys for commands specified in `\[...]' are found -in the current buffer's local map. - -The current global keymap is always searched second, whether `\<...>' -has been used or not. - -* Multiple hooks allowed in certain contexts. - -The old hook variables `find-file-hook', `find-file-not-found-hook' and -`write-file-hook' have been replaced. - -The replacements are `find-file-hooks', `find-file-not-found-hooks' -and `write-file-hooks'. Each holds a list of functions to be called; -by default, `nil', for no functions. The functions are called in -order of appearance in the list. - -In the case of `find-file-hooks', all the functions are executed. - -In the case of `find-file-not-found-hooks', if any of the functions -returns non-`nil', the rest of the functions are not called. - -In the case of `write-file-hooks', if any of the functions returns -non-`nil', the rest of the functions are not called, and the file is -considered to have been written already; so actual writing in the -usual way is not done. If `write-file-hooks' is local to a buffer, -it is set to its global value if `set-visited-file-name' is called -(and thus by C-x C-w as well). - -`find-file-not-found-hooks' and `write-file-hooks' can be used -together to implement editing of files that are not stored as Unix -files: stored in archives, or inside version control systems, or on -other machines running other operating systems and accessible via ftp. - -* New hooks for suspending Emacs. - -Suspending Emacs runs the hook `suspend-hook' before suspending -and the hook `suspend-resume-hook' if the suspended Emacs is resumed. -Running a hook is done by applying the variable's value to no arguments -if the variable has a non-`nil' value. If `suspend-hook' returns -non-`nil', then suspending is inhibited and so is running the -`suspend-resume-hook'. The non-`nil' value means that the `suspend-hook' -has done whatever suspending is required. - -* Disabling commands can print a special message. - -A command is disabled by giving it a non-`nil' `disabled' property. -Now, if this property is a string, it is included in the message -printed when the user tries to run the command. - -* Emacs can open TCP connections. - -The function `open-network-stream' opens a TCP connection to -a specified host and service. Its value is a Lisp object that represents -the connection. The object is a kind of "subprocess", and I/O are -done like I/O to subprocesses. - -* Display-related changes. - -** New mode-line control features. - -The display of the mode line used to be controlled by a format-string -that was the value of the variable `mode-line-format'. - -This variable still exists, but it now allows more general values, -not just strings. Lists, cons cells and symbols are also meaningful. - -The mode line contents are created by outputting various mode elements -one after the other. Here are the kinds of objects that can be -used as mode elements, and what they do in the display: - - string the contents of the string are output to the mode line, - and %-constructs are replaced by other text. - - t or nil ignored; no output results. - - symbol the symbol's value is used. If the value is a string, - the string is output verbatim to the mode line - (so %-constructs are not interpreted). Otherwise, - the symbol's value is processed as a mode element. - - list (whose first element is a string or list or cons cell) - the elements of the list are treated as as mode elements, - so that the output they generate is concatenated, - - list (whose car is a symbol) - if the symbol's value is non-nil, the second element of the - list is treated as a mode element. Otherwise, the third - element (if any) of the list is treated as a mode element. - - cons (whose car is a positive integer) - the cdr of the cons is used as a mode element, but - the text it produces is padded, if necessary, to have - at least the width specified by the integer. - - cons (whose car is a negative integer) - the cdr of the cons is used as a mode element, but - the text it produces is truncated, if necessary, to have - at most the width specified by the integer. - -There is always one mode element to start with, that being the value of -`mode-line-format', but if this value is a list then it leads to several -more mode elements, which can lead to more, and so on. - -There is one new %-construct for mode elements that are strings: -`%n' displays ` Narrow' for a buffer that is narrowed. - -The default value of `mode-line-format' refers to several other variables. -These variables are `mode-name', `mode-line-buffer-identification', -`mode-line-process', `mode-line-modified', `global-mode-string' and -`minor-mode-alist'. The first four are local in every buffer in which they -are changed from the default. - -mode-name Name of buffer's major mode. Local in every buffer. - -mode-line-buffer-identification - Normally the list ("Emacs: %17b"), it is responsible - for displaying text to indicate what buffer is being shown - and what kind of editing it is doing. `Emacs' means - that a file of characters is being edited. Major modes - such as Info and Dired which edit or view other kinds - of data often change this value. This variables becomes - local to the current buffer if it is setq'd. - -mode-line-process - Normally nil, this variable is responsible for displaying - information about the process running in the current buffer. - M-x shell-mode and M-x compile alter this variable. - -mode-line-modified - This variable is responsible for displaying the indication - of whether the current buffer is modified or read-only. - By default its value is `("--%*%*-")'. - -minor-mode-alist - This variable is responsible for displaying text for those - minor modes that are currently enabled. Its value - is a list of elements of the form (VARIABLE STRING), - where STRING is to be displayed if VARIABLE's value - (in the buffer whose mode line is being displayed) - is non-nil. This variable is not made local to particular - buffers, but loading some libraries may add elements to it. - -global-mode-string - This variable is used to display the time, if you ask - for that. - -The idea of these variables is to eliminate the need for major modes -to alter mode-line-format itself. - -** `window-point' valid for selected window. - -The value returned by `window-point' used to be incorrect when its -argument was the selected window. Now the value is correct. - -** Window configurations may be saved as Lisp objects. - -The function `current-window-configuration' returns a special type of -Lisp object that represents the current layout of windows: the -sizes and positions of windows, which buffers appear in them, and -which parts of the buffers appear on the screen. - -The function `set-window-configuration' takes one argument, which must -be a window configuration object, and restores that configuration. - -** New hook `temp-output-buffer-show-hook'. - -This hook allows you to control how help buffers are displayed. -Whenever `with-output-to-temp-buffer' has executed its body and wants -to display the temp buffer, if this variable is bound and non-`nil' -then its value is called with one argument, the temp buffer. -The hook function is solely responsible for displaying the buffer. -The standard manner of display--making the buffer appear in a window--is -used only if there is no hook function. - -** New function `minibuffer-window'. - -This function returns the window used (sometimes) for displaying -the minibuffer. It can be used even when the minibuffer is not active. - -** New feature to `next-window'. - -If the optional second argument is neither `nil' nor `t', the minibuffer -window is omitted from consideration even when active; if the starting -window was the last non-minibuffer window, the value will be the first -non-minibuffer window. - -** New variable `minibuffer-scroll-window'. - -When this variable is non-`nil', the command `scroll-other-window' -uses it as the window to be scrolled. Displays of completion-lists -set this variable to the window containing the display. - -** New argument to `sit-for'. - -A non-nil second argument to `sit-for' means do not redisplay; -just wait for the specified time or until input is available. - -** Deleted function `set-minor-mode'; minor modes must be changed. - -The function `set-minor-mode' has been eliminated. The display -of minor mode names in the mode line is now controlled by the -variable `minor-mode-alist'. To specify display of a new minor -mode, it is sufficient to add an element to this list. Once that -is done, you can turn the mode on and off just by setting a variable, -and the display will show its status automatically. - -** New variable `cursor-in-echo-area'. - -If this variable is non-nil, the screen cursor appears on the -last line of the screen, at the end of the text displayed there. - -Binding this variable to t is useful at times when reading single -characters of input with `read-char'. - -** New per-buffer variable `selective-display-ellipses'. - -If this variable is non-nil, an ellipsis (`...') appears on the screen -at the end of each text line that is followed by invisible text. - -If this variable is nil, no ellipses appear. Then there is no sign -on the screen that invisible text is present. - -Text is made invisible under the control of the variable -`selective-display'; this is how Outline mode and C-x $ work. - -** New variable `no-redraw-on-reenter'. - -If you set this variable non-nil, Emacs will not clear the screen when -you resume it after suspending it. This is for the sake of terminals -with multiple screens of memory, where the termcap entry has been set -up to switch between screens when Emacs is suspended and resumed. - -** New argument to `set-screen-height' or `set-screen-width'. - -These functions now take an optional second argument which says -what significance the newly specified height or width has. - -If the argument is nil, or absent, it means that Emacs should -believe that the terminal height or width really is as just specified. - -If the argument is t, it means Emacs should not believe that the -terminal really is this high or wide, but it should use the -specific height or width as the number of lines or columns to display. -Thus, you could display only 24 lines on a screen known to have 48 lines. - -What practical difference is there between using only 24 lines for display -and really believing that the terminal has 24 lines? - -1. The "real" height of the terminal says what the terminal command -to move the cursor to the last line will do. - -2. The "real" height of the terminal determines how much padding is -needed. - -* File-related changes. - -** New parameter `backup-by-copying-when-mismatch'. - -If this variable is non-`nil', then when Emacs is about to save a -file, it will create the backup file by copying if that would avoid -changing the file's uid or gid. - -The default value of this variable is `nil', because usually it is -useful to have the uid of a file change according to who edited it -last. I recommend thet this variable be left normally `nil' and -changed with a local variables list in those particular files where -the uid needs to be preserved. - -** New parameter `file-precious-flag'. - -If this variable is non-`nil', saving the buffer tries to avoid -leaving an incomplete file due to disk full or other I/O errors. -It renames the old file before saving. If saving is successful, -the renamed file is deleted; if saving gets an error, the renamed -file is renamed back to the name you visited. - -Backups are always made by copying for such files. - -** New variable `buffer-offer-save'. - -If the value of this variable is non-`nil' in a buffer then exiting -Emacs will offer to save the buffer (if it is modified and nonempty) -even if the buffer is not visiting a file. This variable is -automatically made local to the current buffer whenever it is set. - -** `rename-file', `copy-file', `add-name-to-file' and `make-symbolic-link'. - -The third argument to these functions used to be `t' or `nil'; `t' -meaning go ahead even if the specified new file name already has a file, -and `nil' meaning to get an error. - -Now if the third argument is a number it means to ask the user for -confirmation in this case. - -** New optional argument to `copy-file'. - -If `copy-file' receives a non-nil fourth argument, it attempts -to give the new copy the same time-of-last-modification that the -original file has. - -** New function `file-newer-than-file-p'. - -(file-newer-than-file-p FILE1 FILE2) returns non-nil if FILE1 has been -modified more recently than FILE2. If FILE1 does not exist, the value -is always nil; otherwise, if FILE2 does not exist, the value is t. -This is meant for use when FILE2 depends on FILE1, to see if changes -in FILE1 make it necessary to recompute FILE2 from it. - -** Changed function `file-exists-p'. - -This function is no longer the same as `file-readable-p'. -`file-exists-p' can now return t for a file that exists but which -the fascists won't allow you to read. - -** New function `file-locked-p'. - -This function receives a file name as argument and returns `nil' -if the file is not locked, `t' if locked by this Emacs, or a -string giving the name of the user who has locked it. - -** New function `file-name-sans-versions'. - -(file-name-sans-versions NAME) returns a substring of NAME, with any -version numbers or other backup suffixes deleted from the end. - -** New functions for directory names. - -Although a directory is really a kind of file, specifying a directory -uses a somewhat different syntax from specifying a file. -In Emacs, a directory name is used as part of a file name. - -On Unix, the difference is small: a directory name ends in a slash, -while a file name does not: thus, `/usr/rms/' to name a directory, -while `/usr/rms' names the file which holds that directory. - -On VMS, the difference is considerable: `du:[rms.foo]' specifies a -directory, but the name of the file that holds that directory is -`du:[rms]foo.dir'. - -There are two new functions for converting between directory names -and file names. `directory-file-name' takes a directory name and -returns the name of the file in which that directory's data is stored. -`file-name-as-directory' takes the name of a file and returns -the corresponding directory name. These always understand Unix file name -syntax; on VMS, they understand VMS syntax as well. - -For example, (file-name-as-directory "/usr/rms") returns "/usr/rms/" -and (directory-file-name "/usr/rms/") returns "/usr/rms". -On VMS, (file-name-as-directory "du:[rms]foo.dir") returns "du:[rms.foo]" -and (directory-file-name "du:[rms.foo]") returns "du:[rms]foo.dir". - -** Value of `file-attributes' changed. - -The function file-attributes returns a list containing many kinds of -information about a file. Now the list has eleven elements. - -The tenth element is `t' if deleting the file and creating another -file of the same name would result in a change in the file's group; -`nil' if there would be no change. You can also think of this as -comparing the file's group with the default group for files created in -the same directory by you. - -The eleventh element is the inode number of the file. - -** VMS-only function `file-name-all-versions'. - -This function returns a list of all the completions, including version -number, of a specified version-number-less file name. This is like -`file-name-all-completions', except that the latter returns values -that do not include version numbers. - -** VMS-only variable `vms-stmlf-recfm'. - -On a VMS system, if this variable is non-nil, Emacs will give newly -created files the record format `stmlf'. This is necessary for files -that must contain lines of arbitrary length, such as compiled Emacs -Lisp. - -When writing a new version of an existing file, Emacs always keeps -the same record format as the previous version; so this variable has -no effect. - -This variable has no effect on Unix systems. - -** `insert-file-contents' on an empty file. - -This no longer sets the buffer's "modified" flag. - -** New function (VMS only) `define-logical-name': - -(define-logical-name LOGICAL TRANSLATION) defines a VMS logical name -LOGICAL whose translation is TRANSLATION. The new name applies to -the current process only. - -** Deleted variable `ask-about-buffer-names'. - -If you want buffer names for files to be generated in a special way, -you must redefine `create-file-buffer'. - -* Subprocess-related changes. - -** New function `process-list'. - -This function takes no arguments and returns a list of all -of Emacs's asynchronous subprocesses. - -** New function `process-exit-status'. - -This function, given a process, process name or buffer as argument, -returns the exit status code or signal number of the process. -If the process has not yet exited or died, this function returns 0. - -** Process output ignores `buffer-read-only'. - -Output from a process will go into the process's buffer even if the -buffer is read only. - -** Switching buffers in filter functions and sentinels. - -Emacs no longer saves and restore the current buffer around calling -the filter and sentinel functions, so these functions can now -permanently alter the selected buffer in a straightforward manner. - -** Specifying environment variables for subprocesses. - -When a subprocess is started with `start-process' or `call-process', -the value of the variable `process-environment' is taken to -specify the environment variables to give the subprocess. The -value should be a list of strings, each of the form "VAR=VALUE". - -`process-environment' is initialized when Emacs starts up -based on Emacs's environment. - -** New variable `process-connection-type'. - -If this variable is `nil', when a subprocess is created, Emacs uses -a pipe rather than a pty to communicate with it. Normally this -variable is `t', telling Emacs to use a pty if ptys are supported -and one is available. - -** New function `waiting-for-user-input-p'. - -This function, given a subprocess as argument, returns `t' if that -subprocess appears to be waiting for input sent from Emacs, -or `nil' otherwise. - -** New hook `shell-set-directory-error-hook'. - -The value of this variable is called, with no arguments, whenever -Shell mode gets an error trying to keep track of directory-setting -commands (such as `cd' and `pushd') used in the shell buffer. - -* New functions `user-uid' and `user-real-uid'. - -These functions take no arguments and return, respectively, -the effective uid and the real uid of the Emacs process. -The value in each case is an integer. - -* New variable `print-escape-newlines' controls string printing. - -If this variable is non-`nil', then when a Lisp string is printed -by the Lisp printing function `prin1' or `print', newline characters -are printed as `\n' rather than as a literal newline. - -* New function `sysnetunam' on HPUX. - -This function takes two arguments, a network address PATH and a -login string LOGIN, and executes the system call `netunam'. -It returns `t' if the call succeeds, otherwise `nil'. - -News regarding installation: - -* Many `s-...' file names changed. - -Many `s-...' files have been renamed. All periods in such names, -except the ones just before the final `h', have been changed to -hyphens. Thus, `s-bsd4.2.h' has been renamed to `s-bsd4-2.h'. - -This is so a Unix distribution can be moved mechanically to VMS. - -* `DOCSTR...' file now called `DOC-...'. - -The file of on-line documentation strings, that used to be -`DOCSTR.mm.nn.oo' in this directory, is now called `DOC-mm.nn.oo'. -This is so that it can port to VMS using the standard conventions -for translating filenames for VMS. - -This file also now contains the doc strings for variables as -well as functions. - -* Emacs no longer uses floating point arithmetic. - -This may make it easier to port to some machines. - -* Macros `XPNTR' and `XSETPNTR'; flag `DATA_SEG_BITS'. - -These macros exclusively are used to unpack a pointer from a Lisp_Object -and to insert a pointer into a Lisp_Object. Redefining them may help -port Emacs to machines in which all pointers to data objects have -certain high bits set. - -If `DATA_SEG_BITS' is defined, it should be a number which contains -the high bits to be inclusive or'ed with pointers that are unpacked. - -* New flag `HAVE_X_MENU'. - -Define this flag in `config.h' in addition to `HAVE_X_WINDOWS' -to enable use of the Emacs interface to X Menus. On some operating -systems, the rest of the X interface works properly but X Menus -do not work; hence this separate flag. See the file `src/xmenu.c' -for more information. - -* Macros `ARRAY_MARK_FLAG' and `DONT_COPY_FLAG'. - -* `HAVE_ALLOCA' prevents assembly of `alloca.s'. - -* `SYSTEM_MALLOC' prevents use of GNU `malloc.c'. - -SYSTEM_MALLOC, if defined, means use the system's own `malloc' routines -rather than those that come with Emacs. - -Use this only if absolutely necessary, because if it is used you do -not get warnings when space is getting low. - -* New flags to control unexec. - -See the file `unexec.c' for a long comment on the compilation -switches that suffice to make it work on many machines. - -* `PNTR_COMPARISON_TYPE' - -Pointers that need to be compared for ordering are converted to this type -first. Normally this is `unsigned int'. - -* `HAVE_VFORK', `HAVE_DUP2' and `HAVE_GETTIMEOFDAY'. - -These flags just say whether certain system calls are available. - -* New macros control compiler switches, linker switches and libraries. - -The m- and s- files can now control in a modular fashion the precise -arguments passed to `cc' and `ld'. - -LIBS_STANDARD defines the standard C libraries. Default is `-lc'. -LIBS_DEBUG defines the extra libraries to use when debugging. Default `-lg'. -LIBS_SYSTEM can be defined by the s- file to specify extra libraries. -LIBS_MACHINE can be defined by the m- file to specify extra libraries. -LIBS_TERMCAP defines the libraries for Termcap or Terminfo. - It is defined by default in a complicated fashion but the m- or s- file - can override it. - -LD_SWITCH_SYSTEM can be defined by the s- file to specify extra `ld' switches. - The default is `-X' on BSD systems except those few that use COFF object files. -LD_SWITCH_MACHINE can be defined by the m- file to specify extra `ld' switches. - -C_DEBUG_SWITCH defines the switches to give `cc' when debugging. Default `-g'. -C_OPTIMIZE_SWITCH defines the switches to give `cc' to optimize. Default `-O'. -C_SWITCH_MACHINE can be defined by the m- file to specify extra `cc' switches. - -For older news, see the file ONEWS.3. - ----------------------------------------------------------------------- -Copyright information: - -Copyright (C) 1992 Free Software Foundation, Inc. - - Permission is granted to anyone to make or distribute verbatim copies - of this document as received, in any medium, provided that the - copyright notice and this permission notice are preserved, - thus giving the recipient permission to redistribute in turn. - - Permission is granted to distribute modified versions - of this document, or of portions of it, - under the above conditions, provided also that they - carry prominent notices stating who last changed them. - -Local variables: -mode: text -end: - -arch-tag: 373312be-99a8-46d5-bcb0-a62577ab5045