Mercurial > emacs
changeset 81026:ffed94619365
Move Emacs 22 entries and arch tag to new file NEWS.22, leave empty
template for next Emacs version.
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Tue, 22 May 2007 06:17:37 +0000 |
parents | e3eb9b987f9a |
children | d65b6fb14bca |
files | etc/NEWS |
diffstat | 1 files changed, 17 insertions(+), 5352 deletions(-) [+] |
line wrap: on
line diff
--- a/etc/NEWS Tue May 22 06:16:37 2007 +0000 +++ b/etc/NEWS Tue May 22 06:17:37 2007 +0000 @@ -1,5384 +1,50 @@ GNU Emacs NEWS -- history of user-visible changes. -Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 - Free Software Foundation, Inc. +Copyright (C) 2007 Free Software Foundation, Inc. See the end of the file for license 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 22. +This file is about changes in Emacs version 23. -See files NEWS.21, NEWS.20, NEWS.19, NEWS.18, and NEWS.1-17 for changes -in older Emacs versions. +See files NEWS.22, 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. * About external Lisp packages -When you upgrade to Emacs 22 from a previous version, some older -versions of external Lisp packages are known to behave badly. -So in general, it is recommended that you upgrade to the latest -versions of any external Lisp packages that you are using. - -You should also be aware that many Lisp packages have been included -with Emacs 22 (see the extensive list below), and you should remove -any older versions of these packages to ensure that the Emacs 22 -version is used. You can use M-x list-load-path-shadows to find such -older packages. - -Some specific packages that are known to cause problems are: - -** Semantic (used by CEDET, ECB, JDEE): upgrade to latest version. - -** cua.el, cua-mode.el: remove old versions. - -* Installation Changes in Emacs 22.1 - -** You can build Emacs with Gtk+ widgets by specifying `--with-x-toolkit=gtk' -when you run configure. This requires Gtk+ 2.4 or newer. This port -provides a way to display multilingual text in menus (with some caveats). - -** The Emacs Lisp Reference Manual is now part of the distribution. - -The Emacs Lisp Reference Manual in Info format is built as part of the -Emacs build procedure and installed together with the Emacs User -Manual. A menu item was added to the menu bar to make it easily -accessible (Help->More Manuals->Emacs Lisp Reference). - -** The Introduction to Programming in Emacs Lisp manual is now part of -the distribution. - -This manual is now part of the standard distribution and is installed, -together with the Emacs User Manual, into the Info directory. A menu -item was added to the menu bar to make it easily accessible -(Help->More Manuals->Introduction to Emacs Lisp). - -** Leim is now part of the Emacs distribution. -You no longer need to download a separate tarball in order to build -Emacs with Leim. - -** Support for MacOS X was added. -See the files mac/README and mac/INSTALL for build instructions. - -** Mac OS 9 port now uses the Carbon API by default. You can also -create a non-Carbon build by specifying `NonCarbon' as a target. See -the files mac/README and mac/INSTALL for build instructions. - -** Support for a Cygwin build of Emacs was added. - -** Support for GNU/Linux systems on X86-64 machines was added. - -** Support for GNU/Linux systems on S390 machines was added. - -** Support for GNU/Linux systems on Tensilica Xtensa machines was added. - -** Support for FreeBSD/Alpha has been added. - -** New translations of the Emacs Tutorial are available in the -following languages: Brasilian Portuguese, Bulgarian, Chinese (both -with simplified and traditional characters), French, Russian, and -Italian. Type `C-u C-h t' to choose one of them in case your language -setup doesn't automatically select the right one. - -** New translations of the Emacs reference card are available in the -Brasilian Portuguese and Russian. The corresponding PostScript files -are also included. - -** A French translation of the `Emacs Survival Guide' is available. - -** Emacs now supports new configure options `--program-prefix', -`--program-suffix' and `--program-transform-name' that affect the names of -installed programs. - -** By default, Emacs now uses a setgid helper program to update game -scores. The directory ${localstatedir}/games/emacs is the normal -place for game scores to be stored. You can control this with the -configure option `--with-game-dir'. The specific user that Emacs uses -to own the game scores is controlled by `--with-game-user'. If access -to a game user is not available, then scores will be stored separately -in each user's home directory. - -** Emacs now includes support for loading image libraries on demand. -(Currently this feature is only used on MS Windows.) You can configure -the supported image types and their associated dynamic libraries by -setting the variable `image-library-alist'. - -** Emacs can now be built without sound support. - -** Emacs Lisp source files are compressed by default if `gzip' is available. - -** All images used in Emacs have been consolidated in etc/images and subdirs. -See also the changes to `find-image', documented below. - -** Emacs comes with a new set of icons. -These icons are displayed on the taskbar and/or titlebar when Emacs -runs in a graphical environment. Source files for these icons can be -found in etc/images/icons. (You can't change the icons displayed by -Emacs by changing these files directly. On X, the icon is compiled -into the Emacs executable; see gnu.h in the source tree. On MS -Windows, see nt/icons/emacs.ico.) - -** The `emacsserver' program has been removed, replaced with Lisp code. - -** The `yow' program has been removed. -Use the corresponding Emacs feature instead. - -** The Emacs terminal emulation in term.el uses a different terminfo name. -The Emacs terminal emulation in term.el now uses "eterm-color" as its -terminfo name, since term.el now supports color. - -** The script etc/emacs-buffer.gdb can be used with gdb to retrieve the -contents of buffers from a core dump and save them to files easily, should -Emacs crash. - -** Building with -DENABLE_CHECKING does not automatically build with union -types any more. Add -DUSE_LISP_UNION_TYPE if you want union types. - -** When pure storage overflows while dumping, Emacs now prints how -much pure storage it will approximately need. +* Installation Changes in Emacs 23.1 -* Startup Changes in Emacs 22.1 - -** Init file changes -If the init file ~/.emacs does not exist, Emacs will try -~/.emacs.d/init.el or ~/.emacs.d/init.elc. Likewise, if the shell init file -~/.emacs_SHELL is not found, Emacs will try ~/.emacs.d/init_SHELL.sh. - -** Emacs can now be invoked in full-screen mode on a windowed display. -When Emacs is invoked on a window system, the new command-line options -`--fullwidth', `--fullheight', and `--fullscreen' produce a frame -whose width, height, or both width and height take up the entire -screen size. (For now, this does not work with some window managers.) - -** Emacs now displays a splash screen by default even if command-line -arguments were given. The new command-line option --no-splash -disables the splash screen; see also the variable -`inhibit-splash-screen' (which is also aliased as -`inhibit-startup-message'). - -** New user option `inhibit-startup-buffer-menu'. -When loading many files, for instance with `emacs *', Emacs normally -displays a buffer menu. This option turns the buffer menu off. - -** New command line option -nbc or --no-blinking-cursor disables -the blinking cursor on graphical terminals. - -** The option --script FILE runs Emacs in batch mode and loads FILE. -It is useful for writing Emacs Lisp shell script files, because they -can start with this line: - - #!/usr/bin/emacs --script - -** The -f option, used from the command line to call a function, -now reads arguments for the function interactively if it is -an interactively callable function. - -** The option --directory DIR now modifies `load-path' immediately. -Directories are added to the front of `load-path' in the order they -appear on the command line. For example, with this command line: - - emacs -batch -L .. -L /tmp --eval "(require 'foo)" - -Emacs looks for library `foo' in the parent directory, then in /tmp, then -in the other directories in `load-path'. (-L is short for --directory.) - -** When you specify a frame size with --geometry, the size applies to -all frames you create. A position specified with --geometry only -affects the initial frame. - -** Emacs built for MS-Windows now behaves like Emacs on X does, -with respect to its frame position: if you don't specify a position -(in your .emacs init file, in the Registry, or with the --geometry -command-line option), Emacs leaves the frame position to the Windows' -window manager. - -** The command line option --no-windows has been changed to ---no-window-system. The old one still works, but is deprecated. - -** If the environment variable DISPLAY specifies an unreachable X display, -Emacs will now startup as if invoked with the --no-window-system option. - -** Emacs now reads the standard abbrevs file ~/.abbrev_defs -automatically at startup, if it exists. When Emacs offers to save -modified buffers, it saves the abbrevs too if they have changed. It -can do this either silently or asking for confirmation first, -according to the value of `save-abbrevs'. - -** New command line option -Q or --quick. -This is like using -q --no-site-file, but in addition it also disables -the fancy startup screen. - -** New command line option -D or --basic-display. -Disables the menu-bar, the tool-bar, the scroll-bars, tool tips, and -the blinking cursor. - -** The default is now to use a bitmap as the icon. -The command-line options --icon-type, -i have been replaced with -options --no-bitmap-icon, -nbi to turn the bitmap icon off. - -** If the environment variable EMAIL is defined, Emacs now uses its value -to compute the default value of `user-mail-address', in preference to -concatenation of `user-login-name' with the name of your host machine. +* Startup Changes in Emacs 23.1 -* Incompatible Editing Changes in Emacs 22.1 - -** You can now follow links by clicking Mouse-1 on the link. - -See below for more details. - -** When the undo information of the current command gets really large -(beyond the value of `undo-outer-limit'), Emacs discards it and warns -you about it. - -** When Emacs prompts for file names, SPC no longer completes the file name. -This is so filenames with embedded spaces could be input without the -need to quote the space with a C-q. The underlying changes in the -keymaps that are active in the minibuffer are described below under -"New keymaps for typing file names". - -** The completion commands TAB, SPC and ? in the minibuffer apply only -to the text before point. If there is text in the buffer after point, -it remains unchanged. - -** In incremental search, C-w is changed. M-%, C-M-w and C-M-y are special. - -See below under "incremental search changes". - -** M-g is now a prefix key. -M-g g and M-g M-g run goto-line. -M-g n and M-g M-n run next-error (like C-x `). -M-g p and M-g M-p run previous-error. - -** C-u M-g M-g switches to the most recent previous buffer, -and goes to the specified line in that buffer. - -When goto-line starts to execute, if there's a number in the buffer at -point then it acts as the default argument for the minibuffer. - -** M-o now is the prefix key for setting text properties; -M-o M-o requests refontification. - -** C-x C-f RET (find-file), typing nothing in the minibuffer, is no longer -a special case. +* Incompatible Editing Changes in Emacs 23.1 -Since the default input is the current directory, this has the effect -of specifying the current directory. Normally that means to visit the -directory with Dired. - -You can get the old behavior by typing C-x C-f M-n RET, which fetches -the actual file name into the minibuffer. - -** In Dired's ! command (dired-do-shell-command), `*' and `?' now -control substitution of the file names only when they are surrounded -by whitespace. This means you can now use them as shell wildcards -too. If you want to use just plain `*' as a wildcard, type `*""'; the -doublequotes make no difference in the shell, but they prevent -special treatment in `dired-do-shell-command'. - -** A prefix argument is no longer required to repeat a jump to a -previous mark if you set `set-mark-command-repeat-pop' to t. I.e. C-u -C-SPC C-SPC C-SPC ... cycles through the mark ring. Use C-u C-u C-SPC -to set the mark immediately after a jump. - -** The info-search bindings on C-h C-f, C-h C-k and C-h C-i -have been moved to C-h F, C-h K and C-h S. - -** `apply-macro-to-region-lines' now operates on all lines that begin -in the region, rather than on all complete lines in the region. - -** line-move-ignore-invisible now defaults to t. - -** Adaptive filling misfeature removed. -It no longer treats `NNN.' or `(NNN)' as a prefix. - -** The old bindings C-M-delete and C-M-backspace have been deleted, -since there are situations where one or the other will shut down -the operating system or your X server. - -** The register compatibility key bindings (deprecated since Emacs 19) -have been removed: - C-x / point-to-register (Use: C-x r SPC) - C-x j jump-to-register (Use: C-x r j) - C-x x copy-to-register (Use: C-x r s) - C-x g insert-register (Use: C-x r i) + +* Editing Changes in Emacs 23.1 -* Editing Changes in Emacs 22.1 - -** The max size of buffers and integers has been doubled. -On 32bit machines, it is now 256M (i.e. 268435455). - -** !MEM FULL! at the start of the mode line indicates that Emacs -cannot get any more memory for Lisp data. This often means it could -crash soon if you do things that use more memory. On most systems, -killing buffers will get out of this state. If killing buffers does -not make !MEM FULL! disappear, you should save your work and start -a new Emacs. - -** `undo-only' does an undo which does not redo any previous undo. - -** Yanking text now discards certain text properties that can -be inconvenient when you did not expect them. The variable -`yank-excluded-properties' specifies which ones. Insertion -of register contents and rectangles also discards these properties. - -** New command `kill-whole-line' kills an entire line at once. -By default, it is bound to C-S-<backspace>. - -** M-SPC (just-one-space) when given a numeric argument N -converts whitespace around point to N spaces. - -** You can now switch buffers in a cyclic order with C-x C-left -(previous-buffer) and C-x C-right (next-buffer). C-x left and -C-x right can be used as well. The functions keep a different buffer -cycle for each frame, using the frame-local buffer list. - -** C-x 5 C-o displays a specified buffer in another frame -but does not switch to that frame. It's the multi-frame -analogue of C-x 4 C-o. - -** `special-display-buffer-names' and `special-display-regexps' now -understand two new boolean pseudo-frame-parameters `same-frame' and -`same-window'. - -** New commands to operate on pairs of open and close characters: -`insert-pair', `delete-pair', `raise-sexp'. - -** M-x setenv now expands environment variable references. - -Substrings of the form `$foo' and `${foo}' in the specified new value -now refer to the value of environment variable foo. To include a `$' -in the value, use `$$'. - -** The default values of paragraph-start and indent-line-function have -been changed to reflect those used in Text mode rather than those used -in Paragraph-Indent Text mode. - -** The default for the paper size (variable ps-paper-type) is taken -from the locale. - -** Help command changes: - -*** Changes in C-h bindings: - -C-h e displays the *Messages* buffer. - -C-h d runs apropos-documentation. - -C-h r visits the Emacs Manual in Info. - -C-h followed by a control character is used for displaying files - that do not change: - -C-h C-f displays the FAQ. -C-h C-e displays the PROBLEMS file. - -The info-search bindings on C-h C-f, C-h C-k and C-h C-i -have been moved to C-h F, C-h K and C-h S. - -C-h c, C-h k, C-h w, and C-h f now handle remapped interactive commands. -- C-h c and C-h k report the actual command (after possible remapping) - run by the key sequence. -- C-h w and C-h f on a command which has been remapped now report the - command it is remapped to, and the keys which can be used to run - that command. - -For example, if C-k is bound to kill-line, and kill-line is remapped -to new-kill-line, these commands now report: -- C-h c and C-h k C-k reports: - C-k runs the command new-kill-line -- C-h w and C-h f kill-line reports: - kill-line is remapped to new-kill-line which is on C-k, <deleteline> -- C-h w and C-h f new-kill-line reports: - new-kill-line is on C-k - -*** The apropos commands now accept a list of words to match. -When more than one word is specified, at least two of those words must -be present for an item to match. Regular expression matching is still -available. - -*** The new option `apropos-sort-by-scores' causes the matching items -to be sorted according to their score. The score for an item is a -number calculated to indicate how well the item matches the words or -regular expression that you entered to the apropos command. The best -match is listed first, and the calculated score is shown for each -matching item. - -*** Help commands `describe-function' and `describe-key' now show function -arguments in lowercase italics on displays that support it. To change the -default, customize face `help-argument-name' or redefine the function -`help-default-arg-highlight'. - -*** C-h v and C-h f commands now include a hyperlink to the C source for -variables and functions defined in C (if the C source is available). - -*** Help mode now only makes hyperlinks for faces when the face name is -preceded or followed by the word `face'. It no longer makes -hyperlinks for variables without variable documentation, unless -preceded by one of the words `variable' or `option'. It now makes -hyperlinks to Info anchors (or nodes) if the anchor (or node) name is -enclosed in single quotes and preceded by `info anchor' or `Info -anchor' (in addition to earlier `info node' and `Info node'). In -addition, it now makes hyperlinks to URLs as well if the URL is -enclosed in single quotes and preceded by `URL'. - -*** The new command `describe-char' (C-u C-x =) pops up a buffer with -description various information about a character, including its -encodings and syntax, its text properties, how to input, overlays, and -widgets at point. You can get more information about some of them, by -clicking on mouse-sensitive areas or moving there and pressing RET. - -*** The command `list-text-properties-at' has been deleted because -C-u C-x = gives the same information and more. - -*** New command `display-local-help' displays any local help at point -in the echo area. It is bound to `C-h .'. It normally displays the -same string that would be displayed on mouse-over using the -`help-echo' property, but, in certain cases, it can display a more -keyboard oriented alternative. - -*** New user option `help-at-pt-display-when-idle' allows to -automatically show the help provided by `display-local-help' on -point-over, after suitable idle time. The amount of idle time is -determined by the user option `help-at-pt-timer-delay' and defaults -to one second. This feature is turned off by default. - -** Mark command changes: - -*** A prefix argument is no longer required to repeat a jump to a -previous mark, i.e. C-u C-SPC C-SPC C-SPC ... cycles through the -mark ring. Use C-u C-u C-SPC to set the mark immediately after a jump. - -*** Marking commands extend the region when invoked multiple times. - -If you type C-M-SPC (mark-sexp), M-@ (mark-word), M-h -(mark-paragraph), or C-M-h (mark-defun) repeatedly, the marked region -extends each time, so you can mark the next two sexps with M-C-SPC -M-C-SPC, for example. This feature also works for -mark-end-of-sentence, if you bind that to a key. It also extends the -region when the mark is active in Transient Mark mode, regardless of -the last command. To start a new region with one of marking commands -in Transient Mark mode, you can deactivate the active region with C-g, -or set the new mark with C-SPC. - -*** Some commands do something special in Transient Mark mode when the -mark is active--for instance, they limit their operation to the -region. Even if you don't normally use Transient Mark mode, you might -want to get this behavior from a particular command. There are two -ways you can enable Transient Mark mode and activate the mark, for one -command only. - -One method is to type C-SPC C-SPC; this enables Transient Mark mode -and sets the mark at point. The other method is to type C-u C-x C-x. -This enables Transient Mark mode temporarily but does not alter the -mark or the region. - -After these commands, Transient Mark mode remains enabled until you -deactivate the mark. That typically happens when you type a command -that alters the buffer, but you can also deactivate the mark by typing -C-g. - -*** Movement commands `beginning-of-buffer', `end-of-buffer', -`beginning-of-defun', `end-of-defun' do not set the mark if the mark -is already active in Transient Mark mode. - -*** M-h (mark-paragraph) now accepts a prefix arg. - -With positive arg, M-h marks the current and the following paragraphs; -if the arg is negative, it marks the current and the preceding -paragraphs. - -** Incremental Search changes: - -*** M-% typed in isearch mode invokes `query-replace' or -`query-replace-regexp' (depending on search mode) with the current -search string used as the string to replace. - -*** C-w in incremental search now grabs either a character or a word, -making the decision in a heuristic way. This new job is done by the -command `isearch-yank-word-or-char'. To restore the old behavior, -bind C-w to `isearch-yank-word' in `isearch-mode-map'. - -*** C-y in incremental search now grabs the next line if point is already -at the end of a line. - -*** C-M-w deletes and C-M-y grabs a character in isearch mode. -Another method to grab a character is to enter the minibuffer by `M-e' -and to type `C-f' at the end of the search string in the minibuffer. - -*** Vertical scrolling is now possible within incremental search. -To enable this feature, customize the new user option -`isearch-allow-scroll'. User written commands which satisfy stringent -constraints can be marked as "scrolling commands". See the Emacs manual -for details. - -*** Isearch no longer adds `isearch-resume' commands to the command -history by default. To enable this feature, customize the new -user option `isearch-resume-in-command-history'. - -** Replace command changes: - -*** When used interactively, the commands `query-replace-regexp' and -`replace-regexp' allow \,expr to be used in a replacement string, -where expr is an arbitrary Lisp expression evaluated at replacement -time. `\#' in a replacement string now refers to the count of -replacements already made by the replacement command. All regular -expression replacement commands now allow `\?' in the replacement -string to specify a position where the replacement string can be -edited for each replacement. `query-replace-regexp-eval' is now -deprecated since it offers no additional functionality. - -*** query-replace uses isearch lazy highlighting when the new user option -`query-replace-lazy-highlight' is non-nil. - -*** The current match in query-replace is highlighted in new face -`query-replace' which by default inherits from isearch face. - -*** New user option `query-replace-skip-read-only': when non-nil, -`query-replace' and related functions simply ignore -a match if part of it has a read-only property. - -** Local variables lists: - -*** If the local variables list contains any variable-value pairs that -are not known to be safe, Emacs shows a prompt asking whether to apply -the local variables list as a whole. In earlier versions, a prompt -was only issued for variables explicitly marked as risky (for the -definition of risky variables, see `risky-local-variable-p'). - -At the prompt, you can choose to save the contents of this local -variables list to `safe-local-variable-values'. This new customizable -option is a list of variable-value pairs that are known to be safe. -Variables can also be marked as safe with the existing -`safe-local-variable' property (see `safe-local-variable-p'). -However, risky variables will not be added to -`safe-local-variable-values' in this way. - -*** The variable `enable-local-variables' controls how local variable -lists are handled. t, the default, specifies the standard querying -behavior. :safe means use only safe values, and ignore the rest. -:all means set all variables, whether or not they are safe. -nil means ignore them all. Anything else means always query. - -*** The variable `safe-local-eval-forms' specifies a list of forms that -are ok to evaluate when they appear in an `eval' local variables -specification. Normally Emacs asks for confirmation before evaluating -such a form, but if the form appears in this list, no confirmation is -needed. - -*** If a function has a non-nil `safe-local-eval-function' property, -that means it is ok to evaluate some calls to that function when it -appears in an `eval' local variables specification. If the property -is t, then any form calling that function with constant arguments is -ok. If the property is a function or list of functions, they are called -with the form as argument, and if any returns t, the form is ok to call. - -If the form is not "ok to call", that means Emacs asks for -confirmation as before. - -*** In processing a local variables list, Emacs strips the prefix and -suffix from every line before processing all the lines. - -*** Text properties in local variables. - -A file local variables list cannot specify a string with text -properties--any specified text properties are discarded. - -** File operation changes: - -*** Unquoted `$' in file names do not signal an error any more when -the corresponding environment variable does not exist. -Instead, the `$ENVVAR' text is left as is, so that `$$' quoting -is only rarely needed. - -*** C-x C-f RET, typing nothing in the minibuffer, is no longer a special case. - -Since the default input is the current directory, this has the effect -of specifying the current directory. Normally that means to visit the -directory with Dired. - -*** C-x s (save-some-buffers) now offers an option `d' to diff a buffer -against its file, so you can see what changes you would be saving. - -*** Auto Compression mode is now enabled by default. - -*** If the user visits a file larger than `large-file-warning-threshold', -Emacs asks for confirmation. - -*** The commands copy-file, rename-file, make-symbolic-link and -add-name-to-file, when given a directory as the "new name" argument, -convert it to a file name by merging in the within-directory part of -the existing file's name. (This is the same convention that shell -commands cp, mv, and ln follow.) Thus, M-x copy-file RET ~/foo RET -/tmp RET copies ~/foo to /tmp/foo. - -*** require-final-newline now has two new possible values: - -`visit' means add a newline (as an undoable change) if it's needed -when visiting the file. - -`visit-save' means add a newline (as an undoable change) if it's -needed when visiting the file, and also add a newline if it's needed -when saving the file. - -*** The new option mode-require-final-newline controls how certain -major modes enable require-final-newline. Any major mode that's -designed for a kind of file that should normally end in a newline -sets require-final-newline based on mode-require-final-newline. -So you can customize mode-require-final-newline to control what these -modes do. - -*** When you are root, and you visit a file whose modes specify -read-only, the Emacs buffer is now read-only too. Type C-x C-q if you -want to make the buffer writable. (As root, you can in fact alter the -file.) - -*** find-file-read-only visits multiple files in read-only mode, -when the file name contains wildcard characters. - -*** find-alternate-file replaces the current file with multiple files, -when the file name contains wildcard characters. It now asks if you -wish save your changes and not just offer to kill the buffer. - -*** When used interactively, `format-write-file' now asks for confirmation -before overwriting an existing file, unless a prefix argument is -supplied. This behavior is analogous to `write-file'. - -*** The variable `auto-save-file-name-transforms' now has a third element that -controls whether or not the function `make-auto-save-file-name' will -attempt to construct a unique auto-save name (e.g. for remote files). - -*** The new option `write-region-inhibit-fsync' disables calls to fsync -in `write-region'. This can be useful on laptops to avoid spinning up -the hard drive upon each file save. Enabling this variable may result -in data loss, use with care. - -** Minibuffer changes: - -*** The completion commands TAB, SPC and ? in the minibuffer apply only -to the text before point. If there is text in the buffer after point, -it remains unchanged. - -*** The new file-name-shadow-mode is turned ON by default, so that when -entering a file name, any prefix which Emacs will ignore is dimmed. - -*** There's a new face `minibuffer-prompt'. -Emacs adds this face to the list of text properties stored in the -variable `minibuffer-prompt-properties', which is used to display the -prompt string. - -*** Enhanced visual feedback in `*Completions*' buffer. - -Completions lists use faces to highlight what all completions -have in common and where they begin to differ. - -The common prefix shared by all possible completions uses the face -`completions-common-part', while the first character that isn't the -same uses the face `completions-first-difference'. By default, -`completions-common-part' inherits from `default', and -`completions-first-difference' inherits from `bold'. The idea of -`completions-common-part' is that you can use it to make the common -parts less visible than normal, so that the rest of the differing -parts is, by contrast, slightly highlighted. - -Above fontification is always done when listing completions is -triggered at minibuffer. If you want to fontify completions whose -listing is triggered at the other normal buffer, you have to pass -the common prefix of completions to `display-completion-list' as -its second argument. - -*** File-name completion can now ignore specified directories. -If an element of the list in `completion-ignored-extensions' ends in a -slash `/', it indicates a subdirectory that should be ignored when -completing file names. Elements of `completion-ignored-extensions' -which do not end in a slash are never considered when a completion -candidate is a directory. - -*** New user option `history-delete-duplicates'. -If set to t when adding a new history element, all previous identical -elements are deleted from the history list. - -** Redisplay changes: - -*** The new face `mode-line-inactive' is used to display the mode line -of non-selected windows. The `mode-line' face is now used to display -the mode line of the currently selected window. - -The new variable `mode-line-in-non-selected-windows' controls whether -the `mode-line-inactive' face is used. - -*** The mode line position information now comes before the major mode. -When the file is maintained under version control, that information -appears between the position information and the major mode. - -*** You can now customize the use of window fringes. To control this -for all frames, use M-x fringe-mode or the Show/Hide submenu of the -top-level Options menu, or customize the `fringe-mode' variable. To -control this for a specific frame, use the command M-x -set-fringe-style. - -*** Angle icons in the fringes can indicate the buffer boundaries. In -addition, up and down arrow bitmaps in the fringe indicate which ways -the window can be scrolled. - -This behavior is activated by setting the buffer-local variable -`indicate-buffer-boundaries' to a non-nil value. The default value of -this variable is found in `default-indicate-buffer-boundaries'. - -If value is `left' or `right', both angle and arrow bitmaps are -displayed in the left or right fringe, resp. - -The value can also be an alist which specifies the presence and -position of each bitmap individually. - -For example, ((top . left) (t . right)) places the top angle bitmap -in left fringe, the bottom angle bitmap in right fringe, and both -arrow bitmaps in right fringe. To show just the angle bitmaps in the -left fringe, but no arrow bitmaps, use ((top . left) (bottom . left)). - -*** On window systems, lines which are exactly as wide as the window -(not counting the final newline character) are no longer broken into -two lines on the display (with just the newline on the second line). -Instead, the newline now "overflows" into the right fringe, and the -cursor will be displayed in the fringe when positioned on that newline. - -The new user option 'overflow-newline-into-fringe' can be set to nil to -revert to the old behavior of continuing such lines. - -*** A window can now have individual fringe and scroll-bar settings, -in addition to the individual display margin settings. - -Such individual settings are now preserved when windows are split -horizontally or vertically, a saved window configuration is restored, -or when the frame is resized. - -*** When a window has display margin areas, the fringes are now -displayed between the margins and the buffer's text area, rather than -outside those margins. - -*** New face `escape-glyph' highlights control characters and escape glyphs. - -*** Non-breaking space and hyphens are now displayed with a special -face, either nobreak-space or escape-glyph. You can turn this off or -specify a different mode by setting the variable `nobreak-char-display'. - -*** The parameters of automatic hscrolling can now be customized. -The variable `hscroll-margin' determines how many columns away from -the window edge point is allowed to get before automatic hscrolling -will horizontally scroll the window. The default value is 5. - -The variable `hscroll-step' determines how many columns automatic -hscrolling scrolls the window when point gets too close to the -window edge. If its value is zero, the default, Emacs scrolls the -window so as to center point. If its value is an integer, it says how -many columns to scroll. If the value is a floating-point number, it -gives the fraction of the window's width to scroll the window. - -The variable `automatic-hscrolling' was renamed to -`auto-hscroll-mode'. The old name is still available as an alias. - -*** Moving or scrolling through images (and other lines) taller than -the window now works sensibly, by automatically adjusting the window's -vscroll property. - -*** Preemptive redisplay now adapts to current load and bandwidth. - -To avoid preempting redisplay on fast computers, networks, and displays, -the arrival of new input is now performed at regular intervals during -redisplay. The new variable `redisplay-preemption-period' specifies -the period; the default is to check for input every 0.1 seconds. - -*** The %c and %l constructs are now ignored in frame-title-format. -Due to technical limitations in how Emacs interacts with windowing -systems, these constructs often failed to render properly, and could -even cause Emacs to crash. - -*** If value of `auto-resize-tool-bars' is `grow-only', the tool bar -will expand as needed, but not contract automatically. To contract -the tool bar, you must type C-l. - -*** New customize option `overline-margin' controls the space between -overline and text. - -*** New variable `x-underline-at-descent-line' controls the relative -position of the underline. When set, it overrides the -`x-use-underline-position-properties' variables. - -** New faces: - -*** `mode-line-highlight' is the standard face indicating mouse sensitive -elements on mode-line (and header-line) like `highlight' face on text -areas. - -*** `mode-line-buffer-id' is the standard face for buffer identification -parts of the mode line. - -*** `shadow' face defines the appearance of the "shadowed" text, i.e. -the text which should be less noticeable than the surrounding text. -This can be achieved by using shades of grey in contrast with either -black or white default foreground color. This generic shadow face -allows customization of the appearance of shadowed text in one place, -so package-specific faces can inherit from it. - -*** `vertical-border' face is used for the vertical divider between windows. - -** Font-Lock (syntax highlighting) changes: - -*** All modes now support using M-x font-lock-mode to toggle -fontification, even those such as Occur, Info, and comint-derived -modes that do their own fontification in a special way. - -The variable `Info-fontify' is no longer applicable; to disable -fontification in Info, remove `turn-on-font-lock' from -`Info-mode-hook'. - -*** New standard font-lock face `font-lock-comment-delimiter-face'. - -*** New standard font-lock face `font-lock-preprocessor-face'. - -*** Easy to overlook single character negation can now be font-locked. -You can use the new variable `font-lock-negation-char-face' and the face of -the same name to customize this. Currently the cc-modes, sh-script-mode, -cperl-mode and make-mode support this. - -*** Font-Lock mode: in major modes such as Lisp mode, where some Emacs -features assume that an open-paren in column 0 is always outside of -any string or comment, Font-Lock now highlights any such open-paren in -bold-red if it is inside a string or a comment, to indicate that it -can cause trouble. You should rewrite the string or comment so that -the open-paren is not in column 0. - -*** M-o now is the prefix key for setting text properties; -M-o M-o requests refontification. - -*** The default settings for JIT stealth lock parameters are changed. -The default value for the user option jit-lock-stealth-time is now nil -instead of 3. This setting of jit-lock-stealth-time disables stealth -fontification: on today's machines, it may be a bug in font lock -patterns if fontification otherwise noticeably degrades interactivity. -If you find movement in infrequently visited buffers sluggish (and the -major mode maintainer has no better idea), customizing -jit-lock-stealth-time to a non-nil value will let Emacs fontify -buffers in the background when it considers the system to be idle. -jit-lock-stealth-nice is now 0.5 instead of 0.125 which is supposed to -cause less load than the old defaults. - -*** jit-lock can now be delayed with `jit-lock-defer-time'. - -If this variable is non-nil, its value should be the amount of Emacs -idle time in seconds to wait before starting fontification. For -example, if you set `jit-lock-defer-time' to 0.25, fontification will -only happen after 0.25s of idle time. - -*** contextual refontification is now separate from stealth fontification. - -jit-lock-defer-contextually is renamed jit-lock-contextually and -jit-lock-context-time determines the delay after which contextual -refontification takes place. - -*** lazy-lock is considered obsolete. - -The `lazy-lock' package is superseded by `jit-lock' and is considered -obsolete. `jit-lock' is activated by default; if you wish to continue -using `lazy-lock', activate it in your ~/.emacs like this: - (setq font-lock-support-mode 'lazy-lock-mode) - -If you invoke `lazy-lock-mode' directly rather than through -`font-lock-support-mode', it now issues a warning: - "Use font-lock-support-mode rather than calling lazy-lock-mode" - -** Menu support: - -*** A menu item "Show/Hide" was added to the top-level menu "Options". -This menu allows you to turn various display features on and off (such -as the fringes, the tool bar, the speedbar, and the menu bar itself). -You can also move the vertical scroll bar to either side here or turn -it off completely. There is also a menu-item to toggle displaying of -current date and time, current line and column number in the mode-line. - -*** Speedbar has moved from the "Tools" top level menu to "Show/Hide". - -*** The menu item "Open File..." has been split into two items, "New File..." -and "Open File...". "Open File..." now opens only existing files. This is -to support existing GUI file selection dialogs better. - -*** The file selection dialog for Gtk+, Mac, W32 and Motif/LessTif can be -disabled by customizing the variable `use-file-dialog'. - -*** The pop up menus for Lucid now stay up if you do a fast click and can -be navigated with the arrow keys (like Gtk+, Mac and W32). - -*** The menu bar for Motif/LessTif/Lucid/Gtk+ can be navigated with keys. -Pressing F10 shows the first menu in the menu bar. Navigation is done with -the arrow keys, select with the return key and cancel with the escape keys. - -*** The Lucid menus can display multilingual text in your locale. You have -to explicitly specify a fontSet resource for this to work, for example -`-xrm "Emacs*fontSet: -*-helvetica-medium-r-*--*-120-*-*-*-*-*-*,*"'. - -*** Dialogs for Lucid/Athena and LessTif/Motif now pop down on pressing -ESC, like they do for Gtk+, Mac and W32. - -*** For the Gtk+ version, you can make Emacs use the old file dialog -by setting the variable `x-gtk-use-old-file-dialog' to t. Default is to use -the new dialog. - -*** You can exit dialog windows and menus by typing C-g. - -** Buffer Menu changes: - -*** The new options `buffers-menu-show-directories' and -`buffers-menu-show-status' let you control how buffers are displayed -in the menu dropped down when you click "Buffers" from the menu bar. - -`buffers-menu-show-directories' controls whether the menu displays -leading directories as part of the file name visited by the buffer. -If its value is `unless-uniquify', the default, directories are -shown unless uniquify-buffer-name-style' is non-nil. The value of nil -and t turn the display of directories off and on, respectively. - -`buffers-menu-show-status' controls whether the Buffers menu includes -the modified and read-only status of the buffers. By default it is -t, and the status is shown. - -Setting these variables directly does not take effect until next time -the Buffers menu is regenerated. - -*** New command `Buffer-menu-toggle-files-only' toggles display of file -buffers only in the Buffer Menu. It is bound to T in Buffer Menu -mode. - -*** `buffer-menu' and `list-buffers' now list buffers whose names begin -with a space, when those buffers are visiting files. Normally buffers -whose names begin with space are omitted. - -** Mouse changes: - -*** You can now follow links by clicking Mouse-1 on the link. - -Traditionally, Emacs uses a Mouse-1 click to set point and a Mouse-2 -click to follow a link, whereas most other applications use a Mouse-1 -click for both purposes, depending on whether you click outside or -inside a link. Now the behavior of a Mouse-1 click has been changed -to match this context-sensitive dual behavior. (If you prefer the old -behavior, set the user option `mouse-1-click-follows-link' to nil.) - -Depending on the current mode, a Mouse-2 click in Emacs can do much -more than just follow a link, so the new Mouse-1 behavior is only -activated for modes which explicitly mark a clickable text as a "link" -(see the new function `mouse-on-link-p' for details). The Lisp -packages that are included in release 22.1 have been adapted to do -this, but external packages may not yet support this. However, there -is no risk in using such packages, as the worst thing that could -happen is that you get the original Mouse-1 behavior when you click -on a link, which typically means that you set point where you click. - -If you want to get the original Mouse-1 action also inside a link, you -just need to press the Mouse-1 button a little longer than a normal -click (i.e. press and hold the Mouse-1 button for half a second before -you release it). - -Dragging the Mouse-1 inside a link still performs the original -drag-mouse-1 action, typically copy the text. - -You can customize the new Mouse-1 behavior via the new user options -`mouse-1-click-follows-link' and `mouse-1-click-in-non-selected-windows'. - -*** If you set the new variable `mouse-autoselect-window' to a non-nil -value, windows are automatically selected as you move the mouse from -one Emacs window to another, even within a frame. A minibuffer window -can be selected only when it is active. - -*** On X, when the window manager requires that you click on a frame to -select it (give it focus), the selected window and cursor position -normally changes according to the mouse click position. If you set -the variable x-mouse-click-focus-ignore-position to t, the selected -window and cursor position do not change when you click on a frame -to give it focus. - -*** Emacs normally highlights mouse sensitive text whenever the mouse -is over the text. By setting the new variable `mouse-highlight', you -can optionally enable mouse highlighting only after you move the -mouse, so that highlighting disappears when you press a key. You can -also disable mouse highlighting. - -*** You can now customize if selecting a region by dragging the mouse -shall not copy the selected text to the kill-ring by setting the new -variable mouse-drag-copy-region to nil. - -*** Under X, mouse-wheel-mode is turned on by default. - -*** Emacs ignores mouse-2 clicks while the mouse wheel is being moved. - -People tend to push the mouse wheel (which counts as a mouse-2 click) -unintentionally while turning the wheel, so these clicks are now -ignored. You can customize this with the mouse-wheel-click-event and -mouse-wheel-inhibit-click-time variables. - -*** mouse-wheels can now scroll a specific fraction of the window -(rather than a fixed number of lines) and the scrolling is `progressive'. - -** Multilingual Environment (Mule) changes: - -*** You can disable character translation for a file using the -*- -construct. Include `enable-character-translation: nil' inside the --*-...-*- to disable any character translation that may happen by -various global and per-coding-system translation tables. You can also -specify it in a local variable list at the end of the file. For -shortcut, instead of using this long variable name, you can append the -character "!" at the end of coding-system name specified in -*- -construct or in a local variable list. For example, if a file has the -following header, it is decoded by the coding system `iso-latin-1' -without any character translation: -;; -*- coding: iso-latin-1!; -*- - -*** Language environment and various default coding systems are setup -more correctly according to the current locale name. If the locale -name doesn't specify a charset, the default is what glibc defines. -This change can result in using the different coding systems as -default in some locale (e.g. vi_VN). - -*** The keyboard-coding-system is now automatically set based on your -current locale settings if you are not using a window system. This -can mean that the META key doesn't work but generates non-ASCII -characters instead, depending on how the terminal (or terminal -emulator) works. Use `set-keyboard-coding-system' (or customize -keyboard-coding-system) if you prefer META to work (the old default) -or if the locale doesn't describe the character set actually generated -by the keyboard. See Info node `Unibyte Mode'. - -*** The new command `set-file-name-coding-system' (C-x RET F) sets -coding system for encoding and decoding file names. A new menu item -(Options->Mule->Set Coding Systems->For File Name) invokes this -command. - -*** The new command `revert-buffer-with-coding-system' (C-x RET r) -revisits the current file using a coding system that you specify. - -*** New command `recode-region' decodes the region again by a specified -coding system. - -*** The new command `recode-file-name' changes the encoding of the name -of a file. - -*** New command `ucs-insert' inserts a character specified by its -unicode. - -*** New command quail-show-key shows what key (or key sequence) to type -in the current input method to input a character at point. - -*** Limited support for character `unification' has been added. -Emacs now knows how to translate between different representations of -the same characters in various Emacs charsets according to standard -Unicode mappings. This applies mainly to characters in the ISO 8859 -sets plus some other 8-bit sets, but can be extended. For instance, -translation works amongst the Emacs ...-iso8859-... charsets and the -mule-unicode-... ones. - -By default this translation happens automatically on encoding. -Self-inserting characters are translated to make the input conformant -with the encoding of the buffer in which it's being used, where -possible. - -You can force a more complete unification with the user option -unify-8859-on-decoding-mode. That maps all the Latin-N character sets -into Unicode characters (from the latin-iso8859-1 and -mule-unicode-0100-24ff charsets) on decoding. Note that this mode -will often effectively clobber data with an iso-2022 encoding. - -*** New language environments (set up automatically according to the -locale): Belarusian, Bulgarian, Chinese-EUC-TW, Croatian, Esperanto, -French, Georgian, Italian, Latin-7, Latvian, Lithuanian, Malayalam, -Russian, Russian, Slovenian, Swedish, Tajik, Tamil, UTF-8,Ukrainian, -Welsh,Latin-6, Windows-1255. - -*** New input methods: latin-alt-postfix, latin-postfix, latin-prefix, -belarusian, bulgarian-bds, bulgarian-phonetic, chinese-sisheng (for -Chinese Pinyin characters), croatian, dutch, georgian, latvian-keyboard, -lithuanian-numeric, lithuanian-keyboard, malayalam-inscript, rfc1345, -russian-computer, sgml, slovenian, tamil-inscript, ukrainian-computer, -ucs, vietnamese-telex, welsh. - -*** There is support for decoding Greek and Cyrillic characters into -either Unicode (the mule-unicode charsets) or the iso-8859 charsets, -when possible. The latter are more space-efficient. - This is controlled by user option utf-fragment-on-decoding. - -*** Improved Thai support. A new minor mode `thai-word-mode' (which is -automatically activated if you select Thai as a language -environment) changes key bindings of most word-oriented commands to -versions which recognize Thai words. Affected commands are - M-f (forward-word) - M-b (backward-word) - M-d (kill-word) - M-DEL (backward-kill-word) - M-t (transpose-words) - M-q (fill-paragraph) - -*** Indian support has been updated. -The in-is13194 coding system is now Unicode-based. CDAC fonts are -assumed. There is a framework for supporting various Indian scripts, -but currently only Devanagari, Malayalam and Tamil are supported. - -*** The utf-8/16 coding systems have been enhanced. -By default, untranslatable utf-8 sequences are simply composed into -single quasi-characters. User option `utf-translate-cjk-mode' (it is -turned on by default) arranges to translate many utf-8 CJK character -sequences into real Emacs characters in a similar way to the Mule-UCS -system. As this loads a fairly big data on demand, people who are not -interested in CJK characters may want to customize it to nil. -You can augment/amend the CJK translation via hash tables -`ucs-mule-cjk-to-unicode' and `ucs-unicode-to-mule-cjk'. The utf-8 -coding system now also encodes characters from most of Emacs's -one-dimensional internal charsets, specifically the ISO-8859 ones. -The utf-16 coding system is affected similarly. - -*** A UTF-7 coding system is available in the library `utf-7'. - -*** A new coding system `euc-tw' has been added for traditional Chinese -in CNS encoding; it accepts both Big 5 and CNS as input; on saving, -Big 5 is then converted to CNS. - -*** Many new coding systems are available in the `code-pages' library. -These include complete versions of most of those in codepage.el, based -on Unicode mappings. `codepage-setup' is now obsolete and is used -only in the MS-DOS port of Emacs. All coding systems defined in -`code-pages' are auto-loaded. - -*** New variable `utf-translate-cjk-unicode-range' controls which -Unicode characters to translate in `utf-translate-cjk-mode'. - -*** iso-10646-1 (`Unicode') fonts can be used to display any range of -characters encodable by the utf-8 coding system. Just specify the -fontset appropriately. - -** Customize changes: - -*** Custom themes are collections of customize options. Create a -custom theme with M-x customize-create-theme. Use M-x load-theme to -load and enable a theme, and M-x disable-theme to disable it. Use M-x -enable-theme to enable a disabled theme. - -*** The commands M-x customize-face and M-x customize-face-other-window -now look at the character after point. If a face or faces are -specified for that character, the commands by default customize those -faces. - -*** The face-customization widget has been reworked to be less confusing. -In particular, when you enable a face attribute using the corresponding -check-box, there's no longer a redundant `*' option in value selection -for that attribute; the values you can choose are only those which make -sense for the attribute. When an attribute is de-selected by unchecking -its check-box, then the (now ignored, but still present temporarily in -case you re-select the attribute) value is hidden. - -*** When you set or reset a variable's value in a Customize buffer, -the previous value becomes the "backup value" of the variable. -You can go back to that backup value by selecting "Use Backup Value" -under the "[State]" button. - -** Dired mode: - -*** In Dired's ! command (dired-do-shell-command), `*' and `?' now -control substitution of the file names only when they are surrounded -by whitespace. This means you can now use them as shell wildcards -too. If you want to use just plain `*' as a wildcard, type `*""'; the -double quotes make no difference in the shell, but they prevent -special treatment in `dired-do-shell-command'. - -*** The Dired command `dired-goto-file' is now bound to j, not M-g. -This is to avoid hiding the global key binding of M-g. - -*** New faces dired-header, dired-mark, dired-marked, dired-flagged, -dired-ignored, dired-directory, dired-symlink, dired-warning -introduced for Dired mode instead of font-lock faces. - -*** New Dired command `dired-compare-directories' marks files -with different file attributes in two dired buffers. - -*** New Dired command `dired-do-touch' (bound to T) changes timestamps -of marked files with the value entered in the minibuffer. - -*** In Dired, the w command now stores the current line's file name -into the kill ring. With a zero prefix arg, it stores the absolute file name. - -*** In Dired-x, Omitting files is now a minor mode, dired-omit-mode. - -The mode toggling command is bound to M-o. A new command -dired-mark-omitted, bound to * O, marks omitted files. The variable -dired-omit-files-p is obsoleted, use the mode toggling function -instead. - -*** The variables dired-free-space-program and dired-free-space-args -have been renamed to directory-free-space-program and -directory-free-space-args, and they now apply whenever Emacs puts a -directory listing into a buffer. - -** Comint changes: - -*** The new INSIDE_EMACS environment variable is set to "t" in subshells -running inside Emacs. This supersedes the EMACS environment variable, -which will be removed in a future Emacs release. Programs that need -to know whether they are started inside Emacs should check INSIDE_EMACS -instead of EMACS. - -*** The comint prompt can now be made read-only, using the new user -option `comint-prompt-read-only'. This is not enabled by default, -except in IELM buffers. The read-only status of IELM prompts can be -controlled with the new user option `ielm-prompt-read-only', which -overrides `comint-prompt-read-only'. - -The new commands `comint-kill-whole-line' and `comint-kill-region' -support editing comint buffers with read-only prompts. - -`comint-kill-whole-line' is like `kill-whole-line', but ignores both -read-only and field properties. Hence, it always kill entire -lines, including any prompts. - -`comint-kill-region' is like `kill-region', except that it ignores -read-only properties, if it is safe to do so. This means that if any -part of a prompt is deleted, then the entire prompt must be deleted -and that all prompts must stay at the beginning of a line. If this is -not the case, then `comint-kill-region' behaves just like -`kill-region' if read-only properties are involved: it copies the text -to the kill-ring, but does not delete it. - -*** The new command `comint-insert-previous-argument' in comint-derived -modes (shell-mode, etc.) inserts arguments from previous command lines, -like bash's `ESC .' binding. It is bound by default to `C-c .', but -otherwise behaves quite similarly to the bash version. - -*** `comint-use-prompt-regexp-instead-of-fields' has been renamed -`comint-use-prompt-regexp'. The old name has been kept as an alias, -but declared obsolete. - -** M-x Compile changes: - -*** M-x compile has become more robust and reliable - -Quite a few more kinds of messages are recognized. Messages that are -recognized as warnings or informational come in orange or green, instead of -red. Informational messages are by default skipped with `next-error' -(controlled by `compilation-skip-threshold'). - -Location data is collected on the fly as the *compilation* buffer changes. -This means you could modify messages to make them point to different files. -This also means you can not go to locations of messages you may have deleted. - -The variable `compilation-error-regexp-alist' has now become customizable. If -you had added your own regexps to this, you'll probably need to include a -leading `^', otherwise they'll match anywhere on a line. There is now also a -`compilation-mode-font-lock-keywords' and it nicely handles all the checks -that configure outputs and -o options so you see at a glance where you are. - -The new file etc/compilation.txt gives examples of each type of message. - -*** New user option `compilation-environment'. -This option allows you to specify environment variables for inferior -compilation processes without affecting the environment that all -subprocesses inherit. - -*** New user option `compilation-disable-input'. -If this is non-nil, send end-of-file as compilation process input. - -*** New options `next-error-highlight' and `next-error-highlight-no-select' -specify the method of highlighting of the corresponding source line -in new face `next-error'. - -*** A new minor mode `next-error-follow-minor-mode' can be used in -compilation-mode, grep-mode, occur-mode, and diff-mode (i.e. all the -modes that can use `next-error'). In this mode, cursor motion in the -buffer causes automatic display in another window of the corresponding -matches, compilation errors, etc. This minor mode can be toggled with -C-c C-f. - -*** When the left fringe is displayed, an arrow points to current message in -the compilation buffer. - -*** The new variable `compilation-context-lines' controls lines of leading -context before the current message. If nil and the left fringe is displayed, -it doesn't scroll the compilation output window. If there is no left fringe, -no arrow is displayed and a value of nil means display the message at the top -of the window. - -** Occur mode changes: - -*** The new command `multi-occur' is just like `occur', except it can -search multiple buffers. There is also a new command -`multi-occur-in-matching-buffers' which allows you to specify the -buffers to search by their filenames or buffer names. Internally, -Occur mode has been rewritten, and now uses font-lock, among other -changes. - -*** You can now use next-error (C-x `) and previous-error to advance to -the next/previous matching line found by M-x occur. - -*** In the *Occur* buffer, `o' switches to it in another window, and -C-o displays the current line's occurrence in another window without -switching to it. - -** Grep changes: - -*** Grep has been decoupled from compilation mode setup. - -There's a new separate package grep.el, with its own submenu and -customization group. - -*** `grep-find' is now also available under the name `find-grep' where -people knowing `find-grep-dired' would probably expect it. - -*** New commands `lgrep' (local grep) and `rgrep' (recursive grep) are -more user-friendly versions of `grep' and `grep-find', which prompt -separately for the regular expression to match, the files to search, -and the base directory for the search. Case sensitivity of the -search is controlled by the current value of `case-fold-search'. - -These commands build the shell commands based on the new variables -`grep-template' (lgrep) and `grep-find-template' (rgrep). - -The files to search can use aliases defined in `grep-files-aliases'. - -Subdirectories listed in `grep-find-ignored-directories' such as those -typically used by various version control systems, like CVS and arch, -are automatically skipped by `rgrep'. - -*** The grep commands provide highlighting support. - -Hits are fontified in green, and hits in binary files in orange. Grep buffers -can be saved and automatically revisited. - -*** New option `grep-highlight-matches' highlights matches in *grep* -buffer. It uses a special feature of some grep programs which accept ---color option to output markers around matches. When going to the next -match with `next-error' the exact match is highlighted in the source -buffer. Otherwise, if `grep-highlight-matches' is nil, the whole -source line is highlighted. - -*** New key bindings in grep output window: -SPC and DEL scrolls window up and down. C-n and C-p moves to next and -previous match in the grep window. RET jumps to the source line of -the current match. `n' and `p' shows next and previous match in -other window, but does not switch buffer. `{' and `}' jumps to the -previous or next file in the grep output. TAB also jumps to the next -file. - -*** M-x grep now tries to avoid appending `/dev/null' to the command line -by using GNU grep `-H' option instead. M-x grep automatically -detects whether this is possible or not the first time it is invoked. -When `-H' is used, the grep command line supplied by the user is passed -unchanged to the system to execute, which allows more complicated -command lines to be used than was possible before. - -*** The new variables `grep-window-height' and `grep-scroll-output' override -the corresponding compilation mode settings, for grep commands only. - -** Cursor display changes: - -*** Emacs can produce an underscore-like (horizontal bar) cursor. -The underscore cursor is set by putting `(cursor-type . hbar)' in -default-frame-alist. It supports variable heights, like the `bar' -cursor does. - -*** The variable `cursor-in-non-selected-windows' can now be set to any -of the recognized cursor types. - -*** Display of hollow cursors now obeys the buffer-local value (if any) -of `cursor-in-non-selected-windows' in the buffer that the cursor -appears in. - -*** On text terminals, the variable `visible-cursor' controls whether Emacs -uses the "very visible" cursor (the default) or the normal cursor. - -*** The X resource cursorBlink can be used to turn off cursor blinking. - -*** On X, MS Windows, and Mac OS, the blinking cursor's "off" state is -now controlled by the variable `blink-cursor-alist'. - -** X Windows Support: - -*** Emacs now supports drag and drop for X. Dropping a file on a window -opens it, dropping text inserts the text. Dropping a file on a dired -buffer copies or moves the file to that directory. - -*** Under X11, it is possible to swap Alt and Meta (and Super and Hyper). -The new variables `x-alt-keysym', `x-hyper-keysym', `x-meta-keysym', -and `x-super-keysym' can be used to choose which keysyms Emacs should -use for the modifiers. For example, the following two lines swap -Meta and Alt: - (setq x-alt-keysym 'meta) - (setq x-meta-keysym 'alt) - -*** The X resource useXIM can be used to turn off use of XIM, which can -speed up Emacs with slow networking to the X server. - -If the configure option `--without-xim' was used to turn off use of -XIM by default, the X resource useXIM can be used to turn it on. - -*** The new variable `x-select-request-type' controls how Emacs -requests X selection. The default value is nil, which means that -Emacs requests X selection with types COMPOUND_TEXT and UTF8_STRING, -and use the more appropriately result. - -*** The scrollbar under LessTif or Motif has a smoother drag-scrolling. -On the other hand, the size of the thumb does not represent the actual -amount of text shown any more (only a crude approximation of it). - -** Xterm support: - -*** If you enable Xterm Mouse mode, Emacs will respond to mouse clicks -on the mode line, header line and display margin, when run in an xterm. - -*** Improved key bindings support when running in an xterm. -When Emacs is running in an xterm more key bindings are available. -The following should work: -{C,S,C-S,A}-{right,left,up,down,prior,next,delete,insert,F1-12}. -These key bindings work on xterm from X.org 6.8 (and later versions), -they might not work on some older versions of xterm, or on some -proprietary versions. -The various keys generated by xterm when the "modifyOtherKeys" -resource is set are also supported. - -** Character terminal color support changes: - -*** The new command-line option --color=MODE lets you specify a standard -mode for a tty color support. It is meant to be used on character -terminals whose capabilities are not set correctly in the terminal -database, or with terminal emulators which support colors, but don't -set the TERM environment variable to a name of a color-capable -terminal. "emacs --color" uses the same color commands as GNU `ls' -when invoked with "ls --color", so if your terminal can support colors -in "ls --color", it will support "emacs --color" as well. See the -user manual for the possible values of the MODE parameter. - -*** Emacs now supports several character terminals which provide more -than 8 colors. For example, for `xterm', 16-color, 88-color, and -256-color modes are supported. Emacs automatically notes at startup -the extended number of colors, and defines the appropriate entries for -all of these colors. - -*** Emacs now uses the full range of available colors for the default -faces when running on a color terminal, including 16-, 88-, and -256-color xterms. This means that when you run "emacs -nw" on an -88-color or 256-color xterm, you will see essentially the same face -colors as on X. - -*** There's a new support for colors on `rxvt' terminal emulator. - -** ebnf2ps changes: - -*** New option `ebnf-arrow-extra-width' which specify extra width for arrow -shape drawing. -The extra width is used to avoid that the arrowhead and the terminal border -overlap. It depends on `ebnf-arrow-shape' and `ebnf-line-width'. - -*** New option `ebnf-arrow-scale' which specify the arrow scale. -Values lower than 1.0, shrink the arrow. -Values greater than 1.0, expand the arrow. - -* New Modes and Packages in Emacs 22.1 - -** CUA mode is now part of the Emacs distribution. - -The new cua package provides CUA-like keybindings using C-x for -cut (kill), C-c for copy, C-v for paste (yank), and C-z for undo. -With cua, the region can be set and extended using shifted movement -keys (like pc-selection-mode) and typed text replaces the active -region (like delete-selection-mode). Do not enable these modes with -cua-mode. Customize the variable `cua-mode' to enable cua. - -The cua-selection-mode enables the CUA keybindings for the region but -does not change the bindings for C-z/C-x/C-c/C-v. It can be used as a -replacement for pc-selection-mode. - -In addition, cua provides unified rectangle support with visible -rectangle highlighting: Use C-return to start a rectangle, extend it -using the movement commands (or mouse-3), and cut or copy it using C-x -or C-c (using C-w and M-w also works). - -Use M-o and M-c to `open' or `close' the rectangle, use M-b or M-f, to -fill it with blanks or another character, use M-u or M-l to upcase or -downcase the rectangle, use M-i to increment the numbers in the -rectangle, use M-n to fill the rectangle with a numeric sequence (such -as 10 20 30...), use M-r to replace a regexp in the rectangle, and use -M-' or M-/ to restrict command on the rectangle to a subset of the -rows. See the commentary in cua-base.el for more rectangle commands. - -Cua also provides unified support for registers: Use a numeric -prefix argument between 0 and 9, i.e. M-0 .. M-9, for C-x, C-c, and -C-v to cut or copy into register 0-9, or paste from register 0-9. - -The last text deleted (not killed) is automatically stored in -register 0. This includes text deleted by typing text. - -Finally, cua provides a global mark which is set using S-C-space. -When the global mark is active, any text which is cut or copied is -automatically inserted at the global mark position. See the -commentary in cua-base.el for more global mark related commands. - -The features of cua also works with the standard Emacs bindings for -kill, copy, yank, and undo. If you want to use cua mode, but don't -want the C-x, C-c, C-v, and C-z bindings, you can customize the -`cua-enable-cua-keys' variable. - -Note: This version of cua mode is not backwards compatible with older -versions of cua.el and cua-mode.el. To ensure proper operation, you -must remove older versions of cua.el or cua-mode.el as well as the -loading and customization of those packages from the .emacs file. - -** Tramp is now part of the distribution. - -This package is similar to Ange-FTP: it allows you to edit remote -files. But whereas Ange-FTP uses FTP to access the remote host, -Tramp uses a shell connection. The shell connection is always used -for filename completion and directory listings and suchlike, but for -the actual file transfer, you can choose between the so-called -`inline' methods (which transfer the files through the shell -connection using base64 or uu encoding) and the `out-of-band' methods -(which invoke an external copying program such as `rcp' or `scp' or -`rsync' to do the copying). - -Shell connections can be acquired via `rsh', `ssh', `telnet' and also -`su' and `sudo'. Ange-FTP is still supported via the `ftp' method. - -If you want to disable Tramp you should set - - (setq tramp-default-method "ftp") - -Removing Tramp, and re-enabling Ange-FTP, can be achieved by M-x -tramp-unload-tramp. - -** The image-dired.el package allows you to easily view, tag and in -other ways manipulate image files and their thumbnails, using dired as -the main interface. Image-Dired provides functionality to generate -simple image galleries. - -** Image files are normally visited in Image mode, which lets you toggle -between viewing the image and viewing the text using C-c C-c. - -** The new python.el package is used to edit Python and Jython programs. - -** The URL package (which had been part of W3) is now part of Emacs. - -** Calc is now part of the Emacs distribution. - -Calc is an advanced desk calculator and mathematical tool written in -Emacs Lisp. The prefix for Calc has been changed to `C-x *' and Calc -can be started with `C-x * *'. The Calc manual is separate from the -Emacs manual; within Emacs, type "C-h i m calc RET" to read the -manual. A reference card is available in `etc/calccard.tex' and -`etc/calccard.ps'. - -** Org mode is now part of the Emacs distribution - -Org mode is a mode for keeping notes, maintaining ToDo lists, and -doing project planning with a fast and effective plain-text system. -It also contains a plain-text table editor with spreadsheet-like -capabilities. - -The Org mode table editor can be integrated into any major mode by -activating the minor Orgtbl-mode. - -The documentation for org-mode is in a separate manual; within Emacs, -type "C-h i m org RET" to read that manual. A reference card is -available in `etc/orgcard.tex' and `etc/orgcard.ps'. - -** ERC is now part of the Emacs distribution. - -ERC is a powerful, modular, and extensible IRC client for Emacs. - -To see what modules are available, type -M-x customize-option erc-modules RET. - -To start an IRC session with ERC, type M-x erc, and follow the prompts -for server, port, and nick. - -** Rcirc is now part of the Emacs distribution. - -Rcirc is an Internet relay chat (IRC) client. It supports -simultaneous connections to multiple IRC servers. Each discussion -takes place in its own buffer. For each connection you can join -several channels (many-to-many) and participate in private -(one-to-one) chats. Both channel and private chats are contained in -separate buffers. - -To start an IRC session using the default parameters, type M-x irc. -If you type C-u M-x irc, it prompts you for the server, nick, port and -startup channel parameters before connecting. - -** The new package ibuffer provides a powerful, completely -customizable replacement for buff-menu.el. - -** Newsticker is now part of the Emacs distribution. - -Newsticker asynchronously retrieves headlines (RSS) from a list of news -sites, prepares these headlines for reading, and allows for loading the -corresponding articles in a web browser. Its documentation is in a -separate manual. - -** The wdired.el package allows you to use normal editing commands on Dired -buffers to change filenames, permissions, etc... - -** Ido mode is now part of the Emacs distribution. - -The ido (interactively do) package is an extension of the iswitchb -package to do interactive opening of files and directories in addition -to interactive buffer switching. Ido is a superset of iswitchb (with -a few exceptions), so don't enable both packages. - -** The new global minor mode `file-name-shadow-mode' modifies the way -filenames being entered by the user in the minibuffer are displayed, so -that it's clear when part of the entered filename will be ignored due to -Emacs' filename parsing rules. The ignored portion can be made dim, -invisible, or otherwise less visually noticeable. The display method can -be displayed by customizing the variable `file-name-shadow-properties'. - -** Emacs' keyboard macro facilities have been enhanced by the new -kmacro package. - -Keyboard macros are now defined and executed via the F3 and F4 keys: -F3 starts a macro, F4 ends the macro, and pressing F4 again executes -the last macro. While defining the macro, F3 inserts a counter value -which automatically increments every time the macro is executed. - -There is now a keyboard macro ring which stores the most recently -defined macros. - -The C-x C-k sequence is now a prefix for the kmacro keymap which -defines bindings for moving through the keyboard macro ring, -C-x C-k C-p and C-x C-k C-n, editing the last macro C-x C-k C-e, -manipulating the macro counter and format via C-x C-k C-c, -C-x C-k C-a, and C-x C-k C-f. See the commentary in kmacro.el -for more commands. - -The original macro bindings C-x (, C-x ), and C-x e are still -available, but they now interface to the keyboard macro ring too. - -The C-x e command now automatically terminates the current macro -before calling it, if used while defining a macro. - -In addition, when ending or calling a macro with C-x e, the macro can -be repeated immediately by typing just the `e'. You can customize -this behavior via the variables kmacro-call-repeat-key and -kmacro-call-repeat-with-arg. - -Keyboard macros can now be debugged and edited interactively. -C-x C-k SPC steps through the last keyboard macro one key sequence -at a time, prompting for the actions to take. - -** The new keypad setup package provides several common bindings for -the numeric keypad which is available on most keyboards. The numeric -keypad typically has the digits 0 to 9, a decimal point, keys marked -+, -, /, and *, an Enter key, and a NumLock toggle key. The keypad -package only controls the use of the digit and decimal keys. - -By customizing the variables `keypad-setup', `keypad-shifted-setup', -`keypad-numlock-setup', and `keypad-numlock-shifted-setup', or by -using the function `keypad-setup', you can rebind all digit keys and -the decimal key of the keypad in one step for each of the four -possible combinations of the Shift key state (not pressed/pressed) and -the NumLock toggle state (off/on). - -The choices for the keypad keys in each of the above states are: -`Plain numeric keypad' where the keys generates plain digits, -`Numeric keypad with decimal key' where the character produced by the -decimal key can be customized individually (for internationalization), -`Numeric Prefix Arg' where the keypad keys produce numeric prefix args -for Emacs editing commands, `Cursor keys' and `Shifted Cursor keys' -where the keys work like (shifted) arrow keys, home/end, etc., and -`Unspecified/User-defined' where the keypad keys (kp-0, kp-1, etc.) -are left unspecified and can be bound individually through the global -or local keymaps. - -** The printing package is now part of the Emacs distribution. - -If you enable the printing package by including (require 'printing) in -the .emacs file, the normal Print item on the File menu is replaced -with a Print sub-menu which allows you to preview output through -ghostview, use ghostscript to print (if you don't have a PostScript -printer) or send directly to printer a PostScript code generated by -`ps-print' package. Use M-x pr-help for more information. - -** The new package longlines.el provides a minor mode for editing text -files composed of long lines, based on the `use-hard-newlines' -mechanism. The long lines are broken up by inserting soft newlines, -which are automatically removed when saving the file to disk or -copying into the kill ring, clipboard, etc. By default, Longlines -mode inserts soft newlines automatically during editing, a behavior -referred to as "soft word wrap" in other text editors. This is -similar to Refill mode, but more reliable. To turn the word wrap -feature off, set `longlines-auto-wrap' to nil. - -** SES mode (ses-mode) is a new major mode for creating and editing -spreadsheet files. Besides the usual Emacs features (intuitive command -letters, undo, cell formulas in Lisp, plaintext files, etc.) it also offers -viral immunity and import/export of tab-separated values. - -** The new package table.el implements editable, WYSIWYG, embedded -`text tables' in Emacs buffers. It simulates the effect of putting -these tables in a special major mode. The package emulates WYSIWYG -table editing available in modern word processors. The package also -can generate a table source in typesetting and markup languages such -as latex and html from the visually laid out text table. - -** Filesets are collections of files. You can define a fileset in -various ways, such as based on a directory tree or based on -program files that include other program files. - -Once you have defined a fileset, you can perform various operations on -all the files in it, such as visiting them or searching and replacing -in them. - -** The minor mode Reveal mode makes text visible on the fly as you -move your cursor into hidden regions of the buffer. -It should work with any package that uses overlays to hide parts -of a buffer, such as outline-minor-mode, hs-minor-mode, hide-ifdef-mode, ... - -There is also Global Reveal mode which affects all buffers. - -** New minor mode, Visible mode, toggles invisibility in the current buffer. -When enabled, it makes all invisible text visible. When disabled, it -restores the previous value of `buffer-invisibility-spec'. - -** The new package flymake.el does on-the-fly syntax checking of program -source files. See the Flymake's Info manual for more details. - -** savehist saves minibuffer histories between sessions. -To use this feature, turn on savehist-mode in your `.emacs' file. - -** The ruler-mode.el library provides a minor mode for displaying an -"active" ruler in the header line. You can use the mouse to visually -change the `fill-column', `window-margins' and `tab-stop-list' -settings. - -** The file t-mouse.el is now part of Emacs and provides access to mouse -events from the console. It still requires gpm to work but has been updated -for Emacs 22. In particular, the mode-line is now position sensitive. - -** The new package scroll-lock.el provides the Scroll Lock minor mode -for pager-like scrolling. Keys which normally move point by line or -paragraph will scroll the buffer by the respective amount of lines -instead and point will be kept vertically fixed relative to window -boundaries during scrolling. - -** The new global minor mode `size-indication-mode' (off by default) -shows the size of accessible part of the buffer on the mode line. - -** The new package conf-mode.el handles thousands of configuration files, with -varying syntaxes for comments (;, #, //, /* */ or !), assignment (var = value, -var : value, var value or keyword var value) and sections ([section] or -section { }). Many files under /etc/, or with suffixes like .cf through -.config, .properties (Java), .desktop (KDE/Gnome), .ini and many others are -recognized. - -** GDB-Script-mode is used for files like .gdbinit. - -** The new package dns-mode.el adds syntax highlighting of DNS master files. -It is a modern replacement for zone-mode.el, which is now obsolete. - -** `cfengine-mode' is a major mode for editing GNU Cfengine -configuration files. - -** The TCL package tcl-mode.el was replaced by tcl.el. -This was actually done in Emacs-21.1, and was not documented. - -* Changes in Specialized Modes and Packages in Emacs 22.1: - -** Changes in Dired - -*** Bindings for Image-Dired added. -Several new keybindings, all starting with the C-t prefix, have been -added to Dired. They are all bound to commands in Image-Dired. As a -starting point, mark some image files in a dired buffer and do C-t d -to display thumbnails of them in a separate buffer. - -** Info mode changes - -*** Images in Info pages are supported. - -Info pages show embedded images, in Emacs frames with image support. -Info documentation that includes images, processed with makeinfo -version 4.7 or newer, compiles to Info pages with embedded images. - -*** `Info-index' offers completion. - -*** http and ftp links in Info are now operational: they look like cross -references and following them calls `browse-url'. - -*** isearch in Info uses Info-search and searches through multiple nodes. +* New Modes and Packages in Emacs 23.1 -Before leaving the initial Info node isearch fails once with the error -message [initial node], and with subsequent C-s/C-r continues through -other nodes. When isearch fails for the rest of the manual, it wraps -around the whole manual to the top/final node. The user option -`Info-isearch-search' controls whether to use Info-search for isearch, -or the default isearch search function that wraps around the current -Info node. - -*** New search commands: `Info-search-case-sensitively' (bound to S), -`Info-search-backward', and `Info-search-next' which repeats the last -search without prompting for a new search string. - -*** New command `info-apropos' searches the indices of the known -Info files on your system for a string, and builds a menu of the -possible matches. - -*** New command `Info-history-forward' (bound to r and new toolbar icon) -moves forward in history to the node you returned from after using -`Info-history-back' (renamed from `Info-last'). - -*** New command `Info-history' (bound to L) displays a menu of visited nodes. - -*** New command `Info-toc' (bound to T) creates a node with table of contents -from the tree structure of menus of the current Info file. - -*** New command `Info-copy-current-node-name' (bound to w) copies -the current Info node name into the kill ring. With a zero prefix -arg, puts the node name inside the `info' function call. - -*** New face `info-xref-visited' distinguishes visited nodes from unvisited -and a new option `Info-fontify-visited-nodes' to control this. - -*** A numeric prefix argument of `info' selects an Info buffer -with the number appended to the `*info*' buffer name (e.g. "*info*<2>"). - -*** Info now hides node names in menus and cross references by default. - -If you prefer the old behavior, you can set the new user option -`Info-hide-note-references' to nil. - -*** The default value for `Info-scroll-prefer-subnodes' is now nil. - -** Emacs server changes - -*** You can have several Emacs servers on the same machine. - - % emacs --eval '(setq server-name "foo")' -f server-start & - % emacs --eval '(setq server-name "bar")' -f server-start & - % emacsclient -s foo file1 - % emacsclient -s bar file2 - -*** The `emacsclient' command understands the options `--eval' and -`--display' which tell Emacs respectively to evaluate the given Lisp -expression and to use the given display when visiting files. - -*** User option `server-mode' can be used to start a server process. - -** Locate changes - -*** By default, reverting the *Locate* buffer now just runs the last -`locate' command back over again without offering to update the locate -database (which normally only works if you have root privileges). If -you prefer the old behavior, set the new customizable option -`locate-update-when-revert' to t. - -** Desktop package - -*** Desktop saving is now a minor mode, `desktop-save-mode'. - -*** The variable `desktop-enable' is obsolete. - -Customize `desktop-save-mode' to enable desktop saving. - -*** Buffers are saved in the desktop file in the same order as that in the -buffer list. - -*** The desktop package can be customized to restore only some buffers -immediately, remaining buffers are restored lazily (when Emacs is -idle). - -*** New command line option --no-desktop - -*** New commands: - - desktop-revert reverts to the last loaded desktop. - - desktop-change-dir kills current desktop and loads a new. - - desktop-save-in-desktop-dir saves desktop in the directory from which - it was loaded. - - desktop-lazy-complete runs the desktop load to completion. - - desktop-lazy-abort aborts lazy loading of the desktop. - -*** New customizable variables: - - desktop-save. Determines whether the desktop should be saved when it is - killed. - - desktop-file-name-format. Format in which desktop file names should be saved. - - desktop-path. List of directories in which to lookup the desktop file. - - desktop-locals-to-save. List of local variables to save. - - desktop-globals-to-clear. List of global variables that `desktop-clear' will clear. - - desktop-clear-preserve-buffers-regexp. Regexp identifying buffers that `desktop-clear' - should not delete. - - desktop-restore-eager. Number of buffers to restore immediately. Remaining buffers are - restored lazily (when Emacs is idle). - - desktop-lazy-verbose. Verbose reporting of lazily created buffers. - - desktop-lazy-idle-delay. Idle delay before starting to create buffers. - -*** New hooks: - - desktop-after-read-hook run after a desktop is loaded. - - desktop-no-desktop-file-hook run when no desktop file is found. - -** Recentf changes - -The recent file list is now automatically cleaned up when recentf mode is -enabled. The new option `recentf-auto-cleanup' controls when to do -automatic cleanup. - -The ten most recent files can be quickly opened by using the shortcut -keys 1 to 9, and 0, when the recent list is displayed in a buffer via -the `recentf-open-files', or `recentf-open-more-files' commands. - -The `recentf-keep' option replaces `recentf-keep-non-readable-files-p' -and provides a more general mechanism to customize which file names to -keep in the recent list. - -With the more advanced option `recentf-filename-handlers', you can -specify functions that successively transform recent file names. For -example, if set to `file-truename' plus `abbreviate-file-name', the -same file will not be in the recent list with different symbolic -links, and the file name will be abbreviated. - -To follow naming convention, `recentf-menu-append-commands-flag' -replaces the misnamed option `recentf-menu-append-commands-p'. The -old name remains available as alias, but has been marked obsolete. - -** Auto-Revert changes - -*** You can now use Auto Revert mode to `tail' a file. - -If point is at the end of a file buffer before reverting, Auto Revert -mode keeps it at the end after reverting. Similarly if point is -displayed at the end of a file buffer in any window, it stays at -the end of the buffer in that window. This allows to tail a file: -just put point at the end of the buffer and it stays there. This -rule applies to file buffers. For non-file buffers, the behavior can -be mode dependent. - -If you are sure that the file will only change by growing at the end, -then you can tail the file more efficiently by using the new minor -mode Auto Revert Tail mode. The function `auto-revert-tail-mode' -toggles this mode. - -*** Auto Revert mode is now more careful to avoid excessive reverts and -other potential problems when deciding which non-file buffers to -revert. This matters especially if Global Auto Revert mode is enabled -and `global-auto-revert-non-file-buffers' is non-nil. Auto Revert -mode only reverts a non-file buffer if the buffer has a non-nil -`revert-buffer-function' and a non-nil `buffer-stale-function', which -decides whether the buffer should be reverted. Currently, this means -that auto reverting works for Dired buffers (although this may not -work properly on all operating systems) and for the Buffer Menu. - -*** If the new user option `auto-revert-check-vc-info' is non-nil, Auto -Revert mode reliably updates version control info (such as the version -control number in the mode line), in all version controlled buffers in -which it is active. If the option is nil, the default, then this info -only gets updated whenever the buffer gets reverted. - -** Changes in Shell Mode - -*** Shell output normally scrolls so that the input line is at the -bottom of the window -- thus showing the maximum possible text. (This -is similar to the way sequential output to a terminal works.) - -** Changes in Hi Lock - -*** hi-lock-mode now only affects a single buffer, and a new function -`global-hi-lock-mode' enables Hi Lock in all buffers. By default, if -hi-lock-mode is used in what appears to be the initialization file, a -warning message suggests to use global-hi-lock-mode instead. However, -if the new variable `hi-lock-archaic-interface-deduce' is non-nil, -using hi-lock-mode in an initialization file will turn on Hi Lock in all -buffers and no warning will be issued (for compatibility with the -behavior in older versions of Emacs). - -** Changes in Allout - -*** Topic cryptography added, enabling easy gpg topic encryption and -decryption. Per-topic basis enables interspersing encrypted-text and -clear-text within a single file to your heart's content, using symmetric -and/or public key modes. Time-limited key caching, user-provided -symmetric key hinting and consistency verification, auto-encryption of -pending topics on save, and more, make it easy to use encryption in -powerful ways. Encryption behavior customization is collected in the -allout-encryption customization group. - -*** Default command prefix was changed to "\C-c " (control-c space), to -avoid intruding on user's keybinding space. Customize the -`allout-command-prefix' variable to your preference. - -*** Some previously rough topic-header format edge cases are reconciled. -Level 1 topics use the mode's comment format, and lines starting with the -asterisk - for instance, the comment close of some languages (eg, c's "*/" -or mathematica's "*)") - at the beginning of line are no longer are -interpreted as level 1 topics in those modes. - -*** Many or most commonly occurring "accidental" topics are disqualified. -Text in item bodies that looks like a low-depth topic is no longer mistaken -for one unless its first offspring (or that of its next sibling with -offspring) is only one level deeper. - -For example, pasting some text with a bunch of leading asterisks into a -topic that's followed by a level 3 or deeper topic will not cause the -pasted text to be mistaken for outline structure. - -The same constraint is applied to any level 2 or 3 topics. - -This settles an old issue where typed or pasted text needed to be carefully -reviewed, and sometimes doctored, to avoid accidentally disrupting the -outline structure. Now that should be generally unnecessary, as the most -prone-to-occur accidents are disqualified. - -*** Allout now refuses to create "containment discontinuities", where a -topic is shifted deeper than the offspring-depth of its container. On the -other hand, allout now operates gracefully with existing containment -discontinuities, revealing excessively contained topics rather than either -leaving them hidden or raising an error. - -*** Navigation within an item is easier. Repeated beginning-of-line and -end-of-line key commands (usually, ^A and ^E) cycle through the -beginning/end-of-line and then beginning/end of topic, etc. See new -customization vars `allout-beginning-of-line-cycles' and -`allout-end-of-line-cycles'. - -*** New or revised allout-mode activity hooks enable creation of -cooperative enhancements to allout mode without changes to the mode, -itself. - -See `allout-exposure-change-hook', `allout-structure-added-hook', -`allout-structure-deleted-hook', and `allout-structure-shifted-hook'. - -`allout-exposure-change-hook' replaces the existing -`allout-view-change-hook', which is being deprecated. Both are still -invoked, but `allout-view-change-hook' will eventually be ignored. -`allout-exposure-change-hook' is called with explicit arguments detailing -the specifics of each change (as are the other new hooks), making it easier -to use than the old version. - -There is a new mode deactivation hook, `allout-mode-deactivate-hook', for -coordinating with deactivation of allout-mode. Both that and the mode -activation hook, `allout-mode-hook' are now run after the `allout-mode' -variable is changed, rather than before. - -*** Allout now uses text overlay's `invisible' property for concealed text, -instead of selective-display. This simplifies the code, in particular -avoiding the need for kludges for isearch dynamic-display, discretionary -handling of edits of concealed text, undo concerns, etc. - -*** There are many other fixes and refinements, including: - - - repaired inhibition of inadvertent edits to concealed text, without - inhibiting undo; we now reveal undo changes within concealed text. - - auto-fill-mode is now left inactive when allout-mode starts, if it - already was inactive. also, `allout-inhibit-auto-fill' custom - configuration variable makes it easy to disable auto fill in allout - outlines in general or on a per-buffer basis. - - allout now tolerates fielded text in outlines without disruption. - - hot-spot navigation now is modularized with a new function, - `allout-hotspot-key-handler', enabling easier use and enhancement of - the functionality in allout addons. - - repaired retention of topic body hanging indent upon topic depth shifts - - bulleting variation is simpler and more accommodating, both in the - default behavior and in ability to vary when creating new topics - - mode deactivation now does cleans up effectively, more properly - restoring affected variables and hooks to former state, removing - overlays, etc. see `allout-add-resumptions' and - `allout-do-resumptions', which replace the old `allout-resumptions'. - - included a few unit-tests for interior functionality. developers can - have them automatically run at the end of module load by customizing - the option `allout-run-unit-tests-on-load'. - - many, many other, more minor tweaks, fixes, and refinements. - - version number incremented to 2.2 - -** Hideshow mode changes - -*** New variable `hs-set-up-overlay' allows customization of the overlay -used to effect hiding for hideshow minor mode. Integration with isearch -handles the overlay property `display' specially, preserving it during -temporary overlay showing in the course of an isearch operation. - -*** New variable `hs-allow-nesting' non-nil means that hiding a block does -not discard the hidden state of any "internal" blocks; when the parent -block is later shown, the internal blocks remain hidden. Default is nil. - -** FFAP changes - -*** New ffap commands and keybindings: - -C-x C-r (`ffap-read-only'), -C-x C-v (`ffap-alternate-file'), C-x C-d (`ffap-list-directory'), -C-x 4 r (`ffap-read-only-other-window'), C-x 4 d (`ffap-dired-other-window'), -C-x 5 r (`ffap-read-only-other-frame'), C-x 5 d (`ffap-dired-other-frame'). - -*** FFAP accepts wildcards in a file name by default. - -C-x C-f passes the file name to `find-file' with non-nil WILDCARDS -argument, which visits multiple files, and C-x d passes it to `dired'. - -** Changes in Skeleton - -*** In skeleton.el, `-' marks the `skeleton-point' without interregion interaction. - -`@' has reverted to only setting `skeleton-positions' and no longer -sets `skeleton-point'. Skeletons which used @ to mark -`skeleton-point' independent of `_' should now use `-' instead. The -updated `skeleton-insert' docstring explains these new features along -with other details of skeleton construction. - -*** The variables `skeleton-transformation', `skeleton-filter', and -`skeleton-pair-filter' have been renamed to -`skeleton-transformation-function', `skeleton-filter-function', and -`skeleton-pair-filter-function'. The old names are still available -as aliases. - -** HTML/SGML changes - -*** Emacs now tries to set up buffer coding systems for HTML/XML files -automatically. - -*** SGML mode has indentation and supports XML syntax. -The new variable `sgml-xml-mode' tells SGML mode to use XML syntax. -When this option is enabled, SGML tags are inserted in XML style, -i.e., there is always a closing tag. -By default, its setting is inferred on a buffer-by-buffer basis -from the file name or buffer contents. - -*** The variable `sgml-transformation' has been renamed to -`sgml-transformation-function'. The old name is still available as -alias. - -*** `xml-mode' is now an alias for `sgml-mode', which has XML support. - -** TeX modes - -*** New major mode Doctex mode, for *.dtx files. - -*** C-c C-c prompts for a command to run, and tries to offer a good default. - -*** The user option `tex-start-options-string' has been replaced -by two new user options: `tex-start-options', which should hold -command-line options to feed to TeX, and `tex-start-commands' which should hold -TeX commands to use at startup. - -*** verbatim environments are now highlighted in courier by font-lock -and super/sub-scripts are made into super/sub-scripts. - -** RefTeX mode changes - -*** Changes to RefTeX's table of contents - -The new command keys "<" and ">" in the TOC buffer promote/demote the -section at point or all sections in the current region, with full -support for multifile documents. - -The new command `reftex-toc-recenter' (`C-c -') shows the current -section in the TOC buffer without selecting the TOC window. -Recentering can happen automatically in idle time when the option -`reftex-auto-recenter-toc' is turned on. The highlight in the TOC -buffer stays when the focus moves to a different window. A dedicated -frame can show the TOC with the current section always automatically -highlighted. The frame is created and deleted from the toc buffer -with the `d' key. - -The toc window can be split off horizontally instead of vertically. -See new option `reftex-toc-split-windows-horizontally'. - -Labels can be renamed globally from the table of contents using the -key `M-%'. - -The new command `reftex-goto-label' jumps directly to a label -location. - -*** Changes related to citations and BibTeX database files - -Commands that insert a citation now prompt for optional arguments when -called with a prefix argument. Related new options are -`reftex-cite-prompt-optional-args' and `reftex-cite-cleanup-optional-args'. - -The new command `reftex-create-bibtex-file' creates a BibTeX database -with all entries referenced in the current document. The keys "e" and -"E" allow to produce a BibTeX database file from entries marked in a -citation selection buffer. - -The command `reftex-citation' uses the word in the buffer before the -cursor as a default search string. - -The support for chapterbib has been improved. Different chapters can -now use BibTeX or an explicit `thebibliography' environment. - -The macros which specify the bibliography file (like \bibliography) -can be configured with the new option `reftex-bibliography-commands'. - -Support for jurabib has been added. - -*** Global index matched may be verified with a user function. - -During global indexing, a user function can verify an index match. -See new option `reftex-index-verify-function'. - -*** Parsing documents with many labels can be sped up. - -Operating in a document with thousands of labels can be sped up -considerably by allowing RefTeX to derive the type of a label directly -from the label prefix like `eq:' or `fig:'. The option -`reftex-trust-label-prefix' needs to be configured in order to enable -this feature. While the speed-up is significant, this may reduce the -quality of the context offered by RefTeX to describe a label. - -*** Miscellaneous changes - -The macros which input a file in LaTeX (like \input, \include) can be -configured in the new option `reftex-include-file-commands'. - -RefTeX supports global incremental search. - -** BibTeX mode - -*** The new command `bibtex-url' browses a URL for the BibTeX entry at -point (bound to C-c C-l and mouse-2, RET on clickable fields). - -*** The new command `bibtex-entry-update' (bound to C-c C-u) updates -an existing BibTeX entry by inserting fields that may occur but are not -present. - -*** New `bibtex-entry-format' option `required-fields', enabled by default. - -*** `bibtex-maintain-sorted-entries' can take values `plain', -`crossref', and `entry-class' which control the sorting scheme used -for BibTeX entries. `bibtex-sort-entry-class' controls the sorting -scheme `entry-class'. TAB completion for reference keys and -automatic detection of duplicates does not require anymore that -`bibtex-maintain-sorted-entries' is non-nil. - -*** The new command `bibtex-complete' completes word fragment before -point according to context (bound to M-tab). - -*** In BibTeX mode the command `fill-paragraph' (M-q) fills -individual fields of a BibTeX entry. - -*** The new variable `bibtex-autofill-types' contains a list of entry -types for which fields are filled automatically (if possible). - -*** The new commands `bibtex-find-entry' and `bibtex-find-crossref' -locate entries and crossref'd entries (bound to C-c C-s and C-c C-x). -Crossref fields are clickable (bound to mouse-2, RET). - -*** The new variables `bibtex-files' and `bibtex-file-path' define a set -of BibTeX files that are searched for entry keys. - -*** The new command `bibtex-validate-globally' checks for duplicate keys -in multiple BibTeX files. - -*** If the new variable `bibtex-autoadd-commas' is non-nil, -automatically add missing commas at end of BibTeX fields. - -*** The new command `bibtex-copy-summary-as-kill' pushes summary -of BibTeX entry to kill ring (bound to C-c C-t). - -*** If the new variable `bibtex-parse-keys-fast' is non-nil, -use fast but simplified algorithm for parsing BibTeX keys. - -*** The new variables bibtex-expand-strings and -bibtex-autokey-expand-strings control the expansion of strings when -extracting the content of a BibTeX field. - -*** The variables `bibtex-autokey-name-case-convert' and -`bibtex-autokey-titleword-case-convert' have been renamed to -`bibtex-autokey-name-case-convert-function' and -`bibtex-autokey-titleword-case-convert-function'. The old names are -still available as aliases. - -** GUD changes - -*** The new package gdb-ui.el provides an enhanced graphical interface to -GDB. You can interact with GDB through the GUD buffer in the usual way, but -there are also further buffers which control the execution and describe the -state of your program. It can separate the input/output of your program from -that of GDB and watches expressions in the speedbar. It also uses features of -Emacs 21/22 such as the toolbar, and bitmaps in the fringe to indicate -breakpoints. - -To use this package just type M-x gdb. See the Emacs manual if you want the -old behaviour. - -*** GUD mode has its own tool bar for controlling execution of the inferior -and other common debugger commands. - -*** In GUD mode, when talking to GDB, C-x C-a C-j "jumps" the program -counter to the specified source line (the one where point is). - -*** The variable tooltip-gud-tips-p has been removed. GUD tooltips can now be -toggled independently of normal tooltips with the minor mode -`gud-tooltip-mode'. - -*** In graphical mode, with a C program, GUD Tooltips have been extended to -display the #define directive associated with an identifier when program is -not executing. - -*** GUD mode improvements for jdb: - -**** Search for source files using jdb classpath and class information. -Fast startup since there is no need to scan all source files up front. -There is also no need to create and maintain lists of source -directories to scan. Look at `gud-jdb-use-classpath' and -`gud-jdb-classpath' customization variables documentation. - -**** The previous method of searching for source files has been -preserved in case someone still wants/needs to use it. -Set `gud-jdb-use-classpath' to nil. - -**** Supports the standard breakpoint (gud-break, gud-clear) -set/clear operations from Java source files under the classpath, stack -traversal (gud-up, gud-down), and run until current stack finish -(gud-finish). - -**** Supports new jdb (Java 1.2 and later) in addition to oldjdb -(Java 1.1 jdb). - -*** Added jdb Customization Variables - -**** `gud-jdb-command-name'. What command line to use to invoke jdb. - -**** `gud-jdb-use-classpath'. Allows selection of java source file searching -method: set to t for new method, nil to scan `gud-jdb-directories' for -java sources (previous method). - -**** `gud-jdb-directories'. List of directories to scan and search for Java -classes using the original gud-jdb method (if `gud-jdb-use-classpath' -is nil). - -*** Minor Improvements - -**** The STARTTLS wrapper (starttls.el) can now use GNUTLS -instead of the OpenSSL based `starttls' tool. For backwards -compatibility, it prefers `starttls', but you can toggle -`starttls-use-gnutls' to switch to GNUTLS (or simply remove the -`starttls' tool). - -**** Do not allow debugger output history variable to grow without bounds. - -** Lisp mode changes - -*** Lisp mode now uses `font-lock-doc-face' for doc strings. - -*** C-u C-M-q in Emacs Lisp mode pretty-prints the list after point. - -*** New features in evaluation commands - -**** The function `eval-defun' (C-M-x) called on defface reinitializes -the face to the value specified in the defface expression. - -**** Typing C-x C-e twice prints the value of the integer result -in additional formats (octal, hexadecimal, character) specified -by the new function `eval-expression-print-format'. The same -function also defines the result format for `eval-expression' (M-:), -`eval-print-last-sexp' (C-j) and some edebug evaluation functions. - -** Changes to cmuscheme - -*** Emacs now offers to start Scheme if the user tries to -evaluate a Scheme expression but no Scheme subprocess is running. - -*** If the file ~/.emacs_NAME or ~/.emacs.d/init_NAME.scm (where NAME -is the name of the Scheme interpreter) exists, its contents are sent -to the Scheme subprocess upon startup. - -*** There are new commands to instruct the Scheme interpreter to trace -procedure calls (`scheme-trace-procedure') and to expand syntactic forms -(`scheme-expand-current-form'). The commands actually sent to the Scheme -subprocess are controlled by the user options `scheme-trace-command', -`scheme-untrace-command' and `scheme-expand-current-form'. - -** Ewoc changes - -*** The new function `ewoc-delete' deletes specified nodes. - -*** `ewoc-create' now takes optional arg NOSEP, which inhibits insertion of -a newline after each pretty-printed entry and after the header and footer. -This allows you to create multiple-entry ewocs on a single line and to -effect "invisible" nodes by arranging for the pretty-printer to not print -anything for those nodes. - -For example, these two sequences of expressions behave identically: - -;; NOSEP nil -(defun PP (data) (insert (format "%S" data))) -(ewoc-create 'PP "start\n") - -;; NOSEP t -(defun PP (data) (insert (format "%S\n" data))) -(ewoc-create 'PP "start\n\n" "\n" t) - -** CC mode changes - -*** The CC Mode manual has been extensively revised. -The information about using CC Mode has been separated from the larger -and more difficult chapters about configuration. - -*** New Minor Modes -**** Electric Minor Mode toggles the electric action of non-alphabetic keys. -The new command c-toggle-electric-mode is bound to C-c C-l. Turning the -mode off can be helpful for editing chaotically indented code and for -users new to CC Mode, who sometimes find electric indentation -disconcerting. Its current state is displayed in the mode line with an -'l', e.g. "C/al". - -**** Subword Minor Mode makes Emacs recognize word boundaries at upper case -letters in StudlyCapsIdentifiers. You enable this feature by C-c C-w. It can -also be used in non-CC Mode buffers. :-) Contributed by Masatake YAMATO. - -*** Support for the AWK language. -Support for the AWK language has been introduced. The implementation is -based around GNU AWK version 3.1, but it should work pretty well with -any AWK. As yet, not all features of CC Mode have been adapted for AWK. -Here is a summary: - -**** Indentation Engine -The CC Mode indentation engine fully supports AWK mode. - -AWK mode handles code formatted in the conventional AWK fashion: `{'s -which start actions, user-defined functions, or compound statements are -placed on the same line as the associated construct; the matching `}'s -are normally placed under the start of the respective pattern, function -definition, or structured statement. - -The predefined line-up functions haven't yet been adapted for AWK -mode, though some of them may work serendipitously. There shouldn't -be any problems writing custom indentation functions for AWK mode. - -**** Font Locking -There is a single level of font locking in AWK mode, rather than the -three distinct levels the other modes have. There are several -idiosyncrasies in AWK mode's font-locking due to the peculiarities of -the AWK language itself. - -**** Comment and Movement Commands -These commands all work for AWK buffers. The notion of "defun" has -been augmented to include AWK pattern-action pairs - the standard -"defun" commands on key sequences C-M-a, C-M-e, and C-M-h use this -extended definition. - -**** "awk" style, Auto-newline Insertion and Clean-ups -A new style, "awk" has been introduced, and this is now the default -style for AWK code. With auto-newline enabled, the clean-up -c-one-liner-defun (see above) is useful. - -*** Font lock support. -CC Mode now provides font lock support for all its languages. This -supersedes the font lock patterns that have been in the core font lock -package for C, C++, Java and Objective-C. Like indentation, font -locking is done in a uniform way across all languages (except the new -AWK mode - see below). That means that the new font locking will be -different from the old patterns in various details for most languages. - -The main goal of the font locking in CC Mode is accuracy, to provide a -dependable aid in recognizing the various constructs. Some, like -strings and comments, are easy to recognize while others like -declarations and types can be very tricky. CC Mode can go to great -lengths to recognize declarations and casts correctly, especially when -the types aren't recognized by standard patterns. This is a fairly -demanding analysis which can be slow on older hardware, and it can -therefore be disabled by choosing a lower decoration level with the -variable font-lock-maximum-decoration. - -Note that the most demanding font lock level has been tuned with lazy -fontification in mind; Just-In-Time-Lock mode should be enabled for -the highest font lock level (by default, it is). Fontifying a file -with several thousand lines in one go can take the better part of a -minute. - -**** The (c|c++|objc|java|idl|pike)-font-lock-extra-types variables -are now used by CC Mode to recognize identifiers that are certain to -be types. (They are also used in cases that aren't related to font -locking.) At the maximum decoration level, types are often recognized -properly anyway, so these variables should be fairly restrictive and -not contain patterns for uncertain types. - -**** Support for documentation comments. -There is a "plugin" system to fontify documentation comments like -Javadoc and the markup within them. It's independent of the host -language, so it's possible to e.g. turn on Javadoc font locking in C -buffers. See the variable c-doc-comment-style for details. - -Currently three kinds of doc comment styles are recognized: Sun's -Javadoc, Autodoc (which is used in Pike) and GtkDoc (used in C). (The -last was contributed by Masatake YAMATO). This is by no means a -complete list of the most common tools; if your doc comment extractor -of choice is missing then please drop a note to bug-cc-mode@gnu.org. - -**** Better handling of C++ templates. -As a side effect of the more accurate font locking, C++ templates are -now handled much better. The angle brackets that delimit them are -given parenthesis syntax so that they can be navigated like other -parens. - -This also improves indentation of templates, although there still is -work to be done in that area. E.g. it's required that multiline -template clauses are written in full and then refontified to be -recognized, and the indentation of nested templates is a bit odd and -not as configurable as it ought to be. - -**** Improved handling of Objective-C and CORBA IDL. -Especially the support for Objective-C and IDL has gotten an overhaul. -The special "@" declarations in Objective-C are handled correctly. -All the keywords used in CORBA IDL, PSDL, and CIDL are recognized and -handled correctly, also wrt indentation. - -*** Changes in Key Sequences -**** c-toggle-auto-hungry-state is no longer bound to C-c C-t. - -**** c-toggle-hungry-state is no longer bound to C-c C-d. -This binding has been taken over by c-hungry-delete-forwards. - -**** c-toggle-auto-state (C-c C-t) has been renamed to c-toggle-auto-newline. -c-toggle-auto-state remains as an alias. - -**** The new commands c-hungry-backspace and c-hungry-delete-forwards -have key bindings C-c C-DEL (or C-c DEL, for the benefit of TTYs) and -C-c C-d (or C-c C-<delete> or C-c <delete>) respectively. These -commands delete entire blocks of whitespace with a single -key-sequence. [N.B. "DEL" is the <backspace> key.] - -**** The new command c-toggle-electric-mode is bound to C-c C-l. - -**** The new command c-subword-mode is bound to C-c C-w. - -*** C-c C-s (`c-show-syntactic-information') now highlights the anchor -position(s). - -*** New syntactic symbols in IDL mode. -The top level constructs "module" and "composition" (from CIDL) are -now handled like "namespace" in C++: They are given syntactic symbols -module-open, module-close, inmodule, composition-open, -composition-close, and incomposition. - -*** New functions to do hungry delete without enabling hungry delete mode. -The new functions `c-hungry-backspace' and `c-hungry-delete-forward' -provide hungry deletion without having to toggle a mode. They are -bound to C-c C-DEL and C-c C-d (and several variants, for the benefit -of different keyboard setups. See "Changes in key sequences" above). - -*** Better control over `require-final-newline'. - -The variable `c-require-final-newline' specifies which of the modes -implemented by CC mode should insert final newlines. Its value is a -list of modes, and only those modes should do it. By default the list -includes C, C++ and Objective-C modes. - -Whichever modes are in this list will set `require-final-newline' -based on `mode-require-final-newline'. - -*** Format change for syntactic context elements. - -The elements in the syntactic context returned by `c-guess-basic-syntax' -and stored in `c-syntactic-context' has been changed somewhat to allow -attaching more information. They are now lists instead of single cons -cells. E.g. a line that previously had the syntactic analysis - -((inclass . 11) (topmost-intro . 13)) - -is now analyzed as - -((inclass 11) (topmost-intro 13)) - -In some cases there are more than one position given for a syntactic -symbol. - -This change might affect code that calls `c-guess-basic-syntax' -directly, and custom lineup functions if they use -`c-syntactic-context'. However, the argument given to lineup -functions is still a single cons cell with nil or an integer in the -cdr. - -*** API changes for derived modes. - -There have been extensive changes "under the hood" which can affect -derived mode writers. Some of these changes are likely to cause -incompatibilities with existing derived modes, but on the other hand -care has now been taken to make it possible to extend and modify CC -Mode with less risk of such problems in the future. - -**** New language variable system. -These are variables whose values vary between CC Mode's different -languages. See the comment blurb near the top of cc-langs.el. - -**** New initialization functions. -The initialization procedure has been split up into more functions to -give better control: `c-basic-common-init', `c-font-lock-init', and -`c-init-language-vars'. - -*** Changes in analysis of nested syntactic constructs. -The syntactic analysis engine has better handling of cases where -several syntactic constructs appear nested on the same line. They are -now handled as if each construct started on a line of its own. - -This means that CC Mode now indents some cases differently, and -although it's more consistent there might be cases where the old way -gave results that's more to one's liking. So if you find a situation -where you think that the indentation has become worse, please report -it to bug-cc-mode@gnu.org. - -**** New syntactic symbol substatement-label. -This symbol is used when a label is inserted between a statement and -its substatement. E.g: - - if (x) - x_is_true: - do_stuff(); - -*** Better handling of multiline macros. - -**** Syntactic indentation inside macros. -The contents of multiline #define's are now analyzed and indented -syntactically just like other code. This can be disabled by the new -variable `c-syntactic-indentation-in-macros'. A new syntactic symbol -`cpp-define-intro' has been added to control the initial indentation -inside `#define's. - -**** New lineup function `c-lineup-cpp-define'. - -Now used by default to line up macro continuation lines. The behavior -of this function closely mimics the indentation one gets if the macro -is indented while the line continuation backslashes are temporarily -removed. If syntactic indentation in macros is turned off, it works -much line `c-lineup-dont-change', which was used earlier, but handles -empty lines within the macro better. - -**** Automatically inserted newlines continues the macro if used within one. -This applies to the newlines inserted by the auto-newline mode, and to -`c-context-line-break' and `c-context-open-line'. - -**** Better alignment of line continuation backslashes. -`c-backslash-region' tries to adapt to surrounding backslashes. New -variable `c-backslash-max-column' puts a limit on how far out -backslashes can be moved. - -**** Automatic alignment of line continuation backslashes. -This is controlled by the new variable `c-auto-align-backslashes'. It -affects `c-context-line-break', `c-context-open-line' and newlines -inserted in Auto-Newline mode. - -**** Line indentation works better inside macros. -Regardless whether syntactic indentation and syntactic indentation -inside macros are enabled or not, line indentation now ignores the -line continuation backslashes. This is most noticeable when syntactic -indentation is turned off and there are empty lines (save for the -backslash) in the macro. - -*** indent-for-comment is more customizable. -The behavior of M-; (indent-for-comment) is now configurable through -the variable `c-indent-comment-alist'. The indentation behavior is -based on the preceding code on the line, e.g. to get two spaces after -#else and #endif but indentation to `comment-column' in most other -cases (something which was hardcoded earlier). - -*** New function `c-context-open-line'. -It's the open-line equivalent of `c-context-line-break'. - -*** New clean-ups - -**** `comment-close-slash'. -With this clean-up, a block (i.e. c-style) comment can be terminated by -typing a slash at the start of a line. - -**** `c-one-liner-defun' -This clean-up compresses a short enough defun (for example, an AWK -pattern/action pair) onto a single line. "Short enough" is configurable. - -*** New lineup functions - -**** `c-lineup-string-cont' -This lineup function lines up a continued string under the one it -continues. E.g: - -result = prefix + "A message " - "string."; <- c-lineup-string-cont - -**** `c-lineup-cascaded-calls' -Lines up series of calls separated by "->" or ".". - -**** `c-lineup-knr-region-comment' -Gives (what most people think is) better indentation of comments in -the "K&R region" between the function header and its body. - -**** `c-lineup-gcc-asm-reg' -Provides better indentation inside asm blocks. - -**** `c-lineup-argcont' -Lines up continued function arguments after the preceding comma. - -*** Added toggle for syntactic indentation. -The function `c-toggle-syntactic-indentation' can be used to toggle -syntactic indentation. - -*** Better caching of the syntactic context. -CC Mode caches the positions of the opening parentheses (of any kind) -of the lists surrounding the point. Those positions are used in many -places as anchor points for various searches. The cache is now -improved so that it can be reused to a large extent when the point is -moved. The less it moves, the less needs to be recalculated. - -The effect is that CC Mode should be fast most of the time even when -opening parens are hung (i.e. aren't in column zero). It's typically -only the first time after the point is moved far down in a complex -file that it'll take noticeable time to find out the syntactic -context. - -*** Statements are recognized in a more robust way. -Statements are recognized most of the time even when they occur in an -"invalid" context, e.g. in a function argument. In practice that can -happen when macros are involved. - -*** Improved the way `c-indent-exp' chooses the block to indent. -It now indents the block for the closest sexp following the point -whose closing paren ends on a different line. This means that the -point doesn't have to be immediately before the block to indent. -Also, only the block and the closing line is indented; the current -line is left untouched. - -** Changes in Makefile mode - -*** Makefile mode has submodes for automake, gmake, makepp, BSD make and imake. - -The former two couldn't be differentiated before, and the latter three -are new. Font-locking is robust now and offers new customizable -faces. - -*** The variable `makefile-query-one-target-method' has been renamed -to `makefile-query-one-target-method-function'. The old name is still -available as alias. - -** Sql changes - -*** The variable `sql-product' controls the highlighting of different -SQL dialects. This variable can be set globally via Customize, on a -buffer-specific basis via local variable settings, or for the current -session using the new SQL->Product submenu. (This menu replaces the -SQL->Highlighting submenu.) - -The following values are supported: - - ansi ANSI Standard (default) - db2 DB2 - informix Informix - ingres Ingres - interbase Interbase - linter Linter - ms Microsoft - mysql MySQL - oracle Oracle - postgres Postgres - solid Solid - sqlite SQLite - sybase Sybase - -The current product name will be shown on the mode line following the -SQL mode indicator. - -The technique of setting `sql-mode-font-lock-defaults' directly in -your `.emacs' will no longer establish the default highlighting -- Use -`sql-product' to accomplish this. - -ANSI keywords are always highlighted. - -*** The function `sql-add-product-keywords' can be used to add -font-lock rules to the product specific rules. For example, to have -all identifiers ending in `_t' under MS SQLServer treated as a type, -you would use the following line in your .emacs file: - - (sql-add-product-keywords 'ms - '(("\\<\\w+_t\\>" . font-lock-type-face))) - -*** Oracle support includes keyword highlighting for Oracle 9i. - -Most SQL and PL/SQL keywords are implemented. SQL*Plus commands are -highlighted in `font-lock-doc-face'. - -*** Microsoft SQLServer support has been significantly improved. - -Keyword highlighting for SqlServer 2000 is implemented. -sql-interactive-mode defaults to use osql, rather than isql, because -osql flushes its error stream more frequently. Thus error messages -are displayed when they occur rather than when the session is -terminated. - -If the username and password are not provided to `sql-ms', osql is -called with the `-E' command line argument to use the operating system -credentials to authenticate the user. - -*** Postgres support is enhanced. -Keyword highlighting of Postgres 7.3 is implemented. Prompting for -the username and the pgsql `-U' option is added. - -*** MySQL support is enhanced. -Keyword highlighting of MySql 4.0 is implemented. - -*** Imenu support has been enhanced to locate tables, views, indexes, -packages, procedures, functions, triggers, sequences, rules, and -defaults. - -*** Added SQL->Start SQLi Session menu entry which calls the -appropriate `sql-interactive-mode' wrapper for the current setting of -`sql-product'. - -*** sql.el supports the SQLite interpreter--call 'sql-sqlite'. - -** Fortran mode changes - -*** F90 mode and Fortran mode have support for `hs-minor-mode' (hideshow). -It cannot deal with every code format, but ought to handle a sizeable -majority. - -*** F90 mode and Fortran mode have new navigation commands -`f90-end-of-block', `f90-beginning-of-block', `f90-next-block', -`f90-previous-block', `fortran-end-of-block', -`fortran-beginning-of-block'. - -*** Fortran mode does more font-locking by default. Use level 3 -highlighting for the old default. - -*** Fortran mode has a new variable `fortran-directive-re'. -Adapt this to match the format of any compiler directives you use. -Lines that match are never indented, and are given distinctive font-locking. - -*** The new function `f90-backslash-not-special' can be used to change -the syntax of backslashes in F90 buffers. - -** Miscellaneous programming mode changes - -*** In sh-script, a continuation line is only indented if the backslash was -preceded by a SPC or a TAB. - -*** Perl mode has a new variable `perl-indent-continued-arguments'. - -*** The old Octave mode bindings C-c f and C-c i have been changed -to C-c C-f and C-c C-i. The C-c C-i subcommands now have duplicate -bindings on control characters--thus, C-c C-i C-b is the same as -C-c C-i b, and so on. - -*** Prolog mode has a new variable `prolog-font-lock-keywords' -to support use of font-lock. - -** VC Changes - -*** New backends for Subversion and Meta-CVS. - -*** The new variable `vc-cvs-global-switches' specifies switches that -are passed to any CVS command invoked by VC. - -These switches are used as "global options" for CVS, which means they -are inserted before the command name. For example, this allows you to -specify a compression level using the `-z#' option for CVS. - -*** The key C-x C-q only changes the read-only state of the buffer -(toggle-read-only). It no longer checks files in or out. - -We made this change because we held a poll and found that many users -were unhappy with the previous behavior. If you do prefer this -behavior, you can bind `vc-toggle-read-only' to C-x C-q in your -`.emacs' file: - - (global-set-key "\C-x\C-q" 'vc-toggle-read-only) - -The function `vc-toggle-read-only' will continue to exist. - -*** VC-Annotate mode enhancements - -In VC-Annotate mode, you can now use the following key bindings for -enhanced functionality to browse the annotations of past revisions, or -to view diffs or log entries directly from vc-annotate-mode: - - P: annotates the previous revision - N: annotates the next revision - J: annotates the revision at line - A: annotates the revision previous to line - D: shows the diff of the revision at line with its previous revision - L: shows the log of the revision at line - W: annotates the workfile (most up to date) version - -** pcl-cvs changes - -*** In pcl-cvs mode, there is a new `d y' command to view the diffs -between the local version of the file and yesterday's head revision -in the repository. - -*** In pcl-cvs mode, there is a new `d r' command to view the changes -anyone has committed to the repository since you last executed -`checkout', `update' or `commit'. That means using cvs diff options --rBASE -rHEAD. - -** Diff changes - -*** M-x diff uses Diff mode instead of Compilation mode. - -*** Diff mode key bindings changed. - -These are the new bindings: - -C-c C-e diff-ediff-patch (old M-A) -C-c C-n diff-restrict-view (old M-r) -C-c C-r diff-reverse-direction (old M-R) -C-c C-u diff-context->unified (old M-U) -C-c C-w diff-refine-hunk (old C-c C-r) - -To convert unified to context format, use C-u C-c C-u. -In addition, C-c C-u now operates on the region -in Transient Mark mode when the mark is active. - -** EDiff changes. - -*** When comparing directories. -Typing D brings up a buffer that lists the differences between the contents of -directories. Now it is possible to use this buffer to copy the missing files -from one directory to another. - -*** When comparing files or buffers. -Typing the = key now offers to perform the word-by-word comparison of the -currently highlighted regions in an inferior Ediff session. If you answer 'n' -then it reverts to the old behavior and asks the user to select regions for -comparison. - -*** The new command `ediff-backup' compares a file with its most recent -backup using `ediff'. If you specify the name of a backup file, -`ediff-backup' compares it with the file of which it is a backup. - -** Etags changes. - -*** New regular expressions features - -**** New syntax for regular expressions, multi-line regular expressions. - -The syntax --ignore-case-regexp=/regex/ is now undocumented and retained -only for backward compatibility. The new equivalent syntax is ---regex=/regex/i. More generally, it is --regex=/TAGREGEX/TAGNAME/MODS, -where `/TAGNAME' is optional, as usual, and MODS is a string of 0 or -more characters among `i' (ignore case), `m' (multi-line) and `s' -(single-line). The `m' and `s' modifiers behave as in Perl regular -expressions: `m' allows regexps to match more than one line, while `s' -(which implies `m') means that `.' matches newlines. The ability to -span newlines allows writing of much more powerful regular expressions -and rapid prototyping for tagging new languages. - -**** Regular expressions can use char escape sequences as in GCC. - -The escaped character sequence \a, \b, \d, \e, \f, \n, \r, \t, \v, -respectively, stand for the ASCII characters BEL, BS, DEL, ESC, FF, NL, -CR, TAB, VT. - -**** Regular expressions can be bound to a given language. - -The syntax --regex={LANGUAGE}REGEX means that REGEX is used to make tags -only for files of language LANGUAGE, and ignored otherwise. This is -particularly useful when storing regexps in a file. - -**** Regular expressions can be read from a file. - -The --regex=@regexfile option means read the regexps from a file, one -per line. Lines beginning with space or tab are ignored. - -*** New language parsing features - -**** New language HTML. - -Tags are generated for `title' as well as `h1', `h2', and `h3'. Also, -when `name=' is used inside an anchor and whenever `id=' is used. - -**** New language PHP. - -Functions, classes and defines are tags. If the --members option is -specified to etags, variables are tags also. - -**** New language Lua. - -All functions are tagged. - -**** The `::' qualifier triggers C++ parsing in C file. - -Previously, only the `template' and `class' keywords had this effect. - -**** The GCC __attribute__ keyword is now recognized and ignored. - -**** In C and derived languages, etags creates tags for #undef - -**** In Makefiles, constants are tagged. - -If you want the old behavior instead, thus avoiding to increase the -size of the tags file, use the --no-globals option. - -**** In Perl, packages are tags. - -Subroutine tags are named from their package. You can jump to sub tags -as you did before, by the sub name, or additionally by looking for -package::sub. - -**** In Prolog, etags creates tags for rules in addition to predicates. - -**** New default keywords for TeX. - -The new keywords are def, newcommand, renewcommand, newenvironment and -renewenvironment. - -*** Honor #line directives. - -When Etags parses an input file that contains C preprocessor's #line -directives, it creates tags using the file name and line number -specified in those directives. This is useful when dealing with code -created from Cweb source files. When Etags tags the generated file, it -writes tags pointing to the source file. - -*** New option --parse-stdin=FILE. - -This option is mostly useful when calling etags from programs. It can -be used (only once) in place of a file name on the command line. Etags -reads from standard input and marks the produced tags as belonging to -the file FILE. - -*** The --members option is now the default. - -Use --no-members if you want the old default behaviour of not tagging -struct members in C, members variables in C++ and variables in PHP. - -** Ctags changes. - -*** Ctags now allows duplicate tags - -** Rmail changes - -*** Support for `movemail' from GNU mailutils was added to Rmail. - -This version of `movemail' allows to read mail from a wide range of -mailbox formats, including remote POP3 and IMAP4 mailboxes with or -without TLS encryption. If GNU mailutils is installed on the system -and its version of `movemail' can be found in exec-path, it will be -used instead of the native one. - -*** The new commands rmail-end-of-message and rmail-summary end-of-message, -by default bound to `/', go to the end of the current mail message in -Rmail and Rmail summary buffers. - -*** Rmail now displays 5-digit message ids in its summary buffer. - -** Gnus package - -*** Gnus now includes Sieve and PGG - -Sieve is a library for managing Sieve scripts. PGG is a library to handle -PGP/MIME. - -*** There are many news features, bug fixes and improvements. - -See the file GNUS-NEWS or the node "Oort Gnus" in the Gnus manual for details. - -** MH-E changes. - -Upgraded to MH-E version 8.0.3. There have been major changes since -version 5.0.2; see MH-E-NEWS for details. - -** Miscellaneous mail changes - -*** The new variable `mail-default-directory' specifies -`default-directory' for mail buffers. This directory is used for -auto-save files of mail buffers. It defaults to "~/". - -*** The mode line can indicate new mail in a directory or file. - -See the documentation of the user option `display-time-mail-directory'. - -** Calendar changes - -*** There is a new calendar package, icalendar.el, that can be used to -convert Emacs diary entries to/from the iCalendar format. - -*** The new package cal-html.el writes HTML files with calendar and -diary entries. - -*** The new functions `diary-from-outlook', `diary-from-outlook-gnus', -and `diary-from-outlook-rmail' can be used to import diary entries -from Outlook-format appointments in mail messages. The variable -`diary-outlook-formats' can be customized to recognize additional -formats. - -*** The procedure for activating appointment reminders has changed: -use the new function `appt-activate'. The new variable -`appt-display-format' controls how reminders are displayed, replacing -`appt-issue-message', `appt-visible', and `appt-msg-window'. - -*** The function `simple-diary-display' now by default sets a header line. -This can be controlled through the variables `diary-header-line-flag' -and `diary-header-line-format'. - -*** Diary sexp entries can have custom marking in the calendar. -Diary sexp functions which only apply to certain days (such as -`diary-block' or `diary-cyclic') now take an optional parameter MARK, -which is the name of a face or a single-character string indicating -how to highlight the day in the calendar display. Specifying a -single-character string as @var{mark} places the character next to the -day in the calendar. Specifying a face highlights the day with that -face. This lets you have different colors or markings for vacations, -appointments, paydays or anything else using a sexp. - -*** The meanings of C-x < and C-x > have been interchanged. -< means to scroll backward in time, and > means to scroll forward. - -*** You can now use < and >, instead of C-x < and C-x >, to scroll -the calendar left or right. - -*** The new function `calendar-goto-day-of-year' (g D) prompts for a -year and day number, and moves to that date. Negative day numbers -count backward from the end of the year. - -*** The new Calendar function `calendar-goto-iso-week' (g w) -prompts for a year and a week number, and moves to the first -day of that ISO week. - -*** The functions `holiday-easter-etc' and `holiday-advent' now take -optional arguments, in order to only report on the specified holiday -rather than all. This makes customization of variables such as -`christian-holidays' simpler. - -*** The new variable `calendar-minimum-window-height' affects the -window generated by the function `generate-calendar-window'. - -** Speedbar changes - -*** Speedbar items can now be selected by clicking mouse-1, based on -the `mouse-1-click-follows-link' mechanism. - -*** The new command `speedbar-toggle-line-expansion', bound to SPC, -contracts or expands the line under the cursor. - -*** New command `speedbar-create-directory', bound to `M'. - -*** The new commands `speedbar-expand-line-descendants' and -`speedbar-contract-line-descendants', bound to `[' and `]' -respectively, expand and contract the line under cursor with all of -its descendents. - -*** The new user option `speedbar-use-tool-tips-flag', if non-nil, -means to display tool-tips for speedbar items. - -*** The new user option `speedbar-query-confirmation-method' controls -how querying is performed for file operations. A value of 'always -means to always query before file operations; 'none-but-delete means -to not query before any file operations, except before a file -deletion. - -*** The new user option `speedbar-select-frame-method' specifies how -to select a frame for displaying a file opened with the speedbar. A -value of 'attached means to use the attached frame (the frame that -speedbar was started from.) A number such as 1 or -1 means to pass -that number to `other-frame'. - -*** SPC and DEL are no longer bound to scroll up/down in the speedbar -keymap. - -*** The frame management code in speedbar.el has been split into a new -`dframe' library. Emacs Lisp code that makes use of the speedbar -should use `dframe-attached-frame' instead of -`speedbar-attached-frame', `dframe-timer' instead of `speedbar-timer', -`dframe-close-frame' instead of `speedbar-close-frame', and -`dframe-activity-change-focus-flag' instead of -`speedbar-activity-change-focus-flag'. The variables -`speedbar-update-speed' and `speedbar-navigating-speed' are also -obsolete; use `dframe-update-speed' instead. - -** battery.el changes - -*** display-battery-mode replaces display-battery. - -*** battery.el now works on recent versions of OS X. - -** Games - -*** The game `mpuz' is enhanced. - -`mpuz' now allows the 2nd factor not to have two identical digits. By -default, all trivial operations involving whole lines are performed -automatically. The game uses faces for better visual feedback. - -** Obsolete and deleted packages - -*** fast-lock.el and lazy-lock.el are obsolete. Use jit-lock.el instead. - -*** iso-acc.el is now obsolete. Use one of the latin input methods instead. - -*** zone-mode.el is now obsolete. Use dns-mode.el instead. - -*** cplus-md.el has been deleted. - -** Miscellaneous - -*** The variable `woman-topic-at-point' is renamed -to `woman-use-topic-at-point' and behaves differently: if this -variable is non-nil, the `woman' command uses the word at point -automatically, without asking for a confirmation. Otherwise, the word -at point is suggested as default, but not inserted at the prompt. - -*** You can now customize `fill-nobreak-predicate' to control where -filling can break lines. The value is now normally a list of -functions, but it can also be a single function, for compatibility. - -Emacs provide two predicates, `fill-single-word-nobreak-p' and -`fill-french-nobreak-p', for use as the value of -`fill-nobreak-predicate'. - -*** M-x view-file and commands that use it now avoid interfering -with special modes such as Tar mode. - -*** `global-whitespace-mode' is a new alias for `whitespace-global-mode'. - -*** The saveplace.el package now filters out unreadable files. - -When you exit Emacs, the saved positions in visited files no longer -include files that aren't readable, e.g. files that don't exist. -Customize the new option `save-place-forget-unreadable-files' to nil -to get the old behavior. The new options `save-place-save-skipped' -and `save-place-skip-check-regexp' allow further fine-tuning of this -feature. - -*** Commands `winner-redo' and `winner-undo', from winner.el, are now -bound to C-c <left> and C-c <right>, respectively. This is an -incompatible change. - -*** The type-break package now allows `type-break-file-name' to be nil -and if so, doesn't store any data across sessions. This is handy if -you don't want the `.type-break' file in your home directory or are -annoyed by the need for interaction when you kill Emacs. - -*** `ps-print' can now print characters from the mule-unicode charsets. - -Printing text with characters from the mule-unicode-* sets works with -`ps-print', provided that you have installed the appropriate BDF -fonts. See the file INSTALL for URLs where you can find these fonts. - -*** New command `strokes-global-set-stroke-string'. -This is like `strokes-global-set-stroke', but it allows you to bind -the stroke directly to a string to insert. This is convenient for -using strokes as an input method. - -*** In Outline mode, `hide-body' no longer hides lines at the top -of the file that precede the first header line. - -*** `hide-ifdef-mode' now uses overlays rather than selective-display -to hide its text. This should be mostly transparent but slightly -changes the behavior of motion commands like C-e and C-p. - -*** In Artist mode the variable `artist-text-renderer' has been -renamed to `artist-text-renderer-function'. The old name is still -available as alias. - -*** In Enriched mode, `set-left-margin' and `set-right-margin' are now -by default bound to `C-c [' and `C-c ]' instead of the former `C-c C-l' -and `C-c C-r'. - -*** `partial-completion-mode' now handles partial completion on directory names. - -*** You can now disable pc-selection-mode after enabling it. - -M-x pc-selection-mode behaves like a proper minor mode, and with no -argument it toggles the mode. Turning off PC-Selection mode restores -the global key bindings that were replaced by turning on the mode. - -*** `uniquify-strip-common-suffix' tells uniquify to prefer -`file|dir1' and `file|dir2' to `file|dir1/subdir' and `file|dir2/subdir'. - -*** New user option `add-log-always-start-new-record'. - -When this option is enabled, M-x add-change-log-entry always -starts a new record regardless of when the last record is. - -*** M-x compare-windows now can automatically skip non-matching text to -resync points in both windows. - -*** PO translation files are decoded according to their MIME headers -when Emacs visits them. - -*** Telnet now prompts you for a port number with C-u M-x telnet. - -*** calculator.el now has radix grouping mode. - -To enable this, set `calculator-output-radix' non-nil. In this mode a -separator character is used every few digits, making it easier to see -byte boundaries etc. For more info, see the documentation of the -variable `calculator-radix-grouping-mode'. - -*** LDAP support now defaults to ldapsearch from OpenLDAP version 2. - -*** The terminal emulation code in term.el has been improved; it can -run most curses applications now. - -*** Support for `magic cookie' standout modes has been removed. - -Emacs still works on terminals that require magic cookies in order to -use standout mode, but they can no longer display mode-lines in -inverse-video. + +* Changes in Specialized Modes and Packages in Emacs 23.1 -* Changes in Emacs 22.1 on non-free operating systems - -** The HOME directory defaults to Application Data under the user profile. - -If you used a previous version of Emacs without setting the HOME -environment variable and a `.emacs' was saved, then Emacs will continue -using C:/ as the default HOME. But if you are installing Emacs afresh, -the default location will be the "Application Data" (or similar -localized name) subdirectory of your user profile. A typical location -of this directory is "C:\Documents and Settings\USERNAME\Application Data", -where USERNAME is your user name. - -This change means that users can now have their own `.emacs' files on -shared computers, and the default HOME directory is less likely to be -read-only on computers that are administered by someone else. - -** Images are now supported on MS Windows. - -PBM and XBM images are supported out of the box. Other image formats -depend on external libraries. All of these libraries have been ported -to Windows, and can be found in both source and binary form at -http://gnuwin32.sourceforge.net/. Note that libpng also depends on -zlib, and tiff depends on the version of jpeg that it was compiled -against. For additional information, see nt/INSTALL. - -** Sound is now supported on MS Windows. - -WAV format is supported on all versions of Windows, other formats such -as AU, AIFF and MP3 may be supported in the more recent versions of -Windows, or when other software provides hooks into the system level -sound support for those formats. - -** Tooltips now work on MS Windows. - -See the Emacs 21.1 NEWS entry for tooltips for details. - -** Pointing devices with more than 3 buttons are now supported on MS Windows. - -The new variable `w32-pass-extra-mouse-buttons-to-system' controls -whether Emacs should handle the extra buttons itself (the default), or -pass them to Windows to be handled with system-wide functions. - -** Passing resources on the command line now works on MS Windows. - -You can use --xrm to pass resource settings to Emacs, overriding any -existing values. For example: - - emacs --xrm "Emacs.Background:red" --xrm "Emacs.Geometry:100x20" - -will start up Emacs on an initial frame of 100x20 with red background, -irrespective of geometry or background setting on the Windows registry. - -** Emacs takes note of colors defined in Control Panel on MS-Windows. - -The Control Panel defines some default colors for applications in much -the same way as wildcard X Resources do on X. Emacs now adds these -colors to the colormap prefixed by System (eg SystemMenu for the -default Menu background, SystemMenuText for the foreground), and uses -some of them to initialize some of the default faces. -`list-colors-display' shows the list of System color names, in case -you wish to use them in other faces. - -** Running in a console window in Windows now uses the console size. - -Previous versions of Emacs erred on the side of having a usable Emacs -through telnet, even though that was inconvenient if you use Emacs in -a local console window with a scrollback buffer. The default value of -w32-use-full-screen-buffer is now nil, which favors local console -windows. Recent versions of Windows telnet also work well with this -setting. If you are using an older telnet server then Emacs detects -that the console window dimensions that are reported are not sane, and -defaults to 80x25. If you use such a telnet server regularly at a size -other than 80x25, you can still manually set -w32-use-full-screen-buffer to t. - -** Different shaped mouse pointers are supported on MS Windows. - -The mouse pointer changes shape depending on what is under the pointer. - -** On MS Windows, the "system caret" now follows the cursor. - -This enables Emacs to work better with programs that need to track the -cursor, for example screen magnifiers and text to speech programs. -When such a program is in use, the system caret is made visible -instead of Emacs drawing its own cursor. This seems to be required by -some programs. The new variable w32-use-visible-system-caret allows -the caret visibility to be manually toggled. - -** On MS Windows NT/W2K/XP, Emacs uses Unicode for clipboard operations. - -Those systems use Unicode internally, so this allows Emacs to share -multilingual text with other applications. On other versions of -MS Windows, Emacs now uses the appropriate locale coding-system, so -the clipboard should work correctly for your local language without -any customizations. - -** On Mac OS, `keyboard-coding-system' changes based on the keyboard script. - -** The variable `mac-keyboard-text-encoding' and the constants -`kTextEncodingMacRoman', `kTextEncodingISOLatin1', and -`kTextEncodingISOLatin2' are obsolete. - -** The variable `mac-command-key-is-meta' is obsolete. Use -`mac-command-modifier' and `mac-option-modifier' instead. - -* Incompatible Lisp Changes in Emacs 22.1 - -** Mode line display ignores text properties as well as the -:propertize and :eval forms in the value of a variable whose -`risky-local-variable' property is nil. - -The function `comint-send-input' now accepts 3 optional arguments: - - (comint-send-input &optional no-newline artificial) - -Callers sending input not from the user should use bind the 3rd -argument `artificial' to a non-nil value, to prevent Emacs from -deleting the part of subprocess output that matches the input. - -** The `read-file-name' function now returns a null string if the -user just types RET. - -** The variables post-command-idle-hook and post-command-idle-delay have -been removed. Use run-with-idle-timer instead. - -** A hex or octal escape in a string constant forces the string to -be multibyte or unibyte, respectively. - -** The explicit method of creating a display table element by -combining a face number and a character code into a numeric -glyph code is deprecated. - -Instead, the new functions `make-glyph-code', `glyph-char', and -`glyph-face' must be used to create and decode glyph codes in -display tables. - -** `suppress-keymap' now works by remapping `self-insert-command' to -the command `undefined'. (In earlier Emacs versions, it used -`substitute-key-definition' to rebind self inserting characters to -`undefined'.) - -** The third argument of `accept-process-output' is now milliseconds. -It used to be microseconds. - -** The function find-operation-coding-system may be called with a cons -(FILENAME . BUFFER) in the second argument if the first argument -OPERATION is `insert-file-contents', and thus a function registered in -`file-coding-system-alist' is also called with such an argument. - -** When Emacs receives a USR1 or USR2 signal, this generates -input events: sigusr1 or sigusr2. Use special-event-map to -handle these events. - -** The variable `memory-full' now remains t until -there is no longer a shortage of memory. - -** Support for Mocklisp has been removed. +* Changes in Emacs 23.1 on non-free operating systems -* Lisp Changes in Emacs 22.1 - -** General Lisp changes: - -*** New syntax: \s now stands for the SPACE character. - -`?\s' is a new way to write the space character. You must make sure -it is not followed by a dash, since `?\s-...' indicates the "super" -modifier. However, it would be strange to write a character constant -and a following symbol (beginning with `-') with no space between -them. - -`\s' stands for space in strings, too, but it is not really meant for -strings; it is easier and nicer just to write a space. - -*** New syntax: \uXXXX and \UXXXXXXXX specify Unicode code points in hex. - -For instance, you can use "\u0428" to specify a string consisting of -CYRILLIC CAPITAL LETTER SHA, or `"U0001D6E2" to specify one consisting -of MATHEMATICAL ITALIC CAPITAL ALPHA (the latter is greater than -#xFFFF and thus needs the longer syntax). - -This syntax works for both character constants and strings. - -*** New function `unsafep' determines whether a Lisp form is safe. - -It returns nil if the given Lisp form can't possibly do anything -dangerous; otherwise it returns a reason why the form might be unsafe -(calls unknown function, alters global variable, etc.). - -*** The function `eql' is now available without requiring the CL package. - -*** The new function `memql' is like `memq', but uses `eql' for comparison, -that is, floats are compared by value and other elements with `eq'. - -*** New functions `string-or-null-p' and `booleanp'. - -`string-or-null-p' returns non-nil iff OBJECT is a string or nil. -`booleanp' returns non-nil iff OBJECT is t or nil. - -*** `makehash' is now obsolete. Use `make-hash-table' instead. - -*** Minor change in the function `format'. - -Some flags that were accepted but not implemented (such as "*") are no -longer accepted. - -*** `add-to-list' takes an optional third argument, APPEND. - -If APPEND is non-nil, the new element gets added at the end of the -list instead of at the beginning. This change actually occurred in -Emacs 21.1, but was not documented then. - -*** New function `add-to-ordered-list' is like `add-to-list' but -associates a numeric ordering of each element added to the list. - -*** New function `add-to-history' adds an element to a history list. - -Lisp packages should use this function to add elements to their -history lists. - -If `history-delete-duplicates' is non-nil, it removes duplicates of -the new element from the history list it updates. - -*** New function `copy-tree' makes a copy of a tree. - -It recursively copies through both CARs and CDRs. - -*** New function `delete-dups' deletes `equal' duplicate elements from a list. - -It modifies the list destructively, like `delete'. Of several `equal' -occurrences of an element in the list, the one that's kept is the -first one. - -*** New function `rassq-delete-all'. - -(rassq-delete-all VALUE ALIST) deletes, from ALIST, each element whose -CDR is `eq' to the specified value. - -*** Functions `get' and `plist-get' no longer give errors for bad plists. - -They return nil for a malformed property list or if the list is -cyclic. - -*** New functions `lax-plist-get' and `lax-plist-put'. - -They are like `plist-get' and `plist-put', except that they compare -the property name using `equal' rather than `eq'. - -*** The function `number-sequence' makes a list of equally-separated numbers. - -For instance, (number-sequence 4 9) returns (4 5 6 7 8 9). By -default, the separation is 1, but you can specify a different -separation as the third argument. (number-sequence 1.5 6 2) returns -(1.5 3.5 5.5). - -*** New variables `most-positive-fixnum' and `most-negative-fixnum'. - -They hold the largest and smallest possible integer values. - -*** The function `expt' handles negative exponents differently. -The value for `(expt A B)', if both A and B are integers and B is -negative, is now a float. For example: (expt 2 -2) => 0.25. - -*** The function `atan' now accepts an optional second argument. - -When called with 2 arguments, as in `(atan Y X)', `atan' returns the -angle in radians between the vector [X, Y] and the X axis. (This is -equivalent to the standard C library function `atan2'.) - -*** New macro `with-case-table' - -This executes the body with the case table temporarily set to a given -case table. - -*** New macro `with-local-quit' temporarily allows quitting. - -A quit inside the body of `with-local-quit' is caught by the -`with-local-quit' form itself, but another quit will happen later once -the code that has inhibited quitting exits. - -This is for use around potentially blocking or long-running code -inside timer functions and `post-command-hook' functions. - -*** New macro `define-obsolete-function-alias'. - -This combines `defalias' and `make-obsolete'. - -*** New macro `eval-at-startup' specifies expressions to -evaluate when Emacs starts up. If this is done after startup, -it evaluates those expressions immediately. - -This is useful in packages that can be preloaded. - -*** New function `macroexpand-all' expands all macros in a form. - -It is similar to the Common-Lisp function of the same name. -One difference is that it guarantees to return the original argument -if no expansion is done, which can be tested using `eq'. - -*** A function or macro's doc string can now specify the calling pattern. - -You put this info in the doc string's last line. It should be -formatted so as to match the regexp "\n\n(fn .*)\\'". If you don't -specify this explicitly, Emacs determines it from the actual argument -names. Usually that default is right, but not always. - -*** New variable `print-continuous-numbering'. - -When this is non-nil, successive calls to print functions use a single -numbering scheme for circular structure references. This is only -relevant when `print-circle' is non-nil. - -When you bind `print-continuous-numbering' to t, you should -also bind `print-number-table' to nil. - -*** `list-faces-display' takes an optional argument, REGEXP. - -If it is non-nil, the function lists only faces matching this regexp. - -*** New hook `command-error-function'. - -By setting this variable to a function, you can control -how the editor command loop shows the user an error message. - -*** `debug-on-entry' accepts primitive functions that are not special forms. - -** Lisp code indentation features: - -*** The `defmacro' form can contain indentation and edebug declarations. - -These declarations specify how to indent the macro calls in Lisp mode -and how to debug them with Edebug. You write them like this: - - (defmacro NAME LAMBDA-LIST [DOC-STRING] [DECLARATION ...] ...) - -DECLARATION is a list `(declare DECLARATION-SPECIFIER ...)'. The -possible declaration specifiers are: - -(indent INDENT) - Set NAME's `lisp-indent-function' property to INDENT. - -(edebug DEBUG) - Set NAME's `edebug-form-spec' property to DEBUG. (This is - equivalent to writing a `def-edebug-spec' for the macro, - but this is cleaner.) - -*** cl-indent now allows customization of Indentation of backquoted forms. - -See the new user option `lisp-backquote-indentation'. - -*** cl-indent now handles indentation of simple and extended `loop' forms. - -The new user options `lisp-loop-keyword-indentation', -`lisp-loop-forms-indentation', and `lisp-simple-loop-indentation' can -be used to customize the indentation of keywords and forms in loop -forms. - -** Variable aliases: - -*** New function: defvaralias ALIAS-VAR BASE-VAR [DOCSTRING] - -This function defines the symbol ALIAS-VAR as a variable alias for -symbol BASE-VAR. This means that retrieving the value of ALIAS-VAR -returns the value of BASE-VAR, and changing the value of ALIAS-VAR -changes the value of BASE-VAR. - -DOCSTRING, if present, is the documentation for ALIAS-VAR; else it has -the same documentation as BASE-VAR. - -*** The macro `define-obsolete-variable-alias' combines `defvaralias' and -`make-obsolete-variable'. - -*** New function: indirect-variable VARIABLE - -This function returns the variable at the end of the chain of aliases -of VARIABLE. If VARIABLE is not a symbol, or if VARIABLE is not -defined as an alias, the function returns VARIABLE. - -It might be noteworthy that variables aliases work for all kinds of -variables, including buffer-local and frame-local variables. - -** defcustom changes: - -*** The package-version keyword has been added to provide -`customize-changed-options' functionality to packages in the future. -Developers who make use of this keyword must also update the new -variable `customize-package-emacs-version-alist'. - -*** The new customization type `float' requires a floating point number. - -** String changes: - -*** A hex escape in a string constant forces the string to be multibyte. - -*** An octal escape in a string constant forces the string to be unibyte. - -*** New function `string-to-multibyte' converts a unibyte string to a -multibyte string with the same individual character codes. - -*** `split-string' now includes null substrings in the returned list if -the optional argument SEPARATORS is non-nil and there are matches for -SEPARATORS at the beginning or end of the string. If SEPARATORS is -nil, or if the new optional third argument OMIT-NULLS is non-nil, all -empty matches are omitted from the returned list. - -*** The new function `assoc-string' replaces `assoc-ignore-case' and -`assoc-ignore-representation', which are still available, but have -been declared obsolete. - -*** New function `substring-no-properties' returns a substring without -text properties. - -** Displaying warnings to the user. - -See the functions `warn' and `display-warning', or the Lisp Manual. -If you want to be sure the warning will not be overlooked, this -facility is much better than using `message', since it displays -warnings in a separate window. - -** Progress reporters. - -These provide a simple and uniform way for commands to present -progress messages for the user. - -See the new functions `make-progress-reporter', -`progress-reporter-update', `progress-reporter-force-update', -`progress-reporter-done', and `dotimes-with-progress-reporter'. - -** Buffer positions: - -*** Function `compute-motion' now calculates the usable window -width if the WIDTH argument is nil. If the TOPOS argument is nil, -the usable window height and width is used. - -*** The `line-move', `scroll-up', and `scroll-down' functions will now -modify the window vscroll to scroll through display rows that are -taller that the height of the window, for example in the presence of -large images. To disable this feature, bind the new variable -`auto-window-vscroll' to nil. - -*** The argument to `forward-word', `backward-word' is optional. - -It defaults to 1. - -*** Argument to `forward-to-indentation' and `backward-to-indentation' is optional. - -It defaults to 1. - -*** `field-beginning' and `field-end' take new optional argument, LIMIT. - -This argument tells them not to search beyond LIMIT. Instead they -give up and return LIMIT. - -*** New function `window-line-height' is an efficient way to get -information about a specific text line in a window provided that the -window's display is up-to-date. - -*** New function `line-number-at-pos' returns the line number of a position. - -It an optional buffer position argument that defaults to point. - -*** Function `pos-visible-in-window-p' now returns the pixel coordinates -and partial visibility state of the corresponding row, if the PARTIALLY -arg is non-nil. - -*** New functions `posn-at-point' and `posn-at-x-y' return -click-event-style position information for a given visible buffer -position or for a given window pixel coordinate. - -*** New function `mouse-on-link-p' tests if a position is in a clickable link. - -This is the function used by the new `mouse-1-click-follows-link' -functionality. - -** Text modification: - -*** The new function `buffer-chars-modified-tick' returns a buffer's -tick counter for changes to characters. Each time text in that buffer -is inserted or deleted, the character-change counter is updated to the -tick counter (`buffer-modified-tick'). Text property changes leave it -unchanged. - -*** The new function `insert-for-yank' normally works like `insert', but -removes the text properties in the `yank-excluded-properties' list -and handles the `yank-handler' text property. - -*** The new function `insert-buffer-substring-as-yank' is like -`insert-for-yank' except that it gets the text from another buffer as -in `insert-buffer-substring'. - -*** The new function `insert-buffer-substring-no-properties' is like -`insert-buffer-substring', but removes all text properties from the -inserted substring. - -*** The new function `filter-buffer-substring' extracts a buffer -substring, passes it through a set of filter functions, and returns -the filtered substring. Use it instead of `buffer-substring' or -`delete-and-extract-region' when copying text into a user-accessible -data structure, such as the kill-ring, X clipboard, or a register. - -The list of filter function is specified by the new variable -`buffer-substring-filters'. For example, Longlines mode adds to -`buffer-substring-filters' to remove soft newlines from the copied -text. - -*** Function `translate-region' accepts also a char-table as TABLE -argument. - -*** The new translation table `translation-table-for-input' -is used for customizing self-insertion. The character to -be inserted is translated through it. - -*** Text clones. - -The new function `text-clone-create'. Text clones are chunks of text -that are kept identical by transparently propagating changes from one -clone to the other. - -*** The function `insert-string' is now obsolete. - -** Filling changes. - -*** In determining an adaptive fill prefix, Emacs now tries the function in -`adaptive-fill-function' _before_ matching the buffer line against -`adaptive-fill-regexp' rather than _after_ it. - -** Atomic change groups. - -To perform some changes in the current buffer "atomically" so that -they either all succeed or are all undone, use `atomic-change-group' -around the code that makes changes. For instance: - - (atomic-change-group - (insert foo) - (delete-region x y)) - -If an error (or other nonlocal exit) occurs inside the body of -`atomic-change-group', it unmakes all the changes in that buffer that -were during the execution of the body. The change group has no effect -on any other buffers--any such changes remain. - -If you need something more sophisticated, you can directly call the -lower-level functions that `atomic-change-group' uses. Here is how. - -To set up a change group for one buffer, call `prepare-change-group'. -Specify the buffer as argument; it defaults to the current buffer. -This function returns a "handle" for the change group. You must save -the handle to activate the change group and then finish it. - -Before you change the buffer again, you must activate the change -group. Pass the handle to `activate-change-group' afterward to -do this. - -After you make the changes, you must finish the change group. You can -either accept the changes or cancel them all. Call -`accept-change-group' to accept the changes in the group as final; -call `cancel-change-group' to undo them all. - -You should use `unwind-protect' to make sure the group is always -finished. The call to `activate-change-group' should be inside the -`unwind-protect', in case the user types C-g just after it runs. -(This is one reason why `prepare-change-group' and -`activate-change-group' are separate functions.) Once you finish the -group, don't use the handle again--don't try to finish the same group -twice. - -To make a multibuffer change group, call `prepare-change-group' once -for each buffer you want to cover, then use `nconc' to combine the -returned values, like this: - - (nconc (prepare-change-group buffer-1) - (prepare-change-group buffer-2)) - -You can then activate the multibuffer change group with a single call -to `activate-change-group', and finish it with a single call to -`accept-change-group' or `cancel-change-group'. - -Nested use of several change groups for the same buffer works as you -would expect. Non-nested use of change groups for the same buffer -will lead to undesirable results, so don't let it happen; the first -change group you start for any given buffer should be the last one -finished. - -** Buffer-related changes: - -*** The new function `buffer-local-value' returns the buffer-local -binding of VARIABLE (a symbol) in buffer BUFFER. If VARIABLE does not -have a buffer-local binding in buffer BUFFER, it returns the default -value of VARIABLE instead. - -*** `list-buffers-noselect' now takes an additional argument, BUFFER-LIST. - -If it is non-nil, it specifies which buffers to list. - -*** `kill-buffer-hook' is now a permanent local. - -*** The function `frame-or-buffer-changed-p' now lets you maintain -various status records in parallel. - -It takes a variable (a symbol) as argument. If the variable is non-nil, -then its value should be a vector installed previously by -`frame-or-buffer-changed-p'. If the frame names, buffer names, buffer -order, or their read-only or modified flags have changed, since the -time the vector's contents were recorded by a previous call to -`frame-or-buffer-changed-p', then the function returns t. Otherwise -it returns nil. - -On the first call to `frame-or-buffer-changed-p', the variable's -value should be nil. `frame-or-buffer-changed-p' stores a suitable -vector into the variable and returns t. - -If the variable is itself nil, then `frame-or-buffer-changed-p' uses, -for compatibility, an internal variable which exists only for this -purpose. - -*** The function `read-buffer' follows the convention for reading from -the minibuffer with a default value: if DEF is non-nil, the minibuffer -prompt provided in PROMPT is edited to show the default value provided -in DEF before the terminal colon and space. - -** Searching and matching changes: - -*** New function `looking-back' checks whether a regular expression matches -the text before point. Specifying the LIMIT argument bounds how far -back the match can start; this is a way to keep it from taking too long. - -*** The new variable `search-spaces-regexp' controls how to search -for spaces in a regular expression. If it is non-nil, it should be a -regular expression, and any series of spaces stands for that regular -expression. If it is nil, spaces stand for themselves. - -Spaces inside of constructs such as `[..]' and inside loops such as -`*', `+', and `?' are never replaced with `search-spaces-regexp'. - -*** New regular expression operators, `\_<' and `\_>'. - -These match the beginning and end of a symbol. A symbol is a -non-empty sequence of either word or symbol constituent characters, as -specified by the syntax table. - -*** `skip-chars-forward' and `skip-chars-backward' now handle -character classes such as `[:alpha:]', along with individual -characters and ranges. - -*** In `replace-match', the replacement text no longer inherits -properties from surrounding text. - -*** The list returned by `(match-data t)' now has the buffer as a final -element, if the last match was on a buffer. `set-match-data' -accepts such a list for restoring the match state. - -*** Functions `match-data' and `set-match-data' now have an optional -argument `reseat'. When non-nil, all markers in the match data list -passed to these functions will be reseated to point to nowhere. - -*** rx.el has new corresponding `symbol-start' and `symbol-end' elements. - -*** The default value of `sentence-end' is now defined using the new -variable `sentence-end-without-space', which contains such characters -that end a sentence without following spaces. - -The function `sentence-end' should be used to obtain the value of the -variable `sentence-end'. If the variable `sentence-end' is nil, then -this function returns the regexp constructed from the variables -`sentence-end-without-period', `sentence-end-double-space' and -`sentence-end-without-space'. - -** Undo changes: - -*** `buffer-undo-list' allows programmable elements. - -These elements have the form (apply FUNNAME . ARGS), where FUNNAME is -a symbol other than t or nil. That stands for a high-level change -that should be undone by evaluating (apply FUNNAME ARGS). - -These entries can also have the form (apply DELTA BEG END FUNNAME . ARGS) -which indicates that the change which took place was limited to the -range BEG...END and increased the buffer size by DELTA. - -*** If the buffer's undo list for the current command gets longer than -`undo-outer-limit', garbage collection empties it. This is to prevent -it from using up the available memory and choking Emacs. - -** Killing and yanking changes: - -*** New `yank-handler' text property can be used to control how -previously killed text on the kill ring is reinserted. - -The value of the `yank-handler' property must be a list with one to four -elements with the following format: - (FUNCTION PARAM NOEXCLUDE UNDO). - -The `insert-for-yank' function looks for a yank-handler property on -the first character on its string argument (typically the first -element on the kill-ring). If a `yank-handler' property is found, -the normal behavior of `insert-for-yank' is modified in various ways: - - When FUNCTION is present and non-nil, it is called instead of `insert' -to insert the string. FUNCTION takes one argument--the object to insert. - If PARAM is present and non-nil, it replaces STRING as the object -passed to FUNCTION (or `insert'); for example, if FUNCTION is -`yank-rectangle', PARAM should be a list of strings to insert as a -rectangle. - If NOEXCLUDE is present and non-nil, the normal removal of the -`yank-excluded-properties' is not performed; instead FUNCTION is -responsible for removing those properties. This may be necessary -if FUNCTION adjusts point before or after inserting the object. - If UNDO is present and non-nil, it is a function that will be called -by `yank-pop' to undo the insertion of the current object. It is -called with two arguments, the start and end of the current region. -FUNCTION can set `yank-undo-function' to override the UNDO value. - -*** The functions `kill-new', `kill-append', and `kill-region' now have an -optional argument to specify the `yank-handler' text property to put on -the killed text. - -*** The function `yank-pop' will now use a non-nil value of the variable -`yank-undo-function' (instead of `delete-region') to undo the previous -`yank' or `yank-pop' command (or a call to `insert-for-yank'). The function -`insert-for-yank' automatically sets that variable according to the UNDO -element of the string argument's `yank-handler' text property if present. - -*** The function `insert-for-yank' now supports strings where the -`yank-handler' property does not span the first character of the -string. The old behavior is available if you call -`insert-for-yank-1' instead. - -** Syntax table changes: - -*** The new function `syntax-ppss' provides an efficient way to find the -current syntactic context at point. - -*** The new function `syntax-after' returns the syntax code -of the character after a specified buffer position, taking account -of text properties as well as the character code. - -*** `syntax-class' extracts the class of a syntax code (as returned -by `syntax-after'). - -*** The macro `with-syntax-table' no longer copies the syntax table. - -** File operation changes: - -*** New vars `exec-suffixes' and `load-suffixes' used when -searching for an executable or an Emacs Lisp file. - -*** New function `locate-file' searches for a file in a list of directories. -`locate-file' accepts a name of a file to search (a string), and two -lists: a list of directories to search in and a list of suffixes to -try; typical usage might use `exec-path' and `load-path' for the list -of directories, and `exec-suffixes' and `load-suffixes' for the list -of suffixes. The function also accepts a predicate argument to -further filter candidate files. - -One advantage of using this function is that the list of suffixes in -`exec-suffixes' is OS-dependant, so this function will find -executables without polluting Lisp code with OS dependencies. - -*** The new function `file-remote-p' tests a file name and returns -non-nil if it specifies a remote file (one that Emacs accesses using -its own special methods and not directly through the file system). -The value in that case is an identifier for the remote file system. - -*** The new hook `before-save-hook' is invoked by `basic-save-buffer' -before saving buffers. This allows packages to perform various final -tasks. For example, it can be used by the copyright package to make -sure saved files have the current year in any copyright headers. - -*** `file-chase-links' now takes an optional second argument LIMIT which -specifies the maximum number of links to chase through. If after that -many iterations the file name obtained is still a symbolic link, -`file-chase-links' returns it anyway. - -*** Functions `file-name-sans-extension' and `file-name-extension' now -ignore the leading dots in file names, so that file names such as -`.emacs' are treated as extensionless. - -*** If `buffer-save-without-query' is non-nil in some buffer, -`save-some-buffers' will always save that buffer without asking (if -it's modified). - -*** `buffer-auto-save-file-format' is the new name for what was -formerly called `auto-save-file-format'. It is now a permanent local. - -*** `visited-file-modtime' and `calendar-time-from-absolute' now return -a list of two integers, instead of a cons. - -*** The precedence of file name handlers has been changed. - -Instead of choosing the first handler that matches, -`find-file-name-handler' now gives precedence to a file name handler -that matches nearest the end of the file name. More precisely, the -handler whose (match-beginning 0) is the largest is chosen. In case -of ties, the old "first matched" rule applies. - -*** A file name handler can declare which operations it handles. - -You do this by putting an `operation' property on the handler name -symbol. The property value should be a list of the operations that -the handler really handles. It won't be called for any other -operations. - -This is useful for autoloaded handlers, to prevent them from being -autoloaded when not really necessary. - -*** The function `make-auto-save-file-name' is now handled by file -name handlers. This will be exploited for remote files mainly. - -*** The function `file-name-completion' accepts an optional argument -PREDICATE, and rejects completion candidates that don't satisfy PREDICATE. - -*** The new primitive `set-file-times' sets a file's access and -modification times. Magic file name handlers can handle this -operation. - -** Input changes: - -*** Functions `y-or-n-p', `read-char', `read-key-sequence' and the like, that -display a prompt but don't use the minibuffer, now display the prompt -using the text properties (esp. the face) of the prompt string. - -*** The functions `read-event', `read-char', and `read-char-exclusive' -have a new optional argument SECONDS. If non-nil, this specifies a -maximum time to wait for input, in seconds. If no input arrives after -this time elapses, the functions stop waiting and return nil. - -*** An interactive specification can now use the code letter `U' to get -the up-event that was discarded in case the last key sequence read for a -previous `k' or `K' argument was a down-event; otherwise nil is used. - -*** The new interactive-specification `G' reads a file name -much like `F', but if the input is a directory name (even defaulted), -it returns just the directory name. - -*** (while-no-input BODY...) runs BODY, but only so long as no input -arrives. If the user types or clicks anything, BODY stops as if a -quit had occurred. `while-no-input' returns the value of BODY, if BODY -finishes. It returns nil if BODY was aborted by a quit, and t if -BODY was aborted by arrival of input. - -*** `recent-keys' now returns the last 300 keys. - -** Minibuffer changes: - -*** The new function `minibufferp' returns non-nil if its optional -buffer argument is a minibuffer. If the argument is omitted, it -defaults to the current buffer. - -*** New function `minibuffer-selected-window' returns the window which -was selected when entering the minibuffer. - -*** The `read-file-name' function now takes an additional argument which -specifies a predicate which the file name read must satisfy. The -new variable `read-file-name-predicate' contains the predicate argument -while reading the file name from the minibuffer; the predicate in this -variable is used by read-file-name-internal to filter the completion list. - -*** The new variable `read-file-name-function' can be used by Lisp code -to override the built-in `read-file-name' function. - -*** The new variable `read-file-name-completion-ignore-case' specifies -whether completion ignores case when reading a file name with the -`read-file-name' function. - -*** The new function `read-directory-name' is for reading a directory name. - -It is like `read-file-name' except that the defaulting works better -for directories, and completion inside it shows only directories. - -*** The new variable `history-add-new-input' specifies whether to add new -elements in history. If set to nil, minibuffer reading functions don't -add new elements to the history list, so it is possible to do this -afterwards by calling `add-to-history' explicitly. - -** Completion changes: - -*** The new function `minibuffer-completion-contents' returns the contents -of the minibuffer just before point. That is what completion commands -operate on. - -*** The functions `all-completions' and `try-completion' now accept lists -of strings as well as hash-tables additionally to alists, obarrays -and functions. Furthermore, the function `test-completion' is now -exported to Lisp. The keys in alists and hash tables can be either -strings or symbols, which are automatically converted with to strings. - -*** The new macro `dynamic-completion-table' supports using functions -as a dynamic completion table. - - (dynamic-completion-table FUN) - -FUN is called with one argument, the string for which completion is required, -and it should return an alist containing all the intended possible -completions. This alist can be a full list of possible completions so that FUN -can ignore the value of its argument. If completion is performed in the -minibuffer, FUN will be called in the buffer from which the minibuffer was -entered. `dynamic-completion-table' then computes the completion. - -*** The new macro `lazy-completion-table' initializes a variable -as a lazy completion table. - - (lazy-completion-table VAR FUN) - -If the completion table VAR is used for the first time (e.g., by passing VAR -as an argument to `try-completion'), the function FUN is called with no -arguments. FUN must return the completion table that will be stored in VAR. -If completion is requested in the minibuffer, FUN will be called in the buffer -from which the minibuffer was entered. The return value of -`lazy-completion-table' must be used to initialize the value of VAR. - -** Abbrev changes: - -*** `define-abbrev' now accepts an optional argument SYSTEM-FLAG. - -If non-nil, this marks the abbrev as a "system" abbrev, which means -that it won't be stored in the user's abbrevs file if he saves the -abbrevs. Major modes that predefine some abbrevs should always -specify this flag. - -*** The new function `copy-abbrev-table' copies an abbrev table. - -It returns a new abbrev table that is a copy of a given abbrev table. - -** Enhancements to keymaps. - -*** Cleaner way to enter key sequences. - -You can enter a constant key sequence in a more natural format, the -same one used for saving keyboard macros, using the macro `kbd'. For -example, - -(kbd "C-x C-f") => "\^x\^f" - -Actually, this format has existed since Emacs 20.1. - -*** Interactive commands can be remapped through keymaps. - -This is an alternative to using `defadvice' or `substitute-key-definition' -to modify the behavior of a key binding using the normal keymap -binding and lookup functionality. - -When a key sequence is bound to a command, and that command is -remapped to another command, that command is run instead of the -original command. - -Example: -Suppose that minor mode `my-mode' has defined the commands -`my-kill-line' and `my-kill-word', and it wants C-k (and any other key -bound to `kill-line') to run the command `my-kill-line' instead of -`kill-line', and likewise it wants to run `my-kill-word' instead of -`kill-word'. - -Instead of rebinding C-k and the other keys in the minor mode map, -command remapping allows you to directly map `kill-line' into -`my-kill-line' and `kill-word' into `my-kill-word' using `define-key': - - (define-key my-mode-map [remap kill-line] 'my-kill-line) - (define-key my-mode-map [remap kill-word] 'my-kill-word) - -When `my-mode' is enabled, its minor mode keymap is enabled too. So -when the user types C-k, that runs the command `my-kill-line'. - -Only one level of remapping is supported. In the above example, this -means that if `my-kill-line' is remapped to `other-kill', then C-k still -runs `my-kill-line'. - -The following changes have been made to provide command remapping: - -- Command remappings are defined using `define-key' with a prefix-key - `remap', i.e. `(define-key MAP [remap CMD] DEF)' remaps command CMD - to definition DEF in keymap MAP. The definition is not limited to - another command; it can be anything accepted for a normal binding. - -- The new function `command-remapping' returns the binding for a - remapped command in the current keymaps, or nil if not remapped. - -- `key-binding' now remaps interactive commands unless the optional - third argument NO-REMAP is non-nil. - -- `where-is-internal' now returns nil for a remapped command (e.g. - `kill-line', when `my-mode' is enabled), and the actual key binding for - the command it is remapped to (e.g. C-k for my-kill-line). - It also has a new optional fifth argument, NO-REMAP, which inhibits - remapping if non-nil (e.g. it returns "C-k" for `kill-line', and - "<kill-line>" for `my-kill-line'). - -- The new variable `this-original-command' contains the original - command before remapping. It is equal to `this-command' when the - command was not remapped. - -*** The definition of a key-binding passed to define-key can use XEmacs-style -key-sequences, such as [(control a)]. - -*** New keymaps for typing file names - -Two new keymaps, `minibuffer-local-filename-completion-map' and -`minibuffer-local-must-match-filename-map', apply whenever -Emacs reads a file name in the minibuffer. These key maps override -the usual binding of SPC to `minibuffer-complete-word' (so that file -names with embedded spaces could be typed without the need to quote -the spaces). - -*** New function `current-active-maps' returns a list of currently -active keymaps. - -*** New function `describe-buffer-bindings' inserts the list of all -defined keys and their definitions. - -*** New function `keymap-prompt' returns the prompt string of a keymap. - -*** If text has a `keymap' property, that keymap takes precedence -over minor mode keymaps. - -*** The `keymap' property now also works at the ends of overlays and -text properties, according to their stickiness. This also means that it -works with empty overlays. The same hold for the `local-map' property. - -*** `key-binding' will now look up mouse-specific bindings. The -keymaps consulted by `key-binding' will get adapted if the key -sequence is started with a mouse event. Instead of letting the click -position be determined from the key sequence itself, it is also -possible to specify it with an optional argument explicitly. - -*** `define-key-after' now accepts keys longer than 1. - -*** (map-keymap FUNCTION KEYMAP) applies the function to each binding -in the keymap. - -*** New variable `emulation-mode-map-alists'. - -Lisp packages using many minor mode keymaps can now maintain their own -keymap alist separate from `minor-mode-map-alist' by adding their -keymap alist to this list. - -*** Dense keymaps now handle inheritance correctly. - -Previously a dense keymap would hide all of the simple-char key -bindings of the parent keymap. - -** Enhancements to process support - -*** Adaptive read buffering of subprocess output. - -On some systems, when Emacs reads the output from a subprocess, the -output data is read in very small blocks, potentially resulting in -very poor performance. This behavior can be remedied to some extent -by setting the new variable `process-adaptive-read-buffering' to a -non-nil value (the default), as it will automatically delay reading -from such processes, allowing them to produce more output before -Emacs tries to read it. - -*** Processes now have an associated property list where programs can -maintain process state and other per-process related information. - -Use the new functions `process-get' and `process-put' to access, add, -and modify elements on this property list. Use the new functions -`process-plist' and `set-process-plist' to access and replace the -entire property list of a process. - -*** Function `list-processes' now has an optional argument; if non-nil, -it lists only the processes whose query-on-exit flag is set. - -*** New fns `set-process-query-on-exit-flag' and `process-query-on-exit-flag'. - -These replace the old function `process-kill-without-query'. That -function is still supported, but new code should use the new -functions. - -*** The new function `call-process-shell-command'. - -This executes a shell command synchronously in a separate process. - -*** The new function `process-file' is similar to `call-process', but -obeys file handlers. The file handler is chosen based on -`default-directory'. - -*** Function `signal-process' now accepts a process object or process -name in addition to a process id to identify the signaled process. - -*** Function `accept-process-output' has a new optional fourth arg -JUST-THIS-ONE. If non-nil, only output from the specified process -is handled, suspending output from other processes. If value is an -integer, also inhibit running timers. This feature is generally not -recommended, but may be necessary for specific applications, such as -speech synthesis. - -*** A process filter function gets the output as multibyte string -if the process specifies t for its filter's multibyteness. - -That multibyteness is decided by the value of -`default-enable-multibyte-characters' when the process is created, and -you can change it later with `set-process-filter-multibyte'. - -*** The new function `set-process-filter-multibyte' sets the -multibyteness of the strings passed to the process's filter. - -*** The new function `process-filter-multibyte-p' returns the -multibyteness of the strings passed to the process's filter. - -*** If a process's coding system is `raw-text' or `no-conversion' and its -buffer is multibyte, the output of the process is at first converted -to multibyte by `string-to-multibyte' then inserted in the buffer. -Previously, it was converted to multibyte by `string-as-multibyte', -which was not compatible with the behavior of file reading. - -** Enhanced networking support. - -*** The new `make-network-process' function makes network connections. -It allows opening of stream and datagram connections to a server, as well as -create a stream or datagram server inside Emacs. +* Incompatible Lisp Changes in Emacs 23.1 -- A server is started using :server t arg. -- Datagram connection is selected using :type 'datagram arg. -- A server can open on a random port using :service t arg. -- Local sockets are supported using :family 'local arg. -- IPv6 is supported (when available). You may explicitly select IPv6 - using :family 'ipv6 arg. -- Non-blocking connect is supported using :nowait t arg. -- The process' property list can be initialized using :plist PLIST arg; - a copy of the server process' property list is automatically inherited - by new client processes created to handle incoming connections. - -To test for the availability of a given feature, use featurep like this: - (featurep 'make-network-process '(:type datagram)) - (featurep 'make-network-process '(:family ipv6)) - -*** The old `open-network-stream' now uses `make-network-process'. - -*** `process-contact' has an optional KEY argument. - -Depending on this argument, you can get the complete list of network -process properties or a specific property. Using :local or :remote as -the KEY, you get the address of the local or remote end-point. - -An Inet address is represented as a 5 element vector, where the first -4 elements contain the IP address and the fifth is the port number. - -*** New functions `stop-process' and `continue-process'. - -These functions stop and restart communication through a network -connection. For a server process, no connections are accepted in the -stopped state. For a client process, no input is received in the -stopped state. - -*** New function `format-network-address'. - -This function reformats the Lisp representation of a network address -to a printable string. For example, an IP address A.B.C.D and port -number P is represented as a five element vector [A B C D P], and the -printable string returned for this vector is "A.B.C.D:P". See the doc -string for other formatting options. - -*** New function `network-interface-list'. - -This function returns a list of network interface names and their -current network addresses. - -*** New function `network-interface-info'. - -This function returns the network address, hardware address, current -status, and other information about a specific network interface. - -*** New functions `process-datagram-address', `set-process-datagram-address'. - -These functions are used with datagram-based network processes to get -and set the current address of the remote partner. - -*** Deleting a network process with `delete-process' calls the sentinel. - -The status message passed to the sentinel for a deleted network -process is "deleted". The message passed to the sentinel when the -connection is closed by the remote peer has been changed to -"connection broken by remote peer". - -** Using window objects: - -*** You can now make a window as short as one line. - -A window that is just one line tall does not display either a mode -line or a header line, even if the variables `mode-line-format' and -`header-line-format' call for them. A window that is two lines tall -cannot display both a mode line and a header line at once; if the -variables call for both, only the mode line actually appears. - -*** The new function `window-inside-edges' returns the edges of the -actual text portion of the window, not including the scroll bar or -divider line, the fringes, the display margins, the header line and -the mode line. - -*** The new functions `window-pixel-edges' and `window-inside-pixel-edges' -return window edges in units of pixels, rather than columns and lines. - -*** New function `window-body-height'. - -This is like `window-height' but does not count the mode line or the -header line. - -*** The new function `adjust-window-trailing-edge' moves the right -or bottom edge of a window. It does not move other window edges. - -*** The new macro `with-selected-window' temporarily switches the -selected window without impacting the order of `buffer-list'. -It saves and restores the current buffer, too. - -*** `select-window' takes an optional second argument NORECORD. - -This is like `switch-to-buffer'. - -*** `save-selected-window' now saves and restores the selected window -of every frame. This way, it restores everything that can be changed -by calling `select-window'. It also saves and restores the current -buffer. - -*** `set-window-buffer' has an optional argument KEEP-MARGINS. - -If non-nil, that says to preserve the window's current margin, fringe, -and scroll-bar settings. - -*** The new function `window-tree' returns a frame's window tree. - -*** The functions `get-lru-window' and `get-largest-window' take an optional -argument `dedicated'. If non-nil, those functions do not ignore -dedicated windows. - -** Customizable fringe bitmaps - -*** There are new display properties, `left-fringe' and `right-fringe', -that can be used to show a specific bitmap in the left or right fringe -bitmap of the display line. - -Format is `display (left-fringe BITMAP [FACE])', where BITMAP is a -symbol identifying a fringe bitmap, either built-in or defined with -`define-fringe-bitmap', and FACE is an optional face name to be used -for displaying the bitmap instead of the default `fringe' face. -When specified, FACE is automatically merged with the `fringe' face. - -*** New buffer-local variables `fringe-indicator-alist' and -`fringe-cursor-alist' maps between logical (internal) fringe indicator -and cursor symbols and the actual fringe bitmaps to be displayed. -This decouples the logical meaning of the fringe indicators from the -physical appearance, as well as allowing different fringe bitmaps to -be used in different windows showing different buffers. - -*** New function `define-fringe-bitmap' can now be used to create new -fringe bitmaps, as well as change the built-in fringe bitmaps. - -*** New function `destroy-fringe-bitmap' deletes a fringe bitmap -or restores a built-in one to its default value. - -*** New function `set-fringe-bitmap-face' specifies the face to be -used for a specific fringe bitmap. The face is automatically merged -with the `fringe' face, so normally, the face should only specify the -foreground color of the bitmap. - -*** New function `fringe-bitmaps-at-pos' returns the current fringe -bitmaps in the display line at a given buffer position. - -** Other window fringe features: - -*** Controlling the default left and right fringe widths. - -The default left and right fringe widths for all windows of a frame -can now be controlled by setting the `left-fringe' and `right-fringe' -frame parameters to an integer value specifying the width in pixels. -Setting the width to 0 effectively removes the corresponding fringe. - -The actual default fringe widths for the frame may deviate from the -specified widths, since the combined fringe widths must match an -integral number of columns. The extra width is distributed evenly -between the left and right fringe. To force a specific fringe width, -specify the width as a negative integer (if both widths are negative, -only the left fringe gets the specified width). - -Setting the width to nil (the default), restores the default fringe -width which is the minimum number of pixels necessary to display any -of the currently defined fringe bitmaps. The width of the built-in -fringe bitmaps is 8 pixels. - -*** Per-window fringe and scrollbar settings - -**** Windows can now have their own individual fringe widths and -position settings. - -To control the fringe widths of a window, either set the buffer-local -variables `left-fringe-width', `right-fringe-width', or call -`set-window-fringes'. - -To control the fringe position in a window, that is, whether fringes -are positioned between the display margins and the window's text area, -or at the edges of the window, either set the buffer-local variable -`fringes-outside-margins' or call `set-window-fringes'. - -The function `window-fringes' can be used to obtain the current -settings. To make `left-fringe-width', `right-fringe-width', and -`fringes-outside-margins' 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. - -**** Windows can now have their own individual scroll-bar settings -controlling the width and position of scroll-bars. - -To control the scroll-bar of a window, either set the buffer-local -variables `scroll-bar-mode' and `scroll-bar-width', or call -`set-window-scroll-bars'. The function `window-scroll-bars' can be -used to obtain the current settings. To make `scroll-bar-mode' and -`scroll-bar-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. - -** Redisplay features: - -*** `sit-for' can now be called with args (SECONDS &optional NODISP). - -*** Iconifying or deiconifying a frame no longer makes sit-for return. - -*** New function `redisplay' causes an immediate redisplay if no input is -available, equivalent to (sit-for 0). The call (redisplay t) forces -an immediate redisplay even if input is pending. - -*** New function `force-window-update' can initiate a full redisplay of -one or all windows. Normally, this is not needed as changes in window -contents are detected automatically. However, certain implicit -changes to mode lines, header lines, or display properties may require -forcing an explicit window update. - -*** (char-displayable-p CHAR) returns non-nil if Emacs ought to be able -to display CHAR. More precisely, if the selected frame's fontset has -a font to display the character set that CHAR belongs to. - -Fontsets can specify a font on a per-character basis; when the fontset -does that, this value cannot be accurate. - -*** You can define multiple overlay arrows via the new -variable `overlay-arrow-variable-list'. - -It contains a list of variables which contain overlay arrow position -markers, including the original `overlay-arrow-position' variable. - -Each variable on this list can have individual `overlay-arrow-string' -and `overlay-arrow-bitmap' properties that specify an overlay arrow -string (for non-window terminals) or fringe bitmap (for window -systems) to display at the corresponding overlay arrow position. -If either property is not set, the default `overlay-arrow-string' or -'overlay-arrow-fringe-bitmap' will be used. - -*** New `line-height' and `line-spacing' properties for newline characters - -A newline can now have `line-height' and `line-spacing' text or overlay -properties that control the height of the corresponding display row. - -If the `line-height' property value is t, the newline does not -contribute to the height of the display row; instead the height of the -newline glyph is reduced. Also, a `line-spacing' property on this -newline is ignored. This can be used to tile small images or image -slices without adding blank areas between the images. - -If the `line-height' property value is a positive integer, the value -specifies the minimum line height in pixels. If necessary, the line -height it increased by increasing the line's ascent. - -If the `line-height' property value is a float, the minimum line -height is calculated by multiplying the default frame line height by -the given value. - -If the `line-height' property value is a cons (FACE . RATIO), the -minimum line height is calculated as RATIO * height of named FACE. -RATIO is int or float. If FACE is t, it specifies the current face. - -If the `line-height' property value is a cons (nil . RATIO), the line -height is calculated as RATIO * actual height of the line's contents. - -If the `line-height' value is a cons (HEIGHT . TOTAL), HEIGHT specifies -the line height as described above, while TOTAL is any of the forms -described above and specifies the total height of the line, causing a -varying number of pixels to be inserted after the line to make it line -exactly that many pixels high. - -If the `line-spacing' property value is an positive integer, the value -is used as additional pixels to insert after the display line; this -overrides the default frame `line-spacing' and any buffer local value of -the `line-spacing' variable. - -If the `line-spacing' property is a float or cons, the line spacing -is calculated as specified above for the `line-height' property. - -*** The buffer local `line-spacing' variable can now have a float value, -which is used as a height relative to the default frame line height. - -*** Enhancements to stretch display properties - -The display property stretch specification form `(space PROPS)', where -PROPS is a property list, now allows pixel based width and height -specifications, as well as enhanced horizontal text alignment. - -The value of these properties can now be a (primitive) expression -which is evaluated during redisplay. The following expressions -are supported: - -EXPR ::= NUM | (NUM) | UNIT | ELEM | POS | IMAGE | FORM -NUM ::= INTEGER | FLOAT | SYMBOL -UNIT ::= in | mm | cm | width | height -ELEM ::= left-fringe | right-fringe | left-margin | right-margin - | scroll-bar | text -POS ::= left | center | right -FORM ::= (NUM . EXPR) | (OP EXPR ...) -OP ::= + | - - -The form `NUM' specifies a fractional width or height of the default -frame font size. The form `(NUM)' specifies an absolute number of -pixels. If a symbol is specified, its buffer-local variable binding -is used. The `in', `mm', and `cm' units specifies the number of -pixels per inch, milli-meter, and centi-meter, resp. The `width' and -`height' units correspond to the width and height of the current face -font. An image specification corresponds to the width or height of -the image. - -The `left-fringe', `right-fringe', `left-margin', `right-margin', -`scroll-bar', and `text' elements specify to the width of the -corresponding area of the window. - -The `left', `center', and `right' positions can be used with :align-to -to specify a position relative to the left edge, center, or right edge -of the text area. One of the above window elements (except `text') -can also be used with :align-to to specify that the position is -relative to the left edge of the given area. Once the base offset for -a relative position has been set (by the first occurrence of one of -these symbols), further occurrences of these symbols are interpreted as -the width of the area. - -For example, to align to the center of the left-margin, use - :align-to (+ left-margin (0.5 . left-margin)) - -If no specific base offset is set for alignment, it is always relative -to the left edge of the text area. For example, :align-to 0 in a -header line aligns with the first text column in the text area. - -The value of the form `(NUM . EXPR)' is the value of NUM multiplied by -the value of the expression EXPR. For example, (2 . in) specifies a -width of 2 inches, while (0.5 . IMAGE) specifies half the width (or -height) of the specified image. - -The form `(+ EXPR ...)' adds up the value of the expressions. -The form `(- EXPR ...)' negates or subtracts the value of the expressions. - -*** Normally, the cursor is displayed at the end of any overlay and -text property string that may be present at the current window -position. The cursor can now be placed on any character of such -strings by giving that character a non-nil `cursor' text property. - -*** The display space :width and :align-to text properties are now -supported on text terminals. - -*** Support for displaying image slices - -**** New display property (slice X Y WIDTH HEIGHT) can be used with -an image property to display only a specific slice of the image. - -**** Function `insert-image' has new optional fourth arg to -specify image slice (X Y WIDTH HEIGHT). - -**** New function `insert-sliced-image' inserts a given image as a -specified number of evenly sized slices (rows x columns). - -*** Images can now have an associated image map via the :map property. - -An image map is an alist where each element has the format (AREA ID PLIST). -An AREA is specified as either a rectangle, a circle, or a polygon: -A rectangle is a cons (rect . ((X0 . Y0) . (X1 . Y1))) specifying the -pixel coordinates of the upper left and bottom right corners. -A circle is a cons (circle . ((X0 . Y0) . R)) specifying the center -and the radius of the circle; R can be a float or integer. -A polygon is a cons (poly . [X0 Y0 X1 Y1 ...]) where each pair in the -vector describes one corner in the polygon. - -When the mouse pointer is above a hot-spot area of an image, the -PLIST of that hot-spot is consulted; if it contains a `help-echo' -property it defines a tool-tip for the hot-spot, and if it contains -a `pointer' property, it defines the shape of the mouse cursor when -it is over the hot-spot. See the variable `void-area-text-pointer' -for possible pointer shapes. - -When you click the mouse when the mouse pointer is over a hot-spot, -an event is composed by combining the ID of the hot-spot with the -mouse event, e.g. [area4 mouse-1] if the hot-spot's ID is `area4'. - -*** The function `find-image' now searches in etc/images/ and etc/. -The new variable `image-load-path' is a list of locations in which to -search for image files. The default is to search in etc/images, then -in etc/, and finally in the directories specified by `load-path'. -Subdirectories of etc/ and etc/images are not recursively searched; if -you put an image file in a subdirectory, you have to specify it -explicitly; for example, if an image is put in etc/images/foo/bar.xpm: - - (defimage foo-image '((:type xpm :file "foo/bar.xpm"))) - -Note that all images formerly located in the lisp directory have been -moved to etc/images. - -*** New function `image-load-path-for-library' returns a suitable -search path for images relative to library. This function is useful in -external packages to save users from having to update -`image-load-path'. - -*** The new variable `max-image-size' defines the maximum size of -images that Emacs will load and display. - -*** The new variable `display-mm-dimensions-alist' can be used to -override incorrect graphical display dimensions returned by functions -`display-mm-height' and `display-mm-width'. - -** Mouse pointer features: - -*** The mouse pointer shape in void text areas (i.e. after the end of a -line or below the last line in the buffer) of the text window is now -controlled by the new variable `void-text-area-pointer'. The default -is to use the `arrow' (non-text) pointer. Other choices are `text' -(or nil), `hand', `vdrag', `hdrag', `modeline', and `hourglass'. - -*** The mouse pointer shape over an image can now be controlled by the -:pointer image property. - -*** The mouse pointer shape over ordinary text or images can now be -controlled/overridden via the `pointer' text property. - -** Mouse event enhancements: - -*** All mouse events now include a buffer position regardless of where -you clicked. For mouse clicks in window margins and fringes, this is -a sensible buffer position corresponding to the surrounding text. - -*** Mouse events for clicks on window fringes now specify `left-fringe' -or `right-fringe' as the area. - -*** Mouse events include actual glyph column and row for all event types -and all areas. - -*** Mouse events can now indicate an image object clicked on. - -*** Mouse events include relative X and Y pixel coordinates relative to -the top left corner of the object (image or character) clicked on. - -*** Mouse events include the pixel width and height of the object -(image or character) clicked on. - -*** Function `mouse-set-point' now works for events outside text area. - -*** `posn-point' now returns buffer position for non-text area events. - -*** New function `posn-area' returns window area clicked on (nil means -text area). - -*** New function `posn-actual-col-row' returns the actual glyph coordinates -of the mouse event position. - -*** New functions 'posn-object', 'posn-object-x-y', 'posn-object-width-height'. - -These return the image or string object of a mouse click, the X and Y -pixel coordinates relative to the top left corner of that object, and -the total width and height of that object. - -** Text property and overlay changes: - -*** Arguments for `remove-overlays' are now optional, so that you can -remove all overlays in the buffer with just (remove-overlays). - -*** New variable `char-property-alias-alist'. - -This variable allows you to create alternative names for text -properties. It works at the same level as `default-text-properties', -although it applies to overlays as well. This variable was introduced -to implement the `font-lock-face' property. - -*** New function `get-char-property-and-overlay' accepts the same -arguments as `get-char-property' and returns a cons whose car is the -return value of `get-char-property' called with those arguments and -whose cdr is the overlay in which the property was found, or nil if -it was found as a text property or not found at all. - -*** The new function `remove-list-of-text-properties'. - -It is like `remove-text-properties' except that it takes a list of -property names as argument rather than a property list. - -** Face changes + +* Lisp Changes in Emacs 23.1 -*** The variable `facemenu-unlisted-faces' has been removed. -Emacs has a lot more faces than in the past, and nearly all of them -needed to be excluded. The new variable `facemenu-listed-faces' lists -the faces to include in the face menu. - -*** The new face attribute condition `min-colors' can be used to tailor -the face color to the number of colors supported by a display, and -define the foreground and background colors accordingly so that they -look best on a terminal that supports at least this many colors. This -is now the preferred method for defining default faces in a way that -makes a good use of the capabilities of the display. - -*** New function `display-supports-face-attributes-p' can be used to test -whether a given set of face attributes is actually displayable. - -A new predicate `supports' has also been added to the `defface' face -specification language, which can be used to do this test for faces -defined with `defface'. - -*** The special treatment of faces whose names are of the form `fg:COLOR' -or `bg:COLOR' has been removed. Lisp programs should use the -`defface' facility for defining faces with specific colors, or use -the feature of specifying the face attributes :foreground and :background -directly in the `face' property instead of using a named face. - -*** The first face specification element in a defface can specify -`default' instead of frame classification. Then its attributes act as -defaults that apply to all the subsequent cases (and can be overridden -by them). - -*** The function `face-differs-from-default-p' now truly checks -whether the given face displays differently from the default face or -not (previously it did only a very cursory check). - -*** `face-attribute', `face-foreground', `face-background', `face-stipple'. - -These now accept a new optional argument, INHERIT, which controls how -face inheritance is used when determining the value of a face -attribute. - -*** New functions `face-attribute-relative-p' and `merge-face-attribute' -help with handling relative face attributes. - -*** The priority of faces in an :inherit attribute face list is reversed. - -If a face contains an :inherit attribute with a list of faces, earlier -faces in the list override later faces in the list; in previous -releases of Emacs, the order was the opposite. This change was made -so that :inherit face lists operate identically to face lists in text -`face' properties. - -*** The variable `face-font-rescale-alist' specifies how much larger -(or smaller) font we should use. For instance, if the value is -'((SOME-FONTNAME-PATTERN . 1.3)) and a face requests a font of 10 -point, we actually use a font of 13 point if the font matches -SOME-FONTNAME-PATTERN. - -*** On terminals, faces with the :inverse-video attribute are displayed -with swapped foreground and background colors even when one of them is -not specified. In previous releases of Emacs, if either foreground -or background color was unspecified, colors were not swapped. This -was inconsistent with the face behavior under X. - -*** `set-fontset-font', `fontset-info', `fontset-font' now operate on -the default fontset if the argument NAME is nil.. - -** Font-Lock changes: - -*** New special text property `font-lock-face'. - -This property acts like the `face' property, but it is controlled by -M-x font-lock-mode. It is not, strictly speaking, a builtin text -property. Instead, it is implemented inside font-core.el, using the -new variable `char-property-alias-alist'. - -*** font-lock can manage arbitrary text-properties beside `face'. - -**** the FACENAME returned in `font-lock-keywords' can be a list of the -form (face FACE PROP1 VAL1 PROP2 VAL2 ...) so you can set other -properties than `face'. - -**** `font-lock-extra-managed-props' can be set to make sure those -extra properties are automatically cleaned up by font-lock. - -*** jit-lock obeys a new text-property `jit-lock-defer-multiline'. - -If a piece of text with that property gets contextually refontified -(see `jit-lock-defer-contextually'), then all of that text will -be refontified. This is useful when the syntax of a textual element -depends on text several lines further down (and when `font-lock-multiline' -is not appropriate to solve that problem). For example in Perl: - - s{ - foo - }{ - bar - }e - -Adding/removing the last `e' changes the `bar' from being a piece of -text to being a piece of code, so you'd put a `jit-lock-defer-multiline' -property over the second half of the command to force (deferred) -refontification of `bar' whenever the `e' is added/removed. - -*** `font-lock-extend-region-functions' makes it possible to alter the way -the fontification region is chosen. This can be used to prevent rounding -up to whole lines, or to extend the region to include all related lines -of multiline constructs so that such constructs get properly recognized. - -** Major mode mechanism changes: - -*** New variable `magic-mode-alist' determines major mode for a file by -looking at the file contents. It takes precedence over `auto-mode-alist'. - -*** New variable `magic-fallback-mode-alist' determines major mode for a file by -looking at the file contents. It is handled after `auto-mode-alist', -only if `auto-mode-alist' (and `magic-mode-alist') says nothing about the file. - -*** XML or SGML major mode is selected when file starts with an `<?xml' -or `<!DOCTYPE' declaration. - -*** An interpreter magic line (if present) takes precedence over the -file name when setting the major mode. - -*** If new variable `auto-mode-case-fold' is set to a non-nil value, -Emacs will perform a second case-insensitive search through -`auto-mode-alist' if the first case-sensitive search fails. This -means that a file FILE.TXT is opened in text-mode, and a file -PROG.HTML is opened in html-mode. Note however, that independent of -this setting, *.C files are usually recognized as C++ files. It also -has no effect on systems with case-insensitive file names. - -*** All major mode functions should now run the new normal hook -`after-change-major-mode-hook', at their very end, after the mode -hooks. `run-mode-hooks' does this automatically. - -*** Major modes can define `eldoc-documentation-function' -locally to provide Eldoc functionality by some method appropriate to -the language. - -*** Use the new function `run-mode-hooks' to run the major mode's mode hook. - -*** The new function `run-mode-hooks' and the new macro `delay-mode-hooks' -are used by `define-derived-mode' to make sure the mode hook for the -parent mode is run at the end of the child mode. - -*** `define-derived-mode' by default creates a new empty abbrev table. -It does not copy abbrevs from the parent mode's abbrev table. - -*** If a major mode function has a non-nil `no-clone-indirect' -property, `clone-indirect-buffer' signals an error if you use -it in that buffer. - -** Minor mode changes: - -*** `define-minor-mode' now accepts arbitrary additional keyword arguments -and simply passes them to `defcustom', if applicable. - -*** `define-globalized-minor-mode'. - -This is a new name for what was formerly called -`easy-mmode-define-global-mode'. The old name remains as an alias. - -*** `minor-mode-list' now holds a list of minor mode commands. - -** Command loop changes: - -*** The new function `called-interactively-p' does what many people -have mistakenly believed `interactive-p' to do: it returns t if the -calling function was called through `call-interactively'. - -Only use this when you cannot solve the problem by adding a new -INTERACTIVE argument to the command. - -*** The function `commandp' takes an additional optional argument. - -If it is non-nil, then `commandp' checks for a function that could be -called with `call-interactively', and does not return t for keyboard -macros. - -*** When a command returns, the command loop moves point out from -within invisible text, in the same way it moves out from within text -covered by an image or composition property. - -This makes it generally unnecessary to mark invisible text as intangible. -This is particularly good because the intangible property often has -unexpected side-effects since the property applies to everything -(including `goto-char', ...) whereas this new code is only run after -`post-command-hook' and thus does not care about intermediate states. - -*** If a command sets `transient-mark-mode' to `only', that -enables Transient Mark mode for the following command only. -During that following command, the value of `transient-mark-mode' -is `identity'. If it is still `identity' at the end of the command, -the next return to the command loop changes to nil. - -*** Both the variable and the function `disabled-command-hook' have -been renamed to `disabled-command-function'. The variable -`disabled-command-hook' has been kept as an obsolete alias. - -*** `emacsserver' now runs `pre-command-hook' and `post-command-hook' -when it receives a request from emacsclient. - -*** `current-idle-time' reports how long Emacs has been idle. - -** Lisp file loading changes: - -*** `load-history' can now have elements of the form (t . FUNNAME), -which means FUNNAME was previously defined as an autoload (before the -current file redefined it). - -*** `load-history' now records (defun . FUNNAME) when a function is -defined. For a variable, it records just the variable name. - -*** The function `symbol-file' can now search specifically for function, -variable or face definitions. - -*** `provide' and `featurep' now accept an optional second argument -to test/provide subfeatures. Also `provide' now checks `after-load-alist' -and runs any code associated with the provided feature. - -*** The variable `recursive-load-depth-limit' has been deleted. -Emacs now signals an error if the same file is loaded with more -than 3 levels of nesting. - -** Byte compiler changes: - -*** The byte compiler now displays the actual line and character -position of errors, where possible. Additionally, the form of its -warning and error messages have been brought into line with GNU standards -for these. As a result, you can use next-error and friends on the -compilation output buffer. - -*** The new macro `with-no-warnings' suppresses all compiler warnings -inside its body. In terms of execution, it is equivalent to `progn'. - -*** You can avoid warnings for possibly-undefined symbols with a -simple convention that the compiler understands. (This is mostly -useful in code meant to be portable to different Emacs versions.) -Write forms like the following, or code that macroexpands into such -forms: - - (if (fboundp 'foo) <then> <else>) - (if (boundp 'foo) <then> <else) - -In the first case, using `foo' as a function inside the <then> form -won't produce a warning if it's not defined as a function, and in the -second case, using `foo' as a variable won't produce a warning if it's -unbound. The test must be in exactly one of the above forms (after -macro expansion), but such tests can be nested. Note that `when' and -`unless' expand to `if', but `cond' doesn't. - -*** `(featurep 'xemacs)' is treated by the compiler as nil. This -helps to avoid noisy compiler warnings in code meant to run under both -Emacs and XEmacs and can sometimes make the result significantly more -efficient. Since byte code from recent versions of XEmacs won't -generally run in Emacs and vice versa, this optimization doesn't lose -you anything. - -*** The local variable `no-byte-compile' in Lisp files is now obeyed. - -*** When a Lisp file uses CL functions at run-time, compiling the file -now issues warnings about these calls, unless the file performs -(require 'cl) when loaded. - -** Frame operations: - -*** New functions `frame-current-scroll-bars' and `window-current-scroll-bars'. - -These functions return the current locations of the vertical and -horizontal scroll bars in a frame or window. - -*** The new function `modify-all-frames-parameters' modifies parameters -for all (existing and future) frames. - -*** The new frame parameter `tty-color-mode' specifies the mode to use -for color support on character terminal frames. Its value can be a -number of colors to support, or a symbol. See the Emacs Lisp -Reference manual for more detailed documentation. - -*** When using non-toolkit scroll bars with the default width, -the `scroll-bar-width' frame parameter value is nil. - -** Mode line changes: - -*** New function `format-mode-line'. - -This returns the mode line or header line of the selected (or a -specified) window as a string with or without text properties. - -*** The new mode-line construct `(:propertize ELT PROPS...)' can be -used to add text properties to mode-line elements. - -*** The new `%i' and `%I' constructs for `mode-line-format' can be used -to display the size of the accessible part of the buffer on the mode -line. - -*** Mouse-face on mode-line (and header-line) is now supported. - -** Menu manipulation changes: - -*** To manipulate the File menu using easy-menu, you must specify the -proper name "file". In previous Emacs versions, you had to specify -"files", even though the menu item itself was changed to say "File" -several versions ago. - -*** The dummy function keys made by easy-menu are now always lower case. -If you specify the menu item name "Ada", for instance, it uses `ada' -as the "key" bound by that key binding. - -This is relevant only if Lisp code looks for the bindings that were -made with easy-menu. - -*** `easy-menu-define' now allows you to use nil for the symbol name -if you don't need to give the menu a name. If you install the menu -into other keymaps right away (MAPS is non-nil), it usually doesn't -need to have a name. - -** Mule changes: - -*** Already true in Emacs 21.1, but not emphasized clearly enough: - -Multibyte buffers can now faithfully record all 256 character codes -from 0 to 255. As a result, most of the past reasons to use unibyte -buffers no longer exist. We only know of three reasons to use them -now: - -1. If you prefer to use unibyte text all of the time. - -2. For reading files into temporary buffers, when you want to avoid -the time it takes to convert the format. - -3. For binary files where format conversion would be pointless and -wasteful. - -*** The new variable `auto-coding-functions' lets you specify functions -to examine a file being visited and deduce the proper coding system -for it. (If the coding system is detected incorrectly for a specific -file, you can put a `coding:' tags to override it.) - -*** The new variable `ascii-case-table' stores the case table for the -ascii character set. Language environments (such as Turkish) may -alter the case correspondences of ASCII characters. This variable -saves the original ASCII case table before any such changes. - -*** The new function `merge-coding-systems' fills in unspecified aspects -of one coding system from another coding system. - -*** New coding system property `mime-text-unsuitable' indicates that -the coding system's `mime-charset' is not suitable for MIME text -parts, e.g. utf-16. - -*** New function `decode-coding-inserted-region' decodes a region as if -it is read from a file without decoding. - -*** New CCL functions `lookup-character' and `lookup-integer' access -hash tables defined by the Lisp function `define-translation-hash-table'. - -*** New function `quail-find-key' returns a list of keys to type in the -current input method to input a character. - -*** `set-buffer-file-coding-system' now takes an additional argument, -NOMODIFY. If it is non-nil, it means don't mark the buffer modified. - -** Operating system access: - -*** The new primitive `get-internal-run-time' returns the processor -run time used by Emacs since start-up. - -*** Functions `user-uid' and `user-real-uid' now return floats if the -user UID doesn't fit in a Lisp integer. Function `user-full-name' -accepts a float as UID parameter. - -*** New function `locale-info' accesses locale information. - -*** On MS Windows, locale-coding-system is used to interact with the OS. -The Windows specific variable w32-system-coding-system, which was -formerly used for that purpose is now an alias for locale-coding-system. - -*** New function `redirect-debugging-output' can be used to redirect -debugging output on the stderr file handle to a file. - -** GC changes: - -*** New variable `gc-cons-percentage' automatically grows the GC cons threshold -as the heap size increases. - -*** New variables `gc-elapsed' and `gcs-done' provide extra information -on garbage collection. - -*** The normal hook `post-gc-hook' is run at the end of garbage collection. - -The hook is run with GC inhibited, so use it with care. - -** Miscellaneous: - -*** A number of hooks have been renamed to better follow the conventions: - -`find-file-hooks' to `find-file-hook', -`find-file-not-found-hooks' to `find-file-not-found-functions', -`write-file-hooks' to `write-file-functions', -`write-contents-hooks' to `write-contents-functions', -`x-lost-selection-hooks' to `x-lost-selection-functions', -`x-sent-selection-hooks' to `x-sent-selection-functions', -`delete-frame-hook' to `delete-frame-functions'. - -In each case the old name remains as an alias for the moment. - -*** Variable `local-write-file-hooks' is marked obsolete. - -Use the LOCAL arg of `add-hook'. - -*** New function `x-send-client-message' sends a client message when -running under X. -* New Packages for Lisp Programming in Emacs 22.1 - -** The new library button.el implements simple and fast `clickable -buttons' in Emacs buffers. Buttons are much lighter-weight than the -`widgets' implemented by widget.el, and can be used by lisp code that -doesn't require the full power of widgets. Emacs uses buttons for -such things as help and apropos buffers. - -** The new library tree-widget.el provides a widget to display a set -of hierarchical data as an outline. For example, the tree-widget is -well suited to display a hierarchy of directories and files. - -** The new library bindat.el provides functions to unpack and pack -binary data structures, such as network packets, to and from Lisp -data structures. - -** master-mode.el implements a minor mode for scrolling a slave -buffer without leaving your current buffer, the master buffer. - -It can be used by sql.el, for example: the SQL buffer is the master -and its SQLi buffer is the slave. This allows you to scroll the SQLi -buffer containing the output from the SQL buffer containing the -commands. - -This is how to use sql.el and master.el together: the variable -sql-buffer contains the slave buffer. It is a local variable in the -SQL buffer. - -(add-hook 'sql-mode-hook - (function (lambda () - (master-mode t) - (master-set-slave sql-buffer)))) -(add-hook 'sql-set-sqli-hook - (function (lambda () - (master-set-slave sql-buffer)))) - -** The new library benchmark.el does timing measurements on Lisp code. - -This includes measuring garbage collection time. - -** The new library testcover.el does test coverage checking. - -This is so you can tell whether you've tested all paths in your Lisp -code. It works with edebug. - -The function `testcover-start' instruments all functions in a given -file. Then test your code. The function `testcover-mark-all' adds -overlay "splotches" to the Lisp file's buffer to show where coverage -is lacking. The command `testcover-next-mark' (bind it to a key!) -will move point forward to the next spot that has a splotch. - -Normally, a red splotch indicates the form was never completely -evaluated; a brown splotch means it always evaluated to the same -value. The red splotches are skipped for forms that can't possibly -complete their evaluation, such as `error'. The brown splotches are -skipped for forms that are expected to always evaluate to the same -value, such as (setq x 14). - -For difficult cases, you can add do-nothing macros to your code to -help out the test coverage tool. The macro `noreturn' suppresses a -red splotch. It is an error if the argument to `noreturn' does -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. - +* New Packages for Lisp Programming in Emacs 23.1 ---------------------------------------------------------------------- @@ -5405,4 +71,3 @@ paragraph-separate: "[ ]*$" end: -arch-tag: 1aca9dfa-2ac4-4d14-bebf-0007cee12793