X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/a2d59dea0d60605178f3af6ee1c7cf4682b3b814..044c2978976821d4d799ac55ed7c7bdf23bacd22:/etc/NEWS diff --git a/etc/NEWS b/etc/NEWS dissimilarity index 64% index 8361207ed6..3f986846f1 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1,14885 +1,5801 @@ -GNU Emacs NEWS -- history of user-visible changes. 2003-05-21 -Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. -See the end for copying conditions. - -Please send Emacs bug reports to bug-gnu-emacs@gnu.org. -For older news, see the file ONEWS -You can narrow news to the specific version by calling -`view-emacs-news' with a prefix argument or by typing C-u C-h C-n. - -Temporary note: - +++ indicates that the appropriate manual has already been updated. - --- means no change in the manuals is called for. -When you add a new item, please add it without either +++ or --- -so we will look at it and add it to the manual. - - -* Installation Changes in Emacs 22.1 - ---- -** Emacs now supports new configure options `--program-prefix', -`--program-suffix' and `--program-transform-name' that affect the names of -installed programs. - ---- -** Emacs can now be built without sound support. - ---- -** 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 `emacsserver' program has been removed, replaced with Lisp code. - ---- -** 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. - ---- -** Leim is now part of the Emacs distribution. -You no longer need to download a separate tarball in order to build -Emacs with Leim. - -+++ -** 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 that makes it easy -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 that makes it easy accessible -(Help->More Manuals->Introduction to Emacs Lisp). - ---- -** New translations of the Emacs Tutorial are available in the -following languages: Brasilian Portuguese, Bulgarian, Chinese (both -with simplified and traditional characters), French, 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. - ---- -** A French translation of the `Emacs Survival Guide' is available. - ---- -** 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'. - ---- -** Support for Cygwin was added. - ---- -** Support for FreeBSD/Alpha has been added. - ---- -** Support for GNU/Linux systems on S390 machines was added. - ---- -** Support for MacOS X was added. -See the files mac/README and mac/INSTALL for build instructions. - ---- -** Support for GNU/Linux systems on X86-64 machines was added. - ---- -** Mac OS 9 port now uses the Carbon API by default. You can also -create non-Carbon build by specifying `NonCarbon' as a target. See -the files mac/README and mac/INSTALL for build instructions. - ---- -** 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. - -** 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. - ---- -** 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. - ---- -** Emacs Lisp source files are compressed by default if `gzip' is available. - - -* Startup Changes in Emacs 22.1 - -+++ -** 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. - -+++ -** 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 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.) - -+++ -** 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. - -+++ -** 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. - -+++ -** 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 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-startup-message' (which is also aliased as -`inhibit-splash-screen'). - -+++ -** The default is now to use a bitmap as the icon, so the command-line options ---icon-type, -i has been replaced with options --no-bitmap-icon, -nbi to turn -the bitmap icon off. - -+++ -** 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. - -+++ -** Init file changes -If the init file ~/.emacs does not exist, Emacs will try -~/.emacs.d/init.el or ~/.emacs.d/init.elc. You can also put the shell -init file .emacs_SHELL under ~/.emacs.d. - -+++ -** 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'. - -* Incompatible Editing Changes in Emacs 22.1 - -+++ -** 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. - -+++ -** 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. - -+++ -** line-move-ignore-invisible now defaults to t. - -+++ -** 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. - -+++ -** `apply-macro-to-region-lines' now operates on all lines that begin -in the region, rather than on all complete lines in the region. - -+++ -** 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. - -+++ -** In incremental search, C-w is changed. M-%, C-M-w and C-M-y are special. - -See below under "incremental search changes". - ---- -** 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. - -You can get the old behavior by typing C-x C-f M-n RET, which fetches -the actual file name into the minibuffer. - -+++ -** 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. - -+++ -** 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". - -+++ -** M-o now is the prefix key for setting text properties; -M-o M-o requests refontification. - -+++ -** You can now follow links by clicking Mouse-1 on the link. - -See below for more details. - -+++ -** 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'. - -* Editing Changes in Emacs 22.1 - -+++ -** !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. - -+++ -** The max size of buffers and integers has been doubled. -On 32bit machines, it is now 256M (i.e. 268435455). - -+++ -** 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. - -+++ -** `undo-only' does an undo which does not redo any previous undo. - -+++ -** M-SPC (just-one-space) when given a numeric argument N -converts whitespace around point to N spaces. - ---- -** 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. - ---- -** New commands to operate on pairs of open and close characters: -`insert-pair', `delete-pair', `raise-sexp'. - -+++ -** New command `kill-whole-line' kills an entire line at once. -By default, it is bound to C-S-. - -+++ -** 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. - -+++ -** 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 Indented-Text mode. - -+++ -** 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 `$$'. - -+++ -** `special-display-buffer-names' and `special-display-regexps' now -understand two new boolean pseudo-frame-parameters `same-frame' and -`same-window'. - -+++ -** The default for the paper size (variable ps-paper-type) is taken -from the locale. - -** The command `list-faces-display' now accepts a prefix arg. -When passed, the function prompts for a regular expression and lists -only faces matching this regexp. - -** 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. - -+++ -*** 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. - -+++ -*** 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. - -** Help command changes: - -+++ -*** Changes in C-h bindings: - -C-h e displays the *Messages* buffer. - -C-h d runs apropos-documentation. - -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, -- C-h w and C-h f new-kill-line reports: - new-kill-line is on C-k - ---- -*** 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. - -+++ -*** 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. - -** Incremental Search changes: - -+++ -*** 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. - -+++ -*** 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. - -+++ -*** 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. - -+++ -*** 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: - ---- -*** 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. - -+++ -*** 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 many cases, this will be more convenient than using -`query-replace-regexp-eval'. `\#' 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 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. - -** 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. - -+++ -*** In processing a local variables list, Emacs strips the prefix and -suffix from every line before processing all the lines. - -+++ -*** 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, the user 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. - -+++ -*** 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. - -+++ -*** Auto Compression mode is now enabled by default. - ---- -*** 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. - -+++ -*** 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.) - -+++ -*** 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. - -+++ -*** 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. - ---- -*** 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. - -+++ -*** If the user visits a file larger than `large-file-warning-threshold', -Emacs asks for confirmation. - -+++ -*** 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. - -** Minibuffer changes: - -+++ -*** 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. - -+++ -*** 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. - -+++ -*** New user option `history-delete-duplicates'. -If set to t when adding a new history element, all previous identical -elements are deleted. - -** Redisplay changes: - -+++ -*** 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. - -+++ -*** 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. - -+++ -*** 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. - -+++ -*** 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. - -+++ -*** 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. - -+++ -*** 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. - -** Cursor display changes: - -+++ -*** On X, MS Windows, and Mac OS, the blinking cursor's "off" state is -now controlled by the variable `blink-cursor-alist'. - -+++ -*** The X resource cursorBlink can be used to turn off cursor blinking. - -+++ -*** 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. - -+++ -*** 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. - -+++ -*** The variable `cursor-in-non-selected-windows' can now be set to any -of the recognized cursor types. - -+++ -*** On text terminals, the variable `visible-cursor' controls whether Emacs -uses the "very visible" cursor (the default) or the normal cursor. - -** 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 changes: - -+++ -*** M-o now is the prefix key for setting text properties; -M-o M-o requests refontification. - -+++ -*** 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'. - -+++ -*** font-lock: in modes like C and Lisp where the fontification assumes that -an open-paren in column 0 is always outside of any string or comment, -font-lock now highlights any such open-paren-in-column-zero in bold-red -if it is inside a string or a comment, to indicate that it can cause -trouble with fontification and/or indentation. - -+++ -*** New standard font-lock face `font-lock-preprocessor-face'. - -+++ -*** New standard font-lock face `font-lock-comment-delimiter-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. - ---- -*** The default settings for JIT stealth lock parameters are changed. -The default value for the user option jit-lock-stealth-time is now 16 -instead of 3, and the default value of jit-lock-stealth-nice is now -0.5 instead of 0.125. The new defaults should lower the CPU usage -when Emacs is fontifying in the background. - ---- -*** 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. - -** 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". - ---- -*** You can exit dialog windows and menus by typing C-g. - ---- -*** 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 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 pops down when 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-use-old-gtk-file-dialog' to t. Default is to use -the new dialog. - -** Mouse changes: - -+++ -*** 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. - -+++ -*** 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-sentitive 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'. - -+++ -*** 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. - ---- -*** mouse-wheels can now scroll a specific fraction of the window -(rather than a fixed number of lines) and the scrolling is `progressive'. - ---- -*** 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. - -+++ -*** Under X, mouse-wheel-mode is turned on by default. - -** Multilingual Environment (Mule) changes: - ---- -*** 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 `Single-Byte Character Support'. - -+++ -*** 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. - -+++ -*** 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. - -+++ -*** 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. - ---- -*** 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. - ---- -*** New language environments: French, Ukrainian, Tajik, -Bulgarian, Belarusian, Ukrainian, UTF-8, Windows-1255, Welsh, Latin-6, -Latin-7, Lithuanian, Latvian, Swedish, Slovenian, Croatian, Georgian, -Italian, Russian, Malayalam, Tamil, Russian, Chinese-EUC-TW. (Set up -automatically according to the locale.) - ---- -*** New input methods: latin-alt-postfix, latin-postfix, latin-prefix, -ukrainian-computer, belarusian, bulgarian-bds, russian-computer, -vietnamese-telex, lithuanian-numeric, lithuanian-keyboard, -latvian-keyboard, welsh, georgian, rfc1345, ucs, sgml, -bulgarian-phonetic, dutch, slovenian, croatian, malayalam-inscript, -tamil-inscript. - ---- -*** New input method chinese-sisheng for inputting Chinese Pinyin -characters. - ---- -*** 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. - ---- -*** A UTF-7 coding system is available in the library `utf-7'. - ---- -*** 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 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. - -** Buffer Menu changes: - -+++ -*** 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. - ---- -*** 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. - -** Dired mode: - ---- -*** 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'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'. - -+++ -*** In Dired, the w command now copies the current line's file name -into the kill ring. With a zero prefix arg, copies absolute file names. - -+++ -*** 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 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: - -+++ -*** 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. - -+++ -*** You can now use next-error (C-x `) and previous-error to advance to -the next/previous matching line found by M-x occur. - -+++ -*** 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. - -** 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. - ---- -*** M-x grep provides highlighting support. - -Hits are fontified in green, and hits in binary files in orange. Grep buffers -can be saved and automatically revisited. - -+++ -*** `grep-find' is now also available under the name `find-grep' where -people knowing `find-grep-dired' would probably expect it. - ---- -*** The new variables `grep-window-height', `grep-auto-highlight', and -`grep-scroll-output' override the corresponding compilation mode -settings, for grep commands only. - -+++ -*** 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. - -** 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, they might not work on -some older versions of xterm, or on some proprietary versions. - -** 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. - -* New Modes and Packages in Emacs 22.1 - -** 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, type M-x erc-select, 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, type M-x irc, and follow the prompts for -server, port, nick and initial channels. - ---- -** 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. - -+++ -** savehist saves minibuffer histories between sessions. -To use this feature, turn on savehist-mode in your `.emacs' file. - -+++ -** 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. - -+++ -** 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'. - ---- -** The new package ibuffer provides a powerful, completely -customizable replacement for buff-menu.el. - ---- -** 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. - -+++ -** 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. - ---- -** 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. - -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. - -+++ -** 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'. - -+++ -** The new package dns-mode.el add syntax highlight of DNS master files. -The key binding C-c C-s (`dns-mode-soa-increment-serial') can be used -to increment the SOA serial. - ---- -** 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'. - -+++ -** The new package flymake.el does on-the-fly syntax checking of program -source files. See the Flymake's Info manual for more details. - -+++ -** 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 new kmacro package provides a simpler user interface to -emacs' keyboard macro facilities. - -Basically, it uses two function keys (default F3 and F4) like this: -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 normal macro bindings C-x (, C-x ), and C-x e now interfaces to -the keyboard macro ring. - -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. - ---- -** 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 wdired.el package allows you to use normal editing commands on Dired -buffers to change filenames, permissions, etc... - -+++ -** 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. - -+++ -** 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 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. - ---- -** 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. - -+++ -** 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 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 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. - -** The tumme.el package allows you to easily view, tag and in other ways -manipulate image files and their thumbnails, using dired as the main interface. -Tumme provides functionality to generate simple image galleries. - -+++ -** 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 URL package (which had been part of W3) is now part of Emacs. - ---- -** `cfengine-mode' is a major mode for editing GNU Cfengine -configuration files. - -+++ -** 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 python.el package is used to edit Python and Jython programs. - ---- -** The TCL package tcl-mode.el was replaced by tcl.el. -This was actually done in Emacs-21.1, and was not documented. - -** 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. - -* Changes in Specialized Modes and Packages in Emacs 22.1: - -** Changes in Dired - -+++ -*** Bindings for Tumme added -Several new keybindings, all starting with the C-t prefix, have been -added to Dired. They are all bound to commands in Tumme. 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. - -** 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. - -*** Default command prefix changed to "\C-c " (control-c space), to avoid -intruding on user's keybinding space. Customize the -`allout-command-prefix' variable to your preference. - -*** Allout now uses text overlay's `invisible' property (and others) for -concealed text, instead of selective-display. This simplifies the code, in -particularly avoiding the need for kludges for isearch dynamic-display, -discretionary handling of edits of concealed text, undo concerns, etc. - -*** Many substantial fixes and refinements, including: - - - repaired inhibition of inadvertent edits to concealed text - - repaired retention of topic body hanging indent upon topic depth shifts - - refuse to create "containment discontinuities", where a - topic is shifted deeper than the offspring-depth of its' container - - bulleting variation is simpler and more accommodating, both in the - default behavior and in ability to vary when creating new topics - - many internal fixes and refinements - - many module and function docstring clarifications - - version number incremented to 2.2 - -** The variable `woman-topic-at-point' was 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. - ---- -** 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 a file `.emacs_NAME' (where NAME is the name of the Scheme interpreter) -exists in the user's home directory or in ~/.emacs.d, 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'. - ---- -** 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. - -+++ -** In Outline mode, `hide-body' no longer hides lines at the top -of the file that precede the first header line. - -+++ -** Telnet now prompts you for a port number with C-u M-x telnet. - ---- -** The terminal emulation code in term.el has been improved; it can -run most curses applications now. - -+++ -** M-x diff uses Diff mode instead of Compilation mode. - -+++ -** 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. - ---- -** Commands `winner-redo' and `winner-undo', from winner.el, are now -bound to C-c and C-c , respectively. This is an -incompatible change. - ---- -** `global-whitespace-mode' is a new alias for `whitespace-global-mode'. - -+++ -** M-x compare-windows now can automatically skip non-matching text to -resync points in both windows. - -+++ -** 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. - ---- -** PO translation files are decoded according to their MIME headers -when Emacs visits them. - -** Info mode changes: - -+++ -*** A numeric prefix argument of `info' selects an Info buffer -with the number appended to the `*info*' buffer name (e.g. "*info*<2>"). - -+++ -*** isearch in Info uses Info-search and searches through multiple nodes. - -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-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-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-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. - ---- -*** http and ftp links in Info are now operational: they look like cross -references and following them calls `browse-url'. - -+++ -*** 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. - ---- -*** 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. - -+++ -*** The default value for `Info-scroll-prefer-subnodes' is now nil. - ---- -*** `Info-index' offers completion. - -** 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. - -+++ -** 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. - -*** 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- or C-c ) respectively. These -commands delete entire blocks of whitespace with a single -key-sequence. [N.B. "DEL" is the 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 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. - -*** 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. - -*** 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. - -*** 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. - -*** 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 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. - -*** 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. - -*** Added toggle for syntactic indentation. -The function `c-toggle-syntactic-indentation' can be used to toggle -syntactic indentation. - -** 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. - -** Fortran mode changes: - ---- -*** 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. - -+++ -*** 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'. - ---- -*** 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. - ---- -*** The new function `f90-backslash-not-special' can be used to change -the syntax of backslashes in F90 buffers. - ---- -** 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. - -+++ -** Prolog mode has a new variable `prolog-font-lock-keywords' -to support use of font-lock. - -** 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. - -+++ -*** `xml-mode' is now an alias for `sgml-mode', which has XML support. - -** TeX modes: - -+++ -*** 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. - -+++ -*** New major mode Doctex mode, for *.dtx files. - -** 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. - -*** If the new variable `bibtex-parse-keys-fast' is non-nil, -use fast but simplified algorithm for parsing BibTeX keys. - -*** If the new variable `bibtex-autoadd-commas' is non-nil, -automatically add missing commas at end of BibTeX fields. - -*** The new variable `bibtex-autofill-types' contains a list of entry -types for which fields are filled automatically (if possible). - -*** The new command `bibtex-complete' completes word fragment before -point according to context (bound to M-tab). - -*** 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). - -*** In BibTeX mode the command `fill-paragraph' (M-q) fills -individual fields of a BibTeX entry. - -*** 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. - -*** The new command `bibtex-copy-summary-as-kill' pushes summary -of BibTeX entry to kill ring (bound to C-c C-t). - -*** 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. - -+++ -** 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'. - -** GUD changes: - -+++ -*** 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). - ---- -*** GUD mode has its own tool bar for controlling execution of the inferior -and other common debugger commands. - -+++ -*** 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. - -Use M-x gdb to start GDB-UI. - -*** 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. - -*** 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). - -*** 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. - -*** Added 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. - -** 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. - ---- -** 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. - -+++ -** 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 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 command line option --no-desktop - ---- -*** New hooks: - - desktop-after-read-hook run after a desktop is loaded. - - desktop-no-desktop-file-hook run when no desktop file is found. - ---- -** 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. - -** 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 - -**** 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. - -**** 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. - -**** 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. - -**** New language Lua. - -All functions are tagged. - -**** 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 language PHP. - -Functions, classes and defines are tags. If the --members option is -specified to etags, variables are tags also. - -**** 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. - -** VC Changes - -+++ -*** 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. - -+++ -*** 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. - -+++ -*** New backends for Subversion and Meta-CVS. - -+++ -*** 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. - -+++ -** 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'. - -** Rmail changes: - ---- -*** Rmail now displays 5-digit message ids in its summary buffer. - -*** 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. - -+++ -*** 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. - -** 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 7.93. There have been major changes since -version 5.0.2; see MH-E-NEWS for details. - -** Calendar changes: - -+++ -*** You can now use < and >, instead of C-x < and C-x >, to scroll -the calendar left or right. (The old key bindings still work too.) - -+++ -*** There is a new calendar package, icalendar.el, that can be used to -convert Emacs diary entries to/from the iCalendar 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 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 new variable `calendar-minimum-window-height' affects the -window generated by the function `generate-calendar-window'. - ---- -*** 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 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'. - -+++ -*** 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 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. - -+++ -** Speedbar changes: - -*** Speedbar items can now be selected by clicking mouse-1, based on -the `mouse-1-click-follows-link' mechanism. - -*** SPC and DEL are no longer bound to scroll up/down in the speedbar -keymap. - -*** 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-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'. - -*** The new user option `speedbar-use-tool-tips-flag', if non-nil, -means to display tool-tips for speedbar items. - -*** 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. - ---- -** 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'. - -** 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'. - ---- -** 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. - ---- -** 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. - -+++ -** `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. - ---- -** `partial-completion-mode' now handles partial completion on directory names. - ---- -** 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. - -** 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. - ---- -** LDAP support now defaults to ldapsearch from OpenLDAP version 2. - -+++ -** 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'. - ---- -** 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. - ---- -** 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. - -** battery.el changes: - ---- -*** display-battery-mode replaces display-battery. - ---- -*** battery.el now works on recent versions of OS X. - ---- -** 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'. - ---- -** 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. - ---- -** cplus-md.el has been deleted. - -* 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. - -+++ -** 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. - ---- -** 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. - ---- -** Tooltips now work on MS Windows. - -See the Emacs 21.1 NEWS entry for tooltips for details. - ---- -** 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. - ---- -** Different shaped mouse pointers are supported on MS Windows. - -The mouse pointer changes shape depending on what is under the pointer. - ---- -** 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. - ---- -** 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. - ---- -** 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. - ---- -** 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. - ---- -** 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 - ---- -** The variables post-command-idle-hook and post-command-idle-delay have - been removed. Use run-with-idle-timer instead. - -+++ -** `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'.) - -+++ -** 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. - ---- -** Support for Mocklisp has been removed. - -+++ -** The variable `memory-full' now remains t until -there is no longer a shortage of memory. - -* Lisp Changes in Emacs 22.1 - -** General Lisp changes: - -*** 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 `eql' is now available without requiring the CL package. - -+++ -*** `makehash' is now obsolete. Use `make-hash-table' instead. - -+++ -*** `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 `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. - -+++ -*** 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. - -+++ -*** Minor change in the function `format'. - -Some flags that were accepted but not implemented (such as "*") are no -longer accepted. - -+++ -*** 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'. - -+++ -*** 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. - -+++ -*** 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'. - -+++ -*** 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'.) - -+++ -*** 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 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 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.). - -+++ -*** 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. - -*** `list-faces-display' takes an optional argument, REGEXP. - -If it is non-nil, the function lists only faces matching this regexp. - -+++ -*** New function `string-or-null-p'. - -Return t if OBJECT is a string or nil. Otherwise, return nil. - -** 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. - -*** 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. - -+++ -*** The macro `define-obsolete-variable-alias' combines `defvaralias' and -`make-obsolete-variable'. - -** defcustom changes: - -+++ -*** The new customization type `float' requires a floating point number. - -** String changes: - -+++ -*** The escape sequence \s is now interpreted as a SPACE character. - -Exception: In a character constant, if it is followed by a `-' in a -character constant (e.g. ?\s-A), it is still interpreted as the super -modifier. In strings, \s is always interpreted as a space. - -+++ -*** 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. - -+++ -*** `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. - -+++ -*** New function `string-to-multibyte' converts a unibyte string to a -multibyte string with the same individual character codes. - -+++ -*** New function `substring-no-properties' returns a substring without -text properties. - -+++ -*** The new function `assoc-string' replaces `assoc-ignore-case' and -`assoc-ignore-representation', which are still available, but have -been declared obsolete. - -+++ -** 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. - -+++ -*** 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. - -+++ -*** New function `line-number-at-pos' returns the line number of a position. - -It an optional buffer position argument that defaults to point. - -+++ -*** `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. - -+++ -*** 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. - -** Text modification: - -+++ -*** 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: - ---- -*** `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 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. - -*** 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. - -** Local variables lists: - -+++ -*** Text properties in local variables. - -A file local variables list cannot specify a string with text -properties--any specified text properties are discarded. - -+++ -*** 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. - -** 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. - ---- -*** rx.el has new corresponding `symbol-end' and `symbol-start' elements. - -+++ -*** `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. - -+++ -*** 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' can 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. - -+++ -** 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 macro `with-syntax-table' no longer copies the syntax table. - -+++ -*** 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 new function `syntax-ppss' provides an efficient way to find the -current syntactic context at point. - -** File operation changes: - -+++ -*** New vars `exec-suffixes' and `load-suffixes' used when -searching for an executable or an Emacs Lisp file. - -+++ -*** The new primitive `set-file-times' sets a file's access and -modification times. Magic file name handlers can handle this -operation. - -+++ -*** 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. - -+++ -*** `buffer-auto-save-file-format' is the new name for what was -formerly called `auto-save-file-format'. It is now a permanent local. - -+++ -*** 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. - -+++ -*** `copy-file' now takes an additional option arg MUSTBENEW. - -This argument works like the MUSTBENEW argument of write-file. - -+++ -*** `visited-file-modtime' and `calendar-time-from-absolute' now return -a list of two integers, instead of a cons. - -+++ -*** `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. - -+++ -*** 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. - -+++ -*** 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). - -+++ -*** 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 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. - -** Input changes: - -+++ -*** 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. - ---- -*** 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. - -+++ -*** (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. - -** 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. - -+++ -*** `read-from-minibuffer' now accepts an additional argument KEEP-ALL -saying to put all inputs in the history list, even empty ones. - -+++ -*** 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. - -** 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. - -+++ -** Enhancements to keymaps. - -*** 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). - -*** 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" - -*** 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 - "" 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. - -*** 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. - -*** Dense keymaps now handle inheritance correctly. - -Previously a dense keymap would hide all of the simple-char key -bindings of the parent keymap. - -*** `define-key-after' now accepts keys longer than 1. - -*** 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. - -*** (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. - -** Abbrev changes: - -+++ -*** 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. - -+++ -*** `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. - -+++ -** Enhancements to process support - -*** 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. - -*** Function `signal-process' now accepts a process object or process -name in addition to a process id to identify the signaled process. - -*** 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 `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. - -*** 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. - -*** 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'. - -*** 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. - -- 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'. - -*** 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. - -*** 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. - -*** `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 `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. - -*** 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: - -+++ -*** New function `window-body-height'. - -This is like `window-height' but does not count the mode line or the -header line. - -+++ -*** New function `window-body-height'. - -This is like `window-height' but does not count the mode line -or the header line. - -+++ -*** 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. - -+++ -*** 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. - -+++ -*** The new function `adjust-window-trailing-edge' moves the right -or bottom edge of a window. It does not move other window edges. - -+++ -** Customizable fringe bitmaps - -*** 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. - -To change a built-in bitmap, do (require 'fringe) and use the symbol -identifying the bitmap such as `left-truncation' or `continued-line'. - -*** 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. - -*** 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 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). - -+++ -*** 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. - -** Mouse pointer features: - -+++ (lispref) -??? (man) -*** 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: - -+++ -*** Mouse events for clicks on window fringes now specify `left-fringe' -or `right-fringe' as the area. - -+++ -*** 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. - -+++ -*** `posn-point' now returns buffer position for non-text area events. - -+++ -*** Function `mouse-set-point' now works for events outside text area. - -+++ -*** New function `posn-area' returns window area clicked on (nil means -text area). - -+++ -*** Mouse events include actual glyph column and row for all event types -and all areas. - -+++ -*** New function `posn-actual-col-row' returns the actual glyph coordinates -of the mouse event position. - -+++ -*** 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. - -+++ -*** 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 - -+++ -*** 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 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. - ---- -*** 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. - ---- -*** 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. - -** Major mode mechanism changes: - -+++ -*** `set-auto-mode' now gives the interpreter magic line (if present) -precedence over the file name. Likewise an ` ) - (if (boundp 'foo) 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. - -** 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. - ---- -*** `set-buffer-file-coding-system' now takes an additional argument, -NOMODIFY. If it is non-nil, it means don't mark the buffer modified. - -+++ -*** 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 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. - -** 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. - -** 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. - -** 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. - -** 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. - -* 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. - -* Installation changes in Emacs 21.3 - -** Support for GNU/Linux on little-endian MIPS and on IBM S390 has -been added. - - -* Changes in Emacs 21.3 - -** The obsolete C mode (c-mode.el) has been removed to avoid problems -with Custom. - -** UTF-16 coding systems are available, encoding the same characters -as mule-utf-8. - -** There is a new language environment for UTF-8 (set up automatically -in UTF-8 locales). - -** Translation tables are available between equivalent characters in -different Emacs charsets -- for instance `e with acute' coming from the -Latin-1 and Latin-2 charsets. User options `unify-8859-on-encoding-mode' -and `unify-8859-on-decoding-mode' respectively turn on translation -between ISO 8859 character sets (`unification') on encoding -(e.g. writing a file) and decoding (e.g. reading a file). Note that -`unify-8859-on-encoding-mode' is useful and safe, but -`unify-8859-on-decoding-mode' can cause text to change when you read -it and write it out again without edits, so it is not generally advisable. -By default `unify-8859-on-encoding-mode' is turned on. - -** In Emacs running on the X window system, the default value of -`selection-coding-system' is now `compound-text-with-extensions'. - -If you want the old behavior, set selection-coding-system to -compound-text, which may be significantly more efficient. Using -compound-text-with-extensions seems to be necessary only for decoding -text from applications under XFree86 4.2, whose behavior is actually -contrary to the compound text specification. - - -* Installation changes in Emacs 21.2 - -** Support for BSD/OS 5.0 has been added. - -** Support for AIX 5.1 was added. - - -* Changes in Emacs 21.2 - -** Emacs now supports compound-text extended segments in X selections. - -X applications can use `extended segments' to encode characters in -compound text that belong to character sets which are not part of the -list of approved standard encodings for X, e.g. Big5. To paste -selections with such characters into Emacs, use the new coding system -compound-text-with-extensions as the value of selection-coding-system. - -** The default values of `tooltip-delay' and `tooltip-hide-delay' -were changed. - -** On terminals whose erase-char is ^H (Backspace), Emacs -now uses normal-erase-is-backspace-mode. - -** When the *scratch* buffer is recreated, its mode is set from -initial-major-mode, which normally is lisp-interaction-mode, -instead of using default-major-mode. - -** The new option `Info-scroll-prefer-subnodes' causes Info to behave -like the stand-alone Info reader (from the GNU Texinfo package) as far -as motion between nodes and their subnodes is concerned. If it is t -(the default), Emacs behaves as before when you type SPC in a menu: it -visits the subnode pointed to by the first menu entry. If this option -is nil, SPC scrolls to the end of the current node, and only then goes -to the first menu item, like the stand-alone reader does. - -This change was already in Emacs 21.1, but wasn't advertised in the -NEWS. - - -* Lisp Changes in Emacs 21.2 - -** The meanings of scroll-up-aggressively and scroll-down-aggressively -have been interchanged, so that the former now controls scrolling up, -and the latter now controls scrolling down. - -** The variable `compilation-parse-errors-filename-function' can -be used to transform filenames found in compilation output. - - -* Installation Changes in Emacs 21.1 - -See the INSTALL file for information on installing extra libraries and -fonts to take advantage of the new graphical features and extra -charsets in this release. - -** Support for GNU/Linux on IA64 machines has been added. - -** Support for LynxOS has been added. - -** There are new configure options associated with the support for -images and toolkit scrollbars. Use the --help option in `configure' -to list them. - -** You can build a 64-bit Emacs for SPARC/Solaris systems which -support 64-bit executables and also on Irix 6.5. This increases the -maximum buffer size. See etc/MACHINES for instructions. Changes to -build on other 64-bit systems should be straightforward modulo any -necessary changes to unexec. - -** There is a new configure option `--disable-largefile' to omit -Unix-98-style support for large files if that is available. - -** There is a new configure option `--without-xim' that instructs -Emacs to not use X Input Methods (XIM), if these are available. - -** `movemail' defaults to supporting POP. You can turn this off using -the --without-pop configure option, should that be necessary. - -** This version can be built for the Macintosh, but does not implement -all of the new display features described below. The port currently -lacks unexec, asynchronous processes, and networking support. See the -"Emacs and the Mac OS" appendix in the Emacs manual, for the -description of aspects specific to the Mac. - -** Note that the MS-Windows port does not yet implement various of the -new display features described below. - - -* Changes in Emacs 21.1 - -** Emacs has a new redisplay engine. - -The new redisplay handles characters of variable width and height. -Italic text can be used without redisplay problems. Fonts containing -oversized characters, i.e. characters larger than the logical height -of a font can be used. Images of various formats can be displayed in -the text. - -** Emacs has a new face implementation. - -The new faces no longer fundamentally use X font names to specify the -font. Instead, each face has several independent attributes--family, -height, width, weight and slant--that it may or may not specify. -These attributes can be merged from various faces, and then together -specify a font. - -Faces are supported on terminals that can display color or fonts. -These terminal capabilities are auto-detected. Details can be found -under Lisp changes, below. - -** Emacs can display faces on TTY frames. - -Emacs automatically detects terminals that are able to display colors. -Faces with a weight greater than normal are displayed extra-bright, if -the terminal supports it. Faces with a weight less than normal and -italic faces are displayed dimmed, if the terminal supports it. -Underlined faces are displayed underlined if possible. Other face -attributes such as `overline', `strike-through', and `box' are ignored -on terminals. - -The command-line options `-fg COLOR', `-bg COLOR', and `-rv' are now -supported on character terminals. - -Emacs automatically remaps all X-style color specifications to one of -the colors supported by the terminal. This means you could have the -same color customizations that work both on a windowed display and on -a TTY or when Emacs is invoked with the -nw option. - -** New default font is Courier 12pt under X. - -** Sound support - -Emacs supports playing sound files on GNU/Linux and FreeBSD (Voxware -driver and native BSD driver, a.k.a. Luigi's driver). Currently -supported file formats are RIFF-WAVE (*.wav) and Sun Audio (*.au). -You must configure Emacs with the option `--with-sound=yes' to enable -sound support. - -** Emacs now resizes mini-windows if appropriate. - -If a message is longer than one line, or minibuffer contents are -longer than one line, Emacs can resize the minibuffer window unless it -is on a frame of its own. You can control resizing and the maximum -minibuffer window size by setting the following variables: - -- User option: max-mini-window-height - -Maximum height for resizing mini-windows. If a float, it specifies a -fraction of the mini-window frame's height. If an integer, it -specifies a number of lines. - -Default is 0.25. - -- User option: resize-mini-windows - -How to resize mini-windows. If nil, don't resize. If t, always -resize to fit the size of the text. If `grow-only', let mini-windows -grow only, until they become empty, at which point they are shrunk -again. - -Default is `grow-only'. - -** LessTif support. - -Emacs now runs with the LessTif toolkit (see -). You will need version 0.92.26, or later. - -** LessTif/Motif file selection dialog. - -When Emacs is configured to use LessTif or Motif, reading a file name -from a menu will pop up a file selection dialog if `use-dialog-box' is -non-nil. - -** File selection dialog on MS-Windows is supported. - -When a file is visited by clicking File->Open, the MS-Windows version -now pops up a standard file selection dialog where you can select a -file to visit. File->Save As also pops up that dialog. - -** Toolkit scroll bars. - -Emacs now uses toolkit scroll bars if available. When configured for -LessTif/Motif, it will use that toolkit's scroll bar. Otherwise, when -configured for Lucid and Athena widgets, it will use the Xaw3d scroll -bar if Xaw3d is available. You can turn off the use of toolkit scroll -bars by specifying `--with-toolkit-scroll-bars=no' when configuring -Emacs. - -When you encounter problems with the Xaw3d scroll bar, watch out how -Xaw3d is compiled on your system. If the Makefile generated from -Xaw3d's Imakefile contains a `-DNARROWPROTO' compiler option, and your -Emacs system configuration file `s/your-system.h' does not contain a -define for NARROWPROTO, you might consider adding it. Take -`s/freebsd.h' as an example. - -Alternatively, if you don't have access to the Xaw3d source code, take -a look at your system's imake configuration file, for example in the -directory `/usr/X11R6/lib/X11/config' (paths are different on -different systems). You will find files `*.cf' there. If your -system's cf-file contains a line like `#define NeedWidePrototypes NO', -add a `#define NARROWPROTO' to your Emacs system configuration file. - -The reason for this is that one Xaw3d function uses `double' or -`float' function parameters depending on the setting of NARROWPROTO. -This is not a problem when Imakefiles are used because each system's -imake configuration file contains the necessary information. Since -Emacs doesn't use imake, this has do be done manually. - -** Tool bar support. - -Emacs supports a tool bar at the top of a frame under X. For details -of how to define a tool bar, see the page describing Lisp-level -changes. Tool-bar global minor mode controls whether or not it is -displayed and is on by default. The appearance of the bar is improved -if Emacs has been built with XPM image support. Otherwise monochrome -icons will be used. - -To make the tool bar more useful, we need contributions of extra icons -for specific modes (with copyright assignments). - -** Tooltips. - -Tooltips are small X windows displaying a help string at the current -mouse position. The Lisp package `tooltip' implements them. You can -turn them off via the user option `tooltip-mode'. - -Tooltips also provides support for GUD debugging. If activated, -variable values can be displayed in tooltips by pointing at them with -the mouse in source buffers. You can customize various aspects of the -tooltip display in the group `tooltip'. - -** Automatic Hscrolling - -Horizontal scrolling now happens automatically if -`automatic-hscrolling' is set (the default). This setting can be -customized. - -If a window is scrolled horizontally with set-window-hscroll, or -scroll-left/scroll-right (C-x <, C-x >), this serves as a lower bound -for automatic horizontal scrolling. Automatic scrolling will scroll -the text more to the left if necessary, but won't scroll the text more -to the right than the column set with set-window-hscroll etc. - -** When using a windowing terminal, each Emacs window now has a cursor -of its own. By default, when a window is selected, the cursor is -solid; otherwise, it is hollow. The user-option -`cursor-in-non-selected-windows' controls how to display the -cursor in non-selected windows. If nil, no cursor is shown, if -non-nil a hollow box cursor is shown. - -** Fringes to the left and right of windows are used to display -truncation marks, continuation marks, overlay arrows and alike. The -foreground, background, and stipple of these areas can be changed by -customizing face `fringe'. - -** The mode line under X is now drawn with shadows by default. -You can change its appearance by modifying the face `mode-line'. -In particular, setting the `:box' attribute to nil turns off the 3D -appearance of the mode line. (The 3D appearance makes the mode line -occupy more space, and thus might cause the first or the last line of -the window to be partially obscured.) - -The variable `mode-line-inverse-video', which was used in older -versions of emacs to make the mode-line stand out, is now deprecated. -However, setting it to nil will cause the `mode-line' face to be -ignored, and mode-lines to be drawn using the default text face. - -** Mouse-sensitive mode line. - -Different parts of the mode line have been made mouse-sensitive on all -systems which support the mouse. Moving the mouse to a -mouse-sensitive part in the mode line changes the appearance of the -mouse pointer to an arrow, and help about available mouse actions is -displayed either in the echo area, or in the tooltip window if you -have enabled one. - -Currently, the following actions have been defined: - -- Mouse-1 on the buffer name in the mode line goes to the next buffer. - -- Mouse-3 on the buffer-name goes to the previous buffer. - -- Mouse-2 on the read-only or modified status in the mode line (`%' or -`*') toggles the status. - -- Mouse-3 on the mode name displays a minor-mode menu. - -** Hourglass pointer - -Emacs can optionally display an hourglass pointer under X. You can -turn the display on or off by customizing group `cursor'. - -** Blinking cursor - -M-x blink-cursor-mode toggles a blinking cursor under X and on -terminals having terminal capabilities `vi', `vs', and `ve'. Blinking -and related parameters like frequency and delay can be customized in -the group `cursor'. - -** New font-lock support mode `jit-lock-mode'. - -This support mode is roughly equivalent to `lazy-lock' but is -generally faster. It supports stealth and deferred fontification. -See the documentation of the function `jit-lock-mode' for more -details. - -Font-lock uses jit-lock-mode as default support mode, so you don't -have to do anything to activate it. - -** The default binding of the Delete key has changed. - -The new user-option `normal-erase-is-backspace' can be set to -determine the effect of the Delete and Backspace function keys. - -On window systems, the default value of this option is chosen -according to the keyboard used. If the keyboard has both a Backspace -key and a Delete key, and both are mapped to their usual meanings, the -option's default value is set to t, so that Backspace can be used to -delete backward, and Delete can be used to delete forward. On -keyboards which either have only one key (usually labeled DEL), or two -keys DEL and BS which produce the same effect, the option's value is -set to nil, and these keys delete backward. - -If not running under a window system, setting this option accomplishes -a similar effect by mapping C-h, which is usually generated by the -Backspace key, to DEL, and by mapping DEL to C-d via -`keyboard-translate'. The former functionality of C-h is available on -the F1 key. You should probably not use this setting on a text-only -terminal if you don't have both Backspace, Delete and F1 keys. - -Programmatically, you can call function normal-erase-is-backspace-mode -to toggle the behavior of the Delete and Backspace keys. - -** The default for user-option `next-line-add-newlines' has been -changed to nil, i.e. C-n will no longer add newlines at the end of a -buffer by default. - -** The and keys now move to the beginning or end of the -current line, respectively. C- and C- move to the -beginning and end of the buffer. - -** Emacs now checks for recursive loads of Lisp files. If the -recursion depth exceeds `recursive-load-depth-limit', an error is -signaled. - -** When an error is signaled during the loading of the user's init -file, Emacs now pops up the *Messages* buffer. - -** Emacs now refuses to load compiled Lisp files which weren't -compiled with Emacs. Set `load-dangerous-libraries' to t to change -this behavior. - -The reason for this change is an incompatible change in XEmacs's byte -compiler. Files compiled with XEmacs can contain byte codes that let -Emacs dump core. - -** Toggle buttons and radio buttons in menus. - -When compiled with LessTif (or Motif) support, Emacs uses toolkit -widgets for radio and toggle buttons in menus. When configured for -Lucid, Emacs draws radio buttons and toggle buttons similar to Motif. - -** The menu bar configuration has changed. The new configuration is -more CUA-compliant. The most significant change is that Options is -now a separate menu-bar item, with Mule and Customize as its submenus. - -** Item Save Options on the Options menu allows saving options set -using that menu. - -** Highlighting of trailing whitespace. - -When `show-trailing-whitespace' is non-nil, Emacs displays trailing -whitespace in the face `trailing-whitespace'. Trailing whitespace is -defined as spaces or tabs at the end of a line. To avoid busy -highlighting when entering new text, trailing whitespace is not -displayed if point is at the end of the line containing the -whitespace. - -** C-x 5 1 runs the new command delete-other-frames which deletes -all frames except the selected one. - -** The new user-option `confirm-kill-emacs' can be customized to -let Emacs ask for confirmation before exiting. - -** The header line in an Info buffer is now displayed as an emacs -header-line (which is like a mode-line, but at the top of the window), -so that it remains visible even when the buffer has been scrolled. -This behavior may be disabled by customizing the option -`Info-use-header-line'. - -** Polish, Czech, German, and French translations of Emacs' reference card -have been added. They are named `pl-refcard.tex', `cs-refcard.tex', -`de-refcard.tex' and `fr-refcard.tex'. Postscript files are included. - -** An `Emacs Survival Guide', etc/survival.tex, is available. - -** A reference card for Dired has been added. Its name is -`dired-ref.tex'. A French translation is available in -`fr-drdref.tex'. - -** C-down-mouse-3 is bound differently. Now if the menu bar is not -displayed it pops up a menu containing the items which would be on the -menu bar. If the menu bar is displayed, it pops up the major mode -menu or the Edit menu if there is no major mode menu. - -** Variable `load-path' is no longer customizable through Customize. - -You can no longer use `M-x customize-variable' to customize `load-path' -because it now contains a version-dependent component. You can still -use `add-to-list' and `setq' to customize this variable in your -`~/.emacs' init file or to modify it from any Lisp program in general. - -** C-u C-x = provides detailed information about the character at -point in a pop-up window. - -** Emacs can now support 'wheeled' mice (such as the MS IntelliMouse) -under XFree86. To enable this, use the `mouse-wheel-mode' command, or -customize the variable `mouse-wheel-mode'. - -The variables `mouse-wheel-follow-mouse' and `mouse-wheel-scroll-amount' -determine where and by how much buffers are scrolled. - -** Emacs' auto-save list files are now by default stored in a -sub-directory `.emacs.d/auto-save-list/' of the user's home directory. -(On MS-DOS, this subdirectory's name is `_emacs.d/auto-save.list/'.) -You can customize `auto-save-list-file-prefix' to change this location. - -** The function `getenv' is now callable interactively. - -** The new user-option `even-window-heights' can be set to nil -to prevent `display-buffer' from evening out window heights. - -** The new command M-x delete-trailing-whitespace RET will delete the -trailing whitespace within the current restriction. You can also add -this function to `write-file-hooks' or `local-write-file-hooks'. - -** When visiting a file with M-x find-file-literally, no newlines will -be added to the end of the buffer even if `require-final-newline' is -non-nil. - -** The new user-option `find-file-suppress-same-file-warnings' can be -set to suppress warnings ``X and Y are the same file'' when visiting a -file that is already visited under a different name. - -** The new user-option `electric-help-shrink-window' can be set to -nil to prevent adjusting the help window size to the buffer size. - -** New command M-x describe-character-set reads a character set name -and displays information about that. - -** The new variable `auto-mode-interpreter-regexp' contains a regular -expression matching interpreters, for file mode determination. - -This regular expression is matched against the first line of a file to -determine the file's mode in `set-auto-mode' when Emacs can't deduce a -mode from the file's name. If it matches, the file is assumed to be -interpreted by the interpreter matched by the second group of the -regular expression. The mode is then determined as the mode -associated with that interpreter in `interpreter-mode-alist'. - -** New function executable-make-buffer-file-executable-if-script-p is -suitable as an after-save-hook as an alternative to `executable-chmod'. - -** The most preferred coding-system is now used to save a buffer if -buffer-file-coding-system is `undecided' and it is safe for the buffer -contents. (The most preferred is set by set-language-environment or -by M-x prefer-coding-system.) Thus if you visit an ASCII file and -insert a non-ASCII character from your current language environment, -the file will be saved silently with the appropriate coding. -Previously you would be prompted for a safe coding system. - -** The many obsolete language `setup-...-environment' commands have -been removed -- use `set-language-environment'. - -** The new Custom option `keyboard-coding-system' specifies a coding -system for keyboard input. - -** New variable `inhibit-iso-escape-detection' determines if Emacs' -coding system detection algorithm should pay attention to ISO2022's -escape sequences. If this variable is non-nil, the algorithm ignores -such escape sequences. The default value is nil, and it is -recommended not to change it except for the special case that you -always want to read any escape code verbatim. If you just want to -read a specific file without decoding escape codes, use C-x RET c -(`universal-coding-system-argument'). For instance, C-x RET c latin-1 -RET C-x C-f filename RET. - -** Variable `default-korean-keyboard' is initialized properly from the -environment variable `HANGUL_KEYBOARD_TYPE'. - -** New command M-x list-charset-chars reads a character set name and -displays all characters in that character set. - -** M-x set-terminal-coding-system (C-x RET t) now allows CCL-based -coding systems such as cpXXX and cyrillic-koi8. - -** Emacs now attempts to determine the initial language environment -and preferred and locale coding systems systematically from the -LC_ALL, LC_CTYPE, and LANG environment variables during startup. - -** New language environments `Polish', `Latin-8' and `Latin-9'. -Latin-8 and Latin-9 correspond respectively to the ISO character sets -8859-14 (Celtic) and 8859-15 (updated Latin-1, with the Euro sign). -GNU Intlfonts doesn't support these yet but recent X releases have -8859-15. See etc/INSTALL for information on obtaining extra fonts. -There are new Leim input methods for Latin-8 and Latin-9 prefix (only) -and Polish `slash'. - -** New language environments `Dutch' and `Spanish'. -These new environments mainly select appropriate translations -of the tutorial. - -** In Ethiopic language environment, special key bindings for -function keys are changed as follows. This is to conform to "Emacs -Lisp Coding Convention". - - new command old-binding - --- ------- ----------- - f3 ethio-fidel-to-sera-buffer f5 - S-f3 ethio-fidel-to-sera-region f5 - C-f3 ethio-fidel-to-sera-mail-or-marker f5 - - f4 ethio-sera-to-fidel-buffer unchanged - S-f4 ethio-sera-to-fidel-region unchanged - C-f4 ethio-sera-to-fidel-mail-or-marker unchanged - - S-f5 ethio-toggle-punctuation f3 - S-f6 ethio-modify-vowel f6 - S-f7 ethio-replace-space f7 - S-f8 ethio-input-special-character f8 - S-f9 ethio-replace-space unchanged - C-f9 ethio-toggle-space f2 - -** There are new Leim input methods. -New input methods "turkish-postfix", "turkish-alt-postfix", -"greek-mizuochi", "TeX", and "greek-babel" are now part of the Leim -package. - -** The rule of input method "slovak" is slightly changed. Now the -rules for translating "q" and "Q" to "`" (backquote) are deleted, thus -typing them inserts "q" and "Q" respectively. Rules for translating -"=q", "+q", "=Q", and "+Q" to "`" are also deleted. Now, to input -"`", you must type "=q". - -** When your terminal can't display characters from some of the ISO -8859 character sets but can display Latin-1, you can display -more-or-less mnemonic sequences of ASCII/Latin-1 characters instead of -empty boxes (under a window system) or question marks (not under a -window system). Customize the option `latin1-display' to turn this -on. - -** M-; now calls comment-dwim which tries to do something clever based -on the context. M-x kill-comment is now an alias to comment-kill, -defined in newcomment.el. You can choose different styles of region -commenting with the variable `comment-style'. - -** New user options `display-time-mail-face' and -`display-time-use-mail-icon' control the appearance of mode-line mail -indicator used by the display-time package. On a suitable display the -indicator can be an icon and is mouse-sensitive. - -** On window-systems, additional space can be put between text lines -on the display using several methods - -- By setting frame parameter `line-spacing' to PIXELS. PIXELS must be -a positive integer, and specifies that PIXELS number of pixels should -be put below text lines on the affected frame or frames. - -- By setting X resource `lineSpacing', class `LineSpacing'. This is -equivalent to specifying the frame parameter. - -- By specifying `--line-spacing=N' or `-lsp N' on the command line. - -- By setting buffer-local variable `line-spacing'. The meaning is -the same, but applies to the a particular buffer only. - -** The new command `clone-indirect-buffer' can be used to create -an indirect buffer that is a twin copy of the current buffer. The -command `clone-indirect-buffer-other-window', bound to C-x 4 c, -does the same but displays the indirect buffer in another window. - -** New user options `backup-directory-alist' and -`make-backup-file-name-function' control the placement of backups, -typically in a single directory or in an invisible sub-directory. - -** New commands iso-iso2sgml and iso-sgml2iso convert between Latin-1 -characters and the corresponding SGML (HTML) entities. - -** New X resources recognized - -*** The X resource `synchronous', class `Synchronous', specifies -whether Emacs should run in synchronous mode. Synchronous mode -is useful for debugging X problems. - -Example: - - emacs.synchronous: true - -*** The X resource `visualClass, class `VisualClass', specifies the -visual Emacs should use. The resource's value should be a string of -the form `CLASS-DEPTH', where CLASS is the name of the visual class, -and DEPTH is the requested color depth as a decimal number. Valid -visual class names are - - TrueColor - PseudoColor - DirectColor - StaticColor - GrayScale - StaticGray - -Visual class names specified as X resource are case-insensitive, i.e. -`pseudocolor', `Pseudocolor' and `PseudoColor' all have the same -meaning. - -The program `xdpyinfo' can be used to list the visual classes -supported on your display, and which depths they have. If -`visualClass' is not specified, Emacs uses the display's default -visual. - -Example: - - emacs.visualClass: TrueColor-8 - -*** The X resource `privateColormap', class `PrivateColormap', -specifies that Emacs should use a private colormap if it is using the -default visual, and that visual is of class PseudoColor. Recognized -resource values are `true' or `on'. - -Example: - - emacs.privateColormap: true - -** Faces and frame parameters. - -There are four new faces `scroll-bar', `border', `cursor' and `mouse'. -Setting the frame parameters `scroll-bar-foreground' and -`scroll-bar-background' sets foreground and background color of face -`scroll-bar' and vice versa. Setting frame parameter `border-color' -sets the background color of face `border' and vice versa. Likewise -for frame parameters `cursor-color' and face `cursor', and frame -parameter `mouse-color' and face `mouse'. - -Changing frame parameter `font' sets font-related attributes of the -`default' face and vice versa. Setting frame parameters -`foreground-color' or `background-color' sets the colors of the -`default' face and vice versa. - -** New face `menu'. - -The face `menu' can be used to change colors and font of Emacs' menus. - -** New frame parameter `screen-gamma' for gamma correction. - -The new frame parameter `screen-gamma' specifies gamma-correction for -colors. Its value may be nil, the default, in which case no gamma -correction occurs, or a number > 0, usually a float, that specifies -the screen gamma of a frame's display. - -PC monitors usually have a screen gamma of 2.2. smaller values result -in darker colors. You might want to try a screen gamma of 1.5 for LCD -color displays. The viewing gamma Emacs uses is 0.4545. (1/2.2). - -The X resource name of this parameter is `screenGamma', class -`ScreenGamma'. - -** Tabs and variable-width text. - -Tabs are now displayed with stretch properties; the width of a tab is -defined as a multiple of the normal character width of a frame, and is -independent of the fonts used in the text where the tab appears. -Thus, tabs can be used to line up text in different fonts. - -** Enhancements of the Lucid menu bar - -*** The Lucid menu bar now supports the resource "margin". - - emacs.pane.menubar.margin: 5 - -The default margin is 4 which makes the menu bar appear like the -LessTif/Motif one. - -*** Arrows that indicate sub-menus are now drawn with shadows, as in -LessTif and Motif. - -** A block cursor can be drawn as wide as the glyph under it under X. - -As an example: if a block cursor is over a tab character, it will be -drawn as wide as that tab on the display. To do this, set -`x-stretch-cursor' to a non-nil value. - -** Empty display lines at the end of a buffer may be marked with a -bitmap (this is similar to the tilde displayed by vi and Less). - -This behavior is activated by setting the buffer-local variable -`indicate-empty-lines' to a non-nil value. The default value of this -variable is found in `default-indicate-empty-lines'. - -** There is a new "aggressive" scrolling method. - -When scrolling up because point is above the window start, if the -value of the buffer-local variable `scroll-up-aggressively' is a -number, Emacs chooses a new window start so that point ends up that -fraction of the window's height from the top of the window. - -When scrolling down because point is below the window end, if the -value of the buffer-local variable `scroll-down-aggressively' is a -number, Emacs chooses a new window start so that point ends up that -fraction of the window's height from the bottom of the window. - -** You can now easily create new *Info* buffers using either -M-x clone-buffer, C-u m RET or C-u g RET. -M-x clone-buffer can also be used on *Help* and several other special -buffers. - -** The command `Info-search' now uses a search history. - -** Listing buffers with M-x list-buffers (C-x C-b) now shows -abbreviated file names. Abbreviations can be customized by changing -`directory-abbrev-alist'. - -** A new variable, backup-by-copying-when-privileged-mismatch, gives -the highest file uid for which backup-by-copying-when-mismatch will be -forced on. The assumption is that uids less than or equal to this -value are special uids (root, bin, daemon, etc.--not real system -users) and that files owned by these users should not change ownership, -even if your system policy allows users other than root to edit them. - -The default is 200; set the variable to nil to disable the feature. - -** The rectangle commands now avoid inserting undesirable spaces, -notably at the end of lines. - -All these functions have been rewritten to avoid inserting unwanted -spaces, and an optional prefix now allows them to behave the old way. - -** The function `replace-rectangle' is an alias for `string-rectangle'. - -** The new command M-x string-insert-rectangle is like `string-rectangle', -but inserts text instead of replacing it. - -** The new command M-x query-replace-regexp-eval acts like -query-replace-regexp, but takes a Lisp expression which is evaluated -after each match to get the replacement text. - -** M-x query-replace recognizes a new command `e' (or `E') that lets -you edit the replacement string. - -** The new command mail-abbrev-complete-alias, bound to `M-TAB' -(if you load the library `mailabbrev'), lets you complete mail aliases -in the text, analogous to lisp-complete-symbol. - -** The variable `echo-keystrokes' may now have a floating point value. - -** If your init file is compiled (.emacs.elc), `user-init-file' is set -to the source name (.emacs.el), if that exists, after loading it. - -** The help string specified for a menu-item whose definition contains -the property `:help HELP' is now displayed under X, on MS-Windows, and -MS-DOS, either in the echo area or with tooltips. Many standard menus -displayed by Emacs now have help strings. - --- -** New user option `read-mail-command' specifies a command to use to -read mail from the menu etc. - -** The environment variable `EMACSLOCKDIR' is no longer used on MS-Windows. -This environment variable was used when creating lock files. Emacs on -MS-Windows does not use this variable anymore. This change was made -before Emacs 21.1, but wasn't documented until now. - -** Highlighting of mouse-sensitive regions is now supported in the -MS-DOS version of Emacs. - -** The new command `msdos-set-mouse-buttons' forces the MS-DOS version -of Emacs to behave as if the mouse had a specified number of buttons. -This comes handy with mice that don't report their number of buttons -correctly. One example is the wheeled mice, which report 3 buttons, -but clicks on the middle button are not passed to the MS-DOS version -of Emacs. - -** Customize changes - -*** Customize now supports comments about customized items. Use the -`State' menu to add comments, or give a prefix argument to -M-x customize-set-variable or M-x customize-set-value. Note that -customization comments will cause the customizations to fail in -earlier versions of Emacs. - -*** The new option `custom-buffer-done-function' says whether to kill -Custom buffers when you've done with them or just bury them (the -default). - -*** If Emacs was invoked with the `-q' or `--no-init-file' options, it -does not allow you to save customizations in your `~/.emacs' init -file. This is because saving customizations from such a session would -wipe out all the other customizationss you might have on your init -file. - -** If Emacs was invoked with the `-q' or `--no-init-file' options, it -does not save disabled and enabled commands for future sessions, to -avoid overwriting existing customizations of this kind that are -already in your init file. - -** New features in evaluation commands - -*** The commands to evaluate Lisp expressions, such as C-M-x in Lisp -modes, C-j in Lisp Interaction mode, and M-:, now bind the variables -print-level, print-length, and debug-on-error based on the new -customizable variables eval-expression-print-level, -eval-expression-print-length, and eval-expression-debug-on-error. - -The default values for the first two of these variables are 12 and 4 -respectively, which means that `eval-expression' now prints at most -the first 12 members of a list and at most 4 nesting levels deep (if -the list is longer or deeper than that, an ellipsis `...' is -printed). - - or on the printed text toggles between an abbreviated -printed representation and an unabbreviated one. - -The default value of eval-expression-debug-on-error is t, so any error -during evaluation produces a backtrace. - -*** The function `eval-defun' (C-M-x) now loads Edebug and instruments -code when called with a prefix argument. - -** CC mode changes. - -Note: This release contains changes that might not be compatible with -current user setups (although it's believed that these -incompatibilities will only show in very uncommon circumstances). -However, since the impact is uncertain, these changes may be rolled -back depending on user feedback. Therefore there's no forward -compatibility guarantee wrt the new features introduced in this -release. - -*** The hardcoded switch to "java" style in Java mode is gone. -CC Mode used to automatically set the style to "java" when Java mode -is entered. This has now been removed since it caused too much -confusion. - -However, to keep backward compatibility to a certain extent, the -default value for c-default-style now specifies the "java" style for -java-mode, but "gnu" for all other modes (as before). So you won't -notice the change if you haven't touched that variable. - -*** New cleanups, space-before-funcall and compact-empty-funcall. -Two new cleanups have been added to c-cleanup-list: - -space-before-funcall causes a space to be inserted before the opening -parenthesis of a function call, which gives the style "foo (bar)". - -compact-empty-funcall causes any space before a function call opening -parenthesis to be removed if there are no arguments to the function. -It's typically useful together with space-before-funcall to get the -style "foo (bar)" and "foo()". - -*** Some keywords now automatically trigger reindentation. -Keywords like "else", "while", "catch" and "finally" have been made -"electric" to make them reindent automatically when they continue an -earlier statement. An example: - -for (i = 0; i < 17; i++) - if (a[i]) - res += a[i]->offset; -else - -Here, the "else" should be indented like the preceding "if", since it -continues that statement. CC Mode will automatically reindent it after -the "else" has been typed in full, since it's not until then it's -possible to decide whether it's a new statement or a continuation of -the preceding "if". - -CC Mode uses Abbrev mode to achieve this, which is therefore turned on -by default. - -*** M-a and M-e now moves by sentence in multiline strings. -Previously these two keys only moved by sentence in comments, which -meant that sentence movement didn't work in strings containing -documentation or other natural language text. - -The reason it's only activated in multiline strings (i.e. strings that -contain a newline, even when escaped by a '\') is to avoid stopping in -the short strings that often reside inside statements. Multiline -strings almost always contain text in a natural language, as opposed -to other strings that typically contain format specifications, -commands, etc. Also, it's not that bothersome that M-a and M-e misses -sentences in single line strings, since they're short anyway. - -*** Support for autodoc comments in Pike mode. -Autodoc comments for Pike are used to extract documentation from the -source, like Javadoc in Java. Pike mode now recognize this markup in -comment prefixes and paragraph starts. - -*** The comment prefix regexps on c-comment-prefix may be mode specific. -When c-comment-prefix is an association list, it specifies the comment -line prefix on a per-mode basis, like c-default-style does. This -change came about to support the special autodoc comment prefix in -Pike mode only. - -*** Better handling of syntactic errors. -The recovery after unbalanced parens earlier in the buffer has been -improved; CC Mode now reports them by dinging and giving a message -stating the offending line, but still recovers and indent the -following lines in a sane way (most of the time). An "else" with no -matching "if" is handled similarly. If an error is discovered while -indenting a region, the whole region is still indented and the error -is reported afterwards. - -*** Lineup functions may now return absolute columns. -A lineup function can give an absolute column to indent the line to by -returning a vector with the desired column as the first element. - -*** More robust and warning-free byte compilation. -Although this is strictly not a user visible change (well, depending -on the view of a user), it's still worth mentioning that CC Mode now -can be compiled in the standard ways without causing trouble. Some -code have also been moved between the subpackages to enhance the -modularity somewhat. Thanks to Martin Buchholz for doing the -groundwork. - -*** c-style-variables-are-local-p now defaults to t. -This is an incompatible change that has been made to make the behavior -of the style system wrt global variable settings less confusing for -non-advanced users. If you know what this variable does you might -want to set it to nil in your .emacs, otherwise you probably don't -have to bother. - -Defaulting c-style-variables-are-local-p to t avoids the confusing -situation that occurs when a user sets some style variables globally -and edits both a Java and a non-Java file in the same Emacs session. -If the style variables aren't buffer local in this case, loading of -the second file will cause the default style (either "gnu" or "java" -by default) to override the global settings made by the user. - -*** New initialization procedure for the style system. -When the initial style for a buffer is determined by CC Mode (from the -variable c-default-style), the global values of style variables now -take precedence over the values specified by the chosen style. This -is different than the old behavior: previously, the style-specific -settings would override the global settings. This change makes it -possible to do simple configuration in the intuitive way with -Customize or with setq lines in one's .emacs file. - -By default, the global value of every style variable is the new -special symbol set-from-style, which causes the value to be taken from -the style system. This means that in effect, only an explicit setting -of a style variable will cause the "overriding" behavior described -above. - -Also note that global settings override style-specific settings *only* -when the initial style of a buffer is chosen by a CC Mode major mode -function. When a style is chosen in other ways --- for example, by a -call like (c-set-style "gnu") in a hook, or via M-x c-set-style --- -then the style-specific values take precedence over any global style -values. In Lisp terms, global values override style-specific values -only when the new second argument to c-set-style is non-nil; see the -function documentation for more info. - -The purpose of these changes is to make it easier for users, -especially novice users, to do simple customizations with Customize or -with setq in their .emacs files. On the other hand, the new system is -intended to be compatible with advanced users' customizations as well, -such as those that choose styles in hooks or whatnot. This new system -is believed to be almost entirely compatible with current -configurations, in spite of the changed precedence between style and -global variable settings when a buffer's default style is set. - -(Thanks to Eric Eide for clarifying this explanation a bit.) - -**** c-offsets-alist is now a customizable variable. -This became possible as a result of the new initialization behavior. - -This variable is treated slightly differently from the other style -variables; instead of using the symbol set-from-style, it will be -completed with the syntactic symbols it doesn't already contain when -the style is first initialized. This means it now defaults to the -empty list to make all syntactic elements get their values from the -style system. - -**** Compatibility variable to restore the old behavior. -In case your configuration doesn't work with this change, you can set -c-old-style-variable-behavior to non-nil to get the old behavior back -as far as possible. - -*** Improvements to line breaking and text filling. -CC Mode now handles this more intelligently and seamlessly wrt the -surrounding code, especially inside comments. For details see the new -chapter about this in the manual. - -**** New variable to recognize comment line prefix decorations. -The variable c-comment-prefix-regexp has been added to properly -recognize the line prefix in both block and line comments. It's -primarily used to initialize the various paragraph recognition and -adaptive filling variables that the text handling functions uses. - -**** New variable c-block-comment-prefix. -This is a generalization of the now obsolete variable -c-comment-continuation-stars to handle arbitrary strings. - -**** CC Mode now uses adaptive fill mode. -This to make it adapt better to the paragraph style inside comments. - -It's also possible to use other adaptive filling packages inside CC -Mode, notably Kyle E. Jones' Filladapt mode (http://wonderworks.com/). -A new convenience function c-setup-filladapt sets up Filladapt for use -inside CC Mode. - -Note though that the 2.12 version of Filladapt lacks a feature that -causes it to work suboptimally when c-comment-prefix-regexp can match -the empty string (which it commonly does). A patch for that is -available from the CC Mode web site (http://www.python.org/emacs/ -cc-mode/). - -**** The variables `c-hanging-comment-starter-p' and -`c-hanging-comment-ender-p', which controlled how comment starters and -enders were filled, are not used anymore. The new version of the -function `c-fill-paragraph' keeps the comment starters and enders as -they were before the filling. - -**** It's now possible to selectively turn off auto filling. -The variable c-ignore-auto-fill is used to ignore auto fill mode in -specific contexts, e.g. in preprocessor directives and in string -literals. - -**** New context sensitive line break function c-context-line-break. -It works like newline-and-indent in normal code, and adapts the line -prefix according to the comment style when used inside comments. If -you're normally using newline-and-indent, you might want to switch to -this function. - -*** Fixes to IDL mode. -It now does a better job in recognizing only the constructs relevant -to IDL. E.g. it no longer matches "class" as the beginning of a -struct block, but it does match the CORBA 2.3 "valuetype" keyword. -Thanks to Eric Eide. - -*** Improvements to the Whitesmith style. -It now keeps the style consistently on all levels and both when -opening braces hangs and when they don't. - -**** New lineup function c-lineup-whitesmith-in-block. - -*** New lineup functions c-lineup-template-args and c-indent-multi-line-block. -See their docstrings for details. c-lineup-template-args does a -better job of tracking the brackets used as parens in C++ templates, -and is used by default to line up continued template arguments. - -*** c-lineup-comment now preserves alignment with a comment on the -previous line. It used to instead preserve comments that started in -the column specified by comment-column. - -*** c-lineup-C-comments handles "free form" text comments. -In comments with a long delimiter line at the start, the indentation -is kept unchanged for lines that start with an empty comment line -prefix. This is intended for the type of large block comments that -contain documentation with its own formatting. In these you normally -don't want CC Mode to change the indentation. - -*** The `c' syntactic symbol is now relative to the comment start -instead of the previous line, to make integers usable as lineup -arguments. - -*** All lineup functions have gotten docstrings. - -*** More preprocessor directive movement functions. -c-down-conditional does the reverse of c-up-conditional. -c-up-conditional-with-else and c-down-conditional-with-else are -variants of these that also stops at "#else" lines (suggested by Don -Provan). - -*** Minor improvements to many movement functions in tricky situations. - -** Dired changes - -*** New variable `dired-recursive-deletes' determines if the delete -command will delete non-empty directories recursively. The default -is, delete only empty directories. - -*** New variable `dired-recursive-copies' determines if the copy -command will copy directories recursively. The default is, do not -copy directories recursively. - -*** In command `dired-do-shell-command' (usually bound to `!') a `?' -in the shell command has a special meaning similar to `*', but with -the difference that the command will be run on each file individually. - -*** The new command `dired-find-alternate-file' (usually bound to `a') -replaces the Dired buffer with the buffer for an alternate file or -directory. - -*** The new command `dired-show-file-type' (usually bound to `y') shows -a message in the echo area describing what type of file the point is on. -This command invokes the external program `file' do its work, and so -will only work on systems with that program, and will be only as -accurate or inaccurate as it is. - -*** Dired now properly handles undo changes of adding/removing `-R' -from ls switches. - -*** Dired commands that prompt for a destination file now allow the use -of the `M-n' command in the minibuffer to insert the source filename, -which the user can then edit. This only works if there is a single -source file, not when operating on multiple marked files. - -** Gnus changes. - -The Gnus NEWS entries are short, but they reflect sweeping changes in -four areas: Article display treatment, MIME treatment, -internationalization and mail-fetching. - -*** The mail-fetching functions have changed. See the manual for the -many details. In particular, all procmail fetching variables are gone. - -If you used procmail like in - -(setq nnmail-use-procmail t) -(setq nnmail-spool-file 'procmail) -(setq nnmail-procmail-directory "~/mail/incoming/") -(setq nnmail-procmail-suffix "\\.in") - -this now has changed to - -(setq mail-sources - '((directory :path "~/mail/incoming/" - :suffix ".in"))) - -More information is available in the info doc at Select Methods -> -Getting Mail -> Mail Sources - -*** Gnus is now a MIME-capable reader. This affects many parts of -Gnus, and adds a slew of new commands. See the manual for details. -Separate MIME packages like RMIME, mime-compose etc., will probably no -longer work; remove them and use the native facilities. - -The FLIM/SEMI package still works with Emacs 21, but if you want to -use the native facilities, you must remove any mailcap.el[c] that was -installed by FLIM/SEMI version 1.13 or earlier. - -*** Gnus has also been multilingualized. This also affects too many -parts of Gnus to summarize here, and adds many new variables. There -are built-in facilities equivalent to those of gnus-mule.el, which is -now just a compatibility layer. - -*** gnus-mule.el is now just a compatibility layer over the built-in -Gnus facilities. - -*** gnus-auto-select-first can now be a function to be -called to position point. - -*** The user can now decide which extra headers should be included in -summary buffers and NOV files. - -*** `gnus-article-display-hook' has been removed. Instead, a number -of variables starting with `gnus-treat-' have been added. - -*** The Gnus posting styles have been redone again and now work in a -subtly different manner. - -*** New web-based backends have been added: nnslashdot, nnwarchive -and nnultimate. nnweb has been revamped, again, to keep up with -ever-changing layouts. - -*** Gnus can now read IMAP mail via nnimap. - -*** There is image support of various kinds and some sound support. - -** Changes in Texinfo mode. - -*** A couple of new key bindings have been added for inserting Texinfo -macros - - Key binding Macro - ------------------------- - C-c C-c C-s @strong - C-c C-c C-e @emph - C-c C-c u @uref - C-c C-c q @quotation - C-c C-c m @email - C-c C-o @ ... @end - M-RET @item - -*** The " key now inserts either " or `` or '' depending on context. - -** Changes in Outline mode. - -There is now support for Imenu to index headings. A new command -`outline-headers-as-kill' copies the visible headings in the region to -the kill ring, e.g. to produce a table of contents. - -** Changes to Emacs Server - -*** The new option `server-kill-new-buffers' specifies what to do -with buffers when done with them. If non-nil, the default, buffers -are killed, unless they were already present before visiting them with -Emacs Server. If nil, `server-temp-file-regexp' specifies which -buffers to kill, as before. - -Please note that only buffers are killed that still have a client, -i.e. buffers visited with `emacsclient --no-wait' are never killed in -this way. - -** Both emacsclient and Emacs itself now accept command line options -of the form +LINE:COLUMN in addition to +LINE. - -** Changes to Show Paren mode. - -*** Overlays used by Show Paren mode now use a priority property. -The new user option show-paren-priority specifies the priority to -use. Default is 1000. - -** New command M-x check-parens can be used to find unbalanced paren -groups and strings in buffers in Lisp mode (or other modes). - -** Changes to hideshow.el - -*** Generalized block selection and traversal - -A block is now recognized by its start and end regexps (both strings), -and an integer specifying which sub-expression in the start regexp -serves as the place where a `forward-sexp'-like function can operate. -See the documentation of variable `hs-special-modes-alist'. - -*** During incremental search, if Hideshow minor mode is active, -hidden blocks are temporarily shown. The variable `hs-headline' can -be used in the mode line format to show the line at the beginning of -the open block. - -*** User option `hs-hide-all-non-comment-function' specifies a -function to be called at each top-level block beginning, instead of -the normal block-hiding function. - -*** The command `hs-show-region' has been removed. - -*** The key bindings have changed to fit the Emacs conventions, -roughly imitating those of Outline minor mode. Notably, the prefix -for all bindings is now `C-c @'. For details, see the documentation -for `hs-minor-mode'. - -*** The variable `hs-show-hidden-short-form' has been removed, and -hideshow.el now always behaves as if this variable were set to t. - -** Changes to Change Log mode and Add-Log functions - -*** If you invoke `add-change-log-entry' from a backup file, it makes -an entry appropriate for the file's parent. This is useful for making -log entries by comparing a version with deleted functions. - -**** New command M-x change-log-merge merges another log into the -current buffer. - -*** New command M-x change-log-redate fixes any old-style date entries -in a log file. - -*** Change Log mode now adds a file's version number to change log -entries if user-option `change-log-version-info-enabled' is non-nil. -Unless the file is under version control the search for a file's -version number is performed based on regular expressions from -`change-log-version-number-regexp-list' which can be customized. -Version numbers are only found in the first 10 percent of a file. - -*** Change Log mode now defines its own faces for font-lock highlighting. - -** Changes to cmuscheme - -*** The user-option `scheme-program-name' has been renamed -`cmuscheme-program-name' due to conflicts with xscheme.el. - -** Changes in Font Lock - -*** The new function `font-lock-remove-keywords' can be used to remove -font-lock keywords from the current buffer or from a specific major mode. - -*** Multi-line patterns are now supported. Modes using this, should -set font-lock-multiline to t in their font-lock-defaults. - -*** `font-lock-syntactic-face-function' allows major-modes to choose -the face used for each string/comment. - -*** A new standard face `font-lock-doc-face'. -Meant for Lisp docstrings, Javadoc comments and other "documentation in code". - -** Changes to Shell mode - -*** The `shell' command now accepts an optional argument to specify the buffer -to use, which defaults to "*shell*". When used interactively, a -non-default buffer may be specified by giving the `shell' command a -prefix argument (causing it to prompt for the buffer name). - -** Comint (subshell) changes - -These changes generally affect all modes derived from comint mode, which -include shell-mode, gdb-mode, scheme-interaction-mode, etc. - -*** Comint now by default interprets some carriage-control characters. -Comint now removes CRs from CR LF sequences, and treats single CRs and -BSs in the output in a way similar to a terminal (by deleting to the -beginning of the line, or deleting the previous character, -respectively). This is achieved by adding `comint-carriage-motion' to -the `comint-output-filter-functions' hook by default. - -*** By default, comint no longer uses the variable `comint-prompt-regexp' -to distinguish prompts from user-input. Instead, it notices which -parts of the text were output by the process, and which entered by the -user, and attaches `field' properties to allow emacs commands to use -this information. Common movement commands, notably beginning-of-line, -respect field boundaries in a fairly natural manner. To disable this -feature, and use the old behavior, customize the user option -`comint-use-prompt-regexp-instead-of-fields'. - -*** Comint now includes new features to send commands to running processes -and redirect the output to a designated buffer or buffers. - -*** The command M-x comint-redirect-send-command reads a command and -buffer name from the mini-buffer. The command is sent to the current -buffer's process, and its output is inserted into the specified buffer. - -The command M-x comint-redirect-send-command-to-process acts like -M-x comint-redirect-send-command but additionally reads the name of -the buffer whose process should be used from the mini-buffer. - -*** Packages based on comint now highlight user input and program prompts, -and support choosing previous input with mouse-2. To control these features, -see the user-options `comint-highlight-input' and `comint-highlight-prompt'. - -*** The new command `comint-write-output' (usually bound to `C-c C-s') -saves the output from the most recent command to a file. With a prefix -argument, it appends to the file. - -*** The command `comint-kill-output' has been renamed `comint-delete-output' -(usually bound to `C-c C-o'); the old name is aliased to it for -compatibility. - -*** The new function `comint-add-to-input-history' adds commands to the input -ring (history). - -*** The new variable `comint-input-history-ignore' is a regexp for -identifying history lines that should be ignored, like tcsh time-stamp -strings, starting with a `#'. The default value of this variable is "^#". - -** Changes to Rmail mode - -*** The new user-option rmail-user-mail-address-regexp can be -set to fine tune the identification of the correspondent when -receiving new mail. If it matches the address of the sender, the -recipient is taken as correspondent of a mail. If nil, the default, -`user-login-name' and `user-mail-address' are used to exclude yourself -as correspondent. - -Usually you don't have to set this variable, except if you collect -mails sent by you under different user names. Then it should be a -regexp matching your mail addresses. - -*** The new user-option rmail-confirm-expunge controls whether and how -to ask for confirmation before expunging deleted messages from an -Rmail file. You can choose between no confirmation, confirmation -with y-or-n-p, or confirmation with yes-or-no-p. Default is to ask -for confirmation with yes-or-no-p. - -*** RET is now bound in the Rmail summary to rmail-summary-goto-msg, -like `j'. - -*** There is a new user option `rmail-digest-end-regexps' that -specifies the regular expressions to detect the line that ends a -digest message. - -*** The new user option `rmail-automatic-folder-directives' specifies -in which folder to put messages automatically. - -*** The new function `rmail-redecode-body' allows to fix a message -with non-ASCII characters if Emacs happens to decode it incorrectly -due to missing or malformed "charset=" header. - -** The new user-option `mail-envelope-from' can be used to specify -an envelope-from address different from user-mail-address. - -** The variable mail-specify-envelope-from controls whether to -use the -f option when sending mail. - -** The Rmail command `o' (`rmail-output-to-rmail-file') now writes the -current message in the internal `emacs-mule' encoding, rather than in -the encoding taken from the variable `buffer-file-coding-system'. -This allows to save messages whose characters cannot be safely encoded -by the buffer's coding system, and makes sure the message will be -displayed correctly when you later visit the target Rmail file. - -If you want your Rmail files be encoded in a specific coding system -other than `emacs-mule', you can customize the variable -`rmail-file-coding-system' to set its value to that coding system. - -** Changes to TeX mode - -*** The default mode has been changed from `plain-tex-mode' to -`latex-mode'. - -*** latex-mode now has a simple indentation algorithm. - -*** M-f and M-p jump around \begin...\end pairs. - -*** Added support for outline-minor-mode. - -** Changes to RefTeX mode - -*** RefTeX has new support for index generation. Index entries can be - created with `C-c <', with completion available on index keys. - Pressing `C-c /' indexes the word at the cursor with a default - macro. `C-c >' compiles all index entries into an alphabetically - sorted *Index* buffer which looks like the final index. Entries - can be edited from that buffer. - -*** Label and citation key selection now allow to select several - items and reference them together (use `m' to mark items, `a' or - `A' to use all marked entries). - -*** reftex.el has been split into a number of smaller files to reduce - memory use when only a part of RefTeX is being used. - -*** a new command `reftex-view-crossref-from-bibtex' (bound to `C-c &' - in BibTeX-mode) can be called in a BibTeX database buffer in order - to show locations in LaTeX documents where a particular entry has - been cited. - -** Emacs Lisp mode now allows multiple levels of outline headings. -The level of a heading is determined from the number of leading -semicolons in a heading line. Toplevel forms starting with a `(' -in column 1 are always made leaves. - -** The M-x time-stamp command (most commonly used on write-file-hooks) -has the following new features: - -*** The patterns for finding the time stamp and for updating a pattern -may match text spanning multiple lines. For example, some people like -to have the filename and date on separate lines. The new variable -time-stamp-inserts-lines controls the matching for multi-line patterns. - -*** More than one time stamp can be updated in the same file. This -feature is useful if you need separate time stamps in a program source -file to both include in formatted documentation and insert in the -compiled binary. The same time-stamp will be written at each matching -pattern. The variable time-stamp-count enables this new feature; it -defaults to 1. - -** Partial Completion mode now completes environment variables in -file names. - -** Ispell changes - -*** The command `ispell' now spell-checks a region if -transient-mark-mode is on, and the mark is active. Otherwise it -spell-checks the current buffer. - -*** Support for synchronous subprocesses - DOS/Windoze - has been -added. - -*** An "alignment error" bug was fixed when a manual spelling -correction is made and re-checked. - -*** Italian, Portuguese, and Slovak dictionary definitions have been added. - -*** Region skipping performance has been vastly improved in some -cases. - -*** Spell checking HTML buffers has been improved and isn't so strict -on syntax errors. - -*** The buffer-local words are now always placed on a new line at the -end of the buffer. - -*** Spell checking now works in the MS-DOS version of Emacs. - -** Makefile mode changes - -*** The mode now uses the abbrev table `makefile-mode-abbrev-table'. - -*** Conditionals and include statements are now highlighted when -Fontlock mode is active. - -** Isearch changes - -*** Isearch now puts a call to `isearch-resume' in the command history, -so that searches can be resumed. - -*** In Isearch mode, C-M-s and C-M-r are now bound like C-s and C-r, -respectively, i.e. you can repeat a regexp isearch with the same keys -that started the search. - -*** In Isearch mode, mouse-2 in the echo area now yanks the current -selection into the search string rather than giving an error. - -*** There is a new lazy highlighting feature in incremental search. - -Lazy highlighting is switched on/off by customizing variable -`isearch-lazy-highlight'. When active, all matches for the current -search string are highlighted. The current match is highlighted as -before using face `isearch' or `region'. All other matches are -highlighted using face `isearch-lazy-highlight-face' which defaults to -`secondary-selection'. - -The extra highlighting makes it easier to anticipate where the cursor -will end up each time you press C-s or C-r to repeat a pending search. -Highlighting of these additional matches happens in a deferred fashion -using "idle timers," so the cycles needed do not rob isearch of its -usual snappy response. - -If `isearch-lazy-highlight-cleanup' is set to t, highlights for -matches are automatically cleared when you end the search. If it is -set to nil, you can remove the highlights manually with `M-x -isearch-lazy-highlight-cleanup'. - -** VC Changes - -VC has been overhauled internally. It is now modular, making it -easier to plug-in arbitrary version control backends. (See Lisp -Changes for details on the new structure.) As a result, the mechanism -to enable and disable support for particular version systems has -changed: everything is now controlled by the new variable -`vc-handled-backends'. Its value is a list of symbols that identify -version systems; the default is '(RCS CVS SCCS). When finding a file, -each of the backends in that list is tried in order to see whether the -file is registered in that backend. - -When registering a new file, VC first tries each of the listed -backends to see if any of them considers itself "responsible" for the -directory of the file (e.g. because a corresponding subdirectory for -master files exists). If none of the backends is responsible, then -the first backend in the list that could register the file is chosen. -As a consequence, the variable `vc-default-back-end' is now obsolete. - -The old variable `vc-master-templates' is also obsolete, although VC -still supports it for backward compatibility. To define templates for -RCS or SCCS, you should rather use the new variables -vc-{rcs,sccs}-master-templates. (There is no such feature under CVS -where it doesn't make sense.) - -The variables `vc-ignore-vc-files' and `vc-handle-cvs' are also -obsolete now, you must set `vc-handled-backends' to nil or exclude -`CVS' from the list, respectively, to achieve their effect now. - -*** General Changes - -The variable `vc-checkout-carefully' is obsolete: the corresponding -checks are always done now. - -VC Dired buffers are now kept up-to-date during all version control -operations. - -`vc-diff' output is now displayed in `diff-mode'. -`vc-print-log' uses `log-view-mode'. -`vc-log-mode' (used for *VC-Log*) has been replaced by `log-edit-mode'. - -The command C-x v m (vc-merge) now accepts an empty argument as the -first revision number. This means that any recent changes on the -current branch should be picked up from the repository and merged into -the working file (``merge news''). - -The commands C-x v s (vc-create-snapshot) and C-x v r -(vc-retrieve-snapshot) now ask for a directory name from which to work -downwards. - -*** Multiple Backends - -VC now lets you register files in more than one backend. This is -useful, for example, if you are working with a slow remote CVS -repository. You can then use RCS for local editing, and occasionally -commit your changes back to CVS, or pick up changes from CVS into your -local RCS archives. - -To make this work, the ``more local'' backend (RCS in our example) -should come first in `vc-handled-backends', and the ``more remote'' -backend (CVS) should come later. (The default value of -`vc-handled-backends' already has it that way.) - -You can then commit changes to another backend (say, RCS), by typing -C-u C-x v v RCS RET (i.e. vc-next-action now accepts a backend name as -a revision number). VC registers the file in the more local backend -if that hasn't already happened, and commits to a branch based on the -current revision number from the more remote backend. - -If a file is registered in multiple backends, you can switch to -another one using C-x v b (vc-switch-backend). This does not change -any files, it only changes VC's perspective on the file. Use this to -pick up changes from CVS while working under RCS locally. - -After you are done with your local RCS editing, you can commit your -changes back to CVS using C-u C-x v v CVS RET. In this case, the -local RCS archive is removed after the commit, and the log entry -buffer is initialized to contain the entire RCS change log of the file. - -*** Changes for CVS - -There is a new user option, `vc-cvs-stay-local'. If it is `t' (the -default), then VC avoids network queries for files registered in -remote repositories. The state of such files is then only determined -by heuristics and past information. `vc-cvs-stay-local' can also be a -regexp to match against repository hostnames; only files from hosts -that match it are treated locally. If the variable is nil, then VC -queries the repository just as often as it does for local files. - -If `vc-cvs-stay-local' is on, then VC also makes local backups of -repository versions. This means that ordinary diffs (C-x v =) and -revert operations (C-x v u) can be done completely locally, without -any repository interactions at all. The name of a local version -backup of FILE is FILE.~REV.~, where REV is the repository version -number. This format is similar to that used by C-x v ~ -(vc-version-other-window), except for the trailing dot. As a matter -of fact, the two features can each use the files created by the other, -the only difference being that files with a trailing `.' are deleted -automatically after commit. (This feature doesn't work on MS-DOS, -since DOS disallows more than a single dot in the trunk of a file -name.) - -If `vc-cvs-stay-local' is on, and there have been changes in the -repository, VC notifies you about it when you actually try to commit. -If you want to check for updates from the repository without trying to -commit, you can either use C-x v m RET to perform an update on the -current file, or you can use C-x v r RET to get an update for an -entire directory tree. - -The new user option `vc-cvs-use-edit' indicates whether VC should call -"cvs edit" to make files writeable; it defaults to `t'. (This option -is only meaningful if the CVSREAD variable is set, or if files are -"watched" by other developers.) - -The commands C-x v s (vc-create-snapshot) and C-x v r -(vc-retrieve-snapshot) are now also implemented for CVS. If you give -an empty snapshot name to the latter, that performs a `cvs update', -starting at the given directory. - -*** Lisp Changes in VC - -VC has been restructured internally to make it modular. You can now -add support for arbitrary version control backends by writing a -library that provides a certain set of backend-specific functions, and -then telling VC to use that library. For example, to add support for -a version system named SYS, you write a library named vc-sys.el, which -provides a number of functions vc-sys-... (see commentary at the top -of vc.el for a detailed list of them). To make VC use that library, -you need to put it somewhere into Emacs' load path and add the symbol -`SYS' to the list `vc-handled-backends'. - -** The customizable EDT emulation package now supports the EDT -SUBS command and EDT scroll margins. It also works with more -terminal/keyboard configurations and it now works under XEmacs. -See etc/edt-user.doc for more information. - -** New modes and packages - -*** The new global minor mode `minibuffer-electric-default-mode' -automatically hides the `(default ...)' part of minibuffer prompts when -the default is not applicable. - -*** Artist is an Emacs lisp package that allows you to draw lines, -rectangles and ellipses by using your mouse and/or keyboard. The -shapes are made up with the ascii characters |, -, / and \. - -Features are: - -- Intersecting: When a `|' intersects with a `-', a `+' is - drawn, like this: | \ / - --+-- X - | / \ - -- Rubber-banding: When drawing lines you can interactively see the - result while holding the mouse button down and moving the mouse. If - your machine is not fast enough (a 386 is a bit too slow, but a - pentium is well enough), you can turn this feature off. You will - then see 1's and 2's which mark the 1st and 2nd endpoint of the line - you are drawing. - -- Arrows: After having drawn a (straight) line or a (straight) - poly-line, you can set arrows on the line-ends by typing < or >. - -- Flood-filling: You can fill any area with a certain character by - flood-filling. - -- Cut copy and paste: You can cut, copy and paste rectangular - regions. Artist also interfaces with the rect package (this can be - turned off if it causes you any trouble) so anything you cut in - artist can be yanked with C-x r y and vice versa. - -- Drawing with keys: Everything you can do with the mouse, you can - also do without the mouse. - -- Aspect-ratio: You can set the variable artist-aspect-ratio to - reflect the height-width ratio for the font you are using. Squares - and circles are then drawn square/round. Note, that once your - ascii-file is shown with font with a different height-width ratio, - the squares won't be square and the circles won't be round. - -- Drawing operations: The following drawing operations are implemented: - - lines straight-lines - rectangles squares - poly-lines straight poly-lines - ellipses circles - text (see-thru) text (overwrite) - spray-can setting size for spraying - vaporize line vaporize lines - erase characters erase rectangles - - Straight lines are lines that go horizontally, vertically or - diagonally. Plain lines go in any direction. The operations in - the right column are accessed by holding down the shift key while - drawing. - - It is possible to vaporize (erase) entire lines and connected lines - (rectangles for example) as long as the lines being vaporized are - straight and connected at their endpoints. Vaporizing is inspired - by the drawrect package by Jari Aalto . - -- Picture mode compatibility: Artist is picture mode compatible (this - can be turned off). - -*** The new package Eshell is an operating system command shell -implemented entirely in Emacs Lisp. Use `M-x eshell' to invoke it. -It functions similarly to bash and zsh, and allows running of Lisp -functions and external commands using the same syntax. It supports -history lists, aliases, extended globbing, smart scrolling, etc. It -will work on any platform Emacs has been ported to. And since most of -the basic commands -- ls, rm, mv, cp, ln, du, cat, etc. -- have been -rewritten in Lisp, it offers an operating-system independent shell, -all within the scope of your Emacs process. - -*** The new package timeclock.el is a mode is for keeping track of time -intervals. You can use it for whatever purpose you like, but the -typical scenario is to keep track of how much time you spend working -on certain projects. - -*** The new package hi-lock.el provides commands to highlight matches -of interactively entered regexps. For example, - - M-x highlight-regexp RET clearly RET RET - -will highlight all occurrences of `clearly' using a yellow background -face. New occurrences of `clearly' will be highlighted as they are -typed. `M-x unhighlight-regexp RET' will remove the highlighting. -Any existing face can be used for highlighting and a set of -appropriate faces is provided. The regexps can be written into the -current buffer in a form that will be recognized the next time the -corresponding file is read. There are commands to highlight matches -to phrases and to highlight entire lines containing a match. - -*** The new package zone.el plays games with Emacs' display when -Emacs is idle. - -*** The new package tildify.el allows to add hard spaces or other text -fragments in accordance with the current major mode. - -*** The new package xml.el provides a simple but generic XML -parser. It doesn't parse the DTDs however. - -*** The comment operations are now provided by the newcomment.el -package which allows different styles of comment-region and should -be more robust while offering the same functionality. -`comment-region' now doesn't always comment a-line-at-a-time, but only -comments the region, breaking the line at point if necessary. - -*** The Ebrowse package implements a C++ class browser and tags -facilities tailored for use with C++. It is documented in a -separate Texinfo file. - -*** The PCL-CVS package available by either running M-x cvs-examine or -by visiting a CVS administrative directory (with a prefix argument) -provides an alternative interface to VC-dired for CVS. It comes with -`log-view-mode' to view RCS and SCCS logs and `log-edit-mode' used to -enter check-in log messages. - -*** The new package called `woman' allows to browse Unix man pages -without invoking external programs. - -The command `M-x woman' formats manual pages entirely in Emacs Lisp -and then displays them, like `M-x manual-entry' does. Unlike -`manual-entry', `woman' does not invoke any external programs, so it -is useful on systems such as MS-DOS/MS-Windows where the `man' and -Groff or `troff' commands are not readily available. - -The command `M-x woman-find-file' asks for the file name of a man -page, then formats and displays it like `M-x woman' does. - -*** The new command M-x re-builder offers a convenient interface for -authoring regular expressions with immediate visual feedback. - -The buffer from which the command was called becomes the target for -the regexp editor popping up in a separate window. Matching text in -the target buffer is immediately color marked during the editing. -Each sub-expression of the regexp will show up in a different face so -even complex regexps can be edited and verified on target data in a -single step. - -On displays not supporting faces the matches instead blink like -matching parens to make them stand out. On such a setup you will -probably also want to use the sub-expression mode when the regexp -contains such to get feedback about their respective limits. - -*** glasses-mode is a minor mode that makes -unreadableIdentifiersLikeThis readable. It works as glasses, without -actually modifying content of a buffer. - -*** The package ebnf2ps translates an EBNF to a syntactic chart in -PostScript. - -Currently accepts ad-hoc EBNF, ISO EBNF and Bison/Yacc. - -The ad-hoc default EBNF syntax has the following elements: - - ; comment (until end of line) - A non-terminal - "C" terminal - ?C? special - $A default non-terminal - $"C" default terminal - $?C? default special - A = B. production (A is the header and B the body) - C D sequence (C occurs before D) - C | D alternative (C or D occurs) - A - B exception (A excluding B, B without any non-terminal) - n * A repetition (A repeats n (integer) times) - (C) group (expression C is grouped together) - [C] optional (C may or not occurs) - C+ one or more occurrences of C - {C}+ one or more occurrences of C - {C}* zero or more occurrences of C - {C} zero or more occurrences of C - C / D equivalent to: C {D C}* - {C || D}+ equivalent to: C {D C}* - {C || D}* equivalent to: [C {D C}*] - {C || D} equivalent to: [C {D C}*] - -Please, see ebnf2ps documentation for EBNF syntax and how to use it. - -*** The package align.el will align columns within a region, using M-x -align. Its mode-specific rules, based on regular expressions, -determine where the columns should be split. In C and C++, for -example, it will align variable names in declaration lists, or the -equal signs of assignments. - -*** `paragraph-indent-minor-mode' is a new minor mode supporting -paragraphs in the same style as `paragraph-indent-text-mode'. - -*** bs.el is a new package for buffer selection similar to -list-buffers or electric-buffer-list. Use M-x bs-show to display a -buffer menu with this package. See the Custom group `bs'. - -*** find-lisp.el is a package emulating the Unix find command in Lisp. - -*** calculator.el is a small calculator package that is intended to -replace desktop calculators such as xcalc and calc.exe. Actually, it -is not too small - it has more features than most desktop calculators, -and can be customized easily to get many more functions. It should -not be confused with "calc" which is a much bigger mathematical tool -which answers different needs. - -*** The minor modes cwarn-mode and global-cwarn-mode highlights -suspicious C and C++ constructions. Currently, assignments inside -expressions, semicolon following `if', `for' and `while' (except, of -course, after a `do .. while' statement), and C++ functions with -reference parameters are recognized. The modes require font-lock mode -to be enabled. - -*** smerge-mode.el provides `smerge-mode', a simple minor-mode for files -containing diff3-style conflict markers, such as generated by RCS. - -*** 5x5.el is a simple puzzle game. - -*** hl-line.el provides `hl-line-mode', a minor mode to highlight the -current line in the current buffer. It also provides -`global-hl-line-mode' to provide the same behavior in all buffers. - -*** ansi-color.el translates ANSI terminal escapes into text-properties. - -Please note: if `ansi-color-for-comint-mode' and -`global-font-lock-mode' are non-nil, loading ansi-color.el will -disable font-lock and add `ansi-color-apply' to -`comint-preoutput-filter-functions' for all shell-mode buffers. This -displays the output of "ls --color=yes" using the correct foreground -and background colors. - -*** delphi.el provides a major mode for editing the Delphi (Object -Pascal) language. - -*** quickurl.el provides a simple method of inserting a URL based on -the text at point. - -*** sql.el provides an interface to SQL data bases. - -*** fortune.el uses the fortune program to create mail/news signatures. - -*** whitespace.el is a package for warning about and cleaning bogus -whitespace in a file. - -*** PostScript mode (ps-mode) is a new major mode for editing PostScript -files. It offers: interaction with a PostScript interpreter, including -(very basic) error handling; fontification, easily customizable for -interpreter messages; auto-indentation; insertion of EPSF templates and -often used code snippets; viewing of BoundingBox; commenting out / -uncommenting regions; conversion of 8bit characters to PostScript octal -codes. All functionality is accessible through a menu. - -*** delim-col helps to prettify columns in a text region or rectangle. - -Here is an example of columns: - -horse apple bus -dog pineapple car EXTRA -porcupine strawberry airplane - -Doing the following settings: - - (setq delimit-columns-str-before "[ ") - (setq delimit-columns-str-after " ]") - (setq delimit-columns-str-separator ", ") - (setq delimit-columns-separator "\t") - - -Selecting the lines above and typing: - - M-x delimit-columns-region - -It results: - -[ horse , apple , bus , ] -[ dog , pineapple , car , EXTRA ] -[ porcupine, strawberry, airplane, ] - -delim-col has the following options: - - delimit-columns-str-before Specify a string to be inserted - before all columns. - - delimit-columns-str-separator Specify a string to be inserted - between each column. - - delimit-columns-str-after Specify a string to be inserted - after all columns. - - delimit-columns-separator Specify a regexp which separates - each column. - -delim-col has the following commands: - - delimit-columns-region Prettify all columns in a text region. - delimit-columns-rectangle Prettify all columns in a text rectangle. - -*** Recentf mode maintains a menu for visiting files that were -operated on recently. User option recentf-menu-filter specifies a -menu filter function to change the menu appearance. For example, the -recent file list can be displayed: - -- organized by major modes, directories or user defined rules. -- sorted by file paths, file names, ascending or descending. -- showing paths relative to the current default-directory - -The `recentf-filter-changer' menu filter function allows to -dynamically change the menu appearance. - -*** elide-head.el provides a mechanism for eliding boilerplate header -text. - -*** footnote.el provides `footnote-mode', a minor mode supporting use -of footnotes. It is intended for use with Message mode, but isn't -specific to Message mode. - -*** diff-mode.el provides `diff-mode', a major mode for -viewing/editing context diffs (patches). It is selected for files -with extension `.diff', `.diffs', `.patch' and `.rej'. - -*** EUDC, the Emacs Unified Directory Client, provides a common user -interface to access directory servers using different directory -protocols. It has a separate manual. - -*** autoconf.el provides a major mode for editing configure.in files -for Autoconf, selected automatically. - -*** windmove.el provides moving between windows. - -*** crm.el provides a facility to read multiple strings from the -minibuffer with completion. - -*** todo-mode.el provides management of TODO lists and integration -with the diary features. - -*** autoarg.el provides a feature reported from Twenex Emacs whereby -numeric keys supply prefix args rather than self inserting. - -*** The function `turn-off-auto-fill' unconditionally turns off Auto -Fill mode. - -*** pcomplete.el is a library that provides programmable completion -facilities for Emacs, similar to what zsh and tcsh offer. The main -difference is that completion functions are written in Lisp, meaning -they can be profiled, debugged, etc. - -*** antlr-mode is a new major mode for editing ANTLR grammar files. -It is automatically turned on for files whose names have the extension -`.g'. - -** Changes in sort.el - -The function sort-numeric-fields interprets numbers starting with `0' -as octal and numbers starting with `0x' or `0X' as hexadecimal. The -new user-option sort-numeric-base can be used to specify a default -numeric base. - -** Changes to Ange-ftp - -*** Ange-ftp allows you to specify of a port number in remote file -names cleanly. It is appended to the host name, separated by a hash -sign, e.g. `/foo@bar.org#666:mumble'. (This syntax comes from EFS.) - -*** If the new user-option `ange-ftp-try-passive-mode' is set, passive -ftp mode will be used if the ftp client supports that. - -*** Ange-ftp handles the output of the w32-style clients which -output ^M at the end of lines. - -** The recommended way of using Iswitchb is via the new global minor -mode `iswitchb-mode'. - -** Just loading the msb package doesn't switch on Msb mode anymore. -If you have `(require 'msb)' in your .emacs, please replace it with -`(msb-mode 1)'. - -** Flyspell mode has various new options. See the `flyspell' Custom -group. - -** The user option `backward-delete-char-untabify-method' controls the -behavior of `backward-delete-char-untabify'. The following values -are recognized: - -`untabify' -- turn a tab to many spaces, then delete one space; -`hungry' -- delete all whitespace, both tabs and spaces; -`all' -- delete all whitespace, including tabs, spaces and newlines; -nil -- just delete one character. - -Default value is `untabify'. - -[This change was made in Emacs 20.3 but not mentioned then.] - -** In Cperl mode `cperl-invalid-face' should now be a normal face -symbol, not double-quoted. - -** Some packages are declared obsolete, to be removed in a future -version. They are: auto-show, c-mode, hilit19, hscroll, ooutline, -profile, rnews, rnewspost, and sc. Their implementations have been -moved to lisp/obsolete. - -** auto-compression mode is no longer enabled just by loading jka-compr.el. -To control it, set `auto-compression-mode' via Custom or use the -`auto-compression-mode' command. - -** `browse-url-gnome-moz' is a new option for -`browse-url-browser-function', invoking Mozilla in GNOME, and -`browse-url-kde' can be chosen for invoking the KDE browser. - -** The user-option `browse-url-new-window-p' has been renamed to -`browse-url-new-window-flag'. - -** The functions `keep-lines', `flush-lines' and `how-many' now -operate on the active region in Transient Mark mode. - -** `gnus-user-agent' is a new possibility for `mail-user-agent'. It -is like `message-user-agent', but with all the Gnus paraphernalia. - -** The Strokes package has been updated. If your Emacs has XPM -support, you can use it for pictographic editing. In Strokes mode, -use C-mouse-2 to compose a complex stoke and insert it into the -buffer. You can encode or decode a strokes buffer with new commands -M-x strokes-encode-buffer and M-x strokes-decode-buffer. There is a -new command M-x strokes-list-strokes. - -** Hexl contains a new command `hexl-insert-hex-string' which inserts -a string of hexadecimal numbers read from the mini-buffer. - -** Hexl mode allows to insert non-ASCII characters. - -The non-ASCII characters are encoded using the same encoding as the -file you are visiting in Hexl mode. - -** Shell script mode changes. - -Shell script mode (sh-script) can now indent scripts for shells -derived from sh and rc. The indentation style is customizable, and -sh-script can attempt to "learn" the current buffer's style. - -** Etags changes. - -*** In DOS, etags looks for file.cgz if it cannot find file.c. - -*** New option --ignore-case-regex is an alternative to --regex. It is now -possible to bind a regexp to a language, by prepending the regexp with -{lang}, where lang is one of the languages that `etags --help' prints out. -This feature is useful especially for regex files, where each line contains -a regular expression. The manual contains details. - -*** In C and derived languages, etags creates tags for function -declarations when given the --declarations option. - -*** In C++, tags are created for "operator". The tags have the form -"operator+", without spaces between the keyword and the operator. - -*** You shouldn't generally need any more the -C or -c++ option: etags -automatically switches to C++ parsing when it meets the `class' or -`template' keywords. - -*** Etags now is able to delve at arbitrary deeps into nested structures in -C-like languages. Previously, it was limited to one or two brace levels. - -*** New language Ada: tags are functions, procedures, packages, tasks, and -types. - -*** In Fortran, `procedure' is not tagged. - -*** In Java, tags are created for "interface". - -*** In Lisp, "(defstruct (foo", "(defun (operator" and similar constructs -are now tagged. - -*** In makefiles, tags the targets. - -*** In Perl, the --globals option tags global variables. my and local -variables are tagged. - -*** New language Python: def and class at the beginning of a line are tags. - -*** .ss files are Scheme files, .pdb is Postscript with C syntax, .psw is -for PSWrap. - -** Changes in etags.el - -*** The new user-option tags-case-fold-search can be used to make -tags operations case-sensitive or case-insensitive. The default -is to use the same setting as case-fold-search. - -*** You can display additional output with M-x tags-apropos by setting -the new variable tags-apropos-additional-actions. - -If non-nil, the variable's value should be a list of triples (TITLE -FUNCTION TO-SEARCH). For each triple, M-x tags-apropos processes -TO-SEARCH and lists tags from it. TO-SEARCH should be an alist, -obarray, or symbol. If it is a symbol, the symbol's value is used. - -TITLE is a string to use to label the list of tags from TO-SEARCH. - -FUNCTION is a function to call when an entry is selected in the Tags -List buffer. It is called with one argument, the selected symbol. - -A useful example value for this variable might be something like: - - '(("Emacs Lisp" Info-goto-emacs-command-node obarray) - ("Common Lisp" common-lisp-hyperspec common-lisp-hyperspec-obarray) - ("SCWM" scwm-documentation scwm-obarray)) - -*** The face tags-tag-face can be used to customize the appearance -of tags in the output of M-x tags-apropos. - -*** Setting tags-apropos-verbose to a non-nil value displays the -names of tags files in the *Tags List* buffer. - -*** You can now search for tags that are part of the filename itself. -If you have tagged the files topfile.c subdir/subfile.c -/tmp/tempfile.c, you can now search for tags "topfile.c", "subfile.c", -"dir/sub", "tempfile", "tempfile.c". If the tag matches the file name, -point will go to the beginning of the file. - -*** Compressed files are now transparently supported if -auto-compression-mode is active. You can tag (with Etags) and search -(with find-tag) both compressed and uncompressed files. - -*** Tags commands like M-x tags-search no longer change point -in buffers where no match is found. In buffers where a match is -found, the original value of point is pushed on the marker ring. - -** Fortran mode has a new command `fortran-strip-sequence-nos' to -remove text past column 72. The syntax class of `\' in Fortran is now -appropriate for C-style escape sequences in strings. - -** SGML mode's default `sgml-validate-command' is now `nsgmls'. - -** A new command `view-emacs-problems' (C-h P) displays the PROBLEMS file. - -** The Dabbrev package has a new user-option `dabbrev-ignored-regexps' -containing a list of regular expressions. Buffers matching a regular -expression from that list, are not checked. - -** Emacs can now figure out modification times of remote files. -When you do C-x C-f /user@host:/path/file RET and edit the file, -and someone else modifies the file, you will be prompted to revert -the buffer, just like for the local files. - -** The buffer menu (C-x C-b) no longer lists the *Buffer List* buffer. - -** When invoked with a prefix argument, the command `list-abbrevs' now -displays local abbrevs, only. - -** Refill minor mode provides preliminary support for keeping -paragraphs filled as you modify them. - -** The variable `double-click-fuzz' specifies how much the mouse -may be moved between clicks that are recognized as a pair. Its value -is measured in pixels. - -** The new global minor mode `auto-image-file-mode' allows image files -to be visited as images. - -** Two new user-options `grep-command' and `grep-find-command' -were added to compile.el. - -** Withdrawn packages - -*** mldrag.el has been removed. mouse.el provides the same -functionality with aliases for the mldrag functions. - -*** eval-reg.el has been obsoleted by changes to edebug.el and removed. - -*** ph.el has been obsoleted by EUDC and removed. - - -* Incompatible Lisp changes - -There are a few Lisp changes which are not backwards-compatible and -may require changes to existing code. Here is a list for reference. -See the sections below for details. - -** Since `format' preserves text properties, the idiom -`(format "%s" foo)' no longer works to copy and remove properties. -Use `copy-sequence' to copy the string, then use `set-text-properties' -to remove the properties of the copy. - -** Since the `keymap' text property now has significance, some code -which uses both `local-map' and `keymap' properties (for portability) -may, for instance, give rise to duplicate menus when the keymaps from -these properties are active. - -** The change in the treatment of non-ASCII characters in search -ranges may affect some code. - -** A non-nil value for the LOCAL arg of add-hook makes the hook -buffer-local even if `make-local-hook' hasn't been called, which might -make a difference to some code. - -** The new treatment of the minibuffer prompt might affect code which -operates on the minibuffer. - -** The new character sets `eight-bit-control' and `eight-bit-graphic' -cause `no-conversion' and `emacs-mule-unix' coding systems to produce -different results when reading files with non-ASCII characters -(previously, both coding systems would produce the same results). -Specifically, `no-conversion' interprets each 8-bit byte as a separate -character. This makes `no-conversion' inappropriate for reading -multibyte text, e.g. buffers written to disk in their internal MULE -encoding (auto-saving does that, for example). If a Lisp program -reads such files with `no-conversion', each byte of the multibyte -sequence, including the MULE leading codes such as \201, is treated as -a separate character, which prevents them from being interpreted in -the buffer as multibyte characters. - -Therefore, Lisp programs that read files which contain the internal -MULE encoding should use `emacs-mule-unix'. `no-conversion' is only -appropriate for reading truly binary files. - -** Code that relies on the obsolete `before-change-function' and -`after-change-function' to detect buffer changes will now fail. Use -`before-change-functions' and `after-change-functions' instead. - -** Code that uses `concat' with integer args now gets an error, as -long promised. So does any code that uses derivatives of `concat', -such as `mapconcat'. - -** The function base64-decode-string now always returns a unibyte -string. - -** Not a Lisp incompatibility as such but, with the introduction of -extra private charsets, there is now only one slot free for a new -dimension-2 private charset. User code which tries to add more than -one extra will fail unless you rebuild Emacs with some standard -charset(s) removed; that is probably inadvisable because it changes -the emacs-mule encoding. Also, files stored in the emacs-mule -encoding using Emacs 20 with additional private charsets defined will -probably not be read correctly by Emacs 21. - -** The variable `directory-sep-char' is slated for removal. -Not really a change (yet), but a projected one that you should be -aware of: The variable `directory-sep-char' is deprecated, and should -not be used. It was always ignored on GNU/Linux and Unix systems and -on MS-DOS, but the MS-Windows port tried to support it by adapting the -behavior of certain primitives to the value of this variable. It -turned out that such support cannot be reliable, so it was decided to -remove this variable in the near future. Lisp programs are well -advised not to set it to anything but '/', because any different value -will not have any effect when support for this variable is removed. - - -* Lisp changes made after edition 2.6 of the Emacs Lisp Manual, -(Display-related features are described in a page of their own below.) - -** Function assq-delete-all replaces function assoc-delete-all. - -** The new function animate-string, from lisp/play/animate.el -allows the animated display of strings. - -** The new function `interactive-form' can be used to obtain the -interactive form of a function. - -** The keyword :set-after in defcustom allows to specify dependencies -between custom options. Example: - - (defcustom default-input-method nil - "*Default input method for multilingual text (a string). - This is the input method activated automatically by the command - `toggle-input-method' (\\[toggle-input-method])." - :group 'mule - :type '(choice (const nil) string) - :set-after '(current-language-environment)) - -This specifies that default-input-method should be set after -current-language-environment even if default-input-method appears -first in a custom-set-variables statement. - -** The new hook `kbd-macro-termination-hook' is run at the end of -function execute-kbd-macro. Functions on this hook are called with no -args. The hook is run independent of how the macro was terminated -(signal or normal termination). - -** Functions `butlast' and `nbutlast' for removing trailing elements -from a list are now available without requiring the CL package. - -** The new user-option `even-window-heights' can be set to nil -to prevent `display-buffer' from evening out window heights. - -** The user-option `face-font-registry-alternatives' specifies -alternative font registry names to try when looking for a font. - -** Function `md5' calculates the MD5 "message digest"/"checksum". - -** Function `delete-frame' runs `delete-frame-hook' before actually -deleting the frame. The hook is called with one arg, the frame -being deleted. - -** `add-hook' now makes the hook local if called with a non-nil LOCAL arg. - -** The treatment of non-ASCII characters in search ranges has changed. -If a range in a regular expression or the arg of -skip-chars-forward/backward starts with a unibyte character C and ends -with a multibyte character C2, the range is divided into two: one is -C..?\377, the other is C1..C2, where C1 is the first character of C2's -charset. - -** The new function `display-message-or-buffer' displays a message in -the echo area or pops up a buffer, depending on the length of the -message. - -** The new macro `with-auto-compression-mode' allows evaluating an -expression with auto-compression-mode enabled. - -** In image specifications, `:heuristic-mask' has been replaced -with the more general `:mask' property. - -** Image specifications accept more `:conversion's. - -** A `?' can be used in a symbol name without escaping it with a -backslash. - -** Reading from the mini-buffer now reads from standard input if Emacs -is running in batch mode. For example, - - (message "%s" (read t)) - -will read a Lisp expression from standard input and print the result -to standard output. - -** The argument of `down-list', `backward-up-list', `up-list', -`kill-sexp', `backward-kill-sexp' and `mark-sexp' is now optional. - -** If `display-buffer-reuse-frames' is set, function `display-buffer' -will raise frames displaying a buffer, instead of creating a new -frame or window. - -** Two new functions for removing elements from lists/sequences -were added - -- Function: remove ELT SEQ - -Return a copy of SEQ with all occurrences of ELT removed. SEQ must be -a list, vector, or string. The comparison is done with `equal'. - -- Function: remq ELT LIST - -Return a copy of LIST with all occurrences of ELT removed. The -comparison is done with `eq'. - -** The function `delete' now also works with vectors and strings. - -** The meaning of the `:weakness WEAK' argument of make-hash-table -has been changed: WEAK can now have new values `key-or-value' and -`key-and-value', in addition to `nil', `key', `value', and `t'. - -** Function `aset' stores any multibyte character in any string -without signaling "Attempt to change char length of a string". It may -convert a unibyte string to multibyte if necessary. - -** The value of the `help-echo' text property is called as a function -or evaluated, if it is not a string already, to obtain a help string. - -** Function `make-obsolete' now has an optional arg to say when the -function was declared obsolete. - -** Function `plist-member' is renamed from `widget-plist-member' (which is -retained as an alias). - -** Easy-menu's :filter now takes the unconverted form of the menu and -the result is automatically converted to Emacs' form. - -** The new function `window-list' has been defined - -- Function: window-list &optional FRAME WINDOW MINIBUF - -Return a list of windows on FRAME, starting with WINDOW. FRAME nil or -omitted means use the selected frame. WINDOW nil or omitted means use -the selected window. MINIBUF t means include the minibuffer window, -even if it isn't active. MINIBUF nil or omitted means include the -minibuffer window only if it's active. MINIBUF neither nil nor t -means never include the minibuffer window. - -** There's a new function `get-window-with-predicate' defined as follows - -- Function: get-window-with-predicate PREDICATE &optional MINIBUF ALL-FRAMES DEFAULT - -Return a window satisfying PREDICATE. - -This function cycles through all visible windows using `walk-windows', -calling PREDICATE on each one. PREDICATE is called with a window as -argument. The first window for which PREDICATE returns a non-nil -value is returned. If no window satisfies PREDICATE, DEFAULT is -returned. - -Optional second arg MINIBUF t means count the minibuffer window even -if not active. MINIBUF nil or omitted means count the minibuffer iff -it is active. MINIBUF neither t nor nil means not to count the -minibuffer even if it is active. - -Several frames may share a single minibuffer; if the minibuffer -counts, all windows on all frames that share that minibuffer count -too. Therefore, if you are using a separate minibuffer frame -and the minibuffer is active and MINIBUF says it counts, -`walk-windows' includes the windows in the frame from which you -entered the minibuffer, as well as the minibuffer window. - -ALL-FRAMES is the optional third argument. -ALL-FRAMES nil or omitted means cycle within the frames as specified above. -ALL-FRAMES = `visible' means include windows on all visible frames. -ALL-FRAMES = 0 means include windows on all visible and iconified frames. -ALL-FRAMES = t means include windows on all frames including invisible frames. -If ALL-FRAMES is a frame, it means include windows on that frame. -Anything else means restrict to the selected frame. - -** The function `single-key-description' now encloses function key and -event names in angle brackets. When called with a second optional -argument non-nil, angle brackets won't be printed. - -** If the variable `message-truncate-lines' is bound to t around a -call to `message', the echo area will not be resized to display that -message; it will be truncated instead, as it was done in 20.x. -Default value is nil. - -** The user option `line-number-display-limit' can now be set to nil, -meaning no limit. - -** The new user option `line-number-display-limit-width' controls -the maximum width of lines in a buffer for which Emacs displays line -numbers in the mode line. The default is 200. - -** `select-safe-coding-system' now also checks the most preferred -coding-system if buffer-file-coding-system is `undecided' and -DEFAULT-CODING-SYSTEM is not specified, - -** The function `subr-arity' provides information about the argument -list of a primitive. - -** `where-is-internal' now also accepts a list of keymaps. - -** The text property `keymap' specifies a key map which overrides the -buffer's local map and the map specified by the `local-map' property. -This is probably what most current uses of `local-map' want, rather -than replacing the local map. - -** The obsolete variables `before-change-function' and -`after-change-function' are no longer acted upon and have been -removed. Use `before-change-functions' and `after-change-functions' -instead. - -** The function `apropos-mode' runs the hook `apropos-mode-hook'. - -** `concat' no longer accepts individual integer arguments, -as promised long ago. - -** The new function `float-time' returns the current time as a float. - -** The new variable auto-coding-regexp-alist specifies coding systems -for reading specific files, analogous to auto-coding-alist, but -patterns are checked against file contents instead of file names. - - -* Lisp changes in Emacs 21.1 (see following page for display-related features) - -** The new package rx.el provides an alternative sexp notation for -regular expressions. - -- Function: rx-to-string SEXP - -Translate SEXP into a regular expression in string notation. - -- Macro: rx SEXP - -Translate SEXP into a regular expression in string notation. - -The following are valid subforms of regular expressions in sexp -notation. - -STRING - matches string STRING literally. - -CHAR - matches character CHAR literally. - -`not-newline' - matches any character except a newline. - . -`anything' - matches any character - -`(any SET)' - matches any character in SET. SET may be a character or string. - Ranges of characters can be specified as `A-Z' in strings. - -'(in SET)' - like `any'. - -`(not (any SET))' - matches any character not in SET - -`line-start' - matches the empty string, but only at the beginning of a line - in the text being matched - -`line-end' - is similar to `line-start' but matches only at the end of a line - -`string-start' - matches the empty string, but only at the beginning of the - string being matched against. - -`string-end' - matches the empty string, but only at the end of the - string being matched against. - -`buffer-start' - matches the empty string, but only at the beginning of the - buffer being matched against. - -`buffer-end' - matches the empty string, but only at the end of the - buffer being matched against. - -`point' - matches the empty string, but only at point. - -`word-start' - matches the empty string, but only at the beginning or end of a - word. - -`word-end' - matches the empty string, but only at the end of a word. - -`word-boundary' - matches the empty string, but only at the beginning or end of a - word. - -`(not word-boundary)' - matches the empty string, but not at the beginning or end of a - word. - -`digit' - matches 0 through 9. - -`control' - matches ASCII control characters. - -`hex-digit' - matches 0 through 9, a through f and A through F. - -`blank' - matches space and tab only. - -`graphic' - matches graphic characters--everything except ASCII control chars, - space, and DEL. - -`printing' - matches printing characters--everything except ASCII control chars - and DEL. - -`alphanumeric' - matches letters and digits. (But at present, for multibyte characters, - it matches anything that has word syntax.) - -`letter' - matches letters. (But at present, for multibyte characters, - it matches anything that has word syntax.) - -`ascii' - matches ASCII (unibyte) characters. - -`nonascii' - matches non-ASCII (multibyte) characters. - -`lower' - matches anything lower-case. - -`upper' - matches anything upper-case. - -`punctuation' - matches punctuation. (But at present, for multibyte characters, - it matches anything that has non-word syntax.) - -`space' - matches anything that has whitespace syntax. - -`word' - matches anything that has word syntax. - -`(syntax SYNTAX)' - matches a character with syntax SYNTAX. SYNTAX must be one - of the following symbols. - - `whitespace' (\\s- in string notation) - `punctuation' (\\s.) - `word' (\\sw) - `symbol' (\\s_) - `open-parenthesis' (\\s() - `close-parenthesis' (\\s)) - `expression-prefix' (\\s') - `string-quote' (\\s\") - `paired-delimiter' (\\s$) - `escape' (\\s\\) - `character-quote' (\\s/) - `comment-start' (\\s<) - `comment-end' (\\s>) - -`(not (syntax SYNTAX))' - matches a character that has not syntax SYNTAX. - -`(category CATEGORY)' - matches a character with category CATEGORY. CATEGORY must be - either a character to use for C, or one of the following symbols. - - `consonant' (\\c0 in string notation) - `base-vowel' (\\c1) - `upper-diacritical-mark' (\\c2) - `lower-diacritical-mark' (\\c3) - `tone-mark' (\\c4) - `symbol' (\\c5) - `digit' (\\c6) - `vowel-modifying-diacritical-mark' (\\c7) - `vowel-sign' (\\c8) - `semivowel-lower' (\\c9) - `not-at-end-of-line' (\\c<) - `not-at-beginning-of-line' (\\c>) - `alpha-numeric-two-byte' (\\cA) - `chinse-two-byte' (\\cC) - `greek-two-byte' (\\cG) - `japanese-hiragana-two-byte' (\\cH) - `indian-two-byte' (\\cI) - `japanese-katakana-two-byte' (\\cK) - `korean-hangul-two-byte' (\\cN) - `cyrillic-two-byte' (\\cY) - `ascii' (\\ca) - `arabic' (\\cb) - `chinese' (\\cc) - `ethiopic' (\\ce) - `greek' (\\cg) - `korean' (\\ch) - `indian' (\\ci) - `japanese' (\\cj) - `japanese-katakana' (\\ck) - `latin' (\\cl) - `lao' (\\co) - `tibetan' (\\cq) - `japanese-roman' (\\cr) - `thai' (\\ct) - `vietnamese' (\\cv) - `hebrew' (\\cw) - `cyrillic' (\\cy) - `can-break' (\\c|) - -`(not (category CATEGORY))' - matches a character that has not category CATEGORY. - -`(and SEXP1 SEXP2 ...)' - matches what SEXP1 matches, followed by what SEXP2 matches, etc. - -`(submatch SEXP1 SEXP2 ...)' - like `and', but makes the match accessible with `match-end', - `match-beginning', and `match-string'. - -`(group SEXP1 SEXP2 ...)' - another name for `submatch'. - -`(or SEXP1 SEXP2 ...)' - matches anything that matches SEXP1 or SEXP2, etc. If all - args are strings, use `regexp-opt' to optimize the resulting - regular expression. - -`(minimal-match SEXP)' - produce a non-greedy regexp for SEXP. Normally, regexps matching - zero or more occurrences of something are \"greedy\" in that they - match as much as they can, as long as the overall regexp can - still match. A non-greedy regexp matches as little as possible. - -`(maximal-match SEXP)' - produce a greedy regexp for SEXP. This is the default. - -`(zero-or-more SEXP)' - matches zero or more occurrences of what SEXP matches. - -`(0+ SEXP)' - like `zero-or-more'. - -`(* SEXP)' - like `zero-or-more', but always produces a greedy regexp. - -`(*? SEXP)' - like `zero-or-more', but always produces a non-greedy regexp. - -`(one-or-more SEXP)' - matches one or more occurrences of A. - -`(1+ SEXP)' - like `one-or-more'. - -`(+ SEXP)' - like `one-or-more', but always produces a greedy regexp. - -`(+? SEXP)' - like `one-or-more', but always produces a non-greedy regexp. - -`(zero-or-one SEXP)' - matches zero or one occurrences of A. - -`(optional SEXP)' - like `zero-or-one'. - -`(? SEXP)' - like `zero-or-one', but always produces a greedy regexp. - -`(?? SEXP)' - like `zero-or-one', but always produces a non-greedy regexp. - -`(repeat N SEXP)' - matches N occurrences of what SEXP matches. - -`(repeat N M SEXP)' - matches N to M occurrences of what SEXP matches. - -`(eval FORM)' - evaluate FORM and insert result. If result is a string, - `regexp-quote' it. - -`(regexp REGEXP)' - include REGEXP in string notation in the result. - -*** The features `md5' and `overlay' are now provided by default. - -*** The special form `save-restriction' now works correctly even if the -buffer is widened inside the save-restriction and changes made outside -the original restriction. Previously, doing this would cause the saved -restriction to be restored incorrectly. - -*** The functions `find-charset-region' and `find-charset-string' include -`eight-bit-control' and/or `eight-bit-graphic' in the returned list -when they find 8-bit characters. Previously, they included `ascii' in a -multibyte buffer and `unknown' in a unibyte buffer. - -*** The functions `set-buffer-multibyte', `string-as-multibyte' and -`string-as-unibyte' change the byte sequence of a buffer or a string -if it contains a character from the `eight-bit-control' character set. - -*** The handling of multibyte sequences in a multibyte buffer is -changed. Previously, a byte sequence matching the pattern -[\200-\237][\240-\377]+ was interpreted as a single character -regardless of the length of the trailing bytes [\240-\377]+. Thus, if -the sequence was longer than what the leading byte indicated, the -extra trailing bytes were ignored by Lisp functions. Now such extra -bytes are independent 8-bit characters belonging to the charset -eight-bit-graphic. - -** Fontsets are now implemented using char-tables. - -A fontset can now be specified for each independent character, for -a group of characters or for a character set rather than just for a -character set as previously. - -*** The arguments of the function `set-fontset-font' are changed. -They are NAME, CHARACTER, FONTNAME, and optional FRAME. The function -modifies fontset NAME to use FONTNAME for CHARACTER. - -CHARACTER may be a cons (FROM . TO), where FROM and TO are non-generic -characters. In that case FONTNAME is used for all characters in the -range FROM and TO (inclusive). CHARACTER may be a charset. In that -case FONTNAME is used for all character in the charset. - -FONTNAME may be a cons (FAMILY . REGISTRY), where FAMILY is the family -name of a font and REGISTRY is a registry name of a font. - -*** Variable x-charset-registry has been deleted. The default charset -registries of character sets are set in the default fontset -"fontset-default". - -*** The function `create-fontset-from-fontset-spec' ignores the second -argument STYLE-VARIANT. It never creates style-variant fontsets. - -** The method of composing characters is changed. Now character -composition is done by a special text property `composition' in -buffers and strings. - -*** Charset composition is deleted. Emacs never creates a `composite -character' which is an independent character with a unique character -code. Thus the following functions handling `composite characters' -have been deleted: composite-char-component, -composite-char-component-count, composite-char-composition-rule, -composite-char-composition-rule and decompose-composite-char delete. -The variables leading-code-composition and min-composite-char have -also been deleted. - -*** Three more glyph reference points are added. They can be used to -specify a composition rule. See the documentation of the variable -`reference-point-alist' for more detail. - -*** The function `compose-region' takes new arguments COMPONENTS and -MODIFICATION-FUNC. With COMPONENTS, you can specify not only a -composition rule but also characters to be composed. Such characters -may differ between buffer and string text. - -*** The function `compose-string' takes new arguments START, END, -COMPONENTS, and MODIFICATION-FUNC. - -*** The function `compose-string' puts text property `composition' -directly on the argument STRING instead of returning a new string. -Likewise, the function `decompose-string' just removes text property -`composition' from STRING. - -*** The new function `find-composition' returns information about -a composition at a specified position in a buffer or a string. - -*** The function `decompose-composite-char' is now labeled as -obsolete. - -** The new coding system `mac-roman' is primarily intended for use on -the Macintosh but may be used generally for Macintosh-encoded text. - -** The new character sets `mule-unicode-0100-24ff', -`mule-unicode-2500-33ff', and `mule-unicode-e000-ffff' have been -introduced for Unicode characters in the range U+0100..U+24FF, -U+2500..U+33FF, U+E000..U+FFFF respectively. - -Note that the character sets are not yet unified in Emacs, so -characters which belong to charsets such as Latin-2, Greek, Hebrew, -etc. and the same characters in the `mule-unicode-*' charsets are -different characters, as far as Emacs is concerned. For example, text -which includes Unicode characters from the Latin-2 locale cannot be -encoded by Emacs with ISO 8859-2 coding system. - -** The new coding system `mule-utf-8' has been added. -It provides limited support for decoding/encoding UTF-8 text. For -details, please see the documentation string of this coding system. - -** The new character sets `japanese-jisx0213-1' and -`japanese-jisx0213-2' have been introduced for the new Japanese -standard JIS X 0213 Plane 1 and Plane 2. - -** The new character sets `latin-iso8859-14' and `latin-iso8859-15' -have been introduced. - -** The new character sets `eight-bit-control' and `eight-bit-graphic' -have been introduced for 8-bit characters in the ranges 0x80..0x9F and -0xA0..0xFF respectively. Note that the multibyte representation of -eight-bit-control is never exposed; this leads to an exception in the -emacs-mule coding system, which encodes everything else to the -buffer/string internal representation. Note that to search for -eight-bit-graphic characters in a multibyte buffer, the search string -must be multibyte, otherwise such characters will be converted to -their multibyte equivalent. - -** If the APPEND argument of `write-region' is an integer, it seeks to -that offset in the file before writing. - -** The function `add-minor-mode' has been added for convenience and -compatibility with XEmacs (and is used internally by define-minor-mode). - -** The function `shell-command' now sets the default directory of the -`*Shell Command Output*' buffer to the default directory of the buffer -from which the command was issued. - -** The functions `query-replace', `query-replace-regexp', -`query-replace-regexp-eval' `map-query-replace-regexp', -`replace-string', `replace-regexp', and `perform-replace' take two -additional optional arguments START and END that specify the region to -operate on. - -** The new function `count-screen-lines' is a more flexible alternative -to `window-buffer-height'. - -- Function: count-screen-lines &optional BEG END COUNT-FINAL-NEWLINE WINDOW - -Return the number of screen lines in the region between BEG and END. -The number of screen lines may be different from the number of actual -lines, due to line breaking, display table, etc. - -Optional arguments BEG and END default to `point-min' and `point-max' -respectively. - -If region ends with a newline, ignore it unless optional third argument -COUNT-FINAL-NEWLINE is non-nil. - -The optional fourth argument WINDOW specifies the window used for -obtaining parameters such as width, horizontal scrolling, and so -on. The default is to use the selected window's parameters. - -Like `vertical-motion', `count-screen-lines' always uses the current -buffer, regardless of which buffer is displayed in WINDOW. This makes -possible to use `count-screen-lines' in any buffer, whether or not it -is currently displayed in some window. - -** The new function `mapc' is like `mapcar' but doesn't collect the -argument function's results. - -** The functions base64-decode-region and base64-decode-string now -signal an error instead of returning nil if decoding fails. Also, -`base64-decode-string' now always returns a unibyte string (in Emacs -20, it returned a multibyte string when the result was a valid multibyte -sequence). - -** The function sendmail-user-agent-compose now recognizes a `body' -header in the list of headers passed to it. - -** The new function member-ignore-case works like `member', but -ignores differences in case and text representation. - -** The buffer-local variable cursor-type can be used to specify the -cursor to use in windows displaying a buffer. Values are interpreted -as follows: - - t use the cursor specified for the frame (default) - nil don't display a cursor - `bar' display a bar cursor with default width - (bar . WIDTH) display a bar cursor with width WIDTH - others display a box cursor. - -** The variable open-paren-in-column-0-is-defun-start controls whether -an open parenthesis in column 0 is considered to be the start of a -defun. If set, the default, it is considered a defun start. If not -set, an open parenthesis in column 0 has no special meaning. - -** The new function `string-to-syntax' can be used to translate syntax -specifications in string form as accepted by `modify-syntax-entry' to -the cons-cell form that is used for the values of the `syntax-table' -text property, and in `font-lock-syntactic-keywords'. - -Example: - - (string-to-syntax "()") - => (4 . 41) - -** Emacs' reader supports CL read syntax for integers in bases -other than 10. - -*** `#BINTEGER' or `#bINTEGER' reads INTEGER in binary (radix 2). -INTEGER optionally contains a sign. - - #b1111 - => 15 - #b-1111 - => -15 - -*** `#OINTEGER' or `#oINTEGER' reads INTEGER in octal (radix 8). - - #o666 - => 438 - -*** `#XINTEGER' or `#xINTEGER' reads INTEGER in hexadecimal (radix 16). - - #xbeef - => 48815 - -*** `#RADIXrINTEGER' reads INTEGER in radix RADIX, 2 <= RADIX <= 36. - - #2R-111 - => -7 - #25rah - => 267 - -** The function `documentation-property' now evaluates the value of -the given property to obtain a string if it doesn't refer to etc/DOC -and isn't a string. - -** If called for a symbol, the function `documentation' now looks for -a `function-documentation' property of that symbol. If it has a non-nil -value, the documentation is taken from that value. If the value is -not a string, it is evaluated to obtain a string. - -** The last argument of `define-key-after' defaults to t for convenience. - -** The new function `replace-regexp-in-string' replaces all matches -for a regexp in a string. - -** `mouse-position' now runs the abnormal hook -`mouse-position-function'. - -** The function string-to-number now returns a float for numbers -that don't fit into a Lisp integer. - -** The variable keyword-symbols-constants-flag has been removed. -Keywords are now always considered constants. - -** The new function `delete-and-extract-region' deletes text and -returns it. - -** The function `clear-this-command-keys' now also clears the vector -returned by function `recent-keys'. - -** Variables `beginning-of-defun-function' and `end-of-defun-function' -can be used to define handlers for the functions that find defuns. -Major modes can define these locally instead of rebinding C-M-a -etc. if the normal conventions for defuns are not appropriate for the -mode. - -** easy-mmode-define-minor-mode now takes an additional BODY argument -and is renamed `define-minor-mode'. - -** If an abbrev has a hook function which is a symbol, and that symbol -has a non-nil `no-self-insert' property, the return value of the hook -function specifies whether an expansion has been done or not. If it -returns nil, abbrev-expand also returns nil, meaning "no expansion has -been performed." - -When abbrev expansion is done by typing a self-inserting character, -and the abbrev has a hook with the `no-self-insert' property, and the -hook function returns non-nil meaning expansion has been done, -then the self-inserting character is not inserted. - -** The function `intern-soft' now accepts a symbol as first argument. -In this case, that exact symbol is looked up in the specified obarray, -and the function's value is nil if it is not found. - -** The new macro `with-syntax-table' can be used to evaluate forms -with the syntax table of the current buffer temporarily set to a -specified table. - - (with-syntax-table TABLE &rest BODY) - -Evaluate BODY with syntax table of current buffer set to a copy of -TABLE. The current syntax table is saved, BODY is evaluated, and the -saved table is restored, even in case of an abnormal exit. Value is -what BODY returns. - -** Regular expressions now support intervals \{n,m\} as well as -Perl's shy-groups \(?:...\) and non-greedy *? +? and ?? operators. -Also back-references like \2 are now considered as an error if the -corresponding subgroup does not exist (or is not closed yet). -Previously it would have been silently turned into `2' (ignoring the `\'). - -** The optional argument BUFFER of function file-local-copy has been -removed since it wasn't used by anything. - -** The file name argument of function `file-locked-p' is now required -instead of being optional. - -** The new built-in error `text-read-only' is signaled when trying to -modify read-only text. - -** New functions and variables for locales. - -The new variable `locale-coding-system' specifies how to encode and -decode strings passed to low-level message functions like strerror and -time functions like strftime. The new variables -`system-messages-locale' and `system-time-locale' give the system -locales to be used when invoking these two types of functions. - -The new function `set-locale-environment' sets the language -environment, preferred coding system, and locale coding system from -the system locale as specified by the LC_ALL, LC_CTYPE, and LANG -environment variables. Normally, it is invoked during startup and need -not be invoked thereafter. It uses the new variables -`locale-language-names', `locale-charset-language-names', and -`locale-preferred-coding-systems' to make its decisions. - -** syntax tables now understand nested comments. -To declare a comment syntax as allowing nesting, just add an `n' -modifier to either of the characters of the comment end and the comment -start sequences. - -** The function `pixmap-spec-p' has been renamed `bitmap-spec-p' -because `bitmap' is more in line with the usual X terminology. - -** New function `propertize' - -The new function `propertize' can be used to conveniently construct -strings with text properties. - -- Function: propertize STRING &rest PROPERTIES - -Value is a copy of STRING with text properties assigned as specified -by PROPERTIES. PROPERTIES is a sequence of pairs PROPERTY VALUE, with -PROPERTY being the name of a text property and VALUE being the -specified value of that property. Example: - - (propertize "foo" 'face 'bold 'read-only t) - -** push and pop macros. - -Simple versions of the push and pop macros of Common Lisp -are now defined in Emacs Lisp. These macros allow only symbols -as the place that holds the list to be changed. - -(push NEWELT LISTNAME) add NEWELT to the front of LISTNAME's value. -(pop LISTNAME) return first elt of LISTNAME, and remove it - (thus altering the value of LISTNAME). - -** New dolist and dotimes macros. - -Simple versions of the dolist and dotimes macros of Common Lisp -are now defined in Emacs Lisp. - -(dolist (VAR LIST [RESULT]) BODY...) - Execute body once for each element of LIST, - using the variable VAR to hold the current element. - Then return the value of RESULT, or nil if RESULT is omitted. - -(dotimes (VAR COUNT [RESULT]) BODY...) - Execute BODY with VAR bound to successive integers running from 0, - inclusive, to COUNT, exclusive. - Then return the value of RESULT, or nil if RESULT is omitted. - -** Regular expressions now support Posix character classes such as -[:alpha:], [:space:] and so on. These must be used within a character -class--for instance, [-[:digit:].+] matches digits or a period -or a sign. - -[:digit:] matches 0 through 9 -[:cntrl:] matches ASCII control characters -[:xdigit:] matches 0 through 9, a through f and A through F. -[:blank:] matches space and tab only -[:graph:] matches graphic characters--everything except ASCII control chars, - space, and DEL. -[:print:] matches printing characters--everything except ASCII control chars - and DEL. -[:alnum:] matches letters and digits. - (But at present, for multibyte characters, - it matches anything that has word syntax.) -[:alpha:] matches letters. - (But at present, for multibyte characters, - it matches anything that has word syntax.) -[:ascii:] matches ASCII (unibyte) characters. -[:nonascii:] matches non-ASCII (multibyte) characters. -[:lower:] matches anything lower-case. -[:punct:] matches punctuation. - (But at present, for multibyte characters, - it matches anything that has non-word syntax.) -[:space:] matches anything that has whitespace syntax. -[:upper:] matches anything upper-case. -[:word:] matches anything that has word syntax. - -** Emacs now has built-in hash tables. - -The following functions are defined for hash tables: - -- Function: make-hash-table ARGS - -The argument list ARGS consists of keyword/argument pairs. All arguments -are optional. The following arguments are defined: - -:test TEST - -TEST must be a symbol specifying how to compare keys. Default is `eql'. -Predefined are `eq', `eql' and `equal'. If TEST is not predefined, -it must have been defined with `define-hash-table-test'. - -:size SIZE - -SIZE must be an integer > 0 giving a hint to the implementation how -many elements will be put in the hash table. Default size is 65. - -:rehash-size REHASH-SIZE - -REHASH-SIZE specifies by how much to grow a hash table once it becomes -full. If REHASH-SIZE is an integer, add that to the hash table's old -size to get the new size. Otherwise, REHASH-SIZE must be a float > -1.0, and the new size is computed by multiplying REHASH-SIZE with the -old size. Default rehash size is 1.5. - -:rehash-threshold THRESHOLD - -THRESHOLD must be a float > 0 and <= 1.0 specifying when to resize the -hash table. It is resized when the ratio of (number of entries) / -(size of hash table) is >= THRESHOLD. Default threshold is 0.8. - -:weakness WEAK - -WEAK must be either nil, one of the symbols `key, `value', -`key-or-value', `key-and-value', or t, meaning the same as -`key-and-value'. Entries are removed from weak tables during garbage -collection if their key and/or value are not referenced elsewhere -outside of the hash table. Default are non-weak hash tables. - -- Function: makehash &optional TEST - -Similar to make-hash-table, but only TEST can be specified. - -- Function: hash-table-p TABLE - -Returns non-nil if TABLE is a hash table object. - -- Function: copy-hash-table TABLE - -Returns a copy of TABLE. Only the table itself is copied, keys and -values are shared. - -- Function: hash-table-count TABLE - -Returns the number of entries in TABLE. - -- Function: hash-table-rehash-size TABLE - -Returns the rehash size of TABLE. - -- Function: hash-table-rehash-threshold TABLE - -Returns the rehash threshold of TABLE. - -- Function: hash-table-rehash-size TABLE - -Returns the size of TABLE. - -- Function: hash-table-test TABLE - -Returns the test TABLE uses to compare keys. - -- Function: hash-table-weakness TABLE - -Returns the weakness specified for TABLE. - -- Function: clrhash TABLE - -Clear TABLE. - -- Function: gethash KEY TABLE &optional DEFAULT - -Look up KEY in TABLE and return its associated VALUE or DEFAULT if -not found. - -- Function: puthash KEY VALUE TABLE - -Associate KEY with VALUE in TABLE. If KEY is already associated with -another value, replace the old value with VALUE. - -- Function: remhash KEY TABLE - -Remove KEY from TABLE if it is there. - -- Function: maphash FUNCTION TABLE - -Call FUNCTION for all elements in TABLE. FUNCTION must take two -arguments KEY and VALUE. - -- Function: sxhash OBJ - -Return a hash code for Lisp object OBJ. - -- Function: define-hash-table-test NAME TEST-FN HASH-FN - -Define a new hash table test named NAME. If NAME is specified as -a test in `make-hash-table', the table created will use TEST-FN for -comparing keys, and HASH-FN to compute hash codes for keys. Test -and hash function are stored as symbol property `hash-table-test' -of NAME with a value of (TEST-FN HASH-FN). - -TEST-FN must take two arguments and return non-nil if they are the same. - -HASH-FN must take one argument and return an integer that is the hash -code of the argument. The function should use the whole range of -integer values for hash code computation, including negative integers. - -Example: The following creates a hash table whose keys are supposed to -be strings that are compared case-insensitively. - - (defun case-fold-string= (a b) - (compare-strings a nil nil b nil nil t)) - - (defun case-fold-string-hash (a) - (sxhash (upcase a))) - - (define-hash-table-test 'case-fold 'case-fold-string= - 'case-fold-string-hash)) - - (make-hash-table :test 'case-fold) - -** The Lisp reader handles circular structure. - -It now works to use the #N= and #N# constructs to represent -circular structures. For example, #1=(a . #1#) represents -a cons cell which is its own cdr. - -** The Lisp printer handles circular structure. - -If you bind print-circle to a non-nil value, the Lisp printer outputs -#N= and #N# constructs to represent circular and shared structure. - -** If the second argument to `move-to-column' is anything but nil or -t, that means replace a tab with spaces if necessary to reach the -specified column, but do not add spaces at the end of the line if it -is too short to reach that column. - -** perform-replace has a new feature: the REPLACEMENTS argument may -now be a cons cell (FUNCTION . DATA). This means to call FUNCTION -after each match to get the replacement text. FUNCTION is called with -two arguments: DATA, and the number of replacements already made. - -If the FROM-STRING contains any upper-case letters, -perform-replace also turns off `case-fold-search' temporarily -and inserts the replacement text without altering case in it. - -** The function buffer-size now accepts an optional argument -to specify which buffer to return the size of. - -** The calendar motion commands now run the normal hook -calendar-move-hook after moving point. - -** The new variable small-temporary-file-directory specifies a -directory to use for creating temporary files that are likely to be -small. (Certain Emacs features use this directory.) If -small-temporary-file-directory is nil, they use -temporary-file-directory instead. - -** The variable `inhibit-modification-hooks', if non-nil, inhibits all -the hooks that track changes in the buffer. This affects -`before-change-functions' and `after-change-functions', as well as -hooks attached to text properties and overlay properties. - -** assq-delete-all is a new function that deletes all the -elements of an alist which have a car `eq' to a particular value. - -** make-temp-file provides a more reliable way to create a temporary file. - -make-temp-file is used like make-temp-name, except that it actually -creates the file before it returns. This prevents a timing error, -ensuring that no other job can use the same name for a temporary file. - -** New exclusive-open feature in `write-region' - -The optional seventh arg is now called MUSTBENEW. If non-nil, it insists -on a check for an existing file with the same name. If MUSTBENEW -is `excl', that means to get an error if the file already exists; -never overwrite. If MUSTBENEW is neither nil nor `excl', that means -ask for confirmation before overwriting, but do go ahead and -overwrite the file if the user gives confirmation. - -If the MUSTBENEW argument in `write-region' is `excl', -that means to use a special feature in the `open' system call -to get an error if the file exists at that time. -The error reported is `file-already-exists'. - -** Function `format' now handles text properties. - -Text properties of the format string are applied to the result string. -If the result string is longer than the format string, text properties -ending at the end of the format string are extended to the end of the -result string. - -Text properties from string arguments are applied to the result -string where arguments appear in the result string. - -Example: - - (let ((s1 "hello, %s") - (s2 "world")) - (put-text-property 0 (length s1) 'face 'bold s1) - (put-text-property 0 (length s2) 'face 'italic s2) - (format s1 s2)) - -results in a bold-face string with an italic `world' at the end. - -** Messages can now be displayed with text properties. - -Text properties are handled as described above for function `format'. -The following example displays a bold-face message with an italic -argument in it. - - (let ((msg "hello, %s!") - (arg "world")) - (put-text-property 0 (length msg) 'face 'bold msg) - (put-text-property 0 (length arg) 'face 'italic arg) - (message msg arg)) - -** Sound support - -Emacs supports playing sound files on GNU/Linux and the free BSDs -(Voxware driver and native BSD driver, aka as Luigi's driver). - -Currently supported file formats are RIFF-WAVE (*.wav) and Sun Audio -(*.au). You must configure Emacs with the option `--with-sound=yes' -to enable sound support. - -Sound files can be played by calling (play-sound SOUND). SOUND is a -list of the form `(sound PROPERTY...)'. The function is only defined -when sound support is present for the system on which Emacs runs. The -functions runs `play-sound-functions' with one argument which is the -sound to play, before playing the sound. - -The following sound properties are supported: - -- `:file FILE' - -FILE is a file name. If FILE isn't an absolute name, it will be -searched relative to `data-directory'. - -- `:data DATA' - -DATA is a string containing sound data. Either :file or :data -may be present, but not both. - -- `:volume VOLUME' - -VOLUME must be an integer in the range 0..100 or a float in the range -0..1. This property is optional. - -- `:device DEVICE' - -DEVICE is a string specifying the system device on which to play the -sound. The default device is system-dependent. - -Other properties are ignored. - -An alternative interface is called as -(play-sound-file FILE &optional VOLUME DEVICE). - -** `multimedia' is a new Finder keyword and Custom group. - -** keywordp is a new predicate to test efficiently for an object being -a keyword symbol. - -** Changes to garbage collection - -*** The function garbage-collect now additionally returns the number -of live and free strings. - -*** There is a new variable `strings-consed' holding the number of -strings that have been consed so far. - - -* Lisp-level Display features added after release 2.6 of the Emacs -Lisp Manual - -** The user-option `resize-mini-windows' controls how Emacs resizes -mini-windows. - -** The function `pos-visible-in-window-p' now has a third optional -argument, PARTIALLY. If a character is only partially visible, nil is -returned, unless PARTIALLY is non-nil. - -** On window systems, `glyph-table' is no longer used. - -** Help strings in menu items are now used to provide `help-echo' text. - -** The function `image-size' can be used to determine the size of an -image. - -- Function: image-size SPEC &optional PIXELS FRAME - -Return the size of an image as a pair (WIDTH . HEIGHT). - -SPEC is an image specification. PIXELS non-nil means return sizes -measured in pixels, otherwise return sizes measured in canonical -character units (fractions of the width/height of the frame's default -font). FRAME is the frame on which the image will be displayed. -FRAME nil or omitted means use the selected frame. - -** The function `image-mask-p' can be used to determine if an image -has a mask bitmap. - -- Function: image-mask-p SPEC &optional FRAME - -Return t if image SPEC has a mask bitmap. -FRAME is the frame on which the image will be displayed. FRAME nil -or omitted means use the selected frame. - -** The function `find-image' can be used to find a usable image -satisfying one of a list of specifications. - -** The STRING argument of `put-image' and `insert-image' is now -optional. - -** Image specifications may contain the property `:ascent center' (see -below). - - -* New Lisp-level Display features in Emacs 21.1 - -** The function tty-suppress-bold-inverse-default-colors can be used -to make Emacs avoid displaying text with bold black foreground on TTYs. - -Some terminals, notably PC consoles, emulate bold text by displaying -text in brighter colors. On such a console, a bold black foreground -is displayed in a gray color. If this turns out to be hard to read on -your monitor---the problem occurred with the mode line on -laptops---you can instruct Emacs to ignore the text's boldness, and to -just display it black instead. - -This situation can't be detected automatically. You will have to put -a line like - - (tty-suppress-bold-inverse-default-colors t) - -in your `.emacs'. - -** New face implementation. - -Emacs faces have been reimplemented from scratch. They don't use XLFD -font names anymore and face merging now works as expected. - -*** New faces. - -Each face can specify the following display attributes: - - 1. Font family or fontset alias name. - - 2. Relative proportionate width, aka character set width or set - width (swidth), e.g. `semi-compressed'. - - 3. Font height in 1/10pt - - 4. Font weight, e.g. `bold'. - - 5. Font slant, e.g. `italic'. - - 6. Foreground color. - - 7. Background color. - - 8. Whether or not characters should be underlined, and in what color. - - 9. Whether or not characters should be displayed in inverse video. - - 10. A background stipple, a bitmap. - - 11. Whether or not characters should be overlined, and in what color. - - 12. Whether or not characters should be strike-through, and in what - color. - - 13. Whether or not a box should be drawn around characters, its - color, the width of the box lines, and 3D appearance. - -Faces are frame-local by nature because Emacs allows to define the -same named face (face names are symbols) differently for different -frames. Each frame has an alist of face definitions for all named -faces. The value of a named face in such an alist is a Lisp vector -with the symbol `face' in slot 0, and a slot for each of the face -attributes mentioned above. - -There is also a global face alist `face-new-frame-defaults'. Face -definitions from this list are used to initialize faces of newly -created frames. - -A face doesn't have to specify all attributes. Those not specified -have a nil value. Faces specifying all attributes are called -`fully-specified'. - -*** Face merging. - -The display style of a given character in the text is determined by -combining several faces. This process is called `face merging'. Any -aspect of the display style that isn't specified by overlays or text -properties is taken from the `default' face. Since it is made sure -that the default face is always fully-specified, face merging always -results in a fully-specified face. - -*** Face realization. - -After all face attributes for a character have been determined by -merging faces of that character, that face is `realized'. The -realization process maps face attributes to what is physically -available on the system where Emacs runs. The result is a `realized -face' in form of an internal structure which is stored in the face -cache of the frame on which it was realized. - -Face realization is done in the context of the charset of the -character to display because different fonts and encodings are used -for different charsets. In other words, for characters of different -charsets, different realized faces are needed to display them. - -Except for composite characters, faces are always realized for a -specific character set and contain a specific font, even if the face -being realized specifies a fontset. The reason is that the result of -the new font selection stage is better than what can be done with -statically defined font name patterns in fontsets. - -In unibyte text, Emacs' charsets aren't applicable; function -`char-charset' reports ASCII for all characters, including those > -0x7f. The X registry and encoding of fonts to use is determined from -the variable `face-default-registry' in this case. The variable is -initialized at Emacs startup time from the font the user specified for -Emacs. - -Currently all unibyte text, i.e. all buffers with -`enable-multibyte-characters' nil are displayed with fonts of the same -registry and encoding `face-default-registry'. This is consistent -with the fact that languages can also be set globally, only. - -**** Clearing face caches. - -The Lisp function `clear-face-cache' can be called to clear face caches -on all frames. If called with a non-nil argument, it will also unload -unused fonts. - -*** Font selection. - -Font selection tries to find the best available matching font for a -given (charset, face) combination. This is done slightly differently -for faces specifying a fontset, or a font family name. - -If the face specifies a fontset name, that fontset determines a -pattern for fonts of the given charset. If the face specifies a font -family, a font pattern is constructed. Charset symbols have a -property `x-charset-registry' for that purpose that maps a charset to -an XLFD registry and encoding in the font pattern constructed. - -Available fonts on the system on which Emacs runs are then matched -against the font pattern. The result of font selection is the best -match for the given face attributes in this font list. - -Font selection can be influenced by the user. - -The user can specify the relative importance he gives the face -attributes width, height, weight, and slant by setting -face-font-selection-order (faces.el) to a list of face attribute -names. The default is (:width :height :weight :slant), and means -that font selection first tries to find a good match for the font -width specified by a face, then---within fonts with that width---tries -to find a best match for the specified font height, etc. - -Setting `face-font-family-alternatives' allows the user to specify -alternative font families to try if a family specified by a face -doesn't exist. - -Setting `face-font-registry-alternatives' allows the user to specify -all alternative font registry names to try for a face specifying a -registry. - -Please note that the interpretations of the above two variables are -slightly different. - -Setting face-ignored-fonts allows the user to ignore specific fonts. - - -**** Scalable fonts - -Emacs can make use of scalable fonts but doesn't do so by default, -since the use of too many or too big scalable fonts may crash XFree86 -servers. - -To enable scalable font use, set the variable -`scalable-fonts-allowed'. A value of nil, the default, means never use -scalable fonts. A value of t means any scalable font may be used. -Otherwise, the value must be a list of regular expressions. A -scalable font may then be used if it matches a regular expression from -that list. Example: - - (setq scalable-fonts-allowed '("muleindian-2$")) - -allows the use of scalable fonts with registry `muleindian-2'. - -*** Functions and variables related to font selection. - -- Function: x-family-fonts &optional FAMILY FRAME - -Return a list of available fonts of family FAMILY on FRAME. If FAMILY -is omitted or nil, list all families. Otherwise, FAMILY must be a -string, possibly containing wildcards `?' and `*'. - -If FRAME is omitted or nil, use the selected frame. Each element of -the result is a vector [FAMILY WIDTH POINT-SIZE WEIGHT SLANT FIXED-P -FULL REGISTRY-AND-ENCODING]. FAMILY is the font family name. -POINT-SIZE is the size of the font in 1/10 pt. WIDTH, WEIGHT, and -SLANT are symbols describing the width, weight and slant of the font. -These symbols are the same as for face attributes. FIXED-P is non-nil -if the font is fixed-pitch. FULL is the full name of the font, and -REGISTRY-AND-ENCODING is a string giving the registry and encoding of -the font. The result list is sorted according to the current setting -of the face font sort order. - -- Function: x-font-family-list - -Return a list of available font families on FRAME. If FRAME is -omitted or nil, use the selected frame. Value is a list of conses -(FAMILY . FIXED-P) where FAMILY is a font family, and FIXED-P is -non-nil if fonts of that family are fixed-pitch. - -- Variable: font-list-limit - -Limit for font matching. If an integer > 0, font matching functions -won't load more than that number of fonts when searching for a -matching font. The default is currently 100. - -*** Setting face attributes. - -For the most part, the new face implementation is interface-compatible -with the old one. Old face attribute related functions are now -implemented in terms of the new functions `set-face-attribute' and -`face-attribute'. - -Face attributes are identified by their names which are keyword -symbols. All attributes can be set to `unspecified'. - -The following attributes are recognized: - -`:family' - -VALUE must be a string specifying the font family, e.g. ``courier'', -or a fontset alias name. If a font family is specified, wild-cards `*' -and `?' are allowed. - -`:width' - -VALUE specifies the relative proportionate width of the font to use. -It must be one of the symbols `ultra-condensed', `extra-condensed', -`condensed', `semi-condensed', `normal', `semi-expanded', `expanded', -`extra-expanded', or `ultra-expanded'. - -`:height' - -VALUE must be either an integer specifying the height of the font to use -in 1/10 pt, a floating point number specifying the amount by which to -scale any underlying face, or a function, which is called with the old -height (from the underlying face), and should return the new height. - -`:weight' - -VALUE specifies the weight of the font to use. It must be one of the -symbols `ultra-bold', `extra-bold', `bold', `semi-bold', `normal', -`semi-light', `light', `extra-light', `ultra-light'. - -`:slant' - -VALUE specifies the slant of the font to use. It must be one of the -symbols `italic', `oblique', `normal', `reverse-italic', or -`reverse-oblique'. - -`:foreground', `:background' - -VALUE must be a color name, a string. - -`:underline' - -VALUE specifies whether characters in FACE should be underlined. If -VALUE is t, underline with foreground color of the face. If VALUE is -a string, underline with that color. If VALUE is nil, explicitly -don't underline. - -`:overline' - -VALUE specifies whether characters in FACE should be overlined. If -VALUE is t, overline with foreground color of the face. If VALUE is a -string, overline with that color. If VALUE is nil, explicitly don't -overline. - -`:strike-through' - -VALUE specifies whether characters in FACE should be drawn with a line -striking through them. If VALUE is t, use the foreground color of the -face. If VALUE is a string, strike-through with that color. If VALUE -is nil, explicitly don't strike through. - -`:box' - -VALUE specifies whether characters in FACE should have a box drawn -around them. If VALUE is nil, explicitly don't draw boxes. If -VALUE is t, draw a box with lines of width 1 in the foreground color -of the face. If VALUE is a string, the string must be a color name, -and the box is drawn in that color with a line width of 1. Otherwise, -VALUE must be a property list of the form `(:line-width WIDTH -:color COLOR :style STYLE)'. If a keyword/value pair is missing from -the property list, a default value will be used for the value, as -specified below. WIDTH specifies the width of the lines to draw; it -defaults to 1. COLOR is the name of the color to draw in, default is -the foreground color of the face for simple boxes, and the background -color of the face for 3D boxes. STYLE specifies whether a 3D box -should be draw. If STYLE is `released-button', draw a box looking -like a released 3D button. If STYLE is `pressed-button' draw a box -that appears like a pressed button. If STYLE is nil, the default if -the property list doesn't contain a style specification, draw a 2D -box. - -`:inverse-video' - -VALUE specifies whether characters in FACE should be displayed in -inverse video. VALUE must be one of t or nil. - -`:stipple' - -If VALUE is a string, it must be the name of a file of pixmap data. -The directories listed in the `x-bitmap-file-path' variable are -searched. Alternatively, VALUE may be a list of the form (WIDTH -HEIGHT DATA) where WIDTH and HEIGHT are the size in pixels, and DATA -is a string containing the raw bits of the bitmap. VALUE nil means -explicitly don't use a stipple pattern. - -For convenience, attributes `:family', `:width', `:height', `:weight', -and `:slant' may also be set in one step from an X font name: - -`:font' - -Set font-related face attributes from VALUE. VALUE must be a valid -XLFD font name. If it is a font name pattern, the first matching font -is used--this is for compatibility with the behavior of previous -versions of Emacs. - -For compatibility with Emacs 20, keywords `:bold' and `:italic' can -be used to specify that a bold or italic font should be used. VALUE -must be t or nil in that case. A value of `unspecified' is not allowed." - -Please see also the documentation of `set-face-attribute' and -`defface'. - -`:inherit' - -VALUE is the name of a face from which to inherit attributes, or a list -of face names. Attributes from inherited faces are merged into the face -like an underlying face would be, with higher priority than underlying faces. - -*** Face attributes and X resources - -The following X resource names can be used to set face attributes -from X resources: - - Face attribute X resource class ------------------------------------------------------------------------ - :family attributeFamily . Face.AttributeFamily - :width attributeWidth Face.AttributeWidth - :height attributeHeight Face.AttributeHeight - :weight attributeWeight Face.AttributeWeight - :slant attributeSlant Face.AttributeSlant - foreground attributeForeground Face.AttributeForeground - :background attributeBackground . Face.AttributeBackground - :overline attributeOverline Face.AttributeOverline - :strike-through attributeStrikeThrough Face.AttributeStrikeThrough - :box attributeBox Face.AttributeBox - :underline attributeUnderline Face.AttributeUnderline - :inverse-video attributeInverse Face.AttributeInverse - :stipple attributeStipple Face.AttributeStipple - or attributeBackgroundPixmap - Face.AttributeBackgroundPixmap - :font attributeFont Face.AttributeFont - :bold attributeBold Face.AttributeBold - :italic attributeItalic . Face.AttributeItalic - :font attributeFont Face.AttributeFont - -*** Text property `face'. - -The value of the `face' text property can now be a single face -specification or a list of such specifications. Each face -specification can be - -1. A symbol or string naming a Lisp face. - -2. A property list of the form (KEYWORD VALUE ...) where each - KEYWORD is a face attribute name, and VALUE is an appropriate value - for that attribute. Please see the doc string of `set-face-attribute' - for face attribute names. - -3. Conses of the form (FOREGROUND-COLOR . COLOR) or - (BACKGROUND-COLOR . COLOR) where COLOR is a color name. This is - for compatibility with previous Emacs versions. - -** Support functions for colors on text-only terminals. - -The function `tty-color-define' can be used to define colors for use -on TTY and MSDOS frames. It maps a color name to a color number on -the terminal. Emacs defines a couple of common color mappings by -default. You can get defined colors with a call to -`defined-colors'. The function `tty-color-clear' can be -used to clear the mapping table. - -** Unified support for colors independent of frame type. - -The new functions `defined-colors', `color-defined-p', `color-values', -and `display-color-p' work for any type of frame. On frames whose -type is neither x nor w32, these functions transparently map X-style -color specifications to the closest colors supported by the frame -display. Lisp programs should use these new functions instead of the -old `x-defined-colors', `x-color-defined-p', `x-color-values', and -`x-display-color-p'. (The old function names are still available for -compatibility; they are now aliases of the new names.) Lisp programs -should no more look at the value of the variable window-system to -modify their color-related behavior. - -The primitives `color-gray-p' and `color-supported-p' also work for -any frame type. - -** Platform-independent functions to describe display capabilities. - -The new functions `display-mouse-p', `display-popup-menus-p', -`display-graphic-p', `display-selections-p', `display-screens', -`display-pixel-width', `display-pixel-height', `display-mm-width', -`display-mm-height', `display-backing-store', `display-save-under', -`display-planes', `display-color-cells', `display-visual-class', and -`display-grayscale-p' describe the basic capabilities of a particular -display. Lisp programs should call these functions instead of testing -the value of the variables `window-system' or `system-type', or calling -platform-specific functions such as `x-display-pixel-width'. - -The new function `display-images-p' returns non-nil if a particular -display can display image files. - -** The minibuffer prompt is now actually inserted in the minibuffer. - -This makes it possible to scroll through the prompt, if you want to. -To disallow this completely (like previous versions of emacs), customize -the variable `minibuffer-prompt-properties', and turn on the -`Inviolable' option. - -The function `minibuffer-prompt-end' returns the current position of the -end of the minibuffer prompt, if the minibuffer is current. -Otherwise, it returns `(point-min)'. - -** New `field' abstraction in buffers. - -There is now code to support an abstraction called `fields' in emacs -buffers. A field is a contiguous region of text with the same `field' -property (which can be a text property or an overlay). - -Many emacs functions, such as forward-word, forward-sentence, -forward-paragraph, beginning-of-line, etc., stop moving when they come -to the boundary between fields; beginning-of-line and end-of-line will -not let the point move past the field boundary, but other movement -commands continue into the next field if repeated. Stopping at field -boundaries can be suppressed programmatically by binding -`inhibit-field-text-motion' to a non-nil value around calls to these -functions. - -Now that the minibuffer prompt is inserted into the minibuffer, it is in -a separate field from the user-input part of the buffer, so that common -editing commands treat the user's text separately from the prompt. - -The following functions are defined for operating on fields: - -- Function: constrain-to-field NEW-POS OLD-POS &optional ESCAPE-FROM-EDGE ONLY-IN-LINE INHIBIT-CAPTURE-PROPERTY - -Return the position closest to NEW-POS that is in the same field as OLD-POS. - -A field is a region of text with the same `field' property. -If NEW-POS is nil, then the current point is used instead, and set to the -constrained position if that is different. - -If OLD-POS is at the boundary of two fields, then the allowable -positions for NEW-POS depends on the value of the optional argument -ESCAPE-FROM-EDGE: If ESCAPE-FROM-EDGE is nil, then NEW-POS is -constrained to the field that has the same `field' char-property -as any new characters inserted at OLD-POS, whereas if ESCAPE-FROM-EDGE -is non-nil, NEW-POS is constrained to the union of the two adjacent -fields. Additionally, if two fields are separated by another field with -the special value `boundary', then any point within this special field is -also considered to be `on the boundary'. - -If the optional argument ONLY-IN-LINE is non-nil and constraining -NEW-POS would move it to a different line, NEW-POS is returned -unconstrained. This useful for commands that move by line, like -C-n or C-a, which should generally respect field boundaries -only in the case where they can still move to the right line. - -If the optional argument INHIBIT-CAPTURE-PROPERTY is non-nil, and OLD-POS has -a non-nil property of that name, then any field boundaries are ignored. - -Field boundaries are not noticed if `inhibit-field-text-motion' is non-nil. - -- Function: delete-field &optional POS - -Delete the field surrounding POS. -A field is a region of text with the same `field' property. -If POS is nil, the value of point is used for POS. - -- Function: field-beginning &optional POS ESCAPE-FROM-EDGE - -Return the beginning of the field surrounding POS. -A field is a region of text with the same `field' property. -If POS is nil, the value of point is used for POS. -If ESCAPE-FROM-EDGE is non-nil and POS is at the beginning of its -field, then the beginning of the *previous* field is returned. - -- Function: field-end &optional POS ESCAPE-FROM-EDGE - -Return the end of the field surrounding POS. -A field is a region of text with the same `field' property. -If POS is nil, the value of point is used for POS. -If ESCAPE-FROM-EDGE is non-nil and POS is at the end of its field, -then the end of the *following* field is returned. - -- Function: field-string &optional POS - -Return the contents of the field surrounding POS as a string. -A field is a region of text with the same `field' property. -If POS is nil, the value of point is used for POS. - -- Function: field-string-no-properties &optional POS - -Return the contents of the field around POS, without text-properties. -A field is a region of text with the same `field' property. -If POS is nil, the value of point is used for POS. - -** Image support. - -Emacs can now display images. Images are inserted into text by giving -strings or buffer text a `display' text property containing one of -(AREA IMAGE) or IMAGE. The display of the `display' property value -replaces the display of the characters having that property. - -If the property value has the form (AREA IMAGE), AREA must be one of -`(margin left-margin)', `(margin right-margin)' or `(margin nil)'. If -AREA is `(margin nil)', IMAGE will be displayed in the text area of a -window, otherwise it will be displayed in the left or right marginal -area. - -IMAGE is an image specification. - -*** Image specifications - -Image specifications are lists of the form `(image PROPS)' where PROPS -is a property list whose keys are keyword symbols. Each -specifications must contain a property `:type TYPE' with TYPE being a -symbol specifying the image type, e.g. `xbm'. Properties not -described below are ignored. - -The following is a list of properties all image types share. - -`:ascent ASCENT' - -ASCENT must be a number in the range 0..100, or the symbol `center'. -If it is a number, it specifies the percentage of the image's height -to use for its ascent. - -If not specified, ASCENT defaults to the value 50 which means that the -image will be centered with the base line of the row it appears in. - -If ASCENT is `center' the image is vertically centered around a -centerline which is the vertical center of text drawn at the position -of the image, in the manner specified by the text properties and -overlays that apply to the image. - -`:margin MARGIN' - -MARGIN must be either a number >= 0 specifying how many pixels to put -as margin around the image, or a pair (X . Y) with X specifying the -horizontal margin and Y specifying the vertical margin. Default is 0. - -`:relief RELIEF' - -RELIEF is analogous to the `:relief' attribute of faces. Puts a relief -around an image. - -`:conversion ALGO' - -Apply an image algorithm to the image before displaying it. - -ALGO `laplace' or `emboss' means apply a Laplace or ``emboss'' -edge-detection algorithm to the image. - -ALGO `(edge-detection :matrix MATRIX :color-adjust ADJUST)' means -apply a general edge-detection algorithm. MATRIX must be either a -nine-element list or a nine-element vector of numbers. A pixel at -position x/y in the transformed image is computed from original pixels -around that position. MATRIX specifies, for each pixel in the -neighborhood of x/y, a factor with which that pixel will influence the -transformed pixel; element 0 specifies the factor for the pixel at -x-1/y-1, element 1 the factor for the pixel at x/y-1 etc. as shown -below. - - (x-1/y-1 x/y-1 x+1/y-1 - x-1/y x/y x+1/y - x-1/y+1 x/y+1 x+1/y+1) - -The resulting pixel is computed from the color intensity of the color -resulting from summing up the RGB values of surrounding pixels, -multiplied by the specified factors, and dividing that sum by the sum -of the factors' absolute values. - -Laplace edge-detection currently uses a matrix of - - (1 0 0 - 0 0 0 - 9 9 -1) - -Emboss edge-detection uses a matrix of - - ( 2 -1 0 - -1 0 1 - 0 1 -2) - -ALGO `disabled' means transform the image so that it looks -``disabled''. - -`:mask MASK' - -If MASK is `heuristic' or `(heuristic BG)', build a clipping mask for -the image, so that the background of a frame is visible behind the -image. If BG is not specified, or if BG is t, determine the -background color of the image by looking at the 4 corners of the -image, assuming the most frequently occurring color from the corners is -the background color of the image. Otherwise, BG must be a list `(RED -GREEN BLUE)' specifying the color to assume for the background of the -image. - -If MASK is nil, remove a mask from the image, if it has one. Images -in some formats include a mask which can be removed by specifying -`:mask nil'. - -`:file FILE' - -Load image from FILE. If FILE is not absolute after expanding it, -search for the image in `data-directory'. Some image types support -building images from data. When this is done, no `:file' property -may be present in the image specification. - -`:data DATA' - -Get image data from DATA. (As of this writing, this is not yet -supported for image type `postscript'). Either :file or :data may be -present in an image specification, but not both. All image types -support strings as DATA, some types allow additional types of DATA. - -*** Supported image types - -**** XBM, image type `xbm'. - -XBM images don't require an external library. Additional image -properties supported are: - -`:foreground FG' - -FG must be a string specifying the image foreground color, or nil -meaning to use the default. Default is the frame's foreground color. - -`:background BG' - -BG must be a string specifying the image background color, or nil -meaning to use the default. Default is the frame's background color. - -XBM images can be constructed from data instead of file. In this -case, the image specification must contain the following properties -instead of a `:file' property. - -`:width WIDTH' - -WIDTH specifies the width of the image in pixels. - -`:height HEIGHT' - -HEIGHT specifies the height of the image in pixels. - -`:data DATA' - -DATA must be either - - 1. a string large enough to hold the bitmap data, i.e. it must - have a size >= (WIDTH + 7) / 8 * HEIGHT - - 2. a bool-vector of size >= WIDTH * HEIGHT - - 3. a vector of strings or bool-vectors, one for each line of the - bitmap. - - 4. a string that's an in-memory XBM file. Neither width nor - height may be specified in this case because these are defined - in the file. - -**** XPM, image type `xpm' - -XPM images require the external library `libXpm', package -`xpm-3.4k.tar.gz', version 3.4k or later. Make sure the library is -found when Emacs is configured by supplying appropriate paths via -`--x-includes' and `--x-libraries'. - -Additional image properties supported are: - -`:color-symbols SYMBOLS' - -SYMBOLS must be a list of pairs (NAME . COLOR), with NAME being the -name of color as it appears in an XPM file, and COLOR being an X color -name. - -XPM images can be built from memory instead of files. In that case, -add a `:data' property instead of a `:file' property. - -The XPM library uses libz in its implementation so that it is able -to display compressed images. - -**** PBM, image type `pbm' - -PBM images don't require an external library. Color, gray-scale and -mono images are supported. Additional image properties supported for -mono images are: - -`:foreground FG' - -FG must be a string specifying the image foreground color, or nil -meaning to use the default. Default is the frame's foreground color. - -`:background FG' - -BG must be a string specifying the image background color, or nil -meaning to use the default. Default is the frame's background color. - -**** JPEG, image type `jpeg' - -Support for JPEG images requires the external library `libjpeg', -package `jpegsrc.v6a.tar.gz', or later. There are no additional image -properties defined. - -**** TIFF, image type `tiff' - -Support for TIFF images requires the external library `libtiff', -package `tiff-v3.4-tar.gz', or later. There are no additional image -properties defined. - -**** GIF, image type `gif' - -Support for GIF images requires the external library `libungif', package -`libungif-4.1.0', or later. - -Additional image properties supported are: - -`:index INDEX' - -INDEX must be an integer >= 0. Load image number INDEX from a -multi-image GIF file. If INDEX is too large, the image displays -as a hollow box. - -This could be used to implement limited support for animated GIFs. -For example, the following function displays a multi-image GIF file -at point-min in the current buffer, switching between sub-images -every 0.1 seconds. - -(defun show-anim (file max) - "Display multi-image GIF file FILE which contains MAX subimages." - (display-anim (current-buffer) file 0 max t)) - -(defun display-anim (buffer file idx max first-time) - (when (= idx max) - (setq idx 0)) - (let ((img (create-image file nil nil :index idx))) - (save-excursion - (set-buffer buffer) - (goto-char (point-min)) - (unless first-time (delete-char 1)) - (insert-image img "x")) - (run-with-timer 0.1 nil 'display-anim buffer file (1+ idx) max nil))) - -**** PNG, image type `png' - -Support for PNG images requires the external library `libpng', -package `libpng-1.0.2.tar.gz', or later. There are no additional image -properties defined. - -**** Ghostscript, image type `postscript'. - -Additional image properties supported are: - -`:pt-width WIDTH' - -WIDTH is width of the image in pt (1/72 inch). WIDTH must be an -integer. This is a required property. - -`:pt-height HEIGHT' - -HEIGHT specifies the height of the image in pt (1/72 inch). HEIGHT -must be a integer. This is an required property. - -`:bounding-box BOX' - -BOX must be a list or vector of 4 integers giving the bounding box of -the PS image, analogous to the `BoundingBox' comment found in PS -files. This is an required property. - -Part of the Ghostscript interface is implemented in Lisp. See -lisp/gs.el. - -*** Lisp interface. - -The variable `image-types' contains a list of those image types -which are supported in the current configuration. - -Images are stored in an image cache and removed from the cache when -they haven't been displayed for `image-cache-eviction-delay seconds. -The function `clear-image-cache' can be used to clear the image cache -manually. Images in the cache are compared with `equal', i.e. all -images with `equal' specifications share the same image. - -*** Simplified image API, image.el - -The new Lisp package image.el contains functions that simplify image -creation and putting images into text. The function `create-image' -can be used to create images. The macro `defimage' can be used to -define an image based on available image types. The functions -`put-image' and `insert-image' can be used to insert an image into a -buffer. - -** Display margins. - -Windows can now have margins which are used for special text -and images. - -To give a window margins, either set the buffer-local variables -`left-margin-width' and `right-margin-width', or call -`set-window-margins'. The function `window-margins' can be used to -obtain the current settings. To make `left-margin-width' and -`right-margin-width' take effect, you must set them before displaying -the buffer in a window, or use `set-window-buffer' to force an update -of the display margins. - -You can put text in margins by giving it a `display' text property -containing a pair of the form `(LOCATION . VALUE)', where LOCATION is -one of `left-margin' or `right-margin' or nil. VALUE can be either a -string, an image specification or a stretch specification (see later -in this file). - -** Help display - -Emacs displays short help messages in the echo area, when the mouse -moves over a tool-bar item or a piece of text that has a text property -`help-echo'. This feature also applies to strings in the mode line -that have a `help-echo' property. - -If the value of the `help-echo' property is a function, that function -is called with three arguments WINDOW, OBJECT and POSITION. WINDOW is -the window in which the help was found. - -If OBJECT is a buffer, POS is the position in the buffer where the -`help-echo' text property was found. - -If OBJECT is an overlay, that overlay has a `help-echo' property, and -POS is the position in the overlay's buffer under the mouse. - -If OBJECT is a string (an overlay string or a string displayed with -the `display' property), POS is the position in that string under the -mouse. - -If the value of the `help-echo' property is neither a function nor a -string, it is evaluated to obtain a help string. - -For tool-bar and menu-bar items, their key definition is used to -determine the help to display. If their definition contains a -property `:help FORM', FORM is evaluated to determine the help string. -For tool-bar items without a help form, the caption of the item is -used as help string. - -The hook `show-help-function' can be set to a function that displays -the help string differently. For example, enabling a tooltip window -causes the help display to appear there instead of in the echo area. - -** Vertical fractional scrolling. - -The display of text in windows can be scrolled smoothly in pixels. -This is useful, for example, for making parts of large images visible. - -The function `window-vscroll' returns the current value of vertical -scrolling, a non-negative fraction of the canonical character height. -The function `set-window-vscroll' can be used to set the vertical -scrolling value. Here is an example of how these function might be -used. - - (global-set-key [A-down] - #'(lambda () - (interactive) - (set-window-vscroll (selected-window) - (+ 0.5 (window-vscroll))))) - (global-set-key [A-up] - #'(lambda () - (interactive) - (set-window-vscroll (selected-window) - (- (window-vscroll) 0.5))))) - -** New hook `fontification-functions'. - -Functions from `fontification-functions' are called from redisplay -when it encounters a region of text that is not yet fontified. This -variable automatically becomes buffer-local when set. Each function -is called with one argument, POS. - -At least one of the hook functions should fontify one or more -characters starting at POS in the current buffer. It should mark them -as fontified by giving them a non-nil value of the `fontified' text -property. It may be reasonable for these functions to check for the -`fontified' property and not put it back on, but they do not have to. - -** Tool bar support. - -Emacs supports a tool bar at the top of a frame under X. The frame -parameter `tool-bar-lines' (X resource "toolBar", class "ToolBar") -controls how may lines to reserve for the tool bar. A zero value -suppresses the tool bar. If the value is non-zero and -`auto-resize-tool-bars' is non-nil the tool bar's size will be changed -automatically so that all tool bar items are visible. - -*** Tool bar item definitions - -Tool bar items are defined using `define-key' with a prefix-key -`tool-bar'. For example `(define-key global-map [tool-bar item1] ITEM)' -where ITEM is a list `(menu-item CAPTION BINDING PROPS...)'. - -CAPTION is the caption of the item, If it's not a string, it is -evaluated to get a string. The caption is currently not displayed in -the tool bar, but it is displayed if the item doesn't have a `:help' -property (see below). - -BINDING is the tool bar item's binding. Tool bar items with keymaps as -binding are currently ignored. - -The following properties are recognized: - -`:enable FORM'. - -FORM is evaluated and specifies whether the tool bar item is enabled -or disabled. - -`:visible FORM' - -FORM is evaluated and specifies whether the tool bar item is displayed. - -`:filter FUNCTION' - -FUNCTION is called with one parameter, the same list BINDING in which -FUNCTION is specified as the filter. The value FUNCTION returns is -used instead of BINDING to display this item. - -`:button (TYPE SELECTED)' - -TYPE must be one of `:radio' or `:toggle'. SELECTED is evaluated -and specifies whether the button is selected (pressed) or not. - -`:image IMAGES' - -IMAGES is either a single image specification or a vector of four -image specifications. If it is a vector, this table lists the -meaning of each of the four elements: - - Index Use when item is - ---------------------------------------- - 0 enabled and selected - 1 enabled and deselected - 2 disabled and selected - 3 disabled and deselected - -If IMAGE is a single image specification, a Laplace edge-detection -algorithm is used on that image to draw the image in disabled state. - -`:help HELP-STRING'. - -Gives a help string to display for the tool bar item. This help -is displayed when the mouse is moved over the item. - -The function `toolbar-add-item' is a convenience function for adding -toolbar items generally, and `tool-bar-add-item-from-menu' can be used -to define a toolbar item with a binding copied from an item on the -menu bar. - -The default bindings use a menu-item :filter to derive the tool-bar -dynamically from variable `tool-bar-map' which may be set -buffer-locally to override the global map. - -*** Tool-bar-related variables. - -If `auto-resize-tool-bar' is non-nil, the tool bar will automatically -resize to show all defined tool bar items. It will never grow larger -than 1/4 of the frame's size. - -If `auto-raise-tool-bar-buttons' is non-nil, tool bar buttons will be -raised when the mouse moves over them. - -You can add extra space between tool bar items by setting -`tool-bar-button-margin' to a positive integer specifying a number of -pixels, or a pair of integers (X . Y) specifying horizontal and -vertical margins . Default is 1. - -You can change the shadow thickness of tool bar buttons by setting -`tool-bar-button-relief' to an integer. Default is 3. - -*** Tool-bar clicks with modifiers. - -You can bind commands to clicks with control, shift, meta etc. on -a tool bar item. If - - (define-key global-map [tool-bar shell] - '(menu-item "Shell" shell - :image (image :type xpm :file "shell.xpm"))) - -is the original tool bar item definition, then - - (define-key global-map [tool-bar S-shell] 'some-command) - -makes a binding to run `some-command' for a shifted click on the same -item. - -** Mode line changes. - -*** Mouse-sensitive mode line. - -The mode line can be made mouse-sensitive by displaying strings there -that have a `local-map' text property. There are three ways to display -a string with a `local-map' property in the mode line. - -1. The mode line spec contains a variable whose string value has -a `local-map' text property. - -2. The mode line spec contains a format specifier (e.g. `%12b'), and -that format specifier has a `local-map' property. - -3. The mode line spec contains a list containing `:eval FORM'. FORM -is evaluated. If the result is a string, and that string has a -`local-map' property. - -The same mechanism is used to determine the `face' and `help-echo' -properties of strings in the mode line. See `bindings.el' for an -example. - -*** If a mode line element has the form `(:eval FORM)', FORM is -evaluated and the result is used as mode line element. - -*** You can suppress mode-line display by setting the buffer-local -variable mode-line-format to nil. - -*** A headerline can now be displayed at the top of a window. - -This mode line's contents are controlled by the new variable -`header-line-format' and `default-header-line-format' which are -completely analogous to `mode-line-format' and -`default-mode-line-format'. A value of nil means don't display a top -line. - -The appearance of top mode lines is controlled by the face -`header-line'. - -The function `coordinates-in-window-p' returns `header-line' for a -position in the header-line. - -** Text property `display' - -The `display' text property is used to insert images into text, -replace text with other text, display text in marginal area, and it is -also used to control other aspects of how text displays. The value of -the `display' property should be a display specification, as described -below, or a list or vector containing display specifications. - -*** Replacing text, displaying text in marginal areas - -To replace the text having the `display' property with some other -text, use a display specification of the form `(LOCATION STRING)'. - -If LOCATION is `(margin left-margin)', STRING is displayed in the left -marginal area, if it is `(margin right-margin)', it is displayed in -the right marginal area, and if LOCATION is `(margin nil)' STRING -is displayed in the text. In the latter case you can also use the -simpler form STRING as property value. - -*** Variable width and height spaces - -To display a space of fractional width or height, use a display -specification of the form `(LOCATION STRECH)'. If LOCATION is -`(margin left-margin)', the space is displayed in the left marginal -area, if it is `(margin right-margin)', it is displayed in the right -marginal area, and if LOCATION is `(margin nil)' the space is -displayed in the text. In the latter case you can also use the -simpler form STRETCH as property value. - -The stretch specification STRETCH itself is a list of the form `(space -PROPS)', where PROPS is a property list which can contain the -properties described below. - -The display of the fractional space replaces the display of the -characters having the `display' property. - -- :width WIDTH - -Specifies that the space width should be WIDTH times the normal -character width. WIDTH can be an integer or floating point number. - -- :relative-width FACTOR - -Specifies that the width of the stretch should be computed from the -first character in a group of consecutive characters that have the -same `display' property. The computation is done by multiplying the -width of that character by FACTOR. - -- :align-to HPOS - -Specifies that the space should be wide enough to reach HPOS. The -value HPOS is measured in units of the normal character width. - -Exactly one of the above properties should be used. - -- :height HEIGHT - -Specifies the height of the space, as HEIGHT, measured in terms of the -normal line height. - -- :relative-height FACTOR - -The height of the space is computed as the product of the height -of the text having the `display' property and FACTOR. - -- :ascent ASCENT - -Specifies that ASCENT percent of the height of the stretch should be -used for the ascent of the stretch, i.e. for the part above the -baseline. The value of ASCENT must be a non-negative number less or -equal to 100. - -You should not use both `:height' and `:relative-height' together. - -*** Images - -A display specification for an image has the form `(LOCATION -. IMAGE)', where IMAGE is an image specification. The image replaces, -in the display, the characters having this display specification in -their `display' text property. If LOCATION is `(margin left-margin)', -the image will be displayed in the left marginal area, if it is -`(margin right-margin)' it will be displayed in the right marginal -area, and if LOCATION is `(margin nil)' the image will be displayed in -the text. In the latter case you can also use the simpler form IMAGE -as display specification. - -*** Other display properties - -- (space-width FACTOR) - -Specifies that space characters in the text having that property -should be displayed FACTOR times as wide as normal; FACTOR must be an -integer or float. - -- (height HEIGHT) - -Display text having this property in a font that is smaller or larger. - -If HEIGHT is a list of the form `(+ N)', where N is an integer, that -means to use a font that is N steps larger. If HEIGHT is a list of -the form `(- N)', that means to use a font that is N steps smaller. A -``step'' is defined by the set of available fonts; each size for which -a font is available counts as a step. - -If HEIGHT is a number, that means to use a font that is HEIGHT times -as tall as the frame's default font. - -If HEIGHT is a symbol, it is called as a function with the current -height as argument. The function should return the new height to use. - -Otherwise, HEIGHT is evaluated to get the new height, with the symbol -`height' bound to the current specified font height. - -- (raise FACTOR) - -FACTOR must be a number, specifying a multiple of the current -font's height. If it is positive, that means to display the characters -raised. If it is negative, that means to display them lower down. The -amount of raising or lowering is computed without taking account of the -`height' subproperty. - -*** Conditional display properties - -All display specifications can be conditionalized. If a specification -has the form `(when CONDITION . SPEC)', the specification SPEC applies -only when CONDITION yields a non-nil value when evaluated. During the -evaluation, `object' is bound to the string or buffer having the -conditional display property; `position' and `buffer-position' are -bound to the position within `object' and the buffer position where -the display property was found, respectively. Both positions can be -different when object is a string. - -The normal specification consisting of SPEC only is equivalent to -`(when t . SPEC)'. - -** New menu separator types. - -Emacs now supports more than one menu separator type. Menu items with -item names consisting of dashes only (including zero dashes) are -treated like before. In addition, the following item names are used -to specify other menu separator types. - -- `--no-line' or `--space', or `--:space', or `--:noLine' - -No separator lines are drawn, but a small space is inserted where the -separator occurs. - -- `--single-line' or `--:singleLine' - -A single line in the menu's foreground color. - -- `--double-line' or `--:doubleLine' - -A double line in the menu's foreground color. - -- `--single-dashed-line' or `--:singleDashedLine' - -A single dashed line in the menu's foreground color. - -- `--double-dashed-line' or `--:doubleDashedLine' - -A double dashed line in the menu's foreground color. - -- `--shadow-etched-in' or `--:shadowEtchedIn' - -A single line with 3D sunken appearance. This is the form -displayed for item names consisting of dashes only. - -- `--shadow-etched-out' or `--:shadowEtchedOut' - -A single line with 3D raised appearance. - -- `--shadow-etched-in-dash' or `--:shadowEtchedInDash' - -A single dashed line with 3D sunken appearance. - -- `--shadow-etched-out-dash' or `--:shadowEtchedOutDash' - -A single dashed line with 3D raise appearance. - -- `--shadow-double-etched-in' or `--:shadowDoubleEtchedIn' - -Two lines with 3D sunken appearance. - -- `--shadow-double-etched-out' or `--:shadowDoubleEtchedOut' - -Two lines with 3D raised appearance. - -- `--shadow-double-etched-in-dash' or `--:shadowDoubleEtchedInDash' - -Two dashed lines with 3D sunken appearance. - -- `--shadow-double-etched-out-dash' or `--:shadowDoubleEtchedOutDash' - -Two dashed lines with 3D raised appearance. - -Under LessTif/Motif, the last four separator types are displayed like -the corresponding single-line separators. - -** New frame parameters for scroll bar colors. - -The new frame parameters `scroll-bar-foreground' and -`scroll-bar-background' can be used to change scroll bar colors. -Their value must be either a color name, a string, or nil to specify -that scroll bars should use a default color. For toolkit scroll bars, -default colors are toolkit specific. For non-toolkit scroll bars, the -default background is the background color of the frame, and the -default foreground is black. - -The X resource name of these parameters are `scrollBarForeground' -(class ScrollBarForeground) and `scrollBarBackground' (class -`ScrollBarBackground'). - -Setting these parameters overrides toolkit specific X resource -settings for scroll bar colors. - -** You can set `redisplay-dont-pause' to a non-nil value to prevent -display updates from being interrupted when input is pending. - -** Changing a window's width may now change its window start if it -starts on a continuation line. The new window start is computed based -on the window's new width, starting from the start of the continued -line as the start of the screen line with the minimum distance from -the original window start. - -** The variable `hscroll-step' and the functions -`hscroll-point-visible' and `hscroll-window-column' have been removed -now that proper horizontal scrolling is implemented. - -** Windows can now be made fixed-width and/or fixed-height. - -A window is fixed-size if its buffer has a buffer-local variable -`window-size-fixed' whose value is not nil. A value of `height' makes -windows fixed-height, a value of `width' makes them fixed-width, any -other non-nil value makes them both fixed-width and fixed-height. - -The following code makes all windows displaying the current buffer -fixed-width and fixed-height. - - (set (make-local-variable 'window-size-fixed) t) - -A call to enlarge-window on a window gives an error if that window is -fixed-width and it is tried to change the window's width, or if the -window is fixed-height, and it is tried to change its height. To -change the size of a fixed-size window, bind `window-size-fixed' -temporarily to nil, for example - - (let ((window-size-fixed nil)) - (enlarge-window 10)) - -Likewise, an attempt to split a fixed-height window vertically, -or a fixed-width window horizontally results in a error. - -** The cursor-type frame parameter is now supported on MS-DOS -terminals. When Emacs starts, it by default changes the cursor shape -to a solid box, as it does on Unix. The `cursor-type' frame parameter -overrides this as it does on Unix, except that the bar cursor is -horizontal rather than vertical (since the MS-DOS display doesn't -support a vertical-bar cursor). - - - -* Emacs 20.7 is a bug-fix release with few user-visible changes - -** It is now possible to use CCL-based coding systems for keyboard -input. - -** ange-ftp now handles FTP security extensions, like Kerberos. - -** Rmail has been extended to recognize more forms of digest messages. - -** Now, most coding systems set in keyboard coding system work not -only for character input, but also in incremental search. The -exceptions are such coding systems that handle 2-byte character sets -(e.g euc-kr, euc-jp) and that use ISO's escape sequence -(e.g. iso-2022-jp). They are ignored in incremental search. - -** Support for Macintosh PowerPC-based machines running GNU/Linux has -been added. - - -* Emacs 20.6 is a bug-fix release with one user-visible change - -** Support for ARM-based non-RISCiX machines has been added. - - - -* Emacs 20.5 is a bug-fix release with no user-visible changes. - -** Not new, but not mentioned before: -M-w when Transient Mark mode is enabled disables the mark. - -* Changes in Emacs 20.4 - -** Init file may be called .emacs.el. - -You can now call the Emacs init file `.emacs.el'. -Formerly the name had to be `.emacs'. If you use the name -`.emacs.el', you can byte-compile the file in the usual way. - -If both `.emacs' and `.emacs.el' exist, the latter file -is the one that is used. - -** shell-command, and shell-command-on-region, now return -the exit code of the command (unless it is asynchronous). -Also, you can specify a place to put the error output, -separate from the command's regular output. -Interactively, the variable shell-command-default-error-buffer -says where to put error output; set it to a buffer name. -In calls from Lisp, an optional argument ERROR-BUFFER specifies -the buffer name. - -When you specify a non-nil error buffer (or buffer name), any error -output is inserted before point in that buffer, with \f\n to separate -it from the previous batch of error output. The error buffer is not -cleared, so error output from successive commands accumulates there. - -** Setting the default value of enable-multibyte-characters to nil in -the .emacs file, either explicitly using setq-default, or via Custom, -is now essentially equivalent to using --unibyte: all buffers -created during startup will be made unibyte after loading .emacs. - -** C-x C-f now handles the wildcards * and ? in file names. For -example, typing C-x C-f c*.c RET visits all the files whose names -match c*.c. To visit a file whose name contains * or ?, add the -quoting sequence /: to the beginning of the file name. - -** The M-x commands keep-lines, flush-lines and count-matches -now have the same feature as occur and query-replace: -if the pattern contains any upper case letters, then -they never ignore case. - -** The end-of-line format conversion feature previously mentioned -under `* Emacs 20.1 changes for MS-DOS and MS-Windows' actually -applies to all operating systems. Emacs recognizes from the contents -of a file what convention it uses to separate lines--newline, CRLF, or -just CR--and automatically converts the contents to the normal Emacs -convention (using newline to separate lines) for editing. This is a -part of the general feature of coding system conversion. - -If you subsequently save the buffer, Emacs converts the text back to -the same format that was used in the file before. - -You can turn off end-of-line conversion by setting the variable -`inhibit-eol-conversion' to non-nil, e.g. with Custom in the MULE group. - -** The character set property `prefered-coding-system' has been -renamed to `preferred-coding-system', for the sake of correct spelling. -This is a fairly internal feature, so few programs should be affected. - -** Mode-line display of end-of-line format is changed. -The indication of the end-of-line format of the file visited by a -buffer is now more explicit when that format is not the usual one for -your operating system. For example, the DOS-style end-of-line format -is displayed as "(DOS)" on Unix and GNU/Linux systems. The usual -end-of-line format is still displayed as a single character (colon for -Unix, backslash for DOS and Windows, and forward slash for the Mac). - -The values of the variables eol-mnemonic-unix, eol-mnemonic-dos, -eol-mnemonic-mac, and eol-mnemonic-undecided, which are strings, -control what is displayed in the mode line for each end-of-line -format. You can now customize these variables. - -** In the previous version of Emacs, tar-mode didn't work well if a -filename contained non-ASCII characters. Now this is fixed. Such a -filename is decoded by file-name-coding-system if the default value of -enable-multibyte-characters is non-nil. - -** The command temp-buffer-resize-mode toggles a minor mode -in which temporary buffers (such as help buffers) are given -windows just big enough to hold the whole contents. - -** If you use completion.el, you must now run the function -dynamic-completion-mode to enable it. Just loading the file -doesn't have any effect. - -** In Flyspell mode, the default is now to make just one Ispell process, -not one per buffer. - -** If you use iswitchb but do not call (iswitchb-default-keybindings) to -use the default keybindings, you will need to add the following line: - (add-hook 'minibuffer-setup-hook 'iswitchb-minibuffer-setup) - -** Auto-show mode is no longer enabled just by loading auto-show.el. -To control it, set `auto-show-mode' via Custom or use the -`auto-show-mode' command. - -** Handling of X fonts' ascent/descent parameters has been changed to -avoid redisplay problems. As a consequence, compared with previous -versions the line spacing and frame size now differ with some font -choices, typically increasing by a pixel per line. This change -occurred in version 20.3 but was not documented then. - -** If you select the bar cursor style, it uses the frame's -cursor-color, rather than the cursor foreground pixel. - -** In multibyte mode, Rmail decodes incoming MIME messages using the -character set specified in the message. If you want to disable this -feature, set the variable rmail-decode-mime-charset to nil. - -** Not new, but not mentioned previously in NEWS: when you use #! at -the beginning of a file to make it executable and specify an -interpreter program, Emacs looks on the second line for the -*- mode -and variable specification, as well as on the first line. - -** Support for IBM codepage encoding of non-ASCII characters. - -The new command M-x codepage-setup creates a special coding system -that can be used to convert text between a specific IBM codepage and -one of the character sets built into Emacs which matches that -codepage. For example, codepage 850 corresponds to Latin-1 character -set, codepage 855 corresponds to Cyrillic-ISO character set, etc. - -Windows codepages 1250, 1251 and some others, where Windows deviates -from the corresponding ISO character set, are also supported. - -IBM box-drawing characters and other glyphs which don't have -equivalents in the corresponding ISO character set, are converted to -a character defined by dos-unsupported-char-glyph on MS-DOS, and to -`?' on other systems. - -IBM codepages are widely used on MS-DOS and MS-Windows, so this -feature is most useful on those platforms, but it can also be used on -Unix. - -Emacs compiled for MS-DOS automatically loads the support for the -current codepage when it starts. - -** Mail changes - -*** When mail is sent using compose-mail (C-x m), and if -`mail-send-nonascii' is set to the new default value `mime', -appropriate MIME headers are added. The headers are added only if -non-ASCII characters are present in the body of the mail, and no other -MIME headers are already present. For example, the following three -headers are added if the coding system used in the *mail* buffer is -latin-1: - - MIME-version: 1.0 - Content-type: text/plain; charset=iso-8859-1 - Content-Transfer-Encoding: 8bit - -*** The new variable default-sendmail-coding-system specifies the -default way to encode outgoing mail. This has higher priority than -default-buffer-file-coding-system but has lower priority than -sendmail-coding-system and the local value of -buffer-file-coding-system. - -You should not set this variable manually. Instead, set -sendmail-coding-system to specify a fixed encoding for all outgoing -mail. - -*** When you try to send a message that contains non-ASCII characters, -if the coding system specified by those variables doesn't handle them, -Emacs will ask you to select a suitable coding system while showing a -list of possible coding systems. - -** CC Mode changes - -*** c-default-style can now take an association list that maps major -modes to style names. When this variable is an alist, Java mode no -longer hardcodes a setting to "java" style. See the variable's -docstring for details. - -*** It's now possible to put a list as the offset on a syntactic -symbol. The list is evaluated recursively until a non-nil offset is -found. This is useful to combine several lineup functions to act in a -prioritized order on a single line. However, none of the supplied -lineup functions use this feature currently. - -*** New syntactic symbol catch-clause, which is used on the "catch" and -"finally" lines in try-catch constructs in C++ and Java. - -*** New cleanup brace-catch-brace on c-cleanup-list, which does for -"catch" lines what brace-elseif-brace does for "else if" lines. - -*** The braces of Java anonymous inner classes are treated separately -from the braces of other classes in auto-newline mode. Two new -symbols inexpr-class-open and inexpr-class-close may be used on -c-hanging-braces-alist to control the automatic newlines used for -anonymous classes. - -*** Support for the Pike language added, along with new Pike specific -syntactic symbols: inlambda, lambda-intro-cont - -*** Support for Java anonymous classes via new syntactic symbol -inexpr-class. New syntactic symbol inexpr-statement for Pike -support and gcc-style statements inside expressions. New lineup -function c-lineup-inexpr-block. - -*** New syntactic symbol brace-entry-open which is used in brace lists -(i.e. static initializers) when a list entry starts with an open -brace. These used to be recognized as brace-list-entry's. -c-electric-brace also recognizes brace-entry-open braces -(brace-list-entry's can no longer be electrified). - -*** New command c-indent-line-or-region, not bound by default. - -*** `#' is only electric when typed in the indentation of a line. - -*** Parentheses are now electric (via the new command c-electric-paren) -for auto-reindenting lines when parens are typed. - -*** In "gnu" style, inline-open offset is now set to zero. - -*** Uniform handling of the inclass syntactic symbol. The indentation -associated with it is now always relative to the class opening brace. -This means that the indentation behavior has changed in some -circumstances, but only if you've put anything besides 0 on the -class-open syntactic symbol (none of the default styles do that). - -** Gnus changes. - -*** New functionality for using Gnus as an offline newsreader has been -added. A plethora of new commands and modes have been added. See the -Gnus manual for the full story. - -*** The nndraft backend has returned, but works differently than -before. All Message buffers are now also articles in the nndraft -group, which is created automatically. - -*** `gnus-alter-header-function' can now be used to alter header -values. - -*** `gnus-summary-goto-article' now accept Message-ID's. - -*** A new Message command for deleting text in the body of a message -outside the region: `C-c C-v'. - -*** You can now post to component group in nnvirtual groups with -`C-u C-c C-c'. - -*** `nntp-rlogin-program' -- new variable to ease customization. - -*** `C-u C-c C-c' in `gnus-article-edit-mode' will now inhibit -re-highlighting of the article buffer. - -*** New element in `gnus-boring-article-headers' -- `long-to'. - -*** `M-i' symbolic prefix command. See the section "Symbolic -Prefixes" in the Gnus manual for details. - -*** `L' and `I' in the summary buffer now take the symbolic prefix -`a' to add the score rule to the "all.SCORE" file. - -*** `gnus-simplify-subject-functions' variable to allow greater -control over simplification. - -*** `A T' -- new command for fetching the current thread. - -*** `/ T' -- new command for including the current thread in the -limit. - -*** `M-RET' is a new Message command for breaking cited text. - -*** \\1-expressions are now valid in `nnmail-split-methods'. - -*** The `custom-face-lookup' function has been removed. -If you used this function in your initialization files, you must -rewrite them to use `face-spec-set' instead. - -*** Canceling now uses the current select method. Symbolic prefix -`a' forces normal posting method. - -*** New command to translate M******** sm*rtq**t*s into proper text --- `W d'. - -*** For easier debugging of nntp, you can set `nntp-record-commands' -to a non-nil value. - -*** nntp now uses ~/.authinfo, a .netrc-like file, for controlling -where and how to send AUTHINFO to NNTP servers. - -*** A command for editing group parameters from the summary buffer -has been added. - -*** A history of where mails have been split is available. - -*** A new article date command has been added -- `article-date-iso8601'. - -*** Subjects can be simplified when threading by setting -`gnus-score-thread-simplify'. - -*** A new function for citing in Message has been added -- -`message-cite-original-without-signature'. - -*** `article-strip-all-blank-lines' -- new article command. - -*** A new Message command to kill to the end of the article has -been added. - -*** A minimum adaptive score can be specified by using the -`gnus-adaptive-word-minimum' variable. - -*** The "lapsed date" article header can be kept continually -updated by the `gnus-start-date-timer' command. - -*** Web listserv archives can be read with the nnlistserv backend. - -*** Old dejanews archives can now be read by nnweb. - -*** `gnus-posting-styles' has been re-activated. - -** Changes to TeX and LaTeX mode - -*** The new variable `tex-start-options-string' can be used to give -options for the TeX run. The default value causes TeX to run in -nonstopmode. For an interactive TeX run set it to nil or "". - -*** The command `tex-feed-input' sends input to the Tex Shell. In a -TeX buffer it is bound to the keys C-RET, C-c RET, and C-c C-m (some -of these keys may not work on all systems). For instance, if you run -TeX interactively and if the TeX run stops because of an error, you -can continue it without leaving the TeX buffer by typing C-RET. - -*** The Tex Shell Buffer is now in `compilation-shell-minor-mode'. -All error-parsing commands of the Compilation major mode are available -but bound to keys that don't collide with the shell. Thus you can use -the Tex Shell for command line executions like a usual shell. - -*** The commands `tex-validate-region' and `tex-validate-buffer' check -the matching of braces and $'s. The errors are listed in a *Occur* -buffer and you can use C-c C-c or mouse-2 to go to a particular -mismatch. - -** Changes to RefTeX mode - -*** The table of contents buffer can now also display labels and -file boundaries in addition to sections. Use `l', `i', and `c' keys. - -*** Labels derived from context (the section heading) are now -lowercase by default. To make the label legal in LaTeX, latin-1 -characters will lose their accent. All Mule characters will be -removed from the label. - -*** The automatic display of cross reference information can also use -a window instead of the echo area. See variable `reftex-auto-view-crossref'. - -*** kpsewhich can be used by RefTeX to find TeX and BibTeX files. See the -customization group `reftex-finding-files'. - -*** The option `reftex-bibfile-ignore-list' has been renamed to -`reftex-bibfile-ignore-regexps' and indeed can be fed with regular -expressions. - -*** Multiple Selection buffers are now hidden buffers. - -** New/deleted modes and packages - -*** The package snmp-mode.el provides major modes for editing SNMP and -SNMPv2 MIBs. It has entries on `auto-mode-alist'. - -*** The package sql.el provides a major mode, M-x sql-mode, for -editing SQL files, and M-x sql-interactive-mode for interacting with -SQL interpreters. It has an entry on `auto-mode-alist'. - -*** M-x highlight-changes-mode provides a minor mode displaying buffer -changes with a special face. - -*** ispell4.el has been deleted. It got in the way of ispell.el and -this was hard to fix reliably. It has long been obsolete -- use -Ispell 3.1 and ispell.el. - -* MS-DOS changes in Emacs 20.4 - -** Emacs compiled for MS-DOS now supports MULE features better. -This includes support for display of all ISO 8859-N character sets, -conversion to and from IBM codepage encoding of non-ASCII characters, -and automatic setup of the MULE environment at startup. For details, -check out the section `MS-DOS and MULE' in the manual. - -The MS-DOS installation procedure automatically configures and builds -Emacs with input method support if it finds an unpacked Leim -distribution when the config.bat script is run. - -** Formerly, the value of lpr-command did not affect printing on -MS-DOS unless print-region-function was set to nil, but now it -controls whether an external program is invoked or output is written -directly to a printer port. Similarly, in the previous version of -Emacs, the value of ps-lpr-command did not affect PostScript printing -on MS-DOS unless ps-printer-name was set to something other than a -string (eg. t or `pipe'), but now it controls whether an external -program is used. (These changes were made so that configuration of -printing variables would be almost identical across all platforms.) - -** In the previous version of Emacs, PostScript and non-PostScript -output was piped to external programs, but because most print programs -available for MS-DOS and MS-Windows cannot read data from their standard -input, on those systems the data to be output is now written to a -temporary file whose name is passed as the last argument to the external -program. - -An exception is made for `print', a standard program on Windows NT, -and `nprint', a standard program on Novell Netware. For both of these -programs, the command line is constructed in the appropriate syntax -automatically, using only the value of printer-name or ps-printer-name -as appropriate--the value of the relevant `-switches' variable is -ignored, as both programs have no useful switches. - -** The value of the variable dos-printer (cf. dos-ps-printer), if it has -a value, overrides the value of printer-name (cf. ps-printer-name), on -MS-DOS and MS-Windows only. This has been true since version 20.3, but -was not documented clearly before. - -** All the Emacs games now work on MS-DOS terminals. -This includes Tetris and Snake. - -* Lisp changes in Emacs 20.4 - -** New functions line-beginning-position and line-end-position -return the position of the beginning or end of the current line. -They both accept an optional argument, which has the same -meaning as the argument to beginning-of-line or end-of-line. - -** find-file and allied functions now have an optional argument -WILDCARD. If this is non-nil, they do wildcard processing, -and visit all files that match the wildcard pattern. - -** Changes in the file-attributes function. - -*** The file size returned by file-attributes may be an integer or a float. -It is an integer if the size fits in a Lisp integer, float otherwise. - -*** The inode number returned by file-attributes may be an integer (if -the number fits in a Lisp integer) or a cons cell containing two -integers. - -** The new function directory-files-and-attributes returns a list of -files in a directory and their attributes. It accepts the same -arguments as directory-files and has similar semantics, except that -file names and attributes are returned. - -** The new function file-attributes-lessp is a helper function for -sorting the list generated by directory-files-and-attributes. It -accepts two arguments, each a list of a file name and its attributes. -It compares the file names of each according to string-lessp and -returns the result. - -** The new function file-expand-wildcards expands a wildcard-pattern -to produce a list of existing files that match the pattern. - -** New functions for base64 conversion: - -The function base64-encode-region converts a part of the buffer -into the base64 code used in MIME. base64-decode-region -performs the opposite conversion. Line-breaking is supported -optionally. - -Functions base64-encode-string and base64-decode-string do a similar -job on the text in a string. They return the value as a new string. - -** -The new function process-running-child-p -will tell you if a subprocess has given control of its -terminal to its own child process. - -** interrupt-process and such functions have a new feature: -when the second argument is `lambda', they send a signal -to the running child of the subshell, if any, but if the shell -itself owns its terminal, no signal is sent. - -** There are new widget types `plist' and `alist' which can -be used for customizing variables whose values are plists or alists. - -** easymenu.el now understands `:key-sequence' and `:style button'. -:included is an alias for :visible. - -easy-menu-add-item now understands the values returned by -easy-menu-remove-item and easy-menu-item-present-p. This can be used -to move or copy menu entries. - -** Multibyte editing changes - -*** The definitions of sref and char-bytes are changed. Now, sref is -an alias of aref and char-bytes always returns 1. This change is to -make some Emacs Lisp code which works on 20.2 and earlier also -work on the latest Emacs. Such code uses a combination of sref and -char-bytes in a loop typically as below: - (setq char (sref str idx) - idx (+ idx (char-bytes idx))) -The byte-compiler now warns that this is obsolete. - -If you want to know how many bytes a specific multibyte character -(say, CH) occupies in a multibyte buffer, use this code: - (charset-bytes (char-charset ch)) - -*** In multibyte mode, when you narrow a buffer to some region, and the -region is preceded or followed by non-ASCII codes, inserting or -deleting at the head or the end of the region may signal this error: - - Byte combining across boundary of accessible buffer text inhibited - -This is to avoid some bytes being combined together into a character -across the boundary. - -*** The functions find-charset-region and find-charset-string include -`unknown' in the returned list in the following cases: - o The current buffer or the target string is unibyte and - contains 8-bit characters. - o The current buffer or the target string is multibyte and - contains invalid characters. - -*** The functions decode-coding-region and encode-coding-region remove -text properties of the target region. Ideally, they should correctly -preserve text properties, but for the moment, it's hard. Removing -text properties is better than preserving them in a less-than-correct -way. - -*** prefer-coding-system sets EOL conversion of default coding systems. -If the argument to prefer-coding-system specifies a certain type of -end of line conversion, the default coding systems set by -prefer-coding-system will specify that conversion type for end of line. - -*** The new function thai-compose-string can be used to properly -compose Thai characters in a string. - -** The primitive `define-prefix-command' now takes an optional third -argument NAME, which should be a string. It supplies the menu name -for the created keymap. Keymaps created in order to be displayed as -menus should always use the third argument. - -** The meanings of optional second arguments for read-char, -read-event, and read-char-exclusive are flipped. Now the second -arguments are INHERIT-INPUT-METHOD. These functions use the current -input method (if any) if and only if INHERIT-INPUT-METHOD is non-nil. - -** The new function clear-this-command-keys empties out the contents -of the vector that (this-command-keys) returns. This is useful in -programs that read passwords, to prevent the passwords from echoing -inadvertently as part of the next command in certain cases. - -** The new macro `with-temp-message' displays a temporary message in -the echo area, while executing some Lisp code. Like `progn', it -returns the value of the last form, but it also restores the previous -echo area contents. - - (with-temp-message MESSAGE &rest BODY) - -** The function `require' now takes an optional third argument -NOERROR. If it is non-nil, then there is no error if the -requested feature cannot be loaded. - -** In the function modify-face, an argument of (nil) for the -foreground color, background color or stipple pattern -means to clear out that attribute. - -** The `outer-window-id' frame property of an X frame -gives the window number of the outermost X window for the frame. - -** Temporary buffers made with with-output-to-temp-buffer are now -read-only by default, and normally use the major mode Help mode -unless you put them in some other non-Fundamental mode before the -end of with-output-to-temp-buffer. - -** The new functions gap-position and gap-size return information on -the gap of the current buffer. - -** The new functions position-bytes and byte-to-position provide a way -to convert between character positions and byte positions in the -current buffer. - -** vc.el defines two new macros, `edit-vc-file' and `with-vc-file', to -facilitate working with version-controlled files from Lisp programs. -These macros check out a given file automatically if needed, and check -it back in after any modifications have been made. - -* Installation Changes in Emacs 20.3 - -** The default value of load-path now includes most subdirectories of -the site-specific directories /usr/local/share/emacs/site-lisp and -/usr/local/share/emacs/VERSION/site-lisp, in addition to those -directories themselves. Both immediate subdirectories and -subdirectories multiple levels down are added to load-path. - -Not all subdirectories are included, though. Subdirectories whose -names do not start with a letter or digit are excluded. -Subdirectories named RCS or CVS are excluded. Also, a subdirectory -which contains a file named `.nosearch' is excluded. You can use -these methods to prevent certain subdirectories from being searched. - -Emacs finds these subdirectories and adds them to load-path when it -starts up. While it would be cleaner to find the subdirectories each -time Emacs loads a file, that would be much slower. - -This feature is an incompatible change. If you have stored some Emacs -Lisp files in a subdirectory of the site-lisp directory specifically -to prevent them from being used, you will need to rename the -subdirectory to start with a non-alphanumeric character, or create a -`.nosearch' file in it, in order to continue to achieve the desired -results. - -** Emacs no longer includes an old version of the C preprocessor from -GCC. This was formerly used to help compile Emacs with C compilers -that had limits on the significant length of an identifier, but in -fact we stopped supporting such compilers some time ago. - -* Changes in Emacs 20.3 - -** The new command C-x z (repeat) repeats the previous command -including its argument. If you repeat the z afterward, -it repeats the command additional times; thus, you can -perform many repetitions with one keystroke per repetition. - -** Emacs now supports "selective undo" which undoes only within a -specified region. To do this, set point and mark around the desired -region and type C-u C-x u (or C-u C-_). You can then continue undoing -further, within the same region, by repeating the ordinary undo -command C-x u or C-_. This will keep undoing changes that were made -within the region you originally specified, until either all of them -are undone, or it encounters a change which crosses the edge of that -region. - -In Transient Mark mode, undoing when a region is active requests -selective undo. - -** If you specify --unibyte when starting Emacs, then all buffers are -unibyte, except when a Lisp program specifically creates a multibyte -buffer. Setting the environment variable EMACS_UNIBYTE has the same -effect. The --no-unibyte option overrides EMACS_UNIBYTE and directs -Emacs to run normally in multibyte mode. - -The option --unibyte does not affect the reading of Emacs Lisp files, -though. If you want a Lisp file to be read in unibyte mode, use --*-unibyte: t;-*- on its first line. That will force Emacs to -load that file in unibyte mode, regardless of how Emacs was started. - -** toggle-enable-multibyte-characters no longer has a key binding and -no longer appears in the menu bar. We've realized that changing the -enable-multibyte-characters variable in an existing buffer is -something that most users not do. - -** You can specify a coding system to use for the next cut or paste -operations through the window system with the command C-x RET X. -The coding system can make a difference for communication with other -applications. - -C-x RET x specifies a coding system for all subsequent cutting and -pasting operations. - -** You can specify the printer to use for commands that do printing by -setting the variable `printer-name'. Just what a printer name looks -like depends on your operating system. You can specify a different -printer for the Postscript printing commands by setting -`ps-printer-name'. - -** Emacs now supports on-the-fly spell checking by the means of a -minor mode. It is called M-x flyspell-mode. You don't have to remember -any other special commands to use it, and you will hardly notice it -except when you make a spelling error. Flyspell works by highlighting -incorrect words as soon as they are completed or as soon as the cursor -hits a new word. - -Flyspell mode works with whichever dictionary you have selected for -Ispell in Emacs. In TeX mode, it understands TeX syntax so as not -to be confused by TeX commands. - -You can correct a misspelled word by editing it into something -correct. You can also correct it, or accept it as correct, by -clicking on the word with Mouse-2; that gives you a pop-up menu -of various alternative replacements and actions. - -Flyspell mode also proposes "automatic" corrections. M-TAB replaces -the current misspelled word with a possible correction. If several -corrections are made possible, M-TAB cycles through them in -alphabetical order, or in order of decreasing likelihood if -flyspell-sort-corrections is nil. - -Flyspell mode also flags an error when a word is repeated, if -flyspell-mark-duplications-flag is non-nil. - -** Changes in input method usage. - -Now you can use arrow keys (right, left, down, up) for selecting among -the alternatives just the same way as you do by C-f, C-b, C-n, and C-p -respectively. - -You can use the ENTER key to accept the current conversion. - -If you type TAB to display a list of alternatives, you can select one -of the alternatives with Mouse-2. - -The meaning of the variable `input-method-verbose-flag' is changed so -that you can set it to t, nil, `default', or `complex-only'. - - If the value is nil, extra guidance is never given. - - If the value is t, extra guidance is always given. - - If the value is `complex-only', extra guidance is always given only - when you are using complex input methods such as chinese-py. - - If the value is `default' (this is the default), extra guidance is - given in the following case: - o When you are using a complex input method. - o When you are using a simple input method but not in the minibuffer. - -If you are using Emacs through a very slow line, setting -input-method-verbose-flag to nil or to complex-only is a good choice, -and if you are using an input method you are not familiar with, -setting it to t is helpful. - -The old command select-input-method is now called set-input-method. - -In the language environment "Korean", you can use the following -keys: - Shift-SPC toggle-korean-input-method - C-F9 quail-hangul-switch-symbol-ksc - F9 quail-hangul-switch-hanja -These key bindings are canceled when you switch to another language -environment. - -** The minibuffer history of file names now records the specified file -names, not the entire minibuffer input. For example, if the -minibuffer starts out with /usr/foo/, you might type in /etc/passwd to -get - - /usr/foo//etc/passwd - -which stands for the file /etc/passwd. - -Formerly, this used to put /usr/foo//etc/passwd in the history list. -Now this puts just /etc/passwd in the history list. - -** If you are root, Emacs sets backup-by-copying-when-mismatch to t -at startup, so that saving a file will be sure to preserve -its owner and group. - -** find-func.el can now also find the place of definition of Emacs -Lisp variables in user-loaded libraries. - -** C-x r t (string-rectangle) now deletes the existing rectangle -contents before inserting the specified string on each line. - -** There is a new command delete-whitespace-rectangle -which deletes whitespace starting from a particular column -in all the lines on a rectangle. The column is specified -by the left edge of the rectangle. - -** You can now store a number into a register with C-u NUMBER C-x r n REG, -increment it by INC with C-u INC C-x r + REG (to increment by one, omit -C-u INC), and insert it in the buffer with C-x r g REG. This is useful -for writing keyboard macros. - -** The new command M-x speedbar displays a frame in which directories, -files, and tags can be displayed, manipulated, and jumped to. The -frame defaults to 20 characters in width, and is the same height as -the frame that it was started from. Some major modes define -additional commands for the speedbar, including Rmail, GUD/GDB, and -info. - -** query-replace-regexp is now bound to C-M-%. - -** In Transient Mark mode, when the region is active, M-x -query-replace and the other replace commands now operate on the region -contents only. - -** M-x write-region, when used interactively, now asks for -confirmation before overwriting an existing file. When you call -the function from a Lisp program, a new optional argument CONFIRM -says whether to ask for confirmation in this case. - -** If you use find-file-literally and the file is already visited -non-literally, the command asks you whether to revisit the file -literally. If you say no, it signals an error. - -** Major modes defined with the "derived mode" feature -now use the proper name for the mode hook: WHATEVER-mode-hook. -Formerly they used the name WHATEVER-mode-hooks, but that is -inconsistent with Emacs conventions. - -** shell-command-on-region (and shell-command) reports success or -failure if the command produces no output. - -** Set focus-follows-mouse to nil if your window system or window -manager does not transfer focus to another window when you just move -the mouse. - -** mouse-menu-buffer-maxlen has been renamed to -mouse-buffer-menu-maxlen to be consistent with the other related -function and variable names. - -** The new variable auto-coding-alist specifies coding systems for -reading specific files. This has higher priority than -file-coding-system-alist. - -** If you set the variable unibyte-display-via-language-environment to -t, then Emacs displays non-ASCII characters are displayed by -converting them to the equivalent multibyte characters according to -the current language environment. As a result, they are displayed -according to the current fontset. - -** C-q's handling of codes in the range 0200 through 0377 is changed. - -The codes in the range 0200 through 0237 are inserted as one byte of -that code regardless of the values of nonascii-translation-table and -nonascii-insert-offset. - -For the codes in the range 0240 through 0377, if -enable-multibyte-characters is non-nil and nonascii-translation-table -nor nonascii-insert-offset can't convert them to valid multibyte -characters, they are converted to Latin-1 characters. - -** If you try to find a file that is not read-accessible, you now get -an error, rather than an empty buffer and a warning. - -** In the minibuffer history commands M-r and M-s, an upper case -letter in the regular expression forces case-sensitive search. - -** In the *Help* buffer, cross-references to commands and variables -are inferred and hyperlinked. Use C-h m in Help mode for the relevant -command keys. - -** M-x apropos-command, with a prefix argument, no longer looks for -user option variables--instead it looks for noninteractive functions. - -Meanwhile, the command apropos-variable normally searches for -user option variables; with a prefix argument, it looks at -all variables that have documentation. - -** When you type a long line in the minibuffer, and the minibuffer -shows just one line, automatically scrolling works in a special way -that shows you overlap with the previous line of text. The variable -minibuffer-scroll-overlap controls how many characters of overlap -it should show; the default is 20. - -Meanwhile, Resize Minibuffer mode is still available; in that mode, -the minibuffer grows taller (up to a point) as needed to show the whole -of your input. - -** The new command M-x customize-changed-options lets you customize -all the options whose meanings or default values have changed in -recent Emacs versions. You specify a previous Emacs version number as -argument, and the command creates a customization buffer showing all -the customizable options which were changed since that version. -Newly added options are included as well. - -If you don't specify a particular version number argument, -then the customization buffer shows all the customizable options -for which Emacs versions of changes are recorded. - -This function is also bound to the Changed Options entry in the -Customize menu. - -** When you run M-x grep with a prefix argument, it figures out -the tag around point and puts that into the default grep command. - -** The new command M-* (pop-tag-mark) pops back through a history of -buffer positions from which M-. or other tag-finding commands were -invoked. - -** The new variable comment-padding specifies the number of spaces -that `comment-region' will insert before the actual text of the comment. -The default is 1. - -** In Fortran mode the characters `.', `_' and `$' now have symbol -syntax, not word syntax. Fortran mode now supports `imenu' and has -new commands fortran-join-line (M-^) and fortran-narrow-to-subprogram -(C-x n d). M-q can be used to fill a statement or comment block -sensibly. - -** GUD now supports jdb, the Java debugger, and pdb, the Python debugger. - -** If you set the variable add-log-keep-changes-together to a non-nil -value, the command `C-x 4 a' will automatically notice when you make -two entries in one day for one file, and combine them. - -** You can use the command M-x diary-mail-entries to mail yourself a -reminder about upcoming diary entries. See the documentation string -for a sample shell script for calling this function automatically -every night. - -** Desktop changes - -*** All you need to do to enable use of the Desktop package, is to set -the variable desktop-enable to t with Custom. - -*** Minor modes are now restored. Which minor modes are restored -and how modes are restored is controlled by `desktop-minor-mode-table'. - -** There is no need to do anything special, now, to enable Gnus to -read and post multi-lingual articles. - -** Outline mode has now support for showing hidden outlines when -doing an isearch. In order for this to happen search-invisible should -be set to open (the default). If an isearch match is inside a hidden -outline the outline is made visible. If you continue pressing C-s and -the match moves outside the formerly invisible outline, the outline is -made invisible again. - -** Mail reading and sending changes - -*** The Rmail e command now switches to displaying the whole header of -the message before it lets you edit the message. This is so that any -changes you make in the header will not be lost if you subsequently -toggle. - -*** The w command in Rmail, which writes the message body into a file, -now works in the summary buffer as well. (The command to delete the -summary buffer is now Q.) The default file name for the w command, if -the message has no subject, is stored in the variable -rmail-default-body-file. - -*** Most of the commands and modes that operate on mail and netnews no -longer depend on the value of mail-header-separator. Instead, they -handle whatever separator the buffer happens to use. - -*** If you set mail-signature to a value which is not t, nil, or a string, -it should be an expression. When you send a message, this expression -is evaluated to insert the signature. - -*** The new Lisp library feedmail.el (version 8) enhances processing of -outbound email messages. It works in coordination with other email -handling packages (e.g., rmail, VM, gnus) and is responsible for -putting final touches on messages and actually submitting them for -transmission. Users of the emacs program "fakemail" might be -especially interested in trying feedmail. - -feedmail is not enabled by default. See comments at the top of -feedmail.el for set-up instructions. Among the bigger features -provided by feedmail are: - -**** you can park outgoing messages into a disk-based queue and -stimulate sending some or all of them later (handy for laptop users); -there is also a queue for draft messages - -**** you can get one last look at the prepped outbound message and -be prompted for confirmation - -**** does smart filling of address headers - -**** can generate a MESSAGE-ID: line and a DATE: line; the date can be -the time the message was written or the time it is being sent; this -can make FCC copies more closely resemble copies that recipients get - -**** you can specify an arbitrary function for actually transmitting -the message; included in feedmail are interfaces for /bin/[r]mail, -/usr/lib/sendmail, and Emacs Lisp smtpmail; it's easy to write a new -function for something else (10-20 lines of Lisp code). - -** Dired changes - -*** The Dired function dired-do-toggle, which toggles marked and unmarked -files, is now bound to "t" instead of "T". - -*** dired-at-point has been added to ffap.el. It allows one to easily -run Dired on the directory name at point. - -*** Dired has a new command: %g. It searches the contents of -files in the directory and marks each file that contains a match -for a specified regexp. - -** VC Changes - -*** New option vc-ignore-vc-files lets you turn off version control -conveniently. - -*** VC Dired has been completely rewritten. It is now much -faster, especially for CVS, and works very similar to ordinary -Dired. - -VC Dired is invoked by typing C-x v d and entering the name of the -directory to display. By default, VC Dired gives you a recursive -listing of all files at or below the given directory which are -currently locked (for CVS, all files not up-to-date are shown). - -You can change the listing format by setting vc-dired-recurse to nil, -then it shows only the given directory, and you may also set -vc-dired-terse-display to nil, then it shows all files under version -control plus the names of any subdirectories, so that you can type `i' -on such lines to insert them manually, as in ordinary Dired. - -All Dired commands operate normally in VC Dired, except for `v', which -is redefined as the version control prefix. That means you may type -`v l', `v =' etc. to invoke `vc-print-log', `vc-diff' and the like on -the file named in the current Dired buffer line. `v v' invokes -`vc-next-action' on this file, or on all files currently marked. - -The new command `v t' (vc-dired-toggle-terse-mode) allows you to -toggle between terse display (only locked files) and full display (all -VC files plus subdirectories). There is also a special command, -`* l', to mark all files currently locked. - -Giving a prefix argument to C-x v d now does the same thing as in -ordinary Dired: it allows you to supply additional options for the ls -command in the minibuffer, to fine-tune VC Dired's output. - -*** Under CVS, if you merge changes from the repository into a working -file, and CVS detects conflicts, VC now offers to start an ediff -session to resolve them. - -Alternatively, you can use the new command `vc-resolve-conflicts' to -resolve conflicts in a file at any time. It works in any buffer that -contains conflict markers as generated by rcsmerge (which is what CVS -uses as well). - -*** You can now transfer changes between branches, using the new -command vc-merge (C-x v m). It is implemented for RCS and CVS. When -you invoke it in a buffer under version-control, you can specify -either an entire branch or a pair of versions, and the changes on that -branch or between the two versions are merged into the working file. -If this results in any conflicts, they may be resolved interactively, -using ediff. - -** Changes in Font Lock - -*** The face and variable previously known as font-lock-reference-face -are now called font-lock-constant-face to better reflect their typical -use for highlighting constants and labels. (Its face properties are -unchanged.) The variable font-lock-reference-face remains for now for -compatibility reasons, but its value is font-lock-constant-face. - -** Frame name display changes - -*** The command set-frame-name lets you set the name of the current -frame. You can use the new command select-frame-by-name to select and -raise a frame; this is mostly useful on character-only terminals, or -when many frames are invisible or iconified. - -*** On character-only terminal (not a window system), changing the -frame name is now reflected on the mode line and in the Buffers/Frames -menu. - -** Comint (subshell) changes - -*** In Comint modes, the commands to kill, stop or interrupt a -subjob now also kill pending input. This is for compatibility -with ordinary shells, where the signal characters do this. - -*** There are new commands in Comint mode. - -C-c C-x fetches the "next" line from the input history; -that is, the line after the last line you got. -You can use this command to fetch successive lines, one by one. - -C-c SPC accumulates lines of input. More precisely, it arranges to -send the current line together with the following line, when you send -the following line. - -C-c C-a if repeated twice consecutively now moves to the process mark, -which separates the pending input from the subprocess output and the -previously sent input. - -C-c M-r now runs comint-previous-matching-input-from-input; -it searches for a previous command, using the current pending input -as the search string. - -*** New option compilation-scroll-output can be set to scroll -automatically in compilation-mode windows. - -** C mode changes - -*** Multiline macros are now handled, both as they affect indentation, -and as recognized syntax. New syntactic symbol cpp-macro-cont is -assigned to second and subsequent lines of a multiline macro -definition. - -*** A new style "user" which captures all non-hook-ified -(i.e. top-level) .emacs file variable settings and customizations. -Style "cc-mode" is an alias for "user" and is deprecated. "gnu" -style is still the default however. - -*** "java" style now conforms to Sun's JDK coding style. - -*** There are new commands c-beginning-of-defun, c-end-of-defun which -are alternatives which you could bind to C-M-a and C-M-e if you prefer -them. They do not have key bindings by default. - -*** New and improved implementations of M-a (c-beginning-of-statement) -and M-e (c-end-of-statement). - -*** C++ namespace blocks are supported, with new syntactic symbols -namespace-open, namespace-close, and innamespace. - -*** File local variable settings of c-file-style and c-file-offsets -makes the style variables local to that buffer only. - -*** New indentation functions c-lineup-close-paren, -c-indent-one-line-block, c-lineup-dont-change. - -*** Improvements (hopefully!) to the way CC Mode is loaded. You -should now be able to do a (require 'cc-mode) to get the entire -package loaded properly for customization in your .emacs file. A new -variable c-initialize-on-load controls this and is t by default. - -** Changes to hippie-expand. - -*** New customization variable `hippie-expand-dabbrev-skip-space'. If -non-nil, trailing spaces may be included in the abbreviation to search for, -which then gives the same behavior as the original `dabbrev-expand'. - -*** New customization variable `hippie-expand-dabbrev-as-symbol'. If -non-nil, characters of syntax '_' is considered part of the word when -expanding dynamically. - -*** New customization variable `hippie-expand-no-restriction'. If -non-nil, narrowed buffers are widened before they are searched. - -*** New customization variable `hippie-expand-only-buffers'. If -non-empty, buffers searched are restricted to the types specified in -this list. Useful for example when constructing new special-purpose -expansion functions with `make-hippie-expand-function'. - -*** Text properties of the expansion are no longer copied. - -** Changes in BibTeX mode. - -*** Any titleword matching a regexp in the new variable -bibtex-autokey-titleword-ignore (case sensitive) is ignored during -automatic key generation. This replaces variable -bibtex-autokey-titleword-first-ignore, which only checked for matches -against the first word in the title. - -*** Autokey generation now uses all words from the title, not just -capitalized words. To avoid conflicts with existing customizations, -bibtex-autokey-titleword-ignore is set up such that words starting with -lowerkey characters will still be ignored. Thus, if you want to use -lowercase words from the title, you will have to overwrite the -bibtex-autokey-titleword-ignore standard setting. - -*** Case conversion of names and title words for automatic key -generation is more flexible. Variable bibtex-autokey-preserve-case is -replaced by bibtex-autokey-titleword-case-convert and -bibtex-autokey-name-case-convert. - -** Changes in vcursor.el. - -*** Support for character terminals is available: there is a new keymap -and the vcursor will appear as an arrow between buffer text. A -variable `vcursor-interpret-input' allows input from the vcursor to be -entered exactly as if typed. Numerous functions, including -`vcursor-compare-windows', have been rewritten to improve consistency -in the selection of windows and corresponding keymaps. - -*** vcursor options can now be altered with M-x customize under the -Editing group once the package is loaded. - -*** Loading vcursor now does not define keys by default, as this is -generally a bad side effect. Use M-x customize to set -vcursor-key-bindings to t to restore the old behavior. - -*** vcursor-auto-disable can be `copy', which turns off copying from the -vcursor, but doesn't disable it, after any non-vcursor command. - -** Ispell changes. - -*** You can now spell check comments and strings in the current -buffer with M-x ispell-comments-and-strings. Comments and strings -are identified by syntax tables in effect. - -*** Generic region skipping implemented. -A single buffer can be broken into a number of regions where text will -and will not be checked. The definitions of the regions can be user -defined. New applications and improvements made available by this -include: - - o URLs are automatically skipped - o EMail message checking is vastly improved. - -*** Ispell can highlight the erroneous word even on non-window terminals. - -** Changes to RefTeX mode - -RefTeX has been updated in order to make it more usable with very -large projects (like a several volume math book). The parser has been -re-written from scratch. To get maximum speed from RefTeX, check the -section `Optimizations' in the manual. - -*** New recursive parser. - -The old version of RefTeX created a single large buffer containing the -entire multifile document in order to parse the document. The new -recursive parser scans the individual files. - -*** Parsing only part of a document. - -Reparsing of changed document parts can now be made faster by enabling -partial scans. To use this feature, read the documentation string of -the variable `reftex-enable-partial-scans' and set the variable to t. - - (setq reftex-enable-partial-scans t) - -*** Storing parsing information in a file. - -This can improve startup times considerably. To turn it on, use - - (setq reftex-save-parse-info t) - -*** Using multiple selection buffers - -If the creation of label selection buffers is too slow (this happens -for large documents), you can reuse these buffers by setting - - (setq reftex-use-multiple-selection-buffers t) - -*** References to external documents. - -The LaTeX package `xr' allows to cross-reference labels in external -documents. RefTeX can provide information about the external -documents as well. To use this feature, set up the \externaldocument -macros required by the `xr' package and rescan the document with -RefTeX. The external labels can then be accessed with the `x' key in -the selection buffer provided by `reftex-reference' (bound to `C-c )'). -The `x' key also works in the table of contents buffer. - -*** Many more labeled LaTeX environments are recognized by default. - -The built-in command list now covers all the standard LaTeX commands, -and all of the major packages included in the LaTeX distribution. - -Also, RefTeX now understands the \appendix macro and changes -the enumeration of sections in the *toc* buffer accordingly. - -*** Mouse support for selection and *toc* buffers - -The mouse can now be used to select items in the selection and *toc* -buffers. See also the new option `reftex-highlight-selection'. - -*** New keymaps for selection and table of contents modes. - -The selection processes for labels and citation keys, and the table of -contents buffer now have their own keymaps: `reftex-select-label-map', -`reftex-select-bib-map', `reftex-toc-map'. The selection processes -have a number of new keys predefined. In particular, TAB lets you -enter a label with completion. Check the on-the-fly help (press `?' -at the selection prompt) or read the Info documentation to find out -more. - -*** Support for the varioref package - -The `v' key in the label selection buffer toggles \ref versus \vref. - -*** New hooks - -Three new hooks can be used to redefine the way labels, references, -and citations are created. These hooks are -`reftex-format-label-function', `reftex-format-ref-function', -`reftex-format-cite-function'. - -*** Citations outside LaTeX - -The command `reftex-citation' may also be used outside LaTeX (e.g. in -a mail buffer). See the Info documentation for details. - -*** Short context is no longer fontified. - -The short context in the label menu no longer copies the -fontification from the text in the buffer. If you prefer it to be -fontified, use - - (setq reftex-refontify-context t) - -** file-cache-minibuffer-complete now accepts a prefix argument. -With a prefix argument, it does not try to do completion of -the file name within its directory; it only checks for other -directories that contain the same file name. - -Thus, given the file name Makefile, and assuming that a file -Makefile.in exists in the same directory, ordinary -file-cache-minibuffer-complete will try to complete Makefile to -Makefile.in and will therefore never look for other directories that -have Makefile. A prefix argument tells it not to look for longer -names such as Makefile.in, so that instead it will look for other -directories--just as if the name were already complete in its present -directory. - -** New modes and packages - -*** There is a new alternative major mode for Perl, Cperl mode. -It has many more features than Perl mode, and some people prefer -it, but some do not. - -*** There is a new major mode, M-x vhdl-mode, for editing files of VHDL -code. - -*** M-x which-function-mode enables a minor mode that displays the -current function name continuously in the mode line, as you move -around in a buffer. - -Which Function mode is effective in major modes which support Imenu. - -*** Gametree is a major mode for editing game analysis trees. The author -uses it for keeping notes about his postal Chess games, but it should -be helpful for other two-player games as well, as long as they have an -established system of notation similar to Chess. - -*** The new minor mode checkdoc-minor-mode provides Emacs Lisp -documentation string checking for style and spelling. The style -guidelines are found in the Emacs Lisp programming manual. - -*** The net-utils package makes some common networking features -available in Emacs. Some of these functions are wrappers around -system utilities (ping, nslookup, etc.); others are implementations of -simple protocols (finger, whois) in Emacs Lisp. There are also -functions to make simple connections to TCP/IP ports for debugging and -the like. - -*** highlight-changes-mode is a minor mode that uses colors to -identify recently changed parts of the buffer text. - -*** The new package `midnight' lets you specify things to be done -within Emacs at midnight--by default, kill buffers that you have not -used in a considerable time. To use this feature, customize -the user option `midnight-mode' to t. - -*** The file generic-x.el defines a number of simple major modes. - - apache-generic-mode: For Apache and NCSA httpd configuration files - samba-generic-mode: Samba configuration files - fvwm-generic-mode: For fvwm initialization files - x-resource-generic-mode: For X resource files - hosts-generic-mode: For hosts files (.rhosts, /etc/hosts, etc.) - mailagent-rules-generic-mode: For mailagent .rules files - javascript-generic-mode: For JavaScript files - vrml-generic-mode: For VRML files - java-manifest-generic-mode: For Java MANIFEST files - java-properties-generic-mode: For Java property files - mailrc-generic-mode: For .mailrc files - - Platform-specific modes: - - prototype-generic-mode: For Solaris/Sys V prototype files - pkginfo-generic-mode: For Solaris/Sys V pkginfo files - alias-generic-mode: For C shell alias files - inf-generic-mode: For MS-Windows INF files - ini-generic-mode: For MS-Windows INI files - reg-generic-mode: For MS-Windows Registry files - bat-generic-mode: For MS-Windows BAT scripts - rc-generic-mode: For MS-Windows Resource files - rul-generic-mode: For InstallShield scripts - -* Lisp changes in Emacs 20.3 since the Emacs Lisp Manual was published - -** If you want a Lisp file to be read in unibyte mode, -use -*-unibyte: t;-*- on its first line. -That will force Emacs to read that file in unibyte mode. -Otherwise, the file will be loaded and byte-compiled in multibyte mode. - -Thus, each lisp file is read in a consistent way regardless of whether -you started Emacs with --unibyte, so that a Lisp program gives -consistent results regardless of how Emacs was started. - -** The new function assoc-default is useful for searching an alist, -and using a default value if the key is not found there. You can -specify a comparison predicate, so this function is useful for -searching comparing a string against an alist of regular expressions. - -** The functions unibyte-char-to-multibyte and -multibyte-char-to-unibyte convert between unibyte and multibyte -character codes, in a way that is appropriate for the current language -environment. - -** The functions read-event, read-char and read-char-exclusive now -take two optional arguments. PROMPT, if non-nil, specifies a prompt -string. SUPPRESS-INPUT-METHOD, if non-nil, says to disable the -current input method for reading this one event. - -** Two new variables print-escape-nonascii and print-escape-multibyte -now control whether to output certain characters as -backslash-sequences. print-escape-nonascii applies to single-byte -non-ASCII characters; print-escape-multibyte applies to multibyte -characters. Both of these variables are used only when printing -in readable fashion (prin1 uses them, princ does not). - -* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published - -** Compiled Emacs Lisp files made with the modified "MBSK" version -of Emacs 20.2 do not work in Emacs 20.3. - -** Buffer positions are now measured in characters, as they were -in Emacs 19 and before. This means that (forward-char 1) -always increases point by 1. - -The function chars-in-region now just subtracts its arguments. It is -considered obsolete. The function char-boundary-p has been deleted. - -See below for additional changes relating to multibyte characters. - -** defcustom, defface and defgroup now accept the keyword `:version'. -Use this to specify in which version of Emacs a certain variable's -default value changed. For example, - - (defcustom foo-max 34 "*Maximum number of foo's allowed." - :type 'integer - :group 'foo - :version "20.3") - - (defgroup foo-group nil "The foo group." - :version "20.3") - -If an entire new group is added or the variables in it have the -default values changed, then just add a `:version' to that group. It -is recommended that new packages added to the distribution contain a -`:version' in the top level group. - -This information is used to control the customize-changed-options command. - -** It is now an error to change the value of a symbol whose name -starts with a colon--if it is interned in the standard obarray. - -However, setting such a symbol to its proper value, which is that -symbol itself, is not an error. This is for the sake of programs that -support previous Emacs versions by explicitly setting these variables -to themselves. - -If you set the variable keyword-symbols-constant-flag to nil, -this error is suppressed, and you can set these symbols to any -values whatever. - -** There is a new debugger command, R. -It evaluates an expression like e, but saves the result -in the buffer *Debugger-record*. - -** Frame-local variables. - -You can now make a variable local to various frames. To do this, call -the function make-variable-frame-local; this enables frames to have -local bindings for that variable. - -These frame-local bindings are actually frame parameters: you create a -frame-local binding in a specific frame by calling -modify-frame-parameters and specifying the variable name as the -parameter name. - -Buffer-local bindings take precedence over frame-local bindings. -Thus, if the current buffer has a buffer-local binding, that binding is -active; otherwise, if the selected frame has a frame-local binding, -that binding is active; otherwise, the default binding is active. - -It would not be hard to implement window-local bindings, but it is not -clear that this would be very useful; windows tend to come and go in a -very transitory fashion, so that trying to produce any specific effect -through a window-local binding would not be very robust. - -** `sregexq' and `sregex' are two new functions for constructing -"symbolic regular expressions." These are Lisp expressions that, when -evaluated, yield conventional string-based regexps. The symbolic form -makes it easier to construct, read, and maintain complex patterns. -See the documentation in sregex.el. - -** parse-partial-sexp's return value has an additional element which -is used to pass information along if you pass it to another call to -parse-partial-sexp, starting its scan where the first call ended. -The contents of this field are not yet finalized. - -** eval-region now accepts a fourth optional argument READ-FUNCTION. -If it is non-nil, that function is used instead of `read'. - -** unload-feature by default removes the feature's functions from -known hooks to avoid trouble, but a package providing FEATURE can -define a hook FEATURE-unload-hook to be run by unload-feature instead. - -** read-from-minibuffer no longer returns the argument DEFAULT-VALUE -when the user enters empty input. It now returns the null string, as -it did in Emacs 19. The default value is made available in the -history via M-n, but it is not applied here as a default. - -The other, more specialized minibuffer-reading functions continue to -return the default value (not the null string) when the user enters -empty input. - -** The new variable read-buffer-function controls which routine to use -for selecting buffers. For example, if you set this variable to -`iswitchb-read-buffer', iswitchb will be used to read buffer names. -Other functions can also be used if they accept the same arguments as -`read-buffer' and return the selected buffer name as a string. - -** The new function read-passwd reads a password from the terminal, -echoing a period for each character typed. It takes three arguments: -a prompt string, a flag which says "read it twice to make sure", and a -default password to use if the user enters nothing. - -** The variable fill-nobreak-predicate gives major modes a way to -specify not to break a line at certain places. Its value is a -function which is called with no arguments, with point located at the -place where a break is being considered. If the function returns -non-nil, then the line won't be broken there. - -** window-end now takes an optional second argument, UPDATE. -If this is non-nil, then the function always returns an accurate -up-to-date value for the buffer position corresponding to the -end of the window, even if this requires computation. - -** other-buffer now takes an optional argument FRAME -which specifies which frame's buffer list to use. -If it is nil, that means use the selected frame's buffer list. - -** The new variable buffer-display-time, always local in every buffer, -holds the value of (current-time) as of the last time that a window -was directed to display this buffer. - -** It is now meaningful to compare two window-configuration objects -with `equal'. Two window-configuration objects are equal if they -describe equivalent arrangements of windows, in the same frame--in -other words, if they would give the same results if passed to -set-window-configuration. - -** compare-window-configurations is a new function that compares two -window configurations loosely. It ignores differences in saved buffer -positions and scrolling, and considers only the structure and sizes of -windows and the choice of buffers to display. - -** The variable minor-mode-overriding-map-alist allows major modes to -override the key bindings of a minor mode. The elements of this alist -look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP). - -If the VARIABLE in an element of minor-mode-overriding-map-alist has a -non-nil value, the paired KEYMAP is active, and totally overrides the -map (if any) specified for the same variable in minor-mode-map-alist. - -minor-mode-overriding-map-alist is automatically local in all buffers, -and it is meant to be set by major modes. - -** The function match-string-no-properties is like match-string -except that it discards all text properties from the result. - -** The function load-average now accepts an optional argument -USE-FLOATS. If it is non-nil, the load average values are returned as -floating point numbers, rather than as integers to be divided by 100. - -** The new variable temporary-file-directory specifies the directory -to use for creating temporary files. The default value is determined -in a reasonable way for your operating system; on GNU and Unix systems -it is based on the TMP and TMPDIR environment variables. - -** Menu changes - -*** easymenu.el now uses the new menu item format and supports the -keywords :visible and :filter. The existing keyword :keys is now -better supported. - -The variable `easy-menu-precalculate-equivalent-keybindings' controls -a new feature which calculates keyboard equivalents for the menu when -you define the menu. The default is t. If you rarely use menus, you -can set the variable to nil to disable this precalculation feature; -then the calculation is done only if you use the menu bar. - -*** A new format for menu items is supported. - -In a keymap, a key binding that has the format - (STRING . REAL-BINDING) or (STRING HELP-STRING . REAL-BINDING) -defines a menu item. Now a menu item definition may also be a list that -starts with the symbol `menu-item'. - -The format is: - (menu-item ITEM-NAME) or - (menu-item ITEM-NAME REAL-BINDING . ITEM-PROPERTY-LIST) -where ITEM-NAME is an expression which evaluates to the menu item -string, and ITEM-PROPERTY-LIST has the form of a property list. -The supported properties include - -:enable FORM Evaluate FORM to determine whether the - item is enabled. -:visible FORM Evaluate FORM to determine whether the - item should appear in the menu. -:filter FILTER-FN - FILTER-FN is a function of one argument, - which will be REAL-BINDING. - It should return a binding to use instead. -:keys DESCRIPTION - DESCRIPTION is a string that describes an equivalent keyboard - binding for REAL-BINDING. DESCRIPTION is expanded with - `substitute-command-keys' before it is used. -:key-sequence KEY-SEQUENCE - KEY-SEQUENCE is a key-sequence for an equivalent - keyboard binding. -:key-sequence nil - This means that the command normally has no - keyboard equivalent. -:help HELP HELP is the extra help string (not currently used). -:button (TYPE . SELECTED) - TYPE is :toggle or :radio. - SELECTED is a form, to be evaluated, and its - value says whether this button is currently selected. - -Buttons are at the moment only simulated by prefixes in the menu. -Eventually ordinary X-buttons may be supported. - -(menu-item ITEM-NAME) defines unselectable item. - -** New event types - -*** The new event type `mouse-wheel' is generated by a wheel on a -mouse (such as the MS Intellimouse). The event contains a delta that -corresponds to the amount and direction that the wheel is rotated, -which is typically used to implement a scroll or zoom. The format is: - - (mouse-wheel POSITION DELTA) - -where POSITION is a list describing the position of the event in the -same format as a mouse-click event, and DELTA is a signed number -indicating the number of increments by which the wheel was rotated. A -negative DELTA indicates that the wheel was rotated backwards, towards -the user, and a positive DELTA indicates that the wheel was rotated -forward, away from the user. - -As of now, this event type is generated only on MS Windows. - -*** The new event type `drag-n-drop' is generated when a group of -files is selected in an application outside of Emacs, and then dragged -and dropped onto an Emacs frame. The event contains a list of -filenames that were dragged and dropped, which are then typically -loaded into Emacs. The format is: - - (drag-n-drop POSITION FILES) - -where POSITION is a list describing the position of the event in the -same format as a mouse-click event, and FILES is the list of filenames -that were dragged and dropped. - -As of now, this event type is generated only on MS Windows. - -** Changes relating to multibyte characters. - -*** The variable enable-multibyte-characters is now read-only; -any attempt to set it directly signals an error. The only way -to change this value in an existing buffer is with set-buffer-multibyte. - -*** In a string constant, `\ ' now stands for "nothing at all". You -can use it to terminate a hex escape which is followed by a character -that could otherwise be read as part of the hex escape. - -*** String indices are now measured in characters, as they were -in Emacs 19 and before. - -The function chars-in-string has been deleted. -The function concat-chars has been renamed to `string'. - -*** The function set-buffer-multibyte sets the flag in the current -buffer that says whether the buffer uses multibyte representation or -unibyte representation. If the argument is nil, it selects unibyte -representation. Otherwise it selects multibyte representation. - -This function does not change the contents of the buffer, viewed -as a sequence of bytes. However, it does change the contents -viewed as characters; a sequence of two bytes which is treated as -one character when the buffer uses multibyte representation -will count as two characters using unibyte representation. - -This function sets enable-multibyte-characters to record which -representation is in use. It also adjusts various data in the buffer -(including its markers, overlays and text properties) so that they are -consistent with the new representation. - -*** string-make-multibyte takes a string and converts it to multibyte -representation. Most of the time, you don't need to care -about the representation, because Emacs converts when necessary; -however, it makes a difference when you compare strings. - -The conversion of non-ASCII characters works by adding the value of -nonascii-insert-offset to each character, or by translating them -using the table nonascii-translation-table. - -*** string-make-unibyte takes a string and converts it to unibyte -representation. Most of the time, you don't need to care about the -representation, but it makes a difference when you compare strings. - -The conversion from multibyte to unibyte representation -loses information; the only time Emacs performs it automatically -is when inserting a multibyte string into a unibyte buffer. - -*** string-as-multibyte takes a string, and returns another string -which contains the same bytes, but treats them as multibyte. - -*** string-as-unibyte takes a string, and returns another string -which contains the same bytes, but treats them as unibyte. - -*** The new function compare-strings lets you compare -portions of two strings. Unibyte strings are converted to multibyte, -so that a unibyte string can match a multibyte string. -You can specify whether to ignore case or not. - -*** assoc-ignore-case now uses compare-strings so that -it can treat unibyte and multibyte strings as equal. - -*** Regular expression operations and buffer string searches now -convert the search pattern to multibyte or unibyte to accord with the -buffer or string being searched. - -One consequence is that you cannot always use \200-\377 inside of -[...] to match all non-ASCII characters. This does still work when -searching or matching a unibyte buffer or string, but not when -searching or matching a multibyte string. Unfortunately, there is no -obvious choice of syntax to use within [...] for that job. But, what -you want is just to match all non-ASCII characters, the regular -expression [^\0-\177] works for it. - -*** Structure of coding system changed. - -All coding systems (including aliases and subsidiaries) are named -by symbols; the symbol's `coding-system' property is a vector -which defines the coding system. Aliases share the same vector -as the principal name, so that altering the contents of this -vector affects the principal name and its aliases. You can define -your own alias name of a coding system by the function -define-coding-system-alias. - -The coding system definition includes a property list of its own. Use -the new functions `coding-system-get' and `coding-system-put' to -access such coding system properties as post-read-conversion, -pre-write-conversion, character-translation-table-for-decode, -character-translation-table-for-encode, mime-charset, and -safe-charsets. For instance, (coding-system-get 'iso-latin-1 -'mime-charset) gives the corresponding MIME-charset parameter -`iso-8859-1'. - -Among the coding system properties listed above, safe-charsets is new. -The value of this property is a list of character sets which this -coding system can correctly encode and decode. For instance: -(coding-system-get 'iso-latin-1 'safe-charsets) => (ascii latin-iso8859-1) - -Here, "correctly encode" means that the encoded character sets can -also be handled safely by systems other than Emacs as far as they -are capable of that coding system. Though, Emacs itself can encode -the other character sets and read it back correctly. - -*** The new function select-safe-coding-system can be used to find a -proper coding system for encoding the specified region or string. -This function requires a user interaction. - -*** The new functions find-coding-systems-region and -find-coding-systems-string are helper functions used by -select-safe-coding-system. They return a list of all proper coding -systems to encode a text in some region or string. If you don't want -a user interaction, use one of these functions instead of -select-safe-coding-system. - -*** The explicit encoding and decoding functions, such as -decode-coding-region and encode-coding-string, now set -last-coding-system-used to reflect the actual way encoding or decoding -was done. - -*** The new function detect-coding-with-language-environment can be -used to detect a coding system of text according to priorities of -coding systems used by some specific language environment. - -*** The functions detect-coding-region and detect-coding-string always -return a list if the arg HIGHEST is nil. Thus, if only ASCII -characters are found, they now return a list of single element -`undecided' or its subsidiaries. - -*** The new functions coding-system-change-eol-conversion and -coding-system-change-text-conversion can be used to get a different -coding system than what specified only in how end-of-line or text is -converted. - -*** The new function set-selection-coding-system can be used to set a -coding system for communicating with other X clients. - -*** The function `map-char-table' now passes as argument only valid -character codes, plus generic characters that stand for entire -character sets or entire subrows of a character set. In other words, -each time `map-char-table' calls its FUNCTION argument, the key value -either will be a valid individual character code, or will stand for a -range of characters. - -*** The new function `char-valid-p' can be used for checking whether a -Lisp object is a valid character code or not. - -*** The new function `charset-after' returns a charset of a character -in the current buffer at position POS. - -*** Input methods are now implemented using the variable -input-method-function. If this is non-nil, its value should be a -function; then, whenever Emacs reads an input event that is a printing -character with no modifier bits, it calls that function, passing the -event as an argument. Often this function will read more input, first -binding input-method-function to nil. - -The return value should be a list of the events resulting from input -method processing. These events will be processed sequentially as -input, before resorting to unread-command-events. Events returned by -the input method function are not passed to the input method function, -not even if they are printing characters with no modifier bits. - -The input method function is not called when reading the second and -subsequent events of a key sequence. - -*** You can customize any language environment by using -set-language-environment-hook and exit-language-environment-hook. - -The hook `exit-language-environment-hook' should be used to undo -customizations that you made with set-language-environment-hook. For -instance, if you set up a special key binding for a specific language -environment by set-language-environment-hook, you should set up -exit-language-environment-hook to restore the normal key binding. - -* Changes in Emacs 20.1 - -** Emacs has a new facility for customization of its many user -options. It is called M-x customize. With this facility you can look -at the many user options in an organized way; they are grouped into a -tree structure. - -M-x customize also knows what sorts of values are legitimate for each -user option and ensures that you don't use invalid values. - -With M-x customize, you can set options either for the present Emacs -session or permanently. (Permanent settings are stored automatically -in your .emacs file.) - -** Scroll bars are now on the left side of the window. -You can change this with M-x customize-option scroll-bar-mode. - -** The mode line no longer includes the string `Emacs'. -This makes more space in the mode line for other information. - -** When you select a region with the mouse, it is highlighted -immediately afterward. At that time, if you type the DELETE key, it -kills the region. - -The BACKSPACE key, and the ASCII character DEL, do not do this; they -delete the character before point, as usual. - -** In an incremental search the whole current match is highlighted -on terminals which support this. (You can disable this feature -by setting search-highlight to nil.) - -** In the minibuffer, in some cases, you can now use M-n to -insert the default value into the minibuffer as text. In effect, -the default value (if the minibuffer routines know it) is tacked -onto the history "in the future". (The more normal use of the -history list is to use M-p to insert minibuffer input used in the -past.) - -** In Text mode, now only blank lines separate paragraphs. -This makes it possible to get the full benefit of Adaptive Fill mode -in Text mode, and other modes derived from it (such as Mail mode). -TAB in Text mode now runs the command indent-relative; this -makes a practical difference only when you use indented paragraphs. - -As a result, the old Indented Text mode is now identical to Text mode, -and is an alias for it. - -If you want spaces at the beginning of a line to start a paragraph, -use the new mode, Paragraph Indent Text mode. - -** Scrolling changes - -*** Scroll commands to scroll a whole screen now preserve the screen -position of the cursor, if scroll-preserve-screen-position is non-nil. - -In this mode, if you scroll several screens back and forth, finishing -on the same screen where you started, the cursor goes back to the line -where it started. - -*** If you set scroll-conservatively to a small number, then when you -move point a short distance off the screen, Emacs will scroll the -screen just far enough to bring point back on screen, provided that -does not exceed `scroll-conservatively' lines. - -*** The new variable scroll-margin says how close point can come to the -top or bottom of a window. It is a number of screen lines; if point -comes within that many lines of the top or bottom of the window, Emacs -recenters the window. - -** International character set support (MULE) - -Emacs now supports a wide variety of international character sets, -including European variants of the Latin alphabet, as well as Chinese, -Devanagari (Hindi and Marathi), Ethiopian, Greek, IPA, Japanese, -Korean, Lao, Russian, Thai, Tibetan, and Vietnamese scripts. These -features have been merged from the modified version of Emacs known as -MULE (for "MULti-lingual Enhancement to GNU Emacs") - -Users of these scripts have established many more-or-less standard -coding systems for storing files. Emacs uses a single multibyte -character encoding within Emacs buffers; it can translate from a wide -variety of coding systems when reading a file and can translate back -into any of these coding systems when saving a file. - -Keyboards, even in the countries where these character sets are used, -generally don't have keys for all the characters in them. So Emacs -supports various "input methods", typically one for each script or -language, to make it possible to type them. - -The Emacs internal multibyte encoding represents a non-ASCII -character as a sequence of bytes in the range 0200 through 0377. - -The new prefix key C-x RET is used for commands that pertain -to multibyte characters, coding systems, and input methods. - -You can disable multibyte character support as follows: - - (setq-default enable-multibyte-characters nil) - -Calling the function standard-display-european turns off multibyte -characters, unless you specify a non-nil value for the second -argument, AUTO. This provides compatibility for people who are -already using standard-display-european to continue using unibyte -characters for their work until they want to change. - -*** Input methods - -An input method is a kind of character conversion which is designed -specifically for interactive input. In Emacs, typically each language -has its own input method (though sometimes several languages which use -the same characters can share one input method). Some languages -support several input methods. - -The simplest kind of input method works by mapping ASCII letters into -another alphabet. This is how the Greek and Russian input methods -work. - -A more powerful technique is composition: converting sequences of -characters into one letter. Many European input methods use -composition to produce a single non-ASCII letter from a sequence which -consists of a letter followed by diacritics. For example, a' is one -sequence of two characters that might be converted into a single -letter. - -The input methods for syllabic scripts typically use mapping followed -by conversion. The input methods for Thai and Korean work this way. -First, letters are mapped into symbols for particular sounds or tone -marks; then, sequences of these which make up a whole syllable are -mapped into one syllable sign--most often a "composite character". - -None of these methods works very well for Chinese and Japanese, so -they are handled specially. First you input a whole word using -phonetic spelling; then, after the word is in the buffer, Emacs -converts it into one or more characters using a large dictionary. - -Since there is more than one way to represent a phonetically spelled -word using Chinese characters, Emacs can only guess which one to use; -typically these input methods give you a way to say "guess again" if -the first guess is wrong. - -*** The command C-x RET m (toggle-enable-multibyte-characters) -turns multibyte character support on or off for the current buffer. - -If multibyte character support is turned off in a buffer, then each -byte is a single character, even codes 0200 through 0377--exactly as -they did in Emacs 19.34. This includes the features for support for -the European characters, ISO Latin-1 and ISO Latin-2. - -However, there is no need to turn off multibyte character support to -use ISO Latin-1 or ISO Latin-2; the Emacs multibyte character set -includes all the characters in these character sets, and Emacs can -translate automatically to and from either one. - -*** Visiting a file in unibyte mode. - -Turning off multibyte character support in the buffer after visiting a -file with multibyte code conversion will display the multibyte -sequences already in the buffer, byte by byte. This is probably not -what you want. - -If you want to edit a file of unibyte characters (Latin-1, for -example), you can do it by specifying `no-conversion' as the coding -system when reading the file. This coding system also turns off -multibyte characters in that buffer. - -If you turn off multibyte character support entirely, this turns off -character conversion as well. - -*** Displaying international characters on X Windows. - -A font for X typically displays just one alphabet or script. -Therefore, displaying the entire range of characters Emacs supports -requires using many fonts. - -Therefore, Emacs now supports "fontsets". Each fontset is a -collection of fonts, each assigned to a range of character codes. - -A fontset has a name, like a font. Individual fonts are defined by -the X server; fontsets are defined within Emacs itself. But once you -have defined a fontset, you can use it in a face or a frame just as -you would use a font. - -If a fontset specifies no font for a certain character, or if it -specifies a font that does not exist on your system, then it cannot -display that character. It will display an empty box instead. - -The fontset height and width are determined by the ASCII characters -(that is, by the font in the fontset which is used for ASCII -characters). - -*** Defining fontsets. - -Emacs does not use any fontset by default. Its default font is still -chosen as in previous versions. You can tell Emacs to use a fontset -with the `-fn' option or the `Font' X resource. - -Emacs creates a standard fontset automatically according to the value -of standard-fontset-spec. This fontset's short name is -`fontset-standard'. Bold, italic, and bold-italic variants of the -standard fontset are created automatically. - -If you specify a default ASCII font with the `Font' resource or `-fn' -argument, a fontset is generated from it. This works by replacing the -FOUNDARY, FAMILY, ADD_STYLE, and AVERAGE_WIDTH fields of the font name -with `*' then using this to specify a fontset. This fontset's short -name is `fontset-startup'. - -Emacs checks resources of the form Fontset-N where N is 0, 1, 2... -The resource value should have this form: - FONTSET-NAME, [CHARSET-NAME:FONT-NAME]... -FONTSET-NAME should have the form of a standard X font name, except: - * most fields should be just the wild card "*". - * the CHARSET_REGISTRY field should be "fontset" - * the CHARSET_ENCODING field can be any nickname of the fontset. -The construct CHARSET-NAME:FONT-NAME can be repeated any number -of times; each time specifies the font for one character set. -CHARSET-NAME should be the name of a character set, and FONT-NAME -should specify an actual font to use for that character set. - -Each of these fontsets has an alias which is made from the -last two font name fields, CHARSET_REGISTRY and CHARSET_ENCODING. -You can refer to the fontset by that alias or by its full name. - -For any character sets that you don't mention, Emacs tries to choose a -font by substituting into FONTSET-NAME. For instance, with the -following resource, - Emacs*Fontset-0: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24 -the font for ASCII is generated as below: - -*-fixed-medium-r-normal-*-24-*-ISO8859-1 -Here is the substitution rule: - Change CHARSET_REGISTRY and CHARSET_ENCODING to that of the charset - defined in the variable x-charset-registries. For instance, ASCII has - the entry (ascii . "ISO8859-1") in this variable. Then, reduce - sequences of wild cards -*-...-*- with a single wildcard -*-. - (This is to prevent use of auto-scaled fonts.) - -The function which processes the fontset resource value to create the -fontset is called create-fontset-from-fontset-spec. You can also call -that function explicitly to create a fontset. - -With the X resource Emacs.Font, you can specify a fontset name just -like an actual font name. But be careful not to specify a fontset -name in a wildcard resource like Emacs*Font--that tries to specify the -fontset for other purposes including menus, and they cannot handle -fontsets. - -*** The command M-x set-language-environment sets certain global Emacs -defaults for a particular choice of language. - -Selecting a language environment typically specifies a default input -method and which coding systems to recognize automatically when -visiting files. However, it does not try to reread files you have -already visited; the text in those buffers is not affected. The -language environment may also specify a default choice of coding -system for new files that you create. - -It makes no difference which buffer is current when you use -set-language-environment, because these defaults apply globally to the -whole Emacs session. - -For example, M-x set-language-environment RET Latin-1 RET -chooses the Latin-1 character set. In the .emacs file, you can do this -with (set-language-environment "Latin-1"). - -*** The command C-x RET f (set-buffer-file-coding-system) -specifies the file coding system for the current buffer. This -specifies what sort of character code translation to do when saving -the file. As an argument, you must specify the name of one of the -coding systems that Emacs supports. - -*** The command C-x RET c (universal-coding-system-argument) -lets you specify a coding system when you read or write a file. -This command uses the minibuffer to read a coding system name. -After you exit the minibuffer, the specified coding system -is used for *the immediately following command*. - -So if the immediately following command is a command to read or -write a file, it uses the specified coding system for that file. - -If the immediately following command does not use the coding system, -then C-x RET c ultimately has no effect. - -For example, C-x RET c iso-8859-1 RET C-x C-f temp RET -visits the file `temp' treating it as ISO Latin-1. - -*** You can specify the coding system for a file using the -*- -construct. Include `coding: CODINGSYSTEM;' inside the -*-...-*- -to specify use of coding system CODINGSYSTEM. You can also -specify the coding system in a local variable list at the end -of the file. - -*** The command C-x RET t (set-terminal-coding-system) specifies -the coding system for terminal output. If you specify a character -code for terminal output, all characters output to the terminal are -translated into that character code. - -This feature is useful for certain character-only terminals built in -various countries to support the languages of those countries. - -By default, output to the terminal is not translated at all. - -*** The command C-x RET k (set-keyboard-coding-system) specifies -the coding system for keyboard input. - -Character code translation of keyboard input is useful for terminals -with keys that send non-ASCII graphic characters--for example, -some terminals designed for ISO Latin-1 or subsets of it. - -By default, keyboard input is not translated at all. - -Character code translation of keyboard input is similar to using an -input method, in that both define sequences of keyboard input that -translate into single characters. However, input methods are designed -to be convenient for interactive use, while the code translations are -designed to work with terminals. - -*** The command C-x RET p (set-buffer-process-coding-system) -specifies the coding system for input and output to a subprocess. -This command applies to the current buffer; normally, each subprocess -has its own buffer, and thus you can use this command to specify -translation to and from a particular subprocess by giving the command -in the corresponding buffer. - -By default, process input and output are not translated at all. - -*** The variable file-name-coding-system specifies the coding system -to use for encoding file names before operating on them. -It is also used for decoding file names obtained from the system. - -*** The command C-\ (toggle-input-method) activates or deactivates -an input method. If no input method has been selected before, the -command prompts for you to specify the language and input method you -want to use. - -C-u C-\ (select-input-method) lets you switch to a different input -method. C-h C-\ (or C-h I) describes the current input method. - -*** Some input methods remap the keyboard to emulate various keyboard -layouts commonly used for particular scripts. How to do this -remapping properly depends on your actual keyboard layout. To specify -which layout your keyboard has, use M-x quail-set-keyboard-layout. - -*** The command C-h C (describe-coding-system) displays -the coding systems currently selected for various purposes, plus -related information. - -*** The command C-h h (view-hello-file) displays a file called -HELLO, which has examples of text in many languages, using various -scripts. - -*** The command C-h L (describe-language-support) displays -information about the support for a particular language. -You specify the language as an argument. - -*** The mode line now contains a letter or character that identifies -the coding system used in the visited file. It normally follows the -first dash. - -A dash indicates the default state of affairs: no code conversion -(except CRLF => newline if appropriate). `=' means no conversion -whatsoever. The ISO 8859 coding systems are represented by digits -1 through 9. Other coding systems are represented by letters: - - A alternativnyj (Russian) - B big5 (Chinese) - C cn-gb-2312 (Chinese) - C iso-2022-cn (Chinese) - D in-is13194-devanagari (Indian languages) - E euc-japan (Japanese) - I iso-2022-cjk or iso-2022-ss2 (Chinese, Japanese, Korean) - J junet (iso-2022-7) or old-jis (iso-2022-jp-1978-irv) (Japanese) - K euc-korea (Korean) - R koi8 (Russian) - Q tibetan - S shift_jis (Japanese) - T lao - T tis620 (Thai) - V viscii or vscii (Vietnamese) - i iso-2022-lock (Chinese, Japanese, Korean) - k iso-2022-kr (Korean) - v viqr (Vietnamese) - z hz (Chinese) - -When you are using a character-only terminal (not a window system), -two additional characters appear in between the dash and the file -coding system. These two characters describe the coding system for -keyboard input, and the coding system for terminal output. - -*** The new variable rmail-file-coding-system specifies the code -conversion to use for RMAIL files. The default value is nil. - -When you read mail with Rmail, each message is decoded automatically -into Emacs' internal format. This has nothing to do with -rmail-file-coding-system. That variable controls reading and writing -Rmail files themselves. - -*** The new variable sendmail-coding-system specifies the code -conversion for outgoing mail. The default value is nil. - -Actually, there are three different ways of specifying the coding system -for sending mail: - -- If you use C-x RET f in the mail buffer, that takes priority. -- Otherwise, if you set sendmail-coding-system non-nil, that specifies it. -- Otherwise, the default coding system for new files is used, - if that is non-nil. That comes from your language environment. -- Otherwise, Latin-1 is used. - -*** The command C-h t (help-with-tutorial) accepts a prefix argument -to specify the language for the tutorial file. Currently, English, -Japanese, Korean and Thai are supported. We welcome additional -translations. - -** An easy new way to visit a file with no code or format conversion -of any kind: Use M-x find-file-literally. There is also a command -insert-file-literally which inserts a file into the current buffer -without any conversion. - -** C-q's handling of octal character codes is changed. -You can now specify any number of octal digits. -RET terminates the digits and is discarded; -any other non-digit terminates the digits and is then used as input. - -** There are new commands for looking up Info documentation for -functions, variables and file names used in your programs. - -Type M-x info-lookup-symbol to look up a symbol in the buffer at point. -Type M-x info-lookup-file to look up a file in the buffer at point. - -Precisely which Info files are used to look it up depends on the major -mode. For example, in C mode, the GNU libc manual is used. - -** M-TAB in most programming language modes now runs the command -complete-symbol. This command performs completion on the symbol name -in the buffer before point. - -With a numeric argument, it performs completion based on the set of -symbols documented in the Info files for the programming language that -you are using. - -With no argument, it does completion based on the current tags tables, -just like the old binding of M-TAB (complete-tag). - -** File locking works with NFS now. - -The lock file for FILENAME is now a symbolic link named .#FILENAME, -in the same directory as FILENAME. - -This means that collision detection between two different machines now -works reasonably well; it also means that no file server or directory -can become a bottleneck. - -The new method does have drawbacks. It means that collision detection -does not operate when you edit a file in a directory where you cannot -create new files. Collision detection also doesn't operate when the -file server does not support symbolic links. But these conditions are -rare, and the ability to have collision detection while using NFS is -so useful that the change is worth while. - -When Emacs or a system crashes, this may leave behind lock files which -are stale. So you may occasionally get warnings about spurious -collisions. When you determine that the collision is spurious, just -tell Emacs to go ahead anyway. - -** If you wish to use Show Paren mode to display matching parentheses, -it is no longer sufficient to load paren.el. Instead you must call -show-paren-mode. - -** If you wish to use Delete Selection mode to replace a highlighted -selection when you insert new text, it is no longer sufficient to load -delsel.el. Instead you must call the function delete-selection-mode. - -** If you wish to use Partial Completion mode to complete partial words -within symbols or filenames, it is no longer sufficient to load -complete.el. Instead you must call the function partial-completion-mode. - -** If you wish to use uniquify to rename buffers for you, -it is no longer sufficient to load uniquify.el. You must also -set uniquify-buffer-name-style to one of the non-nil legitimate values. - -** Changes in View mode. - -*** Several new commands are available in View mode. -Do H in view mode for a list of commands. - -*** There are two new commands for entering View mode: -view-file-other-frame and view-buffer-other-frame. - -*** Exiting View mode does a better job of restoring windows to their -previous state. - -*** New customization variable view-scroll-auto-exit. If non-nil, -scrolling past end of buffer makes view mode exit. - -*** New customization variable view-exits-all-viewing-windows. If -non-nil, view-mode will at exit restore all windows viewing buffer, -not just the selected window. - -*** New customization variable view-read-only. If non-nil, visiting a -read-only file automatically enters View mode, and toggle-read-only -turns View mode on or off. - -*** New customization variable view-remove-frame-by-deleting controls -how to remove a not needed frame at view mode exit. If non-nil, -delete the frame, if nil make an icon of it. - -** C-x v l, the command to print a file's version control log, -now positions point at the entry for the file's current branch version. - -** C-x v =, the command to compare a file with the last checked-in version, -has a new feature. If the file is currently not locked, so that it is -presumably identical to the last checked-in version, the command now asks -which version to compare with. - -** When using hideshow.el, incremental search can temporarily show hidden -blocks if a match is inside the block. - -The block is hidden again if the search is continued and the next match -is outside the block. By customizing the variable -isearch-hide-immediately you can choose to hide all the temporarily -shown blocks only when exiting from incremental search. - -By customizing the variable hs-isearch-open you can choose what kind -of blocks to temporarily show during isearch: comment blocks, code -blocks, all of them or none. - -** The new command C-x 4 0 (kill-buffer-and-window) kills the -current buffer and deletes the selected window. It asks for -confirmation first. - -** C-x C-w, which saves the buffer into a specified file name, -now changes the major mode according to that file name. -However, the mode will not be changed if -(1) a local variables list or the `-*-' line specifies a major mode, or -(2) the current major mode is a "special" mode, - not suitable for ordinary files, or -(3) the new file name does not particularly specify any mode. - -This applies to M-x set-visited-file-name as well. - -However, if you set change-major-mode-with-file-name to nil, then -these commands do not change the major mode. - -** M-x occur changes. - -*** If the argument to M-x occur contains upper case letters, -it performs a case-sensitive search. - -*** In the *Occur* buffer made by M-x occur, -if you type g or M-x revert-buffer, this repeats the search -using the same regular expression and the same buffer as before. - -** In Transient Mark mode, the region in any one buffer is highlighted -in just one window at a time. At first, it is highlighted in the -window where you set the mark. The buffer's highlighting remains in -that window unless you select to another window which shows the same -buffer--then the highlighting moves to that window. - -** The feature to suggest key bindings when you use M-x now operates -after the command finishes. The message suggesting key bindings -appears temporarily in the echo area. The previous echo area contents -come back after a few seconds, in case they contain useful information. - -** Each frame now independently records the order for recently -selected buffers, so that the default for C-x b is now based on the -buffers recently selected in the selected frame. - -** Outline mode changes. - -*** Outline mode now uses overlays (this is the former noutline.el). - -*** Incremental searches skip over invisible text in Outline mode. - -** When a minibuffer window is active but not the selected window, if -you try to use the minibuffer, you used to get a nested minibuffer. -Now, this not only gives an error, it also cancels the minibuffer that -was already active. - -The motive for this change is so that beginning users do not -unknowingly move away from minibuffers, leaving them active, and then -get confused by it. - -If you want to be able to have recursive minibuffers, you must -set enable-recursive-minibuffers to non-nil. - -** Changes in dynamic abbrevs. - -*** Expanding dynamic abbrevs with M-/ is now smarter about case -conversion. If the expansion has mixed case not counting the first -character, and the abbreviation matches the beginning of the expansion -including case, then the expansion is copied verbatim. - -The expansion is also copied verbatim if the abbreviation itself has -mixed case. And using SPC M-/ to copy an additional word always -copies it verbatim except when the previous copied word is all caps. - -*** The values of `dabbrev-case-replace' and `dabbrev-case-fold-search' -are no longer Lisp expressions. They have simply three possible -values. - -`dabbrev-case-replace' has these three values: nil (don't preserve -case), t (do), or `case-replace' (do like M-x query-replace). -`dabbrev-case-fold-search' has these three values: nil (don't ignore -case), t (do), or `case-fold-search' (do like search). - -** Minibuffer history lists are truncated automatically now to a -certain length. The variable history-length specifies how long they -can be. The default value is 30. - -** Changes in Mail mode. - -*** The key C-x m no longer runs the `mail' command directly. -Instead, it runs the command `compose-mail', which invokes the mail -composition mechanism you have selected with the variable -`mail-user-agent'. The default choice of user agent is -`sendmail-user-agent', which gives behavior compatible with the old -behavior. - -C-x 4 m now runs compose-mail-other-window, and C-x 5 m runs -compose-mail-other-frame. - -*** While composing a reply to a mail message, from Rmail, you can use -the command C-c C-r to cite just the region from the message you are -replying to. This copies the text which is the selected region in the -buffer that shows the original message. - -*** The command C-c C-i inserts a file at the end of the message, -with separator lines around the contents. - -*** The command M-x expand-mail-aliases expands all mail aliases -in suitable mail headers. Emacs automatically extracts mail alias -definitions from your mail alias file (e.g., ~/.mailrc). You do not -need to expand mail aliases yourself before sending mail. - -*** New features in the mail-complete command. - -**** The mail-complete command now inserts the user's full name, -for local users or if that is known. The variable mail-complete-style -controls the style to use, and whether to do this at all. -Its values are like those of mail-from-style. - -**** The variable mail-passwd-command lets you specify a shell command -to run to fetch a set of password-entries that add to the ones in -/etc/passwd. - -**** The variable mail-passwd-file now specifies a list of files to read -to get the list of user ids. By default, one file is used: -/etc/passwd. - -** You can "quote" a file name to inhibit special significance of -special syntax, by adding `/:' to the beginning. Thus, if you have a -directory named `/foo:', you can prevent it from being treated as a -reference to a remote host named `foo' by writing it as `/:/foo:'. - -Emacs uses this new construct automatically when necessary, such as -when you start it with a working directory whose name might otherwise -be taken to be magic. - -** There is a new command M-x grep-find which uses find to select -files to search through, and grep to scan them. The output is -available in a Compile mode buffer, as with M-x grep. - -M-x grep now uses the -e option if the grep program supports that. -(-e prevents problems if the search pattern starts with a dash.) - -** In Dired, the & command now flags for deletion the files whose names -suggest they are probably not needed in the long run. - -In Dired, * is now a prefix key for mark-related commands. - -new key dired.el binding old key -------- ---------------- ------- - * c dired-change-marks c - * m dired-mark m - * * dired-mark-executables * (binding deleted) - * / dired-mark-directories / (binding deleted) - * @ dired-mark-symlinks @ (binding deleted) - * u dired-unmark u - * DEL dired-unmark-backward DEL - * ? dired-unmark-all-files C-M-? - * ! dired-unmark-all-marks - * % dired-mark-files-regexp % m - * C-n dired-next-marked-file M-} - * C-p dired-prev-marked-file M-{ - -** Rmail changes. - -*** When Rmail cannot convert your incoming mail into Babyl format, it -saves the new mail in the file RMAILOSE.n, where n is an integer -chosen to make a unique name. This way, Rmail will not keep crashing -each time you run it. - -*** In Rmail, the variable rmail-summary-line-count-flag now controls -whether to include the line count in the summary. Non-nil means yes. - -*** In Rmail summary buffers, d and C-d (the commands to delete -messages) now take repeat counts as arguments. A negative argument -means to move in the opposite direction. - -*** In Rmail, the t command now takes an optional argument which lets -you specify whether to show the message headers in full or pruned. - -*** In Rmail, the new command w (rmail-output-body-to-file) writes -just the body of the current message into a file, without the headers. -It takes the file name from the message subject, by default, but you -can edit that file name in the minibuffer before it is actually used -for output. - -** Gnus changes. - -*** nntp.el has been totally rewritten in an asynchronous fashion. - -*** Article prefetching functionality has been moved up into -Gnus. - -*** Scoring can now be performed with logical operators like -`and', `or', `not', and parent redirection. - -*** Article washing status can be displayed in the -article mode line. - -*** gnus.el has been split into many smaller files. - -*** Suppression of duplicate articles based on Message-ID. - -(setq gnus-suppress-duplicates t) - -*** New variables for specifying what score and adapt files -are to be considered home score and adapt files. See -`gnus-home-score-file' and `gnus-home-adapt-files'. - -*** Groups can inherit group parameters from parent topics. - -*** Article editing has been revamped and is now usable. - -*** Signatures can be recognized in more intelligent fashions. -See `gnus-signature-separator' and `gnus-signature-limit'. - -*** Summary pick mode has been made to look more nn-like. -Line numbers are displayed and the `.' command can be -used to pick articles. - -*** Commands for moving the .newsrc.eld from one server to -another have been added. - - `M-x gnus-change-server' - -*** A way to specify that "uninteresting" fields be suppressed when -generating lines in buffers. - -*** Several commands in the group buffer can be undone with -`C-M-_'. - -*** Scoring can be done on words using the new score type `w'. - -*** Adaptive scoring can be done on a Subject word-by-word basis: - - (setq gnus-use-adaptive-scoring '(word)) - -*** Scores can be decayed. - - (setq gnus-decay-scores t) - -*** Scoring can be performed using a regexp on the Date header. The -Date is normalized to compact ISO 8601 format first. - -*** A new command has been added to remove all data on articles from -the native server. - - `M-x gnus-group-clear-data-on-native-groups' - -*** A new command for reading collections of documents -(nndoc with nnvirtual on top) has been added -- `C-M-d'. - -*** Process mark sets can be pushed and popped. - -*** A new mail-to-news backend makes it possible to post -even when the NNTP server doesn't allow posting. - -*** A new backend for reading searches from Web search engines -(DejaNews, Alta Vista, InReference) has been added. - - Use the `G w' command in the group buffer to create such - a group. - -*** Groups inside topics can now be sorted using the standard -sorting functions, and each topic can be sorted independently. - - See the commands under the `T S' submap. - -*** Subsets of the groups can be sorted independently. - - See the commands under the `G P' submap. - -*** Cached articles can be pulled into the groups. - - Use the `Y c' command. - -*** Score files are now applied in a more reliable order. - -*** Reports on where mail messages end up can be generated. - - `M-x nnmail-split-history' - -*** More hooks and functions have been added to remove junk -from incoming mail before saving the mail. - - See `nnmail-prepare-incoming-header-hook'. - -*** The nnml mail backend now understands compressed article files. - -*** To enable Gnus to read/post multi-lingual articles, you must execute -the following code, for instance, in your .emacs. - - (add-hook 'gnus-startup-hook 'gnus-mule-initialize) - -Then, when you start Gnus, it will decode non-ASCII text automatically -and show appropriate characters. (Note: if you are using gnus-mime -from the SEMI package, formerly known as TM, you should NOT add this -hook to gnus-startup-hook; gnus-mime has its own method of handling -this issue.) - -Since it is impossible to distinguish all coding systems -automatically, you may need to specify a choice of coding system for a -particular news group. This can be done by: - - (gnus-mule-add-group NEWSGROUP 'CODING-SYSTEM) - -Here NEWSGROUP should be a string which names a newsgroup or a tree -of newsgroups. If NEWSGROUP is "XXX.YYY", all news groups under -"XXX.YYY" (including "XXX.YYY.ZZZ") will use the specified coding -system. CODING-SYSTEM specifies which coding system to use (for both -for reading and posting). - -CODING-SYSTEM can also be a cons cell of the form - (READ-CODING-SYSTEM . POST-CODING-SYSTEM) -Then READ-CODING-SYSTEM is used when you read messages from the -newsgroups, while POST-CODING-SYSTEM is used when you post messages -there. - -Emacs knows the right coding systems for certain newsgroups by -default. Here are some of these default settings: - - (gnus-mule-add-group "fj" 'iso-2022-7) - (gnus-mule-add-group "alt.chinese.text" 'hz-gb-2312) - (gnus-mule-add-group "alt.hk" 'hz-gb-2312) - (gnus-mule-add-group "alt.chinese.text.big5" 'cn-big5) - (gnus-mule-add-group "soc.culture.vietnamese" '(nil . viqr)) - -When you reply by mail to an article, these settings are ignored; -the mail is encoded according to sendmail-coding-system, as usual. - -** CC mode changes. - -*** If you edit primarily one style of C (or C++, Objective-C, Java) -code, you may want to make the CC Mode style variables have global -values so that you can set them directly in your .emacs file. To do -this, set c-style-variables-are-local-p to nil in your .emacs file. -Note that this only takes effect if you do it *before* cc-mode.el is -loaded. - -If you typically edit more than one style of C (or C++, Objective-C, -Java) code in a single Emacs session, you may want to make the CC Mode -style variables have buffer local values. By default, all buffers -share the same style variable settings; to make them buffer local, set -c-style-variables-are-local-p to t in your .emacs file. Note that you -must do this *before* CC Mode is loaded. - -*** The new variable c-indentation-style holds the C style name -of the current buffer. - -*** The variable c-block-comments-indent-p has been deleted, because -it is no longer necessary. C mode now handles all the supported styles -of block comments, with no need to say which one you will use. - -*** There is a new indentation style "python", which specifies the C -style that the Python developers like. - -*** There is a new c-cleanup-list option: brace-elseif-brace. -This says to put ...} else if (...) {... on one line, -just as brace-else-brace says to put ...} else {... on one line. - -** VC Changes [new] - -*** In vc-retrieve-snapshot (C-x v r), if you don't specify a snapshot -name, it retrieves the *latest* versions of all files in the current -directory and its subdirectories (aside from files already locked). - -This feature is useful if your RCS directory is a link to a common -master directory, and you want to pick up changes made by other -developers. - -You can do the same thing for an individual file by typing C-u C-x C-q -RET in a buffer visiting that file. - -*** VC can now handle files under CVS that are being "watched" by -other developers. Such files are made read-only by CVS. To get a -writable copy, type C-x C-q in a buffer visiting such a file. VC then -calls "cvs edit", which notifies the other developers of it. - -*** vc-version-diff (C-u C-x v =) now suggests reasonable defaults for -version numbers, based on the current state of the file. - -** Calendar changes. - -*** A new function, list-holidays, allows you list holidays or -subclasses of holidays for ranges of years. Related menu items allow -you do this for the year of the selected date, or the -following/previous years. - -*** There is now support for the Baha'i calendar system. Use `pb' in -the *Calendar* buffer to display the current Baha'i date. The Baha'i -calendar, or "Badi calendar" is a system of 19 months with 19 days -each, and 4 intercalary days (5 during a Gregorian leap year). The -calendar begins May 23, 1844, with each of the months named after a -supposed attribute of God. - -** ps-print changes - -There are some new user variables and subgroups for customizing the page -layout. - -*** Headers & Footers (subgroup) - -Some printer systems print a header page and force the first page to -be printed on the back of the header page when using duplex. If your -printer system has this behavior, set variable -`ps-banner-page-when-duplexing' to t. - -If variable `ps-banner-page-when-duplexing' is non-nil, it prints a -blank page as the very first printed page. So, it behaves as if the -very first character of buffer (or region) were a form feed ^L (\014). - -The variable `ps-spool-config' specifies who is responsible for -setting duplex mode and page size. Valid values are: - - lpr-switches duplex and page size are configured by `ps-lpr-switches'. - Don't forget to set `ps-lpr-switches' to select duplex - printing for your printer. - - setpagedevice duplex and page size are configured by ps-print using the - setpagedevice PostScript operator. - - nil duplex and page size are configured by ps-print *not* using - the setpagedevice PostScript operator. - -The variable `ps-spool-tumble' specifies how the page images on -opposite sides of a sheet are oriented with respect to each other. If -`ps-spool-tumble' is nil, ps-print produces output suitable for -bindings on the left or right. If `ps-spool-tumble' is non-nil, -ps-print produces output suitable for bindings at the top or bottom. -This variable takes effect only if `ps-spool-duplex' is non-nil. -The default value is nil. - -The variable `ps-header-frame-alist' specifies a header frame -properties alist. Valid frame properties are: - - fore-color Specify the foreground frame color. - Value should be a float number between 0.0 (black - color) and 1.0 (white color), or a string which is a - color name, or a list of 3 float numbers which - correspond to the Red Green Blue color scale, each - float number between 0.0 (dark color) and 1.0 (bright - color). The default is 0 ("black"). - - back-color Specify the background frame color (similar to fore-color). - The default is 0.9 ("gray90"). - - shadow-color Specify the shadow color (similar to fore-color). - The default is 0 ("black"). - - border-color Specify the border color (similar to fore-color). - The default is 0 ("black"). - - border-width Specify the border width. - The default is 0.4. - -Any other property is ignored. - -Don't change this alist directly; instead use Custom, or the -`ps-value', `ps-get', `ps-put' and `ps-del' functions (see there for -documentation). - -Ps-print can also print footers. The footer variables are: -`ps-print-footer', `ps-footer-offset', `ps-print-footer-frame', -`ps-footer-font-family', `ps-footer-font-size', `ps-footer-line-pad', -`ps-footer-lines', `ps-left-footer', `ps-right-footer' and -`ps-footer-frame-alist'. These variables are similar to those -controlling headers. - -*** Color management (subgroup) - -If `ps-print-color-p' is non-nil, the buffer's text will be printed in -color. - -*** Face Management (subgroup) - -If you need to print without worrying about face background colors, -set the variable `ps-use-face-background' which specifies if face -background should be used. Valid values are: - - t always use face background color. - nil never use face background color. - (face...) list of faces whose background color will be used. - -*** N-up printing (subgroup) - -The variable `ps-n-up-printing' specifies the number of pages per -sheet of paper. - -The variable `ps-n-up-margin' specifies the margin in points (pt) -between the sheet border and the n-up printing. - -If variable `ps-n-up-border-p' is non-nil, a border is drawn around -each page. - -The variable `ps-n-up-filling' specifies how the page matrix is filled -on each sheet of paper. Following are the valid values for -`ps-n-up-filling' with a filling example using a 3x4 page matrix: - - `left-top' 1 2 3 4 `left-bottom' 9 10 11 12 - 5 6 7 8 5 6 7 8 - 9 10 11 12 1 2 3 4 - - `right-top' 4 3 2 1 `right-bottom' 12 11 10 9 - 8 7 6 5 8 7 6 5 - 12 11 10 9 4 3 2 1 - - `top-left' 1 4 7 10 `bottom-left' 3 6 9 12 - 2 5 8 11 2 5 8 11 - 3 6 9 12 1 4 7 10 - - `top-right' 10 7 4 1 `bottom-right' 12 9 6 3 - 11 8 5 2 11 8 5 2 - 12 9 6 3 10 7 4 1 - -Any other value is treated as `left-top'. - -*** Zebra stripes (subgroup) - -The variable `ps-zebra-color' controls the zebra stripes grayscale or -RGB color. - -The variable `ps-zebra-stripe-follow' specifies how zebra stripes -continue on next page. Visually, valid values are (the character `+' -to the right of each column indicates that a line is printed): - - `nil' `follow' `full' `full-follow' - Current Page -------- ----------- --------- ---------------- - 1 XXXXX + 1 XXXXXXXX + 1 XXXXXX + 1 XXXXXXXXXXXXX + - 2 XXXXX + 2 XXXXXXXX + 2 XXXXXX + 2 XXXXXXXXXXXXX + - 3 XXXXX + 3 XXXXXXXX + 3 XXXXXX + 3 XXXXXXXXXXXXX + - 4 + 4 + 4 + 4 + - 5 + 5 + 5 + 5 + - 6 + 6 + 6 + 6 + - 7 XXXXX + 7 XXXXXXXX + 7 XXXXXX + 7 XXXXXXXXXXXXX + - 8 XXXXX + 8 XXXXXXXX + 8 XXXXXX + 8 XXXXXXXXXXXXX + - 9 XXXXX + 9 XXXXXXXX + 9 XXXXXX + 9 XXXXXXXXXXXXX + - 10 + 10 + - 11 + 11 + - -------- ----------- --------- ---------------- - Next Page -------- ----------- --------- ---------------- - 12 XXXXX + 12 + 10 XXXXXX + 10 + - 13 XXXXX + 13 XXXXXXXX + 11 XXXXXX + 11 + - 14 XXXXX + 14 XXXXXXXX + 12 XXXXXX + 12 + - 15 + 15 XXXXXXXX + 13 + 13 XXXXXXXXXXXXX + - 16 + 16 + 14 + 14 XXXXXXXXXXXXX + - 17 + 17 + 15 + 15 XXXXXXXXXXXXX + - 18 XXXXX + 18 + 16 XXXXXX + 16 + - 19 XXXXX + 19 XXXXXXXX + 17 XXXXXX + 17 + - 20 XXXXX + 20 XXXXXXXX + 18 XXXXXX + 18 + - 21 + 21 XXXXXXXX + - 22 + 22 + - -------- ----------- --------- ---------------- - -Any other value is treated as `nil'. - - -*** Printer management (subgroup) - -The variable `ps-printer-name-option' determines the option used by -some utilities to indicate the printer name; it's used only when -`ps-printer-name' is a non-empty string. If you're using the lpr -utility to print, for example, `ps-printer-name-option' should be set -to "-P". - -The variable `ps-manual-feed' indicates if the printer requires manual -paper feeding. If it's nil, automatic feeding takes place. If it's -non-nil, manual feeding takes place. - -The variable `ps-end-with-control-d' specifies whether C-d (\x04) -should be inserted at end of the generated PostScript. Non-nil means -do so. - -*** Page settings (subgroup) - -If variable `ps-warn-paper-type' is nil, it's *not* treated as an -error if the PostScript printer doesn't have a paper with the size -indicated by `ps-paper-type'; the default paper size will be used -instead. If `ps-warn-paper-type' is non-nil, an error is signaled if -the PostScript printer doesn't support a paper with the size indicated -by `ps-paper-type'. This is used when `ps-spool-config' is set to -`setpagedevice'. - -The variable `ps-print-upside-down' determines the orientation for -printing pages: nil means `normal' printing, non-nil means -`upside-down' printing (that is, the page is rotated by 180 degrees). - -The variable `ps-selected-pages' specifies which pages to print. If -it's nil, all pages are printed. If it's a list, list elements may be -integers specifying a single page to print, or cons cells (FROM . TO) -specifying to print from page FROM to TO. Invalid list elements, that -is integers smaller than one, or elements whose FROM is greater than -its TO, are ignored. - -The variable `ps-even-or-odd-pages' specifies how to print even/odd -pages. Valid values are: - - nil print all pages. - - `even-page' print only even pages. - - `odd-page' print only odd pages. - - `even-sheet' print only even sheets. - That is, if `ps-n-up-printing' is 1, it behaves like - `even-page', but for values greater than 1, it'll - print only the even sheet of paper. - - `odd-sheet' print only odd sheets. - That is, if `ps-n-up-printing' is 1, it behaves like - `odd-page'; but for values greater than 1, it'll print - only the odd sheet of paper. - -Any other value is treated as nil. - -If you set `ps-selected-pages' (see there for documentation), pages -are filtered by `ps-selected-pages', and then by -`ps-even-or-odd-pages'. For example, if we have: - - (setq ps-selected-pages '(1 4 (6 . 10) (12 . 16) 20)) - -and we combine this with `ps-even-or-odd-pages' and -`ps-n-up-printing', we get: - -`ps-n-up-printing' = 1: - `ps-even-or-odd-pages' PAGES PRINTED - nil 1, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 20 - even-page 4, 6, 8, 10, 12, 14, 16, 20 - odd-page 1, 7, 9, 13, 15 - even-sheet 4, 6, 8, 10, 12, 14, 16, 20 - odd-sheet 1, 7, 9, 13, 15 - -`ps-n-up-printing' = 2: - `ps-even-or-odd-pages' PAGES PRINTED - nil 1/4, 6/7, 8/9, 10/12, 13/14, 15/16, 20 - even-page 4/6, 8/10, 12/14, 16/20 - odd-page 1/7, 9/13, 15 - even-sheet 6/7, 10/12, 15/16 - odd-sheet 1/4, 8/9, 13/14, 20 - -*** Miscellany (subgroup) - -The variable `ps-error-handler-message' specifies where error handler -messages should be sent. - -It is also possible to add a user-defined PostScript prologue code in -front of all generated prologue code by setting the variable -`ps-user-defined-prologue'. - -The variable `ps-line-number-font' specifies the font for line numbers. - -The variable `ps-line-number-font-size' specifies the font size in -points for line numbers. - -The variable `ps-line-number-color' specifies the color for line -numbers. See `ps-zebra-color' for documentation. - -The variable `ps-line-number-step' specifies the interval in which -line numbers are printed. For example, if `ps-line-number-step' is set -to 2, the printing will look like: - - 1 one line - one line - 3 one line - one line - 5 one line - one line - ... - -Valid values are: - -integer an integer specifying the interval in which line numbers are - printed. If it's smaller than or equal to zero, 1 - is used. - -`zebra' specifies that only the line number of the first line in a - zebra stripe is to be printed. - -Any other value is treated as `zebra'. - -The variable `ps-line-number-start' specifies the starting point in -the interval given by `ps-line-number-step'. For example, if -`ps-line-number-step' is set to 3, and `ps-line-number-start' is set to -3, the output will look like: - - one line - one line - 3 one line - one line - one line - 6 one line - one line - one line - 9 one line - one line - ... - -The variable `ps-postscript-code-directory' specifies the directory -where the PostScript prologue file used by ps-print is found. - -The variable `ps-line-spacing' determines the line spacing in points, -for ordinary text, when generating PostScript (similar to -`ps-font-size'). - -The variable `ps-paragraph-spacing' determines the paragraph spacing, -in points, for ordinary text, when generating PostScript (similar to -`ps-font-size'). - -The variable `ps-paragraph-regexp' specifies the paragraph delimiter. - -The variable `ps-begin-cut-regexp' and `ps-end-cut-regexp' specify the -start and end of a region to cut out when printing. - -** hideshow changes. - -*** now supports hiding of blocks of single line comments (like // for -C++, ; for lisp). - -*** Support for java-mode added. - -*** When doing `hs-hide-all' it is now possible to also hide the comments -in the file if `hs-hide-comments-when-hiding-all' is set. - -*** The new function `hs-hide-initial-comment' hides the comments at -the beginning of the files. Finally those huge RCS logs don't stay in your -way! This is run by default when entering the `hs-minor-mode'. - -*** Now uses overlays instead of `selective-display', so is more -robust and a lot faster. - -*** A block beginning can span multiple lines. - -*** The new variable `hs-show-hidden-short-form' if t, directs hideshow -to show only the beginning of a block when it is hidden. See the -documentation for more details. - -** Changes in Enriched mode. - -*** When you visit a file in enriched-mode, Emacs will make sure it is -filled to the current fill-column. This behavior is now independent -of the size of the window. When you save the file, the fill-column in -use is stored as well, so that the whole buffer need not be refilled -the next time unless the fill-column is different. - -*** use-hard-newlines is now a minor mode. When it is enabled, Emacs -distinguishes between hard and soft newlines, and treats hard newlines -as paragraph boundaries. Otherwise all newlines inserted are marked -as soft, and paragraph boundaries are determined solely from the text. - -** Font Lock mode - -*** Custom support - -The variables font-lock-face-attributes, font-lock-display-type and -font-lock-background-mode are now obsolete; the recommended way to specify -the faces to use for Font Lock mode is with M-x customize-group on the new -custom group font-lock-faces. If you set font-lock-face-attributes in your -~/.emacs file, Font Lock mode will respect its value. However, you should -consider converting from setting that variable to using M-x customize. - -You can still use X resources to specify Font Lock face appearances. - -*** Maximum decoration - -Fontification now uses the maximum level of decoration supported by -default. Previously, fontification used a mode-specific default level -of decoration, which is typically the minimum level of decoration -supported. You can set font-lock-maximum-decoration to nil -to get the old behavior. - -*** New support - -Support is now provided for Java, Objective-C, AWK and SIMULA modes. - -Note that Font Lock mode can be turned on without knowing exactly what modes -support Font Lock mode, via the command global-font-lock-mode. - -*** Configurable support - -Support for C, C++, Objective-C and Java can be more easily configured for -additional types and classes via the new variables c-font-lock-extra-types, -c++-font-lock-extra-types, objc-font-lock-extra-types and, you guessed it, -java-font-lock-extra-types. These value of each of these variables should be a -list of regexps matching the extra type names. For example, the default value -of c-font-lock-extra-types is ("\\sw+_t") which means fontification follows the -convention that C type names end in _t. This results in slower fontification. - -Of course, you can change the variables that specify fontification in whatever -way you wish, typically by adding regexps. However, these new variables make -it easier to make specific and common changes for the fontification of types. - -*** Adding highlighting patterns to existing support - -You can use the new function font-lock-add-keywords to add your own -highlighting patterns, such as for project-local or user-specific constructs, -for any mode. - -For example, to highlight `FIXME:' words in C comments, put: - - (font-lock-add-keywords 'c-mode '(("\\ tex --> reftex.el - -** Changes in BibTeX mode. - -*** Info documentation is now available. - -*** Don't allow parentheses in string constants anymore. This confused -both the BibTeX program and Emacs BibTeX mode. - -*** Renamed variable bibtex-mode-user-optional-fields to -bibtex-user-optional-fields. - -*** Removed variable bibtex-include-OPTannote -(use bibtex-user-optional-fields instead). - -*** New interactive functions to copy and kill fields and complete -entries to the BibTeX kill ring, from where they can be yanked back by -appropriate functions. - -*** New interactive functions for repositioning and marking of -entries. They are bound by default to C-M-l and C-M-h. - -*** New hook bibtex-clean-entry-hook. It is called after entry has -been cleaned. - -*** New variable bibtex-field-delimiters, which replaces variables -bibtex-field-{left|right}-delimiter. - -*** New variable bibtex-entry-delimiters to determine how entries -shall be delimited. - -*** Allow preinitialization of fields. See documentation of -bibtex-user-optional-fields, bibtex-entry-field-alist, and -bibtex-include-OPTkey for details. - -*** Book and InBook entries require either an author or an editor -field. This is now supported by bibtex.el. Alternative fields are -prefixed with `ALT'. - -*** New variable bibtex-entry-format, which replaces variable -bibtex-clean-entry-zap-empty-opts and allows specification of many -formatting options performed on cleaning an entry (see variable -documentation). - -*** Even more control on how automatic keys are generated. See -documentation of bibtex-generate-autokey for details. Transcriptions -for foreign languages other than German are now handled, too. - -*** New boolean user option bibtex-comma-after-last-field to decide if -comma should be inserted at end of last field. - -*** New boolean user option bibtex-align-at-equal-sign to determine if -alignment should be made at left side of field contents or at equal -signs. New user options to control entry layout (e.g. indentation). - -*** New function bibtex-fill-entry to realign entries. - -*** New function bibtex-reformat to reformat region or buffer. - -*** New function bibtex-convert-alien to convert a BibTeX database -from alien sources. - -*** New function bibtex-complete-key (similar to bibtex-complete-string) -to complete prefix to a key defined in buffer. Mainly useful in -crossref entries. - -*** New function bibtex-count-entries to count entries in buffer or -region. - -*** Added support for imenu. - -*** The function `bibtex-validate' now checks current region instead -of buffer if mark is active. Now it shows all errors of buffer in a -`compilation mode' buffer. You can use the normal commands (e.g. -`next-error') for compilation modes to jump to errors. - -*** New variable `bibtex-string-file-path' to determine where the files -from `bibtex-string-files' are searched. - -** Iso Accents mode now supports Latin-3 as an alternative. - -** The command next-error now opens blocks hidden by hideshow. - -** The function using-unix-filesystems has been replaced by the -functions add-untranslated-filesystem and remove-untranslated-filesystem. -Each of these functions takes the name of a drive letter or directory -as an argument. - -When a filesystem is added as untranslated, all files on it are read -and written in binary mode (no cr/lf translation is performed). - -** browse-url changes - -*** New methods for: Grail (browse-url-generic), MMM (browse-url-mmm), -Lynx in a separate xterm (browse-url-lynx-xterm) or in an Emacs window -(browse-url-lynx-emacs), remote W3 (browse-url-w3-gnudoit), generic -non-remote-controlled browsers (browse-url-generic) and associated -customization variables. - -*** New commands `browse-url-of-region' and `browse-url'. - -*** URLs marked up with (RFC1738) work if broken across -lines. Browsing methods can be associated with URL regexps -(e.g. mailto: URLs) via `browse-url-browser-function'. - -** Changes in Ediff - -*** Clicking Mouse-2 on a brief command description in Ediff control panel -pops up the Info file for this command. - -*** There is now a variable, ediff-autostore-merges, which controls whether -the result of a merge is saved in a file. By default, this is done only when -merge is done from a session group (eg, when merging files in two different -directories). - -*** Since Emacs 19.31 (this hasn't been announced before), Ediff can compare -and merge groups of files residing in different directories, or revisions of -files in the same directory. - -*** Since Emacs 19.31, Ediff can apply multi-file patches interactively. -The patches must be in the context format or GNU unified format. (The bug -related to the GNU format has now been fixed.) - -** Changes in Viper - -*** The startup file is now .viper instead of .vip -*** All variable/function names have been changed to start with viper- - instead of vip-. -*** C-\ now simulates the meta-key in all Viper states. -*** C-z in Insert state now escapes to Vi for the duration of the next -Viper command. In Vi and Insert states, C-z behaves as before. -*** C-c \ escapes to Vi for one command if Viper is in Insert or Emacs states. -*** _ is no longer the meta-key in Vi state. -*** The variable viper-insert-state-cursor-color can be used to change cursor -color when Viper is in insert state. -*** If search lands the cursor near the top or the bottom of the window, -Viper pulls the window up or down to expose more context. The variable -viper-adjust-window-after-search controls this behavior. - -** Etags changes. - -*** In C, C++, Objective C and Java, Etags tags global variables by -default. The resulting tags files are inflated by 30% on average. -Use --no-globals to turn this feature off. Etags can also tag -variables which are members of structure-like constructs, but it does -not by default. Use --members to turn this feature on. - -*** C++ member functions are now recognized as tags. - -*** Java is tagged like C++. In addition, "extends" and "implements" -constructs are tagged. Files are recognized by the extension .java. - -*** Etags can now handle programs written in Postscript. Files are -recognized by the extensions .ps and .pdb (Postscript with C syntax). -In Postscript, tags are lines that start with a slash. - -*** Etags now handles Objective C and Objective C++ code. The usual C and -C++ tags are recognized in these languages; in addition, etags -recognizes special Objective C syntax for classes, class categories, -methods and protocols. - -*** Etags also handles Cobol. Files are recognized by the extension -.cobol. The tagged lines are those containing a word that begins in -column 8 and ends in a full stop, i.e. anything that could be a -paragraph name. - -*** Regexps in Etags now support intervals, as in ed or grep. The syntax of -an interval is \{M,N\}, and it means to match the preceding expression -at least M times and as many as N times. - -** The format for specifying a custom format for time-stamp to insert -in files has changed slightly. - -With the new enhancements to the functionality of format-time-string, -time-stamp-format will change to be eventually compatible with it. -This conversion is being done in two steps to maintain compatibility -with old time-stamp-format values. - -In the new scheme, alternate case is signified by the number-sign -(`#') modifier, rather than changing the case of the format character. -This feature is as yet incompletely implemented for compatibility -reasons. - -In the old time-stamp-format, all numeric fields defaulted to their -natural width. (With format-time-string, each format has a -fixed-width default.) In this version, you can specify the colon -(`:') modifier to a numeric conversion to mean "give me the historical -time-stamp-format width default." Do not use colon if you are -specifying an explicit width, as in "%02d". - -Numbers are no longer truncated to the requested width, except in the -case of "%02y", which continues to give a two-digit year. Digit -truncation probably wasn't being used for anything else anyway. - -The new formats will work with old versions of Emacs. New formats are -being recommended now to allow time-stamp-format to change in the -future to be compatible with format-time-string. The new forms being -recommended now will continue to work then. - -See the documentation string for the variable time-stamp-format for -details. - -** There are some additional major modes: - -dcl-mode, for editing VMS DCL files. -m4-mode, for editing files of m4 input. -meta-mode, for editing MetaFont and MetaPost source files. - -** In Shell mode, the command shell-copy-environment-variable lets you -copy the value of a specified environment variable from the subshell -into Emacs. - -** New Lisp packages include: - -*** battery.el displays battery status for laptops. - -*** M-x bruce (named after Lenny Bruce) is a program that might -be used for adding some indecent words to your email. - -*** M-x crisp-mode enables an emulation for the CRiSP editor. - -*** M-x dirtrack arranges for better tracking of directory changes -in shell buffers. - -*** The new library elint.el provides for linting of Emacs Lisp code. -See the documentation for `elint-initialize', `elint-current-buffer' -and `elint-defun'. - -*** M-x expand-add-abbrevs defines a special kind of abbrev which is -meant for programming constructs. These abbrevs expand like ordinary -ones, when you type SPC, but only at the end of a line and not within -strings or comments. - -These abbrevs can act as templates: you can define places within an -abbrev for insertion of additional text. Once you expand the abbrev, -you can then use C-x a p and C-x a n to move back and forth to these -insertion points. Thus you can conveniently insert additional text -at these points. - -*** filecache.el remembers the location of files so that you -can visit them by short forms of their names. - -*** find-func.el lets you find the definition of the user-loaded -Emacs Lisp function at point. - -*** M-x handwrite converts text to a "handwritten" picture. - -*** M-x iswitchb-buffer is a command for switching to a buffer, much like -switch-buffer, but it reads the argument in a more helpful way. - -*** M-x landmark implements a neural network for landmark learning. - -*** M-x locate provides a convenient interface to the `locate' program. - -*** M4 mode is a new mode for editing files of m4 input. - -*** mantemp.el creates C++ manual template instantiations -from the GCC error messages which indicate which instantiations are needed. - -*** mouse-copy.el provides a one-click copy and move feature. -You can drag a region with M-mouse-1, and it is automatically -inserted at point. M-Shift-mouse-1 deletes the text from its -original place after inserting the copy. - -*** mouse-drag.el lets you do scrolling by dragging Mouse-2 -on the buffer. - -You click the mouse and move; that distance either translates into the -velocity to scroll (with mouse-drag-throw) or the distance to scroll -(with mouse-drag-drag). Horizontal scrolling is enabled when needed. - -Enable mouse-drag with: - (global-set-key [down-mouse-2] 'mouse-drag-throw) --or- - (global-set-key [down-mouse-2] 'mouse-drag-drag) - -*** mspools.el is useful for determining which mail folders have -mail waiting to be read in them. It works with procmail. - -*** Octave mode is a major mode for editing files of input for Octave. -It comes with a facility for communicating with an Octave subprocess. - -*** ogonek - -The ogonek package provides functions for changing the coding of -Polish diacritic characters in buffers. Codings known from various -platforms are supported such as ISO8859-2, Mazovia, IBM Latin2, and -TeX. For example, you can change the coding from Mazovia to -ISO8859-2. Another example is a change of coding from ISO8859-2 to -prefix notation (in which `/a' stands for the aogonek character, for -instance) and vice versa. - -To use this package load it using - M-x load-library [enter] ogonek -Then, you may get an explanation by calling one of - M-x ogonek-jak -- in Polish - M-x ogonek-how -- in English -The info specifies the commands and variables provided as well as the -ways of customization in `.emacs'. - -*** Interface to ph. - -Emacs provides a client interface to CCSO Nameservers (ph/qi) - -The CCSO nameserver is used in many universities to provide directory -services about people. ph.el provides a convenient Emacs interface to -these servers. - -*** uce.el is useful for replying to unsolicited commercial email. - -*** vcursor.el implements a "virtual cursor" feature. -You can move the virtual cursor with special commands -while the real cursor does not move. - -*** webjump.el is a "hot list" package which you can set up -for visiting your favorite web sites. - -*** M-x winner-mode is a minor mode which saves window configurations, -so you can move back to other configurations that you have recently used. - -** movemail change - -Movemail no longer needs to be installed setuid root in order for POP -mail retrieval to function properly. This is because it no longer -supports the RPOP (reserved-port POP) protocol; instead, it uses the -user's POP password to authenticate to the mail server. - -This change was made earlier, but not reported in NEWS before. - -* Emacs 20.1 changes for MS-DOS and MS-Windows. - -** Changes in handling MS-DOS/MS-Windows text files. - -Emacs handles three different conventions for representing -end-of-line: CRLF for MSDOS, LF for Unix and GNU, and CR (used on the -Macintosh). Emacs determines which convention is used in a specific -file based on the contents of that file (except for certain special -file names), and when it saves the file, it uses the same convention. - -To save the file and change the end-of-line convention, you can use -C-x RET f (set-buffer-file-coding-system) to specify a different -coding system for the buffer. Then, when you save the file, the newly -specified coding system will take effect. For example, to save with -LF, specify undecided-unix (or some other ...-unix coding system); to -save with CRLF, specify undecided-dos. - -* Lisp Changes in Emacs 20.1 - -** Byte-compiled files made with Emacs 20 will, in general, work in -Emacs 19 as well, as long as the source code runs in Emacs 19. And -vice versa: byte-compiled files made with Emacs 19 should also run in -Emacs 20, as long as the program itself works in Emacs 20. - -** Windows-specific functions and variables have been renamed -to start with w32- instead of win32-. - -In hacker language, calling something a "win" is a form of praise. We -don't want to praise a non-free Microsoft system, so we don't call it -"win". - -** Basic Lisp changes - -*** A symbol whose name starts with a colon now automatically -evaluates to itself. Therefore such a symbol can be used as a constant. - -*** The defined purpose of `defconst' has been changed. It should now -be used only for values that should not be changed whether by a program -or by the user. - -The actual behavior of defconst has not been changed. - -*** There are new macros `when' and `unless' - -(when CONDITION BODY...) is short for (if CONDITION (progn BODY...)) -(unless CONDITION BODY...) is short for (if CONDITION nil BODY...) - -*** Emacs now defines functions caar, cadr, cdar and cddr with their -usual Lisp meanings. For example, caar returns the car of the car of -its argument. - -*** equal, when comparing strings, now ignores their text properties. - -*** The new function `functionp' tests whether an object is a function. - -*** arrayp now returns t for char-tables and bool-vectors. - -*** Certain primitives which use characters (as integers) now get an -error if the integer is not a valid character code. These primitives -include insert-char, char-to-string, and the %c construct in the -`format' function. - -*** The `require' function now insists on adding a suffix, either .el -or .elc, to the file name. Thus, (require 'foo) will not use a file -whose name is just foo. It insists on foo.el or foo.elc. - -*** The `autoload' function, when the file name does not contain -either a directory name or the suffix .el or .elc, insists on -adding one of these suffixes. - -*** string-to-number now takes an optional second argument BASE -which specifies the base to use when converting an integer. -If BASE is omitted, base 10 is used. - -We have not implemented other radices for floating point numbers, -because that would be much more work and does not seem useful. - -*** substring now handles vectors as well as strings. - -*** The Common Lisp function eql is no longer defined normally. -You must load the `cl' library to define it. - -*** The new macro `with-current-buffer' lets you evaluate an expression -conveniently with a different current buffer. It looks like this: - - (with-current-buffer BUFFER BODY-FORMS...) - -BUFFER is the expression that says which buffer to use. -BODY-FORMS say what to do in that buffer. - -*** The new primitive `save-current-buffer' saves and restores the -choice of current buffer, like `save-excursion', but without saving or -restoring the value of point or the mark. `with-current-buffer' -works using `save-current-buffer'. - -*** The new macro `with-temp-file' lets you do some work in a new buffer and -write the output to a specified file. Like `progn', it returns the value -of the last form. - -*** The new macro `with-temp-buffer' lets you do some work in a new buffer, -which is discarded after use. Like `progn', it returns the value of the -last form. If you wish to return the buffer contents, use (buffer-string) -as the last form. - -*** The new function split-string takes a string, splits it at certain -characters, and returns a list of the substrings in between the -matches. - -For example, (split-string "foo bar lose" " +") returns ("foo" "bar" "lose"). - -*** The new macro with-output-to-string executes some Lisp expressions -with standard-output set up so that all output feeds into a string. -Then it returns that string. - -For example, if the current buffer name is `foo', - -(with-output-to-string - (princ "The buffer is ") - (princ (buffer-name))) - -returns "The buffer is foo". - -** Non-ASCII characters are now supported, if enable-multibyte-characters -is non-nil. - -These characters have character codes above 256. When inserted in the -buffer or stored in a string, they are represented as multibyte -characters that occupy several buffer positions each. - -*** When enable-multibyte-characters is non-nil, a single character in -a buffer or string can be two or more bytes (as many as four). - -Buffers and strings are still made up of unibyte elements; -character positions and string indices are always measured in bytes. -Therefore, moving forward one character can increase the buffer -position by 2, 3 or 4. The function forward-char moves by whole -characters, and therefore is no longer equivalent to - (lambda (n) (goto-char (+ (point) n))). - -ASCII characters (codes 0 through 127) are still single bytes, always. -Sequences of byte values 128 through 255 are used to represent -non-ASCII characters. These sequences are called "multibyte -characters". - -The first byte of a multibyte character is always in the range 128 -through 159 (octal 0200 through 0237). These values are called -"leading codes". The second and subsequent bytes are always in the -range 160 through 255 (octal 0240 through 0377). The first byte, the -leading code, determines how many bytes long the sequence is. - -*** The function forward-char moves over characters, and therefore -(forward-char 1) may increase point by more than 1 if it moves over a -multibyte character. Likewise, delete-char always deletes a -character, which may be more than one buffer position. - -This means that some Lisp programs, which assume that a character is -always one buffer position, need to be changed. - -However, all ASCII characters are always one buffer position. - -*** The regexp [\200-\377] no longer matches all non-ASCII characters, -because when enable-multibyte-characters is non-nil, these characters -have codes that are not in the range octal 200 to octal 377. However, -the regexp [^\000-\177] does match all non-ASCII characters, -guaranteed. - -*** The function char-boundary-p returns non-nil if position POS is -between two characters in the buffer (not in the middle of a -character). - -When the value is non-nil, it says what kind of character follows POS: - - 0 if POS is at an ASCII character or at the end of range, - 1 if POS is before a 2-byte length multi-byte form, - 2 if POS is at a head of 3-byte length multi-byte form, - 3 if POS is at a head of 4-byte length multi-byte form, - 4 if POS is at a head of multi-byte form of a composite character. - -*** The function char-bytes returns how many bytes the character CHAR uses. - -*** Strings can contain multibyte characters. The function -`length' returns the string length counting bytes, which may be -more than the number of characters. - -You can include a multibyte character in a string constant by writing -it literally. You can also represent it with a hex escape, -\xNNNNNNN..., using as many digits as necessary. Any character which -is not a valid hex digit terminates this construct. If you want to -follow it with a character that is a hex digit, write backslash and -newline in between; that will terminate the hex escape. - -*** The function concat-chars takes arguments which are characters -and returns a string containing those characters. - -*** The function sref access a multibyte character in a string. -(sref STRING INDX) returns the character in STRING at INDEX. INDEX -counts from zero. If INDEX is at a position in the middle of a -character, sref signals an error. - -*** The function chars-in-string returns the number of characters -in a string. This is less than the length of the string, if the -string contains multibyte characters (the length counts bytes). - -*** The function chars-in-region returns the number of characters -in a region from BEG to END. This is less than (- END BEG) if the -region contains multibyte characters (the length counts bytes). - -*** The function string-to-list converts a string to a list of -the characters in it. string-to-vector converts a string -to a vector of the characters in it. - -*** The function store-substring alters part of the contents -of a string. You call it as follows: - - (store-substring STRING IDX OBJ) - -This says to alter STRING, by storing OBJ starting at index IDX in -STRING. OBJ may be either a character or a (smaller) string. -This function really does alter the contents of STRING. -Since it is impossible to change the length of an existing string, -it is an error if OBJ doesn't fit within STRING's actual length. - -*** char-width returns the width (in columns) of the character CHAR, -if it were displayed in the current buffer and the selected window. - -*** string-width returns the width (in columns) of the text in STRING, -if it were displayed in the current buffer and the selected window. - -*** truncate-string-to-width shortens a string, if necessary, -to fit within a certain number of columns. (Of course, it does -not alter the string that you give it; it returns a new string -which contains all or just part of the existing string.) - -(truncate-string-to-width STR END-COLUMN &optional START-COLUMN PADDING) - -This returns the part of STR up to column END-COLUMN. - -The optional argument START-COLUMN specifies the starting column. -If this is non-nil, then the first START-COLUMN columns of the string -are not included in the resulting value. - -The optional argument PADDING, if non-nil, is a padding character to be added -at the beginning and end the resulting string, to extend it to exactly -WIDTH columns. If PADDING is nil, that means do not pad; then, if STRING -is narrower than WIDTH, the value is equal to STRING. - -If PADDING and START-COLUMN are both non-nil, and if there is no clean -place in STRING that corresponds to START-COLUMN (because one -character extends across that column), then the padding character -PADDING is added one or more times at the beginning of the result -string, so that its columns line up as if it really did start at -column START-COLUMN. - -*** When the functions in the list after-change-functions are called, -the third argument is the number of bytes in the pre-change text, not -necessarily the number of characters. It is, in effect, the -difference in buffer position between the beginning and the end of the -changed text, before the change. - -*** The characters Emacs uses are classified in various character -sets, each of which has a name which is a symbol. In general there is -one character set for each script, not for each language. - -**** The function charsetp tests whether an object is a character set name. - -**** The variable charset-list holds a list of character set names. - -**** char-charset, given a character code, returns the name of the character -set that the character belongs to. (The value is a symbol.) - -**** split-char, given a character code, returns a list containing the -name of the character set, followed by one or two byte-values -which identify the character within that character set. - -**** make-char, given a character set name and one or two subsequent -byte-values, constructs a character code. This is roughly the -opposite of split-char. - -**** find-charset-region returns a list of the character sets -of all the characters between BEG and END. - -**** find-charset-string returns a list of the character sets -of all the characters in a string. - -*** Here are the Lisp facilities for working with coding systems -and specifying coding systems. - -**** The function coding-system-list returns a list of all coding -system names (symbols). With optional argument t, it returns a list -of all distinct base coding systems, not including variants. -(Variant coding systems are those like latin-1-dos, latin-1-unix -and latin-1-mac which specify the end-of-line conversion as well -as what to do about code conversion.) - -**** coding-system-p tests a symbol to see if it is a coding system -name. It returns t if so, nil if not. - -**** file-coding-system-alist specifies which coding systems to use -for certain file names. It works like network-coding-system-alist, -except that the PATTERN is matched against the file name. - -Each element has the format (PATTERN . VAL), where PATTERN determines -which file names the element applies to. PATTERN should be a regexp -to match against a file name. - -VAL is a coding system, a cons cell containing two coding systems, or -a function symbol. If VAL is a coding system, it is used for both -decoding what received from the network stream and encoding what sent -to the network stream. If VAL is a cons cell containing two coding -systems, the car specifies the coding system for decoding, and the cdr -specifies the coding system for encoding. - -If VAL is a function symbol, the function must return a coding system -or a cons cell containing two coding systems, which is used as above. - -**** The variable network-coding-system-alist specifies -the coding system to use for network sockets. - -Each element has the format (PATTERN . VAL), where PATTERN determines -which network sockets the element applies to. PATTERN should be -either a port number or a regular expression matching some network -service names. - -VAL is a coding system, a cons cell containing two coding systems, or -a function symbol. If VAL is a coding system, it is used for both -decoding what received from the network stream and encoding what sent -to the network stream. If VAL is a cons cell containing two coding -systems, the car specifies the coding system for decoding, and the cdr -specifies the coding system for encoding. - -If VAL is a function symbol, the function must return a coding system -or a cons cell containing two coding systems, which is used as above. - -**** process-coding-system-alist specifies which coding systems to use -for certain subprocess. It works like network-coding-system-alist, -except that the PATTERN is matched against the program name used to -start the subprocess. - -**** The variable default-process-coding-system specifies the coding -systems to use for subprocess (and net connection) input and output, -when nothing else specifies what to do. The value is a cons cell -(OUTPUT-CODING . INPUT-CODING). OUTPUT-CODING applies to output -to the subprocess, and INPUT-CODING applies to input from it. - -**** The variable coding-system-for-write, if non-nil, specifies the -coding system to use for writing a file, or for output to a synchronous -subprocess. - -It also applies to any asynchronous subprocess or network connection, -but in a different way: the value of coding-system-for-write when you -start the subprocess or connection affects that subprocess or -connection permanently or until overridden. - -The variable coding-system-for-write takes precedence over -file-coding-system-alist, process-coding-system-alist and -network-coding-system-alist, and all other methods of specifying a -coding system for output. But most of the time this variable is nil. -It exists so that Lisp programs can bind it to a specific coding -system for one operation at a time. - -**** coding-system-for-read applies similarly to input from -files, subprocesses or network connections. - -**** The function process-coding-system tells you what -coding systems(s) an existing subprocess is using. -The value is a cons cell, - (DECODING-CODING-SYSTEM . ENCODING-CODING-SYSTEM) -where DECODING-CODING-SYSTEM is used for decoding output from -the subprocess, and ENCODING-CODING-SYSTEM is used for encoding -input to the subprocess. - -**** The function set-process-coding-system can be used to -change the coding systems in use for an existing subprocess. - -** Emacs has a new facility to help users manage the many -customization options. To make a Lisp program work with this facility, -you need to use the new macros defgroup and defcustom. - -You use defcustom instead of defvar, for defining a user option -variable. The difference is that you specify two additional pieces of -information (usually): the "type" which says what values are -legitimate, and the "group" which specifies the hierarchy for -customization. - -Thus, instead of writing - - (defvar foo-blurgoze nil - "*Non-nil means that foo will act very blurgozely.") - -you would now write this: - - (defcustom foo-blurgoze nil - "*Non-nil means that foo will act very blurgozely." - :type 'boolean - :group foo) - -The type `boolean' means that this variable has only -two meaningful states: nil and non-nil. Other type values -describe other possibilities; see the manual for Custom -for a description of them. - -The "group" argument is used to specify a group which the option -should belong to. You define a new group like this: - - (defgroup ispell nil - "Spell checking using Ispell." - :group 'processes) - -The "group" argument in defgroup specifies the parent group. The root -group is called `emacs'; it should not contain any variables itself, -but only other groups. The immediate subgroups of `emacs' correspond -to the keywords used by C-h p. Under these subgroups come -second-level subgroups that belong to individual packages. - -Each Emacs package should have its own set of groups. A simple -package should have just one group; a more complex package should -have a hierarchy of its own groups. The sole or root group of a -package should be a subgroup of one or more of the "keyword" -first-level subgroups. - -** New `widget' library for inserting UI components in buffers. - -This library, used by the new custom library, is documented in a -separate manual that accompanies Emacs. - -** easy-mmode - -The easy-mmode package provides macros and functions that make -developing minor modes easier. Roughly, the programmer has to code -only the functionality of the minor mode. All the rest--toggles, -predicate, and documentation--can be done in one call to the macro -`easy-mmode-define-minor-mode' (see the documentation). See also -`easy-mmode-define-keymap'. - -** Text property changes - -*** The `intangible' property now works on overlays as well as on a -text property. - -*** The new functions next-char-property-change and -previous-char-property-change scan through the buffer looking for a -place where either a text property or an overlay might change. The -functions take two arguments, POSITION and LIMIT. POSITION is the -starting position for the scan. LIMIT says where to stop the scan. - -If no property change is found before LIMIT, the value is LIMIT. If -LIMIT is nil, scan goes to the beginning or end of the accessible part -of the buffer. If no property change is found, the value is the -position of the beginning or end of the buffer. - -*** In the `local-map' text property or overlay property, the property -value can now be a symbol whose function definition is a keymap. This -is an alternative to using the keymap itself. - -** Changes in invisibility features - -*** Isearch can now temporarily show parts of the buffer which are -hidden by an overlay with a invisible property, when the search match -is inside that portion of the buffer. To enable this the overlay -should have a isearch-open-invisible property which is a function that -would be called having the overlay as an argument, the function should -make the overlay visible. - -During incremental search the overlays are shown by modifying the -invisible and intangible properties, if beside this more actions are -needed the overlay should have a isearch-open-invisible-temporary -which is a function. The function is called with 2 arguments: one is -the overlay and the second is nil when it should show the overlay and -t when it should hide it. - -*** add-to-invisibility-spec, remove-from-invisibility-spec - -Modes that use overlays to hide portions of a buffer should set the -invisible property of the overlay to the mode's name (or another symbol) -and modify the `buffer-invisibility-spec' to include that symbol. -Use `add-to-invisibility-spec' and `remove-from-invisibility-spec' to -manipulate the `buffer-invisibility-spec'. -Here is an example of how to do this: - - ;; If we want to display an ellipsis: - (add-to-invisibility-spec '(my-symbol . t)) - ;; If you don't want ellipsis: - (add-to-invisibility-spec 'my-symbol) - - ... - (overlay-put (make-overlay beginning end) 'invisible 'my-symbol) - - ... - ;; When done with the overlays: - (remove-from-invisibility-spec '(my-symbol . t)) - ;; Or respectively: - (remove-from-invisibility-spec 'my-symbol) - -** Changes in syntax parsing. - -*** The syntax-directed buffer-scan functions (such as -`parse-partial-sexp', `forward-word' and similar functions) can now -obey syntax information specified by text properties, if the variable -`parse-sexp-lookup-properties' is non-nil. - -If the value of `parse-sexp-lookup-properties' is nil, the behavior -is as before: the syntax-table of the current buffer is always -used to determine the syntax of the character at the position. - -When `parse-sexp-lookup-properties' is non-nil, the syntax of a -character in the buffer is calculated thus: - - a) if the `syntax-table' text-property of that character - is a cons, this cons becomes the syntax-type; - - Valid values of `syntax-table' text-property are: nil, a valid - syntax-table, and a valid syntax-table element, i.e., - a cons cell of the form (SYNTAX-CODE . MATCHING-CHAR). - - b) if the character's `syntax-table' text-property - is a syntax table, this syntax table is used - (instead of the syntax-table of the current buffer) to - determine the syntax type of the character. - - c) otherwise the syntax-type is determined by the syntax-table - of the current buffer. - -*** The meaning of \s in regular expressions is also affected by the -value of `parse-sexp-lookup-properties'. The details are the same as -for the syntax-directed buffer-scan functions. - -*** There are two new syntax-codes, `!' and `|' (numeric values 14 -and 15). A character with a code `!' starts a comment which is ended -only by another character with the same code (unless quoted). A -character with a code `|' starts a string which is ended only by -another character with the same code (unless quoted). - -These codes are mainly meant for use as values of the `syntax-table' -text property. - -*** The function `parse-partial-sexp' has new semantics for the sixth -arg COMMENTSTOP. If it is `syntax-table', parse stops after the start -of a comment or a string, or after end of a comment or a string. - -*** The state-list which the return value from `parse-partial-sexp' -(and can also be used as an argument) now has an optional ninth -element: the character address of the start of last comment or string; -nil if none. The fourth and eighth elements have special values if the -string/comment is started by a "!" or "|" syntax-code. - -*** Since new features of `parse-partial-sexp' allow a complete -syntactic parsing, `font-lock' no longer supports -`font-lock-comment-start-regexp'. - -** Changes in face features - -*** The face functions are now unconditionally defined in Emacs, even -if it does not support displaying on a device that supports faces. - -*** The function face-documentation returns the documentation string -of a face (or nil if it doesn't have one). - -*** The function face-bold-p returns t if a face should be bold. -set-face-bold-p sets that flag. - -*** The function face-italic-p returns t if a face should be italic. -set-face-italic-p sets that flag. - -*** You can now specify foreground and background colors for text -by adding elements of the form (foreground-color . COLOR-NAME) -and (background-color . COLOR-NAME) to the list of faces in -the `face' property (either the character's text property or an -overlay property). - -This means that you no longer need to create named faces to use -arbitrary colors in a Lisp package. - -** Changes in file-handling functions - -*** File-access primitive functions no longer discard an extra redundant -directory name from the beginning of the file name. In other words, -they no longer do anything special with // or /~. That conversion -is now done only in substitute-in-file-name. - -This makes it possible for a Lisp program to open a file whose name -begins with ~. - -*** If copy-file is unable to set the date of the output file, -it now signals an error with the condition file-date-error. - -*** The inode number returned by file-attributes may be an integer (if -the number fits in a Lisp integer) or a list of integers. - -*** insert-file-contents can now read from a special file, -as long as the arguments VISIT and REPLACE are nil. - -*** The RAWFILE arg to find-file-noselect, if non-nil, now suppresses -character code conversion as well as other things. - -Meanwhile, this feature does work with remote file names -(formerly it did not). - -*** Lisp packages which create temporary files should use the TMPDIR -environment variable to decide which directory to put them in. - -*** interpreter-mode-alist elements now specify regexps -instead of constant strings. - -*** expand-file-name no longer treats `//' or `/~' specially. It used -to delete all the text of a file name up through the first slash of -any `//' or `/~' sequence. Now it passes them straight through. - -substitute-in-file-name continues to treat those sequences specially, -in the same way as before. - -*** The variable `format-alist' is more general now. -The FROM-FN and TO-FN in a format definition can now be strings -which specify shell commands to use as filters to perform conversion. - -*** The new function access-file tries to open a file, and signals an -error if that fails. If the open succeeds, access-file does nothing -else, and returns nil. - -*** The function insert-directory now signals an error if the specified -directory cannot be listed. - -** Changes in minibuffer input - -*** The functions read-buffer, read-variable, read-command, read-string -read-file-name, read-from-minibuffer and completing-read now take an -additional argument which specifies the default value. If this -argument is non-nil, it should be a string; that string is used in two -ways: - - It is returned if the user enters empty input. - It is available through the history command M-n. - -*** The functions read-string, read-from-minibuffer, -read-no-blanks-input and completing-read now take an additional -argument INHERIT-INPUT-METHOD. If this is non-nil, then the -minibuffer inherits the current input method and the setting of -enable-multibyte-characters from the previously current buffer. - -In an interactive spec, you can use M instead of s to read an -argument in this way. - -*** All minibuffer input functions discard text properties -from the text you enter in the minibuffer, unless the variable -minibuffer-allow-text-properties is non-nil. - -** Echo area features - -*** Clearing the echo area now runs the normal hook -echo-area-clear-hook. Note that the echo area can be used while the -minibuffer is active; in that case, the minibuffer is still active -after the echo area is cleared. - -*** The function current-message returns the message currently displayed -in the echo area, or nil if there is none. - -** Keyboard input features - -*** tty-erase-char is a new variable that reports which character was -set up as the terminal's erase character when time Emacs was started. - -*** num-nonmacro-input-events is the total number of input events -received so far from the terminal. It does not count those generated -by keyboard macros. - -** Frame-related changes - -*** make-frame runs the normal hook before-make-frame-hook just before -creating a frame, and just after creating a frame it runs the abnormal -hook after-make-frame-functions with the new frame as arg. - -*** The new hook window-configuration-change-hook is now run every time -the window configuration has changed. The frame whose configuration -has changed is the selected frame when the hook is run. - -*** Each frame now independently records the order for recently -selected buffers, in its buffer-list frame parameter, so that the -value of other-buffer is now based on the buffers recently displayed -in the selected frame. - -*** The value of the frame parameter vertical-scroll-bars -is now `left', `right' or nil. A non-nil value specifies -which side of the window to put the scroll bars on. - -** X Windows features - -*** You can examine X resources for other applications by binding -x-resource-class around a call to x-get-resource. The usual value of -x-resource-class is "Emacs", which is the correct value for Emacs. - -*** In menus, checkboxes and radio buttons now actually work. -The menu displays the current status of the box or button. - -*** The function x-list-fonts now takes an optional fourth argument -MAXIMUM which sets a limit on how many matching fonts to return. -A smaller value of MAXIMUM makes the function faster. - -If the only question is whether *any* font matches the pattern, -it is good to supply 1 for this argument. - -** Subprocess features - -*** A reminder: it is no longer necessary for subprocess filter -functions and sentinels to do save-match-data, because Emacs does this -automatically. - -*** The new function shell-command-to-string executes a shell command -and returns the output from the command as a string. - -*** The new function process-contact returns t for a child process, -and (HOSTNAME SERVICE) for a net connection. - -** An error in running pre-command-hook or post-command-hook -does clear the variable to nil. The documentation was wrong before. - -** In define-key-after, if AFTER is t, the new binding now always goes -at the end of the keymap. If the keymap is a menu, this means it -goes after the other menu items. - -** If you have a program that makes several changes in the same area -of the buffer, you can use the macro combine-after-change-calls -around that Lisp code to make it faster when after-change hooks -are in use. - -The macro arranges to call the after-change functions just once for a -series of several changes--if that seems safe. - -Don't alter the variables after-change-functions and -after-change-function within the body of a combine-after-change-calls -form. - -** If you define an abbrev (with define-abbrev) whose EXPANSION -is not a string, then the abbrev does not expand in the usual sense, -but its hook is still run. - -** Normally, the Lisp debugger is not used (even if you have enabled it) -for errors that are handled by condition-case. - -If you set debug-on-signal to a non-nil value, then the debugger is called -regardless of whether there is a handler for the condition. This is -useful for debugging problems that happen inside of a condition-case. - -This mode of operation seems to be unreliable in other ways. Errors that -are normal and ought to be handled, perhaps in timers or process -filters, will instead invoke the debugger. So don't say you weren't -warned. - -** The new variable ring-bell-function lets you specify your own -way for Emacs to "ring the bell". - -** If run-at-time's TIME argument is t, the action is repeated at -integral multiples of REPEAT from the epoch; this is useful for -functions like display-time. - -** You can use the function locate-library to find the precise file -name of a Lisp library. This isn't new, but wasn't documented before. - -** Commands for entering view mode have new optional arguments that -can be used from Lisp. Low-level entrance to and exit from view mode -is done by functions view-mode-enter and view-mode-exit. - -** batch-byte-compile-file now makes Emacs return a nonzero status code -if there is an error in compilation. - -** pop-to-buffer, switch-to-buffer-other-window and -switch-to-buffer-other-frame now accept an additional optional -argument NORECORD, much like switch-to-buffer. If it is non-nil, -they don't put the buffer at the front of the buffer list. - -** If your .emacs file leaves the *scratch* buffer non-empty, -Emacs does not display the startup message, so as to avoid changing -the *scratch* buffer. - -** The new function regexp-opt returns an efficient regexp to match a string. -The arguments are STRINGS and (optionally) PAREN. This function can be used -where regexp matching or searching is intensively used and speed is important, -e.g., in Font Lock mode. - -** The variable buffer-display-count is local to each buffer, -and is incremented each time the buffer is displayed in a window. -It starts at 0 when the buffer is created. - -** The new function compose-mail starts composing a mail message -using the user's chosen mail composition agent (specified with the -variable mail-user-agent). It has variants compose-mail-other-window -and compose-mail-other-frame. - -** The `user-full-name' function now takes an optional parameter which -can either be a number (the UID) or a string (the login name). The -full name of the specified user will be returned. - -** Lisp packages that load files of customizations, or any other sort -of user profile, should obey the variable init-file-user in deciding -where to find it. They should load the profile of the user name found -in that variable. If init-file-user is nil, meaning that the -q -option was used, then Lisp packages should not load the customization -files at all. - -** format-time-string now allows you to specify the field width -and type of padding. This works as in printf: you write the field -width as digits in the middle of a %-construct. If you start -the field width with 0, it means to pad with zeros. - -For example, %S normally specifies the number of seconds since the -minute; %03S means to pad this with zeros to 3 positions, %_3S to pad -with spaces to 3 positions. Plain %3S pads with zeros, because that -is how %S normally pads to two positions. - -** thing-at-point now supports a new kind of "thing": url. - -** imenu.el changes. - -You can now specify a function to be run when selecting an -item from menu created by imenu. - -An example of using this feature: if we define imenu items for the -#include directives in a C file, we can open the included file when we -select one of those items. - -* For older news, see the file ONEWS - ----------------------------------------------------------------------- -Copyright information: - -Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, - 2005, 2006 Free Software Foundation, Inc. - - Permission is granted to anyone to make or distribute verbatim copies - of this document as received, in any medium, provided that the - copyright notice and this permission notice are preserved, - thus giving the recipient permission to redistribute in turn. - - Permission is granted to distribute modified versions - of this document, or of portions of it, - under the above conditions, provided also that they - carry prominent notices stating who last changed them. - -Local variables: -mode: outline -paragraph-separate: "[ ]*$" -end: - -arch-tag: 1aca9dfa-2ac4-4d14-bebf-0007cee12793 +GNU Emacs NEWS -- history of user-visible changes. 2006-06-04 +Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. +See the end for copying conditions. + +Please send Emacs bug reports to bug-gnu-emacs@gnu.org. +If possible, use M-x report-emacs-bug. + +This file is about changes in emacs version 22. + +See files NEWS.21, NEWS.20, NEWS.19, NEWS.18, and NEWS.1-17 for changes +in older emacs versions. + +You can narrow news to a specific version by calling `view-emacs-news' +with a prefix argument or by typing C-u C-h C-n. + +Temporary note: + +++ indicates that the appropriate manual has already been updated. + --- means no change in the manuals is called for. +When you add a new item, please add it without either +++ or --- +so we will look at it and add it to the manual. + + +* Installation Changes in Emacs 22.1 + +--- +** 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.) + +--- +** Emacs now supports new configure options `--program-prefix', +`--program-suffix' and `--program-transform-name' that affect the names of +installed programs. + +--- +** Emacs can now be built without sound support. + +--- +** 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 `emacsserver' program has been removed, replaced with Lisp code. + +--- +** The `yow' program has been removed. +Use the corresponding Emacs feature instead. + +--- +** 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. + +--- +** Leim is now part of the Emacs distribution. +You no longer need to download a separate tarball in order to build +Emacs with Leim. + ++++ +** 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 that makes it easy +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 that makes it easy accessible +(Help->More Manuals->Introduction to Emacs Lisp). + +--- +** New translations of the Emacs Tutorial are available in the +following languages: Brasilian Portuguese, Bulgarian, Chinese (both +with simplified and traditional characters), French, 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. + +--- +** A Portuguese translation of Emacs' reference card has been added. +Its name is `pt-br-refcard.tex'. The corresponding PostScript file is +also included. + +--- +** A French translation of the `Emacs Survival Guide' is available. + +--- +** 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'. + +--- +** Support for a Cygwin build of Emacs was added. + +--- +** Support for FreeBSD/Alpha has been added. + +--- +** Support for GNU/Linux systems on S390 machines was added. + +--- +** Support for MacOS X was added. +See the files mac/README and mac/INSTALL for build instructions. + +--- +** Support for GNU/Linux systems on X86-64 machines was added. + +--- +** Mac OS 9 port now uses the Carbon API by default. You can also +create non-Carbon build by specifying `NonCarbon' as a target. See +the files mac/README and mac/INSTALL for build instructions. + +--- +** 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. + +** 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. + +--- +** 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. + +--- +** 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. + + +* Startup Changes in Emacs 22.1 + ++++ +** 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. + ++++ +** 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 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.) + ++++ +** 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. + ++++ +** 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. + ++++ +** 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, +wrt 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. + ++++ +** 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-startup-message' (which is also aliased as +`inhibit-splash-screen'). + ++++ +** The default is now to use a bitmap as the icon, so the command-line options +--icon-type, -i has been replaced with options --no-bitmap-icon, -nbi to turn +the bitmap icon off. + ++++ +** 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. + ++++ +** Init file changes +If the init file ~/.emacs does not exist, Emacs will try +~/.emacs.d/init.el or ~/.emacs.d/init.elc. You can also put the shell +init file .emacs_SHELL under ~/.emacs.d. + ++++ +** 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'. + ++++ +** 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. + + +* Incompatible Editing Changes in Emacs 22.1 + ++++ +** 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. + ++++ +** 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. + ++++ +** line-move-ignore-invisible now defaults to t. + ++++ +** 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. + ++++ +** `apply-macro-to-region-lines' now operates on all lines that begin +in the region, rather than on all complete lines in the region. + ++++ +** 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. + ++++ +** In incremental search, C-w is changed. M-%, C-M-w and C-M-y are special. + +See below under "incremental search changes". + +--- +** 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. + +You can get the old behavior by typing C-x C-f M-n RET, which fetches +the actual file name into the minibuffer. + ++++ +** 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. + ++++ +** 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". + ++++ +** M-o now is the prefix key for setting text properties; +M-o M-o requests refontification. + ++++ +** You can now follow links by clicking Mouse-1 on the link. + +See below for more details. + ++++ +** 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'. + +* Editing Changes in Emacs 22.1 + ++++ +** !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. + ++++ +** The max size of buffers and integers has been doubled. +On 32bit machines, it is now 256M (i.e. 268435455). + ++++ +** 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. + ++++ +** `undo-only' does an undo which does not redo any previous undo. + ++++ +** M-SPC (just-one-space) when given a numeric argument N +converts whitespace around point to N spaces. + +--- +** 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. + +--- +** New commands to operate on pairs of open and close characters: +`insert-pair', `delete-pair', `raise-sexp'. + ++++ +** New command `kill-whole-line' kills an entire line at once. +By default, it is bound to C-S-. + ++++ +** 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. + ++++ +** 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 Indented-Text mode. + ++++ +** 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 `$$'. + ++++ +** `special-display-buffer-names' and `special-display-regexps' now +understand two new boolean pseudo-frame-parameters `same-frame' and +`same-window'. + ++++ +** The default for the paper size (variable ps-paper-type) is taken +from the locale. + +** 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. + ++++ +*** 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. + ++++ +*** 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. + +** 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, +- C-h w and C-h f new-kill-line reports: + new-kill-line is on C-k + +--- +*** 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. + ++++ +*** 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. + +** Incremental Search changes: + ++++ +*** 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. + ++++ +*** 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. + ++++ +*** 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. + ++++ +*** 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: + +--- +*** 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. + ++++ +*** 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 many cases, this will be more convenient than using +`query-replace-regexp-eval'. `\#' 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 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. + +** Local variables lists: + ++++ +*** 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. + ++++ +*** 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. + +** 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. + ++++ +*** 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. + ++++ +*** Auto Compression mode is now enabled by default. + +--- +*** 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. + ++++ +*** 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.) + ++++ +*** 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. + ++++ +*** 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. + +--- +*** 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. + ++++ +*** If the user visits a file larger than `large-file-warning-threshold', +Emacs asks for confirmation. + ++++ +*** 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. + +** Minibuffer changes: + ++++ +*** 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. + ++++ +*** 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. + ++++ +*** 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: + ++++ +*** 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 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. + ++++ +*** 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. + ++++ +*** 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. + ++++ +*** 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. + ++++ +*** 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. + ++++ +*** 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. + +** Cursor display changes: + ++++ +*** On X, MS Windows, and Mac OS, the blinking cursor's "off" state is +now controlled by the variable `blink-cursor-alist'. + ++++ +*** The X resource cursorBlink can be used to turn off cursor blinking. + ++++ +*** 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. + ++++ +*** 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. + ++++ +*** The variable `cursor-in-non-selected-windows' can now be set to any +of the recognized cursor types. + ++++ +*** On text terminals, the variable `visible-cursor' controls whether Emacs +uses the "very visible" cursor (the default) or the normal cursor. + +** 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 changes: + ++++ +*** M-o now is the prefix key for setting text properties; +M-o M-o requests refontification. + ++++ +*** 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'. + ++++ +*** font-lock: in modes like C and Lisp where the fontification assumes that +an open-paren in column 0 is always outside of any string or comment, +font-lock now highlights any such open-paren-in-column-zero in bold-red +if it is inside a string or a comment, to indicate that it can cause +trouble with fontification and/or indentation. + ++++ +*** New standard font-lock face `font-lock-preprocessor-face'. + ++++ +*** New standard font-lock face `font-lock-comment-delimiter-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. + +--- +*** The default settings for JIT stealth lock parameters are changed. +The default value for the user option jit-lock-stealth-time is now 16 +instead of 3, and the default value of jit-lock-stealth-nice is now +0.5 instead of 0.125. The new defaults should lower the CPU usage +when Emacs is fontifying in the background. + +--- +*** 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. + +** 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". + +--- +*** You can exit dialog windows and menus by typing C-g. + +--- +*** 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 pops down when 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-use-old-gtk-file-dialog' to t. Default is to use +the new dialog. + +** Mouse changes: + ++++ +*** 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. + ++++ +*** 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-sentitive 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'. + ++++ +*** 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. + +--- +*** mouse-wheels can now scroll a specific fraction of the window +(rather than a fixed number of lines) and the scrolling is `progressive'. + +--- +*** 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. + ++++ +*** Under X, mouse-wheel-mode is turned on by default. + +** 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 `Single-Byte Character Support'. + ++++ +*** 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. + ++++ +*** 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. + ++++ +*** 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. + +--- +*** 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. + +--- +*** New language environments: French, Ukrainian, Tajik, +Bulgarian, Belarusian, Ukrainian, UTF-8, Windows-1255, Welsh, Latin-6, +Latin-7, Lithuanian, Latvian, Swedish, Slovenian, Croatian, Georgian, +Italian, Russian, Malayalam, Tamil, Russian, Chinese-EUC-TW. (Set up +automatically according to the locale.) + +--- +*** New input methods: latin-alt-postfix, latin-postfix, latin-prefix, +ukrainian-computer, belarusian, bulgarian-bds, russian-computer, +vietnamese-telex, lithuanian-numeric, lithuanian-keyboard, +latvian-keyboard, welsh, georgian, rfc1345, ucs, sgml, +bulgarian-phonetic, dutch, slovenian, croatian, malayalam-inscript, +tamil-inscript. + +--- +*** New input method chinese-sisheng for inputting Chinese Pinyin +characters. + +--- +*** 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. + +--- +*** A UTF-7 coding system is available in the library `utf-7'. + +--- +*** 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 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. + +** Buffer Menu changes: + ++++ +*** 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. + +--- +*** 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. + +** Dired mode: + +--- +*** 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. + ++++ +*** 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. + ++++ +*** 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'. + ++++ +*** 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 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: + ++++ +*** 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. + ++++ +*** You can now use next-error (C-x `) and previous-error to advance to +the next/previous matching line found by M-x occur. + ++++ +*** 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. + +** 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 (rgrep only). Case sensitivitivy +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. + +--- +*** The new variables `grep-window-height' and `grep-scroll-output' override +the corresponding compilation mode settings, for grep commands only. + ++++ +*** 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. + +** 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, they might not work on +some older versions of xterm, or on some proprietary versions. + +** 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. + +* New Modes and Packages in Emacs 22.1 + +** 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, type M-x erc-select, 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, type M-x irc, and follow the prompts for +server, port, nick and initial channels. + +--- +** 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. + ++++ +** savehist saves minibuffer histories between sessions. +To use this feature, turn on savehist-mode in your `.emacs' file. + ++++ +** 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. + ++++ +** 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'. + +--- +** The new package ibuffer provides a powerful, completely +customizable replacement for buff-menu.el. + +--- +** 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. + ++++ +** 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. + +--- +** 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. + +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. + ++++ +** 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'. + ++++ +** The new package dns-mode.el add syntax highlight of DNS master files. +The key binding C-c C-s (`dns-mode-soa-increment-serial') can be used +to increment the SOA serial. + +--- +** 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'. + ++++ +** The new package flymake.el does on-the-fly syntax checking of program +source files. See the Flymake's Info manual for more details. + ++++ +** 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 new kmacro package provides a simpler user interface to +emacs' keyboard macro facilities. + +Basically, it uses two function keys (default F3 and F4) like this: +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 normal macro bindings C-x (, C-x ), and C-x e now interfaces to +the keyboard macro ring. + +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. + +--- +** 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 wdired.el package allows you to use normal editing commands on Dired +buffers to change filenames, permissions, etc... + ++++ +** 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. + ++++ +** 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 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. + +--- +** 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. + ++++ +** 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 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 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. + +** The tumme.el package allows you to easily view, tag and in other ways +manipulate image files and their thumbnails, using dired as the main interface. +Tumme provides functionality to generate simple image galleries. + ++++ +** 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 URL package (which had been part of W3) is now part of Emacs. + +--- +** `cfengine-mode' is a major mode for editing GNU Cfengine +configuration files. + ++++ +** 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 python.el package is used to edit Python and Jython programs. + +--- +** The TCL package tcl-mode.el was replaced by tcl.el. +This was actually done in Emacs-21.1, and was not documented. + +** 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 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. + +* Changes in Specialized Modes and Packages in Emacs 22.1: + +** Changes in Dired + ++++ +*** Bindings for Tumme added +Several new keybindings, all starting with the C-t prefix, have been +added to Dired. They are all bound to commands in Tumme. 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. + +** 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. + +*** `allout-view-change-hook' marked as being deprecated - use +`allout-exposure-change-hook' instead. Both are currently being used, but +`allout-view-change-hook' will be ignored in a subsequent allout version. + +*** Default command prefix changed to "\C-c " (control-c space), to avoid +intruding on user's keybinding space. Customize the +`allout-command-prefix' variable to your preference. + +*** Allout now uses text overlay's `invisible' property (and others) 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. + +*** Many substantial fixes and refinements, including: + + - repaired inhibition of inadvertent edits to concealed text + - repaired retention of topic body hanging indent upon topic depth shifts + - refuse to create "containment discontinuities", where a + topic is shifted deeper than the offspring-depth of its' container + - 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. + - new hook `allout-mode-deactivate-hook', for coordinating with + deactivation of allout-mode. + - 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. + - 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 minor tweaks and fixes. many internal fixes and + refinements of docstrings. + - version number incremented to 2.2 + +** The variable `woman-topic-at-point' was 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. + +--- +** 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 a file `.emacs_NAME' (where NAME is the name of the Scheme interpreter) +exists in the user's home directory or in ~/.emacs.d, 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'. + +--- +** 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. + ++++ +** In Outline mode, `hide-body' no longer hides lines at the top +of the file that precede the first header line. + ++++ +** Telnet now prompts you for a port number with C-u M-x telnet. + +--- +** The terminal emulation code in term.el has been improved; it can +run most curses applications now. + ++++ +** 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. + ++++ +** 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. + +--- +** Commands `winner-redo' and `winner-undo', from winner.el, are now +bound to C-c and C-c , respectively. This is an +incompatible change. + +--- +** `global-whitespace-mode' is a new alias for `whitespace-global-mode'. + ++++ +** M-x compare-windows now can automatically skip non-matching text to +resync points in both windows. + ++++ +** 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. + +--- +** PO translation files are decoded according to their MIME headers +when Emacs visits them. + +** Info mode changes: + ++++ +*** A numeric prefix argument of `info' selects an Info buffer +with the number appended to the `*info*' buffer name (e.g. "*info*<2>"). + ++++ +*** isearch in Info uses Info-search and searches through multiple nodes. + +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-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-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-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. + +--- +*** http and ftp links in Info are now operational: they look like cross +references and following them calls `browse-url'. + ++++ +*** 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. + +--- +*** 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. + ++++ +*** The default value for `Info-scroll-prefer-subnodes' is now nil. + +--- +*** `Info-index' offers completion. + +** 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. + ++++ +** 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. + +*** 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- or C-c ) respectively. These +commands delete entire blocks of whitespace with a single +key-sequence. [N.B. "DEL" is the 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 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. + +*** 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. + +*** 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. + +*** 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. + +*** 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 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. + +*** 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. + +*** Added toggle for syntactic indentation. +The function `c-toggle-syntactic-indentation' can be used to toggle +syntactic indentation. + +** 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. + +** Fortran mode changes: + +--- +*** 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. + ++++ +*** 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'. + +--- +*** 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. + +--- +*** The new function `f90-backslash-not-special' can be used to change +the syntax of backslashes in F90 buffers. + +--- +** 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. + ++++ +** Prolog mode has a new variable `prolog-font-lock-keywords' +to support use of font-lock. + +** 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: + ++++ +*** 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. + ++++ +*** New major mode Doctex mode, for *.dtx files. + +** 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. + +*** If the new variable `bibtex-parse-keys-fast' is non-nil, +use fast but simplified algorithm for parsing BibTeX keys. + +*** If the new variable `bibtex-autoadd-commas' is non-nil, +automatically add missing commas at end of BibTeX fields. + +*** The new variable `bibtex-autofill-types' contains a list of entry +types for which fields are filled automatically (if possible). + +*** The new command `bibtex-complete' completes word fragment before +point according to context (bound to M-tab). + +*** 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). + +*** In BibTeX mode the command `fill-paragraph' (M-q) fills +individual fields of a BibTeX entry. + +*** 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. + +*** The new command `bibtex-copy-summary-as-kill' pushes summary +of BibTeX entry to kill ring (bound to C-c C-t). + +*** 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. + +** 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'. + +** GUD changes: + ++++ +*** 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). + +--- +*** GUD mode has its own tool bar for controlling execution of the inferior +and other common debugger commands. + ++++ +*** 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. + +*** 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. + +*** 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). + +*** 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. + +*** Added 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. + +** 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. + +--- +** 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. + ++++ +** 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 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 command line option --no-desktop + +--- +*** New hooks: + - desktop-after-read-hook run after a desktop is loaded. + - desktop-no-desktop-file-hook run when no desktop file is found. + +--- +** 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. + +** 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 + +**** 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. + +**** 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. + +**** 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. + +**** New language Lua. + +All functions are tagged. + +**** 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 language PHP. + +Functions, classes and defines are tags. If the --members option is +specified to etags, variables are tags also. + +**** New default keywords for TeX. + +The new keywords are def, newcommand, renewcommand, newenvironment and +renewenvironment. + +**** In C and derived languages, etags creates tags for #undef + +*** 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. + +** VC Changes + ++++ +*** 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. + ++++ +*** 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. + ++++ +*** New backends for Subversion and Meta-CVS. + ++++ +*** 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. + ++++ +** 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'. + +** Rmail changes: + +--- +*** Rmail now displays 5-digit message ids in its summary buffer. + +*** 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. + ++++ +*** 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. + +** 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.2. There have been major changes since +version 5.0.2; see MH-E-NEWS for details. + +** Calendar changes: + ++++ +*** You can now use < and >, instead of C-x < and C-x >, to scroll +the calendar left or right. (The old key bindings still work too.) + ++++ +*** There is a new calendar package, icalendar.el, that can be used to +convert Emacs diary entries to/from the iCalendar 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 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 new variable `calendar-minimum-window-height' affects the +window generated by the function `generate-calendar-window'. + +--- +*** 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 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'. + ++++ +*** 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 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. + ++++ +** Speedbar changes: + +*** Speedbar items can now be selected by clicking mouse-1, based on +the `mouse-1-click-follows-link' mechanism. + +*** SPC and DEL are no longer bound to scroll up/down in the speedbar +keymap. + +*** 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-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'. + +*** The new user option `speedbar-use-tool-tips-flag', if non-nil, +means to display tool-tips for speedbar items. + +*** 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. + +--- +** 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'. + +** 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. + +--- +** 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. + ++++ +** `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. + +--- +** `partial-completion-mode' now handles partial completion on directory names. + +--- +** 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. + +** 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. + +--- +** LDAP support now defaults to ldapsearch from OpenLDAP version 2. + ++++ +** 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'. + +--- +** 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. + +--- +** 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. + +** battery.el changes: + +--- +*** display-battery-mode replaces display-battery. + +--- +*** battery.el now works on recent versions of OS X. + +--- +** 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'. + +--- +** 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. + +--- +** cplus-md.el has been deleted. + +** 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) + +** 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. + + +* 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. + ++++ +** 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. + +--- +** 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. + +--- +** Tooltips now work on MS Windows. + +See the Emacs 21.1 NEWS entry for tooltips for details. + +--- +** 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. + +--- +** Different shaped mouse pointers are supported on MS Windows. + +The mouse pointer changes shape depending on what is under the pointer. + +--- +** 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. + +--- +** 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. + +--- +** 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. + +--- +** 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. + +--- +** 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 + +** 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. + +--- +** The variables post-command-idle-hook and post-command-idle-delay have + been removed. Use run-with-idle-timer instead. + ++++ +** `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'.) + ++++ +** 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. + +--- +** Support for Mocklisp has been removed. + ++++ +** The variable `memory-full' now remains t until +there is no longer a shortage of memory. + +** When Emacs receives a USR1 or USR2 signal, this generates +an input event: usr1-signal or usr2-signal. + +* Lisp Changes in Emacs 22.1 + +** General Lisp changes: + +*** 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 `eql' is now available without requiring the CL package. + ++++ +*** `makehash' is now obsolete. Use `make-hash-table' instead. + ++++ +*** `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 `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 `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 `rassq-delete-all'. + +(rassq-delete-all VALUE ALIST) deletes, from ALIST, each element whose +CDR is `eq' to the specified value. + ++++ +*** 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. + ++++ +*** Minor change in the function `format'. + +Some flags that were accepted but not implemented (such as "*") are no +longer accepted. + ++++ +*** 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'. + ++++ +*** 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. + ++++ +*** 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'. + ++++ +*** 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'.) + ++++ +*** 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 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 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.). + ++++ +*** 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. + +*** `list-faces-display' takes an optional argument, REGEXP. + +If it is non-nil, the function lists only faces matching this regexp. + ++++ +*** 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 a t or nil. + ++++ +*** 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. + +** 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. + +*** 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. + ++++ +*** The macro `define-obsolete-variable-alias' combines `defvaralias' and +`make-obsolete-variable'. + +** 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: + ++++ +*** The escape sequence \s is now interpreted as a SPACE character. + +Exception: In a character constant, if it is followed by a `-' in a +character constant (e.g. ?\s-A), it is still interpreted as the super +modifier. In strings, \s is always interpreted as a space. + ++++ +*** 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. + ++++ +*** `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. + ++++ +*** New function `string-to-multibyte' converts a unibyte string to a +multibyte string with the same individual character codes. + ++++ +*** New function `substring-no-properties' returns a substring without +text properties. + ++++ +*** The new function `assoc-string' replaces `assoc-ignore-case' and +`assoc-ignore-representation', which are still available, but have +been declared obsolete. + ++++ +*** New syntax: \uXXXX and \UXXXXXXXX specify Unicode code points in hex. +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). Also available for characters. + ++++ +** 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. + ++++ +*** 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. + ++++ +*** New function `line-number-at-pos' returns the line number of a position. + +It an optional buffer position argument that defaults to point. + ++++ +*** `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. + ++++ +*** 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. + +** Text modification: + ++++ +*** 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: + +--- +*** `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 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. + +*** 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. + +--- +*** rx.el has new corresponding `symbol-end' and `symbol-start' elements. + ++++ +*** `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. + ++++ +*** 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' can 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. + ++++ +** 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 macro `with-syntax-table' no longer copies the syntax table. + ++++ +*** 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 new function `syntax-ppss' provides an efficient way to find the +current syntactic context at point. + +** File operation changes: + ++++ +*** New vars `exec-suffixes' and `load-suffixes' used when +searching for an executable or an Emacs Lisp file. + ++++ +*** The new primitive `set-file-times' sets a file's access and +modification times. Magic file name handlers can handle this +operation. + ++++ +*** 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. + ++++ +*** `buffer-auto-save-file-format' is the new name for what was +formerly called `auto-save-file-format'. It is now a permanent local. + ++++ +*** 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. + ++++ +*** `visited-file-modtime' and `calendar-time-from-absolute' now return +a list of two integers, instead of a cons. + ++++ +*** `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. + ++++ +*** 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. + ++++ +*** 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). + ++++ +*** 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 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. + +** Input changes: + ++++ +*** 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. + +--- +*** 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. + ++++ +*** (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. + +** 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. + ++++ +** Enhancements to keymaps. + +*** 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). + +*** 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 + "" 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. + +*** 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. + +*** Dense keymaps now handle inheritance correctly. + +Previously a dense keymap would hide all of the simple-char key +bindings of the parent keymap. + +*** `define-key-after' now accepts keys longer than 1. + +*** 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. + +*** (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. + +*** The definition of a key-binding passed to define-key can use XEmacs-style +key-sequences, such as [(control a)]. +** Abbrev changes: + ++++ +*** 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. + ++++ +*** `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. + ++++ +** Enhancements to process support + +*** 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. + +*** Function `signal-process' now accepts a process object or process +name in addition to a process id to identify the signaled process. + +*** 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 `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. + +*** 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. + +*** 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'. + +*** 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. + +- 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'. + +*** 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. + +*** 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. + +*** `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 `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. + +*** 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: + ++++ +*** New function `window-body-height'. + +This is like `window-height' but does not count the mode line or the +header line. + ++++ +*** 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. + ++++ +*** 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. + ++++ +*** The new function `adjust-window-trailing-edge' moves the right +or bottom edge of a window. It does not move other window edges. + ++++ +** Customizable fringe bitmaps + +*** 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. + +To change a built-in bitmap, do (require 'fringe) and use the symbol +identifying the bitmap such as `left-truncation' or `continued-line'. + +*** 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. + +*** 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 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. + +** Mouse pointer features: + ++++ (lispref) +??? (man) +*** 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: + ++++ +*** Mouse events for clicks on window fringes now specify `left-fringe' +or `right-fringe' as the area. + ++++ +*** 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. + ++++ +*** `posn-point' now returns buffer position for non-text area events. + ++++ +*** Function `mouse-set-point' now works for events outside text area. + ++++ +*** New function `posn-area' returns window area clicked on (nil means +text area). + ++++ +*** Mouse events include actual glyph column and row for all event types +and all areas. + ++++ +*** New function `posn-actual-col-row' returns the actual glyph coordinates +of the mouse event position. + ++++ +*** 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. + ++++ +*** 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 + ++++ +*** 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 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. + +--- +*** 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. + +--- +*** 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: + ++++ +*** `set-auto-mode' now gives the interpreter magic line (if present) +precedence over the file name. Likewise an ` ) + (if (boundp 'foo) 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. + +** 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. + +--- +*** `set-buffer-file-coding-system' now takes an additional argument, +NOMODIFY. If it is non-nil, it means don't mark the buffer modified. + ++++ +*** 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 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. + +** 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. + +** 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. + +** 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. + +** 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. + +* 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. + + + +---------------------------------------------------------------------- +Copyright information: + +Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + Permission is granted to anyone to make or distribute verbatim copies + of this document as received, in any medium, provided that the + copyright notice and this permission notice are preserved, + thus giving the recipient permission to redistribute in turn. + + Permission is granted to distribute modified versions + of this document, or of portions of it, + under the above conditions, provided also that they + carry prominent notices stating who last changed them. + +Local variables: +mode: outline +paragraph-separate: "[ ]*$" +end: + +arch-tag: 1aca9dfa-2ac4-4d14-bebf-0007cee12793